legend/
legend/area/
legend/player/
/***************************************************************************
 *  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
 *  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
 *                                                                         *
 *  Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael          *
 *  Chastain, Michael Quan, and Mitchell Tse.                              *
 *                                                                         *
 *  In order to use any part of this Merc Diku Mud, you must comply with   *
 *  both the original Diku license in 'license.doc' as well the Merc       *
 *  license in 'license.txt'.  In particular, you may not remove either of *
 *  these copyright notices.                                               *
 *                                                                         *
 *  Much time and thought has gone into this software and you are          *
 *  benefitting.  We hope that you share your changes too.  What goes      *
 *  around, comes around.                                                  *
 ***************************************************************************/
/***************************************************************************
 *  God Wars Mud copyright (C) 1994, 1995, 1996 by Richard Woolcock        *
 *                                                                         *
 *  Legend of Chrystancia copyright (C) 1999, 2000, 2001 by Matthew Little *
 *  This mud is NOT to be copied in whole or in part, or to be run without *
 *  the permission of Matthew Little. Nobody else has permission to        *
 *  authorise the use of this code.                                        *
 ***************************************************************************/


#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif

#include <ctype.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <assert.h>
#include <unistd.h>
#include <stdarg.h>
#include <limits.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>

#include "merc.h"

void obj_score args ((CHAR_DATA * ch, OBJ_DATA * obj));

/* Nothing in here yet */

void do_newbieify (CHAR_DATA * ch, char *argument)
{
   char arg1[MAX_INPUT_LENGTH];
   char arg2[MAX_INPUT_LENGTH];
   char arg3[MAX_INPUT_LENGTH];
   char buf[MAX_STRING_LENGTH];
   CHAR_DATA *victim;
   int value;
   sprintf (buf, "%s: Newbieify %s", ch->name, argument);
   if (ch->level < NO_WATCH)
      do_watching (ch, buf);

   smash_tilde (argument);
   argument = one_argument (argument, arg1);
   argument = one_argument (argument, arg2);
   argument = one_argument (argument, arg3);


   value = is_number (arg3) ? atoi (arg3) : 0;

   if (arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0')
   {
      send_to_char ("Syntax: newbieify <victim> <field> <value>\n\r", ch);
      send_to_char ("\n\r", ch);
      send_to_char ("Field being one of:\n\r", ch);
      send_to_char ("Legend (Legend Status)\n\r", ch);
      send_to_char ("Quickening (quickening level)\n\r",ch);
      send_to_char ("QP (Earned Quest Points)\n\r", ch);
      send_to_char ("EEXP (Earned Experience Points)\n\r", ch);
      send_to_char ("Exp (Experience points in hand)\n\r", ch);
      send_to_char ("Value being 0-9 (Legend only)\n\r", ch);
      send_to_char ("Or 0 - whatever (QP / Exp)\n\r", ch);
      return;
   }

   if ((victim = get_char_world (ch, arg1)) == NULL)
   {
      send_to_char ("They aren't here.\n\r", ch);
      return;
   }

   if (IS_SET (victim->act, PLR_GODLESS) && ch->level < NO_GODLESS)
   {
      send_to_char ("You failed.\n\r", ch);
      return;
   }

    if ( !str_cmp( arg2, "quickening" ) )
    {
	if ( IS_NPC(victim) )
	{
	    send_to_char( "Not on NPC's.\n\r", ch );
	    return;
	}

	if ( value < 0 || value > 1000 )
	{
	    send_to_char( "Range is 0 to 1000.\n\r", ch );
	    return;
	}

	if (IS_HIGHJUDGE(ch)) 
	{
		victim->quickening[1] = value;
		send_to_char("Quickening set.\n\r",ch);}
	else
		send_to_char( "Sorry, no can do...\n\r", ch );
	return;
    }

   if (!str_cmp (arg2, "legend"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 10)
      {
	 send_to_char ("Legend Status range is 0 to 10.\n\r", ch);
	 return;
      }

      if (IS_HIGHJUDGE (ch))
      {
	 victim->lstatus = value;
	 send_to_char ("Legend status set.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "qp"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 3000000)
      {
	 send_to_char ("Quest range is 0 to 3000000.\n\r", ch);
	 return;
      }

      if (IS_HIGHJUDGE (ch))
      {
	 victim->pcdata->score[SCORE_QUEST] = value;
	 send_to_char ("Earned Quest Point value set.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "exp"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 1000000000)
      {
	 send_to_char ("Exp range is 0 to 1000000000.\n\r", ch);
	 return;
      }

      if (IS_HIGHJUDGE (ch))
      {
	 victim->exp = value;
	 send_to_char ("Experience set.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "eexp"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0)
      {
	 send_to_char ("Exp range is 0 to 1000000000.\n\r", ch);
	 return;
      }

      if (IS_HIGHJUDGE (ch))
      {
	 victim->pcdata->score[SCORE_TOTAL_XP] = value;
	 send_to_char ("Earned Experience set.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

}

void do_uniscore (CHAR_DATA * ch, char *argument)
{
   int outcast = 0;
   int online = 0;
   int total = 0;
   int a_c = char_ac (ch);
   float chtier;
   float chtierexp;
   int percent;
   int nexttier;
   char buf[MAX_STRING_LENGTH];
   char hit_str[MAX_INPUT_LENGTH];
   char mana_str[MAX_INPUT_LENGTH];
   char move_str[MAX_INPUT_LENGTH];
   char mhit_str[MAX_INPUT_LENGTH];
   char mmana_str[MAX_INPUT_LENGTH];
   char mmove_str[MAX_INPUT_LENGTH];
   char exp_str[MAX_INPUT_LENGTH];
   int days;
   int hours;
   int minutes;
   int seconds;

   online = (int) (current_time - ch->logon);
   total = ch->played + online;

   sprintf (hit_str, "%d", ch->hit);
   COL_SCALE (hit_str, ch, ch->hit, ch->max_hit);
   sprintf (mana_str, "%d", ch->mana);
   COL_SCALE (mana_str, ch, ch->mana, ch->max_mana);
   sprintf (move_str, "%d", ch->move);
   COL_SCALE (move_str, ch, ch->move, ch->max_move);
   sprintf (exp_str, "%lli", ch->exp);
   COL_SCALE (exp_str, ch, ch->exp, 1000);
   sprintf (mhit_str, "%d", ch->max_hit);
   ADD_COLOUR (ch, mhit_str, L_CYAN);
   sprintf (mmana_str, "%d", ch->max_mana);
   ADD_COLOUR (ch, mmana_str, L_CYAN);
   sprintf (mmove_str, "%d", ch->max_move);
   ADD_COLOUR (ch, mmove_str, L_CYAN);

   if (IS_NPC (ch))
      return;

   if (!IS_NPC (ch)
       && (IS_EXTRA (ch, EXTRA_OSWITCH) || IS_HEAD (ch, LOST_HEAD)))
   {
      obj_score (ch, ch->pcdata->chobj);
      return;
   }
   loc_to_char (ch);

   sprintf (buf, "  #wName:#n %s%-15s#n.\n\r", ch->name,
	    IS_NPC (ch) ? "" : ch->pcdata->title);
   send_to_char (buf, ch);
   if (!IS_NPC (ch))
   {
      sprintf (buf, "  #wCreated:#n %s\n\r", ch->createtime);
      send_to_char (buf, ch);
   }
   if (!IS_NPC (ch))
      birth_date (ch, TRUE);
   if (!IS_NPC (ch) && IS_EXTRA (ch, EXTRA_PREGNANT))
      birth_date (ch, FALSE);

   days = (total / 86400);
   hours = ((total / 3600) % 24);
   minutes = ((total / 60) % 60);
   seconds = (total % 60);
   sprintf (buf,
	    "  #wPlayed:#n %d day%s, %d hour%s, %d minute%s, and %d second%s\n\r",
	    days, days == 1 ? "" : "s", hours, hours == 1 ? "" : "s", minutes,
	    minutes == 1 ? "" : "s", seconds, seconds == 1 ? "" : "s");
   send_to_char (buf, ch);

   hours = ((online / 3600));
   minutes = ((online / 60) % 60);
   seconds = (online % 60);
   sprintf (buf,
	    "  #wThis Session:#n %d hour%s, %d minute%s, and %d second%s\n\r",
	    hours, hours == 1 ? "" : "s", minutes, minutes == 1 ? "" : "s",
	    seconds, seconds == 1 ? "" : "s");
   send_to_char (buf, ch);

   if (get_trust (ch) != ch->level)

   {
      divide7_to_char (ch);

      sprintf (buf, "  #wTrust:#n %d.\n\r", get_trust (ch));
      send_to_char (buf, ch);
   }
   divide7_to_char (ch);

   sprintf (buf,
	    "  #wHP:#n %s/%s.  #wMANA:#n %s/%s.  #wMOVE:#n %s/%s.  #wPrimal:#n %d.\n\r",
	    hit_str, mhit_str, mana_str, mmana_str, move_str, mmove_str,
	    ch->practice);
   send_to_char (buf, ch);

   sprintf (buf,
	    "  #wCarrying:#n %d/%d items.  #wCarried Weight:#n %d/%d kg.\n\r",
	    ch->carry_number, can_carry_n (ch), ch->carry_weight,
	    can_carry_w (ch));
   send_to_char (buf, ch);

   sprintf (buf,
	    "  #wStr:#n %d (%d)  #wInt: #n%d (%d)  #wWis:#n %d (%d)  #wDex:#n %d (%d)  #wCon:#n %d (%d).\n\r",
	    get_curr_str (ch), ch->pcdata->perm_str, get_curr_int (ch),
	    ch->pcdata->perm_int, get_curr_wis (ch), ch->pcdata->perm_wis,
	    get_curr_dex (ch), ch->pcdata->perm_dex, get_curr_con (ch),
	    ch->pcdata->perm_con);
   send_to_char (buf, ch);

   divide7_to_char (ch);

   sprintf (buf, "  #wEXP:#n %lli.  #wGold:#n %d.  #wQuest Points: #n%d\n\r",
	    ch->exp, ch->gold, ch->pcdata->quest);
   send_to_char (buf, ch);

   sprintf (buf,
	    "  #wAutoexit:#n [%s]  #wAutoloot:#n    [%s]  #wAutosac:#n   [%s]  #wAutogold#n   [%s]  #wShields#n [%s]\n\r",
	    (!IS_NPC (ch) && IS_SET (ch->act, PLR_AUTOEXIT)) ? "X" : " ",
	    (!IS_NPC (ch) && IS_SET (ch->act, PLR_AUTOLOOT)) ? "X" : " ",
	    (!IS_NPC (ch)
	     && IS_SET (ch->act, PLR_AUTOSAC)) ? "X" : " ", (!IS_NPC (ch)
							     &&
							     IS_SET (ch->more,
								     PLR_AUTOGOLD))
	    ? "X" : " ", (!IS_NPC (ch)
			  && IS_SET (ch->more, MORE_SHIELDS)) ? "X" : " ");
   send_to_char (buf, ch);
   sprintf (buf,
	    "  #wNo Summon:#n[%s]  #wNo Transport:#n[%s]  #wNo Desc:#n   [%s]  #wAnsiColor:#n [%s]  #wBackup#n  [%s]\n\r",
	    !IS_SET (ch->immune, IMM_SUMMON) ? "X" : " ", !IS_SET (ch->immune,
								   IMM_TRANSPORT)
	    ? "X" : " ", IS_SET (ch->more, MORE_NODESC) ? "X" : " ",
	    IS_SET (ch->act, PLR_ANSI) ? "X" : " ",
	    IS_SET (ch->act, PLR_AUTOBACKUP) ? "X" : " ");
   stc (buf, ch);
   divide7_to_char (ch);
   sprintf (buf,
	    "  #wMCCP:#n     [%s]  #wMXP:#n         [%s]  #wUsing MXP:#n [%s]\n\r",
	    ch->desc->out_compress ? "X" : " ", ch->desc->mxp ? "X" : " ",
	    USE_MXP (ch) ? "X" : " ");
   stc (buf, ch);

   if (!IS_NPC (ch) && IS_CLASS (ch, CLASS_DRAGON))
   {
      divide7_to_char (ch);
      sprintf (buf, "#w  Dragon Points: #n %d.\n\r",
	       ch->pcdata->stats[DEMON_CURRENT]);
      send_to_char (buf, ch);
   }

   if (!IS_NPC (ch)
       && (IS_CLASS (ch, CLASS_DEMON) || IS_SET (ch->special, SPC_CHAMPION)))
   {
      divide7_to_char (ch);

      sprintf (buf,
	       "  #wCurrent Demonic Power:#n %d.   #wMax Demonic Power:#n %d.\n\r",
	       ch->pcdata->stats[DEMON_CURRENT],
	       ch->pcdata->stats[DEMON_TOTAL]);
      send_to_char (buf, ch);
   }

   if (!IS_NPC (ch) && IS_CLASS (ch, CLASS_DROW))
   {
      divide7_to_char (ch);

      sprintf (buf, "  #wDrow Points:#n %d.\n\r",
	       ch->pcdata->stats[DROW_POWER]);
      send_to_char (buf, ch);
      sprintf (buf, "  #wMagic Resistance:#n %d.\n\r",
	       ch->pcdata->stats[DROW_MAGIC]);
      send_to_char (buf, ch);
   }

   if (ch->level > 2)
   {
      divide7_to_char (ch);

      sprintf (buf, "  #w[Arena Stats] Wins: #n%d. #wLosses:#n %d.\n\r",
	       ch->awins, ch->alosses);
      send_to_char (buf, ch);
      if (ch->challenged != NULL)
      {
	 if (IS_SET (ch->flag2, AFF2_CHALLENGED))
	 {
	    sprintf (buf, "  #w[Arena]#n You have been challenged by %s.\n\r",
		     ch->challenged->name);
	    send_to_char (buf, ch);
	 }
	 if (IS_SET (ch->flag2, AFF2_CHALLENGER))
	 {
	    sprintf (buf, "  #w[Arena]#n You have challenged %s.\n\r",
		     ch->challenged->name);
	    send_to_char (buf, ch);
	 }
      }
      if (ch->gladiator != NULL)
      {
	 sprintf (buf, "  #w[Arena Bet]#n You have a %d QP bet on %s\n\r",
		  ch->pcdata->plr_wager, ch->gladiator->name);
	 send_to_char (buf, ch);
      }

   }
   if ((ch->pcdata->condition[COND_DRUNK] > 10
	|| ch->pcdata->condition[COND_THIRST] == 0
	|| ch->pcdata->condition[COND_FULL] == 0))
      send_to_char ("  #wCondition:#n", ch);
   if (!IS_NPC (ch) && ch->pcdata->condition[COND_DRUNK] > 10)
      send_to_char (" Drunk", ch);
   if (!IS_NPC (ch) && ch->pcdata->condition[COND_THIRST] == 0)
      send_to_char (" Thirsty", ch);
   if (!IS_NPC (ch) && ch->pcdata->condition[COND_FULL] == 0)
      send_to_char (" Hungry", ch);

   sprintf (buf, "  #wWimpy:#n %d.", ch->wimpy);
   if (!IS_NPC (ch) && IS_EXTRA (ch, EXTRA_DONE))
      strcat (buf, "  Non-Virgin.\n\r");
   else
      strcat (buf, "\n\r");
   send_to_char (buf, ch);

   if (!IS_NPC (ch) && ch->pcdata->stage[0] >= 100)
      send_to_char ("  You are feeling extremely horny.\n\r", ch);
   else if (!IS_NPC (ch) && ch->pcdata->stage[0] >= 50)
      send_to_char ("  You are feeling pretty randy.\n\r", ch);
   else if (!IS_NPC (ch) && ch->pcdata->stage[0] >= 1)
      send_to_char ("  You are feeling rather kinky.\n\r", ch);

   if (!IS_NPC (ch) && ch->pcdata->stage[1] > 0
       && ch->position == POS_STANDING)
   {
      send_to_char ("  You are having sexual intercourse.\n\r", ch);
      if (!IS_NPC (ch) && (ch->pcdata->stage[2] + 25) >= ch->pcdata->stage[1])
	 send_to_char ("  You are on the verge of having an orgasm.\n\r", ch);
   }
   else
      switch (ch->position)
      {
      case POS_DEAD:
	 send_to_char ("  #wPosition:#n DEAD!!\n\r", ch);
	 break;
      case POS_MORTAL:
	 send_to_char ("  #wPosition:#n MORTALLY WOUNDED.\n\r", ch);
	 break;
      case POS_INCAP:
	 send_to_char ("  #wPosition:#n Incapacitated.\n\r", ch);
	 break;
      case POS_STUNNED:
	 send_to_char ("  #wPosition:#n Stunned.\n\r", ch);
	 break;
      case POS_SLEEPING:
	 send_to_char ("  #wPosition:#n Sleeping.\n\r", ch);
	 break;
      case POS_RESTING:
	 send_to_char ("  #wPosition:#n Resting.\n\r", ch);
	 break;
      case POS_MEDITATING:
	 send_to_char ("  #wPosition:#n Meditating.\n\r", ch);
	 break;
      case POS_SITTING:
	 send_to_char ("  #wPosition:#n Sitting.\n\r", ch);
	 break;
      case POS_STANDING:
	 send_to_char ("  #wPosition:#n Standing.\n\r", ch);
	 break;
      case POS_FIGHTING:
	 send_to_char ("  #wPosition:#n Fighting.\n\r", ch);
	 break;
	 send_to_char ("\n\r", ch);
      }

   divide7_to_char (ch);

   if (ch->level >= 0)
   {
      sprintf (buf, "  #wAC:#n %d ", a_c);
      send_to_char (buf, ch);
   }

   send_to_char ("#w:#n ", ch);
   if (a_c >= 101)
      send_to_char ("Naked!\n\r", ch);
   else if (a_c >= 80)
      send_to_char ("Barely clothed.\n\r", ch);
   else if (a_c >= 60)
      send_to_char ("Wearing clothes.\n\r", ch);
   else if (a_c >= 40)
      send_to_char ("Slightly armored.\n\r", ch);
   else if (a_c >= 20)
      send_to_char ("Somewhat armored.\n\r", ch);
   else if (a_c >= 0)
      send_to_char ("Armored.\n\r", ch);
   else if (a_c >= -50)
      send_to_char ("Well armored.\n\r", ch);
   else if (a_c >= -100)
      send_to_char ("Strongly armored.\n\r", ch);
   else if (a_c >= -250)
      send_to_char ("Heavily armored.\n\r", ch);
   else if (a_c >= -500)
      send_to_char ("Superbly armored.\n\r", ch);
   else if (a_c >= -749)
      send_to_char ("Divinely armored.\n\r", ch);
   else
      send_to_char ("Ultimately armored!\n\r", ch);

   divide7_to_char (ch);

   sprintf (buf,
	    "  #wHitroll:#n %d.  #wDamroll:#n %d.  #wDamcap:#n %d.  #wSave vs Spell:#n %d.",
	    char_hitroll (ch), char_damroll (ch), ch->damcap[0],
	    ch->saving_throw);
   send_to_char (buf, ch);

   if (!IS_NPC (ch) && IS_CLASS (ch, CLASS_VAMPIRE))
   {
      sprintf (buf, "  #wBlood:#n %d.", ch->pcdata->condition[COND_THIRST]);
      send_to_char (buf, ch);

      sprintf (buf, "  #wBeast:#n %d.\n\r  ", ch->beast);
      send_to_char (buf, ch);
      if (ch->beast < 0)
	 send_to_char ("You are a cheat!\n\r", ch);
      else if (ch->beast == 0)
	 send_to_char ("You have attained Golconda!\n\r", ch);
      else if (ch->beast <= 5)
	 send_to_char ("You have almost reached Golconda!\n\r", ch);
      else if (ch->beast <= 10)
	 send_to_char ("You are nearing Golconda!\n\r", ch);
      else if (ch->beast <= 15)
	 send_to_char ("You have great control over your beast.\n\r", ch);
      else if (ch->beast <= 20)
	 send_to_char
	    ("Your beast has little influence over your actions.\n\r", ch);
      else if (ch->beast <= 30)
	 send_to_char ("You are in control of your beast.\n\r", ch);
      else if (ch->beast <= 40)
	 send_to_char ("You are able to hold back the beast.\n\r", ch);
      else if (ch->beast <= 60)
	 send_to_char
	    ("You are constantly struggling for control of your beast.\n\r",
	     ch);
      else if (ch->beast <= 75)
	 send_to_char ("Your beast has great control over your actions.\n\r",
		       ch);
      else if (ch->beast <= 90)
	 send_to_char ("The power of the beast overwhelms you.\n\r", ch);
      else if (ch->beast <= 99)
	 send_to_char ("You have almost lost your battle with the beast!\n\r",
		       ch);
      else
	 send_to_char ("The beast has taken over!\n\r", ch);

   }

   else if (!IS_CLASS (ch, CLASS_VAMPIRE))
      send_to_char ("\n\r", ch);

   if (ch->level >= 0)
   {
      divide7_to_char (ch);

      sprintf (buf, "  #wAlignment:#n %d ", ch->alignment);
      send_to_char (buf, ch);
   }

   send_to_char ("#w:#n", ch);
   if (ch->alignment > 900)
      send_to_char ("Angelic.", ch);
   else if (ch->alignment > 700)
      send_to_char ("Saintly.", ch);
   else if (ch->alignment > 350)
      send_to_char ("Good.", ch);
   else if (ch->alignment > 100)
      send_to_char ("Kind.", ch);
   else if (ch->alignment > -100)
      send_to_char ("Neutral.", ch);
   else if (ch->alignment > -350)
      send_to_char ("Mean.", ch);
   else if (ch->alignment > -700)
      send_to_char ("Evil.", ch);
   else if (ch->alignment > -900)
      send_to_char ("Demonic.", ch);
   else
      send_to_char ("Satanic.", ch);

   if (!IS_NPC (ch) && ch->level >= 0)
   {
      sprintf (buf, "  #wStatus:#n %d.  ", ch->race);
      send_to_char (buf, ch);
   }

   if (!IS_NPC (ch))
      send_to_char ("You are ", ch);

   if (!IS_NPC (ch) && ch->level == 1)
      send_to_char ("a Newbie.\n\r", ch);
   else if (!IS_NPC (ch) && ch->level == 2)
      send_to_char ("a Mortal.\n\r", ch);
   else if (!IS_NPC (ch) && ch->level == 7)
      send_to_char ("a Newbie Helper.\n\r", ch);
   else if (!IS_NPC (ch) && ch->level == 8)
      send_to_char ("a Builder.\n\r", ch);
   else if (!IS_NPC (ch) && ch->level == 9)
      send_to_char ("an Enforcer.\n\r", ch);
   else if (!IS_NPC (ch) && ch->level == 10)
      send_to_char ("a Judge.\n\r", ch);
   else if (!IS_NPC (ch) && ch->level == 11)
      send_to_char ("a High Judge.\n\r", ch);
   else if (!IS_NPC (ch) && ch->level == 12)
      send_to_char ("an Implementor.\n\r", ch);
   else if (!str_cmp (ch->name, "Matthew"))
      stc ("the Owner of the Mud.\n\r", ch);
   else if (!str_cmp (ch->name, "Unique"))
      stc ("the Player Relations immortal.\n\r", ch);

   else if (!IS_NPC (ch) && ch->race <= 0)
      send_to_char ("an Avatar.\n\r", ch);
   else if (ch->race <= 4)
      send_to_char ("a Peasant.\n\r", ch);
   else if (ch->race <= 9)
      send_to_char ("a Page.\n\r", ch);
   else if (ch->race <= 14)
      send_to_char ("a Apprentice.\n\r", ch);
   else if (ch->race <= 19)
      send_to_char ("a Scout.\n\r", ch);
   else if (ch->race <= 24)
      send_to_char ("a Soldier.\n\r", ch);
   else if (ch->race <= 29)
      send_to_char ("a Lieutenant.\n\r", ch);
   else if (ch->race <= 34)
      send_to_char ("a Captain.\n\r", ch);
   else if (ch->race <= 39)
      send_to_char ("a Major.\n\r", ch);
   else if (ch->race <= 44)
      send_to_char ("a General.\n\r", ch);
   else if (ch->race <= 49)
      send_to_char ("a Knight.\n\r", ch);

   else if ((ch->race <= 54) && (ch->sex == SEX_FEMALE))
      send_to_char ("a Lady.\n\r", ch);
   else if ((ch->race <= 54) && (ch->sex == SEX_MALE))
      send_to_char ("a Lord.\n\r", ch);
   else if ((ch->race <= 59) && (ch->sex == SEX_FEMALE))
      send_to_char ("a Baroness.\n\r", ch);
   else if ((ch->race <= 59) && (ch->sex == SEX_MALE))
      send_to_char ("a Baron.\n\r", ch);
   else if ((ch->race <= 64) && (ch->sex == SEX_FEMALE))
      stc ("a Viscountess.\n\r", ch);
   else if ((ch->race <= 64) && (ch->sex == SEX_MALE))
      stc ("a Viscount.\n\r", ch);
   else if ((ch->race <= 69) && (ch->sex == SEX_FEMALE))
      send_to_char ("a Countess.\n\r", ch);
   else if ((ch->race <= 69) && (ch->sex == SEX_MALE))
      send_to_char ("an Earl.\n\r", ch);
   else if ((ch->race <= 74) && (ch->sex == SEX_FEMALE))
      send_to_char ("a Duchess.\n\r", ch);
   else if ((ch->race <= 74) && (ch->sex == SEX_MALE))
      send_to_char ("a Duke.\n\r", ch);
   else if ((ch->race <= 79) && (ch->sex == SEX_FEMALE))
      send_to_char ("a Princess.\n\r", ch);
   else if ((ch->race <= 79) && (ch->sex == SEX_MALE))
      send_to_char ("a Prince.\n\r", ch);
   else if ((ch->race >= 80) && (ch->sex == SEX_FEMALE))
      send_to_char ("a Queen.\n\r", ch);
   else if ((ch->race >= 80) && (ch->sex == SEX_MALE))
      stc ("a King.\n\r", ch);

   if (!IS_NPC (ch) && (get_hours (ch) < 6))
   {
      sprintf (buf, "  #wYou receive Newbie Experience.\n\r");
      stc (buf, ch);
   }
   else if (!IS_NPC (ch) && (get_hours (ch) < 10)
	    && !IS_SET (ch->extra2, PKREADY))
   {
      sprintf (buf, "  #wYou are safe from Player Killing.\n\r");
      stc (buf, ch);
   }
   if (!IS_NPC (ch))
   {
      if (strlen (ch->pcdata->decapped) > 3)
      {
	 sprintf (buf, "  #wLast Decap: #n%s.\n\r", ch->pcdata->decapped);
	 stc (buf, ch);
      }
      if (strlen (ch->pcdata->decappedby) > 3)
      {
	 sprintf (buf, "  #wLast Decapped by:#n %s.\n\r",
		  ch->pcdata->decappedby);
	 stc (buf, ch);
      }

   }

   if (!IS_NPC (ch) && ch->lstatus > 0)
   {
      sprintf (buf, "  #wLegend Status:#n %d.\n\r", ch->lstatus);
      send_to_char (buf, ch);
   }


   if (!IS_NPC (ch))
   {
      chtier = ch->tier;
      chtierexp = ch->tierxp;

      percent = (chtierexp / (chtier * 100000.00)) * 100.00;
      nexttier = (ch->tier + 1);
      sprintf (buf, "  #wTier Level:#n %d.", ch->tier);
      stc (buf, ch);
      if (nexttier > 250)
	 nexttier = 250;
      if (ch->tier < 250)
      {
	 sprintf (buf, "  %d%% of the way to be Tier %d.  ", percent,
		  nexttier);
	 stc (buf, ch);
      }
      sprintf (buf, "#wTier Points:#n %d.\n\r", ch->tpoints);
      stc (buf, ch);
   }

   if (ch->fight_timer > 0)
   {
      sprintf (buf, "  #wFight Timer:#n %d seconds remaining.\n\r",
	       ch->fight_timer);
      send_to_char (buf, ch);
   }
   stcprintf (ch, "  #wPage Length: #n%d.\n\r", ch->pcdata->pagelen);

   if (IS_SET (ch->more, MORE_NOKING))
   {
      outcast = (15 - ch->pcdata->outcast);
      stcprintf (ch, "  #wOutcast: #n%d more day(s).\n\r", outcast);
   }
   if (ch->class != 0 && ch->pcdata->gpoints > 0)
   {
      sprintf (buf, "  #wGeneration Points: #n%d.\n\r", ch->pcdata->gpoints);
      stc (buf, ch);
   }
   if (ch->paradox[1] > 0)
   {
      sprintf (buf, "  #wParadox Points:#n %d.\n\r", ch->paradox[1]);
      stc (buf, ch);
   }
   divide7_to_char (ch);

   if (!IS_NPC (ch))
   {
      sprintf (buf, "  #wMob Kills:#n %d.  #wMob Deaths:#n %d.", ch->mkill,
	       ch->mdeath);
      send_to_char (buf, ch);
      sprintf (buf, "  #wPlayer Kills:#n %d.  #wPlayer Deaths:#n %d.\n\r",
	       ch->pkill, ch->pdeath);
      send_to_char (buf, ch);
   }
   if (IS_IMMORTAL (ch))
   {
      divide7_to_char (ch);

      sprintf (buf,
	       "  #wWizinvis:#n [%s].  #wIncog:#n [%s].  #wWizinvis Level:#n [%d].\n\r",
	       (!IS_NPC (ch)
		&& IS_SET (ch->act, PLR_WIZINVIS)) ? "X" : " ", (!IS_NPC (ch)
								 &&
								 IS_SET
								 (ch->act,
								  PLR_INCOG))
	       ? "X" : " ", ch->pcdata->wizinvis);
      send_to_char (buf, ch);
   }
   divide7_to_char (ch);

   if (!IS_NPC (ch))
   {
      sprintf (buf,
               "#w  Quests Completed:#n %lli.  #wEarned Questpoints: #n%lli.\n\r",
	       ch->pcdata->score[SCORE_NUM_QUEST],
	       ch->pcdata->score[SCORE_QUEST]);
      stc (buf, ch);
   }

   {
      if (IS_CLASS (ch, CLASS_WEREWOLF)
	  && ch->pcdata->powers[WPOWER_SILVER] > 0)
      {
	 sprintf (buf, "  #wSilver Tolerance:#n %d.  ",
		  ch->pcdata->powers[WPOWER_SILVER]);
	 send_to_char (buf, ch);
      }
      if (IS_CLASS (ch, CLASS_WEREWOLF))
      {
	 sprintf (buf, "  #wGnosis:#n %d/%d\n\r", ch->gnosis[GCURRENT],
		  ch->gnosis[GMAXIMUM]);
	 send_to_char (buf, ch);
      }
      if (!IS_NPC (ch) && IS_CLASS (ch, CLASS_MONK))
      {
	 divide7_to_char (ch);
	 sprintf (buf,
		  "#w  Block counter:#n %d.  #wCurrent Chi:#n %d.  #wMaximum Chi:#n %d. \n\r",
		  ch->monkblock, ch->chi[CURRENT], ch->chi[MAXIMUM]);
	 stc (buf, ch);

      }
      if (IS_CLASS (ch, CLASS_DRAGON))
      {
	 sprintf (buf,
		  "  #wDragon Age: #nAffecting Hitroll and Damroll by +%d.\n\r",
                  GET_AGE(ch) * 20);
	 send_to_char (buf, ch);
      }
      if (IS_CLASS (ch, CLASS_NINJA))
      {
	 sprintf (buf, "  #wKI:#n %d/150.\n\r", ch->pcdata->powers[NINJAKI]);
	 stc (buf, ch);
      }
      if (IS_CLASS (ch, CLASS_VAMPIRE) && ch->pcdata->stats[UNI_RAGE] > 0)
      {
	 sprintf (buf,
		  "  #wBeasting:#n  Affecting Hitroll and Damroll by +%d.\n\r",
		  ch->pcdata->stats[UNI_RAGE]);
	 send_to_char (buf, ch);
      }
      else if (IS_SET (ch->special, SPC_WOLFMAN)
	       && ch->pcdata->stats[UNI_RAGE] > 0)
      {
	 sprintf (buf,
		  "  #wWolf Rage:#n  Affecting Hitroll and Damroll by +%d.\n\r",
		  ch->pcdata->stats[UNI_RAGE]);
	 send_to_char (buf, ch);
      }
      else if (IS_CLASS (ch, CLASS_NINJA) && ch->pcdata->stats[UNI_RAGE] > 0)
      {
	 sprintf (buf,
		  "  #wMichi:#n Affecting Hitroll and Damroll by +%d.\n\r",
		  ch->pcdata->stats[UNI_RAGE]);
	 send_to_char (buf, ch);
      }
      else if (IS_CLASS (ch, CLASS_DEMON)
	       && ch->pcdata->stats[DEMON_POWER] > 0)
      {
	 int bonus =
	    (ch->pcdata->stats[DEMON_POWER] *
	     ch->pcdata->stats[DEMON_POWER] << 1);

	 sprintf (buf,
		  "  #wDemonic EQ:#n Affects Hitroll and Damroll by +%d.\n\r",
		  bonus);

	 send_to_char (buf, ch);
      }
   }
   divide7_to_char (ch);

   return;
}