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