/* * The receipt given out for missing items. * Modified by Jeremy, 22-Feb-97 * - added "kiss" command and associated changes */ #define CLONER "/global/player/cloner" inherit OBJECT_OBJ; int timestamp; string obname, obpath, virt_name; mixed static_save, dynamic_save; void setup() { set_name("receipt"); set_short( "missing item receipt" ); obname = "unknown object"; obpath = "***"; set_value(5); set_weight(1); add_property("writeable", 1 ); add_property("sale_value", 1 ); add_property("paper", 1 ); add_property("nosteal", 1 ); set_max_size(1000); timestamp = time(); } /* setup() */ void init() { add_command("kiss"); } /* init() */ void set_obname(string s) { obname = s; } void set_object(string s) { obpath = s; } void set_virtobname(string s) { virt_name = s; } void set_dynamic_save(mixed m) { dynamic_save = m; } void set_static_save( mixed m ) { mixed p; static_save = m; if( obname != "unknown object" ) return; // Try to find the short in here somewhere p = m[0]; while( mapp(p) ) { if( !undefinedp(p["short"]) ) { obname = p["short"]; return; } p = p["::"]; } } /* set_static_save() */ void being_sold() { call_out("dest_me", 4 ); } /* being_sold() */ string long( string str, int light ) { return "This is a receipt for your missing " + obname + ". You can either " "sell it for something which may be close to replacement value (and may not), " "or give it to a creator and ask very nicely to have it replaced.\n" "You can also try kissing it - who knows, you may get lucky.\n"; } /* long() */ mapping query_dynamic_auto_load() { return ([ "::" : ::query_dynamic_auto_load(), "obname" : obname, "obpath" : obpath, "obvalue" : value, "virt" : virt_name, "timestamp" : timestamp, "dynamic" : dynamic_save, "static" : static_save ]); } /* query_dynamic_auto_load() */ void init_dynamic_arg(mapping arg) { obname = arg["obname"]; if( stringp( obname ) ) add_adjective( explode( lower_case( obname ), " " ) ); obpath = arg["obpath"]; set_value(arg["obvalue"]); virt_name = arg["virt"]; timestamp = arg["timestamp"]; static_save = arg["static"]; dynamic_save = arg["dynamic"]; ::init_dynamic_arg(arg["::"]); } /* init_dynamic_auto_load() */ string query_obname() { return obname; } string query_obpath() { return obpath; } int query_timestamp() { return timestamp; } string query_virt_obname() { return virt_name; } mixed query_dynamic_save() { return dynamic_save; } mixed query_static_save() { return static_save; } mixed stats() { mixed stuff; stuff = ::stats() + ({ ({ "obname", obname }), ({ "obpath", obpath }), ({ "timestamp", timestamp + " (" + ctime(timestamp) + ")" }), }); if( virt_name ) stuff += ({ ({ "virtname", virt_name }) }); return stuff; } /* stats() */ int do_kiss() { object thing; if( sizeof(static_save) < 2 ) { if( creatorp(TP) ) { write("This receipt has no auto-load information, possibly " "because the object was broken when the player logged " "out. It will have to be replaced by hand.\n"); } else { write("Sorry, but this object is too broken to repair with a kiss. " "You'll have to contact a creator.\n"); } return 1; } if( query_cloned_by() != TP->query_name() && !creatorp(TP) ) { write("The receipt whispers: I don't belong to you!\n"); return 1; } if( !catch( thing = (object)CLONER->clone( obpath ) ) ) { if( thing ) { thing->init_static_arg( static_save[0] ); thing->init_dynamic_arg( static_save[1] ); if( !thing->move( ENV(TO) ) || !thing->move( ENV(ENV(TO)) ) ) { write( the_short()+" suddenly transforms itself into " + thing->a_short() + ".\n"); tell_room( ENV(TP), TP->the_short()+" kisses a piece of paper, " "which suddenly transforms into "+thing->a_short()+".\n", ({ TP })); add_succeeded_mess("", ({ }) ); move("/room/rubbish"); } else { write("The receipt whispers: I'm going to need some creator " "help.\n"); thing->dest_me(); } } else { write("The receipt whispers: Sorry, I'm still broken. " "Try again some other time, or contact a creator.\n"); } } else { write("The receipt whispers: Sorry, I'm still broken. " "Try again some other time, or contact a creator.\n"); } return 1; } /* do_kiss() */