/* /std/food.c
* from Nightmare IV
* a standard food item
* created by Bohemund@Nightmare 940403
*/
#include <std.h>
#include <config.h>
#include "food.h"
inherit OBJECT;
private int __Strength;
private function __EatFunction;
private mapping __Messages;
void create() {
__EatFunction = 0;
::create();
set_eat("You eat $O.", "$N eats $O.");
set_vendor_type("food");
set_prevent_put("You cannot store food in there!");
}
void init() {
::init();
if(environment(this_object()) != this_player()) return;
add_action("cmd_eat", "eat");
}
int cmd_eat(string str) {
string tmp;
if(present(str = lower_case(str), this_player()) != this_object())
return notify_fail("Eat what?\n");
if((object)this_player()->query_current_attacker())
return notify_fail("You cannot eat while fighting!\n");
if(__EatFunction) {
if(!((int)this_player()->add_stuffed(query_strength())))
return notify_fail("You are way too full for that!\n");
(*__EatFunction)();
}
else {
if(!((int)this_player()->add_stuffed(query_strength())))
return notify_fail("You are way too full for that!\n");
tmp = replace_string(__Messages["my"], "$N", "You");
tmp = replace_string(tmp, "$O", query_short());
message("my_action", tmp, this_player());
tmp = replace_string(__Messages["other"], "$N",
(string)this_player()->query_cap_name());
tmp = replace_string(tmp, "$O", query_short());
message("other_action", tmp, environment(this_player()),
({ this_player() }));
}
this_player()->heal(query_strength());
this_object()->remove();
return 1;
}
varargs void set_eat(mixed val, string str) {
if(!str && !functionp(val))
error("Wrong number of arguments to set_eat().\n");
else if(str) {
if(!stringp(val)) error("Bad argument 1 to set_eat().\n");
else if(!stringp(str)) error("Bad argument 2 to set_eat().\n");
}
if(functionp(val)) __EatFunction = copy(val);
else __Messages = ([ "my" : val, "other" : str ]);
}
function query_eat_function() {
return (__EatFunction ? copy(__EatFunction) : 0);
}
string query_my_msg() { return (__EatFunction ? 0 : __Messages["my"]); }
string query_other_msg() { return (__EatFunction ? 0 : __Messages["other"]); }
void set_strength(int x) { __Strength = x; }
int query_strength() { return __Strength; }
int query_food() { return 1; }
#ifdef __OLD_FOOD__
void set_my_mess(string str) {
if(!__Messages) __Messages = allocate_mapping(2);
__Messages["my"] = str;
}
void set_your_mess(string str) {
if(!__Messages) __Messages = allocate_mapping(2);
__Messages["other"] = "$N "+str;
}
#endif /* __OLD_FOOD__ */