Generic Consumable I (#500)(an instance of Generic Boomerang Thing made by Dred)     This generic contains the basic functionality required for items that can be consumed. Also, as a child of the Generic Boomerang Thing #261, kids of this will return home after a substantial delay (1 hour) if they aren't consumed entirely before then. Go to location of this object, Consumable Storage Room. VERB SOURCE CODE: consume: "Does the special effects when this is consumed."; "this.consume_db:find(consume_verb) should return data in this format:"; "(NUM amt consumed, STR what player sees, STR what room sees, LIST {OBJ, STR verb, NUM delay, LIST args} for fork delayed response)"; if ((caller != this) || (this == this.consumable_root)) return E_PERM; endif con_verb = args[1]; if (valid(this.consume_db) && $object_utils:has_callable_verb(this.consume_db, "find")) if (eff = this.consume_db:find(con_verb)) player:tell(this:main_subs(eff[2])); player.location:announce(this:main_subs(eff[3])); this:consumed_amt(eff[1]); if (eff[4]) fork (eff[4][3]) eff[4][1]:(eff[4][2])(this, con_verb, eff[1], @eff[4][4]); endfork endif else player:tell("For some reason, you can't ", con_verb, " your ", this.name, "."); endif else player:tell("Unfortunately, there doesn't seem to be any way to ", con_verb, " that."); endif . build: "Sets up the consumable. Expects args:"; "(STR this new name, STR|LIST this new description)"; if (this == this.consumable_root) return E_PERM; endif this:load_verb(); this.amount = this.max_amount; this:set_name(args[1]); this:set_aliases({args[1]}); this:set_description(args[2]); this:moveto(player); . consumed_amt: if (caller != this) return E_PERM; endif this.amount = this.amount - args[1]; if (this.amount <= 0) this:cleanup(); endif . main_subs: "Usual subs. But have this verb so children can override and put in special subs as needed."; msg = args[1]; return $string_utils:pronoun_sub(msg); . cleanup: if ((caller != this) || (this == this.consumable_root)) return E_PERM; endif if (this.consume_verbs) delete_verb(this, this.consume_verbs[1]); endif this.amount = this.max_amount; this:moveto(this.home); . load_verb: if ((caller != this) || (this == this.consumable_root)) return E_PERM; endif if (this.consume_verbs) fullname = $string_utils:from_list(this.consume_verbs, " "); add_verb(this, {this.consumable_root.owner, "rd", fullname}, {"this", "none", "none"}); set_verb_code(this, this.consume_verbs[1], {"this:consume(verb);"}); endif . description: return this:main_subs(this.description); . PROPERTY DATA:       consume_verbs       consume_db       amount       max_amount       consumable_root CHILDREN: Generic Drink Object Generic Drug Object |