/* /lib/put.c
* from the Dead Souls V Object Library
* handles things which may be put into other objects
* created by Descartes of Borg 960114
*/
private mixed PreventPut;
// abstract methods
string GetShort();
mixed CanDrop(object who);
mixed eventMove(mixed dest);
// end abstract methods
mixed SetPreventPut(mixed val) {
return (PreventPut = val);
}
mixed GetPreventPut() {
return PreventPut;
}
mixed CanPut(object who) {
mixed tmp;
if( (tmp = CanDrop(who)) != 1 ) return tmp;
if( environment() != this_player() ) return 0;
if( !PreventPut ) return 1;
if( intp(PreventPut) ) return 0;
if( stringp(PreventPut) ) return PreventPut;
if( objectp(PreventPut) ) {
if( PreventPut == who )
return "You cannot put " + GetShort() + " anywhere.";
else return 1;
}
else return evaluate(PreventPut, who);
}
mixed eventPut(object who, object storage) {
if( !eventMove(storage) ) {
who->eventPrint("There is not enough room in there!");
return 0;
}
who->eventPrint("You put " + GetShort() + " into " +
(string)storage->GetShort() + ".");
environment(who)->eventPrint((string)who->GetName() + " puts " +
GetShort() + " into " +
(string)storage->GetShort() + ".", who);
return 1;
}
static void create() {
PreventPut = 0;
}
mixed direct_put_obj_word_obj() {
return CanPut(this_player());
}