#include "../../security.h" #include "handshake.h" object myself,talkee; int is_invis,level,alignment,muffled,time_shut; string msgin,msgout,mmsgin,mmsgout,msghome,name,cap_name,it,title,al_title; object grantee; string log,pwd,castle; reset(arg) { /* if (arg && (environment() != myself)) { destruct(this_object()); tell_object(myself, "Due to your soul leaving your body" + " it has been destroyed\n"); } */if (arg) return; myself = this_player(); restore_object("players/" + call_other(myself,"query_real_name",0)); myself = this_player(); } get() { return 1; } drop() { return 1; } id(str) { return str == "wiz_soul" || str == "ND"; } long() { write("Even wizard souls are transparent.\n"); } init() { if (myself != this_player()) return 0; soul_init(); pwd = "/players/"+name+"/"; castle = "/players/" + name + "/castle"; log = "/log/" + name; call_other(myself,"set_pwd",pwd); if (level >= ECHO) { add_action("echo_to"); add_verb("echoto"); add_action("echo"); add_verb("echo"); add_action("echo_all"); add_verb("echoall"); } if (level >= EXPLORE) { add_action("teleport"); add_verb("goto"); add_action("list_files"); add_verb("ls"); add_action("cat_file"); add_verb("cat"); add_action("origin_object"); add_verb("origin"); add_action("where"); add_verb("where"); add_action("castle"); add_verb("castle"); } if (level >= SENIOR) { add_action("grant_level"); add_verb("promote"); add_action("work"); add_verb("work"); } if (level >= CREATE) { add_action("stat"); add_verb("stat"); add_action("clone"); add_verb("clone"); add_action("destruct_local_object"); add_verb("dest"); add_action("destruct_local_object"); add_verb("destruct"); add_action("load"); add_verb("load"); add_action("reset_object"); add_verb("reset"); add_action("update_object"); add_verb("update"); add_action("remove_file"); add_verb("rm"); add_action("edit"); add_verb("ed"); add_action("home"); add_verb("home"); add_action("local_commands"); add_verb("localcmd"); add_action("ear_muffs"); add_verb("earmuffs"); add_action("log"); add_verb("log"); add_action("cd"); add_verb("cd"); } if (level >= OUT_OF_BODY) { add_action("in_room"); add_verb("in"); add_action("at_player"); add_verb("at"); } if (level >= SHUTDOWN) { add_action("shut_down_game"); add_verb("shutdown"); add_action("adjust_time"); add_verb("time"); } /* any wizard can do these for effect */ add_action("wiz_score_list"); add_verb("wizlist"); add_action("setmmin"); add_verb("setmmin"); add_action("setmmout"); add_verb("setmmout"); add_action("setmin"); add_verb("setmin"); add_action("setmout"); add_verb("setmout"); add_action("setmhome"); add_verb("setmhome"); add_action("review"); add_verb("review"); add_action("emote"); add_verb("emote"); add_action("set_alignment"); add_verb("setal"); add_action("set_alignment_num"); add_verb("setaln"); add_action("list_peoples"); add_verb("people"); add_action("light"); add_verb("light"); add_action("vis"); add_verb("vis"); add_action("set_wc"); add_verb("hands"); /* This help can override the player.c help when appropriate. */ add_action("wizhelp"); add_verb("help"); /* end any wizard section */ if (level >= TITLE) { add_action("set_title"); add_verb("title"); } if (level >= CONTROL) { add_action("force_player"); add_verb("force"); add_action("trans"); add_verb("trans"); if (level >= ITEM_OVER) { add_action("power_trans"); add_verb("trans!"); } } if (level >= DAMAGE) { add_action("spell_zap"); add_verb("zap"); add_action("heal"); add_verb("heal"); } if (level >= SNOOP) { add_action("snoop_on"); add_verb("snoop"); } if (level >= INVIS) { add_action("invis"); add_verb("invis"); } if (level >= ITEM_OVER) { add_action("enter"); add_verb("climbin"); add_action("exit"); add_verb("exit"); add_action("power_get"); add_verb("get!"); add_action("power_drop"); add_verb("drop!"); add_action("power_give"); add_verb("give!"); add_action("power_put"); add_verb("put!"); } } emote(str) { if (level < 20) return 0; if (!str) { write("emote what ?\n"); return 1; } call_other(myself,"remote_say",cap_name + " " + str + "\n"); return 1; } set_alignment(al) { if (level < 20) return 0; al_title = al; call_other(myself,"update",8); } /* Added by Drax */ set_alignment_num(al) { int new_aln; if (level < 20) return 0; if (sscanf(al,"%d",new_aln) == 1) { alignment = new_aln; write("Alignment reset.\n"); } else write("Alignment specified is not valid.\n"); call_other(myself,"update",7); return 1; } list_peoples() { if (level < 20) return 0; people(); return 1; } heal(name) { object ob; if (!name || level < DAMAGE) return 0; it = lower_case(name); ob = find_living(it); if (!ob) { write("No such person is playing now.\n"); return 1; } call_other(ob, "heal_self", 100000); if (call_other(myself,"query_invis",0) < INVIS_ACTION) tell_object(ob, "You are healed by " + cap_name + ".\n"); write("Ok.\n"); return 1; } stat(name) { object ob; if (level < CREATE) return 0; it = lower_case(name); ob = find_living(it); if (!ob) { write("No such person is playing now.\n"); return 1; } call_other(ob, "show_stats", 0); return 1; } shut_down_game(arg) { string str; if (level < SHUTDOWN) return 0; str = arg; if (!str) str = "5"; if (lower_case(str) == "now") shutdown(); if (sscanf(str,"%d",time_shut) != 1) { write("Not a valid time.\n"); return 1; } shout("!Game is being shut down by " + cap_name + " in " + str + " minutes.\n"); write("Game will shut down in " + time_shut + " minutes.\n"); log_file("SHUTDOWN","Game is being shut down by " + capitalize(name) + " in " + str + " minutes.\n"); write("If you have not done so, do an emergency giving the reason.\n"); time_shut *= 20; set_heart_beat(1); write("Auto shutdown started. Type soul off to cancel.\n"); return 1; } power_trans(str) { return trans("! "+str); } power_get(str) { return call_other(myself,"pick_up","! "+str); } power_drop(str) { return call_other(myself,"drop_thing","! "+str); } power_put(str) { return call_other(myself,"put","! "+str); } power_give(str) { return call_other(myself,"give_object","! "+str); } trans(str) { object ob; string out,power; if (!str || level < CONTROL) return 0; if (level >= ITEM_OVER) if (sscanf(str,"! %s",power) == 1) str = power; ob = find_player(str); if (!ob) ob = find_living(str); if (!ob) { write("No such living thing.\n"); return 1; } it = str; tell_object(ob, "You are magically transfered somewhere.\n"); out = call_other(ob,"query_mmsgin",0); if (!out) out = call_other(ob, "query_name", 0) + " arrives in a puff of smoke.\n"; else out = call_other(ob, "query_name", 0) + " " + out + ".\n"; tell_room(environment(myself),out); if (power) { move_object(ob, environment()); } else { move_object(ob, environment(myself)); } return 1; } spell_zap(str) { object ob; if (level < DAMAGE) return 0; if (!str) ob = call_other(myself,"query_attack",0); else ob = present(lower_case(str), environment(myself)); if (!ob || !living(ob)) { write("At whom?\n"); return 1; } call_other(myself,"zap_object",ob); return 1; } force_player(str) { string who, what; object ob; if (!str || level < CONTROL) return 0; if (sscanf(str, "%s to %s", who, what) == 2 || sscanf(str, "%s %s", who, what) == 2) { ob = find_living(who); if (!ob) { write("No such player.\n"); return 1; } call_other(ob, "force_us", what); write("Ok.\n"); return 1; } return 0; } clone(str) { object ob; if (level < CREATE) return 0; if (!str) { write("Clone what object?\n"); return 1; } str = valid_read(str); if (!str) { write("Invalid file.\n"); return 1; } call_other(myself,"checked_say",cap_name + " fetches something from another dimension.\n"); ob = clone_object(str); if (call_other(ob, "get")) { call_other(myself,"add_weight",call_other(ob, "query_weight")); move_object(ob, myself); } else { move_object(ob, environment(this_player())); } write("Ok.\n"); return 1; } destruct_local_object(str) { object ob; if (level < CREATE) return 0; if (!str) { write("Destruct what?\n"); return 1; } str = lower_case(str); if (str == "all") { destruct_inventory(); return 1; } ob = present(str, myself); if (!ob) ob = present(str, environment(myself)); if (!ob) { write("No " + str + " here.\n"); return 1; } call_other(myself,"checked_say",call_other(ob, "short") + " is disintegrated by " + cap_name + ".\n"); destruct(ob); write("Ok.\n"); return 1; } destruct_inventory() { object ob,player; object next_ob; string it; ob = first_inventory(myself); while(ob) { string out; next_ob = next_inventory(ob); it = call_other(ob, "short", 0); if (!call_other(ob,"id","ND")) { destruct(ob); write("destruct: " + it +".\n"); } ob = next_ob; } } load(str) { object env; if (level < CREATE) return 0; if (!str) { write("Load what?\n"); return 1; } str = valid_read(str); if (!str) { write("Invalid file name.\n"); return 1; } env = environment(myself); move_object(myself, str); move_object(myself, env); write("Ok.\n"); return 1; } snoop_on(str) { if (level < SNOOP) return 0; call_other(myself,"remote_snoop",set_handshake(str)); return 1; } invis(str) { int invis; if (level < INVIS) return 0; if (str) { sscanf(str,"%d",invis); } else { invis = 100; } if (!invis) return 0; if (invis >= 100 && level < ALL_POWER) invis=100; if (invis >= INV7 && level < CINV7) invis = INV7 - 1; if (invis >= INV6 && level < CINV6) invis = INV6 - 1; if (invis >= INV5 && level < CINV5) invis = INV5 - 1; if (invis >= INV4 && level < CINV4) invis = INV4 - 1; if (invis >= INV3 && level < CINV3) invis = INV3 - 1; if (invis >= INV2 && level < CINV2) invis = INV2 - 1; if (invis >= INV1 && level < CINV1) invis = INV1 - 1; is_invis = invis; call_other(myself,"update",5); write("You are now invisible = "+is_invis+".\n"); if (is_invis < INVIS_ACTION) call_other(myself,"remote_say",cap_name + " disappears.\n"); if (is_invis >= SOMEONE) cap_name = "Someone"; return 1; } vis() { if (level < INVIS) return 0; if (!is_invis) { write("You are not invisible.\n"); return 1; } is_invis = 0; call_other(myself,"update",5); write("You are now visible.\n"); cap_name = capitalize(name); call_other(myself,"remote_say",cap_name + " appears in puff of smoke.\n"); return 1; } home() { object old_env; if (level < CREATE) return 0; if (call_other(myself,"query_invis",0) < INVIS_TELEPORT) call_other(myself,"remote_say",cap_name + " " + msghome + ".\n"); move_object(myself,"players/" + name + "/workroom"); call_other(myself,"look",0); return 1; } wiz_score_list() { if (level < 20) return 0; wizlist(); return 1; } remove_file(str) { if (level < CREATE) return 0; if (!str) return 0; rm(str); return 1; } local_commands() { if (level < CREATE) return 0; localcmd(); write("\n"); return 1; } set_title(t) { if (level < TITLE) { write("You must be of level " + TITLE + " to do that.\n"); return 0; } call_other(myself, "set_title", t); return 1; } /* Some functions to set moving messages. */ setmin(m) { if (level < 20) return 0; msgin = m; call_other(myself,"update",1); return 1; } setmmin(m) { if (level < 20) return 0; mmsgin = m; call_other(myself,"update",2); return 1; } setmout(m) { if (level < 20) return 0; msgout = m; call_other(myself,"update",3); return 1; } setmmout(m) { if (level < 20) return 0; mmsgout = m; call_other(myself,"update",4); return 1; } setmhome(m) { if (level < 20) return 0; msghome = m; call_other(myself,"update",9); return 1; } review() { if (level < 20) return 0; write("mout:\t" + msgout + "\nmin:\t" + msgin + "\nmmout:\t" + mmsgout + "\nmmin:\t" + mmsgin + "\nmhome:\t" + msghome + "\n"); return 1; } echo(str) { if (level < ECHO) return 0; if (!str) { write ("Echo what?\n"); return 1; } say (str + "\n"); write ("You echo: " + str + "\n"); return 1; } echo_to(str) { object ob; string who; string msg; if (level < ECHO) return 0; if (!str || sscanf(str, "%s %s", who, msg) != 2) { write("Echoto what ?\n"); return 1; } it = lower_case(who); ob = find_living(it); if (!ob) { write("No player with that name.\n"); return 1; } tell_object(ob, msg + "\n"); write("You echo: " + msg + "\n"); return 1; } echo_all(str) { if (level < ECHO) return 0; if (!str) { write("Echoall what?\n"); return 1; } shout(str + "\n"); write("You echo: " + str + "\n"); return 1; } teleport(dest) { object ob,old_env; if (level < EXPLORE) return 0; if (!dest) { write("Goto where ?\n"); return 1; } ob = find_player(dest); if (!ob) ob = find_living(dest); if (ob) { ob = environment(ob); if (call_other(myself,"query_invis",0) < INVIS_TELEPORT) call_other(myself,"remote_say",cap_name + " " + mmsgout + ".\n"); old_env = environment(myself); move_object(myself, ob); if (call_other(myself,"query_invis",0) < INVIS_TELEPORT) call_other(myself,"remote_say",cap_name + " " + mmsgin + ".\n"); write(call_other(ob, "short") + ".\n"); return 1; } dest = valid_read(dest); if (!dest) { write("Invalid monster name of file name.\n"); return 1; } call_other(myself,"move_player","X#" + dest); return 1; } in_room(str) { object room; object old_room; string cmd; if (!str || level < OUT_OF_BODY) return 0; if (sscanf(str, "%s %s", room, cmd) != 2) { write("Usage: in ROOM CMD\n"); return 1; } room = valid_read(room); if (!room) { write("Invalid file name.\n"); return 1; } old_room = environment(myself); move_object(myself, room); call_other(myself,"remote_cmd",set_handshake(cmd)); move_object(myself, old_room); return 1; } at_player(str) { object other_player; object old_room; string cmd, who; if (!str || level < OUT_OF_BODY) return 0; if (sscanf(str, "%s %s", who, cmd) != 2) { write("Usage: at PLAYER CMD\n"); return 1; } other_player = find_living(who); if (!other_player) { write("There is no living creature named " + who + ".\n"); return 1; } old_room = environment(myself); move_object(myself, environment(other_player)); call_other(myself,"remote_cmd",set_handshake(cmd)); move_object(myself, old_room); return 1; } reset_object(str) { object ob; if (level < CREATE) return 0; if (!str) { write("Update what object ?\n"); return 1; } str = valid_read(str); if (!str) { write("Invalid file name.\n"); return 1; } ob = find_object(str); if (!ob) { write("No such object.\n"); return 1; } call_other(ob, "reset", 0); return 1; } update_object(str) { object ob; if (level < CREATE) return 0; if (!str) { write("Update what object ?\n"); return 1; } str = valid_read(str); if (!str) { write("Invalid file name.\n"); return 1; } ob = find_object(str); if (!ob) { write("No such object.\n"); return 1; } destruct(ob); write(str + " will be reloaded at next reference.\n"); return 1; } edit(file) { if (level < CREATE) return 0; if (!file) { write("Edit what file ?\n"); return 1; } call_other(myself,"remote_ed",set_handshake(file)); return 1; } list_files(path) { if (level < EXPLORE) return 0; ls(path); return 1; } cat_file(path) { if (level < EXPLORE) return 0; if (!path) return 0; cat(path); return 1; } origin_object(str) { object ob; if (!str || level < EXPLORE) return 0; ob = present(str); if (!ob) ob = present(str,environment(myself)); if (!ob) return 0; write(ob); write("\n"); } where(str) { object ob; if (!str || level < EXPLORE) return 0; ob = find_player(str); if (!ob) ob = find_living(str); if (!ob) ob = find_object(str); if (!ob) { write(str + " not found.\n"); return 1; } ob = environment(ob); if (!ob) { write(str + " is not in a place.\n"); return 1; } write(ob); write("\n"+call_other(ob,"short",0)+".\n"); } light(str) { if (level < 20) return 0; if (!str) return 0; if (str == "on") set_light(1); if (str == "off") set_light(-1); return 1; } enter(str) { object ob; if (level < ITEM_OVER) return 0; if (!str) return 0; ob = present(str,environment(myself)); if (!ob) return 0; move_object(myself,ob); call_other(myself,"look",0); } exit() { object ob; if (level < ITEM_OVER) return 0; ob = environment(environment(myself)); if (ob) { move_object(myself,ob); call_other(myself,"look",0); } else { write("Nowhere to exit to.\n"); } return 1; } grant_level(str) { int rec_lev; grantee = present(str,environment(myself)) /*find_player(str) uncomment when command avail*/; if (!grantee) { write(str+" is not within range.\n"); return 1; } rec_lev = call_other(grantee,"query_level",0); if (rec_lev >= GOD) { write("You can't mess with a god!\n"); return 1; } if (rec_lev > level) { write("You can't change a more powerful wizard!\n"); return 1; } if (level < SENIOR) { write("You are still a junior wizard and can't grant power!\n"); return 1; } if ((level < GOD && rec_lev >= ELDER) || (level < ELDER && rec_lev >= SENIOR)) { write("You may not grant power to your peers\n"); return 1; } write("What level do you want to grant "+str +"?\n"+ str + " is level "+rec_lev+" now.\n"); input_to("grant_level2"); } grant_level2(str) { int rec_lev; if (!str) { grantee = 0; write("Aborted.\n"); return 1; } if (!grantee || this_player() != myself) { write("Level setting eror.\n"); illegal_patch("grant_level2"); } sscanf(str,"%d",rec_lev); if (!rec_lev) { write("Invalid integer.\n"); return 1; } if (rec_lev<20 && level < GOD) { write("Only a god can take away wizard status"); return 1; } if ((level < GOD && rec_lev >= ELDER) || (level < ELDER && rec_lev >= SENIOR)) { write("You may not promote someone to the status of a peer"+ " or higher.\n"); return 1; } call_other(grantee,"set_wiz_level",set_handshake(str)); write("level "+str+" granted.\n"); } valid_read(str) { return call_other(myself,"valid_read",str); } valid_write(str) { return call_other(myself,"valid_write",str); } update(num){ if (num == 1) level = call_other(myself,"query_level",0); } set_wc(str) { int wc,num; sscanf(str,"%d",num); wc = num; if ((num > 10 + level/2) && (level < ALL_POWER)) { wc = 10 + level / 2; write("weapon class "+num+" too high setting weapon class" + wc); } call_other(myself,"set_wc",wc); return 1; } ear_muffs(str) { if (level < CREATE) return 0; if (!str) return 0; if (str == "on") muffled = 1; if (str == "off") muffled = 0; call_other(myself,"update",6); return 1; } query_msgin() { return msgin; } query_msgout() { return msgout; } query_mmsgin() { return mmsgin; } query_mmsgout() { return mmsgout; } query_msghome() { return msghome; } query_invis() { return is_invis; } query_alignment() {return alignment;} query_al_title() {return al_title;} query_muffled() { return muffled; } wizhelp(what) { if (!what) { write ("Type 'help wizard' for a list of wizard commands.\n"); return 0; /* Return normal help */ } if (what == "wizard") { write("Do 'cat /doc/w/<topic>' for more information.\n\n"); write("Do 'help wiz_levels' for a list of levels necessary for certain functions.\n"); if (level >= EXPLORE) { write("goto <room/player> -- go to the specified room or player.\n"); write("cat <file> -- look at the specified file.\n"); write("ls <path> -- list the files in the specified directory.\n"); write("origin <obj> -- give the object handle of the specified object.\n"); write("where <obj> -- give the environment of the specified object.\n"); write("castle <name> -- goes to a wizard's castle\n"); } if (level >= ECHO) { write("echo, echoto, echoall-- make the argument appear to the appropriate group.\n"); } if (level >= SENIOR) { write("promote <wizard> -- change a wizards level.\n"); write("work <name> -- change pwd, castle, and log defaults\n"); } if (level >= CREATE) { write("clone <object> -- create the object in your inventory.\n"); write("dest(ruct) <object> -- destroy the specified object completely.\n"); write("load <room> -- load the specified room (or object)\n"); write("reset <object/room> -- cause the specified object to experience a reset.\n"); write("update <object/room> -- remove the specified object and delete the .i file\n"); write("rm <file> -- delete the specified file.\n"); write("ed <file> -- edit the specified file.\n"); write("home -- take you to your workroom, if you have a workroom.c\n"); write("localcmd -- list all commands you can currently do.\n"); write("earmuffs -- makes you not hear shouts by players.\n"); write("cd <dir> -- change directory (supports ~ and ~name)\n"); write("log <file> -- cat a log file\n"); write("stat <living> -- give statistics on player or monster.\n"); } if (level >= OUT_OF_BODY) { write("in <room> <action> -- perform the action in the room.\n"); write("at <living> <action> -- perform the action at the player or monster.\n"); } if (level >= SHUTDOWN) { write("shutdown <num>/now -- kick all players off and kill the game in <num> minutes.\n"); write("time <num> -- check or adjust shutdown time.\n"); } if (level >= CONTROL) { write("force <player> <act> -- force a player to do something.\n"); write("trans <player> -- bring the player to you.\n"); } if (level >= DAMAGE) { write("zap/heal <living> -- kill or heal the player or monster.\n"); } if (level >= SNOOP) { write("snoop <player> -- see everything the player does.\n"); } if (level >= INVIS) { write("invis <num>/vis -- turn invisible or visible.\n"); } if (level >= ITEM_OVER) { write("climbin <obj>/exit -- enter or leave an object.\n"); write("get!,drop!,give!,put!-- do action even if you normally couldn't.\n"); } write("wizlist -- list wizards' rankings.\n"); write("setmmin, setmmout, setmin, setmout, setmhome, review\n"); write(" -- deal with travel messages.\n"); write("emote <arg> -- print your name followed by the argument in the room.\n"); write("setal, setaln -- set the name and number of your alignment.\n"); write("people -- list all players and their location.\n"); write("light <on/off> -- make yourself a light source (or not).\n"); write("hands <num> -- set your own weapon class.\n"); return 1; } if (what == "wiz_levels") { write("Beginning Wizards can: wizlist,setmmin, setmmout, setmin,setmout, setmhome, \n"); write(" review,emote,setal,setaln,people,light,hands\n"); if (level >= EXPLORE) { write("Level "+EXPLORE+" Wizards can: goto,cat,ls,origin,where,castle\n"); } if (level >= CREATE) { write("Level "+CREATE+" Wizards can: clone,dest,destruct,load,reset,update,rm,\n"); write(" ed,home,localcmd,earmuffs,cd,log,stat\n"); } if (level >= TITLE) { write("Level "+TITLE+" Wizards can: title\n"); } if (level >= INVIS) { write("Level "+INVIS+" Wizards can: invis,vis\n"); } if (level >= STAT) { write("Level "+STAT+" Wizards can: read other wizard's files\n"); write(" get current hp with stat\n"); } if (level >= OUT_OF_BODY) { write("Level "+OUT_OF_BODY+" Wizards can: in,at\n"); } if (level >= CONTROL) { write("Level "+CONTROL+" Wizards can: force,trans\n"); } if (level >= SNOOP) { write("Level "+SNOOP+" Wizards can: snoop\n"); } if (level >= DAMAGE) { write("Level "+DAMAGE+" Wizards can: zap,heal\n"); } if (level >= ITEM_OVER) { write("Level "+ITEM_OVER+" Wizards can: climbin,exit,get!,drop!,give!,put!,\n"); if (level >= CONTROL) { write(" trans!\n"); } } if (level >= SENIOR) { write("Level "+SENIOR+" Wizards can: edit other wizard's files\n"); write(" promote,work\n"); } if (level >= ECHO) { write("Level "+ECHO+" Wizards can: echo, echoto, echoall\n"); } if (level >= ELDER) { write("Level "+ELDER+" Wizards can: edit log files\n"); } if (level >= SHUTDOWN) { write("Level "+SHUTDOWN+" Wizards can: shutdown,time\n"); } return 1; } } heart_beat() { int interval; time_shut -= 1; if (time_shut == 0) { log_file("SHUTDOWN","Shutdown complete.\n"); call_other(myself,"remote_cmd",set_handshake("shutdown now")); tell_object(myself,"The shutdown didn't work.\n"); set_heart_beat(0); } interval = 20; if (time_shut > 200) interval = 100; if (time_shut > 600) interval = 200; if (time_shut > 1200) interval = 600; if (!(time_shut % interval)) shout("!The game will be shut down in "+time_shut/20+" minutes.\n"); return; } adjust_time(new_time) { string str; int temp; if (level < SHUTDOWN) return 0; if (!new_time) { write(time_shut/1200 + ":"+(time_shut%1200)/20+":"+(time_shut%20)*3+" left to shutdown.\n"); return 1; } str = new_time; if (!str) str = "5"; if (lower_case(str) == "now") shutdown(); if (sscanf(str,"%d",temp) != 1) { write("Not a valid time.\n"); return 1; } time_shut = temp; write("Shutdown rescheduled for " + time_shut + " minutes.\n"); shout("!Shutdown rescheduled for "+time_shut+" minutes.\n"); log_file("SHUTDOWN","Shutdown rescheduled for "+time_shut+" minutes.\n"); time_shut *= 20; return 1; } log (str) { if (level < CREATE) return 0; if (str) log = "/log/"+str; cat(log); return 1; } castle (str) { if (level < EXPLORE) return 0; if (str) castle = "/players/"+str+"/castle"; /* do it this way to be sure that all is loaded */ teleport(castle); exit(); } work(str) { if (level < SENIOR) return 0; if (!str) str=name; write("Working on the property of "+str+"\n"); pwd = "/players/"+str+"/"; castle = "/players/" + str + "/castle"; log = "/log/"+str; call_other(myself,"set_pwd",pwd); return 1; } cd(str) { string temp,junk; if (level < CREATE) return 0; if (str) { if (str == "~") str = "/players/" + name; if (sscanf(str,"~%s",temp) == 1) str = "/players/" + temp; temp = call_other(myself,"valid_read",str+"/"); if (!temp) { write("Illegal path!\n"); return 1; } pwd = temp; call_other(myself,"set_pwd",pwd); } write("pwd: " + pwd + "\n"); return 1; } /*-------------------------------------------------------------------*/ /* soul */ /*-------------------------------------------------------------------*/ ghost() { return call_other(this_player(), "query_ghost"); } #include "soul_com.c"