/***************************************************************************
* 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;
}