/* Filename : spy.c * Description : special item to spy out room messages * * written : 05-10-1996 - Gunner * last modified : 28-05-1998 - Gunner * HTML-Version : 06-02-2000 - Ghorwin */ #include <mudlib.h> inherit I_ITEM; #define FUNC "/doc/crashcourse/course09/spyfuncs" create() { ::create(); set_name("glassorb"); add_id(({"glass","orb","spying orb"})); set_short("A glassorb"); set_long("A glassorb used for spying on other people.\n"); set_weight(1); set_value(500+random(500)); set_info("'send spy to <player/monster>'\n"); add_trigger("send",(:call_other,FUNC,"send_spy",this_object():)); add_property(({"hidden","magic","glass"})); replace_program(I_ITEM); }
/* Filename : spyfuncs.c * Description : the functionfile for spy.c * * written : 05-10-1996 - Gunner * last modified : 28-05-1998 - Gunner * HTML-Version : 06-02-2000 - Ghorwin */ #include <mudlib.h> #include "/doc/crashcourse/defs.h" inherit I_DAEMON; #define TIMEOUT 60*3+random(60*2) /* * send_spy : Start spying on someone... */ int send_spy(object orb, string arg) { string name; object spy, who, room; if (!arg || sscanf(lower_case(arg),"spy to %s",name) != 1) NOT_FAIL("Send spy to whom?\n"); who = find_living(name); if (!who) NOT_FAIL("Can't find " + name + " anywhere.\n"); room = ENV(who); if (!room) NOT_FAIL("No room found.\n"); if (Q_NOMAGIC(room) || Q_NOTELEIN(room)) NOT_FAIL("The globe fails you.\n"); spy = clone_object(I_MONSTER); spy->add_hook("__catch_tell",({TO, "spy_tells"}),spy); spy->invis(); spy->add_property("spy_owner",TP); spy->add_property("no_fight"); tell_room(room,"You notice a brief shimmering in the air.\n"); spy->move(room); call_out("remove_spy",TIMEOUT,spy); tell_object(TP,"The globe vanishes without a trace.\n"); orb->destroy(); return 1; } /* * spy_tells : Send the spy messages to the player */ void spy_tells(object spy, string message) { object owner = spy->query_property("spy_owner"); if (!owner) { spy->destroy(); return; } message = C_BOLD + "[SPY] " + C_END + message; tell_object(owner, message); } /* * remove_spy : Time to remove the spy */ void remove_spy(object spy) { object owner; if (!spy) return; owner = spy->query_property("spy_owner"); if (owner) tell_object(owner,"Your spy suddenly stops sending you information.\n"); spy->destroy(); }