mud/lib/verbs/items/weigh.c
2020-09-06 05:43:07 -07:00

82 lines
2.3 KiB
C

#include <lib.h>
#include <vendor_types.h>
#include <rounds.h>
#include "include/weigh.h"
inherit LIB_VERB;
static void create() {
verb::create();
SetVerb("weigh");
SetRules("OBJ");
SetErrorMessage("What would you like to weigh?");
SetHelp("Syntax: weigh OBJ\n\n"
"A general estimate of how much a thing weighs."
"");
}
mixed can_weigh_obj() {
return 1;
}
mixed do_weigh_obj(object obj) {
string name, verb = "heft";
if(!obj) return "You must weigh something.";
/* Check for presence of objects */
name = obj->GetShort();
if( environment(obj) != this_player() ) {
this_player()->eventPrint("You do not have "+name+".");
return 1;
}
if(obj->GetWorn()) verb = "get a feel for";
this_player()->eventPrint("You stare intently at " + name + " and " +
verb + " it.");
environment(this_player())->eventPrint( this_player()->GetName() +
" looks at " + name + ".", this_player());
if( this_player()->GetInCombat() )
this_player()->SetAttack(0,
(: eventWeigh, this_player(), obj :),
ROUND_OTHER);
else eventWeigh(this_player(), obj);
return 1;
}
int eventWeigh(object who, object obj){
int ret, max, curr, cost, diff;
float tmp, error;
string ret_str, name;
if( !(obj) ) return 0;
name = obj->GetShort();
cost = random(3) + 1;
max = who->GetMaxStaminaPoints();
curr = who->GetStaminaPoints();
diff = max - curr;
if(diff > 0) error = to_float(random(percent(diff, curr)));
else diff = 0;
if((environment(obj) != who)){
who->eventPrint("You must have the item in your possession "
"to weigh it.");
return 0;
}
if(cost > who->GetStaminaPoints()){
who->eventPrint("You are too weary to weigh right now.");
environment(who)->eventPrint(
who->GetName() + " looks tired.", who);
return 0;
}
who->AddStaminaPoints(-cost);
ret = obj->GetWeight();
tmp = to_float(ret) * (error * 0.01);
ret += to_int(tmp);
ret /= 100;
if(ret < 1) ret_str = "less than one pound.";
else if(ret < 2) ret_str = "about one pound.";
else ret_str = "about " + cardinal(ret) + " pounds.";
write("You make a rough estimate that " + name + " weighs " +
ret_str);
return 1;
}