/* /lib/drop.c * From the Dead Souls Object Library * Makes an object something which can be dropped * Created by Descartes of Borg 960113 * Version: @(#) drop.c 1.2@(#) * Last modified: 96/12/22 */ #include <lib.h> #include <function.h> #include <rooms.h> private mixed PreventDrop = 0; private mixed DestructOnDrop = 0; // abstract methods string GetDefiniteShort(); mixed eventMove(mixed dest); // end abstract methods mixed GetPreventDrop() { return PreventDrop; } mixed SetPreventDrop(mixed val) { if(!intp(val) && !stringp(val) && !functionp(val) && !objectp(val) ) { error("Bad argument 1 to SetPreventDrop().\n"); } return (PreventDrop = val); } int GetDestructOnDrop() { return DestructOnDrop; } int SetDestructOnDrop(int val) { return (DestructOnDrop = val); } mixed CanDrop(object who) { if( !PreventDrop ) { return 1; } if( intp(PreventDrop) ) { return 0; } if( stringp(PreventDrop) ) { return PreventDrop; } if( objectp(PreventDrop) ) { if( PreventDrop == who ) { return capitalize(GetDefiniteShort()) + " simply will not leave your grasp."; } else { return 1; } } else { if( functionp(PreventDrop) & FP_OWNER_DESTED ) { return "There is a problem with a functional."; } return evaluate(PreventDrop, who); } } mixed eventDrop(object who) { mixed tmp; if( who != environment() ) { return 0; } if(DestructOnDrop) tmp = eventMove(ROOM_FURNACE); else tmp = eventMove(environment(who)); if( !tmp ) { who->eventPrint("Something prevents you from dropping " + GetDefiniteShort() + "."); return 1; } if( tmp != 1 ) { return tmp; } send_messages("drop", "$agent_name $agent_verb $target_name.", who, this_object(), environment(who)); if(DestructOnDrop) tell_room(environment(who),capitalize(this_object()->GetShort())+" vanishes in a flash of light!"); return 1; } mixed direct_drop_obj(object target) { if( environment() != this_player() ) { return "#You don't have that to drop."; } return CanDrop(this_player()); }