/*************************************************************************** * 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. * * * * Dystopia Mud improvements copyright (C) 2000, 2001 by Brian Graversen * * * * 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. * ***************************************************************************/ /*************************************************************************** * _/ _/ * * _/_/_/ _/_/ _/_/_/ _/ _/_/ _/ _/ _/_/_/ * * _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ * * _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ * * _/ _/ _/ _/_/_/ _/ _/_/ _/_/_/ _/_/_/ * *************************************************************************** * Mindcloud Copyright 2001-2003 by Jeff Boschee (Zarius), * * Additional credits are in the help file CODECREDITS * * All Rights Reserved. * ***************************************************************************/ #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <assert.h> #include <unistd.h> #include <string.h> #include "merc.h" #include "interp.h" #include "recycle.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. =========================================================================== */ 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; } xprintf(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 *exitd; ROOM_INDEX_DATA *to_room; strcpy(buffer, ""); for (i = 0; i < 6; i++) { exitd = room->exit[i]; if (!exitd) continue; else to_room = exitd->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) && (exitd->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 buf[MAX_STRING_LENGTH]; BUFFER *buffer; buffer = new_buf(); 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, buf); add_buf(buffer, buf); } } pager_to_char(buf_string(buffer), ch); free_buf(buffer); return; } */ 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 arg1[MAX_STRING_LENGTH]; char arg2[MAX_STRING_LENGTH]; char buf[MSL]; argument = one_argument(argument, arg1); argument = one_argument(argument, arg2); 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') { send_to_char ("Classes: Type selfclass <class> to get classed.\n\r\n\r", ch); send_to_char("#W--==[ #RCotN Classes #W]==--#n\n\r", ch); send_to_char("#0Demon, Werewolf, Drow\n\r",ch); send_to_char("#0Ninja, Vampire, Shapeshifter\n\r", ch); send_to_char("#0Battlemage, Tanar'ri, Undead Knight#n\n\r",ch); send_to_char("#0Cyborg, Samurai, Monk\n\r", ch); send_to_char("#0Angel, Lich, Ghoul#n\n\r", ch); send_to_char("#0Skyblade, Priest, Draconian#n\n\r",ch); send_to_char("#0Shadow, Jedi, Thief#n\n\r", ch); send_to_char("#0Fae, Drone, Giant\n\r",ch); send_to_char("#0Hobbit, Elemental, Paladin #n\n\r",ch); send_to_char("#0Shinobi, Zombie#n\n\r",ch); send_to_char("#0Dragon, Antipaladin#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); xprintf(buf, "#B%s #Chas chosen the #RDemonic#C path!#n\n\r", ch->pcdata->switchname); 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,"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,"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, "elemental")) { ch->class = CLASS_ELEMENTAL; send_to_char ("You have chosen the path of Nature.\n\r", ch); xprintf(buf, "#B%s #0has become an Elemental#n\n\r", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "paladin")) { ch->class = CLASS_PALADIN; send_to_char ("You have chosen the path of Good.\n\r", ch); xprintf(buf, "#B%s #0has chosen to dedicate their life to the Oath and the Measure.#n\n\r", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "thief")) { send_to_char ("#0You take up the dangerous lifestyle of the thief, vowing to kill and backstab your way to the top!#n\n\r", ch); ch->class = CLASS_THIEF; xprintf(buf, "#R%s #0has taken up the lifestyle of the murderous thief! Watch your possessions... and your back!#n", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "drone")) { ch->class = CLASS_DRONE; send_to_char ("Drool pours from your mouth as you become a drone.\n\r", ch); xprintf(buf, "#R%s #0has become a drooling drone!#n", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "antipaladin")) { ch->class = CLASS_ANTIPALADIN; send_to_char ("You sell your soul to Takhisis.\n\r", ch); xprintf(buf, "#R%s #0has become an AntiPaladin!#n", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "fae")) { ch->class = CLASS_FAE; set_learnable_disciplines(ch); send_to_char("You become a fae, kick some butt!.\n\r", ch); xprintf(buf, "#R%s #0has become a fae!#n", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "hobbit")) { ch->class = CLASS_HOBBIT; send_to_char ("Welcome to hobbithood, enjoy the stay, drinks will be served shortly.\n\r", ch); xprintf(buf, "#R%s #0shrinks hobbit size and begins blabbing about recipes!#n", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "giant")) { ch->class = CLASS_GIANT; send_to_char ("You grow and grow, finally you stop and realise your a Giant.\n\r", ch); xprintf(buf, "#R%s #Ggrows to enormous heights!#n", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "priest")) { send_to_char ("#wYou take up the holy life of a #WPriest#n\n\r", ch); ch->class = CLASS_PRIEST; xprintf(buf, "#W%s #whas taken the life of a holy man as a #BPriest#n", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "shadow")) { send_to_char ("#0You take up the secret lifestyle of the dark assassin!#n\n\r", ch); ch->class = CLASS_SHADOW; xprintf(buf, "#R%s #0has taken up the secret lifestyle of the dark assassin!#n", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "jedi")) { send_to_char ("#0You learn the ways of force and begin Jedi Training!#n\n\r", ch); ch->class = CLASS_JEDI; xprintf(buf, "#B%s #0learns the ways of the #RForce #0and begins #BJedi #0training.#n", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "draconian")) { stc("Your features become scaly, and lizard-like... You are now a Draconian!\n\r", ch); xprintf(buf, "#G%s #yhas begun their quest for the ancient dragon orbs!#n\n\r", ch->pcdata->switchname); do_info(ch, buf); ch->class = CLASS_DRACONIAN; } 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); xprintf(buf, "#B%s #Chas chosen the path of the #0Lycanthrope#n\n\r", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "drow")) { ch->class = CLASS_DROW; send_to_char ("Choose your profession, and #PLloth#n will guide you.\n\r", ch); xprintf(buf, "#B%s #Chas been chosen by Lloth to join the Drow horde!#n\n\r", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "cyborg")) { ch->class = CLASS_CYBORG; send_to_char ("Wires and Metal take over your body as you become a Cyborg.\n\r", ch); xprintf(buf, "#B%s #Cis ripped apart and put back together with metal and wires!#n\n\r", ch->pcdata->switchname); do_info(ch, buf); SET_BIT(ch->pcdata->jflags, JFLAG_KNOWS_FORGING); } else if (!str_cmp(arg1, "lich")) { ch->class = CLASS_LICH; send_to_char ("You rise from the dead and wage war on the living.\n\r", ch); xprintf(buf, "#B%s #crises from hell as a #WLICH!#n\n\r", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "shapeshifter")) { ch->class = CLASS_SHAPESHIFTER; send_to_char ("Your skin becomes soft as you feel at one with the world.\n\r", ch); xprintf(buf, "#B%s #Cgains the ability to reform themselves as a shapeshifter!#n\n\r", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "ghoul")) { send_to_char ("#cYou chant the dark rights that will make you into an undead beast...#n\n\r", ch); send_to_char("#RYou feel death overpower you!#n\n\r", ch); ch->hit = 1; ch->class = CLASS_GHOUL; send_to_char ("#cYou are now undead, forever cursed to roam the plane of the living!#n\n\r", ch); xprintf(buf, "#G%s #chas been doomed to roam the lands as an undead apparition for all #Ceternity!#n", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "skyblade")) { send_to_char("#BThe power of the dragon fills your body.#n\n", ch); send_to_char ("#CYour blade begins to glow as the aura fills the room.#n\n", ch); ch->class = CLASS_SKYBLADE; send_to_char ("#BYou are now one of the mighty #CSkyblades#L.#n\n\r", ch); xprintf(buf, "#B%s #Chas been washed in the aura of the dragon and has became one of the skyblades!#n\n\r", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "samurai")) { ch->class = CLASS_SAMURAI; send_to_char ("You decide to lead the solitary life of a samurai\n\r", ch); xprintf(buf, "#B%s #Chas chosen the solitary life of a #Ysamurai!#n\n\r", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "tanarri")) { ch->class = CLASS_TANARRI; send_to_char ("You become a hellspawn and a warrior for EVIL\n\r", ch); xprintf(buf, "#B%s #whas been chosen to be a #RHellspawn Tanarri!#n\n\r", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "undead")) { ch->class = CLASS_UNDEAD_KNIGHT; send_to_char("You mount your steed and ride out of hell!\n\r", ch); xprintf(buf, "#B%s #cis chosen to be one of hells #BUndead Knights#n\n\r", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "angel")) { ch->class = CLASS_ANGEL; send_to_char ("You become a warrior for good and all that is holy.\n\r", ch); xprintf(buf, "#B%s #Chas become a warrior for good as an #WAngel#n\n\r", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "ninja")) { ch->class = CLASS_NINJA; send_to_char ("You have chosen a life in the #0shadows#n, assassinate at will.\n\r", ch); xprintf(buf, "#B%s #0chooses the life of shadows and #bdarkness as a #Yninja#n\n\r", ch->pcdata->switchname); 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); xprintf(buf, "#R%s #rbears their fangs and lusts for #Rblood!#n", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "monk")) { ch->class = CLASS_MONK; ch->level = 3; send_to_char ("You faith in God will guide you, destroy #wEVIL#n.\n\r", ch); xprintf(buf, "#B%s #wlearns the way of the #Bmonk#n\n\r", ch->pcdata->switchname); do_info(ch, buf); } else if (!str_cmp(arg1, "mage") || !str_cmp(arg1, "battlemage")) { ch->class = CLASS_MAGE; ch->level = 3; send_to_char ("You start down the path of power, the #Rarcane#n is your weapon.\n\r", ch); xprintf(buf, "#B%s #0follows a life of arcane #PMagic!#n\n\r", ch->pcdata->switchname); do_info(ch, buf); } else do_classself(ch, ""); return; } void do_reimb(CHAR_DATA * ch, char *argument) { 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, "bones")) { vch->bones += v; } else { send_to_char("Please specify XP or Bones.\n\r", ch); return; } if (vch->mkill < 5) { vch->mkill = 5; do_autosave(ch, ""); } xprintf(arg2, "%s reimbursed %d %s.\n\r", vch->name, v, arg); send_to_char(arg2, ch); xprintf(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; AFFECT2_DATA *paf2; if (IS_NPC(ch)) return; send_to_char("#0-=#7[ Spell Effects ]#0=-\n\r\n\r",ch); if (IS_ITEMAFF(ch, ITEMA_ICESHIELD)) send_to_char("#CIceshield#n.\n\r", ch); if (IS_ITEMAFF(ch, ITEMA_SHOCKSHIELD)) send_to_char("#BLightningshield#n.\n\r", ch); if (IS_ITEMAFF(ch, ITEMA_ACIDSHIELD)) send_to_char("#GAcidshield#n.\n\r", ch); if (IS_ITEMAFF(ch, ITEMA_FIRESHIELD)) send_to_char("#RFireshield#n.\n\r", ch); if (IS_ITEMAFF(ch, ITEMA_CHAOSSHIELD)) send_to_char("#pChaosshield#n.\n\r", ch); //more added by Zarius if (IS_ITEMAFF(ch, ITEMA_SPEED)) send_to_char("#bH#Ba#Cs#Bt#be#n.\n\r", ch); if (IS_ITEMAFF(ch, ITEMA_REGENERATE)) send_to_char("#GEnhanced Regeneration#n.\n\r", ch); if (IS_ITEMAFF(ch, ITEMA_VISION)) send_to_char("#WVision#n.\n\r", ch); if (IS_ITEMAFF(ch, ITEMA_CHAOSHANDS)) send_to_char("#rChaos#Yhands#n.\n\r", ch); if (IS_SET(ch->sohbits, SOH_ACCURACY)) stc("#gM#Gagical #gA#Gccuracy#n\n\r", ch); if (IS_SET(ch->sohbits, SOH_HASTE)) stc("#lH#Laste#n\n\r", ch); if (IS_SET(ch->sohbits, SOH_SLOW)) stc("#oS#ylow#n\n\r", ch); if (IS_SET(ch->sohbits, SOH_REGEN)) stc("#gM#Gage #gR#Gegen#n\n\r", ch); if (IS_SET(ch->sohbits, SOH_MIGHT)) stc("#rM#Ragical #rM#Right#n\n\r", ch); if (IS_SET(ch->sohbits, SOH_SHARDS)) stc("#cM#Ca#7g#Cical #cS#Ch#7a#Crds#n\n\r", ch); if (IS_AFFECTED(ch, AFF_SANCTUARY)) send_to_char("#wSanctuary#n.\n\r", ch); if (IS_AFFECTED(ch, AFF_PROTECT)) send_to_char("#BProtection from evil#n.\n\r", ch); if (IS_AFFECTED(ch, AFF_PROTECT_GOOD)) send_to_char("#BProtection from good#n.\n\r", ch); if (IS_AFFECTED(ch, AFF_FLYING)) send_to_char("#cFly#n\n\r", ch); // more added by Xrakisis if(IS_ITEMAFF(ch,ITEMA_VORPAL)) send_to_char("#RVorpal#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_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); send_to_char("\n\r", ch); if (ch->affected == NULL && ch->affected2 == 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) { xprintf(buf, "#wSpell#R: #w'#B%s#w'#n", skill_table[paf->type].name); send_to_char(buf, ch); if (ch->level >= 0) { xprintf(buf, " #wmodifies #G%s #wby #Y%d #wfor #R%d #whours with bits #P%s#w.#n\n\r", affect_loc_name(paf->location), paf->modifier, paf->duration, affect_bit_name(paf->bitvector)); send_to_char(buf, ch); } } } if (ch->affected2 != NULL) { for (paf2 = ch->affected2; paf2 != NULL; paf2 = paf2->next) { xprintf(buf, "#wSpell#R: #w'#B%s#w'#n", skill_table[paf2->type].name); send_to_char(buf, ch); if (ch->level >= 0) { xprintf(buf, " #wmodifies #G%s #wby #Y%d #wfor #R%d #whours with bits #P%s#w.#n\n\r", affect_loc_name(paf2->location), paf2->modifier, paf2->duration, affect2_bit_name(paf2->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_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"); if (arg & PLR_BRIEF5) strcat(buf, " brief5"); if (arg & PLR_BRIEF6) strcat(buf, " brief6"); if (arg & PLR_BRIEF7) strcat(buf, " brief7"); if (arg & PLR_BRIEF4) strcat(buf, " brief4"); if (arg & PLR_BRIEF3) strcat(buf, " brief3"); if (arg & PLR_BRIEF2) strcat(buf, " brief2"); return (buf[0] != '\0') ? buf + 1 : "none"; } char *plr2_bit_name(int arg) { static char buf[512]; buf[0] = '\0'; if (arg & PLR_AUTOEXIT) strcat(buf, " autoexit"); if (arg & PLR_AUTOLOOT) strcat(buf, " autoloot"); if (arg & PLR_AUTOSAC) strcat(buf, " autosac"); if (arg & PLR_AUTOHEAD) strcat(buf, " autohead"); if (arg & PLR_AUTOSLAB) strcat(buf, " autoslab"); if (arg & PLR_AUTOBONES) strcat(buf, " autobones"); if (arg & PLR_AUTOSPLIT) strcat(buf, " autosplit"); if (arg & PLR_WIPED) strcat(buf, " wiped"); if (arg & PLR_AUTOSIGIL) strcat(buf, " autosigil"); 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_TATTOO) strcat(buf, " Tattoo"); if (arg & ITEMA_RIGHT_SILVER) strcat(buf, " Right Silver"); if (arg & ITEMA_LEFT_SILVER) strcat(buf, " Left Silver"); 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"; } /* * Pstat 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; } xprintf(buf, "Name : %s.\n\r", IS_NPC(victim) ? victim->short_descr : victim->name); send_to_char(buf, ch); xprintf(buf, "Sex : %s. Room : %d. Align : %d. Primal : %d. Bones : %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->bones); send_to_char(buf, ch); xprintf(buf, "Level : %d. Trust : %d. Exp : %ld.", victim->level, victim->trust, victim->exp); send_to_char(buf, ch); if (!IS_NPC(victim)) { xprintf(buf, " PlayerID : %d.\n\r", victim->pcdata->playerid); send_to_char(buf, ch); } else send_to_char("\n\r", ch); xprintf(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); xprintf(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); xprintf(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); xprintf(buf, "Rage : %d.", ch->rage); send_to_char(buf, ch); xprintf(buf, "Fighting : %s. (%d)\n\r", victim->fighting ? victim->fighting->name : "(None)", victim->fighting ? victim->fighting->level : 0); send_to_char(buf, ch); xprintf(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); xprintf(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); xprintf(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)) { xprintf(buf, "Unarmed : %4d.", victim->wpn[0]); send_to_char(buf, ch); xprintf(buf, " Slice : %4d.", victim->wpn[1]); send_to_char(buf, ch); xprintf(buf, " Stab : %4d.", victim->wpn[2]); send_to_char(buf, ch); xprintf(buf, " Slash : %4d.", victim->wpn[3]); send_to_char(buf, ch); xprintf(buf, " Whip : %4d.\n\r", victim->wpn[4]); send_to_char(buf, ch); xprintf(buf, "Claw : %4d.", victim->wpn[5]); send_to_char(buf, ch); xprintf(buf, " Blast : %4d.", victim->wpn[6]); send_to_char(buf, ch); xprintf(buf, " Pound : %4d.", victim->wpn[7]); send_to_char(buf, ch); xprintf(buf, " Crush : %4d.", victim->wpn[8]); send_to_char(buf, ch); xprintf(buf, " Grep : %4d.\n\r", victim->wpn[9]); send_to_char(buf, ch); xprintf(buf, "Bite : %4d.", victim->wpn[10]); send_to_char(buf, ch); xprintf(buf, " Pierce : %4d.", victim->wpn[11]); send_to_char(buf, ch); xprintf(buf, " Suck : %4d.\n\r", victim->wpn[12]); send_to_char(buf, ch); xprintf(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); xprintf(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); xprintf(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); xprintf(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], "pizza", victim->stance[STANCE_SS4], "zarius", victim->stance[STANCE_SS5]); send_to_char(buf, ch); xprintf(buf, "Act : %s\n\r", plr_bit_name(victim->act)); send_to_char(buf, ch); xprintf(buf, "Act2 : %s\n\r", plr2_bit_name(victim->act2)); send_to_char(buf, ch); xprintf(buf, "Extra : %s\n\r", victim->extra <= 0 ? "(None)" : extra_plr_bit_name(victim->extra)); send_to_char(buf, ch); xprintf(buf, "ItemAff : %s\n\r", victim->itemaffect <= 0 ? "(None)" : itemaffect_bit_name(victim-> itemaffect)); send_to_char(buf, ch); xprintf(buf, "Affected by : %s.\n\r", affect_bit_name(victim->affected_by)); send_to_char(buf, ch); return; } } /* agrr_test by blade of E, version 1.31. */ void aggr_test(CHAR_DATA * ch) { char buf[60]; CHAR_DATA *wch; CHAR_DATA *wch_next; CHAR_DATA *victim; if (!IS_NPC(ch) && ch->level < 7 && ch->in_room != NULL && !IS_SET(ch->in_room->room_flags, ROOM_SAFE)) { for (wch = ch->in_room->people; wch != NULL; wch = wch_next) { wch_next = wch->next_in_room; if (global_chaos) { if (IS_NPC(wch)) SET_BIT(wch->act, ACT_AGGRESSIVE); } if (!IS_NPC(wch) || !IS_SET(wch->act, ACT_AGGRESSIVE) || wch->fighting != NULL || IS_AFFECTED(wch, AFF_CHARM) || !IS_AWAKE(wch) || (IS_SET(wch->act, ACT_WIMPY) && IS_AWAKE(ch)) || !can_see(wch, ch) || number_bits(2) == 0) { continue; } victim = wch; if (victim == NULL) continue; xprintf(buf, "%s screams and attacks!\n\r", victim->name); send_to_char(buf, ch); multi_hit(victim, ch, TYPE_UNDEFINED); } } return; }