#include <mudlib.h>
#define CHARISMA (int)this_player()->query_charisma()
#define MY_CHARISMA 15
#define DEFAULT_COST 1000
#define NAME (string)this_player()->query_name()
inherit MONSTER;
static int i;
static object bag, arrow, hammer;
void reset(status arg) {
::reset(arg);
if(!present("hammer")) {
hammer = clone_object(WEAPON);
hammer -> set_type("crush");
hammer -> set_wc(11);
hammer -> set_length(24);
hammer -> set_name("hammer");
hammer -> set_weight(6);
hammer -> set_value(620);
hammer -> set_short("A small hammer");
hammer -> set_long(
"Far from being a war hammer, this small weapon would be better \n"+
"thrown at an opponent. The head is a little damaged, and from \n"+
"the general condition of the weapon it would appear to have \n"+
"been mainly used as a minning tool.\n");
move_object(hammer, this_object());
init_command("wield hammer");
}
if(!present("bag")) {
bag = clone_object("objects/bag");
bag -> set_name("bag");
bag -> set_short("A small leather pouch");
bag -> set_alias("pouch");
bag -> set_long("A simple leather pouch made from drow-hide.\n");
bag -> set_info("It has the name Malz branded on the inside.\n");
bag -> set_closed(1);
move_object(bag, this_object());
}
if(!present("arrow head", bag)) {
for(i=0; i<5; i++) {
arrow = clone_object("objects/head");
arrow -> set_short("A stone arrow head");
arrow -> set_long("This is a fine arrow head, obviously crafted \n"+
"by a dwarvish stone mason. \n");
arrow -> set_value(random(10) + 10);
move_object(arrow, bag);
}
}
if(arg) return;
set_name("malachite");
set_short("Malachite, the stonemason");
set_alias("dwarf");
set_long(
"Malachite is a simple apprentice stonemason who spends \n"+
"his time deep within the mountains and caves practising\n"+
"his skills on small rocks.\n");
set_race("mountain dwarf");
set_level(5);
set_hp(80);
load_chat(5, ({ "Malachite chips away at some stone.\n",
"Malachite says: I'll sell you an arrow head if you like.\n",
"Malachite works on an arrow head.\n",
"Malachite looks at his arrow head.\n",
}));
}
void init() {
::init();
add_action("buy", "buy");
}
status buy(string str) {
string tmp1, tmp2;
int cost;
object ob;
if(!str) {
write("Malachite says: What did you want to buy from me?\n");
return 1;
}
if(str == "stone") {
write("Malachite says: But there's lots of stone here. Just look around.\n");
return 1;
}
if(sscanf(str, "%sarrow%s", tmp1, tmp2)) {
write("Malachite exclaims: I have some arrow heads! \n");
cost = DEFAULT_COST;
write("Malachite bargains with you over the price of the arrow head.\n");
if(random(CHARISMA) > random(MY_CHARISMA))
cost -= cost/4;
else
cost += cost/3;
if(this_player()->query_money() < cost) {
write("Malachite says: You don't seem to have "+MONEY->convert(cost)+
" coins for the arrow head.\n");
return 1;
}
if(!this_player()->add_weight(1)) {
write("Malachite says: You can't carry anymore.\n");
return 1;
}
this_player()->add_money(-cost);
write("Malachite takes "+(string)MONEY->convert(cost)+" coins "+
"for the arrow head.\n");
write("Malachite hands you an arrow head.\n");
say("Malachite gives "+NAME+" an arrow head.\n", this_player());
arrow = clone_object("objects/head");
arrow -> set_long("This is a fine arrow head, obviously crafted \n"+
"by a dwarvish stonemason.\n");
move_object(arrow, this_player());
return 1;
}
write("Malachite asks: What do you want from me? I only make arrow heads.\n");
return 1;
}
void catch_tell(string str) {
string tmp1, tmp2;
if(sscanf(str, "%s says: arrow%s\n", tmp1, tmp2) ||
sscanf(str, "%s says: buy%s\n", tmp1, tmp2)) {
buy("arrow");
return;
}
}