/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvements 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 *
* benefiting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
#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 <assert.h>
#if !defined(WIN32)
#include <unistd.h>
#endif
#include <string.h>
#include "merc.h"
/*
===========================================================================
This snippet was written by Erwin S. Andreasen, erwin@pip.dknet.dk. You may
use this code freely, as long as you retain my name in all of the files. You
also have to mail me telling that you are using it. I am giving this,
hopefully useful, piece of source code to you for free, and all I require
from you is some feedback.
Please mail me if you find any bugs or have any new ideas or just comments.
All my snippets are publically available at:
http://pip.dknet.dk/~pip1773/
If you do not have WWW access, try ftp'ing to pip.dknet.dk and examine
the /pub/pip1773 directory.
===========================================================================
*/
extern ROOM_INDEX_DATA * room_index_hash [MAX_KEY_HASH];
typedef enum {exit_from, exit_to, exit_both} exit_status;
const sh_int opposite_dir [6] = { DIR_SOUTH, DIR_WEST, DIR_NORTH, DIR_EAST, DIR_DOWN, DIR_UP };
/*
* get the 'short' name of an area (e.g. MIDGAARD, MIRROR etc.
* assumes that the filename saved in the AREA_DATA struct is something like midgaard.are
*/
char * area_name (AREA_DATA *pArea)
{
static char buffer[64];
char *period;
assert (pArea != NULL);
strncpy (buffer, pArea->filename, 64);
period = strchr (buffer, '.');
if (period)
*period = '\0';
return buffer;
}
void room_pair (ROOM_INDEX_DATA* left, ROOM_INDEX_DATA* right, exit_status ex, char *buffer)
{
char *sExit;
switch (ex)
{
default:
sExit = "??"; break; /* invalid usage */
case exit_from:
sExit = "< "; break;
case exit_to:
sExit = " >"; break;
case exit_both:
sExit = "<>"; break;
}
sprintf (buffer, "%5d %-26.26s %s%5d %-26.26s(%-8.8s)\n\r",
left->vnum, left->name, sExit, right->vnum, right->name, area_name(right->area));
return;
}
/* for every exit in 'room' which leads to or from pArea but NOT both, print it */
void checkexits (ROOM_INDEX_DATA *room, AREA_DATA *pArea, char* buffer)
{
char buf[MAX_STRING_LENGTH];
int i;
EXIT_DATA *exit;
ROOM_INDEX_DATA *to_room;
strcpy(buffer, "");
for (i = 0; i < 6; i++)
{
exit = room->exit[i];
if (!exit) continue;
else to_room = exit->to_room;
if (to_room)
{
if ( (room->area == pArea) && (to_room->area != pArea) )
{
if ( to_room->exit[opposite_dir[i]] && to_room->exit[opposite_dir[i]]->to_room == room )
room_pair (room,to_room,exit_both,buf); /* <> */
else
room_pair (room,to_room,exit_to,buf); /* > */
strcat (buffer, buf);
}
else
{
if ( (room->area != pArea) && (exit->to_room->area == pArea) )
{ /* an exit from another area to our area */
if (!(to_room->exit[opposite_dir[i]] && to_room->exit[opposite_dir[i]]->to_room == room ))
{/* two-way exits are handled in the other if */
room_pair (to_room,room,exit_from,buf);
strcat (buffer, buf);
}
} /* if room->area */
} /* for */
}
}
return;
}
/* for now, no arguments, just list the current area */
void do_exlist (CHAR_DATA *ch, char * argument)
{
AREA_DATA* pArea;
ROOM_INDEX_DATA* room;
int i;
char buffer[MAX_STRING_LENGTH];
pArea = ch->in_room->area;
for (i = 0; i < MAX_KEY_HASH; i++)
{
for (room = room_index_hash[i]; room != NULL; room = room->next)
{
checkexits (room, pArea, buffer);
send_to_char (buffer, ch);
}
}
return;
}
void set_switchname( CHAR_DATA *ch, char *title )
{
char buf[MAX_STRING_LENGTH];
if ( IS_NPC(ch) )
{
bug( "Set_switchname: NPC.", 0 );
return;
}
strcpy( buf, title );
free_string( ch->pcdata->switchname );
ch->pcdata->switchname = str_dup( buf );
return;
}
void set_pc_name( CHAR_DATA *ch, char *title )
{
char buf[MAX_STRING_LENGTH];
if ( IS_NPC(ch) )
{
bug( "Set_pc_name: NPC.", 0 );
return;
}
strcpy( buf, title );
free_string( ch->name);
ch->name = str_dup( buf );
return;
}
void do_classself(CHAR_DATA *ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
char arg1 [MAX_INPUT_LENGTH];
char arg2 [MAX_INPUT_LENGTH];
char arg3 [MAX_INPUT_LENGTH];
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
argument = one_argument( argument, arg3 );
if (IS_NPC(ch))return;
if (!IS_NPC(ch) && ch->class != 0)
{
send_to_char("You already have a class.\n\r",ch);
return;
}
if (ch->level < 3)
{
send_to_char("You must be avatar to selfclass.\n\r",ch);
return;
}
if ( arg1[0] == '\0' )
{
stc("#0Type #7selfclass #n<#7class#n> #0to become that class.#n\n\r",ch);
stc("#G************************************************#n\n\r",ch);
stc("#y--#CAngel #y--#CDemon #y--#CZombie\n\r",ch);
stc("#y--#CAssassin #y--#CUndeadKnight #y--#CTechnoMage\n\r",ch);
stc("#y--#CPaladin #y--#CDrow #y--#CShinobi\n\r",ch);
stc("#y--#CAntiPaladin #y--#CTanar'ri #y--#CHydra\n\r",ch);
stc("#y--#CDragon #y--#CWraith #y--#CWerewolf\n\r",ch);
stc("#y--#CVampire #y--#CElemental #y--#CGiant\n\r",ch);
stc("#y--#CSkyblade #y--#CPriest #y--#CGhoul\n\r",ch);
stc("#0Hybrids: #y--#CUndead Lycan #y--#CHell Spawn \n\r",ch);
stc(" #y--#CHells Soldier #y--#CStalker \n\r",ch);
stc(" #y--#CGaia Wolf #y--#CBlack Assassin \n\r",ch);
stc(" #y--#CShadowborn #y--#CVampiric Mist \n\r",ch);
stc(" #y--#CShadow Dragon #y--#CShadow Fiend \n\r",ch);
stc(" #y--#CGold Dragon #y--#CSilver Dragon \n\r",ch);
stc(" #y--#CDruid \n\r",ch);
stc("#G************************************************#n\n\r",ch);
return;
}
do_clearstats2(ch,"");
if (!str_cmp(arg1,"demon"))
{
ch->class = CLASS_DEMON;
set_learnable_disciplines(ch);
send_to_char( "You have chosen the #RDemonic#n path, may god have mercy on yer soul.\n\r", ch);
sprintf(buf,"%s Has become a #7Demon#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"elemental"))
{
ch->class = CLASS_ELEMENTAL;
send_to_char( "You are now an ELEMENTAL .\n\r", ch);
sprintf(buf,"%s Has become an #7Elemental#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"blackassassin"))
{
ch->class = CLASS_BLACK_ASSASSIN;
set_learnable_disciplines(ch);
send_to_char( "You are now a Drow-Assassin Hybrid.\n\r", ch);
sprintf(buf,"%s Has become an #Black Assassin#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"vampiricmist"))
{
ch->class = CLASS_VAMPIRIC_MIST;
set_learnable_disciplines(ch);
send_to_char( "You are now a Vampire-Wraith Hybrid.\n\r", ch);
sprintf(buf,"%s Has become an #7Vampiric Mist#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"hellspawn"))
{
ch->class = CLASS_HELL_SPAWN;
set_learnable_disciplines(ch);
send_to_char( "You are now a Vampire-Tanar'ri Hybrid.\n\r", ch);
sprintf(buf,"%s Has become an #7Hell Spawn#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"stalker"))
{
ch->class = CLASS_STALKER;
set_learnable_disciplines(ch);
send_to_char( "You are now a Werewolf-Drow Hybrid.\n\r", ch);
sprintf(buf,"%s Has become an #7Stalker#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"undeadlycan"))
{
ch->class = CLASS_UNDEAD_LYCAN;
set_learnable_disciplines(ch);
send_to_char( "You are now a Vampire-Werewolf Hybrid.\n\r", ch);
sprintf(buf,"%s Has become an #7Undead Lycan#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"hellssoldier"))
{
ch->class = CLASS_HELLS_SOLDIER;
set_learnable_disciplines(ch);
send_to_char( "You are now a Demon-Assassin Hybrid.\n\r", ch);
sprintf(buf,"%s Has become a #7Hells Soldier#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"shadowdragon"))
{
ch->class = CLASS_SHADOW_DRAGON;
ch->pcdata->powers[DRAGON_COLOR] = 9;
set_learnable_disciplines(ch);
send_to_char( "You are now a Demon-Dragon Hybrid.\n\r", ch);
sprintf(buf,"%s Has become a #7Shadow Dragon#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"shadowfiend"))
{
ch->class = CLASS_SHADOW_FIEND;
set_learnable_disciplines(ch);
send_to_char( "You are now a Demon-Wraith Hybrid.\n\r", ch);
sprintf(buf,"%s Has become a #7Shadow Fiend#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"gaiawolf"))
{
ch->class = CLASS_GAIA_WOLF;
set_learnable_disciplines(ch);
send_to_char( "You are now an Elemental-Werewolf Hybrid.\n\r", ch);
sprintf(buf,"%s Has become a #7Gaia Wolf#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"shadowborn"))
{
ch->class = CLASS_SHADOWBORN;
set_learnable_disciplines(ch);
send_to_char( "You are now a Drow-Wraith Hybrid.\n\r", ch);
sprintf(buf,"%s Has become a #7Shadowborn#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"zombie"))
{
ch->class = CLASS_ZOMBIE;
send_to_char( "You are now a #7Zombie#n.\n\r", ch);
sprintf(buf,"%s Has become a #7Zombie#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"druid"))
{
ch->class = CLASS_DRUID;
send_to_char( "You are now a #C-=#y(#rx#gDruid#rx#y)#C=-#n\n\r",ch);
sprintf(buf,"%s Has become a #C-=#y(#rx#gDruid#rx#y)#C=-#n", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"antipaladin"))
{
ch->class = CLASS_ANTIPALADIN;
send_to_char( "You are now an #7Anti-Paladin#n.\n\r", ch);
sprintf(buf,"%s Has become an #7Anti-Paladin#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"giant"))
{
ch->class = CLASS_GIANT;
send_to_char( "You are now a #7Giant#n.\n\r", ch);
sprintf(buf,"%s Has become a #7Giant#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"skyblade"))
{
ch->class = CLASS_SKYBLADE;
send_to_char( "You are now a #7Skyblade#n.\n\r", ch);
sprintf(buf,"%s Has become a #7Skyblade#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"priest"))
{
ch->class = CLASS_PRIEST;
send_to_char( "You are now a #7Priest#n.\n\r", ch);
sprintf(buf,"%s Has become a #7Priest#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"ghoul"))
{
ch->class = CLASS_GHOUL;
send_to_char( "You are now a #7Ghoul#n.\n\r", ch);
sprintf(buf,"%s Has become a #7Ghoul#n.", ch->name);
do_info(ch,buf);
}
else if(!str_cmp(arg1,"shinobi"))
{
if(!str_cmp(arg2,"fire")){
ch->class = CLASS_SHINOBI;ch->pcdata->powers[S_ELEMENT] = S_FIRE;
sprintf(buf,"%s Has Become a Fire Shinobi.", ch->name);
do_info(ch,buf);stc("You are now a Fire Shinobi.\n\r",ch);}
else if(!str_cmp(arg2,"earth")){
ch->class = CLASS_SHINOBI; ch->pcdata->powers[S_ELEMENT] = S_EARTH;
sprintf(buf,"%s Has Become a Earth Shinobi.", ch->name);
do_info(ch,buf);stc("You are now an Earth Shinobi.\n\r",ch);}
else if(!str_cmp(arg2,"wind")){
ch->class = CLASS_SHINOBI;ch->pcdata->powers[S_ELEMENT] = S_WIND;
sprintf(buf,"%s Has Become a Wind Shinobi.", ch->name);
do_info(ch,buf);stc("You are now a Wind Shinobi.\n\r",ch);}
else if(!str_cmp(arg2,"water")){
ch->class = CLASS_SHINOBI;ch->pcdata->powers[S_ELEMENT] = S_WATER;
sprintf(buf,"%s Has Become a Water Shinobi.", ch->name);
do_info(ch,buf);stc("You are now a Water Shinobi.\n\r",ch);}
else if(!str_cmp(arg2,"shadow")){
ch->class = CLASS_SHINOBI;ch->pcdata->powers[S_ELEMENT] = S_SHADOW;
sprintf(buf,"%s Has Become a Shadow Shinobi.", ch->name);
do_info(ch,buf);stc("You are now a Shadow Shinobi.\n\r",ch);}
else if(!str_cmp(arg2,"holy")){
ch->class = CLASS_SHINOBI;ch->pcdata->powers[S_ELEMENT] = S_HOLY;
sprintf(buf,"%s Has Become a Holy Shinobi.", ch->name);
do_info(ch,buf);stc("You are now a Holy Shinobi.\n\r",ch);}
else{
stc("Select an element: Fire, Earth, Water, Wind, Holy, Shadow\n\r",ch);
return;}
}
else if (!str_cmp(arg1,"paladin"))
{
ch->class = CLASS_PALADIN;
send_to_char( "You claim yourself to be a Paladin - train hard and prove yourself.\n\r", ch);
sprintf(buf,"%s Has become a #7Paladin#n.", ch->name);
do_info(ch,buf);
}
else if ( !str_cmp( arg1, "dragon" ) )
{
if ( !str_cmp( arg2, "red"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 1;
send_to_char("You are now a red dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "green"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 2;
send_to_char("You are now a green dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "blue"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 3;
send_to_char("You are now a blue dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "bronze"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 4;
send_to_char("You are now a bronze dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "silver"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 5;
send_to_char("You are now a silver dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "white"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 6;
send_to_char("You are now a white dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "black"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 7;
send_to_char("You are now a black dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "gold"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 8;
send_to_char("You are now a gold dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "shadow"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 9;
send_to_char("You are now a shadow dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "purple"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 10;
send_to_char("You are now a purple dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "chaos"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 11;
send_to_char("You are now a chaos dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "sapphire"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 12;
send_to_char("Your are now a Sapphire dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "emerald"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 13;
send_to_char("You are now an Emerald dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "ruby"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 14;
send_to_char("You are now a Ruby Dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "topaz"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 15;
send_to_char("Your are now a Topaz dragon!\n\r", ch);
}
else if ( !str_cmp( arg2, "diamond"))
{
ch->class = CLASS_DRAGON;
set_learnable_disciplines(ch);
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 16;
send_to_char("Your are now a Diamond dragon!\n\r", ch);
}
else
{
stc("Shadow, Gold, Black, White, Silver, Bronze, Blue, Green \n\r",ch);
stc("Diamond, Topaz, Ruby, Emerald, Sapphire, Chaos, Purple, Red\n\r",ch);
return;
}
return;
}
else if ( !str_cmp( arg1, "golddragon" ) )
{
ch->class = CLASS_GOLD_DRAGON;
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 8;
send_to_char("You are now a gold dragon!\n\r", ch);
sprintf(buf,"%s Has become a #YGold #7Dragon#n.", ch->name);
do_info(ch,buf);
}
else if ( !str_cmp( arg1, "silverdragon" ) )
{
ch->class = CLASS_SILVER_DRAGON;
ch->pcdata->powers[dragonage] = 1;
ch->special = 0;
ch->pcdata->powers[DRAGON_COLOR] = 5;
send_to_char("You are now a silver dragon!\n\r", ch);
sprintf(buf,"%s Has become a #7Silver Dragon#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1, "hydra"))
{
ch->class = CLASS_HYDRA;
send_to_char( "You are now a multi-headed Serpent.\n\r", ch);
sprintf(buf,"%s Has become a #7Hydra#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"werewolf"))
{
ch->class = CLASS_WEREWOLF;
set_learnable_disciplines(ch);
send_to_char( "You have chosen the path of the #0Garou#n, may gaia guide you.\n\r", ch);
sprintf(buf,"%s Has become a #7Werewolf#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"drow"))
{
ch->class = CLASS_DROW;
set_learnable_disciplines(ch);
send_to_char( "Choose your profession, and #PLloth#n will guide you.\n\r", ch);
sprintf(buf,"%s Has become a #7Dark Elf#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"technomage"))
{
ch->class = CLASS_HUMAN;
send_to_char( "You Are Now A Human Magic-User.\n\r", ch);
sprintf(buf,"%s Has become a #7Human TechnoMage#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"undeadknight"))
{
ch->class = CLASS_UNDEAD_KNIGHT;
send_to_char( "You Are Now An Undead Knight.\n\r", ch);
sprintf(buf,"%s Has become an #7Undead Knight#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"tanarri"))
{
ch->class = CLASS_TANARRI;
send_to_char( "You Are Now A Tanar'ri.\n\r", ch);
sprintf(buf,"%s Has become a #7Tanar'ri#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"angel"))
{
ch->class = CLASS_ANGEL;
send_to_char( "You Are Now An Angel.\n\r", ch);
sprintf(buf,"%s Has become an #7Angel#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"vampire"))
{
ch->class = CLASS_VAMPIRE;
ch->beast = 30;
set_learnable_disciplines(ch);
send_to_char( "Fear the #ySun#n nosferatu, God's curse lives in you.\n\r", ch);
sprintf(buf,"%s Has become a #7Vampire#n.", ch->name);
do_info(ch,buf);
}
else if (!str_cmp(arg1,"assassin"))
{
ch->class = CLASS_ASSASSIN;
ch->level = 3;
send_to_char( "You are now a Bloodthirsty Assassin.\n\r", ch);
sprintf(buf,"%s Has become an #7Assassin#n.", ch->name);
do_info(ch,buf);
}
else if(!str_cmp(arg1,"wraith"))
{
ch->class = CLASS_WRAITH;
send_to_char("Darkness shrouds you as your body becomes ethereal, you are now a wraith.\n\r",ch);
sprintf(buf,"%s Has become a #7Wraith#n.", ch->name);
do_info(ch,buf);
}
else do_classself(ch,"");
return;
}
void do_reimb(CHAR_DATA *ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
CHAR_DATA *vch;
char arg[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
int v;
argument = one_argument(argument, arg);
if (arg[0] == '\0') {
send_to_char("Reimburse <target> <xp|qp> <amount>\n\r", ch);
return;
}
if ((vch = get_char_world(ch, arg)) == NULL) {
send_to_char("They aren't logged on.\n\r", ch);
return;
}
if (IS_NPC(vch)) {
send_to_char("That is a mob.\n\r", ch);
return;
}
argument = one_argument(argument, arg);
argument = one_argument(argument, arg2);
v = atoi(arg2);
if (arg[0] == '\0' || arg2[0] == '\0'
|| (!is_number(arg2) && v >= 0)) {
do_reimb(ch, "");
return;
}
if (!str_cmp(arg, "xp")) {
vch->exp += v;
vch->pcdata->score[SCORE_TOTAL_XP] += v;
} else if (!str_cmp(arg, "qp")) {
vch->pcdata->quest += v;
vch->pcdata->questtotal += v;
} else {
send_to_char("Please specify XP or QP.\n\r", ch);
return;
}
if (vch->mkill < 5) {
vch->mkill = 5;
do_autosave(ch, "");
}
sprintf(arg2, "%s reimbursed %d %s.\n\r", vch->name, v, arg);
send_to_char(arg2, ch);
sprintf(arg2, "%s has reimbursed you %d %s.\n\r", ch->name, v, arg);
send_to_char(arg2, vch);
}
void do_affects( CHAR_DATA *ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
AFFECT_DATA *paf;
if (IS_NPC(ch)) return;
send_to_char("#0-=#7[ Spell Effects ]#0=-\n\r\n\r",ch);
if (IS_SET(ch->act, PLR_WIZINVIS))
send_to_char("#rWizinvis#n.\n\r",ch);
if(IS_ITEMAFF(ch,ITEMA_VORPAL))
stc("#RVorpal#n.\n\r",ch);
if (IS_ITEMAFF(ch, ITEMA_SPEED))
send_to_char("#rHaste#n.\n\r",ch);
if (IS_ITEMAFF(ch, ITEMA_REGENERATE))
send_to_char("#yRegeneration#n.\n\r",ch);
if (IS_ITEMAFF(ch, ITEMA_ICESHIELD))
send_to_char("#7Ice Shield#n.\n\r",ch);
if (IS_ITEMAFF(ch, ITEMA_SHOCKSHIELD))
send_to_char("#LShock Shield#n.\n\r",ch);
if (IS_ITEMAFF(ch, ITEMA_ACIDSHIELD))
send_to_char("#yAcid Shield#n.\n\r",ch);
if (IS_ITEMAFF(ch, ITEMA_FIRESHIELD))
send_to_char("#rFire Shield#n.\n\r",ch);
if (IS_ITEMAFF(ch, ITEMA_CHAOSSHIELD))
send_to_char("#pChaos Shield#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_PASS_DOOR))
send_to_char("#gPassDoor#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_SNEAK))
send_to_char("#gSilent Movement#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_SANCTUARY))
send_to_char("#gDamage Reduction#n.\n\r",ch);
if ( IS_AFFECTED(ch, AFF_PROTECT))
send_to_char("#7Protection From Malevolence#n.\n\r",ch);
if ( IS_AFFECTED(ch, AFF_PROTECT_GOOD))
send_to_char("#7Protection From Benevolence#n.\n\r",ch);
if ( IS_AFFECTED(ch, AFF_FLYING))
send_to_char("#cFlight#n\n\r",ch);
if (IS_AFFECTED(ch, AFF_HIDE))
send_to_char("#7Hiding#n.\n\r",ch);
if (IS_CLASS(ch, CLASS_VAMPIRE) && IS_SET(ch->act, AFF_HIDE))
send_to_char("#0Shrouded#n.\n\r",ch);
if (IS_CLASS(ch, CLASS_WEREWOLF) && IS_SET(ch->act, AFF_HIDE))
send_to_char("#0Vanish#n.\n\r",ch);
if(IS_SET(ch->newbits,NEW_DROWHATE))
send_to_char("#7Drow HATE#n.\n\r",ch);
if (IS_SET(ch->special, SPC_WOLFMAN))
send_to_char("#7WereWolf Form#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_BLIND))
send_to_char("#7Blindness#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_INVISIBLE))
send_to_char("#7Invisibility#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_DETECT_EVIL))
send_to_char("#7Evil Detection#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_DETECT_INVIS))
send_to_char("#7Invisibility Detection#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_DETECT_MAGIC))
send_to_char("#7Arcane Detection#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_DETECT_HIDDEN))
send_to_char("#7Extra Sensory Perception#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_SHADOWPLANE))
send_to_char("#7ShadowPlane#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_FAERIE_FIRE))
send_to_char("#7Faerie Fire#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_INFRARED))
send_to_char("#7InfraRed#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_CURSE))
send_to_char("#7Curse#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_FLAMING))
send_to_char("#7On Fire#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_POISON))
send_to_char("#7Poisoned#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_ETHEREAL))
send_to_char("#7Ethereal#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_SLEEP))
send_to_char("#7Sleeping#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_CHARM))
send_to_char("#7Charmed#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_POLYMORPH))
send_to_char("#7PolyMorphed#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_SHADOWSIGHT))
send_to_char("#7ShadowSight#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_WEBBED))
send_to_char("#7Webbed#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_DROWFIRE))
send_to_char("#7Covered with DrowFire#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_ZULOFORM))
send_to_char("#7Zulo-Form#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_PEACE))
send_to_char("#7Filled with Peace#n.\n\r",ch);
if (IS_AFFECTED(ch, AFF_INFIRMITY))
send_to_char("#7Infirmity#n.\n\r",ch);
if ( ch->affected == NULL )
{
send_to_char( "You have nothing affecting you at this time.\n\r", ch);
return;
}
if ( ch->affected != NULL )
{
send_to_char( "You are affected by:\n\r", ch );
for ( paf = ch->affected; paf != NULL; paf = paf->next )
{
sprintf( buf, "Spell: '%s'", skill_table[paf->type].name );
send_to_char( buf, ch );
if ( ch->level >= 0 )
{
sprintf( buf, " modifies %s by %d for %d hours with bits %s.\n\r",
affect_loc_name( paf->location ),
paf->modifier,
paf->duration,
affect_bit_name( paf->bitvector ) );
send_to_char( buf, ch );
}
}
}
return;
}
char * plr_bit_name( int arg )
{
static char buf[512];
buf[0] = '\0';
if ( arg & PLR_IS_NPC ) strcat( buf, " npc" );
if ( arg & PLR_AUTOEXIT ) strcat( buf, " autoexit" );
if ( arg & PLR_AUTOLOOT ) strcat( buf, " autoloot" );
if ( arg & PLR_AUTOSAC ) strcat( buf, " autosac" );
if (arg & PLR_AUTOSIGIL) strcat(buf, " autosigil");
if ( arg & PLR_BLANK ) strcat( buf, " blank" );
if ( arg & PLR_BRIEF ) strcat( buf, " brief" );
if ( arg & PLR_COMBINE ) strcat( buf, " combine" );
if ( arg & PLR_PROMPT ) strcat( buf, " prompt" );
if ( arg & PLR_TELNET_GA ) strcat( buf, " telnet_ga" );
if ( arg & PLR_HOLYLIGHT ) strcat( buf, " holylight" );
if ( arg & PLR_WIZINVIS ) strcat( buf, " wizinvis" );
if ( arg & PLR_ANSI ) strcat( buf, " ansi" );
if ( arg & PLR_SILENCE ) strcat( buf, " silenced" );
if ( arg & PLR_NO_TELL ) strcat( buf, " no_tell" );
if ( arg & PLR_LOG ) strcat( buf, " log" );
if ( arg & PLR_FREEZE ) strcat( buf, " freeze" );
return ( buf[0] != '\0' ) ? buf+1 : "none";
}
char * extra_plr_bit_name( int arg )
{
static char buf[512];
buf[0] = '\0';
if ( arg & EXTRA_TRUSTED ) strcat( buf, " q_trusted" );
if ( arg & EXTRA_NEWPASS ) strcat( buf, " newpass" );
if ( arg & EXTRA_OSWITCH ) strcat( buf, " oswitch" );
if ( arg & EXTRA_SWITCH ) strcat( buf, " switch" );
if ( arg & EXTRA_FAKE_CON ) strcat( buf, " fake_con" );
if ( arg & TIED_UP ) strcat( buf, " tied_up" );
if ( arg & GAGGED ) strcat( buf, " gagged" );
if ( arg & BLINDFOLDED ) strcat( buf, " blindfolded" );
if ( arg & EXTRA_DONE ) strcat( buf, " non_virgin" );
if ( arg & EXTRA_EXP ) strcat( buf, " got_exp" );
if ( arg & EXTRA_PREGNANT ) strcat( buf, " pregnant" );
if ( arg & EXTRA_LABOUR ) strcat( buf, " labour" );
if ( arg & EXTRA_BORN ) strcat( buf, " born" );
if ( arg & EXTRA_PROMPT ) strcat( buf, " prompt" );
if ( arg & EXTRA_MARRIED ) strcat( buf, " married" );
if ( arg & EXTRA_CALL_ALL ) strcat( buf, " call_all" );
return ( buf[0] != '\0' ) ? buf+1 : "none";
}
char * get_position_name( int arg )
{
switch( arg )
{
case 0: return "dead";
case 1: return "mortal";
case 2: return "incap";
case 3: return "stunned";
case 4: return "sleeping";
case 5: return "meditating";
case 6: return "sitting";
case 7: return "resting";
case 8: return "fighting";
case 9: return "standing";
}
bug( "Get_position_name: unknown type %d.", arg );
return "(unknown)";
}
/*
* Itemaffect bit names :)
*/
char * itemaffect_bit_name( int arg )
{
static char buf[512];
buf[0] = '\0';
if ( arg & ITEMA_SHOCKSHIELD ) strcat( buf, " Shockshield" );
if ( arg & ITEMA_FIRESHIELD ) strcat( buf, " Fireshield" );
if ( arg & ITEMA_ICESHIELD ) strcat( buf, " Iceshield" );
if ( arg & ITEMA_ACIDSHIELD ) strcat( buf, " Acidshield" );
if ( arg & ITEMA_CHAOSSHIELD ) strcat( buf, " Chaoshield" );
if ( arg & ITEMA_ARTIFACT ) strcat( buf, " Artifact" );
if ( arg & ITEMA_REGENERATE ) strcat( buf, " Regeneration" );
if ( arg & ITEMA_SPEED ) strcat( buf, " Speed" );
if ( arg & ITEMA_VORPAL ) strcat( buf, " Vorpal" );
if ( arg & ITEMA_PEACE ) strcat( buf, " Peace" );
if ( arg & ITEMA_RIGHT_SILVER ) strcat( buf, " Right Silver" );
if ( arg & ITEMA_LEFT_SILVER ) strcat( buf, " Left Silver" );
if ( arg & ITEMA_REFLECT ) strcat( buf, " Darkshield" );
if ( arg & ITEMA_RESISTANCE ) strcat( buf, " Resistance" );
if ( arg & ITEMA_VISION ) strcat( buf, " Vision" );
if ( arg & ITEMA_STALKER ) strcat( buf, " Stalker" );
if ( arg & ITEMA_VANISH ) strcat( buf, " Vanish" );
if ( arg & ITEMA_RAGER ) strcat( buf, " Rager" );
return ( buf[0] != '\0' ) ? buf+1 : "none";
}
/*
* code by Tijer
*/
void do_pstat ( CHAR_DATA *ch, char *argument )
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
CHAR_DATA *victim;
argument = one_argument( argument, arg );
if ( arg[0] == '\0' )
{
send_to_char("Pstat whom?\n\r", ch );
return;
}
if ( ( victim = get_char_world( ch, arg ) ) == NULL )
{
send_to_char("They aren't here.\n\r", ch );
return;
}
sprintf( buf, "Name : %s.\n\r",
IS_NPC( victim ) ? victim->short_descr : victim->name );
send_to_char( buf, ch );
sprintf( buf, "Sex : %s. Room : %d. Align : %d. Primal : %d. Quest : %d.\n\r",
victim->sex == SEX_MALE ? "Male" :
victim->sex == SEX_FEMALE ? "Female" : "None",
victim->in_room == NULL ? 0 : victim->in_room->vnum,
victim->alignment,
victim->practice,
IS_NPC( victim ) ? 0 : victim->pcdata->quest
);
send_to_char( buf, ch );
sprintf( buf, "Level : %d. Trust : %d. Gold : %d. Exp : %d.\n\r",
victim->level,
victim->trust,
victim->gold,
victim->exp );
send_to_char( buf, ch );
sprintf( buf, "Hit : %d. Dam : %d. AC : %d. Position : %s\n\r",
char_hitroll( victim ),
char_damroll( victim ),
char_ac( victim ),
capitalize( get_position_name( victim->position ) ));
send_to_char( buf, ch );
sprintf( buf, "HP %d/%d. Mana %d/%d. Move %d/%d.\n\r",
victim->hit, victim->max_hit,
victim->mana, victim->max_mana,
victim->move, victim->max_move );
send_to_char( buf, ch );
sprintf( buf, "Str: %d. Int: %d. Wis: %d. Dex: %d. Con: %d.\n\r",
get_curr_str(victim),
get_curr_int(victim),
get_curr_wis(victim),
get_curr_dex(victim),
get_curr_con(victim) );
send_to_char( buf, ch );
sprintf( buf, "Fighting : %s. (%d)\n\r",
victim->fighting ? victim->fighting->name : "(None)",
victim->fighting ? victim->fighting->level : 0 );
send_to_char( buf, ch );
sprintf( buf, "Symbiote: AC:(%d) Damcap:(%d) Hitroll:(%d) Damroll(%d)\n\r",
victim->symbioteac, victim->symbiotedc, victim->symbiotehr, victim->symbiotedr );
send_to_char( buf, ch );
sprintf( buf, "Pkill : %d. Pdeath : %d. Mkill : %d. Mdeath : %d.\n\r",
IS_NPC( victim ) ? 0 : victim->pkill,
IS_NPC( victim ) ? 0 : victim->pdeath,
IS_NPC( victim ) ? 0 : victim->mkill,
IS_NPC( victim ) ? 0 : victim->mdeath );
send_to_char( buf, ch );
sprintf( buf, "TotExp : %12d. TotMobLev : %10d. TotQuestPoints : %10d.\n\r",
IS_NPC( victim ) ? 0 : victim->pcdata->score[SCORE_TOTAL_XP],
IS_NPC( victim ) ? 0 : victim->pcdata->score[SCORE_TOTAL_LEVEL],
IS_NPC( victim ) ? 0 : victim->pcdata->score[SCORE_QUEST] );
send_to_char( buf, ch );
sprintf( buf, "HighExp : %12d. HighMobLev : %10d. Tot#Quests : %10d.\n\r",
IS_NPC( victim ) ? 0 : victim->pcdata->score[SCORE_HIGH_XP],
IS_NPC( victim ) ? 0 : victim->pcdata->score[SCORE_HIGH_LEVEL],
IS_NPC( victim ) ? 0 : victim->pcdata->score[SCORE_NUM_QUEST] );
send_to_char( buf, ch );
if ( !IS_NPC( victim ) )
{
sprintf( buf, "Unarmed : %4d.", victim->wpn[0] );
send_to_char( buf, ch );
sprintf( buf, " Slice : %4d.", victim->wpn[1] );
send_to_char( buf, ch );
sprintf( buf, " Stab : %4d.", victim->wpn[2] );
send_to_char( buf, ch );
sprintf( buf, " Slash : %4d.", victim->wpn[3] );
send_to_char( buf, ch );
sprintf( buf, " Whip : %4d.\n\r", victim->wpn[4] );
send_to_char( buf, ch );
sprintf( buf, "Claw : %4d.", victim->wpn[5] );
send_to_char( buf, ch );
sprintf( buf, " Blast : %4d.", victim->wpn[6] );
send_to_char( buf, ch );
sprintf( buf, " Pound : %4d.", victim->wpn[7] );
send_to_char( buf, ch );
sprintf( buf, " Crush : %4d.", victim->wpn[8] );
send_to_char( buf, ch );
sprintf( buf, " Grep : %4d.\n\r", victim->wpn[9] );
send_to_char( buf, ch );
sprintf( buf, "Bite : %4d.", victim->wpn[10] );
send_to_char( buf, ch );
sprintf( buf, " Pierce : %4d.", victim->wpn[11] );
send_to_char( buf, ch );
sprintf( buf, " Suck : %4d.\n\r",victim->wpn[12] );
send_to_char( buf, ch );
sprintf( buf, "%-8s : %3d. %-8s : %3d. %-8s : %3d. %-8s : %3d. %-8s : %3d.\n\r",
"Purple", victim->spl[PURPLE_MAGIC],
"Red", victim->spl[RED_MAGIC],
"Blue", victim->spl[BLUE_MAGIC],
"Green", victim->spl[GREEN_MAGIC],
"Yellow", victim->spl[YELLOW_MAGIC] );
send_to_char( buf, ch );
sprintf( buf, "%-8s : %3d. %-8s : %3d. %-8s : %3d. %-8s : %3d. %-8s : %3d.\n\r",
"Viper", victim->stance[STANCE_VIPER],
"Crane", victim->stance[STANCE_CRANE],
"Crab", victim->stance[STANCE_CRAB],
"Mongoose", victim->stance[STANCE_MONGOOSE],
"Pitbull", victim->stance[STANCE_PITBULL] );
send_to_char( buf, ch );
sprintf( buf, "%-8s : %3d. %-8s : %3d. %-8s : %3d. %-8s : %-3d. %-8s : %3d.\n\r",
"Hawk", victim->stance[STANCE_HAWK],
"Badger", victim->stance[STANCE_BADGER],
"Cougar", victim->stance[STANCE_COUGAR],
"Wolverine", victim->stance[STANCE_WOLVERINE],
"Grizzly", victim->stance[STANCE_GRIZZLY] );
send_to_char( buf, ch );
// sprintf( buf, "%-8s : %3d. %-8s : %3d. %-8s : %3d. %-8s : %3d. %-8s : %3d.\n\r",
// "ss1", victim->stance[STANCE_SS1],
// "ss2", victim->stance[STANCE_SS2],
// "ss3", victim->stance[STANCE_SS3],
// "ss4", victim->stance[STANCE_SS4],
// "ss5", victim->stance[STANCE_SS5] );
// send_to_char( buf, ch );
sprintf( buf, "Act : %s\n\r", plr_bit_name(victim->act ));
send_to_char( buf, ch );
sprintf( buf, "Extra : %s\n\r",
victim->extra <= 0 ? "(None)" : extra_plr_bit_name( victim->extra ) );
send_to_char( buf, ch );
sprintf( buf, "ItemAff : %s\n\r",
victim->itemaffect <= 0 ? "(None)" : itemaffect_bit_name(victim->itemaffect ) );
send_to_char( buf, ch );
sprintf( buf, "Affected by : %s.\n\r",
affect_bit_name( victim->affected_by ) );
send_to_char( buf, ch );
return;
}
}
/* void do_pkcheck(CHAR_DATA *ch, char *argument)
{
CHAR_DATA *gch;
char cankill[MSL];
char canbekilled[MSL];
sprintf(cankill,"You can PK: ");
sprintf(canbekilled,"You can be PKed by: ");
for ( gch = char_list; gch != NULL; gch = gch->next )
{
if (IS_NPC(gch)) continue;
if (!can_see(ch,gch)) continue;
if (gch->level < 3 || gch->level > 6) continue;
if (ch == gch) continue;
if ( can_decapitate(ch,gch) ) strcat(cankill,gch->name); strcat(cankill," ");
if ( can_decapitate(gch,ch) ) strcat(canbekilled,gch->name); strcat(canbekilled," ");
}
strcat(cankill,"\n\r");
strcat(canbekilled,"\n\r");
stc(cankill,ch);
stc(canbekilled,ch);
}
*/