#include <stdlib.h> #include <unistd.h> #include <ctype.h> #include <time.h> #include "kernel.h" #include "locations.h" #include "objects.h" #include "mobiles.h" #include "group.h" #include "quests.h" #include "sendsys.h" #include "levels.h" #include "commands.h" #include "rooms.h" #include "objsys.h" #include "mobile.h" #include "bprintf.h" #include "parse.h" #include "uaf.h" #include "clone.h" #include "acct.h" #include "mud.h" #include "fight.h" #include "zones.h" #include "log.h" #include "wizlist.h" #include "climate.h" #include "mail.h" #include "mud.h" #include "timing.h" #include "mobdesc.h" #include "xrscore.h" #include "files.h" #include "move.h" #include "update.h" extern char *scorpse[]; extern void wipe_duration(int); static Boolean find_stuff (int s, int o, char *t); int help (int, long int[], char *); #define SECS_IN_A_MIN 60 void flushcom(void) { int obj; if ((obj = ob1) == -1) { bprintf ("That isn't here.\n"); return; } #ifdef LOCMIN_PLAYHOUSE if (obj == OBJ_PLAYHOUSE_TOILET) { if (plev (mynum) < LVL_ENCHANTER) setpscore (mynum, pscore (mynum) + 10); setobjstate (OBJ_PLAYHOUSE_TOILET, 0); bprintf ("You flush the toilet. Wow! Look at the pretty &+Bblue &*water!\n"); broad ("You hear a &+WPorcelain God &*gargling in the distance.\n"); return; } #endif bprintf ("You can't flush that!\n"); } void awaymsgcom(void) { char txt[MAX_COM_LEN]; getreinput (txt); if( EMPTY(txt) ) { bprintf( "Away message removed\n" ); FREE( pawaymsg(mynum)); return; } FREE( pawaymsg(mynum) ); pawaymsg(mynum) = COPY( txt ); bprintf( "Away message set to: %s\n", txt ); if (check_away (mynum)) { send_msg (DEST_ALL, 0, pvis (mynum), LVL_MAX, mynum, NOBODY, "&+G[&+W%s &*has changed %s away message:&+G]\n&+G[&N%s&+G]\n", pname (mynum), his_or_her (mynum), pawaymsg(mynum)); } return; } void bashcom(void) { } void backstabcom(void) { if (pclass(mynum) != THIEF) bprintf("For thiefs only, sorry.\n"); else if (plev(mynum) < 4) bprintf("You don't have enough experience to pull it off.\n"); else if (pfighting(mynum) != -1) bprintf("How can you sneak up? You're already fighting!\n"); else { if (seeplrhere("Backstab who?", "I don't know who that is.") == -1); else if (ltstflg(ploc(mynum), LFL_PEACEFUL)) bprintf("Sorry, it's too peaceful here.\n"); else if (pl1 == mynum) bprintf("Nhilistic!\n"); else if (pstr(pl1) < 0) bprintf("They are already dead.\n"); else { if (randperc() + plev(mynum) * 2 > 50) { bprintf("You plummet your hidden knife deep into %s's back.\n", pname(pl1)); setpstr(pl1, pstr(pl1) - 20 + plev(mynum)); } if (pl1 > max_players) { setpangry(pl1, mynum); setpangry(mynum, pl1); } hit_player(pl1, mynum, pwpn(mynum)); } } } void pickcom(void) { if (pclass(mynum) != THIEF) bprintf("You can't pick locks... you're not a thief!\n"); else if (plev(mynum) < 6) bprintf("You're not quite up to this yet.\n"); else if (oloc(ob1) != ploc(mynum)) bprintf("It's not here.\n"); else if (ob1 == -1) bprintf("You can't pick that!\n"); else if (state (ob1) == 2) bprintf ("It's already unlocked.\n"); else { if (randperc() + plev(mynum) * 4 > 84) { bprintf("The door flies open!\n"); setobjstate (ob1, 0); } else bprintf("Your attempt fails.\n"); } } void sneakcom(void) { if (pclass(mynum) != THIEF) bprintf("You're not quiet enough! Thiefs only!\n"); else if (!has_foot(mynum)) bprintf("You can't sneak too well without feet.\n"); else if (plev(mynum) < 10) bprintf("You can't sneak yet.\n"); else if (!*item1) bprintf("Sneak where exactly?\n"); else { if (randperc() + plev(mynum) * 4 > 84) { bprintf("You sneak!\n"); dogocom(True); } else { bprintf("You don't feel too sneaky...\n"); dogocom(False); } } } void fillcom(void) { bprintf( "Not implemented yet.\n" ); return; } void rubcom(void) { int a; if(!item1[0]) { bprintf("What do you want to rub!?!\n"); return; } if ((a = fmbn(item1)) != -1) { if (a == mynum) { bprintf("You rub yourself!\n"); return; } if (ploc(a) != ploc(mynum) && plev(mynum) < LVL_WIZARD) { bprintf("They aren't here.\n"); return; } bprintf("You give %s a nice soothing back massage!\n", pname(a)); send_msg(sendloc(mynum), 0, pvis(mynum), LVL_MAX, mynum, a, "%s gives %s a nice soothing back massage!\n", pname(mynum), pname(a)); sendf(a, "%s gives you a nice soothing back massage!\n", pname(mynum)); return; } if ((a = ob1) == -1) { bprintf("What on %s is a %s?!?\n", MUD_NAME, item1); return; } bprintf("You vigorously rub the %s and...\n", oname(a)); send_msg(sendloc(mynum), 0, pvis (mynum), LVL_MAX, mynum, NOBODY, "%s vigorously rubs the %s.\n", pname (mynum), oname (a)); /* wiz+ can rub to light burnable objects. :) */ if( plev(mynum) >= LVL_WIZARD && otstbit(a, OFL_LIGHTABLE) && !otstbit(a, OFL_LIT)) { bprintf("It bursts into &+Yflames&N!\n"); sillycom("And it bursts into &+Yflames&N!\n"); setobjstate(a, 0); osetbit(a, OFL_LIT); return; } switch(a) { default: bprintf("Nothing happens!\n"); break; } return; } void lookcom (void) { int a; if (brkword () == -1) lookin (ploc (mynum), SHOW_LONG); else { if (EQ (wordbuf, "at")) examcom(); else if (!EQ (wordbuf, "in") && !EQ (wordbuf, "into")) bprintf ("I don't understand. Are you trying to LOOK, LOOK AT, " "or LOOK IN something?\n"); else if (EMPTY (item1)) bprintf ("In what?\n"); else if ((a = ob1) == -1) bprintf ("What's that?\n"); else if (0 #ifdef LOCMIN_BLIZZARD || a == OBJ_BLIZZARD_TUBE #endif #ifdef LOCMIN_TREEHOUSE || a == OBJ_TREEHOUSE_BEDDING #endif #ifdef LOCMIN_ORCHOLD || a == OBJ_ORCHOLD_TOPCOVER #endif ) { strcpy (item1, item2); ob1 = ob2; examcom (); } else if (!otstbit (a, OFL_CONTAINER)) bprintf ("That isn't a container.\n"); else if (otstbit (a, OFL_OPENABLE) && state (a) != 0) bprintf ("It's closed!\n"); else { bprintf ("The %s contains:\n", oname (a)); aobjsat (a, IN_CONTAINER, 8); } } } static Boolean find_stuff (int s, int o, char *t) { if (odamage (s) == 0) { osetdamage (s, 1); bprintf (t); create (o); setoloc (o, ploc (mynum), IN_ROOM); return True; } return False; } void examcom (void) { int a, tabnum; #if defined(LOCMIN_TOWER) || defined(LOCMIN_BLIZZARD) int foo, z; #endif FILE *x; char *t; char text[80]; if (!item1[0]) { bprintf ("Examine what?\n"); return; } if ((a = pl1) != -1 && ploc (a) == ploc (mynum)) { if (pstr (a) < 1) { time_t cur_time; int t_elapsed, p; char buff[100]; time(&cur_time); t_elapsed = cur_time - ublock[a - max_players].death_time; if (t_elapsed < 2 * SECS_IN_A_MIN) p = 0; else if (t_elapsed < 5 * SECS_IN_A_MIN) p = 1; else if (t_elapsed < 8 * SECS_IN_A_MIN) p = 2; else if (t_elapsed < 11 * SECS_IN_A_MIN) p = 3; else if (t_elapsed < 15 * SECS_IN_A_MIN) p = 4; else if (t_elapsed < 20 * SECS_IN_A_MIN) p = 5; else return; sprintf(buff, "&+W%s\n", scorpse[p]); bprintf(buff, pname(a)); return; } if (a >= max_players && (t = pexam(a)) != NULL) bprintf ("%s\n", t); else { if (a != mynum) sendf (a, "%s examines you closely.\n", pname (mynum)); sprintf (text, "%s/%s", DESC_DIR, pname (a)); if ((x = FOPEN(text, "r")) != NULL) { FCLOSE(x); bprintf ("\001f%s\003", text); } } if (a >= max_players) { for(tabnum = 0; tabnum < 5; tabnum++) { if(pstr_reset(a) + 25 * pdam(a) < MobRanges[tabnum]) break; } pmess(a, False); bprintf(MobDesc[tabnum], he_or_she(a)); if (pwpn(a) != -1) bprintf("&+Wo&+y %s is wielding a weapon\n", he_or_she(a)); if (pac(a) > 0) bprintf("&+Wo&+y %s is wearing some armor\n", he_or_she(a)); } return; } if ((a = ob1) == -1) { bprintf("You see nothing special.\n"); return; } else if (oloc(a) != ploc(mynum) && oloc(a) != mynum) { bprintf("The %s is not here.\n", oname(a)); return; } send_msg(sendloc(mynum), 0, pvis (mynum), LVL_MAX, mynum, NOBODY, "%s examines the %s closely.\n", pname (mynum), oname (a)); /* Checks the cloned object */ #ifdef LOCMIN_BLIZZARD if (strncasecmp(ozname(a), "scroll", 6) && EQ(zname(ozone(a)), "blizzard")) { #ifdef LOCMIN_CATACOMB if (iscarrby (OBJ_CATACOMB_CUPSERAPH, mynum)) { bprintf ("Funny, I thought this was a teleport scroll, but " "nothing happened.\n"); return; } #endif bprintf ("As you read the scroll you are teleported!\n"); destroy (a); teletrap (LOC_BLIZZARD_PENTACLE); return; } #endif switch (a) { #include "examcom.h" #ifdef LOCMIN_ANCIENT case OBJ_ANCIENT_SKYMAP: if (ploc (mynum) == LOC_ANCIENT_ANC53) { bprintf ("You feel like you are flying....\n" " ....and land on a desolate planet," "obviously far from the sun.\n\n\n"); trapch (LOC_ANCIENT_ANC56); } else bprintf ("You ain't lost, Mac... yet!\n"); break; case OBJ_ANCIENT_LBOOK: if (oarmor (a) > 0) bprintf ("The Book contains old writings. You can make out\n" "the names of old mages like 'Elmo' and 'Infidel'.\n"); else { bprintf ("Ancient wisdom fills your head, you feel much more capable...\n"); osetarmor (a, 1); } break; #endif #ifdef LOCMIN_EFOREST case OBJ_EFOREST_TREE: if (odamage (a) == 0) { osetdamage (a, 1); bprintf ("You find a door in the tree.\n"); setobjstate (a, 0); return; } break; case OBJ_EFOREST_DESK: if (find_stuff (OBJ_EFOREST_DESK, OBJ_EFOREST_BUTTON, "You find a button hidden in a recess of the desk.\n")) return; break; case OBJ_EFOREST_THRONE_WOOD: if (find_stuff (OBJ_EFOREST_THRONE_WOOD, OBJ_EFOREST_CROWN, "You find a crown hidden under the throne.\n")) return; break; case OBJ_EFOREST_COAT: if (find_stuff (OBJ_EFOREST_COAT, OBJ_EFOREST_COIN, "You find a coin in the pocket.\n")) return; break; case OBJ_EFOREST_TABLE: if (find_stuff (OBJ_EFOREST_TABLE, OBJ_EFOREST_GAUNTLETS, "You find some gauntlets admidst the rubble " "of this table.\n")) /* ; */ return; break; case OBJ_EFOREST_PAINTING: if (find_stuff (OBJ_EFOREST_PAINTING, OBJ_EFOREST_NOTE, "There was a note behind the painting.\n")) return; break; case OBJ_EFOREST_CHAIR: if (find_stuff (OBJ_EFOREST_CHAIR, OBJ_EFOREST_RING, "A ring was between the cushions of that chair!\n")) return; break; case OBJ_EFOREST_RACK: if (find_stuff (OBJ_EFOREST_RACK, OBJ_EFOREST_SCARAB, "You found a scarab in the rack.\n")) return; break; case OBJ_EFOREST_PAPERS: if (find_stuff (OBJ_EFOREST_PAPERS, OBJ_EFOREST_TREATY, "Among the papers, you find a treaty.\n")) return; break; case OBJ_EFOREST_DESK_LICH: if (find_stuff (OBJ_EFOREST_DESK_LICH, OBJ_EFOREST_EMERALD, "Inside the desk is a beautiful emerald.\n")) return; break; case OBJ_EFOREST_ALTAR: if (find_stuff (OBJ_EFOREST_ALTAR, OBJ_EFOREST_STATUE, "Inside the altar is a statue of a dark elven deity.\n")) return; break; case OBJ_EFOREST_MATTRESS: if (find_stuff (OBJ_EFOREST_MATTRESS, OBJ_EFOREST_PURSE, "Hidden under the mattress is a purse.\n")) return; break; case OBJ_EFOREST_TRASH: if (find_stuff (OBJ_EFOREST_TRASH, OBJ_EFOREST_TRASH_COIN, "In the trash is a silver coin.\n")) return; break; #endif #if defined(LOCMIN_ISLAND) && defined(LOCMIN_LABARYNTH) case OBJ_ISLAND_BONE: bprintf ("There is a flash and you are teleported...\n"); setploc (mynum, LOC_LABYRINTH_K); lookin (ploc (mynum), 0); return; break; #endif #ifdef LOCMIN_BLIZZARD case OBJ_BLIZZARD_PLATFORM_ALTAR: if (state (OBJ_BLIZZARD_ALTAR) == 1) { bprintf ("You see nothing special.\n"); return; } else break; case OBJ_BLIZZARD_BRICK: if (state (OBJ_BLIZZARD_ALTAR) == 1) { bprintf ("You see nothing special.\n"); return; } else { break; } #endif #ifdef LOCMIN_RUINS case OBJ_RUINS_SCROLL: #endif #ifdef LOCMIN_BLIZZARD case OBJ_BLIZZARD_LITTABLET: #endif #ifdef LOCMIN_RUINS case OBJ_RUINS_RUNES: case OBJ_RUINS_DAMAGERUNES: #endif #if defined(LOCMIN_RUINS) || defined(LOCMIN_BLIZZARD) || defined(LOCMIN_RUINS) bprintf("Hmm... nothing too special about this object.\n"); return; #endif #ifdef LOCMIN_BLIZZARD case OBJ_BLIZZARD_TUBE: if (oarmor (a) == 0) { int obj = clone_object (OBJ_BLIZZARD_SCROLL, -1, NULL, mynum, CARRIED_BY); if (obj >= 0) { osetarmor (a, 1); bprintf ("You take a scroll from the tube.\n"); return; } } break; case OBJ_BLIZZARD_BLACKROBE: if (oarmor (a) == 0) { int obj = clone_object (OBJ_BLIZZARD_KEY, -1, NULL, mynum, CARRIED_BY); if (obj >= 0) { bprintf ("You take a key from one pocket.\n"); osetarmor (a, 1); return; } } break; case OBJ_BLIZZARD_BALL: setobjstate (a, randperc () % 3 + 1); switch (state (a)) { case 1: bprintf ("It glows red."); break; case 2: bprintf ("It glows blue."); break; case 3: bprintf ("It glows green."); break; } bprintf ("\n"); return; #endif #ifdef LOCMIN_TOWER case OBJ_TOWER_WAND: if (oarmor (a) != 0) { bprintf ("It seems to be charged.\n"); return; } break; case OBJ_TOWER_SCROLL: foo = -1; #ifdef LOCMIN_BLIZZARD foo = carries_obj_type (mynum, OBJ_BLIZZARD_BALL); #endif if (foo < 0) foo = OBJ_BLIZZARD_BALL; if (((z = carries_obj_type (mynum, OBJ_TOWER_RED_CANDLE)) > -1 && state (foo) == 1 && otstbit (z, OFL_LIT)) || ((z = carries_obj_type (mynum, OBJ_TOWER_BLUE_CANDLE)) > -1 && state (foo) == 2 && otstbit (z, OFL_LIT)) || ((z = carries_obj_type (mynum, OBJ_TOWER_GREEN_CANDLE)) > -1 && state (foo) == 3 && otstbit (z, OFL_LIT))) { bprintf ("Everything shimmers and then solidifies into a different " "view!\n"); destroy (a); teletrap (LOC_TOWER_POTION); return; } break; #endif #ifdef LOCMIN_VALLEY case OBJ_VALLEY_BED: if (!odamage (a)) { int c = clone_object (OBJ_VALLEY_LOAF, -1, NULL, mynum, CARRIED_BY); int b = clone_object (OBJ_VALLEY_PIE, -1, NULL, mynum, CARRIED_BY); if (c >= 0 && b >= 0) { bprintf ("Aha! Under the bed you find a loaf and a " "rabbit pie.\n"); osetdamage (a, 1); return; } } break; #endif #ifdef LOCMIN_ORCHOLD case OBJ_ORCHOLD_GARBAGE: if (state (a) == 0) { int x = clone_mobile (max_players + MOB_ORCHOLD_MAGGOT, -1, NULL); if (x >= 0) { bprintf ("In the garbage you find a gold plate... " "with a maggot on it!\n"); sillycom ("\001s%s\003A maggot leaps out of the garbage " "onto %s!\n\003"); setploc (x, ploc (mynum)); /* Make sure maggot attacks the right person. */ hit_player (x, mynum, -1); setobjstate (a, 1); } else { bprintf ("In the garbage you find a gold plate with some " "slime on it.\n"); } x = clone_object(OBJ_ORCHOLD_ORCGOLD, -1, NULL, mynum, CARRIED_BY); if (x > -1) setobjstate (a, 1); return; } break; #endif #ifdef LOCMIN_TREEHOUSE case OBJ_TREEHOUSE_BEDDING: if (a != OBJ_TREEHOUSE_BEDDING) break; if (!odamage (OBJ_TREEHOUSE_AMULET)) { create (OBJ_TREEHOUSE_AMULET); bprintf ("You pull an amulet from the bedding.\n"); osetdamage (OBJ_TREEHOUSE_AMULET, 1); return; } break; #endif #ifdef LOCMIN_OAKTREE case OBJ_OAKTREE_BOARSKIN: if (a != OBJ_OAKTREE_BOARSKIN) break; if (!odamage (OBJ_OAKTREE_WHISTLE)) { create (OBJ_OAKTREE_WHISTLE); bprintf ("Under the boarskin you find a silver whistle.\n"); osetdamage (OBJ_OAKTREE_WHISTLE, 1); return; } break; #endif } bprintf("%s\n", oexam_text(a)); } void incom (Boolean inv) { int x, y; char st[MAX_COM_LEN]; if (!ptstflg (mynum, PFL_GOTO)) { /* Mortals who doesn't have goto will assume that in = inventory... */ /* Thus hiding the fact that there IS a command called in... */ /* Must fix it so that at this should only be the case when IN is used */ /* and not when AT is used */ /* old: erreval(); */ if (inv) inventory (); else bprintf ("Pardon?\n"); return; } if ((x = getroomnum ()) == 0 || !exists (x)) { bprintf ("Unknown player or room.\n"); return; } getreinput (st); if (EQ (st, "!")) { bprintf ("What exactly do you want to do?\n"); return; } if (ltstflg (x, LFL_NOAT) && !ptstflg (mynum, PFL_IGNORENOAT)) { bprintf ("Something won't let you do that in that location.\n"); return; } y = ploc (mynum); setploc (mynum, x); gamecom (st, False); setploc (mynum, y); } /* reset stone */ void sys_reset (void) { int i; int time = RESET_IDLE; for (i = 0; i < max_players; i++) { if (is_in_game (i) && plev (i) < LVL_WIZARD && ploc (i) != ploc (mynum) && global_clock > plast_cmd (i) - time) { bprintf ("There are other players on who are not at this location," " so it won't work.\n"); return; } } if (last_reset < global_clock && global_clock < last_reset + 3600) { bprintf ("Sorry, at least an hour must pass between resets.\n"); return; } resetcom (0); } void resetcom (int flags) { int zone, nlocs, nobjs, nmobs; if ((flags & RES_TEST) && !ptstflg (mynum, PFL_RESET)) { erreval (); return; } if (brkword () != -1 && plev (mynum) >= LVL_WIZARD) { if ((zone = get_zone_by_name (wordbuf)) == -1) { bprintf ("&*No such zone: &+W%s\n", wordbuf); return; } send_msg (DEST_ALL, 0, LVL_WIZARD, LVL_MAX, mynum, NOBODY, "&+C[&+W\001p%s\003 &+whas reset zone &+W%s&+C]\n", pname(mynum), zname (zone)); mudlog ("&+WSYSTEM:&N Reset by %s (Zone: %s)", pname(mynum), zname(zone)); nlocs = znumloc (zone); nobjs = znumobs (zone); nmobs = znumchars (zone); reset_zone (zone); bprintf ("&*Zone &+W%s&*: Reset Completed.\n", zname (zone)); } else { /* normal full game reset */ if (plev(mynum) > LVL_WIZARD) { send_msg (DEST_ALL, 0, LVL_WIZARD, LVL_MAX, NOBODY, NOBODY, "&+C[&+wReset Called by &+W\001p%s\003&+C]\n", pname (mynum)); send_msg (DEST_ALL, 0, LVL_MIN, LVL_WIZARD - 1, NOBODY, NOBODY, "&+C[&+wReset Called&+C]\n"); confirm_reset(NULL); return; } else { send_msg (DEST_ALL, 0, LVL_WIZARD, LVL_MAX, NOBODY, NOBODY, "&+C[&+wReset at the Stone by &+W\001p%s\003&+C]\n",pname(mynum)); send_msg (DEST_ALL, 0, LVL_MIN, LVL_WIZARD - 1, NOBODY, NOBODY, "&+C[&+wReset Called&+C]\n"); reset(); } } } void reset(void) { int i; last_reset = global_clock; qdresetflgs(); for (i = 0 ; i < max_players ; i++) /* set armors which are Worn */ if (is_in_game(i)) reset_armor(False, i); if (breset) { broad ("&+C[&NSystem Rebooting&+C]\n"); run_reboot (False, False); } mudlog ("&+WSYSTEM:&N Reset by %s", pname (mynum)); for (i = 0; i < numzon; i++) reset_zone (i); qdresetflgs(); move_pouncie(); scatter_potions(); ++numresets; broad ("&+C[&+wReset Completed&+C]\n"); } void confirm_reset(char *input) { Boolean clean_up = False; if (input == NULL) { strcpy(cur_player->cprompt, "Confirm reset (y/n)? "); push_input_handler(confirm_reset); return; } else if (tolower(*input) == 'y') { broad ("&+C[&+wReset Confirmed&+C]\n"); reset(); clean_up = True; } else if (tolower(*input) == 'n') { broad ("&+C[&+wReset Cancelled&+C]\n"); clean_up = True; } else bprintf("Please answer yes or no.\n"); if (clean_up) { strcpy(cur_player->cprompt, build_prompt(mynum)); pop_input_handler(); return; } replace_input_handler(confirm_reset); } void unveilcom (char *unv_pass) { char buff[PASSWD_LEN]; int lev; if (!isawiz(mynum)) { erreval (); return; } if (unv_pass == NULL) { if (brkword () == -1) cur_player->work = LVL_CREATOR; else cur_player->work = atoi (wordbuf); bprintf("\n\001R\003"); strcpy (cur_player->cprompt, "Magic Word: "); push_input_handler (unveilcom); } else { bprintf ("\001E\003"); pop_input_handler (); my_crypt(buff, unv_pass); if (strcmp(buff, UNVEIL_PASS)) { bprintf ("Eek! Go away!&#\n"); mudlog ("UNVEIL (BAD): %s", pname (mynum)); } else { lev = cur_player->work; if (lev >= LVL_MAX) { mudlog ("UNVEIL (WRONG): %s to %d", pname (mynum), plev (mynum)); bprintf ("The maximum level is %d.\n", LVL_MAX - 1); } else { set_xpflags(mbits(mynum), lev); setplev (mynum, lev); update_wizlist (pname (mynum), wlevel (lev)); mudlog ("UNVEIL: %s to %d", pname (mynum), plev (mynum)); bprintf ("Certainly, master!\n"); } } get_command (NULL); } } void reviewcom (void) { char xx[SETIN_MAX + 200]; static PERSONA p; int x; Boolean me = False; PLAYER_REC *v = NULL; char *name = NULL; if (brkword () == -1 || EQ (wordbuf, pname (mynum))) { me = True; v = cur_player; x = mynum; name = pname(mynum); } else if (plev (mynum) < LVL_WIZARD) { erreval (); return; } else if ((x = fpbn(wordbuf)) >= 0 && plev (x) >= LVL_WIZARD) { v = players + x; name = pname(x); } else if (getuaf (wordbuf, &p) && p.ublock.plev >= LVL_WIZARD) { v = &p.player; name = p.ublock.pname; } else { bprintf ("I know no wizard with the name '%s'.\n", wordbuf); return; } if (!me) bprintf(" &-RTravel Messages for %s", name); else bprintf (" &-RCurrent Travel Messages"); bprintf ("\n&+YCommand &+BSetting\n------------------------" "-------------------------------------------------------\n"); if (v->setin) bprintf ("&+WSETIN&N : %s\n", build_setin (SETIN_SETIN, xx, v->setin, name, NULL, NULL)); else bprintf ("&+WSETIN&N : Special system default.\n"); if (v->setout) bprintf ("&+WSETOUT&N : %s\n", build_setin (SETIN_SETOUT, xx, v->setout, name, "<dir>", NULL)); else bprintf ("&+WSETIN&N : Special system default.\n"); bprintf ("&+WSETMIN&N : %s\n", build_setin (SETIN_SETMIN, xx, v->setmin, name, NULL, NULL)); bprintf ("&+WSETMOUT&N : %s\n", build_setin (SETIN_SETMOUT, xx, v->setmout, name, NULL, NULL)); bprintf ("&+WSETVIN&N : %s\n", build_setin (SETIN_SETVIN, xx, v->setvin, name, NULL, NULL)); bprintf ("&+WSETVOUT&N : %s\n", build_setin (SETIN_SETVOUT, xx, v->setvout, name, NULL, NULL)); bprintf ("&+WSETQIN&N : %s\n", build_setin (SETIN_SETQIN, xx, v->setqin, name, NULL, NULL)); bprintf ("&+WSETQOUT&N : %s\n", build_setin (SETIN_SETQOUT, xx, v->setqout, name, NULL, NULL)); bprintf ("&+WSETSIT&N : %s\n", build_setin (SETIN_SETSIT, xx, v->setsit, name, NULL, NULL)); bprintf ("&+WSETSTND&N : %s\n", build_setin (SETIN_SETSTAND, xx, v->setstand, name, NULL, NULL)); bprintf ("&+WSETSUM&N : %s\n", build_setin (SETIN_SETSUM, xx, v->setsum, name, NULL, NULL)); bprintf ("&+WSETSIN&N : %s\n", build_setin (SETIN_SETSUMIN, xx, v->setsumin, name, NULL, "<victim>")); bprintf ("&+WSETSOUT&N : %s\n", build_setin (SETIN_SETSUMOUT, xx, v->setsumout, name, NULL, "<victim>")); bprintf ("&+WPROMPT&N : %s\n", build_prompt(x)); } void sitcom (void) { if (psitting (mynum)) { bprintf ("You're already sitting.\n"); return; } else if (pfighting (mynum) >= 0) { bprintf ("You want to sit down while fighting? Do you have a death " "wish or something?\n"); return; } else { bprintf ("You assume the lotus position.\n"); send_msg(sendloc(mynum), 0, pvis (mynum), LVL_MAX, mynum, NOBODY, "%s sits down.\n", pname (mynum)); setpsitting (mynum, 1); } #ifdef LOCMIN_ICECAVE if (ploc (mynum) == LOC_ICECAVE_THRONE) { if (oloc (OBJ_ICECAVE_WESTICETHRONE)) { bprintf ("The throne collapses under your weight, revealing a " "passage east.\n"); setobjstate (OBJ_ICECAVE_WESTICETHRONE, 0); return; } } #endif } void ringcom (void) { switch (ob1) { #ifdef LOCMIN_VILLAGE case OBJ_VILLAGE_BELL: broad ("There is an almighty &+WBONG&*!\n"); break; #endif default: bprintf ("You can't ring that.\n"); break; } } void standcom (int player) { if (!psitting (player)) { sendf (player, "You're already standing.\n"); return; } else { sendf (player, "You clamber to your feet.\n"); send_msg(sendloc(player), 0, pvis (player), LVL_MAX, player, NOBODY, "%s clambers to %s feet.\n", pname (player), his_or_her (player)); setpsitting (player, 0); } } void pncom (void) { int plx = real_mynum; char *p; if (pl1 == -1) bprintf("Current pronouns are:\n"); else if (pl1 > max_players) bprintf("That's a mobile.\n"); else { plx = pl1; bprintf("Current pronouns for %s are:\n", pname (plx)); } bprintf("Me : %s\n", pname (plx)); bprintf("It : %s\n", (p = wd_it(plx)) == NULL ? "<none>" : p); bprintf("Him : %s\n", (p = wd_him(plx)) == NULL ? "<none>" : p); bprintf("Her : %s\n", (p = wd_her(plx)) == NULL ? "<none>" : p); bprintf("Them : %s\n", (p = wd_them(plx)) == NULL ? "<none>" : p); } void bugcom (void) { char x[MAX_COM_LEN]; getreinput (x); if (EMPTY (txt1)) { bprintf ("What do you want to bug me about?\n"); } else { mudlog ("BUG: %s - %s", pname (mynum), x); bprintf ("Thank you for reporting a bug.\n"); } } void suggestcom (void) { char x[MAX_COM_LEN]; getreinput (x); if (EMPTY (txt1)) { bprintf ("What would you like to suggest?\n"); } else { mudlog ("SUGGEST: %s - %s", pname (mynum), x); bprintf ("Thank you for your suggestion. We appreciate feedback.\n"); } } void typocom (void) { int l = ploc (mynum); char x[MAX_COM_LEN]; getreinput (x); if (EMPTY (x)) { bprintf ("What typo do you wish to inform me of?\n"); } else { mudlog ("TYPO: %s (%s): %s", pname (mynum), showname (l), x); bprintf ("Ok.\n"); } } void helpcom (void) { int a, b; if (*item1 != 0) { if (help(plev(mynum), mbits(mynum), item1) < 0) return; if ((a = vichere ()) < 0) return; if ((b = phelping (mynum)) >= 0) { sendf(b, "\001p%s\003 stopped helping you.\n", pname(mynum)); bprintf ("Stopped helping \001p%s\003.\n", pname (b)); } if (a == mynum) { bprintf ("You are beyond help.\n"); return; } setphelping (mynum, a); sendf(a, "\001p%s\003 has offered to help you.\n", pname(mynum)); bprintf ("Started helping \001p%s\003.\n", pname (phelping (mynum))); return; } bprintf ("\001f%s/%s\003", HELP_DIR, HELP1); if (plev (mynum) < LVL_WIZARD) { return; } strcpy (cur_player->cprompt, qwait); replace_input_handler (help2); } void help2 (char *cont) { if (tolower(*cont) == 'q') get_command (NULL); else { bprintf ("\001f%s/%s\003\n", HELP_DIR, HELP2); if (plev (mynum) < LVL_ISTARI) get_command (NULL); else replace_input_handler (help3); } } void help3 (char *cont) { if (tolower(*cont) == 'q') get_command (NULL); else { bprintf ("\001f%s/%s\003\n", HELP_DIR, HELP3); if (plev (mynum) < LVL_ARCHWIZARD) get_command (NULL); else replace_input_handler (help4); } } void help4 (char *cont) { if (tolower(*cont) == 'q') get_command (NULL); else { bprintf ("\001f%s/%s\003\n", HELP_DIR, HELP4); if (plev (mynum) < LVL_DEMI) get_command (NULL); else replace_input_handler (help5); } } void help5 (char *cont) { if (tolower(*cont) == 'q') get_command (NULL); else { bprintf ("\001f%s/%s\003\n", HELP_DIR, HELP5); if (plev (mynum) < LVL_SHALAFI) get_command (NULL); else replace_input_handler (help6); } } void help6 (char *cont) { if (tolower(*cont) == 'q') get_command (NULL); else { bprintf ("\001f%s/%s\003\n", HELP_DIR, HELP6); if (plev (mynum) < LVL_GOD) get_command (NULL); else replace_input_handler (help7); } } void help7 (char *cont) { if (tolower(*cont) == 'q') get_command (NULL); else { bprintf ("\001f%s/%s\003\n", HELP_DIR, HELP7); get_command (NULL); } } void qinfocom (void) { char file[100]; if (brkword () == -1) { strcpy (file, QINFO_DIR "/" QINFO); } else { if (strlen (wordbuf) >= (sizeof (file) - 10)) { bprintf ("No info available on that topic.\n"); return; } sprintf (file, "%s/%s.qinfo", QINFO_DIR, lowercase (wordbuf)); if (access (file, R_OK) < 0) { bprintf ("No info available on that topic.\n"); return; } } bprintf("\001f%s\003", file); } /* The INFO command. */ void infocom (void) { char file[100]; if (brkword () == -1) { strcpy (file, INFO_DIR "/" INFO); } else { if (strlen (wordbuf) >= (sizeof (file) - 10)) { bprintf ("No info available on that topic.\n"); return; } sprintf (file, "%s/%s.i", INFO_DIR, lowercase (wordbuf)); if (access (file, R_OK) < 0) { bprintf ("No info available on that topic.\n"); return; } } bprintf("\001f%s\003", file); } /* The POLICY command. */ void policycom (void) { char file[100]; if (brkword () == -1) { strcpy (file, POLICY_DIR "/" POLICY); } else { if (strlen (wordbuf) >= (sizeof (file) - 10)) { bprintf ("No info available on that topic.\n"); return; } sprintf (file, "%s/%s.p", POLICY_DIR, lowercase (wordbuf)); if (access (file, R_OK) < 0) { bprintf ("No such policy exists.\n"); return; } } bprintf("\001%s\003", file); } void globalcom (void) { if (plev (mynum) < LVL_WIZARD) { erreval (); return; } else if (plev (mynum) >= LVL_GOD && dump_pflags ()) return; bprintf ("&+CGlobal Settings:\n"); bprintf ("&+B---------------------------------------------------------------------------\n"); #ifndef XR_WEATHER bprintf ("&+GWeather (Season) : &+W%s (%s)\n", weather_desc (the_climate->weather), season_name (the_climate->season)); #endif if (the_world->w_lock) bprintf ("&+GLock-status : &+WLevel %d\n", the_world->w_lock); else bprintf ("&+GLock-status : &+WUn-locked\n"); bprintf ("&+GMobiles : &+W%s\n", (the_world->w_mob_stop) ? "Stopped" : "Started"); bprintf ("&+GWar/Peace : &+W%s\n", (the_world->w_peace) ? "Peace" : "War"); bprintf ("&+GTournament-Mode : &+W%s\n", (the_world->w_tournament) ? "On" : "Off"); bprintf ("&+GReboot on Reset : &+W%s\n", breset ? "Yes" : "No"); bprintf ("&+GMax. Users : &+W%d\n", max_players); bprintf ("&+GNumber of Rooms : " "&+W%4d &*permanent +&+W%4d &*wiz-made = &+W%4d\n", num_const_locs, numloc - num_const_locs, numloc); bprintf ("&+GNumber of Mobiles : " "&+W%4d &*permanent +&+W%4d &*wiz-made = &+W%4d\n", num_const_chars - max_players, numchars - num_const_chars, numchars - max_players); bprintf ("&+GNumber of Objects : " "&+W%4d &*permanent +&+W%4d &*wiz-made = &+W%4d\n", num_const_obs, numobs - num_const_obs, numobs); bprintf ("&+B---------------------------------------------------------------------------\n"); } int aliased_mob (int plx) { int i; for (i = 0 ; i < max_players ; i++) if (aliasto(i) == plx) return(i); return(-1); } static void do_alias (int plx) { setpfighting(mynum, -1); if (plx == -1) { sclrflg (mynum, SFL_OCCUPIED); mynum = real_mynum; aliased(mynum) = False; aliasto(mynum) = -1; } else { aliased(mynum) = True; aliasto(mynum) = plx; mynum = plx; ssetflg (plx, SFL_OCCUPIED); } } void aliascom (void) { if (!ptstflg(mynum, PFL_ALIAS) && !ptstflg(mynum, PFL_ALIASP)) { bprintf("You couldn't alias your way out of a cardboard box.\n"); return; } else if (pl1 == -1) { bprintf ("Who?\n"); return; } if (polymorphed(real_mynum) >= 0) { bprintf ("A mysterious force stops you.\n"); return; } if (ststflg (pl1, SFL_OCCUPIED)) { bprintf ("Already occupied!\n"); return; } if (pstr(pl1) < 0) { bprintf ("They're dead, you sicko.\n"); return; } if (pl1 < max_players) { if (!ptstflg (mynum, PFL_ALIASP)) { bprintf ("You can't become another player!\n"); return; } if (!do_okay (mynum, pl1, PFL_NOALIAS)) { if (plev (mynum) <= LVL_WIZARD) bprintf ("Already occupied!\n"); else bprintf ("They don't want to be aliased!\n"); return; } } else if (!ptstflg (mynum, PFL_ALIAS)) { bprintf ("You can't become a mobile!\n"); return; } send_msg (DEST_ALL, 0, LVL_ARCHWIZARD, LVL_MAX, pl1, NOBODY, "&+B[&+W%s &*has &+Caliased &+W%s&+B]\n", pname (mynum), pname (pl1)); do_alias(pl1); bprintf ("Aliased to %s.\n", pname (pl1)); } void polymorph (int plx, int turns) { do_alias(plx); polymorphed(real_mynum) = turns; bprintf("You pass out.....\n..... and wake up.\n"); } void unalias (int me) { #ifdef LOCMIN_GREEN if (aliasto(me) == max_players+MOB_GREEN_THEDOCTOR) { setptitle(me, std_title(plev(me), psex(me), pclass(me))); pvis(me) = 0; setpscore(max_players+MOB_GREEN_THEDOCTOR, 0); } #endif setup_globals(me); if (aliased(me)) { do_alias (-1); setpfighting(me, -1); if (polymorphed(me) == -1) bprintf ("Back to good old %s....\n", pname (mynum)); else bprintf ("Suddenly you awake... were you dreaming or what?\n"); polymorphed(me) = -1; } } void becom (char *passwd) { char x[128]; static PERSONA p; if (passwd == NULL) { if (aliased(real_mynum)) bprintf ("Not when aliased."); else if (cur_player->writer) bprintf ("Finish whatever you're writing first!\n"); else if (pfighting (mynum) != -1) bprintf ("Not while fighting!\n"); else if (brkword () == -1) bprintf ("Become what? Inebriated?\n"); else { strcpy ((char *) cur_player->work2, wordbuf); bprintf ("\n\001R\003"); strcpy (cur_player->cprompt, "Password: "); push_input_handler (becom); } } else { pop_input_handler (); if (!getuaf ((char *) cur_player->work2, &p)) bprintf ("No such player.\n"); else if (!EQ (p.player.passwd, my_crypt (x, passwd))) bprintf ("Incorrect password!\n"); else if (fpbn((char *) cur_player->work2) >= 0) bprintf ("That player is already on the game.\n"); else { dumpitems(); saveme(False); wipe_duration(mynum); p.ublock.ploc = ploc(mynum); mudlog ("&+WSYSTEM:&N %s has BECOME %s", pname (mynum), p.ublock.pname); send_msg (DEST_ALL, MODE_QUIET, max (LVL_WIZARD, pvis (mynum)), LVL_MAX, mynum, NOBODY, "&+B[&+W%s &*has &+CBECOME &+W%s&+B]\n", pname (mynum), p.ublock.pname); send_msg(sendloc(mynum), 0, pvis (mynum), LVL_MAX, mynum, NOBODY, "%s disintegrates, and reappears as %s.\n", pname (mynum), p.ublock.pname); pers2player (&p, mynum); if (cur_player->prompt) strcpy(cur_player->cprompt, cur_player->prompt); else strcpy(cur_player->cprompt, DEFAULT_PROMPT); cur_player->iamon = True; bprintf ("You are now %s.\n", pname (mynum)); check_files (); if (privleged_user(pname(mynum))) isawiz(mynum) = True; if (is_plr_monitored(pname(mynum))) open_plr_log (); } bprintf ("\001E\003"); get_command (NULL); } } void rollcom (void) { if (!ishere(ob1)) return; switch (ob1) { #ifdef LOCMIN_BLIZZARD case OBJ_BLIZZARD_PILLAR_WEST: case OBJ_BLIZZARD_PILLAR_EAST: gamecom ("push pillar", True); break; case OBJ_BLIZZARD_BOULDER: gamecom ("push boulder", True); break; #endif default: bprintf ("You can't roll that.\n"); } } void emptycom (void) { int a, b, ct, nobs; Boolean carried = False; if ((a = ob1) == -1) { bprintf("What's that?\n"); return; } nobs = onumobs(a); if (oloc(a) == mynum) carried = True; else if (oloc(a) != ploc(mynum)) { bprintf("It's not here.\n"); return; } if (otstbit(a, OFL_LOCKABLE) && state (a) == 2 && !hasobjtype(mynum, OFL_KEY)) { bprintf("The %s is locked, and you have no key.\n", oname(a)); return; } else if ((otstbit (a,OFL_OPENABLE) || otstbit(a, OFL_LOCKABLE)) && state(a) > 0) { bprintf("You open the %s.\n", oname(a)); setobjstate(a, 0); } if (nobs == 0) { bprintf("The %s is empty.\n", oname(a)); return; } bprintf("You take the %s from the %s, and put %s %s%s\n", nobs < 2 ? oname(ofirst_obj(a)) : "following items", oname(a), nobs < 2 ? "it" : "them", carried ? "in your backpack" : "on the floor", nobs < 2 ? "." : ":"); for (ct = 0 ; ct < onumobs(a) ; ct++) { b = oobj_nr(ct, a); if (iscontin(b, a)) { ct--; if (nobs > 1) bprintf("%s\n", oname(b)); if (carried) setoloc(b, mynum, CARRIED_BY); else setoloc(b, ploc(mynum), IN_ROOM); } } if (nobs > 1) { bprintf("\n"); send_msg(sendloc(mynum), 0, LVL_MIN, LVL_MAX, mynum, NOBODY, "%s empties things from the %s.\n", pname(mynum), oname(a)); } else send_msg(sendloc(mynum), 0, LVL_MIN, LVL_MAX, mynum, NOBODY, "%s empties something from the %s.\n", pname(mynum), oname(a)); } void treasurecom (void) { int a, c, tc = 0; char b[40], d[40]; if (plev (mynum) < LVL_WIZARD) { erreval (); return; } for (a = 0; a < numobs; a++) { if (!oflannel (a) && !otstbit (a, OFL_DESTROYED) && ocarrf (a) == IN_ROOM) { tc++; c = findzone (oloc (a), b); sprintf (d, "%s%d", b, c); bprintf ("%-13s%-13s", oname (a), d); if (tc % 3 == 0) bprintf ("\n"); } } bprintf ("\nApproximately %d treasures remain.\n", tc); } void promptcom (void) { char buff[MAX_COM_LEN]; getreinput (buff); if (strlen (buff) > PROMPT_LEN) bprintf ("Max. prompt length is %d.\n", PROMPT_LEN); else if (!*buff) { FREE (cur_player->prompt); cur_player->prompt = NULL; bprintf ("Prompt reset.\n"); } else { FREE( cur_player->prompt ); cur_player->prompt = COPY( buff ); bprintf ("Ok\n"); } } void playcom (void) { #ifdef LOCMIN_FOREST if (ob1 == OBJ_FOREST_PIPES) { bprintf ("Much as you try, the pipes only make nasty squeaking noises.\n"); return; } #endif #ifdef LOCMIN_BLIZZARD if (ob1 == OBJ_BLIZZARD_HARP) { bprintf ("A beautiful harp melody floats to you on a gentle breeze.\n"); return; } #endif } void blowcom (void) { int a; #ifdef LOCMIN_OAKTREE char s[100]; #endif if (!ishere(ob1)) return; else a = ob1; switch(a) { #ifdef LOCMIN_CAVE case OBJ_CAVE_BAGPIPES: broad ("\001dA hideous wailing sounds echos all around.\n\003"); return; #endif #ifdef LOCMIN_OAKTREE case OBJ_OAKTREE_WHISTLE: broad ("\001dA strange ringing fills your head.\n\003"); if (alive (max_players + MOB_OAKTREE_OTTIMO) != -1) { bprintf ("A small dachshund bounds into the room " "and leaps on you playfully.\n"); sprintf (s, "A small dachshund bounds into the room " "and leaps on %s playfully.\n", pname (mynum)); sillycom (s); setploc (max_players + MOB_OAKTREE_OTTIMO, ploc (mynum)); } return; #endif #if defined(LOCMIN_LABYRINTH) && defined(LOCMIN_SEA) case OBJ_LABYRINTH_HORN: broad ("\001dA mighty horn blast echoes around you.\n\003"); if (ploc (mynum) >= LOC_SEA_TREASURE && ploc (mynum) <= LOC_SEA_1 && oarmor (OBJ_SEA_EXCALIBUR) == 0) { setoloc (OBJ_SEA_EXCALIBUR, ploc (mynum), IN_ROOM); setobjstate (OBJ_SEA_EXCALIBUR, 1); bprintf ("A hand breaks through the water holding up " "the sword Excalibur!\n"); osetarmor (OBJ_SEA_EXCALIBUR, 1); set_quest (mynum, Q_EXCALIBUR); } return; #endif #ifdef LOCMIN_CAVE case OBJ_CAVE_WHISTLE: broad( "A deep resonating tone can be heard echoing throughout the realms.\n" ); if( ploc( mynum ) == LOC_CAVE_336 && state( OBJ_CAVE_FORGE ) != 0 ) { bprintf( "The forge tilts on it's axis, revealing a passage leading down.\n" ); setobjstate( OBJ_CAVE_FORGE, 0 ); } return; #endif } bprintf ("You can't blow that.\n"); } void lightcom () { int a; #ifdef LOCMIN_EFOREST char s[100]; #endif if (!ishere(ob1)) return; else a = ob1; if (!hasobjtype(mynum, OFL_LIT) && !ststflg (mynum, SFL_LIT)) { bprintf ("You have nothing to light things from.\n"); return; } #ifdef LOCMIN_EFOREST if (a == OBJ_EFOREST_THORNS || a == OBJ_EFOREST_THORNSEAST) { if (state (OBJ_EFOREST_THORNS) == 0) { bprintf ("The thorns have already been burned away.\n"); return; } setobjstate (OBJ_EFOREST_THORNS, 0); bprintf ("You burn the wall of thorns away!\n"); bprintf ("Behind them you can see the entrance to a cave.\n"); sprintf (s, "%s burns the wall of thorns away!\n", pname (mynum)); send_msg(int2idx(LOC_EFOREST_THORNY, LOC), 0, LVL_MIN, LVL_MAX, mynum, NOBODY, s); send_msg(int2idx(LOC_EFOREST_CAVE, LOC), 0, LVL_MIN, LVL_MAX, mynum, NOBODY, s); return; } #endif #ifdef LOCMIN_FOREST if (a == OBJ_FOREST_INSIDETREE) { bprintf ("The tree screams and thrashes around. In its dying throes " "you dash free!\n"); trapch (LOC_FOREST_F4); destroy (OBJ_FOREST_TREEEATING); setpscore (mynum, pscore (mynum) + 100); return; } #endif #include "lightcom.h" if (!otstbit (a, OFL_LIGHTABLE)) bprintf ("You can\'t light that!\n"); else if (otstbit (a, OFL_LIT)) bprintf ("It\'s already lit.\n"); else { setobjstate (a, 0); osetbit (a, OFL_LIT); bprintf ("Ok\n"); } } void extinguishcom () { int a; if (!ishere(ob1)) return; else a = ob1; if (!otstbit (a, OFL_LIT)) bprintf ("It\'s not lit!\n"); else if (!otstbit (a, OFL_EXTINGUISH)) bprintf ("You can\'t extinguish that!\n"); else { setobjstate (a, 1); oclrbit (a, OFL_LIT); bprintf ("Ok\n"); } } void pushcom (void) { int x; #if defined(LOCMIN_EFOREST) || defined(LOCMIN_FROBOZZ) char s[128]; #endif if (brkword () == -1) { bprintf ("Push what?\n"); return; } if ((x = ob1) == -1) { bprintf ("There is no such object to push.\n"); return; } if (oloc(x) != ploc(mynum) && oloc(x) != mynum) { bprintf("It's not here.\n"); return; } switch (x) { #ifdef LOCMIN_BLIZZARD case OBJ_BLIZZARD_TRIPWIRE: bprintf ("The tripwire moves and a huge stone crashes down from above!\n"); broad ("\001dYou hear a thud and a squelch in the distance.\n\003"); quit_msg("S P L A T!", "&+WCrushed by a stone"); quit_player(False); break; case OBJ_BLIZZARD_BOOKCASE: bprintf ("A trapdoor opens at your feet and you plumment downwards!\n"); sillycom ("\001p\003 disappears through a trapdoor!\n"); teletrap (LOC_BLIZZARD_FISSURE); return; #endif } /* If it's the original object (only), not a copy: */ switch (x) { #include "pushcom.h" #ifdef LOCMIN_EFOREST case OBJ_EFOREST_BUTTON: setobjstate (OBJ_EFOREST_BUTTON, 0); setobjstate (OBJ_EFOREST_THRONE_CATHEDRAL, 1 - state (OBJ_EFOREST_THRONE_CATHEDRAL)); sendl(ploc(mynum), "You hear a grinding sound from near the entrance of the caves.\n"); sprintf (s, "You hear a grinding sound as a mysterious force moves " "the throne!\n"); sendl(LOC_EFOREST_EASTEND, s); sendl(LOC_EFOREST_BOTTOM, s); break; #endif #ifdef LOCMIN_FROBOZZ case OBJ_FROBOZZ_BUTTON_OUTSIDE: if (state (OBJ_FROBOZZ_VAULTDOOR_OUTSIDE) == 1) { setobjstate (OBJ_FROBOZZ_VAULTDOOR_OUTSIDE, 0); sendl(LOC_FROBOZZ_OUTSIDE, "Without a sound the whole southern " "wall moves some feet westwards!\n"); sendl(LOC_FROBOZZ_VAULT, "Without a sound the whole northern wall " "moves some feet westwards!\n"); break; } if (state (OBJ_FROBOZZ_VAULTDOOR_OUTSIDE) == 0) { setobjstate (OBJ_FROBOZZ_VAULTDOOR_OUTSIDE, 2); sendl(LOC_FROBOZZ_OUTSIDE, "The southern wall glides some feet " "to the east closing the vault!\n"); sendl(LOC_FROBOZZ_VAULT, "The northern wall glides some feet to " "the east closing the vault!\n"); break; } if (state (OBJ_FROBOZZ_VAULTDOOR_OUTSIDE) == 2) { bprintf ("Nothing happens.\n"); break; } case OBJ_FROBOZZ_RUG_LIVING: if (state (OBJ_FROBOZZ_RUG_LIVING) == 1) { setobjstate (OBJ_FROBOZZ_RUG_LIVING, 0); setobjstate (OBJ_FROBOZZ_TRAPDOOR_LIVING, 2); bprintf ("You move the rug and uncover a trapdoor!\n"); sprintf (s, "%s moves the heavy rug and uncovers a trapdoor!\n", pname (mynum)); sillycom (s); } else { bprintf ("You move the rug, but find nothing.\n"); sprintf (s, "%s moves the rug.\n", pname (mynum)); sillycom (s); } break; #endif #ifdef LOCMIN_ANCIENT case OBJ_ANCIENT_MOONCROSS: if (state (OBJ_ANCIENT_MOONCROSS) > 0) { setobjstate (OBJ_ANCIENT_MOONCROSS, 0); if (state (OBJ_ANCIENT_BIGCROSS) > 0) { bprintf ("You move the cross to one side, but nothing happens.\n"); } else { bprintf ("You hear a loud hollow sound from a room nearby!\n"); setobjstate (OBJ_ANCIENT_HOLE_ANC31, 0); } } else { setobjstate (OBJ_ANCIENT_MOONCROSS, 1); setobjstate (OBJ_ANCIENT_HOLE_ANC31, 1); bprintf ("You move the cross back into place.\n"); } break; case OBJ_ANCIENT_BIGCROSS: if (state (OBJ_ANCIENT_BIGCROSS) > 0) { setobjstate (OBJ_ANCIENT_BIGCROSS, 0); if (state (OBJ_ANCIENT_MOONCROSS) > 0) { bprintf ("You move the cross to one side, but nothing happens.\n"); } else { bprintf ("You hear a loud hollow sound from a room nearby!\n"); setobjstate (OBJ_ANCIENT_HOLE_ANC31, 0); } } else { setobjstate (OBJ_ANCIENT_BIGCROSS, 1); setobjstate (OBJ_ANCIENT_HOLE_ANC31, 1); bprintf ("You move the cross back into place.\n"); } break; #endif #ifdef LOCMIN_BLIZZARD case OBJ_BLIZZARD_ALTAR: if (state (OBJ_BLIZZARD_PLATFORM_ALTAR) == 2) { setobjstate (OBJ_BLIZZARD_PLATFORM_ALTAR, 1); setobjstate (OBJ_BLIZZARD_ALTAR, 0); bprintf ("You move the altar to the side, uncovering the platform.\n"); break; } case OBJ_BLIZZARD_BRICK: if (state (OBJ_BLIZZARD_ALTAR) == 1) { bprintf ("That is not here.\n"); break; } else { setobjstate (OBJ_BLIZZARD_PLATFORM_ALTAR, 0); setobjstate (OBJ_BLIZZARD_BRICK, 0); bprintf ("You push the brick, and the platform opens!\n"); break; } case OBJ_BLIZZARD_IRONBAR: if (state (OBJ_BLIZZARD_PASS_STONE) == 1) { setobjstate (OBJ_BLIZZARD_PASS_FISSURE, 0); bprintf ("A secret panel opens in the east wall!\n"); break; } bprintf ("Nothing happens.\n"); break; case OBJ_BLIZZARD_BOULDER: bprintf ("With a mighty heave you manage to move the boulder a few feet\n"); if (state (OBJ_BLIZZARD_HOLE_CRACK) == 1) { bprintf ("uncovering a hole behind it.\n"); setobjstate (OBJ_BLIZZARD_HOLE_CRACK, 0); } else { bprintf ("covering a hole behind it.\n"); setobjstate (OBJ_BLIZZARD_HOLE_CRACK, 1); } break; case OBJ_BLIZZARD_LEVER: if (ptothlp (mynum) == -1) { bprintf ("It's too stiff. Maybe you need help.\n"); return; } bprintf ("Ok\n"); if (state (OBJ_BLIZZARD_SLIME_PIT) != 0) { send_msg(sendloc(mynum), 0, pvis(mynum), LVL_MAX, mynum, NOBODY, "%s pulls the lever.\n", pname(mynum)); sendl(oloc (OBJ_BLIZZARD_LEVER), "\001dYou hear a gurgling noise and then silence.\n\003"); setobjstate (OBJ_BLIZZARD_SLIME_PIT, 0); sendl(oloc (OBJ_BLIZZARD_SLIME_PIT), "\001cThere is a muffled click and the slime drains away.\n\003"); } break; case OBJ_BLIZZARD_THRONE_CURTAINS: case OBJ_BLIZZARD_ROUGH_CURTAINS: setobjstate (OBJ_BLIZZARD_THRONE_CURTAINS, 1 - state (OBJ_BLIZZARD_THRONE_CURTAINS)); bprintf ("Ok\n"); break; case OBJ_BLIZZARD_BRIDGE_LEVER: setobjstate (OBJ_BLIZZARD_BRIDGE_HALL, 1 - state (OBJ_BLIZZARD_BRIDGE_HALL)); if (state (OBJ_BLIZZARD_BRIDGE_HALL)) { sendl(oloc (OBJ_BLIZZARD_BRIDGE_HALL), "\001cThe drawbridge rises.\n\003"); sendl(oloc (OBJ_BLIZZARD_BRIDGE_FIRE), "\001cThe drawbridge rises.\n\003"); } else { sendl(oloc (OBJ_BLIZZARD_BRIDGE_HALL), "\001cThe drawbridge is lowered.\n\003"); sendl(oloc (OBJ_BLIZZARD_BRIDGE_FIRE), "\001cThe drawbridge is lowered.\n\003"); } break; #endif #ifdef LOCMIN_RUINS case OBJ_RUINS_OUTSIDETORCH: if (state (OBJ_RUINS_OUTSIDETORCH) == 1) { setobjstate (OBJ_RUINS_OUTSIDETORCH, 0); bprintf ("You pull the torch down and the west wall collapses!\n"); break; } else { bprintf ("The torch has already been moved.\n"); break; } #endif #ifdef LOCMIN_CASTLE case OBJ_CASTLE_LEVER: setobjstate (OBJ_CASTLE_PORT_INSIDE, 1 - state (OBJ_CASTLE_PORT_INSIDE)); if (state (OBJ_CASTLE_PORT_INSIDE)) { sendl(oloc (OBJ_CASTLE_PORT_INSIDE), "\001cThe portcullis falls.\n\003"); sendl(oloc (OBJ_CASTLE_PORT_OUTSIDE), "\001cThe portcullis falls.\n\003"); } else { sendl(oloc (OBJ_CASTLE_PORT_INSIDE), "\001cThe portcullis rises.\n\003"); sendl(oloc (OBJ_CASTLE_PORT_OUTSIDE), "\001cThe portcullis rises.\n\003"); } break; case OBJ_CASTLE_TORCH: if (state (OBJ_CASTLE_DOOR_GOLEM) == 1) { setobjstate (OBJ_CASTLE_DOOR_GOLEM, 0); sendl(oloc (OBJ_CASTLE_DOOR_GOLEM), "A secret door slides quietly open in the south wall!\n"); } else bprintf ("It moves but nothing seems to happen.\n"); return; #endif #ifdef LOCMIN_CHURCH case OBJ_CHURCH_ROPE: if (oarmor (OBJ_CHURCH_ROPE) >= 12) bprintf ("\001dChurch bells ring out around you.\n\003"); else { broad ("\001dChurch bells ring out around you.\n\003"); if (++oarmor (OBJ_CHURCH_ROPE) == 12) { bprintf ("A strange ghostly guitarist shimmers briefly before you.\n"); setpscore (mynum, pscore (mynum) + 300); broad ("\001dA faint ghostly guitar solo " "floats through the air.\n\003"); } } break; #endif #ifdef LOCMIN_CATACOMB case OBJ_CATACOMB_DUST: bprintf ("Great clouds of dust billow up, causing you to sneeze " "horribly.\nWhen you're finished sneezing, you notice " "a message carved into one wall.\n"); broad ("\001dA loud sneeze echoes through the land.\n\003"); destroy (OBJ_CATACOMB_DUST); create (OBJ_CATACOMB_KOAN); break; #endif #ifdef ORCHOLD case OBJ_ORCHOLD_BOTCOVER: bprintf ("You can't seem to get enough leverage to move it.\n"); return; case OBJ_ORCHOLD_TOPCOVER: if (ptothlp(mynum) == -1) { bprintf ("You try to shift it, but it's too heavy.\n"); break; } sendf(ptothlp(mynum), "\001p%s\003 pushes the cover aside with your " "help.\n", pname(mynum)); setobjstate (x, 1 - state (x)); oplong (x); return; case OBJ_ORCHOLD_SWITCH: if (state (x)) { bprintf ("A hole slides open in the north wall!\n"); setobjstate (x, 0); } else bprintf ("You hear a little 'click' sound.\n"); return; #endif #ifdef LOCMIN_BLIZZARD case OBJ_BLIZZARD_STATUE_DOWN: if (ptothlp (mynum) == -1) { bprintf ("You can't shift it alone, maybe you need help.\n"); break; } sendf(ptothlp(mynum), "\001P%s\003 pushes the statue with your " "help.\n", pname(pfollow(mynum))); /* FALLTHROUGH */ #endif default: if (otstbit (x, OFL_PUSHABLE)) { setobjstate (x, 0); oplong (x); return; } if (otstbit (x, OFL_PUSHTOGGLE)) { setobjstate (x, 1 - state (x)); oplong (x); return; } bprintf ("Nothing happens.\n"); } } void followcom (void) { if (mynum >= max_players) { bprintf("But you're a mobile! You don't need to follow anyone.\n"); return; } if (pfollow(mynum) >= 0) { bprintf ("Stopped following \001P%s\003.\n", pname (pfollow(mynum))); sendf(pfollow(mynum), "\001p%s\003 has stopped following you.\n", pname (mynum)); pfollow(mynum) = -1; return; } if (pfighting (mynum) != -1) { bprintf ("Not in a fight!\n"); return; } if (EMPTY (item1)) { bprintf ("Who?\n"); return; } if (pl1 == -1) { bprintf ("Who?\n"); return; } if (ploc (pl1) != ploc (mynum)) { bprintf ("They aren't here.\n"); return; } if (mynum == pl1) { if (is_grouped(mynum) != mynum) ungroup(mynum); bprintf("You run round in circles!\n"); return; } if (pl1 != is_grouped(mynum)) ungroup(mynum); sendf (pl1, "%s is following you.\n", see_name(pl1, mynum)); pfollow(mynum) = pl1; bprintf ("Ok\n"); } void losecom(void) { if (pgrouped(mynum) != -1) ungroup(mynum); if (pfollow(mynum) == -1) { bprintf("You aren't following anyone.\n"); return; } sendf(pfollow(mynum), "\001p%s\003 has stopped following you.\n", pname(mynum)); bprintf("You sneak away from %s!\n", pname(pfollow(mynum))); pfollow(mynum) = -1; } void togglecom (int flg, char on[80], char off[80]) { Boolean away = (flg == SFL_AWAY); if (!ststflg (mynum, flg)) { ssetflg (mynum, flg); bprintf ("%s\n", on); if (away) { if( pawaymsg(mynum) ) send_msg (DEST_ALL, 0, pvis (mynum), LVL_MAX, mynum, NOBODY, "&+G[&+W%s &*has walked away from %s keyboard:&+G]\n&+G[&N%s&+G]\n", pname (mynum), his_or_her (mynum), pawaymsg(mynum)); else send_msg (DEST_ALL, 0, pvis (mynum), LVL_MAX, mynum, NOBODY, "&+G[&+W%s &*has walked away from %s keyboard&+G]\n", pname (mynum), his_or_her (mynum)); } } else { sclrflg (mynum, flg); bprintf ("%s\n", off); if (away) send_msg (DEST_ALL, 0, pvis (mynum), LVL_MAX, mynum, NOBODY, "&+G[&+W%s &*has returned to %s keyboard&+G]\n", pname (mynum), his_or_her (mynum)); } } void beepcom (void) { int a; if (brkword () == -1) { bprintf ("Who do you want to beep?\n"); return; } if ((a = pl1) == -1) { bprintf ("I can't seem to find that player.\n"); return; } if (a >= max_players) { bprintf ("Beep a mobile? Why?\n"); return; } if (a == mynum) { bprintf ("You want to beep yourself? Ok then!&#&#\n"); return; } if (check_forget (a, mynum)) { bprintf ("&+W%s &*has forgotten you and will not receive your beeps.\n", pname (a)); return; } if (ltstflg (ploc (a), LFL_SOUNDPROOF) && plev(a) < LVL_WIZARD) { bprintf ("%s seems to be in a soundproof room.\n", pname (a)); return; } bprintf ("Beeping %s.\n", pname (a)); sendf (a, "\001p%s\003 is trying to get your attention!&#&#\n", pname (mynum)); } void togglefinger (void) { if (!ststflg (mynum, SFL_NOFINGER)) { ssetflg (mynum, SFL_NOFINGER); bprintf ("You can no longer be checked on by other users.\n"); } else { sclrflg (mynum, SFL_NOFINGER); bprintf ("You can now be checked on by other users.\n"); } } void lastoncom (void) { int c, b; PERSONA p; if (brkword () == -1) { togglefinger (); return; } if ((b = fpbn(wordbuf)) != -1) { bprintf ("They are currently online.\n"); return; } if (!getuaf (wordbuf, &p)) { bprintf ("Person not found in system.\n"); return; } c = test_bit(p.ublock.bits, mindex, SFL_NOFINGER, SFLAGS) ? 1 : 0; if (c && plev (mynum) < LVL_SHALAFI) { bprintf ("That player cannot be finger'd.\n"); return; } bprintf ("&+wPlayer: &+C%s\n", p.ublock.pname); bprintf ("&+wLast Login: &+C%s\n", time2ascii (p.player.last_on)); if (ptstflg (mynum, PFL_SEEUSER)) bprintf ("&+WHost/User: &+C%s\n", p.rplr.usrname); else if (ptstflg (mynum, PFL_SEEHOST)) bprintf ("&+wFrom Host: &+C%s\n", p.rplr.hostname); } void setpager (void) { int new; if (brkword () == -1) { bprintf ("&+wPager is currently set to &+C%d &+wlines.\n", ppager (mynum)); return; } new = atoi (wordbuf); if (new > 200) { bprintf ("Do you really need the pager set that high?\n"); return; } if (new < 0) { bprintf ("Do you really need the pager set that low?\n"); return; } setppager (mynum, new); if (new) { bprintf ("&+wSetting pager to &+C%d &+wlines.\n", new); } else { bprintf ("&+wTurning pager &+COff&+w.\n"); } } void optionscom (void) { char pager[20], chan[20], wimpy[20]; sprintf (pager, "&+C%d Lines", ppager (mynum)); sprintf (chan, "&+C%d", pchannel (mynum)); sprintf (wimpy, "&+C%d", pwimpy (mynum)); bprintf ("&+WYour current game options:\n"); bprintf ("&+B---------------------------------------------------------\n"); bprintf ("&+wColor %-11s &+wNewStyle %-11s\n", ststflg (mynum, SFL_COLOR) ? "&+CEnabled" : "&+cDisabled", ststflg (mynum, SFL_NEWSTYLE) ? "&+CEnabled" : "&+cDisabled"); bprintf ("&+wBrief %-11s &+wAway %-11s\n", ststflg (mynum, SFL_BRIEF) ? "&+CEnabled" : "&+cDisabled", ststflg (mynum, SFL_AWAY) ? "&+CEnabled" : "&+cDisabled"); bprintf ("&+wBusy %-11s &+wNoFight %-11s\n", ststflg (mynum, SFL_BUSY) ? "&+CEnabled" : "&+cDisabled", ststflg (mynum, SFL_NOFIGHT) ? "&+CEnabled" : "&+cDisabled"); bprintf ("&+wAutoExit %-11s &+wNoFinger %-11s\n", ststflg (mynum, SFL_AUTOEXIT) ? "&+CEnabled" : "&+cDisabled", ststflg (mynum, SFL_NOFINGER) ? "&+CEnabled" : "&+cDisabled"); bprintf ("&+wNoInventory %-11s &+wNoBeep %-11s\n", ststflg (mynum, SFL_NOINV) ? "&+CEnabled" : "&+cDisabled", ststflg (mynum, SFL_NOBEEP) ? "&+CEnabled" : "&+cDisabled"); bprintf ("&+wHearBack %-11s &+wNoBlink %-11s\n", ststflg (mynum, SFL_HEARBACK) ? "&+CEnabled" : "&+cDisabled", ststflg (mynum, SFL_NOBLINK) ? "&+CEnabled" : "&+cDisabled"); bprintf ("&+wNoFlag %-11s &+wNoOracle %-11s\n", ststflg (mynum, SFL_NOFLAG) ? "&+CEnabled" : "&+cDisabled", ststflg (mynum, SFL_NOORACLE) ? "&+CEnabled" : "&+cDisabled"); bprintf ("&+wNoWeather %-11s &+wWimpy %-11s\n", ststflg (mynum, SFL_NOWET) ? "&+CEnabled" : "&+cDisabled", pwimpy (mynum) == 0 ? "&+cDisabled" : wimpy); bprintf ("&+wChat Channel %-11s &+wPager %-11s\n", chan, ppager (mynum) == 0 ? "&+cDisabled" : pager); if (plev (mynum) >= LVL_WIZARD) { bprintf ("&+wQuiet %-11s &+wAloof %-11s\n", ststflg (mynum, SFL_QUIET) ? "&+CEnabled" : "&+cDisabled", ststflg (mynum, SFL_ALOOF) ? "&+CEnabled" : "&+cDisabled"); bprintf ("&+wNoWish %-11s &+wSeeExtended %-11s\n", ststflg (mynum, SFL_NOWISH) ? "&+CEnabled" : "&+cDisabled", ststflg (mynum, SFL_SEEEXT) ? "&+CEnabled" : "&+cDisabled"); bprintf ("&+wNoSlain %-11s &+wLit %-11s\n", ststflg (mynum, SFL_NOSLAIN) ? "&+CEnabled" : "&+cDisabled", ststflg (mynum, SFL_LIT) ? "&+CEnabled" : "&+cDisabled"); } if (plev (mynum) >= LVL_GOD) { bprintf ("&+wSilent Entry %-11s &+wCoding %-11s\n", ststflg (mynum, SFL_SILENT) ? "&+CEnabled" : "&+cDisabled", ststflg (mynum, SFL_CODING) ? "&+CEnabled" : "&+cDisabled"); bprintf ("&+wIdle %-11s &+wSeeIdle %-11s\n", ptstflg (mynum, PFL_IDLE) ? "&+CEnabled" : "&+cDisabled", ptstflg (mynum, PFL_SEEIDLE) ? "&+CEnabled" : "&+cDisabled"); bprintf ("&+wSeeSocket %-11s\n", ptstflg (mynum, PFL_SEESOCKET) ? "&+CEnabled" : "&+cDisabled"); } bprintf ("&+B---------------------------------------------------------\n"); } void klockcom (char *passwd) { char pass[sizeof (cur_player->passwd)]; if (passwd == NULL) { if (phandler (mynum) != get_command) { bprintf ("You can only lock the keyboard from the command prompt.\n"); return; } bprintf ("Locking Keyboard With Login Password.\001R\003\n"); strcpy (cur_player->cprompt, "Enter Keyboard Password: "); replace_input_handler (klockcom); } else { my_crypt (pass, passwd); if (strcmp (cur_player->passwd, pass) == 0) { strcpy(cur_player->cprompt, build_prompt(mynum)); bprintf ("\nPassword Correct, Keyboard Unlocked.\n\001E\003"); replace_input_handler (get_command); return; } } } /* Compares two objects that are weapon or armor and tells which object * has the better DP/AC. */ void comparecom (void) { int a, b; /* Objects */ int adata, bdata, data; /* DP/AC and compared data for object */ if (plev (mynum) < LVL_WIZARD) { if ((a = cantake(ob1, "Compare what?", "What is the first object?")) == -1) return; else if ((b = cantake(ob2, "", "What is the second object?")) == -1) return; } else { if ((a = ob1) == -1 && (a = ob2) == -1) { bprintf ("Neither object exists!\n"); return; } if ((a = ob1) == -1) { bprintf ("Object does not exist! (First one)\n"); return; } if ((b = ob2) == -1) { bprintf ("Object does not exist! (Second one)\n"); return; } } /* Check to see if objects are weapons, if so compare them */ if (otstbit (a, OFL_WEAPON) && otstbit (b, OFL_WEAPON)) { adata = odamage (a); bdata = odamage (b); if (adata > bdata) { data = adata - bdata; bprintf ("The %s (Item %d) is stronger than the %s (Item %d) by %d DP.\n", oname (a), int2idx(a, OBJ), oname (b), int2idx(b, OBJ), data); } if (adata < bdata) { data = bdata - adata; bprintf ("The %s (Item %d) is stronger than the %s (Item %d) by %d DP.\n", oname (b), int2idx(b, OBJ), oname (a), int2idx(a, OBJ), data); } if (adata == bdata) { bprintf ("The %s (Item %d) has the same DP has the %s (Item %d).\n", oname (a), int2idx(a, OBJ), oname (b), int2idx(b, OBJ)); } } else if (otstbit (a, OFL_ARMOR) && otstbit (b, OFL_ARMOR)) { adata = oarmor (a); bdata = oarmor (b); if (adata > bdata) { data = adata - bdata; bprintf ("The %s (Item %d) is stronger than the %s (Item %d) by %d AC.\n", oname (a), int2idx(a, OBJ), oname (b), int2idx(b, OBJ), data); } if (adata < bdata) { data = bdata - adata; bprintf ("The %s (Item %d) is stronger than the %s (Item %d) by %d AC.\n", oname (b), int2idx(b, OBJ), oname (a), int2idx(a, OBJ), data); } if (adata == bdata) { bprintf ("The %s (Item %d) has the same AC has the %s (Item %d).\n", oname (a), int2idx(a, OBJ), oname (b), int2idx(b, OBJ)); } } else bprintf ("Both objects must be either weapons or armor.\n"); }