mud/lib/domains/Praxis/obj/misc/donation.c
2020-09-06 05:43:07 -07:00

121 lines
3.4 KiB
C

inherit "/lib/std/item";
//#include <security.h>
#include <council.h>
#define LOG "/realms/nialson/data/mage_coffer_log"
int loaded, stored_amount;
void init() {
::init();
add_action("donate", "donate");
add_action("withdraw", "withdraw");
}
void create() {
::create();
loaded=stored_amount=0;
SetKeyName("donation box");
SetId( ({ "donation box", "box" }) );
SetShort("a donation box");
SetRead("Property of Frobitz collection agency.");
SetMass(0);
SetValue(0);
SetPreventGet("You aren't allowed to take that. No one is.");
SetNoClean(1);
}
int restore_int(string str) {
string tmp;
string repl;
int value;
tmp=absolute_path("/realms/nialson/data", str);
repl=read_file(tmp, 1, 1);
sscanf(repl, "%d\n", value);
return value;
}
void save_int(string str, int value) {
string tmp;
tmp=absolute_path("/realms/nialson/data", str);
rm(tmp);
write_file(tmp, ""+value+"\n");
}
int donate(string str) {
int amount;
if(!str) {
notify_fail("Donate what?\n");
return 0;
}
if(sscanf(str, "%d gold", amount) !=1) {
notify_fail("Correct syntax: <donate [#] gold>\n");
return 0;
}
if(amount < 1) {
notify_fail("That would be a nifty trick indeed!\n");
return 0;
}
if(this_player()->query_money("gold") < amount) {
notify_fail("You don't have that much gold!\n");
return 0;
}
if (!loaded) {
stored_amount = restore_int("mage_coffers");
loaded=1;}
this_player()->add_money("gold", -1*amount);
write("You donate "+amount+" gold coins to the mages.");
say(this_player()->query_cap_name()+" donates some gold.", this_player());
stored_amount += amount;
write_file(LOG,""+stored_amount+"\t"+
this_player()->query_name()+" donates ."+amount+"\n");
save_int("mage_coffers", stored_amount);
return 1;
}
string GetLong(string junk) {
if (!loaded) {
stored_amount = restore_int("mage_coffers");
loaded=1;}
return
"A medium sized, VERY heavy box that contains the funds of the mage class.\n"+
"If you wish, you can <donate # gold> to increase those funds.\n"+
"The coffers currently contain "+stored_amount+" gold.\n";
}
int withdraw(string str) {
int amount;
#define TESTERS ({"nialson", "lassondra", "zaknaifen"})
if((-1==member_array(this_player()->query_name(), TESTERS))&&
(-1==member_array(this_player()->query_name(), MAGE_COUNCIL))) {
notify_fail("Only council members may withdraw money.\n");
return 0; }
if(!str) {
notify_fail("Withdraw what?\n");
return 0; }
if(sscanf(str, "%d gold", amount) !=1) {
notify_fail("Correct syntax: <withdraw [#] gold>\n");
return 0; }
if (!amount) {
notify_fail("Stop wasting my time and yours.\n");
return 0; }
if (amount < 0) {
notify_fail("Negatives not allowed!\n");
return 0; }
if (!loaded) {
stored_amount = restore_int("mage_coffers");
loaded=1;}
write("You withdraw "+amount+" gold coins from the mages.");
say(this_player()->query_cap_name()+" withdraws some gold.", this_player());
stored_amount -= amount;
this_player()->add_money("gold", amount);
write_file(LOG,""+stored_amount+"\t"+
this_player()->query_name()+" withdrew ."+amount+"\n");
save_int("mage_coffers", stored_amount);
return 1;
}