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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
//BASTETADDITION
#include "bastet.h"

void do_lord_update (CHAR_DATA * ch, char *argument)
{
   char arg1[MAX_INPUT_LENGTH];
   char arg2[MAX_INPUT_LENGTH];
   char arg3[MAX_INPUT_LENGTH];
   char arg4[MAX_INPUT_LENGTH];
   char arg5[MAX_INPUT_LENGTH];
   char arg6[MAX_INPUT_LENGTH];
   char new_lord[MAX_STRING_LENGTH];
   int vampgen = ch->pcdata->stats[UNI_GEN];

   argument = one_argument (argument, arg1);
   argument = one_argument (argument, arg2);
   argument = one_argument (argument, arg3);
   argument = one_argument (argument, arg4);
   argument = one_argument (argument, arg5);
   argument = one_argument (argument, arg6);

   if (IS_NPC (ch))
      return;

   if (arg1 != '\0')
      arg1[0] = UPPER (arg1[0]);
   if (arg2 != '\0')
      arg2[0] = UPPER (arg2[0]);
   if (arg3 != '\0')
      arg3[0] = UPPER (arg3[0]);
   if (arg4 != '\0')
      arg4[0] = UPPER (arg4[0]);
   if (arg5 != '\0')
      arg5[0] = UPPER (arg5[0]);
   if (arg6 != '\0')
      arg6[0] = UPPER (arg6[0]);

   if (vampgen == 3)
   {
      sprintf (new_lord, "%s %s", arg1, arg2);
   }

   if (vampgen == 4)
   {
      sprintf (new_lord, "%s %s %s", arg1, arg2, arg3);
   }

   if (vampgen == 5)
   {
      sprintf (new_lord, "%s %s %s %s", arg1, arg2, arg3, arg4);
   }

   if (vampgen == 6)
   {
      sprintf (new_lord, "%s %s %s %s %s", arg1, arg2, arg3, arg4, arg5);
   }

   free_string (ch->lord);
   ch->lord = str_dup (new_lord);

   return;
}

/* New Train Based Upon rig Train by Kavir*/
/* --- See new train in serenity_act.c

void do_train (CHAR_DATA * ch, char *argument)
{
   char arg1[MAX_STRING_LENGTH];
   char arg2[MAX_STRING_LENGTH];
   char buf[MAX_STRING_LENGTH];
   sh_int *pAbility;
   char *pOutput;
   //int i = 0;
   int cost;
   int cost2;
   int immcost;
   int silver;
   int focus;
   int magic;
   int legendexp;
   int legendquest;
   int gnosis;
   int hpcap, manacap, movecap;
   int primal;
   int max_stat = 18;
   int earntqp = 0;
   bool last = TRUE;
   bool is_ok = FALSE;
   char legbuf[MSL];

   switch (ch->lstatus)
   {
   case 0:
      sprintf (legbuf, "Citizen");
      break;
   case 1:
      sprintf (legbuf, "Savior");
      break;
   case 2:
      sprintf (legbuf, "Myth");
      break;
   case 3:
      sprintf (legbuf, "Legend");
      break;
   case 4:
      sprintf (legbuf, "Titan");
      break;
   case 5:
      sprintf (legbuf, "Immortal");
      break;
   case 6:
      sprintf (legbuf, "Oracle");
      break;
   case 7:
      sprintf (legbuf, "Demi God");
      break;
   case 8:
      sprintf (legbuf, "Deity");
      break;
   case 9:
      sprintf (legbuf, "Almighty");
      break;
   }
   argument = one_argument (argument, arg1);
   argument = one_argument (argument, arg2);

   if (IS_NPC (ch))
      return;


   if (ch->lstatus < 10)
   {
      hpcap = 15000 + (1000 * ch->lstatus) + (200 * ch->race);
      manacap = hpcap;
      movecap = hpcap;
   }
   else
   {
      hpcap = 150000 + (500 * ch->race);
      manacap = hpcap;
      movecap = hpcap;
   }
   if ((!str_cmp (arg1, "hp") && ch->max_hit >= hpcap))
   {
      stc ("You have reached your legend hp cap.\n\r", ch);
      return;
   }

   if ((!str_cmp (arg1, "mana") && ch->max_mana >= manacap))
   {
      stc ("You have reached your legend mana cap.\n\r", ch);
      return;
   }
   if ((!str_cmp (arg1, "move") && ch->max_move >= movecap))
   {
      stc ("You have reached your legend move cap.\n\r", ch);
      return;
   }
   if (!str_cmp (arg1, "magic") && ch->pcdata->stats[DROW_MAGIC] == 100)
   {
      stc ("You already have 100 magic resistance\n\r", ch);
      return;
   }
   if (!str_cmp (arg1, "hp")
       && (IS_SET (ch->garou1, GAROU_WHELP2)
	   || IS_SET (ch->garou1, GAROU_WHELP1)))
   {
      stc ("You are unable to train hps with whelps curse affecting you.\n\r",
	   ch);
      return;
   }

   if (arg1[0] == '\0')
   {
      strcpy (arg1, "foo");
   }

   if (!str_cmp (arg1, "str"))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "int"))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "wis"))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "dex"))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "con"))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "hp") && ch->max_hit < hpcap)
      is_ok = TRUE;
   else if (!str_cmp (arg1, "mana") && ch->max_mana < manacap)
      is_ok = TRUE;
   else if (!str_cmp (arg1, "move") && ch->max_move < movecap)
      is_ok = TRUE;
   else if (!str_cmp (arg1, "primal"))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "legend"))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "silver") && IS_CLASS (ch, CLASS_WEREWOLF))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "focus") && IS_CLASS (ch, CLASS_MONK))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "gnosis") && IS_CLASS (ch, CLASS_WEREWOLF))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "ancilla") && IS_CLASS (ch, CLASS_VAMPIRE))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "elder") && IS_CLASS (ch, CLASS_VAMPIRE))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "methuselah") && IS_CLASS (ch, CLASS_VAMPIRE))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "magic") && IS_CLASS (ch, CLASS_DROW))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "quickening") && IS_CLASS (ch, CLASS_HIGHLANDER))
      is_ok = TRUE;
   else if (!str_cmp (arg1, "dragonage") && IS_CLASS (ch, CLASS_DRAGON)
	    && (ch->pcdata->dragonage < SUPREME)
            && ch->pcdata->dragonage == GET_AGE(ch))
      is_ok = TRUE;

	if (arg2[0] != '\0' && is_ok)
	{
		int amount = 0;

		if (!is_number (arg2))
		{
			send_to_char ("Please enter a numeric value.\n\r", ch);
			return;
		}
		amount = atoi (arg2);

		if ( str_cmp( arg1, "hp" ) && str_cmp( arg1, "mana" ) && str_cmp( arg1, "move" ) )
		{
			if (amount < 1 || amount > 200)
			{
				send_to_char ("Please enter a value between 1 and 200.\n\r", ch);
				return;
			}
		}
		else
		{
			if (amount < 1 || amount > 200)
			{
				send_to_char ("Please enter a value between 1 and 100.\n\r", ch);
				return;
			}
		}

		if ( (amount > 1) && ( str_cmp( arg1, "quickening" ) ) )
		{
			sprintf (buf, "%s %d", arg1, amount - 1);
			do_train (ch, buf);
			last = FALSE;
		}

	   }

   cost = 200;
   cost2 = 0;

   immcost = count_imms (ch);
   primal = (1 + ch->practice) * 500;
   magic = (1 + ch->pcdata->stats[DROW_MAGIC]) * 100;
   silver = (1 + ch->pcdata->powers[WPOWER_SILVER]) * 2500;
   focus = 50000;
   gnosis = (1 + ch->gnosis[GMAXIMUM]) * 25000;
   legendexp = (2000000 + (3000000 * ch->lstatus));
   legendquest = (1000 * ch->lstatus);

   if (ch->lstatus == 0)
      earntqp = 0;
   if (ch->lstatus == 1)
      earntqp = 1000;
   if (ch->lstatus == 2)
      earntqp = 3000;
   if (ch->lstatus == 3)
      earntqp = 6000;
   if (ch->lstatus == 4)
      earntqp = 10000;
   if (ch->lstatus == 5)
      earntqp = 15000;
   if (ch->lstatus == 6)
      earntqp = 21000;
   if (ch->lstatus == 7)
      earntqp = 28000;
   if (ch->lstatus == 8)
      earntqp = 36000;
   if (ch->lstatus == 9)
      earntqp = 45000;

   if (IS_CLASS (ch, CLASS_HIGHLANDER))
      max_stat = 25;
   if (IS_CLASS (ch, CLASS_DRAGON))
      max_stat = 35;
   if (!str_cmp (arg1, "str"))
   {
      pAbility = &ch->pcdata->perm_str;
      pOutput = "strength";
   }

   else if (!str_cmp (arg1, "int"))
   {
      pAbility = &ch->pcdata->perm_int;
      pOutput = "intelligence";
   }

   else if (!str_cmp (arg1, "wis"))
   {
      pAbility = &ch->pcdata->perm_wis;
      pOutput = "wisdom";
   }

   else if (!str_cmp (arg1, "dex"))
   {
      pAbility = &ch->pcdata->perm_dex;
      pOutput = "dexterity";
   }

   else if (!str_cmp (arg1, "con"))
   {
      pAbility = &ch->pcdata->perm_con;
      pOutput = "constitution";
   }

   else if (!str_cmp (arg1, "avatar") && ch->level == 2)
   {
      if (ch->lstatus < 10)
         cost = 1000;
      else
         cost = 0;
      pAbility = &ch->level;
      pOutput = "level";
   }
   else if (!str_cmp (arg1, "mortal") && ch->level > 2 && ch->race < 1
	    && ch->class == CLASS_NONE && !IS_IMMORTAL (ch))
   {
      cost = 0;
      pAbility = &ch->level;
      pOutput = "level";
   }
	else if ( !str_cmp( arg1, "quickening" ) )
	{
		int temp_cost_xp;
		int temp_cost_qp;
		bool improved_quick = FALSE;
		
		if ( !IS_DEMPOWER( ch, HPOWER_EMPOWER ) )
		{
			stc( "You don't know how to improve your quickening without killing.\n\r", ch );
			return;
		}
		
		if ( ch->quickening[1] > 25 )
		{
			stc( "Go kill an avatar or something it'll be cheaper.\n\r", ch );
			return;
		}
		
		cost = ch->quickening[1] + 1;
		temp_cost_xp = ( ( cost * ( cost - 1 ) ) / 2  );
		if ( temp_cost_xp == 0 )
			temp_cost_xp = 1;
		temp_cost_qp = temp_cost_xp;

		temp_cost_xp *= 500000;
		temp_cost_qp *= 250;
			
		if ( ch->exp < temp_cost_xp )
		{
			stcf( ch, "You need another %d experience (%d needed) to improve your quickening.\n\r", ( temp_cost_xp - ch->exp ), temp_cost_xp );
		}
		if ( ch->pcdata->quest < temp_cost_qp )
		{
			stcf( ch, "You need another %d quest points (%d needed) to improve your quickening.\n\r", ( temp_cost_qp - ch->pcdata->quest ), temp_cost_qp );
		}
		if ( ( ch->exp >= temp_cost_xp ) &&( ch->pcdata->quest >= temp_cost_qp ) )
			improved_quick = TRUE;
		
		if ( improved_quick )
		{
			ch->exp -= temp_cost_xp;
			ch->pcdata->quest -= temp_cost_qp;
			ch->quickening[1] += 1;
			save_char_obj( ch );
			stc( "You improve your maximum level of quickening.\n\r", ch );
		}
		return;
	}

   else if (!str_cmp (arg1, "hp") && ch->max_hit < hpcap)
   { 
      if (ch->max_hit < 1)
	 ch->max_hit = 1;	
      cost = (ch->max_hit - ch->pcdata->perm_con);
	if ( IS_CLASS( ch, CLASS_HIGHLANDER ) )
	{
		if ( IS_DEMPOWER( ch, HPOWER_BLADESPIN ) )
		    cost *= 0.45;
	}
      (int *) pAbility = &ch->max_hit;
      pOutput = "hp";

      if (cost > ch->exp || ch->exp < 1)
      {
	 if (last)
	    send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }

      ch->exp -= (cost < 1 ? 1 : cost);
      ch->max_hit++;
      if (last)
	 act ("Your hp increases!", ch, NULL, pOutput, TO_CHAR);
      return;
   }

   else if (!str_cmp (arg1, "mana") && ch->max_mana < manacap)
   {
      if (ch->max_mana < 1)
	 ch->max_mana = 1;	// Bug fix 
      cost = (ch->max_mana - ch->pcdata->perm_wis);
	if ( IS_CLASS( ch, CLASS_HIGHLANDER ) )
	{
		if ( IS_DEMPOWER( ch, HPOWER_ANCESTRAL ) )
		    cost *= 0.45;
	}
      (int *) pAbility = &ch->max_mana;
      pOutput = "mana";
      if (cost > ch->exp || ch->exp < 1)
      {
	 if (last)
	    send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }

      ch->exp -= (cost < 1 ? 1 : cost);
      ch->max_mana++;
      if (last)
	 act ("Your mana increases!", ch, NULL, pOutput, TO_CHAR);
      return;
   }

   else if (!str_cmp (arg1, "move") && ch->max_move < movecap)
   {
      if (ch->max_move < 1)
	 ch->max_move = 1;	// Bug fix
      cost = (ch->max_move - ch->pcdata->perm_dex);
	if ( IS_CLASS( ch, CLASS_HIGHLANDER ) )
	{
		if ( IS_DEMPOWER( ch, HPOWER_SWORDCRAFT ) )
		    cost *= 0.45;
	}
      (int *) pAbility = &ch->max_move;
      pOutput = "move";

      if (cost > ch->exp || ch->exp < 1)
      {
	 if (last)
	    send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }

      ch->exp -= (cost < 1 ? 1 : cost);
      ch->max_move++;
      if (last)
	 act ("Your move increases!", ch, NULL, pOutput, TO_CHAR);
      return;
   }

   else if (!str_cmp (arg1, "primal") && ch->practice < 9999)
   {
      cost = primal;
      pAbility = &ch->practice;
      pOutput = "primal";
   }

   else if (!str_cmp (arg1, "magic") && IS_CLASS (ch, CLASS_DROW) &&
	    ch->pcdata->stats[DROW_MAGIC] < 100)
   {
      sh_int quiet_pointer = ch->pcdata->stats[DROW_MAGIC];
      cost = magic;
      pAbility = &quiet_pointer;
      pOutput = "drow magic resistance";
   }

   else if (!str_cmp (arg1, "silver") && IS_CLASS (ch, CLASS_WEREWOLF) &&
	    ch->pcdata->powers[WPOWER_SILVER] < 100)
   {
      sh_int quiet_pointer = ch->pcdata->powers[WPOWER_SILVER];			//						   different type of int
      cost = silver;
      pAbility = &quiet_pointer;
      pOutput = "tolerance to silver";
   }
   else if (!str_cmp (arg1, "gnosis") && IS_CLASS (ch, CLASS_WEREWOLF))
   {
      sh_int quiet_pointer = ch->gnosis[GMAXIMUM];
      cost = gnosis;
      pAbility = &quiet_pointer;
      pOutput = "gnosis points";
   }
   else if (!str_cmp (arg1, "legend"))
   {
      sh_int quiet_pointer = ch->lstatus;
      cost = legendexp;
      cost2 = legendquest;
      pAbility = &quiet_pointer;
      pOutput = "legend status";
   }
   else if (!str_cmp (arg1, "focus") && IS_CLASS (ch, CLASS_MONK))
   {
      sh_int quiet_pointer = ch->focus[MAXIMUM];
      cost = focus;
      pAbility = &quiet_pointer;
      pOutput = "monk focus";
   }
   else if (!str_cmp (arg1, "ancilla") && IS_CLASS (ch, CLASS_VAMPIRE)
	    && ch->pcdata->rank != AGE_ANCILLA
	    && ch->pcdata->rank != AGE_ELDER
	    && ch->pcdata->rank != AGE_METHUSELAH)
   {
      if (ch->exp < 2000000)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - 2000000;
      ch->pcdata->rank = AGE_ANCILLA;
      send_to_char ("You are now an Ancilla.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "elder") && IS_CLASS (ch, CLASS_VAMPIRE)
	    && ch->pcdata->rank != AGE_ELDER
	    && ch->pcdata->rank == AGE_ANCILLA
	    && ch->pcdata->rank != AGE_METHUSELAH)
   {
      if (ch->exp < 6000000)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - 6000000;
      ch->pcdata->rank = AGE_ELDER;
      send_to_char ("You are now an Elder.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "methuselah") && IS_CLASS (ch, CLASS_VAMPIRE)
	    && ch->pcdata->rank != AGE_METHUSELAH
	    && ch->pcdata->rank != AGE_ANCILLA
	    && ch->pcdata->rank == AGE_ELDER)
   {
      if (ch->exp < 10000000)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - 10000000;
      ch->pcdata->rank = AGE_METHUSELAH;
      send_to_char ("You are now a Methuselah.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "dragonage") && IS_CLASS (ch, CLASS_DRAGON))
   {
      if (ch->pcdata->dragonage == SUPREME)
	 return;

      if (ch->pcdata->dragonage == HATCHLING)
      {
	 if (ch->exp < 3000000)
	 {
	    send_to_char
	       ("You need 3000000 exp to become a young dragon.\n\r", ch);
	    return;
	 }
	 ch->exp -= 3000000;
	 ch->pcdata->dragonage = YOUNG;
	 send_to_char ("You are now a very young dragon.\n\r", ch);
	 return;
      }
      else if (ch->pcdata->dragonage == YOUNG)
      {
	 if (ch->exp < 6000000)
	 {
	    send_to_char
	       ("You need 6000000 exp to become a juvenile dragon.\n\r", ch);
	    return;
	 }
	 ch->exp -= 6000000;
	 ch->pcdata->dragonage = JUVENILE;
	 send_to_char ("You are now a juvenile dragon.\n\r", ch);
	 return;
      }
      else if (ch->pcdata->dragonage == JUVENILE)
      {
	 if (ch->exp < 9000000)
	 {
	    send_to_char
	       ("You need 9000000 exp to become a young adult dragon.\n\r",
		ch);
	    return;
	 }
	 ch->exp -= 9000000;
	 ch->pcdata->dragonage = YOUNG_ADULT;
	 send_to_char ("You are now a young adult dragon.\n\r", ch);
	 return;
      }
      else if (ch->pcdata->dragonage == YOUNG_ADULT)
      {
	 if (ch->exp < 12000000)
	 {
	    send_to_char
	       ("You need 12000000 exp to become a dragon adult.\n\r", ch);
	    return;
	 }
	 ch->exp -= 12000000;
	 ch->pcdata->dragonage = ADULT;
	 send_to_char ("You are now an adult dragon.\n\r", ch);
	 return;
      }
      else if (ch->pcdata->dragonage == ADULT)
      {
	 if (ch->exp < 15000000)
	 {
	    send_to_char
	       ("You need 15000000 exp to become a mature dragon.\n\r", ch);
	    return;
	 }
	 ch->exp -= 15000000;
	 ch->pcdata->dragonage = MATURE;
	 send_to_char ("You are now an mature dragon.\n\r", ch);
	 return;
      }
      else if (ch->pcdata->dragonage == MATURE)
      {
	 if (ch->exp < 18000000)
	 {
	    send_to_char
	       ("You need 18000000 exp to become an elder dragon.\n\r", ch);
	    return;
	 }
	 ch->exp -= 18000000;
	 ch->pcdata->dragonage = ELDER;
	 send_to_char ("You are now an elder dragon.\n\r", ch);
	 return;
      }
      else if (ch->pcdata->dragonage == ELDER)
      {
	 if (ch->exp < 21000000)
	 {
	    send_to_char
	       ("You need 21000000 exp to become a venerable dragon.\n\r",
		ch);
	    return;
	 }
	 ch->exp -= 21000000;
	 ch->pcdata->dragonage = VENERABLE;
	 send_to_char ("You are now venerable dragon.\n\r", ch);
	 return;
      }
      else if (ch->pcdata->dragonage == VENERABLE)
      {
	 if (ch->exp < 24000000)
	 {
	    send_to_char
	       ("You need 24000000 exp to become an ancient dragon.\n\r", ch);
	    return;
	 }
	 ch->exp -= 24000000;
	 ch->pcdata->dragonage = ANCIENT;
	 send_to_char ("You are now an ancient dragon.\n\r", ch);
	 return;
      }
      else if (ch->pcdata->dragonage == ANCIENT)
      {
	 if (ch->exp < 27000000)
	 {
	    send_to_char
	       ("You need 27000000 exp to become a lesser wyrm.\n\r", ch);
	    return;
	 }
	 ch->exp -= 27000000;
	 ch->pcdata->dragonage = LESSER_WYRM;
	 send_to_char ("You are now a lesser wyrm.\n\r", ch);
	 return;
      }
      else if (ch->pcdata->dragonage == LESSER_WYRM)
      {
	 if (ch->exp < 30000000)
	 {
	    send_to_char ("You need 30000000 exp to become a wyrm.\n\r", ch);
	    return;
	 }
	 ch->exp -= 30000000;
	 ch->pcdata->dragonage = WYRM;
	 send_to_char ("You are now a wyrm.\n\r", ch);
	 return;
      }
      else if (ch->pcdata->dragonage == WYRM)
      {
	 if (ch->exp < 33000000)
	 {
	    send_to_char
	       ("You need 33000000 exp to become a supreme dragon.\n\r", ch);
	    return;
	 }
	 ch->exp -= 33000000;
	 ch->pcdata->dragonage = SUPREME;
	 send_to_char ("You are now a supreme dragon.\n\r", ch);
	 return;
      }
      else
      {
	 send_to_char ("You are already a great wyrm.\n\r", ch);
	 return;
      }
   }
   else if (!str_cmp (arg1, "slash") && !IS_IMMUNE (ch, IMM_SLASH))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_SLASH);
      send_to_char
	 ("You are now more resistant to slashing and slicing weapons.\n\r",
	  ch);
      return;
   }

   else if (!str_cmp (arg1, "stab") && !IS_IMMUNE (ch, IMM_STAB))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_STAB);
      send_to_char
	 ("You are now more resistant to stabbing and piercing weapons.\n\r",
	  ch);
      return;
   }

   else if (!str_cmp (arg1, "smash") && !IS_IMMUNE (ch, IMM_SMASH))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_SMASH);
      send_to_char
	 ("You are now more resistant to blasting, pounding and crushing weapons.\n\r",
	  ch);
      return;
   }

   else if (!str_cmp (arg1, "beast") && !IS_IMMUNE (ch, IMM_ANIMAL))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_ANIMAL);
      send_to_char
	 ("You are now more resistant to claw and bite attacks.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "grab") && !IS_IMMUNE (ch, IMM_MISC))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_MISC);
      send_to_char
	 ("You are now more resistant to grepping, sucking and whipping weapons.\n\r",
	  ch);
      return;
   }

   else if (!str_cmp (arg1, "charm") && !IS_IMMUNE (ch, IMM_CHARM))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_CHARM);
      send_to_char ("You are now immune to charm spells.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "heat") && !IS_IMMUNE (ch, IMM_HEAT))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_HEAT);
      send_to_char ("You are now immune to heat and fire spells.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "cold") && !IS_IMMUNE (ch, IMM_COLD))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_COLD);
      send_to_char ("You are now immune to cold spells.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "lightning") && !IS_IMMUNE (ch, IMM_LIGHTNING))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_LIGHTNING);
      send_to_char
	 ("You are now immune to lightning and electrical spells.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "acid") && !IS_IMMUNE (ch, IMM_ACID))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_ACID);
      send_to_char ("You are now immune to acid spells.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "sleep") && !IS_IMMUNE (ch, IMM_SLEEP))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_SLEEP);
      send_to_char ("You are now immune to the sleep spell.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "drain") && !IS_IMMUNE (ch, IMM_DRAIN))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_DRAIN);
      send_to_char ("You are now immune to the energy drain spell.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "voodoo") && !IS_IMMUNE (ch, IMM_VOODOO))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_VOODOO);
      send_to_char ("You are now immune to voodoo magic.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "hurl") && !IS_IMMUNE (ch, IMM_HURL))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_HURL);
      send_to_char ("You are now immune to being hurled.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "backstab") && !IS_IMMUNE (ch, IMM_BACKSTAB))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_BACKSTAB);
      send_to_char ("You are now immune to being backstabbed.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "kick") && !IS_IMMUNE (ch, IMM_KICK))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_KICK);
      send_to_char ("You are now immune to being kicked.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "disarm") && !IS_IMMUNE (ch, IMM_DISARM))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_DISARM);
      send_to_char ("You are now immune to being disarmed.\n\r", ch);
      return;
   }

   else if (!str_cmp (arg1, "steal") && !IS_IMMUNE (ch, IMM_STEAL))
   {
      if (ch->exp < immcost)
      {
	 send_to_char ("You don't have enough exp.\n\r", ch);
	 return;
      }
      ch->exp = ch->exp - immcost;
      SET_BIT (ch->immune, IMM_STEAL);
      send_to_char ("You are now immune to being stolen from.\n\r", ch);
      return;
   }


   else
   {
      sprintf (buf, "#wYou can train the following:#n\n\r\n\r");
      send_to_char (buf, ch);

      send_to_char ("#ySTATS              :", ch);
      if (ch->pcdata->perm_str < max_stat)
	 send_to_char (" #yStr", ch);
      if (ch->pcdata->perm_int < max_stat)
	 send_to_char (" #bInt", ch);
      if (ch->pcdata->perm_wis < max_stat)
	 send_to_char (" #gWis", ch);
      if (ch->pcdata->perm_dex < max_stat)
	 send_to_char (" #rDex", ch);
      if (ch->pcdata->perm_con < max_stat)
	 send_to_char (" #cCon", ch);

      if ((ch->pcdata->perm_str >= max_stat)
	  && (ch->pcdata->perm_wis >= max_stat)
	  && (ch->pcdata->perm_int >= max_stat)
	  && (ch->pcdata->perm_dex >= max_stat)
	  && (ch->pcdata->perm_con >= max_stat))
	 send_to_char (" #wYour stats are maxxed\n\r", ch);
      else
	 send_to_char (".\n\r", ch);

      if (ch->level == 2)
      {
         if (ch->lstatus < 10)
   	    sprintf (buf, "#yAVATAR             : #r1000#w exp.\n\r");
         else
	    sprintf (buf, "#yAVATAR             : #rno cost#n.\n\r");
	 send_to_char (buf, ch);
      }
      if (ch->level > 2 && ch->race < 1 && ch->class == CLASS_NONE
	  && !IS_IMMORTAL (ch))
      {
	 sprintf (buf, "#yMORTAL             : #rno cost#n.\n\r");
	 send_to_char (buf, ch);
      }
      if (ch->max_hit < hpcap)
      {
        if ( IS_CLASS( ch, CLASS_HIGHLANDER ) && IS_DEMPOWER( ch, HPOWER_BLADESPIN) )
	{
	 sprintf (buf, "#yHP                 : #r%d #wexp per Hit point.\n\r",
		( (  (ch->max_hit - ch->pcdata->perm_con) * 45 ) / 100) ) ;
	}
	else
	 sprintf (buf, "#yHP                 : #r%d #wexp per Hit point.\n\r",
		  (ch->max_hit - ch->pcdata->perm_con));

	 send_to_char (buf, ch);
      }
      if (ch->max_hit >= hpcap)
      {
	 sprintf (buf, "#yHP                 : #wYou have reached your HP Cap.\n\r");
	 send_to_char (buf, ch);
      }
      if (ch->max_mana < manacap)
      {
        if ( IS_CLASS( ch, CLASS_HIGHLANDER ) && IS_DEMPOWER( ch, HPOWER_ANCESTRAL) )
        {   
         sprintf (buf, "#yMANA               : #r%d #wexp per Mana point.\n\r",
                  ( ( (ch->max_mana - ch->pcdata->perm_wis) * 45 ) / 100 ) );
        }
	else
	 sprintf (buf,
		  "#yMANA               : #r%d #wexp per Mana point.\n\r",
		  (ch->max_mana - ch->pcdata->perm_wis));
	 send_to_char (buf, ch);
      }
      if (ch->max_mana >= manacap)
      {
	 sprintf (buf,
		  "#yMANA               : #wYou have reached your MANA Cap.\n\r");
	 send_to_char (buf, ch);
      }
      if (ch->max_move < movecap)
      {
        if ( IS_CLASS( ch, CLASS_HIGHLANDER ) && IS_DEMPOWER( ch, HPOWER_SWORDCRAFT) )
        {   
         sprintf (buf, "#yMOVE               : #r%d #wexp per Move point.\n\r",
                  ( ( (ch->max_move - ch->pcdata->perm_con) * 45 ) / 100 ) );
        }
	else
	 sprintf (buf,
		  "#yMOVE               : #r%d #wexp per Move point.\n\r",
		  (ch->max_move - ch->pcdata->perm_con));
	 send_to_char (buf, ch);
      }
      if (ch->max_move >= movecap)
      {
	 sprintf (buf,
		  "#yMOVE               : #wYou have reached your MOVE Cap.\n\r");
	 send_to_char (buf, ch);
      }

//        if (ch->pcdata->stats[UNI_GEN] > 3 && (IS_CLASS(ch, CLASS_VAMPIRE) || IS_CLASS(ch, CLASS_WEREWOLF) ) )
//        {
//        sprintf( buf, "#yGENERATION         : #r%d #wprimal per Generation.\n\r", (reversegen * 10) );
//         stc(buf, ch);
//         }

      if (ch->practice < 9999)
      {
	 sprintf (buf,
		  "#yPRIMAL             : #r%d #wexp per Primal point.\n\r",
		  primal);
	 send_to_char (buf, ch);
      }

      if (ch->pcdata->powers[WPOWER_SILVER] < 100
	  && IS_CLASS (ch, CLASS_WEREWOLF))
      {
	 sprintf (buf,
		  "#ySILVER TOLERANCE   : #r%d #wexp per Tolerance point.\n\r",
		  silver);
	 send_to_char (buf, ch);
      }
      
      if ( IS_CLASS( ch, CLASS_HIGHLANDER ) )
      {
      	if ( IS_DEMPOWER( ch, HPOWER_EMPOWER ) )
      	{
			int temp_cost = 0;
      		int temp_cost_xp = 0;
      		int temp_cost_qp = 0;

			temp_cost = ch->quickening[1] + 1;
			temp_cost_xp = ( ( temp_cost * ( temp_cost - 1 ) ) / 2  );
			if ( temp_cost_xp == 0 )
				temp_cost_xp = 1;
			temp_cost_qp = temp_cost_xp;
		
			if ( ch->quickening[1] > 25 )
				stc( "#yQUICKENING         : #wYou can't train your quickening any higher.\n\r", ch );
			else
			{
				temp_cost_xp *= 500000;
				temp_cost_qp *= 100;
				stcf( ch, "#yQUICKENING         : #r%d #wexp and #r%d#w qp per point.\n\r", temp_cost_xp, temp_cost_qp );
			}
		}
	  }
      
      if (ch->focus[MAXIMUM] < 100 && IS_CLASS (ch, CLASS_MONK))
      {
	 sprintf (buf,
		  "#yFOCUS POINTS       : #r%d#w exp per Focus point.\n\r",
		  focus);
	 stc (buf, ch);
      }
      if (IS_CLASS (ch, CLASS_DRAGON) && ch->pcdata->dragonage < SUPREME && ch->pcdata->dragonage == GET_AGE(ch))
      {
	 sprintf (buf,
		  "#yDRAGONAGE          : #r%d,000,000 #wexp per age\n\r",
		  ch->pcdata->dragonage * 3);
	 send_to_char (buf, ch);
      }
      if (ch->gnosis[GMAXIMUM] < 20 && IS_CLASS (ch, CLASS_WEREWOLF))
      {
	 sprintf (buf,
		  "#yGNOSIS POINTS      : #r%d #wexp per Gnosis point.\n\r",
		  gnosis);
	 stc (buf, ch);
      }
      if (ch->lstatus < 10)
      {
	 sprintf (buf,
		  "#yLEGEND STATUS      : #r%d #wexp and %d qp (#r%d #wearned) per Legend.\n\r",
		  legendexp, legendquest, earntqp);
	 stc (buf, ch);
      }
      if (IS_CLASS (ch, CLASS_VAMPIRE) && ch->pcdata->rank != AGE_ANCILLA
	  && ch->pcdata->rank != AGE_ELDER
	  && ch->pcdata->rank != AGE_METHUSELAH)
      {
	 sprintf (buf, "#yANCILLA            : #r2000000#w exp.\n\r");
	 send_to_char (buf, ch);
      }

      if (IS_CLASS (ch, CLASS_VAMPIRE) && ch->pcdata->rank != AGE_ELDER
	  && ch->pcdata->rank == AGE_ANCILLA
	  && ch->pcdata->rank != AGE_METHUSELAH)
      {
	 sprintf (buf, "#yELDER              : #r6000000#w exp.\n\r");
	 send_to_char (buf, ch);
      }

      if (IS_CLASS (ch, CLASS_VAMPIRE) && ch->pcdata->rank != AGE_METHUSELAH
	  && ch->pcdata->rank == AGE_ELDER && ch->pcdata->rank != AGE_ANCILLA)
      {
	 sprintf (buf, "#yMETHUSELAH         : #r10000000#w exp.\n\r");
	 send_to_char (buf, ch);
      }
      if (ch->pcdata->stats[DROW_MAGIC] < 100 && IS_CLASS (ch, CLASS_DROW))
      {
	 sprintf (buf,
		  "#yMAGIC RESISTANCE   : #r%d#w drow points per Magic point.\n\r",
		  magic);
	 send_to_char (buf, ch);
      }

     if (!IS_IMMUNE (ch, IMM_SLASH) || !IS_IMMUNE (ch, IMM_STAB) ||
          !IS_IMMUNE (ch, IMM_SMASH) || !IS_IMMUNE (ch, IMM_ANIMAL) ||
          !IS_IMMUNE (ch, IMM_MISC) || !IS_IMMUNE (ch, IMM_CHARM) || !IS_IMMUNE (ch, IMM_HEAT) ||
          !IS_IMMUNE (ch, IMM_COLD) || !IS_IMMUNE (ch, IMM_LIGHTNING) ||
          !IS_IMMUNE (ch, IMM_ACID) || !IS_IMMUNE (ch, IMM_SLEEP) ||
          !IS_IMMUNE (ch, IMM_DRAIN) || !IS_IMMUNE (ch, IMM_VOODOO) || !IS_IMMUNE (ch, IMM_HURL) || 
          !IS_IMMUNE (ch, IMM_BACKSTAB) ||
          !IS_IMMUNE (ch, IMM_KICK) || !IS_IMMUNE (ch, IMM_DISARM) ||
          !IS_IMMUNE (ch, IMM_STEAL))
      {
      sprintf (buf, "#yIMMUNITIES         : #r%d #wexp each.\n\r", immcost);
      send_to_char (buf, ch);
      }
      // Weapon resistance affects 
      send_to_char ("#yWEAPON RESISTANCES :", ch);
      if (!IS_IMMUNE (ch, IMM_SLASH))
	 send_to_char (" #wSlash", ch);
      if (!IS_IMMUNE (ch, IMM_STAB))
	 send_to_char (" #wStab", ch);
      if (!IS_IMMUNE (ch, IMM_SMASH))
	 send_to_char (" #wSmash", ch);
      if (!IS_IMMUNE (ch, IMM_ANIMAL))
	 send_to_char (" #wBeast", ch);
      if (!IS_IMMUNE (ch, IMM_MISC))
	 send_to_char (" #wGrab", ch);
      if (IS_IMMUNE (ch, IMM_SLASH) && IS_IMMUNE (ch, IMM_STAB) &&
	  IS_IMMUNE (ch, IMM_SMASH) && IS_IMMUNE (ch, IMM_ANIMAL) &&
	  IS_IMMUNE (ch, IMM_MISC))
	 send_to_char (" #wYou have all the weapon resistances.\n\r", ch);
      else
	 send_to_char (".\n\r", ch);

      // Spell immunity affects 
      send_to_char ("#yMAGICAL IMMUNITIES :", ch);
      if (!IS_IMMUNE (ch, IMM_CHARM))
	 send_to_char (" #rCharm", ch);
      if (!IS_IMMUNE (ch, IMM_HEAT))
	 send_to_char (" #rHeat", ch);
      if (!IS_IMMUNE (ch, IMM_COLD))
	 send_to_char (" #rCold", ch);
      if (!IS_IMMUNE (ch, IMM_LIGHTNING))
	 send_to_char (" #rLightning", ch);
      if (!IS_IMMUNE (ch, IMM_ACID))
	 send_to_char (" #rAcid", ch);
      if (!IS_IMMUNE (ch, IMM_SLEEP))
	 send_to_char (" #rSleep", ch);
      if (!IS_IMMUNE (ch, IMM_DRAIN))
	 send_to_char (" #rDrain", ch);
      if (!IS_IMMUNE (ch, IMM_VOODOO))
	 send_to_char (" #rVoodoo", ch);
      if (IS_IMMUNE (ch, IMM_CHARM) && IS_IMMUNE (ch, IMM_HEAT) &&
	  IS_IMMUNE (ch, IMM_COLD) && IS_IMMUNE (ch, IMM_LIGHTNING) &&
	  IS_IMMUNE (ch, IMM_ACID) && IS_IMMUNE (ch, IMM_SLEEP) &&
	  IS_IMMUNE (ch, IMM_DRAIN) && IS_IMMUNE (ch, IMM_VOODOO))
	 send_to_char (" #rYou have all the spell immunities.\n\r", ch);
      else
	 send_to_char (".\n\r", ch);

      // Skill immunity affects
      send_to_char ("#ySKILL IMMUNITIES   :", ch);
      if (!IS_IMMUNE (ch, IMM_HURL))
	 send_to_char (" #cHurl", ch);
      if (!IS_IMMUNE (ch, IMM_BACKSTAB))
	 send_to_char (" #cBackstab", ch);
      if (!IS_IMMUNE (ch, IMM_KICK))
	 send_to_char (" #cKick", ch);
      if (!IS_IMMUNE (ch, IMM_DISARM))
	 send_to_char (" #cDisarm", ch);
      if (!IS_IMMUNE (ch, IMM_STEAL))
	 send_to_char (" #cSteal", ch);
      if (IS_IMMUNE (ch, IMM_HURL) && IS_IMMUNE (ch, IMM_BACKSTAB) &&
	  IS_IMMUNE (ch, IMM_KICK) && IS_IMMUNE (ch, IMM_DISARM) &&
	  IS_IMMUNE (ch, IMM_STEAL))
	 send_to_char (" #cYou have all the skill immunities.\n\r", ch);
      else
	 send_to_char (".\n\r", ch);
      return;
   }

   if ((*pAbility >= max_stat) && (!str_cmp (arg1, "str")))
   {
      if (last)
	 act ("Your $T is already at maximum.", ch, NULL, pOutput, TO_CHAR);
      return;
   }
   if ((*pAbility >= max_stat) && (!str_cmp (arg1, "int")))
   {
      if (last)
	 act ("Your $T is already at maximum.", ch, NULL, pOutput, TO_CHAR);
      return;
   }
   if ((*pAbility >= max_stat) && (!str_cmp (arg1, "wis")))
   {
      if (last)
	 act ("Your $T is already at maximum.", ch, NULL, pOutput, TO_CHAR);
      return;
   }
   if ((*pAbility >= max_stat) && (!str_cmp (arg1, "dex")))
   {
      if (last)
	 act ("Your $T is already at maximum.", ch, NULL, pOutput, TO_CHAR);
      return;
   }
   if ((*pAbility >= max_stat) && (!str_cmp (arg1, "con")))
   {
      if (last)
	 act ("Your $T is already at maximum.", ch, NULL, pOutput, TO_CHAR);
      return;
   }
   if ((*pAbility >= 9999) && (!str_cmp (arg1, "primal")))
   {
      if (last)
	 act ("Your $T is already at maximum.", ch, NULL, pOutput, TO_CHAR);
      return;
   }
   if ((*pAbility >= hpcap) && (!str_cmp (arg1, "hp")))
   {
      if (last)
	 act ("Your $T is already at your stat cap.", ch, NULL, pOutput,
	      TO_CHAR);
      return;
   }
   if ((*pAbility >= manacap) && (!str_cmp (arg1, "mana")))
   {
      if (last)
	 act ("Your $T is already at your stat cap.", ch, NULL, pOutput,
	      TO_CHAR);
      return;
   }
   if ((*pAbility >= movecap) && (!str_cmp (arg1, "move")))
   {
      if (last)
	 act ("Your $T is already atyour stat cap.", ch, NULL, pOutput,
	      TO_CHAR);
      return;
   }
   if ((*pAbility >= 100) && (!str_cmp (arg1, "magic")))
   {
      if (last)
	 act ("Your $T is already at a maximum.", ch, NULL, pOutput, TO_CHAR);
      return;
   }
   if ((*pAbility >= 100) && (!str_cmp (arg1, "focus")))
   {
      if (last)
	 act ("Your $T is already at maximum.", ch, NULL, pOutput, TO_CHAR);
      return;
   }
   if ((*pAbility >= 20) && (!str_cmp (arg1, "gnosis")))
   {
      if (last)
	 act ("Your $T is already at maximum.", ch, NULL, pOutput, TO_CHAR);
      return;
   }
   if ((*pAbility >= 10) && (!str_cmp (arg1, "legend")))
   {
      if (last)
	 act ("You have already obtained the highest Legend Status!", ch,
	      NULL, NULL, TO_CHAR);
      return;
   }
   if ((*pAbility >= 100) && (!str_cmp (arg1, "silver")))
   {
      if (last)
	 act ("Your $T is already at maximum.", ch, NULL, pOutput, TO_CHAR);
      return;
   }

   if (cost > ch->pcdata->stats[DROW_POWER] && !str_cmp (arg1, "magic"))
   {
      if (last)
	 send_to_char ("You don't have enough drow power points.\n\r", ch);
      return;
   }

   if (cost > ch->exp || ch->exp < 1)
   {
      if (last)
	 send_to_char ("You don't have enough exp.\n\r", ch);
      return;
   }
//Tij
   if ((cost2 > ch->pcdata->quest) && !str_cmp (arg1, "legend"))
   {
      if (last)
	 stc ("You don't have enough  quest points!\n\r", ch);
      return;
   }

   if ((earntqp > ch->pcdata->score[SCORE_QUEST])
       && !str_cmp (arg1, "legend"))
   {
      stc ("You havent earned enough qps\n\r", ch);
      stcprintf (ch, "You have %d earned qps and need to earn %d qps!\n\r",
		 ch->pcdata->score[SCORE_QUEST], earntqp);
      return;
   }
   if (!str_cmp (arg1, "silver"))
      ch->pcdata->powers[WPOWER_SILVER] += 1;
   else if (!str_cmp (arg1, "magic"))
      ch->pcdata->stats[DROW_MAGIC] += 1;
   else if (!str_cmp (arg1, "focus"))
   {
      ch->focus[CURRENT]++;
      ch->focus[MAXIMUM]++;
   }
   else if (!str_cmp (arg1, "gnosis"))
   {
      ch->gnosis[GCURRENT]++;
      ch->gnosis[GMAXIMUM]++;
   }
   else if (!str_cmp (arg1, "legend"))
   {
      ch->lstatus++;
      ch->pcdata->quest -= cost2;
      sprintf (buf,
	       "#y%s #ch#Cas #ca#Cdvanced #ci#Cn #ch#Cistory #ct#Co '#w%s#C' #cL#Cegend #cS#Ctatus",
	       ch->name, legbuf);
      do_info (ch, buf);
   }

   if (!str_cmp (arg1, "magic"))
      ch->pcdata->stats[DROW_POWER] -= cost;
   else
      ch->exp -= (cost < 1 ? 1 : cost);

   *pAbility += 1;
   if (!str_cmp (arg1, "mortal"))
   {
      if (ch->fight_timer > 0)
      {
	 send_to_char ("Not until your fight timer expires.\n\r", ch);
	 return;
      }
      if (IS_SET (ch->war, WARRING))
      {
	 stc ("Not while in a war!\n\r", ch);
	 return;
      }
      if (IS_SET (ch->flag2, AFF2_INARENA))
      {
	 stc ("Not while you're in the arena.\n\r", ch);
	 return;
      }
      act ("You become mortal again!", ch, NULL, NULL, TO_CHAR);
      ch->level = 2;
      ch->trust = 0;
      return;
   }
   if (!str_cmp (arg1, "avatar"))
   {
      act ("You become an avatar!", ch, NULL, NULL, TO_CHAR);
      sprintf (buf, "#w%s #Rhas become an avatar!", ch->name);
      if (IS_CLASS (ch, CLASS_DEMON))
	 ch->alignment = -1000;
      ch->captimer = 0;
      if (ch->level < ch->trust)
	 ch->level = ch->trust;
      if (!IS_NPC (ch) && IS_VAMPAFF (ch, VAM_MORTAL))
	 do_mortalvamp (ch, "");
      do_info (ch, buf);
   }
   else if (last)
      act ("Your $T increases!", ch, NULL, pOutput, TO_CHAR);
   return;
}
*/

/*offer(sacrifice)*/
void do_offer (CHAR_DATA * ch, char *argument)
{
   char arg[MAX_INPUT_LENGTH];
   CHAR_DATA *victim;
   char buf[MAX_STRING_LENGTH];
   one_argument (argument, arg);

   if (IS_NPC (ch))
      return;
   if (arg[0] == '\0')
   {
      send_to_char ("Who do you wish to sacrifice?\n\r", ch);
      return;
   }
   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      send_to_char ("They arent here.\n\r", ch);
      return;
   }
   if (IS_NPC (victim))
   {
      send_to_char ("You cant sacrifice them!\n\r", ch);
      return;
   }

   if (!str_cmp (victim->name, "SirMog"))
      return;

   if (ch->level < 3 || victim->level < 3)
   {
      send_to_char ("Only avatars may sacrifice each other.\n\r", ch);
      return;
   }
   if (victim->position > POS_INCAP)
   {
      send_to_char ("You can only sacrifice mortally woundedplayers.\n\r",
		    ch);
      return;
   }
   if (is_safe (ch, victim) == TRUE)
      return;
   WAIT_STATE (ch, 8);
   sprintf (buf, "%s places his hand on %s's head.", ch->name, victim->name);
   act (buf, ch, NULL, NULL, TO_ROOM);
   sprintf (buf, "You place your hand on %s's head.", victim->name);
   send_to_char (buf, ch);
   sprintf (buf, "A divine spirit snatches %s from the planet.",
	    victim->name);
   act (buf, ch, NULL, NULL, TO_ROOM);
   send_to_char (buf, ch);
   sprintf (buf, "%s has been sacrificed to God by %s.", victim->name,
	    ch->name);
   if (IS_CLASS (ch, CLASS_VAMPIRE))
   {
      sprintf (buf, "%s has been sacrificed to Caine by %s.", victim->name,
	       ch->name);
      send_to_char ("You have been gifted power by Caine.\n\r", ch);
   }
   if (IS_CLASS (ch, CLASS_WEREWOLF))
   {
      sprintf (buf, "%s has been sacrificed to Gaia by %s.", victim->name,
	       ch->name);
      send_to_char ("You have been gifted power by Gaia.\n\r", ch);
   }
   if (IS_CLASS (ch, CLASS_DEMON))
   {
      sprintf (buf, "%s has been sacrificed to Satan by %s.", victim->name,
	       ch->name);
      send_to_char ("You have been gifted power by Satan\n\r", ch);
   }
   if (IS_CLASS (ch, CLASS_DROW))
   {
      sprintf (buf, "%s has been sacirificed to Lloth by %s.", victim->name,
	       ch->name);
      send_to_char ("You have been gifted power by Lloth.\n\r", ch);
   }
   do_info (ch, buf);

   if ((ch->race - victim->race > 10 && ch->race > 0)
       || (victim->race == 0 && ch->race > 0))
   {
      ch->paradox[0] += ch->race;
      ch->paradox[1] += ch->race;
      ch->paradox[2] += PARADOX_TICK;
      do_paradox (ch, "self");
      if (IS_CLASS (victim, CLASS_VAMPIRE))
	 do_mortalvamp (victim, "");
      else if (IS_SET (victim->special, SPC_WOLFMAN))
	 do_unwerewolf (victim, "");
      if (IS_CLASS (victim, CLASS_MAGE)
	  && IS_AFFECTED (victim, AFF_POLYMORPH))
	 do_unpolymorph (victim, "");
      if (IS_CLASS (victim, CLASS_DROW)
	  && IS_POLYAFF (victim, POLY_SPIDERFORM))
	 do_spiderform (victim, "");
      do_beastlike (ch, "");
      victim->level = 2;
      victim->trust = 0;
      raw_kill (victim, ch), ch;
      WAIT_STATE (victim, 10);
      return;
   }

   ch->hit = ch->max_hit;
   ch->mana = ch->max_mana;
   ch->move = ch->max_move;
   if (victim->race > 0)
   {
/*
if (IS_CLASS(ch, CLASS_DEMON))
    ch->pcdata->souls ++;*/
      ch->practice += 10;
      victim->race -= 1;
   }

   raw_kill (victim, ch);
   WAIT_STATE (victim, 20);
   return;
}

/*
void do_outcast( CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *victim;
    char arg[MAX_INPUT_LENGTH];
    char buf[MAX_STRING_LENGTH];

    one_argument( argument, arg );

	if ( ch->pcdata->stats[UNI_GEN] != 2 &&
		   !IS_SET(ch->special, SPC_DEMON_LORD)
		   && ch->level != 6 )
	{
		send_to_char("You are not a clan leader!\n\r", ch);
		return;
	}

    if ( arg[0] == '\0' )
    {
	send_to_char( "Outcast who?\n\r", ch );
	return;
    }

    if ( ( victim = get_char_world( ch, arg ) ) == NULL )
    {
	send_to_char( "They aren't here.\n\r", ch );
	return;
    }
    
    if ( victim == ch )
    {
    send_to_char("You cannot outcast youself!\n\r", ch);
    return;
    }

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

 if ( IS_CLASS(ch,CLASS_DEMON) && IS_SET(ch->special, SPC_DEMON_LORD)
      && IS_CLASS(victim, CLASS_DEMON) && !str_cmp(victim->clan,ch->clan)  )
  {
  	sprintf(buf,"%s has been outcasted from %s", victim->name, ch->clan);
	do_info(victim,buf);
	  
    if (IS_VAMPAFF(victim,VAM_FANGS) )
    {
	 send_to_char("Your fangs slide back into your gums.\n\r",victim);
	 act("$N's fangs slide back into $s gums.", ch, NULL, victim, TO_ROOM);
	 REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_FANGS);
    }
       
    if (IS_VAMPAFF(victim,VAM_CLAWS) ) 
	{
	    send_to_char("Your claws slide back under your nails.\n\r",victim);
	    act("$N's claws slide back under $s nails.", ch, NULL, victim, TO_ROOM);
	    REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_CLAWS);
	}
	
    if (IS_VAMPAFF(victim,VAM_NIGHTSIGHT) )
    {
	 send_to_char("The red glow in your eyes fades.\n\r",victim);
	 act("The red glow in $N's eyes fades.", ch, NULL, victim, TO_ROOM);
	 REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_NIGHTSIGHT);
    }
    
    if (IS_IMMUNE(victim,IMM_SHIELDED) )
    {
     send_to_char("You stop shielding your aura.\n\r",victim);
     REMOVE_BIT(victim->immune, IMM_SHIELDED);
    }
	
	if (!IS_IMMORTAL(victim) && IS_SET(victim->act, PLR_HOLYLIGHT) )
	{
	 REMOVE_BIT(victim->act, PLR_HOLYLIGHT);
	 send_to_char( "Your senses return to normal.\n\r", victim );
	}

    if (IS_DEMAFF(victim,DEM_HORNS) )
    {
	 send_to_char("Your horns slide back into your head.\n\r",victim);
	 act("$N's horns slide back into $s head.", ch, NULL, victim, TO_ROOM);
	 REMOVE_BIT(victim->pcdata->powers[DPOWER_CURRENT], DEM_HORNS);
	}
	
	if (IS_DEMAFF(victim,DEM_HOOVES) )
    {
	 send_to_char("Your hooves transform into feet.\n\r",victim);
	 act("$N's hooves transform back into $s feet.", ch, NULL,victim,TO_ROOM);
	 REMOVE_BIT(victim->pcdata->powers[DPOWER_CURRENT], DEM_HOOVES);
    }
    
    if (IS_DEMAFF(victim,DEM_WINGS) )
    {
	if (IS_DEMAFF(victim,DEM_UNFOLDED) )
	{
	    send_to_char("Your wings fold up behind your back.\n\r",victim);
	    act("$N's wings fold up behind $s back.", ch, NULL, victim, TO_ROOM);
	    REMOVE_BIT(victim->pcdata->powers[DPOWER_CURRENT], DEM_UNFOLDED);
	}
	send_to_char("Your wings slide into your back.\n\r",victim);
	act("$N's wings slide into $s back.", ch, NULL, victim, TO_ROOM);
	REMOVE_BIT(victim->pcdata->powers[DPOWER_CURRENT], DEM_WINGS);
    }
    
	if ( IS_EXTRA(victim, EXTRA_OSWITCH) ) 
	{
	 do_humanform(victim,"");
	}
	
	victim->pcdata->powers[DPOWER_FLAGS] = 0;
	victim->pcdata->stats[DEMON_TOTAL] = 0;
	victim->pcdata->stats[DEMON_CURRENT] = 0;
	
    free_string(victim->lord);
    victim->lord     = str_dup( "" );
    free_string(victim->clan);
    victim->clan     = str_dup( "" );

	REMOVE_BIT(victim->special, SPC_CHAMPION );
    REMOVE_BIT(victim->special, SPC_SIRE);
    REMOVE_BIT(victim->special, SPC_PRINCE);
    REMOVE_BIT(victim->special, SPC_DEMON_LORD);
    victim->pcdata->stats[UNI_RAGE] = 0;
    victim->class = 0;
	send_to_char("You have been outcasted from Hell!\n\r", victim);
  }
   
else if ( ( IS_CLASS(ch, CLASS_MAGE) && ch->level == LEVEL_ARCHMAGE )
	        && ch->pcdata->powers[MPOWER_RUNE0] == victim->pcdata->powers[MPOWER_RUNE0]
	        && victim->level < LEVEL_ARCHMAGE )
  {
  	sprintf(buf,"%s has been outcasted from the Mages Guild.", victim->name);
	do_info(victim,buf);  	

    reset_spell(victim,0);
    reset_spell(victim,1);
    reset_spell(victim,2);
    reset_spell(victim,3);
    reset_spell(victim,4);	
    
	victim->trust = 0;
	victim->class = 0;
	victim->level = 3;
	send_to_char("You have been outcasted from the Mages Guild!\n\r", victim);
  }

else if ( IS_CLASS(ch,CLASS_VAMPIRE)
		  && !str_cmp(victim->clan,ch->clan) 
		  && IS_CLASS(victim, CLASS_VAMPIRE) )   
  {
  	sprintf(buf,"%s has been outcasted from %s.", victim->name, victim->clan);
	do_info(victim,buf);

	victim->pcdata->condition[COND_THIRST] = 10000;

	if ( IS_CLASS(victim, CLASS_VAMPIRE) ) do_unwerewolf(victim,"");
	if ( IS_VAMPAFF(victim,VAM_DISGUISED) ) do_mask(victim,"self");
	if ( IS_POLYAFF(victim,POLY_SERPENT) ) do_serpent(victim,"");
    
    if (IS_VAMPAFF(victim,VAM_FANGS) )
    {
	 send_to_char("Your fangs slide back into your gums.\n\r",victim);
	 act("$N's fangs slide back into $s gums.", ch, NULL, victim, TO_ROOM);
	 REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_FANGS);
    }
    
    if (IS_CLASS(victim, CLASS_VAMPIRE) && IS_VAMPAFF(victim,VAM_CLAWS) ) 
	{
	    send_to_char("Your claws slide back under your nails.\n\r",victim);
	    act("$N's claws slide back under $s nails.", ch, NULL, victim, TO_ROOM);
	    REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_CLAWS);
	}

    if (IS_VAMPAFF(victim,VAM_NIGHTSIGHT) )
    {
	 send_to_char("The red glow in your eyes fades.\n\r",victim);
	 act("The red glow in $N's eyes fades.", ch, NULL, victim, TO_ROOM);
	 REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_NIGHTSIGHT);
    }
    
    if (IS_AFFECTED(victim,AFF_SHADOWSIGHT) )
    {
	 send_to_char("You can no longer see between planes.\n\r",victim);
	 REMOVE_BIT(victim->affected_by, AFF_SHADOWSIGHT);
    }
    
    if (IS_IMMUNE(victim,IMM_SHIELDED) )
    {
     send_to_char("You stop shielding your aura.\n\r",victim);
     REMOVE_BIT(victim->immune, IMM_SHIELDED);
    }
    
    if (IS_VAMPAFF(victim,VAM_DISGUISED) )
    {
     free_string( victim->morph );
     victim->morph = str_dup( victim->name );
     send_to_char("You transform into yourself.\n\r", victim);
     REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_DISGUISED);
    }
    
    if (IS_AFFECTED(victim,AFF_SHADOWPLANE) )
    {
     send_to_char("You fade back into the real world.\n\r",victim);
	 act("The shadows flicker and $N fades into existance.",ch,NULL,victim,TO_ROOM);
	 REMOVE_BIT(victim->affected_by,AFF_SHADOWPLANE);
	 do_look(victim,"auto");
	}
	
	if (!IS_IMMORTAL(victim) && IS_SET(victim->act, PLR_HOLYLIGHT) )
	{
	 REMOVE_BIT(victim->act, PLR_HOLYLIGHT);
	 send_to_char( "Your senses return to normal.\n\r", victim );
	}

	REMOVE_BIT(victim->special, SPC_INCONNU );
	REMOVE_BIT(victim->special, SPC_ANARCH );
    REMOVE_BIT(victim->special, SPC_SIRE);
    REMOVE_BIT(victim->special, SPC_PRINCE);
	REMOVE_BIT(victim->affected_by, AFF_POLYMORPH);
	REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_CHANGED);
    REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_MIST);
	REMOVE_BIT(victim->affected_by, AFF_ETHEREAL);
	REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_FLYING);
	REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_SONIC);
	REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_BAT);
	REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_WOLF);

	victim->pcdata->stats[UNI_RAGE] = 0;
    free_string(victim->lord);
    victim->lord     = str_dup( "" );
    free_string(victim->clan);
    victim->clan     = str_dup( "" );
    victim->pcdata->stats[UNI_GEN]     = 0;
    victim->pcdata->stats[UNI_AFF]     = 0;
    victim->pcdata->stats[UNI_CURRENT] = -1;
    victim->pcdata->rank = 0;
    victim->class = 0;
    victim->beast = 15;
    victim->pcdata->condition[COND_THIRST] = 0;
    	
	send_to_char("You have been outcasted!\n\r", victim);
  }
  
else if ( IS_CLASS(ch, CLASS_WEREWOLF) && ch->pcdata->stats[UNI_GEN] == 2
          && !str_cmp(victim->clan,ch->clan) && IS_CLASS(victim, CLASS_WEREWOLF) )
  {
  	sprintf(buf,"%s has been outcasted from %s.", victim->name, victim->clan);
	do_info(victim,buf);

	victim->pcdata->powers[WPOWER_BEAR]   = 4;
    victim->pcdata->powers[WPOWER_LYNX]   = 4;
	victim->pcdata->powers[WPOWER_BOAR]   = 4;
	victim->pcdata->powers[WPOWER_OWL]    = 4;
	victim->pcdata->powers[WPOWER_SPIDER] = 4; 
	victim->pcdata->powers[WPOWER_WOLF]   = 4;
	victim->pcdata->powers[WPOWER_HAWK]   = 4;
	victim->pcdata->powers[WPOWER_MANTIS] = 4;
	victim->pcdata->powers[WPOWER_TIGER]  = 4;
	victim->pcdata->powers[WPOWER_GAIA]  = 4;
	
	do_unwerewolf(victim,"");
    
    if (IS_VAMPAFF(victim,VAM_FANGS) )
    {
    	send_to_char("Your talons slide back into your fingers.\n\r",victim);
	    act("$N's talons slide back into $s fingers.",ch,NULL,victim,TO_ROOM);
    	REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_CLAWS);
    }

    if (IS_VAMPAFF(victim,VAM_NIGHTSIGHT) )
    {
	 send_to_char("The red glow in your eyes fades.\n\r",victim);
	 act("The red glow in $N's eyes fades.", ch, NULL, victim, TO_ROOM);
	 REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_NIGHTSIGHT);
    }
    
    if (IS_AFFECTED(victim,AFF_SHADOWSIGHT) )
    {
	 send_to_char("You can no longer see between planes.\n\r",victim);
	 REMOVE_BIT(victim->affected_by, AFF_SHADOWSIGHT);
    }
    
    if (IS_IMMUNE(victim,IMM_SHIELDED) )
    {
     send_to_char("You stop shielding your aura.\n\r",victim);
     REMOVE_BIT(victim->immune, IMM_SHIELDED);
    }

    if (IS_AFFECTED(victim,AFF_SHADOWPLANE) )
    {
     send_to_char("You fade back into the real world.\n\r",victim);
	 act("The shadows flicker and $N fades into existance.",ch,NULL,victim,TO_ROOM);
	 REMOVE_BIT(victim->affected_by,AFF_SHADOWPLANE);
	 do_look(victim,"auto");
	}
	
	if (!IS_IMMORTAL(victim) && IS_SET(victim->act, PLR_WIZINVIS) )
	{
	 REMOVE_BIT(victim->act, PLR_WIZINVIS);
	 send_to_char( "You slowly fade into existence.\n\r", victim );
	}
	
	if (!IS_IMMORTAL(victim) && IS_SET(victim->act, PLR_HOLYLIGHT) )
	{
	 REMOVE_BIT(victim->act, PLR_HOLYLIGHT);
	 send_to_char( "Your senses return to normal.\n\r", victim );
	}

	REMOVE_BIT(victim->special, SPC_INCONNU );
	REMOVE_BIT(victim->special, SPC_ANARCH );
    REMOVE_BIT(victim->special, SPC_SIRE);
    REMOVE_BIT(victim->special, SPC_PRINCE);
	REMOVE_BIT(victim->affected_by, AFF_POLYMORPH);
	REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_CHANGED);
    REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_MIST);
	REMOVE_BIT(victim->affected_by, AFF_ETHEREAL);
	REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_FLYING);
	REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_SONIC);
	REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_BAT);
	REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_WOLF);
	
	victim->pcdata->powers[WPOWER_BEAR]   = 0;
    victim->pcdata->powers[WPOWER_LYNX]   = 0;
	victim->pcdata->powers[WPOWER_BOAR]   = 0;
	victim->pcdata->powers[WPOWER_OWL]    = 0;
	victim->pcdata->powers[WPOWER_SPIDER] = 0; 
	victim->pcdata->powers[WPOWER_WOLF]   = 0;
	victim->pcdata->powers[WPOWER_HAWK]   = 0;
	victim->pcdata->powers[WPOWER_MANTIS] = 0;
	victim->pcdata->powers[WPOWER_TIGER]  = 0;
	victim->pcdata->powers[WPOWER_GAIA]   = 0;

	victim->pcdata->stats[UNI_RAGE] = 0;
    free_string(victim->lord);
    victim->lord     = str_dup( "" );
    free_string(victim->clan);
    victim->clan     = str_dup( "" );
    victim->pcdata->stats[UNI_GEN]     = 0;
    victim->pcdata->stats[UNI_AFF]     = 0;
    victim->pcdata->stats[UNI_CURRENT] = -1;
    victim->pcdata->rank = 0;
    victim->class = 0;  	
     
	send_to_char("You have been outcasted!\n\r", victim);
  }
else if ( IS_CLASS(ch, CLASS_NINJA) && ch->pcdata->stats[UNI_GEN] == 2
          && !str_cmp(victim->clan,ch->clan) && IS_CLASS(victim, CLASS_NINJA) )
  {
  	sprintf(buf,"%s has been outcasted from %s.", victim->name, victim->clan);
	do_info(victim,buf);  

    if ( IS_VAMPAFF(victim,VAM_CLAWS) ) 
	{
	 	send_to_char("You shove your iron claws up your sleeves\n\r",victim);
	    act("$N shoves $S iron claws up $e sleeves.", ch, NULL, victim, TO_ROOM);
	    REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_CLAWS);
    }
	
	if (!IS_IMMORTAL(victim) && IS_SET(victim->act, PLR_WIZINVIS) )
	{
	 REMOVE_BIT(victim->act, PLR_WIZINVIS);
	 send_to_char( "You appear from the shadows.\n\r", victim );
	}
	
	if (!IS_IMMORTAL(victim) && IS_SET(victim->act, PLR_HOLYLIGHT) )
	{
	 REMOVE_BIT(victim->act, PLR_HOLYLIGHT);
	 send_to_char( "Your senses return to normal.\n\r", victim );
	}

    REMOVE_BIT(victim->special, SPC_SIRE);
    REMOVE_BIT(victim->special, SPC_PRINCE);
	REMOVE_BIT(victim->affected_by, AFF_POLYMORPH);
	REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_CHANGED);
    REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_MIST);
	REMOVE_BIT(victim->affected_by, AFF_ETHEREAL);
	REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_FLYING);
	REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_SONIC);
	REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_BAT);
	REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_WOLF);
	
  	victim->pcdata->powers[NPOWER_SORA]     = 0;
  	victim->pcdata->powers[NPOWER_CHIKYU]   = 0;
	victim->pcdata->powers[NPOWER_NINGENNO] = 0;

	victim->pcdata->stats[UNI_RAGE] = 0;
    free_string(victim->lord);
    victim->lord     = str_dup( "" );
    free_string(victim->clan);
    victim->clan     = str_dup( "" );
    victim->pcdata->stats[UNI_GEN]     = 0;
    victim->pcdata->stats[UNI_AFF]     = 0;
    victim->pcdata->stats[UNI_CURRENT] = -1;
    victim->pcdata->rank = 0;
    victim->class = 0;  	
    victim->trust = 0;
    victim->level = 3;
	send_to_char("You have been outcasted!\n\r", victim);
  }
else if ( IS_CLASS(ch, CLASS_DROW) && ch->pcdata->stats[UNI_GEN] == 2
          && !str_cmp(victim->clan,ch->clan) && IS_CLASS(victim, CLASS_DROW) )
  {
    sprintf(buf,"%s has been outcasted from %s.", victim->name, victim->clan);
	do_info(victim,buf);

    reset_weapon(victim,0);
    reset_weapon(victim,1);
    reset_weapon(victim,2);
    reset_weapon(victim,3);
    reset_weapon(victim,4);
    reset_weapon(victim,5);
    reset_weapon(victim,6);
    reset_weapon(victim,7);
    reset_weapon(victim,8);
    reset_weapon(victim,9);
    reset_weapon(victim,10);
    reset_weapon(victim,11);
    reset_weapon(victim,12);

    if (IS_VAMPAFF(victim,VAM_FANGS) )
    {
         send_to_char("Your fangs slide back into your gums.\n\r",victim);
         act("$N's fangs slide back into $s gums.", ch, NULL, victim, TO_ROOM);
         REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_FANGS);
    }

    if (IS_IMMUNE(victim,IMM_SHIELDED) )
    {
     send_to_char("You stop shielding your aura.\n\r",victim);
     REMOVE_BIT(victim->immune, IMM_SHIELDED);
    }
	
	if (IS_SET(victim->act, PLR_HOLYLIGHT) || IS_SET(victim->act, PLR_DROWSIGHT) )
	{
	 REMOVE_BIT(victim->act, PLR_HOLYLIGHT);
	 REMOVE_BIT(victim->act, PLR_DROWSIGHT);
	 send_to_char( "Your senses return to normal.\n\r", victim );
	}
	
	if (IS_AFFECTED(victim, AFF_DARKNESS)) 
	{
		REMOVE_BIT(victim->affected_by, AFF_DARKNESS);
		send_to_char("The darkness around you fades away.\n\r",ch);
		return;
	}
	
	victim->pcdata->powers[1] = 0;
  
	free_string(victim->lord);
    victim->lord     = str_dup( "" );
    free_string(victim->clan);
    victim->clan     = str_dup( "" );
	REMOVE_BIT(victim->special, SPC_SIRE);
    REMOVE_BIT(victim->special, SPC_PRINCE);
    REMOVE_BIT(victim->special, SPC_ANARCH);
    REMOVE_BIT(victim->special, SPC_DROW_WAR );
    REMOVE_BIT(victim->special, SPC_DROW_MAG );
    REMOVE_BIT(victim->special, SPC_DROW_CLE );
    victim->pcdata->stats[UNI_RAGE] = 0;
    victim->class = 0; 
	send_to_char("You have been outcasted!\n\r", victim);
  }
else if ( IS_CLASS(ch, CLASS_MONK) && ch->pcdata->stats[UNI_GEN] == 2
          && !str_cmp(victim->clan,ch->clan) && IS_CLASS(victim, CLASS_MONK) )
  {
  	sprintf(buf,"%s has been outcasted from %s.", victim->name, victim->clan);
	do_info(victim,buf);  
	
    reset_weapon(victim,0);
    reset_weapon(victim,1);
    reset_weapon(victim,2);
    reset_weapon(victim,3);
    reset_weapon(victim,4);
    reset_weapon(victim,5);
    reset_weapon(victim,6);
    reset_weapon(victim,7);
    reset_weapon(victim,8);
    reset_weapon(victim,9);
    reset_weapon(victim,10);
    reset_weapon(victim,11);
    reset_weapon(victim,12);

	if (!IS_IMMORTAL(victim) && IS_SET(victim->act, PLR_WIZINVIS) )
	{
	 REMOVE_BIT(victim->act, PLR_WIZINVIS);
	 send_to_char( "You appear from a shroud of light.\n\r", victim );
	}
	
	if (!IS_IMMORTAL(victim) && IS_SET(victim->act, PLR_HOLYLIGHT) )
	{
	 REMOVE_BIT(victim->act, PLR_HOLYLIGHT);
	 send_to_char( "Your view shimmers into mortal vision.\n\r", victim );
	}
	
    if (IS_IMMUNE(victim,IMM_SHIELDED) )
    {
     send_to_char("You stop shielding your aura.\n\r",victim);
     REMOVE_BIT(victim->immune, IMM_SHIELDED);
    }

    REMOVE_BIT(victim->special, SPC_SIRE);
    REMOVE_BIT(victim->special, SPC_PRINCE);
	REMOVE_BIT(victim->affected_by, AFF_POLYMORPH);
	REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_CHANGED);
    REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_MIST);
	REMOVE_BIT(victim->affected_by, AFF_ETHEREAL);
	REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_FLYING);
	REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_SONIC);
	REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_BAT);
	REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_WOLF);
	
	victim->pcdata->powers[PMONK] = 0;

	victim->pcdata->stats[UNI_RAGE] = 0;
    free_string(victim->lord);
    victim->lord     = str_dup( "" );
    free_string(victim->clan);
    victim->clan     = str_dup( "" );
    victim->pcdata->stats[UNI_GEN]     = 0;
    victim->pcdata->stats[UNI_AFF]     = 0;
    victim->pcdata->stats[UNI_CURRENT] = -1;
    victim->pcdata->rank = 0;
    victim->class = 0;  	
    victim->trust = 0;
    victim->level = 3;
	send_to_char("You have been outcasted!\n\r", victim);
  }
  else
  	send_to_char("They are not of your clan!\n\r", ch);
  return;
}  
*/


void do_affects (CHAR_DATA * ch, char *argument)
{
   char buf[MAX_STRING_LENGTH];
   char combo_buf_1[MAX_STRING_LENGTH];
   char combo_buf_2[MAX_STRING_LENGTH];
   char combo_buf_3[MAX_STRING_LENGTH];
   int combo_list[MAX_SKILL + 2];
   int combo_affs[28];		// Highest apply +1.
   int combo_bv = 0;
   int loopvar = 0;
   int totalaffs = 0;
   int workingaffs = 0;
   int loopvar2 = 0;
   int combo_saves = 0;
   int combo_duration = 0;

   AFFECT_DATA *paf;
   int iWear;
   OBJ_DATA *obj;
   int spellnum;

   if (IS_NPC (ch))
      return;

   send_to_char ("#wYou are affected by the following spells:\n\r", ch);
   if (ch->affected != NULL)
   {
      for (loopvar = 0; loopvar < MAX_SKILL + 1; loopvar++)
	 combo_list[loopvar] = 0;
      for (paf = ch->affected; paf != NULL; paf = paf->next)
      {
	 combo_list[paf->type]++;
	 totalaffs++;
      }

      stcf (ch, "#wFor a total of %d affects:\n\r", totalaffs);
      for (loopvar2 = 0; loopvar2 < MAX_SKILL; loopvar2++)
      {
	 bool SENT_50 = FALSE;
	 bool any_locs = FALSE;
	 for (loopvar = 0; loopvar < 28; loopvar++)
	    combo_affs[loopvar] = 0;
	 combo_bv = 0;
	 combo_saves = 0;
	 combo_duration = 0;


	 if (combo_list[loopvar2] == 0)
	    continue;

	 if (workingaffs > totalaffs)
	    continue;

	 workingaffs++;

	 for (paf = ch->affected; paf != NULL; paf = paf->next)
	 {
	    if (paf->type != loopvar2)
	       continue;

	    combo_affs[paf->location] += paf->modifier;
	    combo_bv += paf->bitvector;
	    if (paf->duration > combo_duration)
	       combo_duration = paf->duration;
	    if (paf->location != APPLY_NONE)
	       any_locs = TRUE;
	 }

	 sprintf (combo_buf_1, " ");
	 sprintf (combo_buf_2, " ");
	 sprintf (combo_buf_3, "#wSpell: #y%-20s#w x%2d :",
		  skill_table[loopvar2].name, combo_list[loopvar2]);
	 send_to_char (combo_buf_3, ch);

	 combo_saves =
	    combo_affs[APPLY_SAVING_PARA] + combo_affs[APPLY_SAVING_ROD] +
	    combo_affs[APPLY_SAVING_PETRI] + combo_affs[APPLY_SAVING_BREATH] +
	    combo_affs[APPLY_SAVING_SPELL];

#define		SEND_MORE_THEN_50												\
			if ( col_str_len(combo_buf_1) > 65 )							\
			{																\
				send_to_char (combo_buf_1, ch);								\
				stc( "\n\r                                :", ch );			\
				sprintf( combo_buf_1, " " );								\
				SENT_50 = TRUE;												\
			}																\
			else															\
			{																\
				SENT_50 = FALSE;											\
			}

	 if (combo_affs[APPLY_STR] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wStr, ",
		     abs (combo_affs[APPLY_STR]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_STR] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wStr, ",
		     abs (combo_affs[APPLY_STR]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_DEX] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wDex, ",
		     abs (combo_affs[APPLY_DEX]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_DEX] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wDex, ",
		     abs (combo_affs[APPLY_DEX]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_INT] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wInt, ",
		     abs (combo_affs[APPLY_INT]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_INT] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wInt, ",
		     abs (combo_affs[APPLY_INT]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_WIS] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wWis, ",
		     abs (combo_affs[APPLY_WIS]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_WIS] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wWis, ",
		     abs (combo_affs[APPLY_WIS]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_CON] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wCon, ",
		     abs (combo_affs[APPLY_CON]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_CON] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wCon, ",
		     abs (combo_affs[APPLY_CON]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_SEX] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wSex, ",
		     abs (combo_affs[APPLY_SEX]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_SEX] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wSex, ",
		     abs (combo_affs[APPLY_SEX]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_CLASS] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wClass, ",
		     abs (combo_affs[APPLY_CLASS]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_CLASS] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wClass, ",
		     abs (combo_affs[APPLY_CLASS]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_LEVEL] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wLevels, ",
		     abs (combo_affs[APPLY_LEVEL]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_LEVEL] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wLevels, ",
		     abs (combo_affs[APPLY_LEVEL]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_AGE] > 0)
	 {
	    sprintf (combo_buf_2, "#g%d Years Older, ",
		     abs (combo_affs[APPLY_AGE]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_AGE] < 0)
	 {
	    sprintf (combo_buf_2, "#g%d Years Younger, ",
		     abs (combo_affs[APPLY_AGE]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_HEIGHT] > 0)
	 {
	    sprintf (combo_buf_2, "#g%d Cms Taller, ",
		     abs (combo_affs[APPLY_HEIGHT]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_HEIGHT] < 0)
	 {
	    sprintf (combo_buf_2, "#g%d Cms Shorter, ",
		     abs (combo_affs[APPLY_HEIGHT]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_WEIGHT] > 0)
	 {
	    sprintf (combo_buf_2, "#g%d Lbs Heavier",
		     abs (combo_affs[APPLY_WEIGHT]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_WEIGHT] < 0)
	 {
	    sprintf (combo_buf_2, "#g%d Lbs Lighter",
		     abs (combo_affs[APPLY_WEIGHT]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_HIT] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wHP, ",
		     abs (combo_affs[APPLY_HIT]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_HIT] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wHP, ",
		     abs (combo_affs[APPLY_HIT]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_MANA] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wMana, ",
		     abs (combo_affs[APPLY_MANA]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_MANA] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wMana, ",
		     abs (combo_affs[APPLY_MANA]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_MOVE] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wMove, ",
		     abs (combo_affs[APPLY_MOVE]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_MOVE] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wMove, ",
		     abs (combo_affs[APPLY_MOVE]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_GOLD] > 0)
	 {
	    sprintf (combo_buf_2, "#g%d GP Richer",
		     abs (combo_affs[APPLY_GOLD]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_GOLD] < 0)
	 {
	    sprintf (combo_buf_2, "#r%d GP Poorer",
		     abs (combo_affs[APPLY_GOLD]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_EXP] > 0)
	 {
	    sprintf (combo_buf_2, "#g%d Exp Higher",
		     abs (combo_affs[APPLY_EXP]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_EXP] < 0)
	 {
	    sprintf (combo_buf_2, "#r%d Exp Lower",
		     abs (combo_affs[APPLY_EXP]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_AC] > 0)
	 {
	    sprintf (combo_buf_2, "#r+%d #wAC, ", abs (combo_affs[APPLY_AC]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_AC] < 0)
	 {
	    sprintf (combo_buf_2, "#g-%d #wAC, ", abs (combo_affs[APPLY_AC]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_HITROLL] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wHR, ",
		     abs (combo_affs[APPLY_HITROLL]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_HITROLL] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wHR, ",
		     abs (combo_affs[APPLY_HITROLL]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_DAMROLL] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wDR, ",
		     abs (combo_affs[APPLY_DAMROLL]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_DAMROLL] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wDR, ",
		     abs (combo_affs[APPLY_DAMROLL]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_POLY] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wPolymorph, ",
		     abs (combo_affs[APPLY_POLY]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_POLY] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wPolymorph, ",
		     abs (combo_affs[APPLY_POLY]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_BLOOD_MAX] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wBlood Pool, ",
		     abs (combo_affs[APPLY_BLOOD_MAX]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_BLOOD_MAX] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wBlood Pool, ",
		     abs (combo_affs[APPLY_BLOOD_MAX]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_BLOOD_POT] > 0)
	 {
	    sprintf (combo_buf_2, "#g+%d #wBlood Gen, ",
		     abs (combo_affs[APPLY_BLOOD_POT]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_affs[APPLY_BLOOD_POT] < 0)
	 {
	    sprintf (combo_buf_2, "#r-%d #wBlood Gen, ",
		     abs (combo_affs[APPLY_BLOOD_POT]));
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
	 if (combo_saves > 0)
	 {
	    sprintf (combo_buf_2, "#r+%d #wSave-vs-Magic, ",
		     abs (combo_saves));
	    strcat (combo_buf_1, combo_buf_2);
	 }
	 if (combo_saves < 0)
	 {
	    sprintf (combo_buf_2, "#g-%d #wSave-vs-Magic, ",
		     abs (combo_saves));
	    strcat (combo_buf_1, combo_buf_2);
	 }
	 if (!any_locs)
	 {
	    sprintf (combo_buf_2, "#yAffects Nothing.");
	    strcat (combo_buf_1, combo_buf_2);
	 SEND_MORE_THEN_50}
#undef		SEND_MORE_THEN_50

	 if (str_cmp (combo_buf_1, " "))
	    send_to_char (combo_buf_1, ch);

	 send_to_char ("\n\r", ch);

	 sprintf (combo_buf_1, "#w       #y%-20s#w     : Bits #y%s#w\n\r",
		  " ", affect_bit_name (combo_bv));
	 sprintf (combo_buf_2, "#w       #y%-20s#w     : #y%d #whours\n\r",
		  " ", combo_duration);

	 if (ch->level >= 0)
	 {
	    if (combo_bv > 0)
	       send_to_char (combo_buf_1, ch);
	    send_to_char (combo_buf_2, ch);
	 }

      }
   }
   else
      stc ("Nothing\n\r", ch);
   stc ("\n\r#wYou have the following affects on your items:\n\r", ch);

   for (iWear = 0; iWear < MAX_WEAR; iWear++)
   {
      if (!(obj = get_eq_char (ch, iWear)))
	 continue;

      if ((obj->item_type == ITEM_ARMOR && obj->value[3] > 0)
	  || (obj->item_type == ITEM_WEAPON && obj->value[0] >= 1000)
	  || IS_SET (obj->spectype, SITEM_SILVER)
	  || IS_SET (obj->spectype, SITEM_DEMONIC)
	  || IS_SET (obj->quest, QUEST_ARTIFACT))
      {
	 if (obj->item_type == ITEM_ARMOR)
	    spellnum = obj->value[3];
	 else
	    spellnum = obj->value[0] / 1000;


	 switch (spellnum)
	 {
	 default:
	    continue;

	 case 1:
	 case 45:
	    if (IS_AFFECTED (ch, AFF_INFRARED))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #waffecting you with #yinfravision#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }

	    break;

	    //case 2:
	 case 27:
	    if (IS_AFFECTED (ch, AFF_DETECT_INVIS))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #waffecting you with #ydetect_invis#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;
	 case 60:
	    if (IS_AFFECTED (ch, AFF_DETECT_HIDDEN))
	    {
	       sprintf (buf,
			"#wItem: #w'#y%s#w' affecting you with #ydetect_hidden#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;
	 case 3:
	 case 39:
	    if (IS_AFFECTED (ch, AFF_FLYING))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #waffecting you with #yfly#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 4:
	    if (IS_AFFECTED (ch, AFF_BLIND))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #waffecting you with #yblindness#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;


	 case 5:
	 case 46:
	    if (IS_AFFECTED (ch, AFF_INVISIBLE))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #waffecting you with #yinvisible#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 6:
	 case 52:
	    if (IS_AFFECTED (ch, AFF_PASS_DOOR))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #waffecting you with #ypass_door#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 7:
	 case 54:
	    if (IS_AFFECTED (ch, AFF_PROTECT))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #waffecting you with #yprotection#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;


	 case 8:
	 case 57:
	    if (IS_AFFECTED (ch, AFF_SANCTUARY))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #waffecting you with #ysanctuary#w#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 9:
	    if (IS_AFFECTED (ch, AFF_SNEAK))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #waffecting you with #ysneak#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 10:
	    if (IS_ITEMAFF (ch, ITEMA_SHOCKSHIELD))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #wsurrounding you with a #ycrackling shield of lightning#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 11:
	    if (IS_ITEMAFF (ch, ITEMA_FIRESHIELD))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #wsurrounding you with a #yburning shield of fire#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 12:
	    if (IS_ITEMAFF (ch, ITEMA_ICESHIELD))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #wsurrounding you with a #yshimmering shield of ice#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 13:
	    if (IS_ITEMAFF (ch, ITEMA_ACIDSHIELD))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #wsurrounding you with a #ybubbling shield of acid#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;



	 case 15:
	    if (IS_ITEMAFF (ch, ITEMA_CHAOSSHIELD))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #wsurrounding you with a #yswirling shield of chaos.#n\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 16:
	    if (IS_ITEMAFF (ch, ITEMA_REGENERATE))
	    {
	       sprintf (buf,
                        "#wItem:#n #w'#y%s#w' #wgranting you #ysupernatural regeneration#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
            if (IS_ITEMAFF (ch, ITEMA_RAREREGEN))
	    {
	       sprintf (buf,
                        "#wItem:#n #w'#y%s#w' #wgranting you #yimproved regeneration#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 17:
	    if (IS_ITEMAFF (ch, ITEMA_SPEED))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #wgranting you with #ysupernatural speed#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 18:
	    if (IS_ITEMAFF (ch, ITEMA_VORPAL))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #wgranting you #yvorpal slices#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 19:
	    if (IS_ITEMAFF (ch, ITEMA_PEACE))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #wsurrounding you with a #yshield of peace#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 20:
	    if (IS_ITEMAFF (ch, ITEMA_REFLECT))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #wsurrounding you with a #yflickering shield of darkness#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 21:
	    if (IS_ITEMAFF (ch, ITEMA_RESISTANCE))
	    {
	       sprintf (buf,
			"#wItem: '#y%s#w' granting you #ysuperior resistance#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 22:
	    if (IS_ITEMAFF (ch, ITEMA_VISION))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #wgranting you #ysupernatural vision#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 23:
	    if (IS_ITEMAFF (ch, ITEMA_STALKER))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #wmaking you #yfleet-footed#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 24:
	    if (IS_ITEMAFF (ch, ITEMA_VANISH))
	    {
	       sprintf (buf,
			"#wItem:#n #w'#y%s#w' #waffecting you with #ysuperior hiding#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

	 case 25:
	    if (IS_ITEMAFF (ch, ITEMA_RAGER))
	    {
	       sprintf (buf,
			"#wItem: '#y%s#w' invoking the power of #ythe beast#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;

         case 26:
	    if (IS_ITEMAFF (ch, ITEMA_RAGER))
	    {
	       sprintf (buf,
                        "#wItem: '#y%s#w' invoking the raw power of #ythe sun#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
            if (IS_ITEMAFF (ch, ITEMA_SOLARSHIELD))
	    {
	       sprintf (buf,
                        "#wItem:#n #w'#y%s#w' #wsurrounding you with a #yblinding shield of solar energy#n.\n\r",
			obj->short_descr);
	       send_to_char (buf, ch);
	    }
	    break;


	 }
      }
   }
}

/*
void do_level( CHAR_DATA *ch, char *argument )
{
    char arg       [MAX_INPUT_LENGTH];
     char buf[MAX_STRING_LENGTH];
    char skill  [20];  
    char stance [20];
    one_argument( argument, arg );

    if (IS_NPC(ch)) return;  
   
   
    sprintf(buf,"********************************************\n\r");
    send_to_char(buf,ch);
    sprintf(buf,"* Weapon Skills|   Stances     |  Magic    *\n\r");
    send_to_char(buf,ch);
    sprintf(buf,"********************************************\n\r");
    send_to_char(buf,ch);
    sprintf(buf,"Unarmed : %3d  | Bull    : %3d | Purple: %3d\n\r",
 ch->wpn[0],ch->stance[STANCE_BULL],ch->spl[0]);
    send_to_char(buf,ch);
    sprintf(buf,"Slash   : %3d  | Viper   : %3d | Red   : %3d\n\r",
    ch->wpn[3],ch->stance[STANCE_VIPER],ch->spl[1]);
    send_to_char(buf,ch);
    sprintf(buf,"Slice   : %3d  | Crane   : %3d | Blue  : %3d\n\r",
    ch->wpn[1],ch->stance[STANCE_CRANE],ch->spl[2]);
    send_to_char(buf,ch);
    sprintf(buf,"Stab    : %3d  | Crab    : %3d | Green : %3d\n\r",
    ch->wpn[2],ch->stance[STANCE_CRAB],ch->spl[3]);   
 send_to_char(buf,ch);
    sprintf(buf,"Whip    : %3d  | Mongoose: %3d | Yellow: %3d\n\r",
    ch->wpn[4],ch->stance[STANCE_MONGOOSE],ch->spl[4]);
    send_to_char(buf,ch);
    sprintf(buf,"Claw    : %3d  | Tiger   : %3d |\n\r",
    ch->wpn[5],ch->stance[STANCE_TIGER]);
    send_to_char(buf,ch);
    sprintf(buf,"Blast   : %3d  | Mantis  : %3d |\n\r",
    ch->wpn[6],ch->stance[STANCE_MANTIS]);
    send_to_char(buf,ch);
 sprintf(buf,"Pound   : %3d  | Dragon  : %3d |\n\r",
    ch->wpn[7],ch->stance[STANCE_DRAGON]);
    send_to_char(buf,ch);
    sprintf(buf,"Crush   : %3d  | Swallow : %3d |\n\r",
    ch->wpn[8],ch->stance[STANCE_SWALLOW]);
    send_to_char(buf,ch);
    sprintf(buf,"Grep    : %3d  | Monkey  : %3d |\n\r",
    ch->wpn[9],ch->stance[STANCE_MONKEY]);
    send_to_char(buf,ch);
    sprintf(buf,"Bite    : %3d  |               |\n\r",ch->wpn[10]);
  send_to_char(buf,ch);
    sprintf(buf,"Pierce  : %3d  |               |\n\r",ch->wpn[11]);
    send_to_char(buf,ch);
    sprintf(buf,"Suck    : %3d  |               |\n\r",ch->wpn[12]);
    send_to_char(buf,ch);
    
 
      
    send_to_char("*************-= Misc. Things =-*************\n\r", ch);
    sprintf(skill, "Recall Room : %d                      \n\r",ch->home);
    send_to_char( skill, ch );

     if ( ch->stance[11] == 1 )
      sprintf(stance, " Viper" );
     else if ( ch->stance[11] == 2 )
      sprintf(stance, " Crane" );
     else if ( ch->stance[11] == 3 )
      sprintf(stance, " Crab" );  
     else if ( ch->stance[11] == 4 )
      sprintf(stance, " Mongoose" );  
     else if ( ch->stance[11] == 5 )
      sprintf(stance, " Bull" );  
     else if ( ch->stance[11] == 6 )
      sprintf(stance, " Mantis" );  
     else if ( ch->stance[11] == 7 )
      sprintf(stance, " Dragon" );  
     else if ( ch->stance[11] == 8 )
      sprintf(stance, " Tiger" );  
     else if ( ch->stance[11] == 9 )
      sprintf(stance, " Monkey" );  
     else if ( ch->stance[11] == 10 )
      sprintf(stance, " Swallow" ); 
     else if ( ch->stance[11] == -1 || ch->stance[11] == 15 )
      sprintf(stance, " None" );
     else
      sprintf(stance, " None" );
      sprintf(skill, "Autostance:  %s \n\r",stance);
      send_to_char( skill, ch );

	 send_to_char("*************-= Class Things =-*************\n\r",
ch);
    
    if ( IS_CLASS(ch, CLASS_DEMON) )
     send_to_char("You are a demon!                       \n\r", ch);
    if ( IS_CLASS(ch, CLASS_MAGE) )
     send_to_char("You are a mage!                        \n\r", ch);    
     if ( IS_CLASS(ch, CLASS_WEREWOLF) )
     send_to_char("You are a werewolf!                    \n\r", ch);
     if ( IS_CLASS(ch, CLASS_NINJA) )
     send_to_char("You are a ninja!                       \n\r", ch);
    if ( IS_CLASS(ch, CLASS_VAMPIRE) )
     send_to_char("You are a vampire!                     \n\r", ch);
    if ( IS_CLASS(ch, CLASS_HIGHLANDER) )
     send_to_char("You are a highlander!                  \n\r", ch);
    if ( IS_CLASS(ch, CLASS_DROW) )
     send_to_char("You are a drow!                     \n\r", ch);    
 
 if (IS_CLASS(ch, CLASS_VAMPIRE) )
 {

    sprintf(skill, "Generation : %d                       \n\r", ch->pcdata->stats[UNI_GEN]);
    send_to_char( skill, ch );	
	if (ch->pcdata->rank == AGE_METHUSELAH)
	  send_to_char("You are a Methuselah!                 \n\r", ch);
	else if (ch->pcdata->rank == AGE_ELDER)
	  send_to_char("You are an Elder!                     \n\r", ch);
	else if (ch->pcdata->rank == AGE_ANCILLA)
	  send_to_char("You are an Ancilla!                   \n\r", ch);
	else if (ch->pcdata->rank == AGE_NEONATE)
	  send_to_char("You are a Neonate!                    \n\r", ch);
	else
	  send_to_char(" You are a Childe!                     \n\r", ch);
	if ( IS_SET(ch->special, SPC_PRINCE) )
	  send_to_char("You are a prince!                     \n\r", ch);
 }
 
 if (IS_CLASS(ch, CLASS_NINJA) )
 {
    sprintf(skill, "Generation : %d\n\r", ch->pcdata->stats[UNI_GEN]);
    send_to_char( skill, ch );	
	if ( IS_SET(ch->special, SPC_PRINCE) )
	  send_to_char("You can discipline people!\n\r", ch);
 }
 
 if (IS_CLASS(ch, CLASS_WEREWOLF) )
 {
    sprintf(skill, "Generation : %d                         \n\r", ch->pcdata->stats[UNI_GEN]);
    send_to_char( skill, ch );	
    if ( IS_SET(ch->special, SPC_SIRE) && ch->pcdata->stats[UNI_GEN] > 2 )
      send_to_char("You are able to spread the gift!        \n\r", ch);
    if ( IS_SET(ch->special, SPC_PRINCE) && ch->pcdata->stats[UNI_GEN] > 2 )
	  send_to_char("You are a shaman!                   \n\r", ch);
 }
  
    sprintf(buf,"********************************************\n\r");
    send_to_char(buf,ch);
      return;
}
*/
void do_class (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg1[MAX_INPUT_LENGTH];
   char arg2[MAX_INPUT_LENGTH];
   argument = one_argument (argument, arg1);
   argument = one_argument (argument, arg2);

   if (IS_NPC (ch))
      return;

   if (arg1[0] == '\0' || arg2[0] == '\0')
   {
      send_to_char ("Syntax: class <char> <class>.\n\r", ch);
      send_to_char ("Class being one of:\n\r", ch);
      send_to_char ("   Vampire, Werewolf, Demon, Mage, Highlander,\n\r", ch);
      send_to_char ("   Drow, Monk, Ninja, Wraith, Fae, Dragon, Phoenix", ch);
      return;
   }

   if ((victim = get_char_world_no_npc (ch, arg1)) == NULL)
   {
      send_to_char ("That player is not here.\n\r", ch);
      return;
   }

   if ((victim->class != 0) && str_cmp (arg2, "none"))
   {
      stc ("You must clear their class first.\n\r", ch);
      stc ("Class <victim> none.\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "none"))
   {
      /* Used to make sure the person has enough "stuff" to change */
      victim->pcdata->condition[COND_THIRST] = 10000;
      victim->move = 10000;
      victim->mana = 10000;

      victim->pcdata->powers[WPOWER_BEAR] = 4;
      victim->pcdata->powers[WPOWER_LYNX] = 4;
      victim->pcdata->powers[WPOWER_BOAR] = 4;
      victim->pcdata->powers[WPOWER_OWL] = 4;
      victim->pcdata->powers[WPOWER_SPIDER] = 4;
      victim->pcdata->powers[WPOWER_WOLF] = 4;
      victim->pcdata->powers[WPOWER_HAWK] = 4;
      victim->pcdata->powers[WPOWER_MANTIS] = 4;
      victim->pcdata->powers[WPOWER_TIGER] = 4;
      victim->pcdata->powers[WPOWER_GAIA] = 4;

      if (IS_CLASS (victim, CLASS_WEREWOLF)
	  || IS_CLASS (victim, CLASS_VAMPIRE))
	 do_unwerewolf (victim, "");
      if (IS_VAMPAFF (victim, VAM_DISGUISED))
	 do_mask (victim, "self");
      victim->pcdata->stats[UNI_FORM0] = 0;

/* All classes in general */
      if (IS_VAMPAFF (victim, VAM_FANGS))
      {
	 send_to_char ("Your fangs slide back into your gums.\n\r", victim);
	 act ("$n's fangs slide back into $s gums.", ch, NULL, victim,
	      TO_ROOM);
	 REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_FANGS);
      }
      if (IS_CLASS (victim, CLASS_VAMPIRE) && IS_VAMPAFF (victim, VAM_CLAWS))
      {
	 send_to_char ("Your claws slide back under your nails.\n\r", victim);
	 act ("$N's claws slide back under $s nails.", ch, NULL, victim,
	      TO_ROOM);
	 REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_CLAWS);
      }
      else if (IS_CLASS (victim, CLASS_NINJA)
	       && IS_VAMPAFF (victim, VAM_CLAWS))
      {
	 send_to_char ("You shove your iron claws up your sleeves\n\r",
		       victim);
	 act ("$N shoves $S iron claws up $e sleeves.", ch, NULL, victim,
	      TO_ROOM);
	 REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_CLAWS);
      }
      else if (IS_CLASS (victim, CLASS_WEREWOLF)
	       && IS_VAMPAFF (victim, VAM_CLAWS))
      {
	 send_to_char ("Your talons slide back into your fingers.\n\r",
		       victim);
	 act ("$N's talons slide back into $s fingers.", ch, NULL, victim,
	      TO_ROOM);
	 REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_CLAWS);
      }

      if (IS_VAMPAFF (victim, VAM_NIGHTSIGHT))
      {
	 send_to_char ("The red glow in your eyes fades.\n\r", victim);
	 act ("The red glow in $N's eyes fades.", ch, NULL, victim, TO_ROOM);
	 REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_NIGHTSIGHT);
      }
      if (IS_AFFECTED (victim, AFF_SHADOWSIGHT))
      {
	 send_to_char ("You can no longer see between planes.\n\r", victim);
	 REMOVE_BIT (victim->affected_by, AFF_SHADOWSIGHT);
      }

      if (IS_IMMUNE (victim, IMM_SHIELDED))
      {
	 send_to_char ("You stop shielding your aura.\n\r", victim);
	 REMOVE_BIT (victim->immune, IMM_SHIELDED);
      }

      if (IS_VAMPAFF (victim, VAM_DISGUISED))
      {
	 free_string (victim->morph);
	 victim->morph = str_dup (victim->name);
	 send_to_char ("You transform into yourself.\n\r", victim);
	 REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_DISGUISED);
      }

      if (IS_AFFECTED (victim, AFF_SHADOWPLANE))
      {
	 send_to_char ("You fade back into the real world.\n\r", victim);
	 act ("The shadows flicker and $N fades into existance.", ch, NULL,
	      victim, TO_ROOM);
	 REMOVE_BIT (victim->affected_by, AFF_SHADOWPLANE);
	 do_look (ch, "auto");
      }

      if (!IS_IMMORTAL (victim) && IS_SET (victim->act, PLR_WIZINVIS))
      {
	 REMOVE_BIT (victim->act, PLR_WIZINVIS);
	 send_to_char ("You slowly fade into existence.\n\r", victim);
      }

      if (!IS_IMMORTAL (victim) && IS_SET (victim->act, PLR_HOLYLIGHT))
      {
	 REMOVE_BIT (victim->act, PLR_HOLYLIGHT);
	 REMOVE_BIT (victim->act, PLR_DROWSIGHT);
	 send_to_char ("Your senses return to normal.\n\r", victim);
      }

/* Demon Stuff */
      if (IS_DEMAFF (victim, DEM_HORNS) && IS_CLASS (victim, CLASS_DEMON))
      {
	 send_to_char ("Your horns slide back into your head.\n\r", victim);
	 act ("$N's horns slide back into $s head.", ch, NULL, victim,
	      TO_ROOM);
	 REMOVE_BIT (victim->pcdata->powers[DPOWER_CURRENT], DEM_HORNS);
      }

      if (IS_DEMAFF (victim, DEM_HOOVES) && IS_CLASS (victim, CLASS_DEMON))
      {
	 send_to_char ("Your hooves transform into feet.\n\r", victim);
	 act ("$N's hooves transform back into $s feet.", ch, NULL, victim,
	      TO_ROOM);
	 REMOVE_BIT (victim->pcdata->powers[DPOWER_CURRENT], DEM_HOOVES);
      }

      if (IS_DEMAFF (victim, DEM_WINGS) && IS_CLASS (victim, CLASS_DEMON))
      {
	 if (IS_DEMAFF (victim, DEM_UNFOLDED)
	     && IS_CLASS (victim, CLASS_DEMON))
	 {
	    send_to_char ("Your wings fold up behind your back.\n\r", victim);
	    act ("$N's wings fold up behind $s back.", ch, NULL, victim,
		 TO_ROOM);
	    REMOVE_BIT (victim->pcdata->powers[DPOWER_CURRENT], DEM_UNFOLDED);
	 }
	 send_to_char ("Your wings slide into your back.\n\r", victim);
	 act ("$N's wings slide into $s back.", ch, NULL, victim, TO_ROOM);
	 REMOVE_BIT (victim->pcdata->powers[DPOWER_CURRENT], DEM_WINGS);
      }

      if (IS_EXTRA (victim, EXTRA_OSWITCH))
      {
	 do_humanform (victim, "");
      }

      REMOVE_BIT (victim->affected_by, AFF_SHADOWPLANE);
      REMOVE_BIT (victim->affected_by, AFF_POLYMORPH);
      if (!IS_IMMORTAL (victim))
      {
	 REMOVE_BIT (victim->act, PLR_HOLYLIGHT);
      }
      REMOVE_BIT (victim->immune, IMM_SHIELDED);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_FANGS);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_CLAWS);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_NIGHTSIGHT);
      REMOVE_BIT (victim->affected_by, AFF_SHADOWSIGHT);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_PROTEAN);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_VICISSITUDE);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_CELERITY);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_FORTITUDE);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_POTENCE);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_OBTENEBRATION);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_SERPENTIS);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_AUSPEX);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_DOMINATE);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_PRESENCE);
      REMOVE_BIT (victim->polyaff, POLY_ZULO);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_DISGUISED);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_FLYING);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_SONIC);
      REMOVE_BIT (victim->polyaff, POLY_BAT);
      REMOVE_BIT (victim->polyaff, POLY_MIST);
      REMOVE_BIT (victim->affected_by, AFF_ETHEREAL);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_CHANGED);
      REMOVE_BIT (victim->extra, EXTRA_FAKE_CON);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_MORTAL);
      REMOVE_BIT (victim->immune, IMM_SHIELDED);
      REMOVE_BIT (victim->polyaff, POLY_SERPENT);
      REMOVE_BIT (victim->special, SPC_WOLFMAN);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_CLAWS);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_FANGS);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_NIGHTSIGHT);
      REMOVE_BIT (victim->special, SPC_DEMON_LORD);

      REMOVE_BIT (victim->warp, WARP_CBODY);
      REMOVE_BIT (victim->warp, WARP_SBODY);
      REMOVE_BIT (victim->warp, WARP_STRONGARMS);
      REMOVE_BIT (victim->warp, WARP_STRONGLEGS);
      REMOVE_BIT (victim->warp, WARP_VENOMTONG);
      REMOVE_BIT (victim->warp, WARP_SPIKETAIL);
      REMOVE_BIT (victim->warp, WARP_BADBREATH);
      REMOVE_BIT (victim->warp, WARP_QUICKNESS);
      REMOVE_BIT (victim->warp, WARP_STAMINA);
      REMOVE_BIT (victim->warp, WARP_HUNT);
      REMOVE_BIT (victim->warp, WARP_DAMCAP);
      REMOVE_BIT (victim->warp, WARP_TERROR);
      REMOVE_BIT (victim->warp, WARP_REGEN);
      REMOVE_BIT (victim->warp, WARP_STEED);
      REMOVE_BIT (victim->warp, WARP_WEAPON);
      REMOVE_BIT (victim->warp, WARP_INFIRMITY);
      REMOVE_BIT (victim->warp, WARP_GBODY);
      REMOVE_BIT (victim->warp, WARP_SCARED);
      REMOVE_BIT (victim->warp, WARP_MAGMA);
      REMOVE_BIT (victim->warp, WARP_WEAK);
      REMOVE_BIT (victim->warp, WARP_SLOW);
      REMOVE_BIT (victim->warp, WARP_VULNER);
      REMOVE_BIT (victim->warp, WARP_SHARDS);
      REMOVE_BIT (victim->warp, WARP_WINGS);
      REMOVE_BIT (victim->warp, WARP_CLUMSY);
      REMOVE_BIT (victim->warp, WARP_STUPID);
      REMOVE_BIT (victim->warp, WARP_SPOON);
      REMOVE_BIT (victim->warp, WARP_FORK);
      REMOVE_BIT (victim->warp, WARP_KNIFE);


      REMOVE_BIT (victim->pcdata->powers[DPOWER_CURRENT], DEM_HORNS);
      REMOVE_BIT (victim->pcdata->powers[DPOWER_CURRENT], DEM_TAIL);
      REMOVE_BIT (victim->pcdata->powers[DPOWER_CURRENT], DEM_HOOVES);
      REMOVE_BIT (victim->pcdata->powers[DPOWER_CURRENT], DEM_UNFOLDED);
      REMOVE_BIT (victim->pcdata->powers[DPOWER_CURRENT], DEM_UNFOLDED);
      REMOVE_BIT (victim->pcdata->powers[DPOWER_CURRENT], DEM_WINGS);
      REMOVE_BIT (victim->extra, EXTRA_OSWITCH);
      REMOVE_BIT (victim->newbits, NEW_DROWHATE);
      REMOVE_BIT (victim->polyaff, POLY_SPIDERFORM);
      REMOVE_BIT (victim->newbits, NEW_DARKNESS);
      REMOVE_BIT (victim->monkstuff, MONK_DEATH);
      REMOVE_BIT (victim->monkstuff, MONK_HEAL);
      REMOVE_BIT (victim->garou1, WOLF_COCOON);
      REMOVE_BIT (victim->newbits, NEW_QUILLS);
      REMOVE_BIT (victim->garou1, WOLF_RAZORCLAWS);
      REMOVE_BIT (victim->garou1, WW_GRANITE);
      REMOVE_BIT (victim->garou1, GAROU_CLENCHED);
      REMOVE_BIT (victim->garou1, GAROU_AVENGER);
      REMOVE_BIT (victim->affected_by, AFF_STEELSHIELD);
      REMOVE_BIT (victim->newbits, NEW_MONKFLAME);
      REMOVE_BIT (victim->newbits, NEW_MONKADAM);
      REMOVE_BIT (victim->newbits, NEW_POWER);
      if (!IS_IMMORTAL (victim))
      {
	 REMOVE_BIT (victim->act, PLR_WIZINVIS);
      }
      REMOVE_BIT (victim->extra, EXTRA_STANCE);
      REMOVE_BIT (victim->act, OLD_PLR_DEMON);
      REMOVE_BIT (victim->act, OLD_PLR_CHAMPION);
      REMOVE_BIT (victim->extra, OLD_EXTRA_SIRE);
      REMOVE_BIT (victim->extra, OLD_EXTRA_PRINCE);
      REMOVE_BIT (victim->extra, OLD_EXTRA_PRINCE);
      REMOVE_BIT (victim->act, OLD_PLR_WEREWOLF);
      REMOVE_BIT (victim->act, OLD_PLR_WOLFMAN);
      REMOVE_BIT (victim->extra, OLD_EXTRA_SIRE);
      REMOVE_BIT (victim->extra, OLD_EXTRA_PRINCE);
      REMOVE_BIT (victim->extra, OLD_EXTRA_ANARCH);
      REMOVE_BIT (victim->extra, OLD_EXTRA_INCONNU);
      REMOVE_BIT (victim->act, OLD_PLR_VAMPIRE);
      REMOVE_BIT (victim->extra, OLD_EXTRA_HIGHLANDER);
      REMOVE_BIT (victim->extra, OLD_EXTRA_PRINCE);
      REMOVE_BIT (victim->extra, OLD_EXTRA_ANARCH);
      REMOVE_BIT (victim->extra, OLD_EXTRA_INCONNU);
      REMOVE_BIT (victim->act, OLD_PLR_VAMPIRE);
      REMOVE_BIT (victim->extra, EXTRA_POTENCY);
      REMOVE_BIT (victim->newbits, NEW_TIDE);
      REMOVE_BIT (victim->flag2, AFF2_SPIRITGUARD);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_HORNS);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_WINGS);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_EXOSKELETON);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_TAIL);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_HEAD);
      REMOVE_BIT (victim->flag2, VAMP_OBJMASK);
      REMOVE_BIT (victim->extra, EXTRA_AWE);
      REMOVE_BIT (victim->extra, EXTRA_DRAGON);
      REMOVE_BIT (victim->extra, EXTRA_PLASMA);
      REMOVE_BIT (victim->newbits, NEW_COIL);
      REMOVE_BIT (victim->flag2, AFF2_SHIFT);
      REMOVE_BIT (victim->extra, EXTRA_EARTHMELD);
      REMOVE_BIT (victim->extra, EXTRA_ASH);
      REMOVE_BIT (victim->affected_by, AFF_SHADOWSIGHT);
      REMOVE_BIT (victim->mflags, MAGE_POLYAPPEAR);
      REMOVE_BIT (victim->mflags, MAGE_TELEKINETICS);
      REMOVE_BIT (victim->mflags, MFLAGS_DIMMAK);
      REMOVE_BIT (victim->mflags, MAGE_BETTERBODY);
      REMOVE_BIT (victim->mflags, MAGE_SHAPED);

      REMOVE_BIT (victim->special, SPC_CHAMPION);
      REMOVE_BIT (victim->special, SPC_INCONNU);
      REMOVE_BIT (victim->special, SPC_ANARCH);
      REMOVE_BIT (victim->special, SPC_SIRE);
      REMOVE_BIT (victim->special, SPC_PRINCE);
      REMOVE_BIT (victim->special, SPC_DEMON_LORD);
      REMOVE_BIT (victim->special, SPC_DROW_WAR);
      REMOVE_BIT (victim->special, SPC_DROW_MAG);
      REMOVE_BIT (victim->special, SPC_DROW_CLE);
      REMOVE_BIT (victim->affected_by, AFF_POLYMORPH);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_CHANGED);
      REMOVE_BIT (victim->pcdata->powers[WOLF_POLYAFF], POLY_MIST);
      REMOVE_BIT (victim->affected_by, AFF_ETHEREAL);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_FLYING);
      REMOVE_BIT (victim->pcdata->stats[UNI_AFF], VAM_SONIC);
      REMOVE_BIT (victim->pcdata->powers[WOLF_POLYAFF], POLY_BAT);
      REMOVE_BIT (victim->pcdata->powers[WOLF_POLYAFF], POLY_WOLF);
      REMOVE_BIT (ch->newbits, NEW_POWER);
      victim->warpcount = 0;
      victim->monkstuff = 0;
      victim->monkcrap = 0;
      victim->spheres[MCOR] = 0;
      victim->monkab[SPIRIT] = 0;
      victim->monkab[BODY] = 0;
      victim->monkab[COMBAT] = 0;
      victim->monkab[AWARE] = 0;
      victim->spheres[MLIF] = 0;
      victim->spheres[MPRI] = 0;
      victim->spheres[MENT] = 0;
      victim->spheres[MMIN] = 0;
      victim->spheres[MSPI] = 0;
      victim->spheres[MFOR] = 0;
      victim->spheres[MMAT] = 0;
      victim->spheres[MTIM] = 0;

      victim->pcdata->powers[DPOWER_FLAGS] = 0;
      victim->pcdata->stats[DEMON_TOTAL] = 0;
      victim->pcdata->stats[DEMON_CURRENT] = 0;
      victim->pcdata->powers[WPOWER_BEAR] = 0;
      victim->pcdata->powers[WPOWER_LYNX] = 0;
      victim->pcdata->powers[WPOWER_BOAR] = 0;
      victim->pcdata->powers[WPOWER_OWL] = 0;
      victim->pcdata->powers[WPOWER_SPIDER] = 0;
      victim->pcdata->powers[WPOWER_WOLF] = 0;
      victim->pcdata->powers[WPOWER_HAWK] = 0;
      victim->pcdata->powers[WPOWER_MANTIS] = 0;
      victim->pcdata->powers[WPOWER_TIGER] = 0;
      victim->pcdata->powers[WPOWER_GAIA] = 0;
      victim->pcdata->powers[VAM_ANIM] = 0;
      victim->gifts[STARGAZERS] = 0;
      victim->gifts[HOMID] = 0;
      victim->gifts[METIS] = 0;
      victim->gifts[LUPUS] = 0;
      victim->gifts[RAGABASH] = 0;
      victim->gifts[THEURGE] = 0;
      victim->gifts[PHILODOX] = 0;
      victim->gifts[GALLIARD] = 0;
      victim->gifts[AHROUN] = 0;
      victim->gifts[BLACKFURIES] = 0;
      victim->gifts[BONEGNAWERS] = 0;
      victim->gifts[CHILDREN] = 0;
      victim->gifts[CHILDRENOFGAIA] = 0;
      victim->gifts[FIANNA] = 0;
      victim->gifts[GETOFFENRIS] = 0;
      victim->gifts[GLASSWALKERS] = 0;
      victim->gifts[REDTALONS] = 0;
      victim->gifts[SHADOWLORDS] = 0;
      victim->gifts[SILENTSTRIDERS] = 0;
      victim->gifts[SILVERFANGS] = 0;
      victim->gifts[UKTENA] = 0;
      victim->gifts[WENDIGO] = 0;
victim->arcanoi[WARGO] = 0;
victim->arcanoi[WCAST] = 0;
victim->arcanoi[WBODY] = 0;
victim->arcanoi[WFATL] = 0;
victim->arcanoi[WINHB] = 0;
victim->arcanoi[WKEEN] = 0;
victim->arcanoi[WLIFE] = 0;
victim->arcanoi[WMATE] = 0;
victim->arcanoi[WRAGE] = 0;
victim->arcanoi[WPAND] = 0;
victim->arcanoi[WPTRY] = 0;
        
//BASTETADDITION
      victim->bgifts[BHOMID] = 0;
      victim->bgifts[BMETIS] = 0;
      victim->bgifts[BFELINE] = 0;
      victim->bgifts[BBAGHEERA] = 0;
      victim->bgifts[BBALAM] = 0;
      victim->bgifts[BBUBASTI] = 0;
      victim->bgifts[BCEILICAN] = 0;
      victim->bgifts[BKHAN] = 0;
      victim->bgifts[BPUMONCA] = 0;
      victim->bgifts[BQUALMI] = 0;
      victim->bgifts[BSIMBA] = 0;
      victim->bgifts[BSWARA] = 0;
//END
      victim->pcdata->powers[VAM_OBTE] = 0;
      victim->pcdata->powers[VAM_THAU] = 0;
      victim->pcdata->powers[VAM_OBFU] = 0;
      victim->pcdata->powers[VAM_SERP] = 0;
      victim->pcdata->powers[VAM_CHIM] = 0;
      victim->pcdata->powers[VAM_NECR] = 0;
      victim->pcdata->powers[VAM_CELE] = 0;
      victim->pcdata->powers[VAM_PRES] = 0;
      victim->pcdata->powers[VAM_AUSP] = 0;
      victim->pcdata->powers[VAM_POTE] = 0;
      victim->pcdata->powers[VAM_VICI] = 0;
      victim->pcdata->powers[VAM_OBEA] = 0;
      victim->pcdata->powers[VAM_FORT] = 0;
      victim->pcdata->powers[VAM_QUIE] = 0;
      victim->pcdata->powers[VAM_DOMI] = 0;
      victim->pcdata->powers[VAM_PROT] = 0;
      victim->pcdata->powers[VAM_DAIM] = 0;
      victim->pcdata->powers[VAM_MELP] = 0;
      victim->pcdata->powers[VAM_THAN] = 0;
      victim->pcdata->powers[NPOWER_SORA] = 0;
      victim->pcdata->powers[NPOWER_CHIKYU] = 0;
      victim->pcdata->powers[NPOWER_NINGENNO] = 0;
      victim->pcdata->powers[1] = 0;
      victim->pcdata->condition[COND_THIRST] = 0;
      victim->move = victim->max_move;
      victim->mana = victim->max_mana;
      victim->hit = victim->max_hit;
      victim->pcdata->rank = 0;

      victim->pcdata->stats[UNI_RAGE] = 0;
      free_string (victim->lord);
      victim->lord = str_dup ("");
      free_string (victim->clan);
      victim->clan = str_dup ("");
      victim->pcdata->stats[UNI_GEN] = 0;
      victim->pcdata->stats[UNI_AFF] = 0;
      victim->pcdata->stats[UNI_CURRENT] = -1;
      victim->beast = 15;

      victim->class = 0;
      if (!IS_IMMORTAL (victim))
      {
	 victim->trust = 0;
	 victim->level = 2;
      }
      clear_stats (victim);
      send_to_char ("You are classless now!\n\r", victim);
   }
   else if (!str_cmp (arg2, "demon"))
   {
      victim->class = 1;
      if (!IS_IMMORTAL (victim))
	 victim->level = 3;
      SET_BIT (victim->special, SPC_CHAMPION);
      victim->lord = str_dup (ch->name);
      send_to_char ("You are now a demon!\n\r", victim);
   }
   else if (!str_cmp (arg2, "gargoyle"))
   {
      victim->class = CLASS_GARGOYLE;
      if (!IS_IMMORTAL (victim))
	 victim->level = 3;
      stc ("You are now a Gargoyle.\n\r", victim);
   }
   else if (!str_cmp (arg2, "phoenix"))
   {
      victim->class = CLASS_PHOENIX;
      if (!IS_IMMORTAL (victim))
         victim->level = 3;
      send_to_char("You are now a phoenix!\n\r",victim);
   }
   else if (!str_cmp (arg2, "dragon"))
   {
      victim->class = CLASS_DRAGON;
      victim->pcdata->dragonage = 1;
      victim->pcdata->dragonaff = 0;
      victim->pcdata->disc_a[DRAGON_COLOR] = number_range (1, 9);
      stc ("You are now a dragon.\n\r", victim);
   }
   else if (!str_cmp (arg2, "demon lord"))
   {
      victim->class = 1;
      if (!IS_IMMORTAL (victim))
	 victim->level = 3;
      SET_BIT (victim->special, SPC_DEMON_LORD);
      victim->lord = str_dup (victim->name);
      send_to_char ("You are now a Demon Lord!\n\r", victim);
   }
   else if (!str_cmp (arg2, "mage"))
   {

      victim->class = 2;
      if (victim->trust > 6)
      {
	 victim->trust = victim->trust;
	 victim->level = victim->level;
      }
      else
      {
	 victim->trust = 6;
	 victim->level = 6;
      }
      victim->pcdata->powers[MPOWER_RUNE0] = 0;
      victim->pcdata->powers[MPOWER_RUNE1] = 2047;
      victim->pcdata->powers[MPOWER_RUNE2] = 1023;
      victim->pcdata->powers[MPOWER_RUNE3] = 15;
      send_to_char ("You are now a Mage Oracle!\n\r", victim);
   }
   else if (!str_cmp (arg2, "werewolf"))
   {
      victim->class = 4;
      if (!IS_IMMORTAL (victim))
	 victim->level = 3;
      send_to_char ("You are now a werewolf!\n\r", victim);
   }
   else if (!str_cmp (arg2, "fae"))
   {
      victim->pcdata->stats[UNI_GEN] = 13;
      victim->class = CLASS_CHOOSE;
      if (!IS_IMMORTAL (victim))
	 victim->level = 3;
      send_to_char
	 ("You are now a Fae.\n\rUse the CHOOSE command to choose a Kith.\n\r",
	  victim);
   }
   else if (!str_cmp (arg2, "wraith"))
   {
      victim->pcdata->stats[UNI_GEN] = 13;
      victim->class = CLASS_WRAITH;
        REMOVE_BIT( victim->affected_by, AFF_SHADOWPLANE);
        SET_BIT( victim->wbits, WRAT_DEATHPLANE);
      if (!IS_IMMORTAL (victim))
	 victim->level = 3;
      send_to_char ("You are now a wraith!\n\r", victim);
   }
//BASTETADDITION
   else if (!str_cmp (arg2, "bastet"))
   {
      victim->class = CLASS_BASTET;
      if (!IS_IMMORTAL (victim))
	 victim->level = 3;
      send_to_char ("You are now a Bastet!\n\r", victim);
   }
   else if (!str_cmp (arg2, "vampire"))
   {
      victim->pcdata->stats[UNI_GEN] = 13;
      victim->class = 8;
      if (!IS_IMMORTAL (victim))
	 victim->level = 3;
      send_to_char ("You are now a vampire!\n\r", victim);
   }
   else if (!str_cmp (arg2, "highlander"))
   {
      victim->class = 16;
      victim->pcdata->stats[UNI_GEN] = 13;
      if (!IS_IMMORTAL (victim))
	 victim->level = 3;
      send_to_char ("You are now a highlander!\n\r", victim);
   }
   else if (!str_cmp (arg2, "ninja"))
   {
      victim->class = 128;
      victim->pcdata->stats[UNI_GEN] = 13;
      if (victim->trust > 6)
      {
	 victim->trust = victim->trust;
	 victim->level = victim->level;
      }
      else
      {
	 victim->trust = 6;
	 victim->level = 6;
      }
      send_to_char ("You are now a ninja!\n\r", victim);
   }
   else if (!str_cmp (arg2, "monk"))
   {
      victim->class = 512;
      victim->pcdata->stats[UNI_GEN] = 13;
      if (victim->trust > 6)
      {
	 victim->trust = victim->trust;
	 victim->level = victim->level;
      }
      else
      {
	 victim->trust = 6;
	 victim->level = 6;
      }
      send_to_char ("You are now a monk!\n\r", victim);
   }
   else if (!str_cmp (arg2, "drow"))
   {
      victim->pcdata->stats[UNI_GEN] = 13;
      victim->class = 32;
      if (!IS_IMMORTAL (victim))
	 victim->level = 3;
      send_to_char ("You are now a drow!\n\r", victim);
   }
   else
      do_class (ch, "");

   send_to_char ("Class Set.\n\r", ch);
   return;
}

void do_generation (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   int gen;
   char arg1[MAX_INPUT_LENGTH];
   char arg2[MAX_INPUT_LENGTH];
   argument = one_argument (argument, arg1);
   argument = one_argument (argument, arg2);

   if (IS_NPC (ch))
      return;

   if (arg1[0] == '\0' || arg2[0] == '\0')
   {
      send_to_char ("Syntax: generation <char> <generation>.\n\r", ch);
      return;
   }

   if ((victim = get_char_world (ch, arg1)) == NULL)
   {
      send_to_char ("That player is not here.\n\r", ch);
      return;
   }

   gen = is_number (arg2) ? atoi (arg2) : -1;

   if (gen < 0 || gen > 13)
   {
      stc ("That is an invalid generation!\n\r", ch);
      return;
   }

   send_to_char ("Generation Set.\n\r", ch);
   victim->pcdata->stats[UNI_GEN] = gen;
   return;
}

/*
void do_autostance( CHAR_DATA *ch, char *argument )
{
	char arg       [MAX_INPUT_LENGTH];	
	int selection;
	
	one_argument( argument, arg );

    if (IS_NPC(ch)) return;  
	
    if (!str_cmp(arg,"none")    ) 
    {
    selection = STANCE_NONE;
	send_to_char("You're autostance has been removed.\n\r",ch);
	REMOVE_BIT(ch->extra, EXTRA_STANCE);
	}
    else if (!str_cmp(arg,"viper")   ) 
    {
    selection = STANCE_VIPER;
	send_to_char("Viper stance set.\n\r",ch);
	}
    else if (!str_cmp(arg,"crane")   ) 
    {
    selection = STANCE_CRANE;
	send_to_char("Crane stance set.\n\r",ch);
	}
    else if (!str_cmp(arg,"crab")    ) 
    {
    selection = STANCE_CRAB;
	send_to_char("Crab stance set.\n\r",ch);
	}
    else if (!str_cmp(arg,"mongoose")) 
    {
    selection = STANCE_MONGOOSE;
	send_to_char("Mongoose stance set.\n\r",ch);
	}
    else if (!str_cmp(arg,"bull")    ) 
    {
    selection = STANCE_BULL;
	send_to_char("Bull stance set.\n\r",ch);
	}
    else
    {
	if (!str_cmp(arg,"mantis") && ch->stance[STANCE_CRANE] >= 200 &&
	    ch->stance[STANCE_VIPER] >= 200)
	{
	    selection = STANCE_MANTIS;
	    send_to_char("Mantis stance set.\n\r",ch);
	}
	else if (!str_cmp(arg,"dragon") && ch->stance[STANCE_BULL] >= 200 &&
	    ch->stance[STANCE_CRAB] >= 200)
	{
	    selection = STANCE_DRAGON;
	    send_to_char("Dragon stance set.\n\r",ch);
	}
	else if (!str_cmp(arg,"tiger") && ch->stance[STANCE_BULL] >= 200 &&
	    ch->stance[STANCE_VIPER] >= 200)
	{
	    selection = STANCE_TIGER;
	    send_to_char("Tiger stance set.\n\r",ch);
	}
	else if (!str_cmp(arg,"monkey") && ch->stance[STANCE_CRANE] >= 200 &&
	    ch->stance[STANCE_MONGOOSE] >= 200)
	{
	    selection = STANCE_MONKEY;
	    send_to_char("Monkey stance set.\n\r",ch);
	}
	else if (!str_cmp(arg,"swallow") && ch->stance[STANCE_CRAB] >= 200 &&
	    ch->stance[STANCE_MONGOOSE] >= 200)
	{
	    selection = STANCE_SWALLOW;
	    send_to_char("Swallow  stance set.\n\r",ch);
	}
	else
	{
	    send_to_char("Syntax is: autostance <style>.\n\r",ch);
	    send_to_char("Autotance being one of: None, Viper, Crane, Crab, Mongoose,
Bull.\n\r",ch);
	    send_to_char("      If you know them:  Mantis, Dragon, Tiger, Monkey,
Swallow.\n\r",ch);
	    return;
	}
    }
    ch->stance[11] = selection;
    SET_BIT(ch->extra, EXTRA_STANCE);
    return;
}
*/
void reset_weapon (CHAR_DATA * ch, int dtype)
{
   if (ch->wpn[dtype] > 200)
      ch->wpn[dtype] = 200;
   return;
}

void reset_spell (CHAR_DATA * ch, int dtype)
{
   if (ch->spl[dtype] > 200)
      ch->spl[dtype] = 200;
   return;
}


void do_reimburse (CHAR_DATA * ch, char *argument)
{
   char buf[MAX_STRING_LENGTH];
   char strsave[MAX_STRING_LENGTH];
   char *word;
   FILE *fp;
   bool fMatch;

   if (IS_SET (ch->flag2, AFF2_REIMB))
   {
      stc ("You already have a pfile.\n\r", ch);
      return;
   }

   sprintf (strsave, "%s%s", BACKUP_DIR, ch->name);
   if ((fp = fopen (strsave, "r")) == NULL)
   {
      send_to_char ("You dont have a reimbursement file.\n\r", ch);
      return;
   }

   if ((fp = fopen (strsave, "r")) != NULL)
   {


      for (;;)
      {
	 word = feof (fp) ? "End" : fread_word (fp);
	 fMatch = FALSE;

	 switch (UPPER (word[0]))
	 {
	 case '*':
	    fMatch = TRUE;
	    fread_to_eol (fp);
	    break;

	 case 'H':
	    if (!str_cmp (word, "HpManaMove"))
	    {
	       ch->hit = fread_number (fp);
	       ch->max_hit = fread_number (fp);
	       ch->mana = fread_number (fp);
	       ch->max_mana = fread_number (fp);
	       ch->move = fread_number (fp);
	       ch->max_move = fread_number (fp);
	       send_to_char ("***Hp/Mana/Move Reimbursed.\n\r", ch);
	       fMatch = TRUE;
	       break;
	    }
	    break;



	 case 'P':
	    if (!str_cmp (word, "Primal"))
	    {
	       ch->practice = fread_number (fp);
	       fMatch = TRUE;
	       send_to_char ("***Primal reimbursed.\n\r", ch);
	       break;
	    }
	    if (!str_cmp (word, "PkPdMkMd"))
	    {
	       ch->pkill = fread_number (fp);
	       ch->pdeath = fread_number (fp);
	       ch->mkill = fread_number (fp);
	       ch->mdeath = fread_number (fp);
	       send_to_char ("***Player/Mob Deaths/Kills restored.\n\r", ch);
	       fMatch = TRUE;
	       break;
	    }
	    break;

	 case 'S':



	    if (!str_cmp (word, "Spells"))
	    {
	       ch->spl[0] = fread_number (fp);
	       ch->spl[1] = fread_number (fp);
	       ch->spl[2] = fread_number (fp);
	       ch->spl[3] = fread_number (fp);
	       ch->spl[4] = fread_number (fp);
	       send_to_char ("***Spell level reimbursed.\n\r", ch);
	       fMatch = TRUE;
	       break;
	    }


	    if (!str_cmp (word, "Stance"))
	    {
	       ch->stance[0] = fread_number (fp);
	       ch->stance[1] = fread_number (fp);
	       ch->stance[2] = fread_number (fp);
	       ch->stance[3] = fread_number (fp);
	       ch->stance[4] = fread_number (fp);
	       ch->stance[5] = fread_number (fp);
	       ch->stance[6] = fread_number (fp);
	       ch->stance[7] = fread_number (fp);
	       ch->stance[8] = fread_number (fp);
	       ch->stance[9] = fread_number (fp);
	       ch->stance[10] = fread_number (fp);
	       fMatch = TRUE;
	       send_to_char ("***Stances reimbursed.\n\r", ch);
	       break;
	    }


	    break;

	 case 'E':

	    if (!str_cmp (word, "End"))
	    {
	       send_to_char ("***Reimbursed.. Player saved.\n\r", ch);
	       send_to_char
		  ("***If you havnt noticed, There was a pwipe.\n\r", ch);
	       send_to_char
		  ("***We have reimbursed what we could but you will have to earn the rest.\n\r",
		   ch);
	       send_to_char ("***Classes will be passed out again. -Sage\n\r",
			     ch);
	       ch->level = 3;
	       ch->trust = 3;
	       ch->exp += 250000;
	       do_autosave (ch, "");
	       SET_BIT (ch->flag2, AFF2_REIMB);
	       return;
	       fMatch = TRUE;
	       break;
	    }
	    break;

	 case 'W':
	    if (!str_cmp (word, "Weapons"))
	    {
	       ch->wpn[0] = fread_number (fp);
	       ch->wpn[1] = fread_number (fp);
	       ch->wpn[2] = fread_number (fp);
	       ch->wpn[3] = fread_number (fp);
	       ch->wpn[4] = fread_number (fp);
	       ch->wpn[5] = fread_number (fp);
	       ch->wpn[6] = fread_number (fp);
	       ch->wpn[7] = fread_number (fp);
	       ch->wpn[8] = fread_number (fp);
	       ch->wpn[9] = fread_number (fp);
	       ch->wpn[10] = fread_number (fp);
	       ch->wpn[11] = fread_number (fp);
	       ch->wpn[12] = fread_number (fp);
	       send_to_char ("Weapons reimbursed.\n\r", ch);
	       fMatch = TRUE;
	       break;
	    }
	    break;
	 }

	 if (!fMatch)
	 {
	    sprintf (buf, "Fread_char: no match. WORD: %s", word);
	    fread_to_eol (fp);
	 }

      }
   }
   return;
}

void do_bounty (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg1[MAX_INPUT_LENGTH];
   char arg2[MAX_INPUT_LENGTH];
   char buf[MAX_STRING_LENGTH];

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

   if (arg1[0] == '\0' || arg2[0] == '\0')
   {
      send_to_char
	 ("Place what bounty on who's head?\n\rSyntax: Bounty <victim> <amount>\n\r",
	  ch);
      return;
   }

   if ((victim = get_char_world (ch, arg1)) == NULL)
   {
      send_to_char ("They are currently not logged in!", ch);
      return;
   }
/*
    if (IS_IMMORTAL(ch) && !str_cmp(arg1, "all"))
    {
	send_to_char( "You cannot place bountys on players!\n\r",ch);
        return;
    }
*/
   if (ch == victim)
   {
      send_to_char ("You cannot place bounties on yourself!\n\r", ch);
      return;
   }


   if (IS_NPC (victim))
   {
      send_to_char ("You cannot put a bounty on NPCs!\n\r", ch);
      return;
   }
   if (get_hours (victim) < 10)
   {
      send_to_char ("They need 10 hours first!.", ch);
      return;
   }
   if (IS_NEWBIE (victim))
   {
      stc ("You cant put bounties on newbies!\n\r", ch);
      return;
   }
   if (!IS_HERO (victim))
   {
      send_to_char ("You cannot place bounties on mortals!\n\r", ch);
      return;
   }

   if (IS_IMMORTAL (victim))
   {
      send_to_char ("You cannot place bounties on gods!\n\r", ch);
      return;
   }

   if IS_SET
      (victim->extra2, NHELPER)
   {
      stc ("You cannot place bounties on Newbie Helpers!\n\r", ch);
      return;
   }

   if (is_number (arg2))
   {
      int amount;
      amount = atoi (arg2);

      if (amount == 0)
	 amount = 1;

      if (amount < 50)
      {
	 send_to_char
	    ("You have to put at least 50 questpoints as the bounty.\n\r",
	     ch);
	 return;
      }


      if (ch->pcdata->quest < amount)
      {
	 send_to_char ("You don't have that many questpoints!\n\r", ch);
	 return;
      }

/*    if ((victim->pcdata->bounty + amount) > 10000);
    {
	send_to_char( "Sorry, unable to raise the bounty.\n\r", ch);
	return;
    }
*/
      ch->pcdata->quest -= amount;
      victim->pcdata->bounty += amount;
      sprintf (buf, "You have placed a %d questpoint bounty on %s.\n\r",
	       amount, victim->name);
      send_to_char (buf, ch);
      sprintf (buf, "You are now worth %d questpoints.\n\r",
	       victim->pcdata->bounty);
      stc (buf, victim);
      sprintf (buf, "%s is now worth %d questpoints.", victim->name,
	       victim->pcdata->bounty);
      do_info (ch, buf);
      return;
   }
   send_to_char
      ("The amount has to be a number\n\rSyntax: Bounty <victim> <value>.\n\r",
       ch);
   return;
}


/***********************************************************
 *                                                         *
 * This was coded for Legend of Chrystancia by Tijer aka   *
 * Matt Little on 26/12/2000, and was based upon code from *
 * Jobo, coder of Dystopia.                                *
 *                                                         *
 ***********************************************************/



void load_leaderboard ()
{
   FILE *fp;

   if ((fp = fopen ("../db/leader.db", "r")) == NULL)
   {
      bug ("Creating leaders.dat", 0);
      save_leaderboard ();
      return;
   }
   leader_board.bestpk_name = fread_string (fp);
   leader_board.bestpk_number = fread_long (fp);
   leader_board.pk_name = fread_string (fp);
   leader_board.pk_number = fread_number (fp);
   leader_board.pd_name = fread_string (fp);
   leader_board.pd_number = fread_number (fp);
   leader_board.mk_name = fread_string (fp);
   leader_board.mk_number = fread_number (fp);
   leader_board.md_name = fread_string (fp);
   leader_board.md_number = fread_number (fp);
   leader_board.tt_name = fread_string (fp);
   leader_board.tt_number = fread_number (fp);
   leader_board.qc_name = fread_string (fp);
   leader_board.qc_number = fread_number (fp);
   leader_board.xp_name = fread_string (fp);
   leader_board.xp_number = fread_long (fp);
//Unique addition 4 lines
   leader_board.qp_name = fread_string (fp);
   leader_board.qp_number = fread_number (fp);
   leader_board.tl_name = fread_string (fp);
   leader_board.tl_number = fread_number (fp);
   leader_board.aw_name = fread_string (fp);
   leader_board.aw_number = fread_number (fp);
   leader_board.al_name = fread_string (fp);
   leader_board.al_number = fread_number (fp);
   leader_board.st_name = fread_string (fp);
   leader_board.st_number = fread_number (fp);
   fclose (fp);
}

void save_leaderboard ()
{
   FILE *fp;

   if ((fp = fopen ("../db/leader.db", "w")) == NULL)
   {
      bug ("Error writing to leader.txt", 0);
      return;
   }
   fprintf (fp, "%s~\n", leader_board.bestpk_name);
   fprintf (fp, "%lli\n", leader_board.bestpk_number);
   fprintf (fp, "%s~\n", leader_board.pk_name);
   fprintf (fp, "%d\n", leader_board.pk_number);
   fprintf (fp, "%s~\n", leader_board.pd_name);
   fprintf (fp, "%d\n", leader_board.pd_number);
   fprintf (fp, "%s~\n", leader_board.mk_name);
   fprintf (fp, "%d\n", leader_board.mk_number);
   fprintf (fp, "%s~\n", leader_board.md_name);
   fprintf (fp, "%d\n", leader_board.md_number);
   fprintf (fp, "%s~\n", leader_board.tt_name);
   fprintf (fp, "%d\n", leader_board.tt_number);
   fprintf (fp, "%s~\n", leader_board.qc_name);
   fprintf (fp, "%d\n", leader_board.qc_number);
   fprintf (fp, "%s~\n", leader_board.xp_name);
   fprintf (fp, "%lli\n", leader_board.xp_number);
//Unique addition two lines
   fprintf (fp, "%s~\n", leader_board.qp_name);
   fprintf (fp, "%d\n", leader_board.qp_number);
   fprintf (fp, "%s~\n", leader_board.tl_name);
   fprintf (fp, "%d\n", leader_board.tl_number);
   fprintf (fp, "%s~\n", leader_board.aw_name);
   fprintf (fp, "%d\n", leader_board.aw_number);
   fprintf (fp, "%s~\n", leader_board.al_name);
   fprintf (fp, "%d\n", leader_board.al_number);
   fprintf (fp, "%s~\n", leader_board.st_name);
   fprintf (fp, "%d\n", leader_board.st_number);
   fclose (fp);
}

void do_leader (CHAR_DATA * ch, char *argument)
{
   char buf[MAX_STRING_LENGTH];

   if (IS_NPC (ch))
      return;

   stc ("\n\r#R-------------------------------#w[ #GL#geader #GB#goard#w ]#R-------------------------------#n#n\n\r\n\r", ch);

   send_to_char ("   #yBest Pkiller             : ", ch);
   sprintf (buf, "#g%-13s", leader_board.bestpk_name);
   send_to_char (buf, ch);
   sprintf (buf, " #ywith a #g%lli #yPK score#n\n\r",
	    leader_board.bestpk_number);
   send_to_char (buf, ch);

   send_to_char ("   #yMost Status              : ", ch);
   sprintf (buf, "#g%-13s", leader_board.st_name);
   send_to_char (buf, ch);
   sprintf (buf, " #ywith #g%d #yStatus (#gleader 'status'#y)#n\n\r",
	    leader_board.st_number);
   send_to_char (buf, ch);

   send_to_char ("   #yMost Pkills              : ", ch);
   sprintf (buf, "#g%-13s", leader_board.pk_name);
   send_to_char (buf, ch);
   sprintf (buf, " #ywith #g%d #yPkills (#gleader 'pkill'#y)#n\n\r",
	    leader_board.pk_number);
   send_to_char (buf, ch);

   send_to_char ("   #yMost Pdeaths             : ", ch);
   sprintf (buf, "#g%-13s", leader_board.pd_name);
   send_to_char (buf, ch);
   sprintf (buf, " #ywith #g%d #yPdeaths (#gleader 'pdeath'#y)#n\n\r",
	    leader_board.pd_number);
   send_to_char (buf, ch);

   send_to_char ("   #yMost Arena Wins          : ", ch);
   sprintf (buf, "#g%-13s", leader_board.aw_name);
   send_to_char (buf, ch);
   sprintf (buf, " #ywith #g%d #ywins (#gleader 'awins'#y)#n\n\r",
	    leader_board.aw_number);
   send_to_char (buf, ch);
   send_to_char ("   #yMost Arena Deaths        : ", ch);
   sprintf (buf, "#g%-13s", leader_board.al_name);
   send_to_char (buf, ch);
   sprintf (buf, " #ywith #g%d #ylosses (#gleader 'alosses'#y)#n\n\r",
	    leader_board.al_number);
   send_to_char (buf, ch);

   send_to_char ("   #yMost Mkills              : ", ch);
   sprintf (buf, "#g%-13s", leader_board.mk_name);
   send_to_char (buf, ch);
   sprintf (buf, " #ywith #g%d #yMkills (#gleader 'mkill'#y)#n\n\r",
	    leader_board.mk_number);
   send_to_char (buf, ch);

   send_to_char ("   #yMost Mdeaths             : ", ch);
   sprintf (buf, "#g%-13s", leader_board.md_name);
   send_to_char (buf, ch);
   sprintf (buf, " #ywith #g%d #yMdeaths (#gleader 'mdeath'#y)#n\n\r",
	    leader_board.md_number);
   send_to_char (buf, ch);

   send_to_char ("   #yMost Hours               : ", ch);
   sprintf (buf, "#g%-13s", leader_board.tt_name);
   send_to_char (buf, ch);
   sprintf (buf, " #ywith #g%d #yHours (#gleader 'hours'#y)#n\n\r",
	    leader_board.tt_number);
   send_to_char (buf, ch);

   send_to_char ("   #yMost Experience earned   : ", ch);
   sprintf (buf, "#g%-13s", leader_board.xp_name);
   stc (buf, ch);
   sprintf (buf, " #ywith #g%lli #yExp (#gleader 'exp'#y)#n\n\r",
	    leader_board.xp_number);
   stc (buf, ch);

   send_to_char ("   #yMost Quest Points earned : ", ch);
   sprintf (buf, "#g%-13s", leader_board.qp_name);
   send_to_char (buf, ch);
   sprintf (buf, " #ywith #g%d #yQP (#gleader 'quest'#y)#n\n\r",
	    leader_board.qp_number);
   send_to_char (buf, ch);

   send_to_char ("   #yMost Quests Completed    : ", ch);
   sprintf (buf, "#g%-13s", leader_board.qc_name);
   send_to_char (buf, ch);
   sprintf (buf, " #ywith #g%d #yQuests#n\n\r", leader_board.qc_number);
   send_to_char (buf, ch);
//Unique additions five lines
   send_to_char ("   #yHighest Tier Level       : ", ch);
   sprintf (buf, "#g%-13s", leader_board.tl_name);
   send_to_char (buf, ch);
   sprintf (buf, " #ywith #g%d #yLevels (#gleader 'tier'#y)#n\n\r",
	    leader_board.tl_number);
   send_to_char (buf, ch);

   stc ("\n\r#R------------------------------------------------------------------------------#n\n\r", ch);
   return;
}

void check_leaderboard (CHAR_DATA * ch)
{
   bool changed = FALSE;
   int imm;

   if (IS_NPC (ch))
      return;
   if (ch->level > 6)
      return;

   if IS_CREATOR
      (ch) return;
   if IS_SET
      (ch->extra2, NHELPER) return;

   for (imm = 0; *immlist[imm].name; imm++)
      if (!str_cmp (ch->name, immlist[imm].name))
         return;

   if (get_ratio (ch) > leader_board.bestpk_number
       || !str_cmp (leader_board.bestpk_name, ch->name))
   {
      leader_board.bestpk_number = get_ratio (ch);
      free_string (leader_board.bestpk_name);
      leader_board.bestpk_name = str_dup (ch->name);
      changed = TRUE;
   }
   if (ch->mdeath > leader_board.md_number)
   {
      leader_board.md_number = ch->mdeath;
      free_string (leader_board.md_name);
      leader_board.md_name = str_dup (ch->name);
      changed = TRUE;
   }
   if (ch->race > leader_board.st_number)
   {
      leader_board.st_number = ch->race;
      free_string (leader_board.st_name);
      leader_board.st_name = str_dup (ch->name);
      changed = TRUE;
   }
   if (ch->mkill > leader_board.mk_number)
   {
      leader_board.mk_number = ch->mkill;
      free_string (leader_board.mk_name);
      leader_board.mk_name = str_dup (ch->name);
      changed = TRUE;
   }
   if (ch->pkill > leader_board.pk_number)
   {
      leader_board.pk_number = ch->pkill;
      free_string (leader_board.pk_name);
      leader_board.pk_name = str_dup (ch->name);
      changed = TRUE;
   }
   if (ch->pdeath > leader_board.pd_number)
   {
      leader_board.pd_number = ch->pdeath;
      free_string (leader_board.pd_name);
      leader_board.pd_name = str_dup (ch->name);
      changed = TRUE;
   }

   if (ch->awins > leader_board.aw_number)
   {
      leader_board.aw_number = ch->awins;
      free_string (leader_board.aw_name);
      leader_board.aw_name = str_dup (ch->name);
      changed = TRUE;
   }
   if (ch->alosses > leader_board.al_number)
   {
      leader_board.al_number = ch->alosses;
      free_string (leader_board.al_name);
      leader_board.al_name = str_dup (ch->name);
      changed = TRUE;
   }
   if (ch->pcdata->score[SCORE_NUM_QUEST] > leader_board.qc_number)
   {
      leader_board.qc_number = ch->pcdata->score[SCORE_NUM_QUEST];
      free_string (leader_board.qc_name);
      leader_board.qc_name = str_dup (ch->name);
      changed = TRUE;
   }
/* Here */
   if ((long long) ch->pcdata->score[SCORE_TOTAL_XP] >
       (long long) leader_board.xp_number)
   {
      leader_board.xp_number = ch->pcdata->score[SCORE_TOTAL_XP];
      free_string (leader_board.xp_name);
      leader_board.xp_name = str_dup (ch->name);
      changed = TRUE;
   }
   if (ch->pcdata->score[SCORE_QUEST] > leader_board.qp_number)
   {
      leader_board.qp_number = ch->pcdata->score[SCORE_QUEST];
      free_string (leader_board.qp_name);
      leader_board.qp_name = str_dup (ch->name);
      changed = TRUE;
   }
   if (get_hours (ch) > leader_board.tt_number)
   {
      leader_board.tt_number = get_hours (ch);
      free_string (leader_board.tt_name);
      leader_board.tt_name = str_dup (ch->name);
      changed = TRUE;
   }
//Unique additions seven lines
   if (ch->tier > leader_board.tl_number)
   {
      leader_board.tl_number = ch->tier;
      free_string (leader_board.tl_name);
      leader_board.tl_name = str_dup (ch->name);
      changed = TRUE;
   }
   if (changed)
      save_leaderboard ();
   return;
}

long get_ratio (CHAR_DATA * ch)
{
   long long ratio;

   if (IS_NPC (ch))
      return 0;
   if (ch->pkill == 0)
      ratio = 0;
   else
      ratio =
	 ch->pkill * 100 * ((ch->pkill * ch->pkill) -
			    (ch->pdeath * ch->pdeath)) / ((ch->pkill +
							   ch->pdeath) *
							  (ch->pkill +
							   ch->pdeath));
   return ratio;
}

void do_leaderclear (CHAR_DATA * ch, char *argument)
{
   if (IS_NPC (ch))
      return;
   if (ch->level < 7)
      return;
   free_string (leader_board.bestpk_name);
   leader_board.bestpk_name = str_dup ("Noone");
   leader_board.bestpk_number = 0;
   free_string (leader_board.pk_name);
   leader_board.pk_name = str_dup ("Noone");
   leader_board.pk_number = 0;
   free_string (leader_board.pd_name);
   leader_board.pd_name = str_dup ("Noone");
   leader_board.pd_number = 0;
   free_string (leader_board.md_name);
   leader_board.md_name = str_dup ("Noone");
   leader_board.md_number = 0;
   free_string (leader_board.mk_name);
   leader_board.mk_name = str_dup ("Noone");
   leader_board.mk_number = 0;
   free_string (leader_board.xp_name);
   leader_board.xp_name = str_dup ("Noone");
   leader_board.xp_number = 0;
   free_string (leader_board.qc_name);
   leader_board.qc_name = str_dup ("Noone");
   leader_board.qc_number = 0;
   free_string (leader_board.qp_name);
   leader_board.qp_name = str_dup ("Noone");
   leader_board.qp_number = 0;
   free_string (leader_board.tt_name);
   leader_board.tt_name = str_dup ("Noone");
   leader_board.tt_number = 0;
//Unique additions three lines
   free_string (leader_board.tl_name);
   leader_board.tl_name = str_dup ("Noone");
   leader_board.tl_number = 0;
   free_string (leader_board.al_name);
   leader_board.al_name = str_dup ("Noone");
   leader_board.al_number = 0;
   free_string (leader_board.aw_name);
   leader_board.aw_name = str_dup ("Noone");
   leader_board.aw_number = 0;
   leader_board.st_name = str_dup ("Noone");
   leader_board.st_number = 0;
   save_leaderboard ();
   send_to_char ("Leader board cleared.\n\r", ch);
   return;
}