/* /verbs/items/put.c * from the Dead Souls Mud Library * put OBJ in OBJ * put OBJ into OBJ * created by Descartes of Borg 950114 * Version: @(#) put.c 1.2@(#) * Last modified: 96/12/31 */ #include #include "include/put.h" inherit LIB_VERB; string *eligible; static void create() { verb::create(); SetVerb("put"); SetSynonyms("place", "stick"); SetRules("OBS in OBJ", "OBS into OBJ", "OBS on OBJ", "OBS onto OBJ", "OBS OBJ", "WRD WRD in OBJ", "WRD WRD into OBJ", "WRD WRD on OBJ", "WRD WRD onto OBJ"); SetErrorMessage("Put what where?"); SetHelp("Syntax: \n" "Syntax: \n\n" "Allows you to stick objects into other objects.\n\n" "Synonyms: place, stick\n\n" "See also: get, give, drop"); } mixed can_put_obs_word_obj(object *foo1, string wrd, object foo2) { if(check_light()) return this_player()->CanManipulate(); else return 0; } mixed can_put_obs_obj(object *foo1, string wrd, object foo2){ return can_put_obs_word_obj(foo1, wrd, foo2); } mixed can_put_obj_word_obj(object target, string wrd, object storage) { object *target_arr; if(target) target_arr = ({ target }); return can_put_obs_word_obj(target_arr, wrd, storage); } mixed can_put_obj_obj(object target, string wrd, object storage){ return can_put_obj_word_obj(target, wrd, storage); } //mixed can_put_wrd_wrd_word_obj(string num, string curr,string wrd, mixed container) { mixed can_put_wrd_wrd_word_obj(mixed args...) { int amt; string num, curr, wrd; mixed container; object ob1, ob2; num = args[0]; curr = args[1]; wrd = args[2]; container = args[3]; ob1 = get_object(num+" "+curr); ob2 = get_object(implode(args[6..]," ")); if(ob1 && ob2) return can_put_obj_word_obj(ob1, wrd, ob2); if( !num || !curr ) return 0; if( (amt = to_int(num)) < 1 ) return "You cannot do that!"; if( this_player()->GetCurrency(curr) < amt ) return "You don't have that much " + curr + "."; if(newbiep(this_player())){ return "Newbies can't drop money."; } if(wrd == "on" || wrd == "onto"){ if(container && !inherits( LIB_SURFACE, container ) ) return "#That isn't a load-bearing surface."; } if(container && container->GetClosed()){ return "#That's closed."; } if(intp(check_light())) return this_player()->CanManipulate(); else return check_light(); } mixed do_put_obj_word_obj(object what, string wrd, object storage) { if(storage && storage->GetClosed()){ write(capitalize(storage->GetShort())+" is closed."); return 1; } if(wrd == "in" || wrd == "into") return storage->eventPutInto(this_player(), what); if(wrd == "on" || wrd == "onto") return storage->eventPutOnto(this_player(), what); } mixed do_put_obj_obj(object what, object storage){ string prepo; if(storage && inherits(LIB_SURFACE,storage)) prepo = "onto"; else prepo = "into"; return do_put_obj_word_obj(what, prepo, storage); } mixed do_put_obs_word_obj(mixed *res, string wrd, object storage) { object *obs; obs = filter(res, (: objectp :)); if( !sizeof(obs) ) { mixed *ua; ua = unique_array(res, (: $1 :)); foreach(string *lines in ua) { if(storage && storage->GetClosed()) write(capitalize(storage->GetShort())+" is closed."); else write("That doesn't seem possible at the moment."); return 1; } if(storage && storage->GetClosed()) write(capitalize(storage->GetShort())+" is closed."); else write("That doesn't seem possible at the moment."); return 1; } if(!sizeof(filter(obs, (: environment($1) == this_player() :)))){ write("You don't seem to be in possession of that."); eligible = ({}); return 1; } eligible=filter(obs, (: (!($1->GetWorn()) && environment($1) == this_player()) :)); if(!sizeof(eligible)){ write("Remove or unwield items before trying to put them somewhere."); eligible = ({}); return 1; } if(wrd == "in" || wrd == "into") { foreach(object ob in eligible) storage->eventPutInto(this_player(), ob); } if(wrd == "on" || wrd == "onto") { foreach(object ob in eligible) storage->eventPutOnto(this_player(), ob); } eligible = ({}); return 1; } mixed do_put_obs_obj(mixed *res, object storage){ string prepo; if(storage && inherits(LIB_SURFACE,storage)) prepo = "onto"; else prepo = "into"; return do_put_obs_word_obj(res, prepo, storage); } //mixed do_put_wrd_wrd_word_obj(string num, string curr, mixed wort, object ob) { mixed do_put_wrd_wrd_word_obj(mixed args...) { object pile, env; int amt; string num, curr, wort; mixed container; object ob, ob1, ob2; num = args[0]; curr = args[1]; wort = args[2]; ob = args[3]; ob1 = get_object(num+" "+curr); ob2 = get_object(implode(args[6..]," ")); if(ob1 && ob2) return do_put_obj_word_obj(ob1, wort, ob2); if(wort == "on") wort = "onto"; if(wort == "in") wort = "into"; if(wort == "onto" && !inherits( LIB_SURFACE, ob ) ) { write("That isn't a load-bearing surface."); return 1; } if(wort == "into" && inherits( LIB_SURFACE, ob ) ) { write("That's a surface. Try \"put on\""); return 1; } if((inherits(LIB_SIT,ob) && sizeof(ob->GetSitters())) || (inherits(LIB_LIE,ob) && sizeof(ob->GetLiers()))){ write("There appears to be someone blocking your access."); return 0; } amt = to_int(num); env = environment(this_player()); pile = new(LIB_PILE); pile->SetPile(curr, amt); if( !(pile->eventMove(ob)) || this_player()->AddCurrency(curr, -amt) == -1 ) { this_player()->eventPrint("Something prevents your action."); pile->eventDestruct(); return 1; } this_player()->eventPrint("You put " + amt + " " + curr + " "+wort+" "+ob->GetShort()+"."); environment(this_player())->eventPrint(this_player()->GetName() + " puts some " + curr + " "+wort+" "+ob->GetShort()+".", this_player()); return 1; } mixed eventCheckLight(object who) { return check_light(who); }