/*************************************************************************** * 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 <unistd.h> #include <time.h> #include "merc.h" #include "interp.h" ALIAS_DATA *alias_free; void do_bountylist(CHAR_DATA * ch, char *argument) { char buf[MAX_STRING_LENGTH]; DESCRIPTOR_DATA *d; xprintf(buf, " %s\n\r", get_dystopia_banner(" Bountylist ", 60)); send_to_char(buf, ch); stc(" #CName Bounty Status Generation Tier\n\r#n", ch); for (d = descriptor_list; d != NULL; d = d->next) { if (d->character != NULL) { if (!d->connected == CON_PLAYING) continue; if (d->character->level > 6) continue; if (!can_see(ch, d->character)) continue; xprintf(buf, " #G%-15s#n %6d %2d %d %d\n\r", d->character->name, d->character->pcdata->bounty, d->character->race, d->character->generation, d->character->tier); stc(buf, ch); } } xprintf(buf, " %s\n\r", get_dystopia_banner("", 60)); send_to_char(buf, ch); return; } void do_top(CHAR_DATA * ch, char *argument) { char buf[MAX_STRING_LENGTH]; int i; if (IS_NPC(ch)) return; stc("#r==--==#L**#r==--==#L**#r==--==#L**#r==--== #GTOP PKSCORE #r==--==#L**#r==--==#L**#r==--#r==#L**#r==--==#n\n\r\n\r", ch); for (i = 1; i <= MAX_TOP_PLAYERS / 2; i++) { xprintf(buf, " %2d. %-15s %5d %2d. %-15s %5d\n\r", i, top_board[i].name, top_board[i].pkscore, i + MAX_TOP_PLAYERS / 2, top_board[i + MAX_TOP_PLAYERS / 2].name, top_board[i + MAX_TOP_PLAYERS / 2].pkscore); send_to_char(buf, ch); } xprintf(buf, "\n\r #GYou #0:#G %-4d\n\r", ch->race); send_to_char(buf, ch); stc("\n\r#r--==#L**#r==--==#L**#r==--==#L**#r==--==#L**#r==--==#L**#r==--==#L**#r==--==#L**#r==--==#L**#r==--==#L**#r==--#n\n\r", ch); return; } void do_trigger(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char ttime[MAX_INPUT_LENGTH]; OBJ_DATA *obj; int tick; argument = one_argument(argument, arg); one_argument(argument, ttime); if (arg[0] == '\0') { send_to_char("Trigger what ?\n\r", ch); return; } if (!is_number(ttime)) { send_to_char ("What should the timer be set at (a number please) ?\n\r", ch); return; } tick = atoi(ttime); if (tick < 1 || tick > 3) { send_to_char("Between 1 and 3 ticks please.\n\r", ch); return; } if ((obj = get_obj_carry(ch, arg, ch)) == NULL) { send_to_char("You don't have that item.\n\r", ch); return; } if (obj->item_type != ITEM_GRENADE) { send_to_char("That is not a grenade or a bomb.\n\r", ch); return; } if (obj->timer > 0) { send_to_char("It's already ticking, better run.\n\r", ch); return; } obj->timer = tick; send_to_char("You set the timer.\n\r", ch); act("$n fiddles with $p.", ch, obj, NULL, TO_ROOM); WAIT_STATE(ch, 6); return; } void do_dcredits(CHAR_DATA * ch, char *argument) { do_help(ch, "dcredits"); return; } void do_version(CHAR_DATA * ch, char *argument) { send_to_char ("#w*************************************************#n\n\r", ch); send_to_char ("#w* #BThis is MC #R3.0 #BCode#w *#n\n\r", ch); send_to_char ("#w* #0Based on Dystopia 1.2,#YGold, #rSoH #0and #PMC1 & 2#w *#n\n\r", ch); send_to_char ("#w*************************************************#n\n\r", ch); } void do_runeeq(CHAR_DATA * ch, char *argument) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; int vnum = 0; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (arg[0] == '\0') { send_to_char ("Please specify which piece of rune armor you wish to make: \n\rRing Collar Plate Helmet Leggings Boots Gloves Sleeves Cape Belt Bracer Mask.\n\r", ch); return; } if (ch->bones < 15000) { send_to_char("You don't have the 15K bones needed.\n\r", ch); return; } if (!str_cmp(arg, "ring")) vnum = 814; else if (!str_cmp(arg, "collar")) vnum = 815; else if (!str_cmp(arg, "plate")) vnum = 817; else if (!str_cmp(arg, "helmet")) vnum = 818; else if (!str_cmp(arg, "leggings")) vnum = 819; else if (!str_cmp(arg, "boots")) vnum = 820; else if (!str_cmp(arg, "gloves")) vnum = 821; else if (!str_cmp(arg, "sleeves")) vnum = 822; else if (!str_cmp(arg, "cape")) vnum = 823; else if (!str_cmp(arg, "belt")) vnum = 824; else if (!str_cmp(arg, "bracer")) vnum = 816; else if (!str_cmp(arg, "mask")) vnum = 825; else { do_runeeq(ch, ""); return; } if (vnum == 0 || (pObjIndex = get_obj_index(vnum)) == NULL) { send_to_char("Missing object, please inform Jobo .\n\r", ch); return; } if (!IS_IMMORTAL(ch)) ch->bones -= 15000; obj = create_object(pObjIndex, 50); obj->questowner = str_dup(ch->pcdata->switchname); obj->ownerid = ch->pcdata->playerid; obj_to_char(obj, ch); ch->pcdata->rune_count++; act("You transform the 10K qp into $p.", ch, obj, NULL, TO_CHAR); act("$n forms $p out of 10K qp.", ch, obj, NULL, TO_ROOM); return; } void do_upkeep(CHAR_DATA * ch, char *argument) { char buf[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; send_to_char("#RUpkeep list#n\n\r\n\r", ch); if (IS_SET(ch->act, AFF_HIDE)) send_to_char("* You cannot be seen by other players.\n\r", ch); if (IS_SET(ch->act, PLR_WIZINVIS)) send_to_char("* You cannot be seen by other players.\n\r", ch); if (IS_SET(ch->newbits, NEW_DARKNESS)) send_to_char("* You are shrouded in a globe of darkness.\n\r", ch); if (IS_AFFECTED(ch, AFF_SHADOWPLANE)) send_to_char("* You are standing in the shadowplane.\n\r", ch); if (IS_AFFECTED(ch, AFF_ETHEREAL)) send_to_char("* You are in ethereal form.\n\r", ch); if (IS_SET(ch->act, PLR_HOLYLIGHT)) send_to_char("* You have superior vision.\n\r", ch); if (IS_IMMUNE(ch, IMM_SHIELDED)) send_to_char("* You are shielded from scrying eyes.\n\r", ch); if (IS_CLASS(ch, CLASS_GIANT)) { if (ch->pcdata->powers[GIANT_STANDFIRM] == 1) send_to_char ("* You have your feet planted firmly in the ground.\n\r", ch); if (IS_SET(ch->newbits, NEW_CUBEFORM)) send_to_char ("* You feel the strength of the dawn running through you.\n\r", ch); } if (IS_CLASS(ch, CLASS_DROW)) { if (IS_SET(ch->newbits, NEW_DROWHATE)) send_to_char ("* You are filled with hatred towards other creatures.\n\r", ch); } if (IS_CLASS(ch, CLASS_LICH)) { if (IS_IMMUNE(ch, IMM_SHIELD2)) send_to_char ("* You are shielded by the powers of chaos.\n\r", ch); if (ch->tick_timer[TIMER_CALLGOLEMS] < 1) send_to_char("* You can call on your golems.\n\r", ch); if (!IS_SET (ch->pcdata->powers[GOLEMS_SUMMON], HAS_SUMMONED_FIRE)) send_to_char ("* You can summon another #Rfire#n golem.\n\r", ch); if (!IS_SET (ch->pcdata->powers[GOLEMS_SUMMON], HAS_SUMMONED_CLAY)) send_to_char ("* You can summon another #oclay#n golem.\n\r", ch); if (!IS_SET (ch->pcdata->powers[GOLEMS_SUMMON], HAS_SUMMONED_STONE)) send_to_char ("* You can summon another #Lstone#n golem.\n\r", ch); if (!IS_SET (ch->pcdata->powers[GOLEMS_SUMMON], HAS_SUMMONED_IRON)) send_to_char ("* You can summon another #ciron#n golem.\n\r", ch); } if (IS_CLASS(ch, CLASS_NINJA)) { if (IS_VAMPAFF(ch, VAM_CLAWS)) send_to_char("* You have iron wrists attached.\n\r", ch); } if (IS_CLASS(ch, CLASS_TANARRI)) { if (ch->pcdata->powers[TANARRI_FURY_ON] == 1) send_to_char("* You are in a mad fury.\n\r", ch); } if (IS_CLASS(ch, CLASS_DRONE)) { if (ch->pcdata->powers[DRONE_EYE] == DRONE_EYE_OFF) send_to_char("* Your mindseye is off.\n\r", ch); else if (ch->pcdata->powers[DRONE_EYE] == DRONE_EYE_LEVEL) send_to_char ("* Your mindseye reads the level of your victims.\n\r", ch); else if (ch->pcdata->powers[DRONE_EYE] == DRONE_EYE_READAURA) send_to_char ("* Your mindseye reads the aura of your victims.\n\r", ch); else if (ch->pcdata->powers[DRONE_EYE] == DRONE_EYE_CUSTOM) { xprintf(buf, "* Your mindseye : %s\n\r", ch->poweraction); send_to_char(buf, ch); } else send_to_char("* Your mindseye is bugged.\n\r", ch); if (ch->pcdata->powers[DRONE_NIGHTMARE] == 1) send_to_char ("* You have unleashed your nightmarish aura.\n\r", ch); } if (IS_CLASS(ch, CLASS_WEREWOLF)) { if (IS_GAR1(ch, WOLF_COCOON)) send_to_char("* You are engulfed in a cocoon.\n\r", ch); } if (IS_CLASS(ch, CLASS_FAE)) { if (IS_SET(ch->newbits, NEW_CUBEFORM)) send_to_char("* You are a force of nature.\n\r", ch); } if (IS_CLASS(ch, CLASS_DEMON)) { if (IS_POLYAFF(ch, POLY_ZULOFORM)) send_to_char("* You are in demonic form.\n\r", ch); if (IS_VAMPAFF(ch, VAM_CLAWS)) send_to_char ("* You have wicked claws extending from your fingers.\n\r", ch); if (IS_VAMPAFF(ch, VAM_FANGS)) send_to_char ("* You have sharp fangs extending from your gums.\n\r", ch); if (IS_DEMAFF(ch, DEM_TAIL)) send_to_char ("* You have a long tail extending from your back.\n\r", ch); if (IS_DEMAFF(ch, DEM_HOOVES)) send_to_char("* You have hooves instead of feet.\n\r", ch); } if (IS_CLASS(ch, CLASS_VAMPIRE)) { if (IS_SET(ch->extra, EXTRA_FLASH)) send_to_char("* You move with lightning speed.\n\r", ch); if (IS_SET(ch->extra, EXTRA_BAAL)) send_to_char("* You carry the spirit of Baal.\n\r", ch); } return; } /* The costy healer */ void do_healme(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; if (ch->in_room != NULL && ch->in_room->vnum != ROOM_VNUM_ALTAR) { send_to_char ("The healer is located at the altar in midgaard.\n\r", ch); return; } if (ch->fight_timer > 0) { send_to_char("Not with a fighttimer.\n\r", ch); return; } if (ch->bones < 1000) { send_to_char ("The healer demands 1000 bones as payment for his service.\n\r", ch); return; } ch->hit = ch->max_hit; ch->mana = ch->max_mana; ch->move = ch->max_move; ch->loc_hp[0] = 0; ch->loc_hp[1] = 0; ch->loc_hp[2] = 0; ch->loc_hp[3] = 0; ch->loc_hp[4] = 0; ch->loc_hp[5] = 0; ch->loc_hp[6] = 0; send_to_char ("The healer heals your wounds and takes 1000 bones as payment.\n\r", ch); ch->bones -= 1000; WAIT_STATE(ch, 36); return; } /* MUDSTAT command */ void do_mudstat(CHAR_DATA * ch, char *argument) { char buf[MAX_STRING_LENGTH]; int ratio, mspusers, a, b, c; extern char str_boot_time[]; if (IS_NPC(ch)) return; send_to_char ("#0--==#B**#0==--==#B**#0==--==#B**#0==--==#B**#0==--==#B**#0==--==#B**#0==--==#B**#0==--==#B**#0==--==#B**#0==--==#B**#0==--==--#n\n\r\n\r", ch); if (global_exp) { send_to_char("#R*** #0Double Experience is #GON!#n\n\r", ch); if (pulse_exp > 0) { xprintf(buf, " #Y%d #0minutes remaining#n\n\r\n\r", pulse_exp); send_to_char(buf, ch); } } else { send_to_char("#R*** #0Double Experience is #ROFF#n\n\r", ch); xprintf(buf, "#0--- #wCost for Exp still: #Y%d#n\n\r\n\r", exp_cost); send_to_char(buf, ch); } if (global_qp) { send_to_char("#R*** #0Double Bones is #GON!#n\n\r\n\r#n", ch); xprintf(buf, " #Y%d #0minutes remaining#n\n\r\n\r", pulse_qp); send_to_char(buf, ch); } else { send_to_char("#R*** #0Double Bones is #ROFF#n\n\r\n\r#n", ch); xprintf(buf, "#0--- #wCost for bones still: #Y%d#n\n\r\n\r", bones_cost); send_to_char(buf, ch); } if (global_cp) { send_to_char ("#R*** #0Double Class Points is #GON!#n\n\r\n\r#n", ch); if (pulse_cp > 0) { xprintf(buf, " #Y%d #0minutes remaining#n\n\r\n\r", pulse_cp); send_to_char(buf, ch); } } else { send_to_char("#R*** #0Double Class Points is #ROFF#n\n\r#n", ch); xprintf(buf, "#0--- #wCost for Double CP still: #Y%d#n\n\r\n\r", cp_cost); send_to_char(buf, ch); } if (global_dt) { send_to_char("#R*** #0SUPER TRAINING is #GON!#n\n\r#n", ch); if (pulse_dt > 0) { xprintf(buf, " #Y%d #0minutes remaining#n\n\r\n\r", pulse_dt); send_to_char(buf, ch); } } else { send_to_char("#R*** #0SUPER TRAINING is #ROFF#n\n\r#n", ch); xprintf(buf, "#0--- #wCost for Super Training still: #Y%d#n\n\r\n\r", dt_cost); send_to_char(buf, ch); } if (global_chaos) send_to_char ("#s*#s*#s* #GWorld is in #sC#sh#sa#so#ss#n\n\r\n\r#n", ch); else send_to_char("\n\r#n", ch); if (ragnarok) send_to_char ("#CRAGNAROK MODE!!!!!!!#n Everyone can kill everyone (HELP RAGNAROK)\n\r\n\r", ch); else { xprintf(buf, "#RRagnarok is still #Y%d #Rbones from happening.#n\n\r\n\r", ragnarok_cost); send_to_char(buf, ch); } xprintf(buf, "#0Number of players connected since last copyover/restart :#C %d\n\r#n", players_logged); send_to_char(buf, ch); xprintf(buf, "#0Number of players beheaded since last copyover/restart :#C %d\n\r#n", players_decap); send_to_char(buf, ch); xprintf(buf, "#0Amount of generation stolen since last copyover/restart :#C %d\n\r\n\r#n", players_gstolen); send_to_char(buf, ch); xprintf(buf, "%s was last (re)started at : %s\rThe system time is currently : %s\n\r", MUDNAME, str_boot_time, (char *) ctime(¤t_time)); send_to_char(buf, ch); xprintf(buf, "Total Players Created : %d players\n\r", top_playerid); send_to_char(buf, ch); a = mudinfo[MUDINFO_UPDATED] / 120; b = a / 24; c = a - b * 24; xprintf(buf, "Mudinfo : Days running : %d days and %d hours\n\r", b, c); send_to_char(buf, ch); if (mudinfo[MUDINFO_MCCP_USERS] + mudinfo[MUDINFO_OTHER_USERS] == 0) ratio = 0; else ratio = (100 * mudinfo[MUDINFO_MCCP_USERS] / (mudinfo[MUDINFO_MCCP_USERS] + mudinfo[MUDINFO_OTHER_USERS])); xprintf(buf, "Players : Mccp Users : %d %%\n\r", ratio); send_to_char(buf, ch); if (mudinfo[MUDINFO_MCCP_USERS] + mudinfo[MUDINFO_OTHER_USERS] == 0) mspusers = 0; else mspusers = (100 * mudinfo[MUDINFO_MSP_USERS] / (mudinfo[MUDINFO_MCCP_USERS] + mudinfo[MUDINFO_OTHER_USERS])); xprintf(buf, "Players : MSP Users : %d %%\n\r", mspusers); send_to_char(buf, ch); /* * a : Amount of kbit data send totally. * b : Amount of kbit data send each 10 seconds * c : The fractional part */ a = mudinfo[MUDINFO_MBYTE] * 1024 + mudinfo[MUDINFO_BYTE] / 1024; b = a / (mudinfo[MUDINFO_UPDATED] * 3); c = b / 10; c = c * 10; c = b - c; xprintf(buf, "Datatransfer : Average Rate : %d.%d kb/sec\n\r", b / 10, c); send_to_char(buf, ch); b = mudinfo[MUDINFO_DATA_PEAK] / (3 * 1024); c = b / 10; c = c * 10; c = b - c; xprintf(buf, "Datatransfer : Peak Rate : %d.%d kb/sec\n\r", b / 10, c); send_to_char(buf, ch); xprintf(buf, "Datatransfer : This Week : %d MB\n\r", mudinfo[MUDINFO_MBYTE]); send_to_char(buf, ch); xprintf(buf, "Datatransfer : This Boot : %d MB\n\r", mudinfo[MUDINFO_MBYTE_S]); send_to_char(buf, ch); return; send_to_char ("#0--==#B**#0==--==#B**#0==--==#B**#0==--==#B**#0==--==#B**#0==--==#B**#0==--==#B**#0==--==#B**#0==--==#B**#0==--==#B**#0==--==--#n\n\r\n\r", ch); return; } void do_pkvision(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; if (UMIN(ch->race, (ch->pkill - ch->pdeath)) < 45) { send_to_char("huh?\n\r", ch); return; } if (has_timer(ch)) return; if (!IS_SET(ch->itemaffect, ITEMA_VISION)) { SET_BIT(ch->itemaffect, ITEMA_VISION); SET_BIT(ch->newbits, NEW_VISION); // so we know to remove it again. send_to_char ("Your eyes flicker, and everything is clear.\n\r", ch); } else send_to_char("You already have superior sight.\n\r", ch); return; } void do_pkscry(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MAX_STRING_LENGTH]; ROOM_INDEX_DATA *chroom; ROOM_INDEX_DATA *victimroom; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (UMIN(ch->race, (ch->pkill - ch->pdeath)) < 10) { send_to_char("huh?\n\r", ch); return; } if (arg[0] == '\0') { send_to_char("Scry on whom?\n\r", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } if (IS_NPC(victim)) { send_to_char("Not on mobs.\n\r", ch); return; } if (victim->in_room) { if (has_area_affect (victim->in_room->area, AREA_AFF_BADMOON, 0)) { send_to_char ("Some powerful magic prevent your scrying attempt.\n\r", ch); return; } } if (victim->trust > 6) { send_to_char("SPYING ON THE GODS!?!?!?!\n\r", ch); send_to_char("Someone is scrying you.\n\r", victim); return; } chroom = ch->in_room; victimroom = victim->in_room; char_from_room(ch); char_to_room(ch, victimroom); if (IS_AFFECTED(ch, AFF_SHADOWPLANE) && (!IS_AFFECTED(victim, AFF_SHADOWPLANE))) { REMOVE_BIT(ch->affected_by, AFF_SHADOWPLANE); do_look(ch, "scry"); SET_BIT(ch->affected_by, AFF_SHADOWPLANE); } else if (!IS_AFFECTED(ch, AFF_SHADOWPLANE) && (IS_AFFECTED(victim, AFF_SHADOWPLANE))) { SET_BIT(ch->affected_by, AFF_SHADOWPLANE); do_look(ch, "scry"); REMOVE_BIT(ch->affected_by, AFF_SHADOWPLANE); } else do_look(ch, "scry"); char_from_room(ch); char_to_room(ch, chroom); if (ch->level < 7) ch->fight_timer += 3; if (victim->race > 14) send_to_char("You feel a slight tingle.\n\r", victim); return; } void do_pkobjscry(CHAR_DATA * ch, char *argument) { CHAR_DATA *gch; CHAR_DATA *victim; OBJ_DATA *obj; ROOM_INDEX_DATA *location; ROOM_INDEX_DATA *from; DESCRIPTOR_DATA *tmp; char buf[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; bool afk = FALSE; one_argument(argument, arg); if (IS_NPC(ch)) return; if (UMIN(ch->race, (ch->pkill - ch->pdeath)) < 35) { send_to_char("Huh?\n\r", ch); return; } if ((obj = get_obj_world(ch, arg)) == NULL) { send_to_char ("Nothing like that in hell, earth, or heaven.\n\r", ch); return; } if (IS_OBJ_STAT(obj, ITEM_NOLOCATE)) { send_to_char ("A powerful force prevents the scrying of this object.\n\r", ch); return; } if ((gch = obj->carried_by) != NULL) { if (gch->in_room == NULL) { send_to_char ("All you see is a chaotic mass of colors, nothing seems right.\n\r", ch); return; } if (has_area_affect(gch->in_room->area, AREA_AFF_BADMOON, 0)) { send_to_char ("Some powerful magic prevent your scrying attempt.\n\r", ch); return; } tmp = gch->desc; gch->desc = ch->desc; xprintf(buf, "A pair of eyes grows on %s's %s.\n\rThe eyes blink once, then disappear.\n\r", gch->name, obj->short_descr); for (victim = gch->in_room->people; victim != NULL; victim = victim->next_in_room) { if (victim == gch) continue; // the victim cannot see this. send_to_char(buf, victim); } if (IS_SET(gch->extra, EXTRA_AFK)) { afk = TRUE; REMOVE_BIT(gch->extra, EXTRA_AFK); } do_look(gch, ""); gch->desc = tmp; if (afk) SET_BIT(gch->extra, EXTRA_AFK); return; } else if ((location = obj->in_room) != NULL) { if (has_area_affect(location->area, AREA_AFF_BADMOON, 0)) { send_to_char ("Some powerful magic prevent your scrying attempt.\n\r", ch); return; } xprintf(buf, "A pair of eyes grows on %s.\n\rThe eyes blink once, then disappear.\n\r", obj->short_descr); for (victim = location->people; victim != NULL; victim = victim->next_in_room) { if (victim == ch) continue; // the player is seeing through the item, and will not see the eyes even if he is in the room. send_to_char(buf, victim); } obj_from_room(obj); from = ch->in_room; char_from_room(ch); char_to_room(ch, location); do_look(ch, ""); char_from_room(ch); char_to_room(ch, from); obj_to_room(obj, location); return; } else // inside something. { send_to_char ("It's pitch black, wonder where this item is.\n\r", ch); return; } } void do_pkhunter(CHAR_DATA * ch, char *argument) { MOB_INDEX_DATA *pMobIndex; CHAR_DATA *mob; MOB_TRIGGER *mProg; if (IS_NPC(ch)) return; if (UMIN(ch->race, (ch->pkill - ch->pdeath)) < 60) { send_to_char("Huh?\n\r", ch); return; } if (!TIME_UP(ch, TIMER_HUNTER)) { send_to_char ("You can only summon the hunter once every 18 hours.\n\r", ch); return; } if ((pMobIndex = get_mob_index(MOB_VNUM_HUNTER)) == NULL) { send_to_char("Bug, please report this to an immortal.\n\r", ch); return; } mob = create_mobile(pMobIndex); if (trigger_free == NULL) { mProg = alloc_perm(sizeof(*mProg)); } else { mProg = trigger_free; trigger_free = trigger_free->next; } mProg->type = MTRIG_HUNTER; mProg->vnum = 0; mProg->keywords = str_dup("&tracking*"); mProg->roomOutput = str_dup("Follow me master, I have found the trail."); mProg->chOutput = str_dup("I cannot find the trail, master."); mProg->next = mob->triggers; mob->triggers = mProg; mob->decay_pulse = number_range(6, 8); char_to_room(mob, ch->in_room); act("You call upon the dark hunter, and it appears in a puff of smoke.", ch, NULL, NULL, TO_CHAR); act("$n calls upon the dark hunter, and it appears in a puff of smoke.", ch, NULL, NULL, TO_ROOM); do_follow(ch, "hunter"); SET_TIMER(ch, TIMER_HUNTER, 18); return; } void do_pkportal(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MAX_STRING_LENGTH]; ROOM_INDEX_DATA *location; one_argument(argument, arg); if (IS_NPC(ch)) return; if (UMIN(ch->race, (ch->pkill - ch->pdeath)) < 50) { send_to_char("Huh?\n\r", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { send_to_char("Walk the silverpath to whom?\n\r", ch); return; } if (IS_NPC(victim)) { send_to_char("Not on mobs.\n\r", ch); return; } if (victim->fight_timer == 0) { send_to_char("They are not engaged in pk.\n\r", ch); return; } if (IS_SET(victim->in_room->room_flags, ROOM_ASTRAL)) { stc("You can't find it's room.\n\r", ch); return; } if (IS_SET(ch->in_room->room_flags, ROOM_ASTRAL)) { stc("Your room is not connected to the astral plane.\n\r", ch); return; } location = victim->in_room; act("You step onto the silverpath.", ch, NULL, NULL, TO_CHAR); act("$n steps into thin air.", ch, NULL, NULL, TO_ROOM); char_from_room(ch); char_to_room(ch, location); do_look(ch, "auto"); act("You leave the silverpath.", ch, NULL, NULL, TO_CHAR); act("$n steps out of thin air.", ch, NULL, NULL, TO_ROOM); WAIT_STATE(ch, 6); return; } void do_pkaura(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (UMIN(ch->race, (ch->pkill - ch->pdeath)) < 20) { send_to_char("huh?\n\r", ch); return; } if (arg[0] == '\0') { send_to_char("Read the aura of who?\n\r", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } if (IS_NPC(victim)) { send_to_char("Not on mobs.\n\r", ch); return; } if (victim->in_room) { if (has_area_affect (victim->in_room->area, AREA_AFF_BADMOON, 0)) { send_to_char ("Some powerful magic prevent your aura scrying attempt.\n\r", ch); return; } } if (victim->trust > 6) { send_to_char("SPYING ON THE GODS!?!?!?!\n\r", ch); send_to_char("Someone is trying to read your aura.\n\r", victim); return; } 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); if (ch->trust < 7) send_to_char("You are being examined.\n\r", victim); xprintf(buf, "Hitroll:%d, Damroll:%d, AC:%d.\n\r", char_hitroll(victim), char_damroll(victim), char_ac(victim)); send_to_char(buf, ch); xprintf(buf, "Generation:%d\n\r", victim->generation); send_to_char(buf, ch); if (ch->level < 7) ch->fight_timer += 3; return; } void do_pkheal(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; if (UMIN(ch->race, (ch->pkill - ch->pdeath)) < 5) { send_to_char("huh?\n\r", ch); return; } if (ch->fight_timer > 0) { send_to_char("You cannot focus your mind.\n\r", ch); return; } ch->hit += UMIN(ch->race, 25); if (ch->hit > ch->max_hit) ch->hit = ch->max_hit; send_to_char ("You release your control and let harmony and peace flow over you.\n\r", ch); WAIT_STATE(ch, 12); return; } void do_pkpowers(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; if (UMIN(ch->race, (ch->pkill - ch->pdeath)) < 5) send_to_char("You suck, get lost.\n\r", ch); if (UMIN(ch->race, (ch->pkill - ch->pdeath)) > 4) send_to_char ("* Sanctum - Concentrate on your inner peace.\n\r", ch); if (UMIN(ch->race, (ch->pkill - ch->pdeath)) > 9) send_to_char ("* Eaglesight - Scry on players even through shield.\n\r", ch); if (UMIN(ch->race, (ch->pkill - ch->pdeath)) > 14) send_to_char("* You have enhanced awereness.\n\r", ch); if (UMIN(ch->race, (ch->pkill - ch->pdeath)) > 19) send_to_char("* Lifesense - Global readaura.\n\r", ch); if (UMIN(ch->race, (ch->pkill - ch->pdeath)) > 24) send_to_char("* You have enhanced fighting abilities.\n\r", ch); if (UMIN(ch->race, (ch->pkill - ch->pdeath)) > 29) send_to_char ("* Calltoarms - Call for help during battle.\n\r", ch); if (UMIN(ch->race, (ch->pkill - ch->pdeath)) > 34) send_to_char ("* Objectscry - See through the 'eyes' of an item.\n\r", ch); if (UMIN(ch->race, (ch->pkill - ch->pdeath)) > 39) send_to_char ("* Ironmind - Prepare yourself mentally for battle.\n\r", ch); if (UMIN(ch->race, (ch->pkill - ch->pdeath)) > 44) send_to_char ("* Crystalsight - Gain superior sight for a short while.\n\r", ch); if (UMIN(ch->race, (ch->pkill - ch->pdeath)) > 49) send_to_char ("* Silverpath - Low lag portal to players with a fighttimer.\n\r", ch); if (UMIN(ch->race, (ch->pkill - ch->pdeath)) > 59) send_to_char ("* Darkhunter - The ability to summon The Dark Hunter.\n\r", ch); return; } /* Mastery command to gain mastery items */ void do_mastery(CHAR_DATA * ch, char *argument) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; int vnum; char buf[MAX_INPUT_LENGTH]; if (IS_NPC(ch)) return; if (IS_SET(ch->newbits, NEW_MASTERY) && ch->level < 6) { send_to_char ("You've already gotten your mastery. If you lost it, tough luck!\n\r", ch); return; } if (ch->wpn[0] < 200 || ch->wpn[1] < 200 || ch->wpn[2] < 200 || ch->wpn[3] < 200 || ch->wpn[4] < 200 || ch->wpn[5] < 200 || ch->wpn[6] < 200 || ch->wpn[7] < 200 || ch->wpn[8] < 200 || ch->wpn[9] < 200 || ch->wpn[10] < 200 || ch->wpn[11] < 200 || ch->wpn[12] < 200) { send_to_char ("Maybe you should grandmaster your weapons first.\n\r", ch); return; } if (ch->spl[0] < 200 || ch->spl[1] < 200 || ch->spl[2] < 200 || ch->spl[3] < 200 || ch->spl[4] < 200) { send_to_char ("Maybe you should be grand sorcerer in all spell colors first.\n\r", ch); return; } if (ch->stance[1] < 200 || ch->stance[2] < 200 || ch->stance[3] < 200 || ch->stance[4] < 200 || ch->stance[5] < 200 || ch->stance[6] < 200 || ch->stance[7] < 200 || ch->stance[8] < 200 || ch->stance[9] < 200 || ch->stance[10] < 200) { send_to_char ("Maybe you should grandmaster your stances first.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_MAGE)) vnum = 33014; else if (IS_CLASS(ch, CLASS_WEREWOLF)) vnum = 33112; else if (IS_CLASS(ch, CLASS_NINJA)) vnum = 33094; else if (IS_CLASS(ch, CLASS_MONK)) vnum = 33032; else if (IS_CLASS(ch, CLASS_DROW)) vnum = 33074; else if (IS_CLASS(ch, CLASS_DEMON)) vnum = 33134; else if (IS_CLASS(ch, CLASS_VAMPIRE)) vnum = 33054; else if (IS_CLASS(ch, CLASS_CYBORG)) vnum = 33153; else if (IS_CLASS(ch, CLASS_SAMURAI)) vnum = 33177; else if (IS_CLASS(ch, CLASS_UNDEAD_KNIGHT)) vnum = 29989; else if (IS_CLASS(ch, CLASS_SHAPESHIFTER)) vnum = 33174; else if (IS_CLASS(ch, CLASS_ANGEL)) vnum = 33193; else if (IS_CLASS(ch, CLASS_TANARRI)) vnum = 33213; else if (IS_CLASS(ch, CLASS_LICH)) vnum = 33233; else if (IS_CLASS(ch, CLASS_SKYBLADE)) vnum = 33326; else if (IS_CLASS(ch, CLASS_PRIEST)) vnum = 33415; else if (IS_CLASS(ch, CLASS_SHADOW)) vnum = 33369; else if (IS_CLASS(ch, CLASS_HOBBIT)) vnum = 33255; else if (IS_CLASS(ch, CLASS_FAE)) vnum = 33261; else if (IS_CLASS(ch, CLASS_GIANT)) vnum = 33293; else if (IS_CLASS(ch, CLASS_DRONE)) vnum = 33313; else if (IS_CLASS(ch, CLASS_GHOUL)) vnum = 6216; else if (IS_CLASS(ch, CLASS_DRACONIAN)) vnum = 33341; else if (IS_CLASS(ch, CLASS_THIEF)) vnum = 33356; else if (IS_CLASS(ch, CLASS_JEDI)) vnum = 33418; else if (IS_CLASS(ch, CLASS_BLADE_MASTER)) vnum = 401; else if (IS_CLASS(ch, CLASS_ELEMENTAL)) vnum = 400; else if (IS_CLASS(ch, CLASS_DRAGON)) vnum = 404; else if (IS_CLASS(ch, CLASS_PALADIN)) vnum = 405; else if (IS_CLASS(ch, CLASS_SHINOBI)) vnum = 406; else { send_to_char ("Your class mastery is not done yet, please notify Zarius that you want him to make it.\n\r", ch); return; } if ((pObjIndex = get_obj_index(vnum)) == NULL) { send_to_char("Missing object, inform Jobo.\n\r", ch); return; } obj = create_object(pObjIndex, 50); obj_to_char(obj, ch); obj->questowner = str_dup(ch->pcdata->switchname); obj->ownerid = ch->pcdata->playerid; xprintf(buf, "%s has achieved mastery.", ch->name); do_info(ch, buf); SET_BIT(ch->newbits, NEW_MASTERY); return; } /* superstances are in :-) */ void do_setstance(CHAR_DATA * ch, char *argument) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_INPUT_LENGTH]; int currentstance; char buf[MAX_STRING_LENGTH]; int cost = 0; int count = 0; int max_supreme = 0; int max_greater = 0; int max_lesser = 0; int min_cost = 0; int max_cost = 0; int current_supreme = 0; int current_greater = 0; int current_lesser = 0; argument = one_argument(argument, arg1); argument = one_argument(argument, arg2); strcpy(arg3, argument); if (ch->stance[STANCE_COUGAR] < 200 || ch->stance[STANCE_GRIZZLY] < 200 || ch->stance[STANCE_WOLVERINE] < 200 || ch->stance[STANCE_HAWK] < 200 || ch->stance[STANCE_BADGER] < 200) { send_to_char("You need to max your normal stances first.\n\r", ch); return; } if (ch->stance[19] == -1) { max_lesser = 3; currentstance = 19; min_cost = 40; max_cost = 240; } else if (ch->stance[20] == -1) { max_lesser = 4; max_greater = 1; currentstance = 20; min_cost = 80; max_cost = 280; } else if (ch->stance[21] == -1) { max_lesser = 4; max_greater = 2; currentstance = 21; min_cost = 120; max_cost = 300; } else if (ch->stance[22] == -1) { currentstance = 22; max_lesser = 4; max_greater = 4; max_supreme = 1; min_cost = 160; max_cost = 360; } else if (ch->stance[23] == -1) { currentstance = 23; max_lesser = 4; max_greater = 4; max_supreme = 2; min_cost = 200; max_cost = 400; } else if (!str_cmp(arg1, "clear") || !str_cmp(arg1, "show")) { currentstance = 23; max_lesser = 4; max_greater = 4; max_supreme = 2; min_cost = 200; max_cost = 380; } else { send_to_char ("You already have all your superstances, if you want to clear ALL your superstances, you can\n\r", ch); send_to_char ("type 'setstance clear all stances'. WARNING, this will remove ALL your superstances!\n\r", ch); return; } if (currentstance > 19 && ch->stance[currentstance - 7] < 200) { send_to_char ("Maybe you should max your current superstance first.\n\r", ch); return; } if (IS_SET(ch->stance[18], STANCEPOWER_DODGE)) { count++; cost += count * 20; } if (IS_SET(ch->stance[18], STANCEPOWER_PARRY)) { count++; cost += count * 20; } if (IS_SET(ch->stance[18], STANCEPOWER_SPEED)) { count++; cost += count * 20; } if (IS_SET(ch->stance[18], STANCEPOWER_BYPASS)) { count++; cost += count * 20; } if (IS_SET(ch->stance[18], STANCEPOWER_DAMAGE_1)) { current_lesser++; cost += 20; } if (IS_SET(ch->stance[18], STANCEPOWER_DAMAGE_2)) { current_greater++; cost += 40; } if (IS_SET(ch->stance[18], STANCEPOWER_DAMAGE_3)) { current_supreme++; cost += 60; } if (IS_SET(ch->stance[18], STANCEPOWER_RESIST_1)) { current_lesser++; cost += 20; } if (IS_SET(ch->stance[18], STANCEPOWER_RESIST_2)) { current_greater++; cost += 40; } if (IS_SET(ch->stance[18], STANCEPOWER_RESIST_3)) { current_supreme++; cost += 60; } if (IS_SET(ch->stance[18], STANCEPOWER_DAMCAP_1)) { current_lesser++; cost += 20; } if (IS_SET(ch->stance[18], STANCEPOWER_DAMCAP_2)) { current_greater++; cost += 40; } if (IS_SET(ch->stance[18], STANCEPOWER_DAMCAP_3)) { current_supreme++; cost += 60; } if (IS_SET(ch->stance[18], STANCEPOWER_REV_DAMCAP_1)) { current_lesser++; cost += 20; } if (IS_SET(ch->stance[18], STANCEPOWER_REV_DAMCAP_2)) { current_greater++; cost += 40; } if (IS_SET(ch->stance[18], STANCEPOWER_REV_DAMCAP_3)) { current_supreme++; cost += 60; } if (arg1[0] == '\0') { send_to_char (" #r*****************************************************************************************#n\n\r", ch); send_to_char (" #r*#C Superstance Editor v0.3 by Jobo #r*#n\n\r", ch); send_to_char (" #r*****************************************************************************************#n\n\r", ch); send_to_char (" #r*#n [DAMCAP] Increase your damcap. #r*#n\n\r", ch); send_to_char (" #r*#n [REV_DC] Lower your opponents damcap. #r*#n\n\r", ch); send_to_char (" #r*#n [DAMAGE] Increase your damage. #r*#n\n\r", ch); send_to_char (" #r*#n [RESIST] Resist more damage. #r*#n\n\r", ch); send_to_char (" #r*---------------------------------------------------------------------------------------*#n\n\r", ch); send_to_char (" #r*#n The above powers comes in lesser, greater and supreme versions. #r*#n\n\r", ch); send_to_char (" #r*#n The powers each cost 20/40/60 million exp, depending on level. #r*#n\n\r", ch); if (currentstance == 19) send_to_char (" #r*#C You may choose up to three lesser powers. #r*#n\n\r", ch); else if (currentstance == 20) send_to_char (" #r*#C You may choose up to one greater power. #r*#n\n\r", ch); else if (currentstance == 21) send_to_char (" #r*#C You may choose up to two greater powers. #r*#n\n\r", ch); else if (currentstance == 22) send_to_char (" #r*#C You may choose up to one supreme power. #r*#n\n\r", ch); else if (currentstance == 23) send_to_char (" #r*#C You may choose up to two supreme powers. #r*#n\n\r", ch); if (currentstance > 19) send_to_char (" #r*#n There are no maximum on powers of lower level than that. #r*#n\n\r", ch); send_to_char (" #r*---------------------------------------------------------------------------------------*#n\n\r", ch); send_to_char (" #r*#n Currently you have chosen the following for your next superstance : #r*#n\n\r", ch); if (ch->stance[18] == 0) send_to_char (" #r*#n None. #r*#n\n\r", ch); else { if (IS_SET(ch->stance[18], STANCEPOWER_DODGE)) send_to_char (" #r*#n Advanced dodge. #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_PARRY)) send_to_char (" #r*#n Advanced parry. #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_SPEED)) send_to_char (" #r*#n Superior Speed. #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_BYPASS)) send_to_char (" #r*#n Bypass Parry and Dodge. #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_DAMAGE_1)) send_to_char (" #r*#n Increased damage (lesser) #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_DAMAGE_2)) send_to_char (" #r*#n Increased damage (greater) #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_DAMAGE_3)) send_to_char (" #r*#n Increased damage (supreme) #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_RESIST_1)) send_to_char (" #r*#n Increased damage resistance (lesser) #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_RESIST_2)) send_to_char (" #r*#n Increased damage resistance (greater) #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_RESIST_3)) send_to_char (" #r*#n Increased damage resistance (supreme) #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_DAMCAP_1)) send_to_char (" #r*#n Increased damcap (lesser) #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_DAMCAP_2)) send_to_char (" #r*#n Increased damcap (greater) #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_DAMCAP_3)) send_to_char (" #r*#n Increased damcap (supreme) #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_REV_DAMCAP_1)) send_to_char (" #r*#n Damcap reduction for opponent (lesser) #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_REV_DAMCAP_2)) send_to_char (" #r*#n Damcap reduction for opponent (greater) #r*#n\n\r", ch); if (IS_SET(ch->stance[18], STANCEPOWER_REV_DAMCAP_3)) send_to_char (" #r*#n Damcap reduction for opponent (supreme) #r*#n\n\r", ch); } send_to_char (" #r*---------------------------------------------------------------------------------------*#n\n\r", ch); send_to_char (" #r*#n You may also select any of these powers for the cost of 20 mill exp for the first, #r*#n\n\r", ch); send_to_char (" #r*#n 40 for the next, 60 for the third, and finally 80 for the last. #r*#n\n\r", ch); send_to_char (" #r*#n [SPEED] Increase your fighting speed. #r*#n\n\r", ch); send_to_char (" #r*#n [PARRY] Increase your parrying ability. #r*#n\n\r", ch); send_to_char (" #r*#n [DODGE] Increase your dodging ability. #r*#n\n\r", ch); send_to_char (" #r*#n [BYPASS] Bypass the two above powers. #r*#n\n\r", ch); send_to_char (" #r*---------------------------------------------------------------------------------------*#n\n\r", ch); send_to_char (" #r*#n Type \"setstance <power> <lesser/greater/supreme>\" #r*#n\n\r", ch); send_to_char (" #r*#n [the latter only for the four top powers] to set or remove a certain power #r*#n\n\r", ch); send_to_char (" #r*#n to your stance. then type \"setstance done\" when your done. #r*#n\n\r", ch); send_to_char (" #r*#n You can also type \"setstance clear\" to clear your current settings. #r*#n\n\r", ch); send_to_char (" #r*---------------------------------------------------------------------------------------*#n\n\r", ch); send_to_char (" #r*#n You can also type \"setstance show <ss1/ss2/etc>\" #r*#n\n\r", ch); send_to_char (" #r*#n to show the settings on one of your stances. #r*#n\n\r", ch); send_to_char (" #r*---------------------------------------------------------------------------------------*#n\n\r", ch); xprintf(buf, " #r*#n Cost of current stance : %-3d million exp. #r*#n\n\r", cost); send_to_char(buf, ch); xprintf(buf, " #r*#n Minimum/Maximum Cost of Current stance : %-3d/%-3d million exp. #r*#n\n\r", min_cost, max_cost); send_to_char(buf, ch); send_to_char (" #r*****************************************************************************************#n\n\r", ch); return; } else if (!str_cmp(arg1, "show")) { if (!str_cmp(arg2, "ss1")) currentstance = 19; else if (!str_cmp(arg2, "ss2")) currentstance = 20; else if (!str_cmp(arg2, "ss3")) currentstance = 21; else if (!str_cmp(arg2, "pizza")) currentstance = 22; else if (!str_cmp(arg2, "zarius")) currentstance = 23; else { send_to_char("No stance by that name.\n\r", ch); return; } if (ch->stance[currentstance] == -1) { send_to_char ("No, you don't have that stance yet, SILLY!\n\r", ch); return; } send_to_char("This stance has the following powers :\n\r", ch); if (IS_SET(ch->stance[currentstance], STANCEPOWER_DODGE)) send_to_char("Advanced Dodge.\n\r", ch); if (IS_SET(ch->stance[currentstance], STANCEPOWER_PARRY)) send_to_char("Advanced Parry.\n\r", ch); if (IS_SET(ch->stance[currentstance], STANCEPOWER_SPEED)) send_to_char("Superior Speed.\n\r", ch); if (IS_SET(ch->stance[currentstance], STANCEPOWER_BYPASS)) send_to_char("The Bypassing ability.\n\r", ch); if (IS_SET(ch->stance[currentstance], STANCEPOWER_DAMAGE_1)) send_to_char("Lesser Damage.\n\r", ch); if (IS_SET(ch->stance[currentstance], STANCEPOWER_DAMAGE_2)) send_to_char("Greater Damage.\n\r", ch); if (IS_SET(ch->stance[currentstance], STANCEPOWER_DAMAGE_3)) send_to_char("Superior Damage.\n\r", ch); if (IS_SET(ch->stance[currentstance], STANCEPOWER_RESIST_1)) send_to_char("Lesser Resistance.\n\r", ch); if (IS_SET(ch->stance[currentstance], STANCEPOWER_RESIST_2)) send_to_char("Greater Resistance.\n\r", ch); if (IS_SET(ch->stance[currentstance], STANCEPOWER_RESIST_3)) send_to_char("Supreme Resistance.\n\r", ch); if (IS_SET(ch->stance[currentstance], STANCEPOWER_DAMCAP_1)) send_to_char("Lesser Damcap.\n\r", ch); if (IS_SET(ch->stance[currentstance], STANCEPOWER_DAMCAP_2)) send_to_char("Greater Damcap.\n\r", ch); if (IS_SET(ch->stance[currentstance], STANCEPOWER_DAMCAP_3)) send_to_char("Supreme Damcap.\n\r", ch); if (IS_SET (ch->stance[currentstance], STANCEPOWER_REV_DAMCAP_1)) send_to_char("Lesser reverse Damcap.\n\r", ch); if (IS_SET (ch->stance[currentstance], STANCEPOWER_REV_DAMCAP_2)) send_to_char("Greater reverse Damcap.\n\r", ch); if (IS_SET (ch->stance[currentstance], STANCEPOWER_REV_DAMCAP_3)) send_to_char("Supreme reverse Damcap.\n\r", ch); return; } else if (!str_cmp(arg1, "done")) { if (ch->exp < cost * 1000000) { send_to_char ("You don't have enough exp to buy this stance.\n\r", ch); return; } if (cost < min_cost) { xprintf(buf, "You need to spend at least %d million exp on this stance.\n\r", min_cost); send_to_char(buf, ch); return; } if (cost > max_cost) { xprintf(buf, "You can only spend %d million exp on this stance.\n\r", max_cost); send_to_char(buf, ch); return; } ch->stance[currentstance] = ch->stance[18]; ch->stance[18] = 0; ch->exp -= cost * 1000000; switch (currentstance) { default: break; case 19: SET_BIT(ch->pcdata->jflags, JFLAG_SS1); break; case 20: SET_BIT(ch->pcdata->jflags, JFLAG_SS2); break; case 21: SET_BIT(ch->pcdata->jflags, JFLAG_SS3); break; case 22: SET_BIT(ch->pcdata->jflags, JFLAG_SS4); break; case 23: SET_BIT(ch->pcdata->jflags, JFLAG_SS5); break; } send_to_char("ok.\n\r", ch); return; } else if (!str_cmp(arg1, "clear")) { if (arg2[0] == '\0') { ch->stance[18] = 0; send_to_char("Stance cleared.\n\r", ch); return; } if (!str_cmp(arg2, "all") && !str_cmp(arg3, "stances")) { if ((ch->in_room == NULL || ch->in_room->vnum != 3054)) { send_to_char ("To clear ALL your superstance, you must be at the Temple Altar of Midgaard.\n\r", ch); return; } ch->stance[12] = STANCE_NONE; ch->stance[0] = 0; ch->stance[13] = 0; ch->stance[14] = 0; ch->stance[15] = 0; ch->stance[16] = 0; ch->stance[17] = 0; ch->stance[18] = 0; ch->stance[19] = -1; ch->stance[20] = -1; ch->stance[21] = -1; ch->stance[22] = -1; ch->stance[23] = -1; send_to_char("Ok.\n\r", ch); } } else if (!str_cmp(arg1, "dodge")) { if (IS_SET(ch->stance[18], STANCEPOWER_DODGE)) REMOVE_BIT(ch->stance[18], STANCEPOWER_DODGE); else SET_BIT(ch->stance[18], STANCEPOWER_DODGE); send_to_char("Ok.\n\r", ch); return; } else if (!str_cmp(arg1, "parry")) { if (IS_SET(ch->stance[18], STANCEPOWER_PARRY)) REMOVE_BIT(ch->stance[18], STANCEPOWER_PARRY); else SET_BIT(ch->stance[18], STANCEPOWER_PARRY); send_to_char("Ok.\n\r", ch); return; } else if (!str_cmp(arg1, "speed")) { if (IS_SET(ch->stance[18], STANCEPOWER_SPEED)) REMOVE_BIT(ch->stance[18], STANCEPOWER_SPEED); else SET_BIT(ch->stance[18], STANCEPOWER_SPEED); send_to_char("Ok.\n\r", ch); return; } else if (!str_cmp(arg1, "bypass")) { if (IS_SET(ch->stance[18], STANCEPOWER_BYPASS)) REMOVE_BIT(ch->stance[18], STANCEPOWER_BYPASS); else SET_BIT(ch->stance[18], STANCEPOWER_BYPASS); send_to_char("Ok.\n\r", ch); return; } else if (arg2[0] == '\0') { send_to_char("What?!?\n\r", ch); return; } else if (!str_cmp(arg1, "damage")) { if (!str_cmp(arg2, "lesser")) { if (max_lesser > current_lesser || IS_SET(ch->stance[18], STANCEPOWER_DAMAGE_1)) { if (IS_SET (ch->stance[18], STANCEPOWER_DAMAGE_2) || IS_SET(ch->stance[18], STANCEPOWER_DAMAGE_3)) { send_to_char ("You allready have the damage power set.\n\r", ch); return; } if (IS_SET (ch->stance[18], STANCEPOWER_DAMAGE_1)) { current_lesser--; REMOVE_BIT(ch->stance[18], STANCEPOWER_DAMAGE_1); } else { current_lesser++; SET_BIT(ch->stance[18], STANCEPOWER_DAMAGE_1); } send_to_char("Ok.\n\r", ch); return; } else { send_to_char ("You are not allowed to have any more lesser powers.\n\r", ch); return; } } else if (!str_cmp(arg2, "greater")) { if (max_greater > current_greater || IS_SET(ch->stance[18], STANCEPOWER_DAMAGE_2)) { if (IS_SET (ch->stance[18], STANCEPOWER_DAMAGE_1) || IS_SET(ch->stance[18], STANCEPOWER_DAMAGE_3)) { send_to_char ("You allready have the damage power set.\n\r", ch); return; } if (IS_SET (ch->stance[18], STANCEPOWER_DAMAGE_2)) { current_greater--; REMOVE_BIT(ch->stance[18], STANCEPOWER_DAMAGE_2); } else { current_greater++; SET_BIT(ch->stance[18], STANCEPOWER_DAMAGE_2); } send_to_char("Ok.\n\r", ch); return; } else { send_to_char ("You are not allowed to have any more greater powers.\n\r", ch); return; } } else if (!str_cmp(arg2, "supreme")) { if (max_supreme > current_supreme || IS_SET(ch->stance[18], STANCEPOWER_DAMAGE_3)) { if (IS_SET (ch->stance[18], STANCEPOWER_DAMAGE_1) || IS_SET(ch->stance[18], STANCEPOWER_DAMAGE_2)) { send_to_char ("You allready have the damage power set.\n\r", ch); return; } if (IS_SET (ch->stance[18], STANCEPOWER_DAMAGE_3)) { current_supreme--; REMOVE_BIT(ch->stance[18], STANCEPOWER_DAMAGE_3); } else { current_supreme++; SET_BIT(ch->stance[18], STANCEPOWER_DAMAGE_3); } send_to_char("Ok.\n\r", ch); return; } else { send_to_char ("You are not allowed to have any more supreme powers.\n\r", ch); return; } } else { send_to_char("What?!?\n\r", ch); return; } } else if (!str_cmp(arg1, "damcap")) { if (!str_cmp(arg2, "lesser")) { if (max_lesser > current_lesser || IS_SET(ch->stance[18], STANCEPOWER_DAMCAP_1)) { if (IS_SET (ch->stance[18], STANCEPOWER_DAMCAP_2) || IS_SET(ch->stance[18], STANCEPOWER_DAMCAP_3)) { send_to_char ("You allready have the damcap power set.\n\r", ch); return; } if (IS_SET (ch->stance[18], STANCEPOWER_DAMCAP_1)) { current_lesser--; REMOVE_BIT(ch->stance[18], STANCEPOWER_DAMCAP_1); } else { current_lesser++; SET_BIT(ch->stance[18], STANCEPOWER_DAMCAP_1); } send_to_char("Ok.\n\r", ch); return; } else { send_to_char ("You are not allowed to have any more lesser powers.\n\r", ch); return; } } else if (!str_cmp(arg2, "greater")) { if (max_greater > current_greater || IS_SET(ch->stance[18], STANCEPOWER_DAMCAP_2)) { if (IS_SET (ch->stance[18], STANCEPOWER_DAMCAP_1) || IS_SET(ch->stance[18], STANCEPOWER_DAMCAP_3)) { send_to_char ("You allready have the damcap power set.\n\r", ch); return; } if (IS_SET (ch->stance[18], STANCEPOWER_DAMCAP_2)) { current_greater--; REMOVE_BIT(ch->stance[18], STANCEPOWER_DAMCAP_2); } else { current_greater++; SET_BIT(ch->stance[18], STANCEPOWER_DAMCAP_2); } send_to_char("Ok.\n\r", ch); return; } else { send_to_char ("You are not allowed to have any more greater powers.\n\r", ch); return; } } else if (!str_cmp(arg2, "supreme")) { if (max_supreme > current_supreme || IS_SET(ch->stance[18], STANCEPOWER_DAMCAP_3)) { if (IS_SET (ch->stance[18], STANCEPOWER_DAMCAP_1) || IS_SET(ch->stance[18], STANCEPOWER_DAMCAP_2)) { send_to_char ("You allready have the damcap power set.\n\r", ch); return; } if (IS_SET (ch->stance[18], STANCEPOWER_DAMCAP_3)) { current_supreme--; REMOVE_BIT(ch->stance[18], STANCEPOWER_DAMCAP_3); } else { current_supreme++; SET_BIT(ch->stance[18], STANCEPOWER_DAMCAP_3); } send_to_char("Ok.\n\r", ch); return; } else { send_to_char ("You are not allowed to have any more supreme powers.\n\r", ch); return; } } else { send_to_char("What?!?\n\r", ch); return; } } else if (!str_cmp(arg1, "resist")) { if (!str_cmp(arg2, "lesser")) { if (max_lesser > current_lesser || IS_SET(ch->stance[18], STANCEPOWER_RESIST_1)) { if (IS_SET (ch->stance[18], STANCEPOWER_RESIST_2) || IS_SET(ch->stance[18], STANCEPOWER_RESIST_3)) { send_to_char ("You allready have the resist power set.\n\r", ch); return; } if (IS_SET (ch->stance[18], STANCEPOWER_RESIST_1)) { current_lesser--; REMOVE_BIT(ch->stance[18], STANCEPOWER_RESIST_1); } else { current_lesser++; SET_BIT(ch->stance[18], STANCEPOWER_RESIST_1); } send_to_char("Ok.\n\r", ch); return; } else { send_to_char ("You are not allowed to have any more lesser powers.\n\r", ch); return; } } else if (!str_cmp(arg2, "greater")) { if (max_greater > current_greater || IS_SET(ch->stance[18], STANCEPOWER_RESIST_2)) { if (IS_SET (ch->stance[18], STANCEPOWER_RESIST_1) || IS_SET(ch->stance[18], STANCEPOWER_RESIST_3)) { send_to_char ("You allready have the resist power set.\n\r", ch); return; } if (IS_SET (ch->stance[18], STANCEPOWER_RESIST_2)) { current_greater--; REMOVE_BIT(ch->stance[18], STANCEPOWER_RESIST_2); } else { current_greater++; SET_BIT(ch->stance[18], STANCEPOWER_RESIST_2); } send_to_char("Ok.\n\r", ch); return; } else { send_to_char ("You are not allowed to have any more greater powers.\n\r", ch); return; } } else if (!str_cmp(arg2, "supreme")) { if (max_supreme > current_supreme || IS_SET(ch->stance[18], STANCEPOWER_RESIST_3)) { if (IS_SET (ch->stance[18], STANCEPOWER_RESIST_1) || IS_SET(ch->stance[18], STANCEPOWER_RESIST_2)) { send_to_char ("You allready have the resist power set.\n\r", ch); return; } if (IS_SET (ch->stance[18], STANCEPOWER_RESIST_3)) { current_supreme--; REMOVE_BIT(ch->stance[18], STANCEPOWER_RESIST_3); } else { current_supreme++; SET_BIT(ch->stance[18], STANCEPOWER_RESIST_3); } send_to_char("Ok.\n\r", ch); return; } else { send_to_char ("You are not allowed to have any more supreme powers.\n\r", ch); return; } } else { send_to_char("What?!?\n\r", ch); return; } } else if (!str_cmp(arg1, "rev_dc")) { if (!str_cmp(arg2, "lesser")) { if (max_lesser > current_lesser || IS_SET(ch->stance[18], STANCEPOWER_REV_DAMCAP_1)) { if (IS_SET (ch->stance[18], STANCEPOWER_REV_DAMCAP_2) || IS_SET(ch->stance[18], STANCEPOWER_REV_DAMCAP_3)) { send_to_char ("You allready have the reverse damcap power set.\n\r", ch); return; } if (IS_SET (ch->stance[18], STANCEPOWER_REV_DAMCAP_1)) { current_lesser--; REMOVE_BIT(ch->stance[18], STANCEPOWER_REV_DAMCAP_1); } else { current_lesser++; SET_BIT(ch->stance[18], STANCEPOWER_REV_DAMCAP_1); } send_to_char("Ok.\n\r", ch); return; } else { send_to_char ("You are not allowed to have any more lesser powers.\n\r", ch); return; } } else if (!str_cmp(arg2, "greater")) { if (max_greater > current_greater || IS_SET(ch->stance[18], STANCEPOWER_REV_DAMCAP_2)) { if (IS_SET (ch->stance[18], STANCEPOWER_REV_DAMCAP_1) || IS_SET(ch->stance[18], STANCEPOWER_REV_DAMCAP_3)) { send_to_char ("You allready have the reverse damcap power set.\n\r", ch); return; } if (IS_SET (ch->stance[18], STANCEPOWER_REV_DAMCAP_2)) { current_greater--; REMOVE_BIT(ch->stance[18], STANCEPOWER_REV_DAMCAP_2); } else { current_greater++; SET_BIT(ch->stance[18], STANCEPOWER_REV_DAMCAP_2); } send_to_char("Ok.\n\r", ch); return; } else { send_to_char ("You are not allowed to have any more greater powers.\n\r", ch); return; } } else if (!str_cmp(arg2, "supreme")) { if (max_supreme > current_supreme || IS_SET(ch->stance[18], STANCEPOWER_REV_DAMCAP_3)) { if (IS_SET (ch->stance[18], STANCEPOWER_REV_DAMCAP_1) || IS_SET(ch->stance[18], STANCEPOWER_REV_DAMCAP_2)) { send_to_char ("You allready have the reverse damcap power set.\n\r", ch); return; } if (IS_SET (ch->stance[18], STANCEPOWER_REV_DAMCAP_3)) { current_supreme--; REMOVE_BIT(ch->stance[18], STANCEPOWER_REV_DAMCAP_3); } else { current_supreme++; SET_BIT(ch->stance[18], STANCEPOWER_REV_DAMCAP_3); } send_to_char("Ok.\n\r", ch); return; } else { send_to_char ("You are not allowed to have any more supreme powers.\n\r", ch); return; } } else { send_to_char("What?!?\n\r", ch); return; } } else do_setstance(ch, ""); } void do_address(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; send_to_char("Zarius's homepage : http://www.mindcloud.com", ch); return; } void do_ragnarok(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; int amount; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (ragnarok_timer < 120 * PULSE_AREA) { send_to_char("You may not call for ragnarok yet.\n\r", ch); return; } if (has_timer(ch)) return; if (arg[0] == '\0') { send_to_char("How many bones do you want to bid ?\n\r", ch); return; } if (!is_number(arg)) { send_to_char ("A number please, how many bones do you want to bid towards ragnarok.\n\r", ch); return; } amount = atoi(arg); if (amount < 100) { send_to_char ("You cannot tempt the gods with this puny amount.\n\r", ch); return; } if (amount > 1000) { send_to_char ("You don't want to spend this many bones to end the world.\n\r", ch); return; } if (ch->bones < amount) { send_to_char("You don't have the bones.\n\r", ch); return; } ch->bones -= amount; ragnarok_cost -= amount; if (ragnarok_cost <= 0) { ragnarok_cost = 5000; ragnarok = TRUE; ragnarok_timer = 0; do_info(ch, "#0The world comes to an end, #YRAGNAROK#0 is over us all!!!!#n"); } else do_info(ch, "The ragnarok moves closer, the gods shiver with fear"); return; } void do_timer(CHAR_DATA * ch, char *argument) { int ragnaroktime; char buf[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; if (ragnarok) ragnaroktime = 0; else ragnaroktime = (120 * PULSE_AREA - ragnarok_timer); if (ragnaroktime < 0) ragnaroktime = 0; xprintf(buf, "Bidding on ragnarok starts in : %3d minutes.\n\r", ragnaroktime / PULSE_AREA); send_to_char(buf, ch); if (global_exp) { xprintf(buf, "Double Exp will end in : %3d minutes.\n\r", pulse_exp); send_to_char(buf, ch); } if (global_dt) { xprintf(buf, "Double Training will end in : %3d minutes.\n\r", pulse_dt); send_to_char(buf, ch); } if (global_cp) { xprintf(buf, "Double Class Points will end in : %3d minutes.\n\r", pulse_cp); send_to_char(buf, ch); } return; } void do_exp(CHAR_DATA * ch, char *argument) { char buf[MAX_STRING_LENGTH]; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; unsigned int cost, to, from; argument = one_argument(argument, arg1); argument = one_argument(argument, arg2); if (IS_NPC(ch)) return; if (arg1[0] == '\0' || arg2[0] == '\0') { send_to_char("Usage is :\n\r", ch); send_to_char("exp <from> <to>\n\r", ch); send_to_char ("ie. exp 4000 6000 will tell you how many exp it will cost to train from 4K to 6K\n\r", ch); send_to_char ("can be used for primal as well, just time the result by 500.\n\r", ch); return; } if (!is_number(arg1) || !is_number(arg2)) { send_to_char("Please use numbers.\n\r", ch); return; } from = atoi(arg1); to = atoi(arg2); if (from >= to) { send_to_char("Begin with a smaller number.\n\r", ch); return; } if (to > 120000) { send_to_char("Thats beyond the statcap.\n\r", ch); return; } if ((to > 50000 && to - from > 20000) || (to > 100000 && to - from > 10000) || (to - from > 50000)) { send_to_char ("Please use a smaller interval to avoid integer overflows.\n\r", ch); return; } cost = (from + to) * (to - from + 1) / 2 - from; if (cost > 500000000) xprintf(buf, "The total cost in exp will be %d million\n\r", cost / 1000000); else xprintf(buf, "The total cost in exp will be %d\n\r", cost); send_to_char(buf, ch); return; } void do_favor(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; one_argument(argument, arg); if (IS_NPC(ch)) return; if (IS_SET(ch->act, PLR_RIGHTHAND) || IS_SET(ch->act, PLR_LEFTHAND) || IS_SET(ch->act, PLR_AMBI)) { send_to_char("Already set.\n\r", ch); return; } if (arg[0] == '\0') { send_to_char("Favor left, right or both hands ?\n\r", ch); return; } if (!str_cmp(arg, "left")) { SET_BIT(ch->act, PLR_LEFTHAND); send_to_char("You favor your left arm in combat.\n\r", ch); } else if (!str_cmp(arg, "right")) { SET_BIT(ch->act, PLR_RIGHTHAND); send_to_char("You favor your right arm in combat.\n\r", ch); } else if (!str_cmp(arg, "both")) { SET_BIT(ch->act, PLR_AMBI); send_to_char("You fight well with both arms.\n\r", ch); } else do_favor(ch, ""); return; } void do_alias(CHAR_DATA * ch, char *argument) { ALIAS_DATA *ali; char arg1[MAX_INPUT_LENGTH]; char testarg[MAX_INPUT_LENGTH]; if (IS_NPC(ch)) return; argument = one_argument(argument, arg1); one_argument(argument, testarg); if ((ch->in_room == NULL || ch->in_room->vnum != 3054)) { send_to_char ("You must be at the Temple Altar of Midgaard to create a new alias.\n\r", ch); return; } if (ch->pcdata->alias_count >= MAX_ALIAS) { send_to_char ("Sorry, you have reached the limit for aliases, you need to remove some before you can make more.\n\r", ch); return; } if (arg1[0] == '\0' || argument[0] == '\0') { send_to_char("Syntax : alias 'short' 'long'\n\r", ch); send_to_char ("\n\rThe 'short' is the alias, and the 'long' is the string that the alias replaces.\n\r", ch); send_to_char("ie. alias tt teleport orc.\n\r", ch); return; } if (strlen2(argument) > 400) { send_to_char("Behave... that's way to big.\n\r", ch); return; } smash_tilde(arg1); smash_tilde(testarg); smash_tilde(argument); if (!str_cmp(arg1, testarg)) { send_to_char("You cannot alias the alias.\n\r", ch); return; } if (!str_cmp(arg1, "showalias") || !str_cmp(arg1, "alias") || !str_cmp(arg1, "removealias")) { send_to_char ("You really shouldn't alias the alias commands.\n\r", ch); return; } for (ali = ch->pcdata->alias; ali; ali = ali->next) { if (!str_cmp(arg1, ali->short_n)) { send_to_char("You already have such an alias.\n\r", ch); return; } if (!str_cmp(arg1, ali->long_n) || !str_cmp(argument, ali->short_n) || !str_cmp(argument, ali->long_n)) { send_to_char("No looping aliases please.\n\r", ch); return; } } if (alias_free == NULL) { ali = alloc_perm(sizeof(*ali)); } else { ali = alias_free; alias_free = alias_free->next; } ali->short_n = str_dup(arg1); ali->long_n = str_dup(argument); ali->next = ch->pcdata->alias; ch->pcdata->alias = ali; ch->pcdata->alias_count++; send_to_char("Ok.\n\r", ch); return; } void do_showalias(CHAR_DATA * ch, char *argument) { ALIAS_DATA *ali; bool found = FALSE; char buf[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; for (ali = ch->pcdata->alias; ali; ali = ali->next) { found = TRUE; xprintf(buf, "%s '%s'\n\r", ali->short_n, ali->long_n); send_to_char(buf, ch); } if (!found) send_to_char("You have no aliases.\n\r", ch); return; } void do_removealias(CHAR_DATA * ch, char *argument) { ALIAS_DATA *ali; char arg[MAX_INPUT_LENGTH]; if (IS_NPC(ch)) return; one_argument(argument, arg); if (arg[0] == '\0') { send_to_char("Remove which alias?\n\r", ch); return; } for (ali = ch->pcdata->alias; ali; ali = ali->next) { if (!str_cmp(arg, ali->short_n)) { alias_remove(ch, ali); send_to_char("Alias removed.\n\r", ch); ch->pcdata->alias_count--; return; } } send_to_char("No such alias.\n\r", ch); return; } void do_birth(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; CHAR_DATA *victim; DESCRIPTOR_DATA *dummy; if (IS_NPC(ch)) return; argument = one_argument(argument, arg); if (ch->sex != SEX_FEMALE) { send_to_char("Huh?\n\r", ch); return; } if (!IS_EXTRA(ch, EXTRA_PREGNANT)) { send_to_char("But you are not even pregnant!\n\r", ch); return; } if (!IS_EXTRA(ch, EXTRA_LABOUR)) { send_to_char("You're not ready to give birth yet.\n\r", ch); return; } if (arg[0] == '\0') { if (ch->pcdata->genes[4] == SEX_MALE) send_to_char ("What do you wish to name your little boy?\n\r", ch); else if (ch->pcdata->genes[4] == SEX_FEMALE) send_to_char ("What do you wish to name your little girl?\n\r", ch); else send_to_char ("What do you wish to name your child?\n\r", ch); return; } if (!check_parse_name(arg)) { send_to_char("Thats an illegal name.\n\r", ch); return; } if (char_exists(FALSE, arg)) { send_to_char("That player already exists.\n\r", ch); return; } if (descriptor_free == NULL) { dummy = alloc_perm(sizeof(*dummy)); } else { dummy = descriptor_free; descriptor_free = descriptor_free->next; } arg[0] = UPPER(arg[0]); load_char_short(dummy, arg); victim = dummy->character; victim->pcdata->perm_str = 18; victim->pcdata->perm_int = 18; victim->pcdata->perm_wis = 18; victim->pcdata->perm_dex = 18; victim->pcdata->perm_con = 18; victim->stance[19] = -1; victim->stance[20] = -1; victim->stance[21] = -1; victim->stance[22] = -1; victim->stance[23] = -1; victim->class = ch->class; victim->max_hit = 5000; victim->hit = 5000; victim->max_mana = 5000; victim->mana = 5000; victim->max_move = 5000; victim->move = 5000; victim->sex = ch->pcdata->genes[4]; victim->level = 2; victim->generation = 6; victim->in_room = ch->in_room; set_learnable_disciplines(victim); save_char_obj(victim); free_char(victim); if (ch->pcdata->genes[4] == SEX_MALE) xprintf(buf, "Son of %s and %s.", ch->name, ch->pcdata->cparents); else xprintf(buf, "Daughter of %s and %s.", ch->name, ch->pcdata->cparents); victim->description = str_dup(buf); /* * Being nice and putting the descriptor back into the free list. */ dummy->next = descriptor_free; descriptor_free = dummy; ch->pcdata->genes[9] += 1; REMOVE_BIT(ch->extra, EXTRA_PREGNANT); REMOVE_BIT(ch->extra, EXTRA_LABOUR); save_char_obj(ch); if (ch->pcdata->genes[4] == SEX_MALE) xprintf(buf, "%s gives birth to %s's son, named %s!", ch->name, ch->pcdata->cparents, arg); else xprintf(buf, "%s gives birth to %s's daughter, named %s!", ch->name, ch->pcdata->cparents, arg); do_info(ch, buf); send_to_char("Pop!\n\r", ch); interpret(ch, "bleed"); return; } void do_areaaffects(CHAR_DATA * ch, char *argument) { AREA_AFFECT *paf; bool found = FALSE; char buf[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; send_to_char("This area has been enchanted with :\n\r\n\r", ch); for (paf = ch->in_room->area->affects; paf; paf = paf->next) { found = TRUE; if (paf->type == AREA_AFF_GZONE) xprintf(buf, " God's Zone"); else if (paf->type == AREA_AFF_THORNS) xprintf(buf, " Thorns and Brambles"); else if (paf->type == AREA_AFF_PESTILENCE) xprintf(buf, " Pestilence"); else if (paf->type == AREA_AFF_BADMOON) xprintf(buf, " Bad Moon"); else if (paf->type == AREA_AFF_GAIA) xprintf(buf, " Gaia's Blessing"); else if (paf->type == AREA_AFF_CHAOS) xprintf(buf, " Chaotic Landscape"); else xprintf(buf, " Unknown"); xprintf(buf2, "%s by %s for a duration of %d hours\n\r", buf, religion_table[paf->religion].truename, paf->duration); send_to_char(buf2, ch); } if (!found) send_to_char(" nothing.\n\r", ch); return; } void do_selfdelete(CHAR_DATA * ch, char *argument) { char buf[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; if (argument[0] == '\0') { send_to_char("Syntax : selfdelete <your password>\n\r", ch); send_to_char ("WARNING : THIS WILL REMOVE YOU PERMANENTLY!!\n\r", ch); return; } if (has_timer(ch)) return; /* * check for password. */ if (strcmp(crypt(argument, ch->pcdata->pwd), ch->pcdata->pwd)) { send_to_char("Illegal password.\n\r", ch); WAIT_STATE(ch, 12); return; } /* * logged. */ xprintf(buf, "%s has selfdeleted, what a fool.", ch->name); log_string(LOG_SECURITY, buf); /* * set up the deletion */ xprintf(buf, "%s%s", PLAYER_DIR, capitalize(ch->pcdata->switchname)); /* * make sure the player is offline. */ ch->fight_timer = 0; char_from_room(ch); char_to_room(ch, get_room_index(ROOM_VNUM_LIMBO)); if (ch->level > 6) { update_wizlist(ch, 1); } do_quit(ch, ""); unlink(buf); return; } void do_leader(CHAR_DATA * ch, char *argument) { char buf[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; xprintf(buf, " %s\n\r\n\r", get_dystopia_banner(" Leader Board ", 72)); send_to_char(buf, ch); send_to_char(" #yMost Player Kills #C---> ", ch); xprintf(buf, "#G%-13s", leader_board.pk_name); send_to_char(buf, ch); xprintf(buf, " #ywith #G%d #yKills#n\n\r", leader_board.pk_number); send_to_char(buf, ch); send_to_char(" #yMost Hours Played #C---> ", ch); xprintf(buf, "#G%-13s", leader_board.time_name); send_to_char(buf, ch); xprintf(buf, " #ywith #G%d #yHours#n\n\r", leader_board.time_number); send_to_char(buf, ch); send_to_char(" #yMost Mobs Killed #C---> ", ch); xprintf(buf, "#G%-13s", leader_board.mobkills_name); send_to_char(buf, ch); xprintf(buf, " #ywith #G%d #yKills#n\n\r", leader_board.mobkills_number); send_to_char(buf, ch); send_to_char(" #yHighest PK score #C---> ", ch); xprintf(buf, "#G%-13s", leader_board.pkscore_name); send_to_char(buf, ch); xprintf(buf, " #ywith #G%d #yPoints#n\n\r", leader_board.pkscore_number); send_to_char(buf, ch); send_to_char(" #yMost Arena Wins #C---> ", ch); xprintf(buf, "#G%-13s", leader_board.arena_name); send_to_char(buf, ch); xprintf(buf, " #ywith #G%d #yWins#n\n\r", leader_board.arena_number); send_to_char(buf, ch); xprintf(buf, "\n\r %s\n\r", get_dystopia_banner("", 68)); send_to_char(buf, ch); return; } void do_policy(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; argument = one_argument(argument, arg); if (IS_SET(ch->pcdata->jflags, JFLAG_POLICY)) { send_to_char("You have already accepted the policy.\n\r", ch); return; } if (!str_cmp(arg, "accept")) { if (strcmp(crypt(argument, ch->pcdata->pwd), ch->pcdata->pwd)) { send_to_char("Illegal password.\n\r", ch); WAIT_STATE(ch, 12); return; } send_to_char ("You have accepted the player policy at Mindcloud Mud.\n\r", ch); SET_BIT(ch->pcdata->jflags, JFLAG_POLICY); do_autosave(ch, ""); xprintf(buf, "%s has accepted the player policy.", ch->name); log_string(LOG_GAME, buf); return; } else if (!str_cmp(arg, "decline")) { if (strcmp(crypt(argument, ch->pcdata->pwd), ch->pcdata->pwd)) { send_to_char("Illegal password.\n\r", ch); WAIT_STATE(ch, 12); return; } xprintf(buf, "%s has declined the player policy.", ch->name); log_string(LOG_GAME, buf); xprintf(buf, "%s%s", PLAYER_DIR, capitalize(ch->pcdata->switchname)); ch->fight_timer = 0; char_from_room(ch); char_to_room(ch, get_room_index(ROOM_VNUM_LIMBO)); do_quit(ch, ""); unlink(buf); } else { send_to_char ("Syntax : policy [accept|decline] [password]\n\r", ch); return; } return; } void extra_action(CHAR_DATA * ch, char *argument, int type) { EXTRA_DESCR_DATA *ed; ROOM_INDEX_DATA *location; OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; CHAR_DATA *gch; CHAR_DATA *gch_next; char arg[MAX_INPUT_LENGTH]; char buf1[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; int sn; one_argument(argument, arg); for (ed = ch->in_room->extra_descr; ed; ed = ed->next) { if (is_full_name(arg, ed->keyword)) { if (ed->type == type) { switch (type) { case ED_TYPE_PULL: xprintf(buf1, "You pull %s.\n\r", ed->keyword); xprintf(buf2, "$n pulls %s.", ed->keyword); break; case ED_TYPE_PRESS: xprintf(buf1, "You press %s.\n\r", ed->keyword); xprintf(buf2, "$n presses %s.", ed->keyword); break; case ED_TYPE_PUSH: xprintf(buf1, "You push %s.\n\r", ed->keyword); xprintf(buf2, "$n pushes %s.", ed->keyword); break; case ED_TYPE_TOUCH: xprintf(buf1, "You touch %s.\n\r", ed->keyword); xprintf(buf2, "$n touches %s.", ed->keyword); break; } send_to_char(buf1, ch); act(buf2, ch, NULL, NULL, TO_ROOM); } else { switch (type) { case ED_TYPE_PULL: send_to_char ("That cannot be pulled.\n\r", ch); break; case ED_TYPE_PUSH: send_to_char ("That cannot be pushed.\n\r", ch); break; case ED_TYPE_PRESS: send_to_char ("That cannot be pressed.\n\r", ch); break; case ED_TYPE_TOUCH: send_to_char ("You seem unable to touch it.\n\r", ch); break; } return; } switch (ed->action) { default: send_to_char("Nothing happens.\n\r", ch); return; case ED_ACTION_TELEPORT: if ((location = get_room_index(ed->vnum)) == NULL) { send_to_char("Nothing happens.\n\r", ch); return; } act(ed->buffer1, ch, NULL, NULL, TO_CHAR); act(ed->buffer2, ch, NULL, NULL, TO_ROOM); char_from_room(ch); char_to_room(ch, location); do_look(ch, "auto"); return; case ED_ACTION_OBJECT: if ((pObjIndex = get_obj_index(ed->vnum)) == NULL) { send_to_char ("Bug : Please report this.\n\r", ch); return; } obj = create_object(pObjIndex, 50); if (CAN_WEAR(obj, ITEM_TAKE)) obj_to_char(obj, ch); else obj_to_room(obj, ch->in_room); act(ed->buffer1, ch, NULL, NULL, TO_CHAR); act(ed->buffer2, ch, NULL, NULL, TO_ROOM); return; case ED_ACTION_SPELL: if ((sn = skill_lookup(ed->buffer1)) < 0) { send_to_char ("Bug : Please report this.\n\r", ch); return; } (*skill_table[sn].spell_fun) (sn, number_range(40, 50), ch, ch); return; case ED_ACTION_ELEVATOR: if ((location = get_room_index(ed->vnum)) == NULL) { send_to_char ("Bug : Please report this.\n\r", ch); return; } if (location->people) { act(ed->buffer2, ch, NULL, NULL, TO_ALL); return; } for (gch = ch->in_room->people; gch; gch = gch_next) { gch_next = gch->next_in_room; char_from_room(gch); char_to_room(gch, location); act(ed->buffer1, gch, NULL, NULL, TO_CHAR); } return; } } } send_to_char("You are unable to find that.\n\r", ch); } /* void do_pull(CHAR_DATA *ch, char *argument) { extra_action(ch, argument, ED_TYPE_PULL); } void do_press(CHAR_DATA *ch, char *argument) { extra_action(ch, argument, ED_TYPE_PRESS); } void do_push(CHAR_DATA *ch, char *argument) { extra_action(ch, argument, ED_TYPE_PUSH); } void do_touch(CHAR_DATA *ch, char *argument) { extra_action(ch, argument, ED_TYPE_TOUCH); } */ void do_ignore(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; DESCRIPTOR_DATA *d; char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; int i; if (IS_NPC(ch)) return; one_argument(argument, arg); if (arg[0] == '\0') { xprintf(buf, "You are currently ignoring :\n\r"); for (d = descriptor_list; d; d = d->next) { if (d->connected != CON_PLAYING) continue; if ((victim = d->character) == NULL) continue; for (i = 0; i < MAX_IGNORE; i++) { if (ch->pcdata->ignore[i] == victim->pcdata->playerid) { strcat(buf, "* "); strcat(buf, victim->name); strcat(buf, "\n\r"); } } } send_to_char(buf, ch); return; } if (!str_cmp(arg, "clear")) { for (i = 0; i < MAX_IGNORE; i++) { ch->pcdata->ignore[i] = -1; } send_to_char("All ignores cleared.\n\r", ch); return; } for (victim = char_list; victim; victim = victim->next) { if (IS_NPC(victim)) continue; if (!str_prefix(victim->name, arg)) { for (i = 0; i < MAX_IGNORE; i++) { if (ch->pcdata->ignore[i] == victim->pcdata->playerid) { ch->pcdata->ignore[i] = -1; xprintf(buf, "You stop ignoring %s.\n\r", victim->name); send_to_char(buf, ch); return; } } for (i = 0; i < MAX_IGNORE; i++) { if (ch->pcdata->ignore[i] == -1) { ch->pcdata->ignore[i] = victim->pcdata->playerid; xprintf(buf, "You now ignore %s.\n\r", victim->name); send_to_char(buf, ch); return; } } send_to_char ("You cannot ignore any more people, try 'ignore clear'.\n\r", ch); return; } } send_to_char("Ignore whom?\n\r", ch); return; } void do_vt100(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; if (IS_SET(ch->pcdata->tempflag, TEMP_VT100)) { REMOVE_BIT(ch->pcdata->tempflag, TEMP_VT100); send_to_char(VT_RESET_TERMINAL, ch); return; } if (!IS_SET(ch->in_room->room_flags, ROOM_SAFE)) { send_to_char ("You cannot enable vt100 outside safe rooms.\n\r", ch); return; } send_to_char("Requesting VT100 information from your client.\n\r", ch); send_to_char("\e[999;999H", ch); send_to_char("\e[6n", ch); return; } void do_classportal(CHAR_DATA * ch, char *argument) { ROOM_INDEX_DATA *location; CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; char buf1[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; char buf3[MAX_STRING_LENGTH]; char buf4[MAX_STRING_LENGTH]; int cost = 0; bool move = FALSE; one_argument(argument, arg); if (IS_NPC(ch)) return; switch (ch->class) { default: send_to_char("Huh?\n\r", ch); return; case CLASS_DEMON: if (!IS_DEMPOWER(ch, DEM_TRAVEL)) { send_to_char ("You haven't been granted the gift of travel.\n\r", ch); return; } xprintf(buf1, "You sink into the ground, and make your way towards $N."); xprintf(buf2, "$n sinks into the ground."); xprintf(buf3, "You rise up from the ground, opposing $N."); xprintf(buf4, "$n rises up out of the ground."); move = TRUE; cost = 500; break; case CLASS_MAGE: if (ch->pcdata->powers[PINVOKE] < 1) { send_to_char("You don't have that invoke yet.\n\r", ch); return; } xprintf(buf1, "You utter a single powerword, teleporting you towards $N."); xprintf(buf2, "$n utters a strange sounding word and disappers."); xprintf(buf3, "You materialize infront of $N."); xprintf(buf4, "$n suddenly appears from out of nowhere."); move = FALSE; cost = 500; break; case CLASS_WEREWOLF: if (ch->power[DISC_WERE_LUNA] < 6) { send_to_char ("You need to obtain level 6 Luna to use moongate.\n\r", ch); return; } move = FALSE; cost = 500; break; //case CLASS_BEASTMASTER: // Need something here //xprintf(buf1, "You run through the forests, searching for $N."); //xprintf(buf2, "$n disappears into the forest."); //xprintf(buf3, "You leap out of the forest before $N."); //xprintf(buf4, "$n leaps out of from behind a tree."); //move = TRUE; //cost = 500; //break; case CLASS_VAMPIRE: if (ch->power[DISC_VAMP_AUSP] < 4) { send_to_char ("You must obtain level 4 Auspex to use Astral Walk.\n\r", ch); return; } xprintf(buf1, "You enter the astral plane, searching for $N."); xprintf(buf2, "$n enters the astral plane."); xprintf(buf3, "You leap out of the astral plane before $N."); xprintf(buf4, "$n leaps out of a rift in the astral plane."); move = TRUE; cost = 500; break; case CLASS_SAMURAI: xprintf(buf1, "You follow the ancestral path to $N."); xprintf(buf2, "$n steps into the air, leaving behind no trace whatsoever."); xprintf(buf3, "You step out of the air infront of $N."); xprintf(buf4, "$n steps out of the air in front of you."); move = TRUE; cost = 1000; break; case CLASS_DROW: if (!IS_SET(ch->pcdata->powers[1], DPOWER_SHADOWWALK)) { send_to_char ("You have not been granted that power yet.\n\r", ch); return; } xprintf(buf1, "You walk into the shadows, hunting $N."); xprintf(buf2, "$n walks into the shadows."); xprintf(buf3, "You walk out of the shadows in front of $N."); xprintf(buf4, "$n walks out of the shadows."); move = TRUE; cost = 500; break; case CLASS_MONK: if (ch->pcdata->powers[PMONK] < 10) { send_to_char ("You must obtain level 10 in mantras to use Celestial Path.\n\r", ch); return; } xprintf(buf1, "You concentrate and open a Celestial path to $N."); xprintf(buf2, "$n opens a celestial gateway and steps into it."); xprintf(buf3, "You leave a celestial path and stand before $N."); xprintf(buf4, "$n appears before you through a Celestial portal!"); move = FALSE; cost = 500; break; case CLASS_NINJA: if (!IS_SET (ch->pcdata->powers[SHADOW_POWERS], NSHADOWS_SHADOWWALK)) { send_to_char ("You have not learned that kill yet.\n\r", ch); return; } xprintf(buf1, "You walk into the shadows, hunting $N."); xprintf(buf2, "$n walks into the shadows."); xprintf(buf3, "You walk out of the shadows in front of $N."); xprintf(buf4, "$n walks out of the shadows."); move = FALSE; cost = 500; break; case CLASS_LICH: if (ch->pcdata->powers[CON_LORE] < 3) { send_to_char ("You need conjuring level 3 to do this.\n\r", ch); return; } move = FALSE; cost = 1000; break; case CLASS_SHAPESHIFTER: if (ch->pcdata->powers[SHAPE_POWERS] < 2) { send_to_char("You need level 2 shiftpowers.\n\r", ch); return; } xprintf(buf1, "You reform into thin mist and seep into the floor, tracking $N."); xprintf(buf2, "$n reforms into thin mist and seeps into the floor."); xprintf(buf3, "You seep up from the floor and reform in front of $N."); xprintf(buf4, "A fine mist seeps up from the floor and reforms into $n."); move = TRUE; cost = 1000; break; case CLASS_TANARRI: if (!IS_SET (ch->pcdata->powers[TANARRI_POWER], TANARRI_CHAOSGATE)) { send_to_char("You don't have that power yet.\n\r", ch); return; } xprintf(buf1, "You open a gate made from pure chaos, trying to reach $N."); xprintf(buf2, "$n opens a gate of pure chaos and steps into it."); xprintf(buf3, "You step out of the gate in front of $N."); xprintf(buf4, "A gate appears from out of nowhere and $n steps out of it."); move = TRUE; cost = 1000; break; case CLASS_ANGEL: if (ch->pcdata->powers[ANGEL_JUSTICE] < 1) { send_to_char("You haven't learned to fly yet.\n\r", ch); return; } if (!IS_SET(ch->pcdata->powers[ANGEL_POWERS], ANGEL_WINGS)) { send_to_char("Where are your wings?\n\r", ch); return; } xprintf(buf1, "You fly towards $N."); xprintf(buf2, "$n flies into the sky."); xprintf(buf3, "You swoop down upon $N."); xprintf(buf4, "$n swoops down from the sky."); move = TRUE; cost = 1000; break; case CLASS_UNDEAD_KNIGHT: xprintf(buf1, "You ride your skeleton steed towards $N."); xprintf(buf2, "$n leaves the room, riding a black horse."); xprintf(buf3, "You arrive in front of $N."); xprintf(buf4, "$n rides toward you on $s skeleton steed!"); move = TRUE; cost = 1000; break; case CLASS_DRONE: if (ch->pcdata->powers[DRONE_MINDCONTROL] < 3) { send_to_char ("You haven't learned to dreamwalk yet.\n\r", ch); return; } xprintf(buf1, "You fade into the dreamworld, searching for $N's dreams."); xprintf(buf2, "$n closes $s eyes and fades away."); xprintf(buf3, "You enter $N's dreams and step out into the real world next to $M."); xprintf(buf4, "$n suddenly fades into existance."); move = FALSE; cost = 1000; break; case CLASS_HOBBIT: if (ch->pcdata->powers[HOBBIT_DISHES] < 10) { send_to_char ("Only chefs that have mastered 10 ingredients can tunnel.\n\r", ch); return; } xprintf(buf1, "You start digging a tunnel towards $N."); xprintf(buf2, "$n pulls out a shovel and digs a tunnel."); xprintf(buf3, "You pop out of the earth in front of $N."); xprintf(buf4, "$n pops out of a hole in the earth."); move = TRUE; cost = 500; break; case CLASS_FAE: if (ch->power[DISC_FAE_NATURE] < 6) { send_to_char ("You need level 6 discipline in nature.\n\r", ch); return; } xprintf(buf1, "You enter the nearest tree, searching for the roots of $N."); xprintf(buf2, "$n steps right into a tree, and is gone."); xprintf(buf3, "You step out from another tree right in front of $N."); xprintf(buf4, "$n steps out of a tree right next to you."); move = FALSE; cost = 1000; break; case CLASS_GIANT: if (ch->pcdata->rank < FOOT_20) { send_to_char ("You're not high enough to do that, shorty.\n\r", ch); return; } xprintf(buf1, "You take a giant step towards $N."); xprintf(buf2, "$n takes a giant step, and is gone."); xprintf(buf3, "You step down in front of $N."); xprintf(buf4, "$n drops down in front of you, seemingly from one giant step."); move = TRUE; cost = 500; break; } if (cost == 0) cost = 10000; // debug. if (is_webbed(ch)) return; if ((victim = get_char_world(ch, arg)) == NULL) { send_to_char("They are not here.\n\r", ch); return; } if (victim->in_room == ch->in_room) { send_to_char("You are already there.\n\r", ch); return; } if (IS_SET(victim->in_room->room_flags, ROOM_ASTRAL)) { send_to_char("They are in the astral sphere.\n\r", ch); return; } if (IS_IMMUNE(victim, IMM_TRAVEL) && !IS_NPC(victim)) { if (IS_CLASS(ch, CLASS_DRONE) && victim->position == POS_SLEEPING); else { send_to_char ("I don't think they want you to do that.\n\r", ch); return; } } if (IS_SET(ch->in_room->room_flags, ROOM_ASTRAL)) { send_to_char ("Your room is not connected to the astral plane.\n\r", ch); return; } if (move && ch->move < cost) { send_to_char("You need more move.\n\r", ch); return; } else if (!move && ch->mana < cost) { send_to_char("You need more mana.\n\r", ch); return; } if (move) ch->move -= cost; else ch->mana -= cost; location = victim->in_room; if (!IS_CLASS(ch, CLASS_WEREWOLF) && !IS_CLASS(ch, CLASS_LICH)) { act(buf1, ch, NULL, victim, TO_CHAR); act(buf2, ch, NULL, NULL, TO_ROOM); char_from_room(ch); char_to_room(ch, location); do_look(ch, "auto"); act(buf3, ch, NULL, victim, TO_CHAR); act(buf4, ch, NULL, NULL, TO_ROOM); } else { OBJ_DATA *obj; int duration; /* * A portal to the victim */ duration = number_range(2, 3); if (IS_CLASS(ch, CLASS_LICH)) obj = create_object(get_obj_index(OBJ_VNUM_PORTAL), 0); else obj = create_object(get_obj_index(OBJ_VNUM_GATE2), 0); obj->value[0] = victim->in_room->vnum; obj->value[3] = ch->in_room->vnum; obj->timer = duration; if (IS_AFFECTED(ch, AFF_SHADOWPLANE)) obj->extra_flags = ITEM_SHADOWPLANE; obj_to_room(obj, ch->in_room); /* * and a portal that leads the other way */ if (IS_CLASS(ch, CLASS_LICH)) obj = create_object(get_obj_index(OBJ_VNUM_PORTAL), 0); else obj = create_object(get_obj_index(OBJ_VNUM_GATE2), 0); obj->value[0] = ch->in_room->vnum; obj->value[3] = victim->in_room->vnum; obj->timer = duration; if (IS_AFFECTED(victim, AFF_SHADOWPLANE)) obj->extra_flags = ITEM_SHADOWPLANE; obj_to_room(obj, victim->in_room); if (IS_CLASS(ch, CLASS_WEREWOLF)) { act("A look of concentration passes over $n's face.", ch, NULL, NULL, TO_ROOM); send_to_char ("A look of concentration passes over your face.\n\r", ch); act("$p appears in front of $n in a beam of moonlight.", ch, obj, NULL, TO_ROOM); act("$p appears in front of you in a beam of moonlight.", ch, obj, NULL, TO_CHAR); act("$p appears in front of $n in a beam of moonlight.", victim, obj, NULL, TO_ROOM); act("$p appears in front of you in a beam of moonlight.", ch, obj, victim, TO_VICT); } else { act("$p appears in front of $n.", ch, obj, NULL, TO_ROOM); act("$p appears in front of you.", ch, obj, NULL, TO_CHAR); act("$p appears in front of $n.", victim, obj, NULL, TO_ROOM); act("$p appears in front of you.", ch, obj, victim, TO_VICT); } } return; } void do_newscore(CHAR_DATA * ch, char *argument) { char buf[MAX_STRING_LENGTH]; char tempbuf[MAX_STRING_LENGTH]; char linebuf1[MAX_STRING_LENGTH]; char linebuf2[MAX_STRING_LENGTH]; char linebuf3[MAX_STRING_LENGTH]; char linebuf4[MAX_STRING_LENGTH]; char linebuf5[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; xprintf(linebuf1, " %s\n\r", get_dystopia_banner("Mindcloud 3 Score", 72)); xprintf(linebuf2, " %s\n\r", get_dystopia_banner("Stats", 72)); xprintf(linebuf3, " %s\n\r", get_dystopia_banner("Kill Info", 72)); xprintf(linebuf4, " %s\n\r", get_dystopia_banner("Class/Misc Info", 72)); xprintf(linebuf5, " %s\n\r", get_dystopia_banner("Immortal Info", 72)); send_to_char(linebuf1, ch); send_to_char("\n\r", ch); xprintf(buf, " You are %s #C%s #nand you have been playing for #C%d #nhours\n\r", getCurrRanking( ch, ch->pRank ),ch->name, (ch->played + (int) (current_time - ch->logon)) / 3600); send_to_char(buf, ch); birth_date(ch, TRUE); if (!IS_NPC(ch) && IS_EXTRA(ch, EXTRA_PREGNANT)) birth_date(ch, FALSE); send_to_char("\n\r", ch); xprintf(tempbuf, " STR: #G%3d#n Hitpoints : #C%d#n/#C%d#n", get_curr_str(ch), ch->hit, ch->max_hit); xprintf(buf, "%-55s #uLast two kills#n\n\r", tempbuf); send_to_char(buf, ch); xprintf(tempbuf, " DEX: #G%3d#n Movement : #C%d#n/#C%d#n", get_curr_dex(ch), ch->move, ch->max_move); xprintf(buf, "%-55s #C%s#n\n\r", tempbuf, ch->pcdata->last_decap[0]); send_to_char(buf, ch); xprintf(tempbuf, " CON: #G%3d#n Magics : #C%d#n/#C%d#n", get_curr_con(ch), ch->mana, ch->max_mana); xprintf(buf, "%-55s #C%s#n\n\r", tempbuf, ch->pcdata->last_decap[1]); send_to_char(buf, ch); xprintf(tempbuf, " WIS: #G%3d#n Status : #Y%d#n", get_curr_wis(ch), ch->race); xprintf(buf, "%-51s #uRetaliation#n\n\r", tempbuf); send_to_char(buf, ch); /* xprintf(buf, " INT: #G%3d#n ", get_curr_int(ch)); send_to_char(buf, ch); xprintf(buf, "Bones: #Y%s#n ", num_punct(ch->bones)); send_to_char(buf, ch); xprintf(buf, "\Bank: #Y%s#n\n\r", num_punct(ch->pcdata->bank)); send_to_char(buf, ch); */ xprintf(tempbuf, " INT: #G%3d#n Bones/Bank: #Y%d#n/#G%d#n", get_curr_int(ch), ch->bones, (!IS_NPC(ch) ? ch->pcdata->bank : 0)); xprintf(buf, "%-55s #C%s#n\n\r", tempbuf, ch->pcdata->retaliation); send_to_char(buf, ch); xprintf(tempbuf, " You are currently on Tier #R%d#n", ch->tier); xprintf(buf, "%-47s #uFighting#n\n\r", tempbuf); stc(buf, ch); xprintf(tempbuf, " You have #Y%d #nTier Kills for this tier#n", ch->tks); if (ch->combat == NULL) xprintf(buf, "%-49s #CNo One#n\n\r", tempbuf); else xprintf(buf, "%-49s #C%s#n\n\r", tempbuf, ch->combat->pcdata->switchname); send_to_char(buf, ch); send_to_char(linebuf2, ch); send_to_char("\n\r", ch); xprintf(buf, " Damroll : #C%d#n Hitroll : #C%d#n Armor : #C%d#n Damcap : #C%d#n\n\r", char_damroll(ch), char_hitroll(ch), char_ac(ch), ch->damcap[0]); send_to_char(buf, ch); xprintf(buf, " You are carrying #C%d#n/#C%d#n items with weight #C%d#n/#C%d#n lbs\n\r", ch->carry_number, can_carry_n(ch), ch->carry_weight, can_carry_w(ch)); send_to_char(buf, ch); if (!IS_NPC(ch)) { // xprintf(buf, " Toughness: %d.%d%%", ch->pcdata->damreduct, // ch->pcdata->damreductdec); // send_to_char(buf, ch); xprintf(buf, " Race Level: %d", ch->pcRaceLevel); send_to_char(buf, ch); xprintf(buf, " You are a %s#n member of the bank.", ch->pcdata->membership == 0 ? "#Dbasic" : ch->pcdata->membership == 1 ? "#ybronze" : ch->pcdata->membership == 2 ? "#Wsilver" : ch->pcdata->membership == 3 ? "#Ygold" : "#Wp#Cl#Wa#Ct#Wi#Cn#Wu#Cm#n"); send_to_char(buf, ch); } xprintf(buf, "\n\r Primal : #C%d#n Experience : #C%2.0f#n Faithpoints : #C%d#n/#C%d#n\n\r", ch->practice, ch->exp, ch->pcdata->current_faith, ch->pcdata->faith); send_to_char(buf, ch); xprintf(buf, " Alignment : #C%d#n - ", ch->alignment); send_to_char(buf, ch); /* * class stuff */ if (IS_CLASS(ch, CLASS_DEMON)) { xprintf(buf, " Class Points : #C%d#n Souls : #C%d#n Rage : #C%d#n\n\r", ch->pcdata->stats[DEMON_CURRENT], ch->pcdata->souls, ch->rage); send_to_char(buf, ch); } else if (IS_CLASS(ch, CLASS_DROW)) { xprintf(buf, " Class Points : #C%d#n Magic Resistance : #C%d#n\n\r", ch->pcdata->stats[DEMON_CURRENT], ch->pcdata->stats[DROW_MAGIC]); send_to_char(buf, ch); } else if(IS_CLASS(ch, CLASS_ZOMBIE)){ switch(ch->pcdata->powers[ZOM_LEVEL]){ case 1: stc("#R[#nYou are currently a #0Skeleton#R]#n\n\r",ch); break; case 2: stc("#R[#nYou are currently a #0Wretch#R]#n\n\r",ch); break; case 3: stc("#R[#nYou are currently a #0Zombie#R]#n\n\r",ch); break; case 4: stc("#R[#nYou are currently a #0Minion#R]#n\n\r",ch); break; case 5: stc("#R[#nYou are currently a #0Undead#R]#n\n\r",ch); break; case 6: stc("#R[#nYou are currently a #0Forsaken#R]#n\n\r",ch); break; case 7: stc("#R[#nYou are currently a #0Wight#R]#n\n\r",ch); break; } sprintf(buf, "#R[#nYou have #g%d#n Flesh Points#R]#n\n\r",ch->pcdata->powers[ZOM_FLESH]); stc(buf,ch); if(ch->pcdata->powers[ZOM_LEVEL] >= 6) {sprintf(buf, "#R[#nYou have #r%d#n Corpse Points stored#R]#n\n\r",ch->pcdata->powers[ZOM_ASSIM]); stc(buf,ch);} } else if (IS_CLASS( ch, CLASS_DRAGON)) { sprintf( buf, "#R[#nYou have #g%d#n Dragon Points#R]\n\r", ch->pcdata->stats[DEMON_CURRENT]); send_to_char( buf, ch ); } else if (IS_CLASS( ch, CLASS_DRAGON)) { sprintf(buf, "#R[#nYou are an age #g%d#n Dragon#R]\n\r", ch->pcdata->powers[dragonage]); send_to_char (buf, ch ); } else if (IS_CLASS(ch, CLASS_SHAPESHIFTER)) { xprintf(buf, " Shift Counter : #C%d#n Phase Counter : #C%d#n\n\r", ch->pcdata->powers[SHAPE_COUNTER], ch->pcdata->powers[PHASE_COUNTER]); send_to_char(buf, ch); } else if (IS_CLASS(ch, CLASS_ANGEL)) { xprintf(buf, " Justice : #C%d#n Love : #C%d#n Harmony : #C%d#n Peace : #C%d#n\n\r", ch->pcdata->powers[ANGEL_JUSTICE], ch->pcdata->powers[ANGEL_LOVE], ch->pcdata->powers[ANGEL_HARMONY], ch->pcdata->powers[ANGEL_PEACE]); send_to_char(buf, ch); } if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_ELEMENTAL)) { sprintf(buf,"#R[#rFIRE#n : #C%d#R]#R[#GEARTH#n : #C%d#R]#R[#7AIR#n : #C%d#R]#R[#LWATER#n : #C%d#R]\n\r", ch->pcdata->powers[ELEMENTAL_FIRE], ch->pcdata->powers[ELEMENTAL_EARTH], ch->pcdata->powers[ELEMENTAL_AIR], ch->pcdata->powers[ELEMENTAL_WATER]); stc(buf,ch); } else if (IS_CLASS(ch, CLASS_VAMPIRE)) { xprintf(buf, " Beast : #C%d#n Rage : #C%d#n Blood : #C%d#n\n\r", ch->beast, ch->rage, ch->pcdata->condition[COND_THIRST]); send_to_char(buf, ch); } else if (IS_CLASS(ch, CLASS_WEREWOLF)) { xprintf(buf, " Rage : #C%d#n Gnosis : #C%d#n/#C%d#n\n\r", ch->rage, ch->gnosis[GCURRENT], ch->gnosis[GMAXIMUM]); send_to_char(buf, ch); } else if(!IS_NPC(ch) && IS_CLASS(ch,CLASS_SHINOBI)){ sprintf(buf, "#R[#0Chakra: #C%d#R]\n\r", ch->chakra); stc(buf,ch); } else if (IS_CLASS(ch, CLASS_MONK)) { xprintf(buf, " Block Counter : #C%d#n Chi : #C%d#n/#C%d#n\n\r", ch->monkblock, ch->chi[CURRENT], ch->chi[MAXIMUM]); send_to_char(buf, ch); } else if (IS_CLASS(ch, CLASS_GIANT) || IS_CLASS(ch, CLASS_NINJA) || IS_CLASS(ch, CLASS_TANARRI)) { xprintf(buf, " Class Points : #C%d#n\n\r", ch->pcdata->stats[8]); send_to_char(buf, ch); } send_to_char(" You are ", ch); if (ch->alignment > 900) send_to_char("#Cangelic#n", ch); else if (ch->alignment > 700) send_to_char("#Csai#Yn#Ctly#n", ch); else if (ch->alignment > 350) send_to_char("#Yg#Coo#Yd#n", ch); else if (ch->alignment > 100) send_to_char("#Ykind#n", ch); else if (ch->alignment > -100) send_to_char("#Bneutral#n", ch); else if (ch->alignment > -350) send_to_char("#0mean#n", ch); else if (ch->alignment > -700) send_to_char("#0e#Rvi#0l#n", ch); else if (ch->alignment > -900) send_to_char("#Rdem#0o#Rnic#n", ch); else send_to_char("#Rsatanic#n", ch); send_to_char("\n\r", ch); send_to_char(linebuf3, ch); send_to_char("\n\r", ch); xprintf(tempbuf, " Players : #C%6d#n %s and #C%3d#n %s", ch->pkill, (ch->pkill == 1) ? "kill" : "kills", ch->pdeath, (ch->pdeath == 1) ? "death" : "deaths"); xprintf(buf, "%-50s Ratio #C%3d#n%s\n\r", tempbuf, calc_ratio(ch->pkill, ch->pdeath), "%"); send_to_char(buf, ch); xprintf(tempbuf, " Arena : #C%6d#n %s and #C%3d#n %s", ch->pcdata->awins, (ch->pcdata->awins == 1) ? "kill" : "kills", ch->pcdata->alosses, (ch->pcdata->alosses == 1) ? "death" : "deaths"); xprintf(buf, "%-50s Ratio #C%3d#n%s\n\r", tempbuf, calc_ratio(ch->pcdata->awins, ch->pcdata->alosses), "%"); send_to_char(buf, ch); xprintf(buf, " Monsters : #C%6d#n %s and #C%3d#n %s\n\r", ch->mkill, (ch->mkill == 1) ? "kill" : "kills", ch->mdeath, (ch->mdeath == 1) ? "death" : "deaths"); send_to_char(buf, ch); send_to_char(linebuf4, ch); send_to_char("\n\r", ch); if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_DEMON)) { xprintf(buf, " You have #C%d#n out of #C%d #npoints of demonic power stored.\n\r", ch->pcdata->stats[DEMON_CURRENT], ch->pcdata->stats[DEMON_TOTAL]); send_to_char(buf, ch); } if (!IS_NPC(ch) && (IS_CLASS(ch, CLASS_CYBORG))) { xprintf(buf, " You have #C%d #nCyborg points stored\n\r", ch->pcdata->stats[CYBORG_POWER]); send_to_char(buf, ch); } if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_SHADOW)) { xprintf(buf, " You have #C%d #nShadow Points stored\n\r", ch->pcdata->powers[SHADOW_POWER]); send_to_char(buf, ch); } if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_PRIEST)) { xprintf(buf, " You have #W%d #nFaith Points stored\n\r", ch->pcdata->stats[FAITH_PTS]); send_to_char(buf, ch); } if (!IS_NPC(ch) && (IS_CLASS(ch, CLASS_TANARRI))) { xprintf(buf, " You have #C%d #nTanar'ri points stored\n\r", ch->pcdata->stats[TPOINTS]); send_to_char(buf, ch); } if (!IS_NPC(ch) && (IS_CLASS(ch, CLASS_GHOUL))) { xprintf(buf, " You have #C%d #GGhoul #nPoints stored\n\r", ch->pcdata->stats[GHOUL_PTS]); send_to_char(buf, ch); } if (IS_CLASS(ch, CLASS_GIANT)) { xprintf(buf, " Giant Points : #C%d#n\n\r", ch->pcdata->stats[8]); send_to_char(buf, ch); } if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_DEMON)) { xprintf(buf, " You have obtained #C%d #nsouls, which you keep in a bloody jar\n\r", ch->pcdata->souls); stc(buf, ch); } if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_DROW)) { xprintf(buf, " You have #C%d#n drow power points stored\n\r", ch->pcdata->stats[DROW_POWER]); send_to_char(buf, ch); xprintf(buf, " You have #C%d #npoints of magic resistance\n\r", ch->pcdata->stats[DROW_MAGIC]); send_to_char(buf, ch); if (weather_info.sunlight == SUN_DARK) send_to_char(" You feel strong in the night\n\r", ch); } if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_SHAPESHIFTER)) { xprintf(buf, " Your shapeshifter counter is : #C%d#n\n\r", ch->pcdata->powers[SHAPE_COUNTER]); stc(buf, ch); xprintf(buf, " Your phase counter is : #C%d#n\n\r", ch->pcdata->powers[PHASE_COUNTER]); stc(buf, ch); } if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_ANGEL)) { xprintf(buf, " Angelic Justice : #C%d#n\n\r", ch->pcdata->powers[ANGEL_JUSTICE]); stc(buf, ch); xprintf(buf, " Angelic Love : #C%d#n\n\r", ch->pcdata->powers[ANGEL_LOVE]); stc(buf, ch); xprintf(buf, " Angelic Harmony : #C%d#n\n\r", ch->pcdata->powers[ANGEL_HARMONY]); stc(buf, ch); xprintf(buf, " Angelic Peace : #C%d#n\n\r", ch->pcdata->powers[ANGEL_PEACE]); stc(buf, ch); } if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_SKYBLADE)) { xprintf(buf, " Your dragonx charge is #C%d#n/#C10#n\n\r", ch->pcdata->powers[SKYBLADE_DTIMER]); stc(buf, ch); } if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_VAMPIRE)) { xprintf(buf, " Your current beast is : #C%d#n\n\r", ch->beast); stc(buf, ch); } if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_MONK)) { xprintf(buf, " Your block counter is currently: #C%d#n\n\r", ch->monkblock); stc(buf, ch); xprintf(buf, " Your current level of chi: #C%d#n\n\r", ch->chi[CURRENT]); stc(buf, ch); xprintf(buf, " Your maximum level of chi: #C%d#n\n\r", ch->chi[MAXIMUM]); stc(buf, ch); } if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_SAMURAI)) { xprintf(buf, " Your current focus points: #C%d#n\n\r", ch->focus[CURRENT]); stc(buf, ch); xprintf(buf, " Your maximum focus points: #C%d#n\n\r", ch->focus[MAXIMUM]); stc(buf, ch); } if (!IS_NPC(ch) && (IS_CLASS(ch, CLASS_WEREWOLF)) && ch->gnosis[GMAXIMUM] > 0) { xprintf(buf, " Current Gnosis: #C%d#n\n\r", ch->gnosis[GCURRENT]); stc(buf, ch); xprintf(buf, " Maximum Gnosis: #C%d#n\n\r", ch->gnosis[GMAXIMUM]); stc(buf, ch); } if (!IS_NPC(ch) && ch->pcdata->stage[0] >= 100) send_to_char(" You are feeling extremely horny\n\r", ch); else if (!IS_NPC(ch) && ch->pcdata->stage[0] >= 50) send_to_char(" You are feeling pretty randy#R]\n\r", ch); else if (!IS_NPC(ch) && ch->pcdata->stage[0] >= 1) send_to_char(" You are feeling rather kinky#R]\n\r", ch); if (!IS_NPC(ch) && ch->pcdata->stage[1] > 0 && ch->position == POS_STANDING) { send_to_char(" You are having sexual intercourse\n\r", ch); if (!IS_NPC(ch) && (ch->pcdata->stage[2] + 25) >= ch->pcdata->stage[1]) send_to_char (" You are on the verge of having an orgasm\n\r", ch); } else switch (ch->position) { case POS_DEAD: send_to_char(" You are #RD#0E#RA#0D#n!!\n\r", ch); break; case POS_MORTAL: send_to_char(" You are #Rmortally #nwounded\n\r", ch); break; case POS_INCAP: send_to_char(" You are incapacitated\n\r", ch); break; case POS_STUNNED: send_to_char(" You are stunned\n\r", ch); break; case POS_SLEEPING: send_to_char(" You are sleeping\n\r", ch); break; case POS_RESTING: send_to_char(" You are resting\n\r", ch); break; case POS_MEDITATING: send_to_char(" You are meditating\n\r", ch); break; case POS_SITTING: send_to_char(" You are sitting\n\r", ch); break; case POS_STANDING: send_to_char(" You are standing\n\r", ch); break; case POS_FIGHTING: send_to_char(" You are fighting\n\r", ch); break; } if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_VAMPIRE)) { xprintf(buf, " Blood: #C%d#n\n\r", ch->pcdata->condition[COND_THIRST]); send_to_char(buf, ch); } else if (ch->level >= 0) send_to_char("\n\r", ch); if (IS_AFFECTED(ch, AFF_HIDE)) send_to_char (" You are keeping yourself hidden from those around you\n\r", ch); if (!IS_NPC(ch)) { if (IS_CLASS(ch, CLASS_WEREWOLF) && ch->siltol > 0) { xprintf(buf, " You have attained #C%d #npoints of silver tolerance\n\r", ch->siltol); send_to_char(buf, ch); } if (IS_CLASS(ch, CLASS_VAMPIRE) && ch->rage > 0) { xprintf(buf, " The beast is in control of your actions: Affects Hitroll and Damroll by #C+%d\n\r", ch->rage); send_to_char(buf, ch); } if ((IS_CLASS(ch, CLASS_WEREWOLF)) && IS_SET(ch->special, SPC_WOLFMAN) && ch->rage > 0) { xprintf(buf, " You are raging: Affects Hitroll and Damroll by #C+%d\n\r", ch->rage); send_to_char(buf, ch); } if (IS_CLASS(ch, CLASS_NINJA) && ch->rage > 0) { xprintf(buf, " Your michi gives you an extra #C%d#n hitroll and damroll\n\r", ch->rage); send_to_char(buf, ch); } if (IS_CLASS(ch, CLASS_NINJA) && ch->pcdata->powers[NPOWER_CHIKYU] >= 6 && ch->pcdata->powers[HARA_KIRI] > 0) { xprintf(buf, " You receive the power of HaraKiri for #C%d#n more ticks\n\r", ch->pcdata->powers[HARA_KIRI]); send_to_char(buf, ch); } if (!IS_CLASS(ch, CLASS_WEREWOLF) && !IS_CLASS(ch, CLASS_VAMPIRE) && ch->rage > 0 && !IS_CLASS(ch, CLASS_NINJA)) { xprintf(buf, " You are in a mad frenzy, adding #C%d#n Hitroll and Damroll\n\r", ch->rage); stc(buf, ch); } else if (IS_CLASS(ch, CLASS_DEMON) && ch->pcdata->stats[DEMON_POWER] > 0) { xprintf(buf, " You are wearing demonic armour: Affects Hitroll and Damroll by #C+%d\n\r", ((ch->pcdata->stats[DEMON_POWER]) * ch->pcdata->stats[DEMON_POWER])); send_to_char(buf, ch); } else if (IS_CLASS(ch, CLASS_DROW) && ch->pcdata->stats[DEMON_POWER] > 0) { xprintf(buf, " You are wearing drow armour: Affects Hitroll and Damroll by #C+%d\n\r", ((ch->pcdata->stats[DEMON_POWER]) * ch->pcdata->stats[DEMON_POWER])); send_to_char(buf, ch); } } if (ch->fight_timer > 0) { xprintf(buf, " You have #C%d#n rounds left on your fight timer#n\n\r", ch->fight_timer); send_to_char(buf, ch); } if (ch->pcdata->logout_counter > 0) { xprintf(buf, " You have #C%d#n rounds left until you can LOGOUT#n\n\r", ch->pcdata->logout_counter); send_to_char(buf, ch); } if (IS_IMMORTAL(ch)) { send_to_char(linebuf5, ch); send_to_char("\n\r", ch); xprintf(buf, " #nInvis: #C%3d#n Incog Level: #C%d#n Ghost Level #C%3d#n\n\r", ch->invis_level, ch->incog_level, ch->ghost_level); stc(buf, ch); } return; }