area/
src/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"




void load_balance()
{

  int i;   
  FILE *fp;

  if ((fp = fopen("../txt/balance.txt", "r")) == NULL)
  {
    log_string("Error: balance.txt not found!");
    exit(1);
  }
  balance[0].class = 0;
  balance[0].number_attacks = 0;
  balance[0].damcap = 0;
  balance[0].parry = 0;
  balance[0].dodge = 0;
  balance [0].middy = 0;

  for (i = 0; i < 20; i++)
  {
    balance[i].class = fread_number(fp);
    balance[i].number_attacks = fread_number(fp);
    balance[i].damcap = fread_number(fp);
    balance[i].parry = fread_number(fp);
    balance[i].dodge = fread_number(fp);
    balance[i].middy = fread_number(fp);
  }
  fclose(fp);

}
void save_balance()
{

  FILE *fp;
  int i;

  if ((fp = fopen("../txt/balance.txt","w")) == NULL)
  {
    log_string("Error writing to balance.txt");
    return;
  }
  for (i=0;i<20;i++)
  {
    fprintf(fp, "%d\n", balance[i].class); 
    fprintf(fp, "%d\n", balance[i].number_attacks);
    fprintf(fp, "%d\n", balance[i].damcap);
    fprintf(fp, "%d\n", balance[i].parry);
    fprintf(fp, "%d\n", balance[i].dodge);
    fprintf(fp, "%d\n", balance[i].middy);
  }
  fclose (fp);

}

void do_xcenter(CHAR_DATA *ch, char *argument)
{
int i;

char class[MAX_STRING_LENGTH];
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char arg3[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
unsigned long int value = 0;

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




save_balance();

  if (arg1[0] == '\0')
  {
send_to_char("#CClass#0                    : #GClass         #0-#RNmbrAttacks    #yDamcap    Parry   Dodge   Middy#n\n\r",ch);
send_to_char("\n\r",ch);
for (i=0;i<20;i++)
{
if (i==0) sprintf(class,"#R[#0Demon#R]#n                 ");
if (i==1) sprintf(class,"#y((#LWerewolf#y))#n            ");
if (i==3) sprintf(class,"#0<<#RVampire#0>>#n             ");
if (i==2) sprintf(class,"#P.o0#0Drow#P0o.#n              ");
if (i==4) sprintf(class,"#y{#RTanar'ri#y}#n              ");
if (i==5) sprintf(class,"#y.x#0(#7Angel#0)#yx.#n             ");
if (i==6) sprintf(class,"#0|[#LUndead Knight#0]|#n       ");
if (i==7) sprintf(class,"#g[#rX#g]#oAssassin#g[#rX#g]#n          ");
if (i==8) sprintf(class,"#7(#0*#R=#r-#oWraith#r-#R=#0*#7)#n          ");
if (i==9) sprintf(class,"#Rx#rX#C[#gElemental#C]#rX#Rx#n         ");
if (i==10) sprintf(class,"#y<#7/#y+#7>#nPaladin#7<#y+#7\\#y>#n         ");
if (i==11) sprintf(class,"#C***#yHydra#C***#n             ");
if (i==12) sprintf(class,"#r:=#CDragon#r=:#n              ");
if (i==13) sprintf(class,"#0(#r*#7Zombie#r*#0)#n              ");
if (i==14) sprintf(class,"#l\#0|#l/-#7S#0hinob#7i#l-\#0|#l/#n           ");
if (i==15) sprintf(class,"#r+#y=#r+Human#r+#y=#r+#n             ");
if (i==16) sprintf(class,"#c<>#GG#gian#Gt#c<>#n               ");
if (i==17) sprintf(class,"#r^-^#0Anti-Paladin#r^-^#n      ");
if (i==18) sprintf(class,"#L=#R*#w>#CSky#Wblade#w<#R*#L=#n          ");
if (i==19) sprintf(class,"#w]>#L*#wPriest#L*#w<[#n            ");

sprintf(buf,"%-18s #0: #G%-12d #0->     #R%-2d        #y%-5d     #y%-5d #y%-5d #y%-5d\n\r",class,balance[i].class,balance[i].number_attacks,
        balance[i].damcap, balance[i].parry, balance[i].dodge, balance[i].middy); 
send_to_char(buf,ch);
}}

    value = is_number( arg3 ) ? atoi( arg3 ) : -1;


if (!str_cmp(arg1,"demon"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Demon number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[0].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Demon Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[0].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Demon Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[0].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Demon Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[0].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "Leech range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Demon Leech set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[0].middy = value;
		return;
		}
}


if (!str_cmp(arg1,"werewolf"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Werewolf number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[1].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Werewolf Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[1].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Werewolf Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[1].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Werewolf Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[1].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "Talons range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Werewolf Talons set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[1].middy = value;
		return;
		}
}


if (!str_cmp(arg1,"drow"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Drow number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[2].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Drow Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[2].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Drow Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[2].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Drow Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[2].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Drow ? set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[2].middy = value;
		return;
		}
}



if (!str_cmp(arg1,"vampire"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Vampire number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[3].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Vampire Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[3].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Vampire Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[3].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Vampire Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[3].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Vampire Spit set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[3].middy = value;
		return;
		}
}

if (!str_cmp(arg1,"tanarri"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Tanar'ri number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[4].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Tanar'ri Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[4].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Tanar'ri Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[4].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Tanar'ri Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[4].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "Tanar'ri ? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Tanar'ri ? set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[4].middy = value;
		return;
		}
}

if (!str_cmp(arg1,"angel"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Angel number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[5].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Angel Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[5].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Angel Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[5].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Angel Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[5].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Angel ? set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[5].middy = value;
		return;
		}
}

if (!str_cmp(arg1,"undeadknight"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"UK number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[6].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"UK Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[6].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"UK Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[6].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"UK Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[6].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"UK Soulsuck set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[6].middy = value;
		return;
		}
}


if (!str_cmp(arg1,"assassin"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Assassin number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[7].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Assassin Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[7].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Assassin Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[7].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Assassin Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[7].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Assassin ? set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[7].middy = value;
		return;
		}
}


if (!str_cmp(arg1,"wraith"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Wraith number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[8].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Wraith Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[8].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Wraith Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[8].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Wraith Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[8].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Wraith (dblast?) set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[8].middy = value;
		return;
		}
}

if (!str_cmp(arg1,"elemental"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Elemental number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[9].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Elemental Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[9].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Elemental Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[9].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Elemental Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[9].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Elemental Natures Fury set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[9].middy = value;
		return;
		}
}

if (!str_cmp(arg1,"paladin"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Paladin number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[10].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Paladin Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[10].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Paladin Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[10].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Paladin Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[10].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Paladin Retribution set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[10].middy = value;
		return;
		}
}

if (!str_cmp(arg1,"hydra"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Hydra number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[11].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Hydra Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[11].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Hydra Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[11].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Hydra Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[11].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Hydra Soulsuck set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[11].middy = value;
		return;
		}
}

if (!str_cmp(arg1,"dragon"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Dragon number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[12].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Dragon Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[12].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Dragon Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[12].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Dragon Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[12].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Dragon Fire Breath set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[12].middy = value;
		return;
		}
}

if (!str_cmp(arg1,"zombie"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Zombie number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[13].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Zombie Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[13].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Zombie Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[13].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Zombie Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[13].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Zombie Shatter set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[13].middy = value;
		return;
		}
}

if (!str_cmp(arg1,"shinobi"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Shinobi number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[14].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Shinobi Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[14].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Shinobi Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[14].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Shinobi Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[14].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Shinobi ? set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[14].middy = value;
		return;
		}
}

if (!str_cmp(arg1,"technomage"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Technomage number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[15].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Technomage Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[15].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Technomage Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[15].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Technomage Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[15].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Technomage Soulsuck set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[15].middy = value;
		return;
		}
}
if (!str_cmp(arg1,"giant"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Giant number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[16].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Giant Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[16].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Giant Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[16].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Giant Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[16].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Giant Soulsuck set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[16].middy = value;
		return;
		}
}


if (!str_cmp(arg1,"antipaladin"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Anti-Paladin number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[17].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Anti-Paladin Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[17].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Anti-Paladin Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[17].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Anti-Paladin Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[17].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Anti-Paladin Flamestrike set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[17].middy = value;
		return;
		}
}


if (!str_cmp(arg1,"skyblade"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"SkyBlade number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[18].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"SkyBlade Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[18].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"SkyBlade Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[18].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"SkyBlade Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[18].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"SkyBlade Pummel set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[18].middy = value;
		return;
		}
}


if (!str_cmp(arg1,"priest"))
{
	if (arg2[0] == '\0')
	{
	send_to_char("numberattacks, damcap, parry, dodge, middy",ch);
	return;
	}
	if (!str_cmp(arg2,"numberattacks"))
	{
		if ( value < 2 || value > 10 )
	 	{
		stc( "Number of Attacks range is 2 to 10.\n\r", ch );
		return;
		}
	      sprintf(buf,"Priest number_attacks set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[19].number_attacks = value;
		return;
		}

	if (!str_cmp(arg2,"damcap"))
		{
		if ( value < 1000 || value > 6000 )
	 	{
		stc( "Damcap range is 1000 to 6000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Priest Damcap set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[19].damcap = value;
		return;
		}

	if (!str_cmp(arg2,"parry"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Parry range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Priest Parry set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[19].parry = value;
		return;
		}
	if (!str_cmp(arg2,"dodge"))
		{
		if ( value < 20 || value > 70 )
	 	{
		stc( "Dodge range is 20 to 70.\n\r", ch );
		return;
		}
	      sprintf(buf,"Priest Dodge set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[19].dodge = value;
		return;
		}
	if (!str_cmp(arg2,"middy"))
		{
		if ( value < 5000 || value > 15000 )
	 	{
		stc( "? range is 5000 to 15000.\n\r", ch );
		return;
		}
	      sprintf(buf,"Priest ? set to %d.\n\r",value);
	      send_to_char(buf,ch);
		balance[19].middy = value;
		return;
		}
}

}



void do_lifestone( CHAR_DATA *ch, char *argument )
{
  OBJ_INDEX_DATA *pObjIndex;
  OBJ_DATA *obj;
  char arg[MAX_INPUT_LENGTH];
  int vnum = 0;

  argument = one_argument( argument, arg );

  if (IS_NPC(ch)) return;

  if ( ch->pcdata->quest < 1000000 )
  {
    send_to_char("You don't have the one million qps needed.\n\r",ch);
    return;
  }
  if(!IS_IMMORTAL(ch)) ch->pcdata->quest -= 1000000;
  obj = create_object(get_obj_index(80929), 0);
  obj->questowner = str_dup(ch->pcdata->switchname);
  obj_to_char(obj, ch);
  act("You transform the 1 Million qp into $p.",ch,obj,NULL,TO_CHAR);
  act("$n forms $p out of 1 Million qp.",ch,obj,NULL,TO_ROOM);
  return;
}

void do_isauto(CHAR_DATA * ch, char *argument)
{
        if (IS_NPC(ch))
                return;
        send_to_char("That power is automatic.\n\r", ch);
        return;
}



void do_legendwho( CHAR_DATA *ch, char *argument)
{
DESCRIPTOR_DATA *d;
CHAR_DATA *gch;
char const *legend;
char buf[MAX_STRING_LENGTH];

send_to_char("Name                    Mightrate      Legend\n\r",ch); 

for (d = descriptor_list; d!= NULL; d= d->next)
{
    if (d->connected != CON_PLAYING) continue;
    if ((gch = d->character) == NULL) continue;
    if (IS_IMMORTAL(gch)) continue;

	if (gch->pcdata->legend == 20) legend = "#0Godlike#n";
        else if (gch->pcdata->legend == 19)legend = "#7Almighty#n";
        else if (gch->pcdata->legend == 18)legend = "#cSupreme#n";
        else if (gch->pcdata->legend == 17)legend = "#RMaster#n";
        else if (gch->pcdata->legend == 16)legend = "#rChampion#n";
        else if (gch->pcdata->legend == 15)legend = "#LCavalier#n";
        else if (gch->pcdata->legend == 14)legend = "#CGrand Duke#n";
        else if (gch->pcdata->legend == 13)legend = "#GLord#n";
        else if (gch->pcdata->legend == 12)legend = "#gSovereign#n";
        else if (gch->pcdata->legend == 11)legend = "#LEmperor#n";
        else if (gch->pcdata->legend == 10)legend = "#lKing#n";
        else if (gch->pcdata->legend == 9)legend = "#CDuke#n";
        else if (gch->pcdata->legend == 8)legend = "#oLegend#n";
        else if (gch->pcdata->legend == 7)legend = "#PMystical#n";
        else if (gch->pcdata->legend == 6)legend = "#pMyth#n";
        else if (gch->pcdata->legend == 5)legend = "#CHero#n";
        else if (gch->pcdata->legend == 4)legend = "#LKnight#n";
        else if (gch->pcdata->legend == 3)legend = "#RSavior#n";
        else if (gch->pcdata->legend == 2)legend = "#rCitizen#n";
        else if (gch->pcdata->legend == 1)legend = "#GSerf#n";
        else legend = "#RNone#n";

sprintf(buf,"#R%-24s #y%-6d        #L%s#n\n\r",gch->pcdata->switchname,getMight(gch),legend);
send_to_char(buf,ch);

}
}

void do_qpbuy( CHAR_DATA *ch, char *argument )
{
  char arg[MIL];
  char buf[MSL];
  char arg2[MIL];             
  int value;

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


  if (arg[0] == '\0')
  {
    send_to_char("Syntax: qpbuy:happy or cp or dt.\n\r",ch);
    return;
  }      
    if ( !str_cmp( arg, "happy" ) )
    {
		if (global_exp)
            {
            send_to_char("Double exp is already in affect!\n\r",ch);
            return;
            }
		if (ch->pcdata->quest < 5000)
            {
            send_to_char("You dont have the 5K needed!\n\r",ch);
            return;
            }
	    ch->pcdata->quest -= 5000;
            pulse_exp = 30;
            do_toggle(ch, "exp on");
            sprintf( buf, "#g%s #CSpends #c5#CK and Turns on #rH#capp#ry H#cou#rr#n.\n\r", ch->name );
	    do_info( ch, buf );
	    return;
            }
    if (!str_cmp(arg, "dt"))
    {
	if (global_dt==TRUE)
        {
       send_to_char("Super Training is already in affect!\n\r",ch);
       return;   
        }  
		if (ch->pcdata->quest < 5000)
            {
            send_to_char("You dont have the 5K needed!\n\r",ch);
            return;
            }
	    ch->pcdata->quest -= 5000;
            pulse_dt = 30;
            do_toggle(ch, "dt on");
            sprintf( buf, "#g%s #CSpends #c5#CK and Turns on #rS#cupe#rr T#crainin#rg#n.\n\r", ch->name );
	    do_info( ch, buf );
    return;
  }
    if (!str_cmp(arg, "cp"))
    {
	if (global_cp==TRUE)
        {
       send_to_char("Double Class Points is already in affect!\n\r",ch);
       return;   
        }  
		if (ch->pcdata->quest < 5000)
            {
            send_to_char("You dont have the 5K needed!\n\r",ch);
            return;
            }
	    ch->pcdata->quest -= 5000;
            pulse_cp = 30;
            do_toggle(ch, "cp on");
            sprintf( buf, "#g%s #CSpends #c5#CK and Turns on #rD#coubl#re C#clas#rs P#coint#rs#n.\n\r", ch->name );
	    do_info( ch, buf );
    return;
  }


    if (!str_cmp(arg, "qp"))
    {
        if (global_qp==TRUE)
        {
       send_to_char("Double Quest Points is already in affect!\n\r",ch);
       return;
        }
                if (ch->pcdata->quest < 200000)
            {
            send_to_char("You dont have the 200K needed!\n\r",ch);
            return;
            }
            ch->pcdata->quest -= 200000;
            pulse_qp = 30;
            do_toggle(ch, "qp on");
            sprintf( buf, "#g%s #CSpends #c200#CK and Turns on #rD#coubl#re Q#cues#rt P#coint#rs#n.\n\r", ch->name );
            do_info( ch, buf );
    return;
  }



}

void do_crecall(CHAR_DATA * ch, char *argument)
{
        char      buf[MAX_STRING_LENGTH];
        CHAR_DATA *victim;
        CHAR_DATA *mount;
        ROOM_INDEX_DATA *location;

        if (IS_NPC(ch))
                return;

	if (ch->fight_timer > 0 )
	{
	send_to_char("Not with a fight timer.\n\r", ch);
	return;
	}     

    	if (ch->pcdata->kingdom == 0)
        {
                stc("Your not in a clan.\n\r", ch);
                return;
        }

        act("$n's body flickers with red energy.", ch, NULL, NULL, TO_ROOM);
        act("Your body flickers with red energy.", ch, NULL, NULL, TO_CHAR);
        if (ch->pcdata->kingdom == 1)
                location = get_room_index(ROOM_VNUM_RULER_HOME);
        else if (ch->pcdata->kingdom == 2)
                location = get_room_index(ROOM_VNUM_FORSAKEN_HOME);
        else if (ch->pcdata->kingdom == 3)
                location = get_room_index(ROOM_VNUM_SYNDICATE_HOME);
        else if (ch->pcdata->kingdom == 4)
                location = get_room_index(ROOM_VNUM_SKYLORDS_HOME);
        else if (ch->pcdata->kingdom == 5)
                location = get_room_index(ROOM_VNUM_PLAGUES_HOME);
        else if (ch->pcdata->kingdom == 6)
                location = get_room_index(ROOM_VNUM_NOSFERATU_HOME);

        else
        {
                send_to_char("Your crecall is broken, tell Xrakisis\n\r", ch);
                return;
        }


        if (ch->in_room == location)
                return;

        if (IS_SET(ch->in_room->room_flags, ROOM_NO_RECALL)
            || IS_AFFECTED(ch, AFF_CURSE))
        {
                send_to_char("You are unable to crecall.\n\r", ch);
                return;
        }

        if ((victim = ch->fighting) != NULL)
        {
                if (number_bits(1) == 0)
                {
                        WAIT_STATE(ch, 4);
                        sprintf(buf, "You failed!\n\r");
                        send_to_char(buf, ch);
                        return;
                }
                sprintf(buf, "You crecall from combat!\n\r");
                send_to_char(buf, ch);
                stop_fighting(ch, TRUE);
        }

        act("$n disappears.", ch, NULL, NULL, TO_ROOM);
        char_from_room(ch);
        char_to_room(ch, location);
        act("$n appears in the room.", ch, NULL, NULL, TO_ROOM);
        do_look(ch, "auto");
        if ((mount = ch->mount) == NULL)
                return;
        char_from_room(mount);
        char_to_room(mount, ch->in_room);
        return;
}