**********************************************************************************
* Since I felt the need to release something into the public domain considering  *
* the amount of snippets I've found useful, I thought my version of the score    *
* command would be a good starting point. The one that comes with stock ROM is   *
* just horrible, it is useful for completely newbie coders (like me) to replace  *
* the stock score command or just use as an example of how to do it.             *
*                								 *
* Note that you will more than likely have to remove a number of fields to get   *
* this to work correctly in stock ROM. In my MUD I have pre-titles, clan ranks,  *
* and a subdue system. Apart from removing those fields, if you are using stock  *
* ROM just find "void do_score" in act_info.c and replace with this one. If you  *
* do not have Lopes ColoUr code installed, then remove any instances of the      *
* colour codes (any { followed by one letter, e.g {Y ).                          *
*                                                                                *
* I take no special credit for this code, since it is basically just formatting  *
* and there is nothing new. Thanks go to the original creators of the score      *
* command. If you wish to use this score command... feel free! I dont require    *
* any emails, additions to snippets or thank-you files, or anything. Enjoy!      *
*                                                                                *
* Aarelan, Head Coder of The Winds of Loran.                                     *
**********************************************************************************

/* The complete score command looks like this:
=================================================================
Aarelan, Leader of the Church of Pelor.
=================================================================
Level: 60   Age: 17   Played: 12 hours.
Title: Arch-Priest   Clan: Immortal  Clan Rank: Head Coder
=================================================================
Race: Half-Elf  Sex: male  Class: Cleric
Str: 25(25)  Int: 25(25)  Wis: 25(25)  Dex: 25(25)  Con: 25(25)
=================================================================
HP: 32548 of 32548   MANA: 31353 of 31353   MOVE: 32046 of 32046
Practices: 681  Trains: 344
=================================================================
Items: 24 of 1000  Weight: 99 of 1000000 pounds.
Gold: 43  Silver: 2345
=================================================================
Alignment: 996  You are angelic.
=================================================================
Wimpy: 0 hit points.
You are standing.
=================================================================
Armor: pierce: -65  bash: -67  slash: -67  magic: -51
You are very well-armored against piercing.
You are very well-armored against bashing.
You are very well-armored against slashing.
You are very well-armored against magic.
=================================================================
Holy Light: on
You will subdue in combat.
Hitroll: 506  Damroll: 509
*/



void do_score (CHAR_DATA * ch, char *argument)
{
    char buf[MAX_STRING_LENGTH];
    int i;

    sprintf (buf,
             "{B================================================================={x\n\r");
    send_to_char (buf, ch);

    sprintf (buf,
             "{G%s%s.{x\n\r",
             ch->name,
             IS_NPC (ch) ? "" : ch->pcdata->title);
    send_to_char (buf, ch);

    sprintf (buf,
             "{B================================================================={x\n\r");
    send_to_char (buf, ch);

    sprintf (buf, "Level: {Y%d{x   Age: {Y%d{x   Played: {Y%d{x hours.\n\r",
             ch->level, get_age (ch),
             (ch->played + (int) (current_time - ch->logon)) / 3600);
    send_to_char (buf, ch);

    if (get_trust (ch) != ch->level)
    {
        sprintf (buf, "You are trusted at level %d.\n\r", get_trust (ch));
        send_to_char (buf, ch);
    }

    sprintf (buf, "Title: {Y%s{x  Clan: {Y%s{x  Clan Rank: {Y%s{x\n\r",
	     IS_NPC (ch) ? "" : ch->pcdata->pretit,
             clan_table[ch->clan].name, player_rank(ch) );
    send_to_char (buf, ch);

    sprintf (buf,
             "{B================================================================={x\n\r");
    send_to_char (buf, ch);

    sprintf (buf, "Race: {Y%s{x  Sex: {Y%s{x  Class: {Y%s{x\n\r",
             race_table[ch->race].name,
             ch->sex == 0 ? "sexless" : ch->sex == 1 ? "male" : "female",
             IS_NPC (ch) ? "mobile" : class_table[ch->class].name);
    send_to_char (buf, ch);


    sprintf (buf,
             "Str: {Y%d{x({R%d{x)  Int: {Y%d{x({R%d{x)  Wis: {Y%d{x({R%d{x)  Dex: {Y%d{x({R%d{x)  Con: {Y%d{x({R%d{x)\n\r",
             ch->perm_stat[STAT_STR],
             get_curr_stat (ch, STAT_STR),
             ch->perm_stat[STAT_INT],
             get_curr_stat (ch, STAT_INT),
             ch->perm_stat[STAT_WIS],
             get_curr_stat (ch, STAT_WIS),
             ch->perm_stat[STAT_DEX],
             get_curr_stat (ch, STAT_DEX),
             ch->perm_stat[STAT_CON], get_curr_stat (ch, STAT_CON));
    send_to_char (buf, ch);

    sprintf (buf,
             "{B================================================================={x\n\r");
    send_to_char (buf, ch);

    sprintf (buf,
             "HP: {Y%d{x of {R%d{x   MANA: {Y%d{x of {R%d{x   MOVE: {Y%d{x of {R%d{x\n\r",
             ch->hit, ch->max_hit,
             ch->mana, ch->max_mana, ch->move, ch->max_move);
    send_to_char (buf, ch);

    sprintf (buf,
             "Practices: {Y%d{x  Trains: {Y%d{x\n\r",
             ch->practice, ch->train);
    send_to_char (buf, ch);

    sprintf (buf,
             "{B================================================================={x\n\r");
    send_to_char (buf, ch);

    sprintf (buf,
             "Items: {Y%d{x of {R%d{x  Weight: {Y%ld{x of {Y%d{x pounds.\n\r",
             ch->carry_number, can_carry_n (ch),
             get_carry_weight (ch) / 10, can_carry_w (ch) / 10);
    send_to_char (buf, ch);

    sprintf (buf,
             "Gold: {Y%ld{x  Silver: {W%ld{x\n\r",
             ch->gold, ch->silver);
    send_to_char (buf, ch);

    sprintf (buf,
             "{B================================================================={x\n\r");
    send_to_char (buf, ch);

    /* RT shows exp to level */
    if (!IS_NPC (ch) && ch->level < LEVEL_HERO)
    {
        sprintf (buf,
                 "Experience: {Y%d{x   Next level: {Y%d{x\n\r",
                 ch->exp,
                 ((ch->level + 1) * exp_per_level (ch, ch->pcdata->points) -
                  ch->exp));
        send_to_char (buf, ch);
    }

    if (ch->level >= 10)
    {
        sprintf (buf, "Alignment: {Y%d{x  ", ch->alignment);
        send_to_char (buf, ch);
    }

    send_to_char ("You are ", ch);
    if (ch->alignment > 900)
        send_to_char ("{Yangelic.{x\n\r", ch);
    else if (ch->alignment > 700)
        send_to_char ("{Ysaintly.{x\n\r", ch);
    else if (ch->alignment > 350)
        send_to_char ("{Ygood.{x\n\r", ch);
    else if (ch->alignment > 100)
        send_to_char ("{Wkind.{x\n\r", ch);
    else if (ch->alignment > -100)
        send_to_char ("{Wneutral.{x\n\r", ch);
    else if (ch->alignment > -350)
        send_to_char ("{Wmean.{x\n\r", ch);
    else if (ch->alignment > -700)
        send_to_char ("{Revil.{x\n\r", ch);
    else if (ch->alignment > -900)
        send_to_char ("{Rdemonic.{x\n\r", ch);
    else
        send_to_char ("{Rsatanic.{x\n\r", ch);
    
    sprintf (buf,
             "{B================================================================={x\n\r");
    send_to_char (buf, ch);
    
    sprintf (buf, "Wimpy: {Y%d{x hit points.\n\r", ch->wimpy);
    send_to_char (buf, ch);

    if (!IS_NPC (ch) && ch->pcdata->condition[COND_DRUNK] > 10)
        send_to_char ("You are drunk.\n\r", ch);
    if (!IS_NPC (ch) && ch->pcdata->condition[COND_THIRST] == 0)
        send_to_char ("You are thirsty.\n\r", ch);
    if (!IS_NPC (ch) && ch->pcdata->condition[COND_HUNGER] == 0)
        send_to_char ("You are hungry.\n\r", ch);

    switch (ch->position)
    {
        case POS_DEAD:
            send_to_char ("You are DEAD!!\n\r", ch);
            break;
        case POS_MORTAL:
            send_to_char ("You are mortally wounded.\n\r", ch);
            break;
        case POS_INCAP:
            send_to_char ("You are incapacitated.\n\r", ch);
            break;
        case POS_STUNNED:
            send_to_char ("You are stunned.\n\r", ch);
            break;
        case POS_SUBDUE:
            send_to_char ("You have been subdued!\n\r", ch);
            break;
        case POS_SLEEPING:
            send_to_char ("You are sleeping.\n\r", ch);
            break;
        case POS_RESTING:
            send_to_char ("You are resting.\n\r", ch);
            break;
        case POS_SITTING:
            send_to_char ("You are sitting.\n\r", ch);
            break;
        case POS_STANDING:
            send_to_char ("You are standing.\n\r", ch);
            break;
        case POS_FIGHTING:
            send_to_char ("You are fighting.\n\r", ch);
            break;
    }

    sprintf (buf,
             "{B================================================================={x\n\r");
    send_to_char (buf, ch);

    /* print AC values */
    if (ch->level >= 25)
    {
        sprintf (buf, "Armor: pierce: {Y%d{x  bash: {Y%d{x  slash: {Y%d{x  magic: {Y%d{x\n\r",
                 GET_AC (ch, AC_PIERCE),
                 GET_AC (ch, AC_BASH),
                 GET_AC (ch, AC_SLASH), GET_AC (ch, AC_EXOTIC));
        send_to_char (buf, ch);
    }

    for (i = 0; i < 4; i++)
    {
        char *temp;

        switch (i)
        {
            case (AC_PIERCE):
                temp = "piercing";
                break;
            case (AC_BASH):
                temp = "bashing";
                break;
            case (AC_SLASH):
                temp = "slashing";
                break;
            case (AC_EXOTIC):
                temp = "magic";
                break;
            default:
                temp = "error";
                break;
        }

        send_to_char ("You are ", ch);

        if (GET_AC (ch, i) >= 200)
            sprintf (buf, "hopelessly vulnerable to %s.\n\r", temp);
        else if (GET_AC (ch, i) >= 175)
            sprintf (buf, "defenseless against %s.\n\r", temp);
        else if (GET_AC (ch, i) >= 150)
            sprintf (buf, "barely protected from %s.\n\r", temp);
        else if (GET_AC (ch, i) >= 125)
            sprintf (buf, "slightly armored against %s.\n\r", temp);
        else if (GET_AC (ch, i) >= 75)
            sprintf (buf, "somewhat armored against %s.\n\r", temp);
        else if (GET_AC (ch, i) >= 0)
            sprintf (buf, "armored against %s.\n\r", temp);
        else if (GET_AC (ch, i) >= -50)
            sprintf (buf, "well-armored against %s.\n\r", temp);
        else if (GET_AC (ch, i) >= -100)
            sprintf (buf, "very well-armored against %s.\n\r", temp);
        else if (GET_AC (ch, i) >= -150)
            sprintf (buf, "heavily armored against %s.\n\r", temp);
        else if (GET_AC (ch, i) >= -200)
            sprintf (buf, "superbly armored against %s.\n\r", temp);
        else if (GET_AC (ch, i) >= -250)
            sprintf (buf, "almost invulnerable to %s.\n\r", temp);
        else
            sprintf (buf, "divinely armored against %s.\n\r", temp);

        send_to_char (buf, ch);

    }

    sprintf (buf,
             "{B================================================================={x\n\r");
    send_to_char (buf, ch);

    /* RT wizinvis and holy light */
    if (IS_IMMORTAL (ch))
    {
        send_to_char ("Holy Light: ", ch);
        if (IS_SET (ch->act, PLR_HOLYLIGHT))
            send_to_char ("{Yon{x", ch);
        else
            send_to_char ("{Roff{x", ch);

        if (ch->invis_level)
        {
            sprintf (buf, "  Invisible: level {Y%d{x", ch->invis_level);
            send_to_char (buf, ch);
        }

        if (ch->incog_level)
        {
            sprintf (buf, "  Incognito: level {Y%d{x", ch->incog_level);
            send_to_char (buf, ch);
        }
        send_to_char ("\n\r", ch);
    }

    if(!IS_SET(ch->act, PLR_SUBDUE))
    {
     send_to_char("{wYou will {Rkill{w in combat.{W\n\r", ch );
    }
    else
    {
     send_to_char("{wYou will {Ysubdue{w in combat.{W\n\r", ch );
    }

    if (ch->level >= 15)
    {
        sprintf (buf, "Hitroll: {Y%d{x  Damroll: {Y%d{x\n\r",
                 GET_HITROLL (ch), GET_DAMROLL (ch));
        send_to_char (buf, ch);
    }
   
    if (IS_SET (ch->comm, COMM_SHOW_AFFECTS))
        do_function (ch, &do_affects, "");
}