int new_object; int new_value; string new_short, new_long, new_name; short() { if (new_object) return new_short; return "The wand of creation"; } query_value() { if (new_object) return new_value; return 0; } long() { if (new_object) { write(new_long + "\n"); return; } write("It is a long and worn wand.\n"); write("It originally belonged to Lars.\n"); write("He used it when he created the world.\n"); write("You probaly can't use it.\n"); } init() { if (!new_object && call_other(this_player(), "query_level") > 19) { add_action("light"); add_verb("light"); add_action("silence"); add_verb("silence"); add_action("wave"); add_verb("wave"); add_action("fetch"); add_verb("fetch"); add_action("low_remove"); add_verb("low_remove"); add_action("destr"); add_verb("destr"); add_action("rem_room"); add_verb("rem_room"); add_action("crash"); add_verb("crash"); add_action("echo"); add_verb("$"); add_action("trace"); add_verb("trace"); add_action("remove"); add_verb("remove"); add_action("find"); add_verb("find"); add_action("patch"); add_verb("patch"); add_action("lookplayer"); add_verb("lookplayer"); } } id(str) { if (new_object) return str == new_name; return str == "wand" || str == "wand of creation"; } wave(str) { if (str && !id(str)) return 0; if (new_object) return 0; write("The wand gets warm, and activates.\n"); write("You are now creating a new object.\n"); if (call_other(this_player(), "query_level") < 20) { write("Something falters ...\n"); return 1; } write("Give the name of the object: "); say(call_other(this_player(), "query_name") + " waves the wand of creation.\n"); input_to("set_new_name"); return 1; } set_new_name(str) { if (str == "") { write("Aborted\n"); return; } new_name = lower_case(str); write("Give the short description of the object: "); input_to("set_new_short"); } set_new_short(str) { if (str == "") { write("Aborted\n"); return; } new_short = str; write("Give the long description of the object (terminate with '**'):\n"); input_to("set_new_long"); new_long = 0; } set_new_long(str) { if (str == "") { write("Aborted.\n"); return; } if (str == "**") { write("Give the value of the object: "); input_to("set_new_value"); return; } if (new_long) new_long = new_long + str + "\n"; else new_long = str + "\n"; input_to("set_new_long"); } set_new_value(str) { if (str == "") { write("Aborted.\n"); return; } if (sscanf(str, "%d", new_value) == 1) { new_object = 1; write("DONE.\n"); say(call_other(this_player(), "query_name") + " has created " + new_short + ".\n"); move_object(clone_object("obj/wand"), this_player()); return; } write("Bad value. Aborted.\n"); } get() { return 1; } reset(arg) { if (!arg) set_light(1); } crash() { shout("You hear a distant rumble.\n"); shout(call_other(this_player(), "query_name") + " has entered the game.\n"); write("Ok.\n"); return 1; } echo(str) { if (!str) return 0; say (str + "\n"); return 1; } trace(str) { object ob; if (call_other(this_player(), "query_level") < 20) { write("Failure.\n"); return 1; } if (!str) { write("Give monster name as argument.\n"); return 1; } ob = present(str, environment(this_player())); if (!ob) ob = find_living(str); if (!ob) { write("No " + str + " found.\n"); return 1; } write(ob); write("\n"); write(environment(ob)); write("\n"); return 1; } remove() { object ob; if (call_other(this_player(), "query_level") < 20) { write("Failure.\n"); return 1; } ob = environment(this_player()); if (!ob) { write("Not found. This should not happen !\n"); return 1; } call_other(this_player(), "X#players/" + call_other(this_player(), "query_name") + "/workroom"); destruct(ob); return 1; } find(str) { object ob; if (!str) return 0; ob = find_object(str); write(ob); return 1; } patch(str) { string name, with, what; int iwhat; object ob; if (!str) return 0; if (sscanf(str, "%s %s %d", name, with, what) == 3) iwhat = 1; else if (sscanf(str, "%s %s %s", name, with, what) != 3) { if (sscanf(str, "%s %s", name, with) == 2) iwhat = 0; else return 0; } if (name == "here") ob = environment(this_player()); else ob = present(name, environment(this_player())); if (what == "me") what = this_player(); if (!ob) ob = find_living(name); if (!ob) { write("No such object here.\n"); return 1; } write("Got: "); write(call_other(ob, with, what)); write("\n"); say(call_other(this_player(), "query_name") + " patched the internals of " + call_other(ob, "short") + ".\n"); return 1; } rem_room(str) { object ob; ob = find_object(str); if (!ob) { write("No shuch object.\n"); return 1; } destruct(ob); write("Ok.\n"); return 1; } destr(obj) { object ob; ob = present(obj, this_player()); if (!ob) { write("No such object.\n"); return 1; } write("Ok.\n"); say(call_other(this_player(), "query_name") + " got rid of " + call_other(ob, "short") + ".\n"); destruct(ob); return 1; } low_remove(num) { int n; object ob; if (sscanf(num, "%d", n) != 1) return 0; ob = first_inventory(environment(this_player())); while(n>0 && ob) { n -= 1; ob = next_inventory(ob); } if (ob == this_player()) { write("That is your self !\n"); return 1; } write("Destroying: " + call_other(ob, "short") + ".\n"); destruct(ob); return 1; } fetch(str) { move_object(str, this_player()); return 1; } silence(str) { object ob; ob = find_living(str); if (!ob) { write("No such player.\n"); return 0; } call_other(clone_object("obj/shout_curse"), "start", ob); write("Ok.\n"); return 1; } lookplayer(str) { object ob; int i; if (!str) return 0; ob = find_living(str); if (!ob) return 0; write("Inventory of " + call_other(ob, "short") + ":\n"); i = 0; ob = first_inventory(ob); while(ob) { string short_str; write(i + "\t"); short_str = call_other(ob, "short"); if (short_str) write(short_str + ",\t"); write(ob); write("\n"); ob = next_inventory(ob); i += 1; } } light() { write("Total light: " + set_light(0) + "\n"); return 1; }