/* /lib/pile.c
* from the Dead Souls Object Library
* basically a pile of precious coinses
* created by Descartes of Borg 951029
* Version: @(#) pile.c 1.2@(#)
* Last modified: 96/11/12
*/
#include <lib.h>
inherit LIB_ITEM;
string PileType = 0;
int PileAmount = 0;
static void create(){
string *saveds;
item::create();
SetNoCondition(1);
saveds = item::GetSave();
saveds += ({ "PileType", "PileAmount" });
AddSave( saveds );
SetKeyName("pile");
}
string array GetId(){
string array id;
string tender = "coins";
if(PileType == "dollars") tender = "bills";
id = item::GetId();
if( PileType ){
id += ({ PileType, PileAmount + " " + PileType, "pile of "+PileType });
}
return ({ id..., tender, "money", "pile", "pile of "+ PileAmount + " " + PileType });
}
int GetMass(){
return currency_mass(PileAmount, PileType);
}
void SetPile(string str, int amt){
PileType = str;
PileAmount = amt;
if(!PileAmount || PileAmount < 1 ){
SetLong("a pile of money");
call_out( (: eventDestruct :), 1);
}
else SetLong("It is a pile of " + PileAmount + " " + PileType + ".");
parse_refresh();
}
void SetCurrency(string str, int amt){
SetPile(str, amt);
}
string GetPileType(){ return PileType; }
int GetPileAmount(){ return PileAmount; }
string GetShort(){
string str = item::GetShort();
if(!PileAmount || PileAmount < 1 ){
call_out( (: eventDestruct :), 1);
return "a pile of money";
}
if( str ){
return str;
}
else {
return "a pile of " + PileAmount + " " + PileType;
}
}
mixed eventGetMoney(object who, int amount, string curr){
if( who->AddCurrency(curr, amount) == -1 ){
who->eventPrint("You had a problem getting the money.");
return 1;
}
send_messages("get", "$agent_name $agent_verb " + amount + " " +
curr + " from " + GetShort() + ".", who, 0, environment(who));
PileAmount -= amount;
if( PileAmount < 1 ){
call_out((: Destruct :), 0);
return 1;
}
SetPile(PileType, PileAmount); /* This refreshes the parser */
return 1;
}
int eventMove(mixed dest){
int x;
x = item::eventMove(dest);
if( environment() && !living(environment()) ){
return x;
}
if(environment() && living(environment())){
environment()->AddCurrency(PileType, PileAmount);
environment()->AddCarriedMass(-this_object()->GetMass());
SetShort("a pile of " + PileAmount + " " + PileType);
PileAmount = 0;
call_out((: Destruct :), 0);
return x;
}
}
mixed direct_get_wrd_wrd_out_of_obj(string num, string curr){
int amt;
if( environment() != environment(this_player()) ){
return "#You cannot reach the pile!";
}
if( num[0] < '0' || num[0] > '9' ){
return 0;
}
if( (amt = to_int(num)) < 1 ){
return "That's a totally bogus amount.";
}
if( curr != PileType ){
return "#The pile has no " + curr + " in it, only " + PileType + ".";
}
if( amt > PileAmount ){
return "#There is not that much in the pile.";
}
if( !this_player()->CanCarry(currency_mass(amt, curr)) ){
return "It is too heavy for you!";
}
return 1;
}
mixed direct_get_wrd_wrd_from_obj(string amt, string curr){
return direct_get_wrd_wrd_out_of_obj(amt, curr);
}
void init(){
::init();
if(!PileAmount || PileAmount < 1 ){
SetLong("some money");
call_out( (: eventDestruct :), 1);
}
}