/* A bank - Angel, Feb 1994 */ #define OWNER (string)owner_ob->query_name() string owner, owner_name; object owner_ob; #include <mudlib.h> inherit ROOM; mixed calc_value(int i); void set_owner(string str); void reset(status arg) { set_no_fight(1); if(arg) return; #ifdef NATIVE_MODE } void create() { #endif /* native */ set_short("the city vault"); set_long( "A long counter of brown polished wood shines with the light from \n"+ "several lanterns hanging on the wall. Across the room a large gate\n"+ "of iron leads to the strong room, where all the valuables are kept.\n"+ "On the wall, behind the counter, is a golden plaque.\n"); set_items(({ "wood#counter", "It appears to be very old", "light#lantern#lanterns", "They shed light into the small banking "+ "chamber", "plaque", "Perhaps you could read it?", "gate#iron#strong room", "It looks very protected, and difficult to "+ "break into" })); set_weather(2, 0, 0); set_exits(({ "room/city/town_hall3", "south" })); set_smell("The strong smell of old wood permiates the air\n"); set_listen("Behind the iron gate you can hear money being counted...\n"); } void init() { ::init(); if(!owner) set_owner(0); add_action("read", "read"); add_action("withdraw", "withdraw"); add_action("deposit", "deposit"); add_action("balance", "balance"); } status read(string str) { if(str == "plaque") { say(this_player()->query_name()+" reads the plaque on the wall.\n"); write( "The plaque reads: \n"+ " The "+short(0)+" \n"+ " Banking commands are: \n"+ " Deposit <amount> .............Add money to your balance \n"+ " Withdraw <amount>.............Take money from your balance \n"+ " Balance ......................Find out your current balance \n"+ "\nValid amounts are in gold, silver, default is copper \n"+ "1 gold = 10 silver, 1 silver = 100 copper coins. \n"+ "Amount of transaction subject to 10% fee. \n"); return 1; } return 0; } status withdraw(string str) { string tmp1, tmp2; int amount; if(!present(owner)) { write("No one is here to help you.\n"); return 1; } if(!str) { write(OWNER+" asks: What did you say?\n"); return 1; } if(sscanf(str, "%d %s", amount, tmp1)) { if(tmp1 == "gold") amount *= 1000; else if(tmp1 == "silver") amount *= 100; } if(amount > (int)this_player()->query_savings()) { write(OWNER+" says: You don't have "+ "that much in the vault!\n"); return 1; } write(OWNER+" takes "+calc_value(amount)+" out of the vault.\n"); write(OWNER+" takes "+calc_value(amount/10)+" as his fee.\n"); this_player()->add_savings(-amount); amount -= amount/10; this_player()->add_money(amount); write(OWNER+" gives you "+calc_value(amount)+" coins.\n"); say((string)this_player()->query_name()+" withdraws some money.\n"); return 1; } status deposit(string str) { string tmp1, tmp2; int amount; if(!present(owner)) { write("There is no one here to help you.\n"); return 1; } if(!str) { write(OWNER+" asks: What was that? What did you say?\n"); return 1; } if(sscanf(str, "%d %s", amount, tmp1)) { if(tmp1 == "gold") amount *= 1000; if(tmp1 == "silver") amount *= 100; } if(amount > this_player()->query_money()) { write(OWNER+" exclaims: You don't have that much money to deposit!\n"); return 1; } this_player()->add_money(-amount); if(!amount/10) { write(OWNER+" takes "+calc_value(1)+" as his fee.\n"); } write(OWNER+" takes "+calc_value(amount/10)+" as his fee.\n"); if(!amount/10) amount -= 1; else amount -= amount/10; this_player()->add_savings(amount); write(OWNER+" places "+calc_value(amount)+" in the vault.\n"); return 1; } status balance() { if(!present(owner)) { write("There is no one here to help you.\n"); return 1; } write(OWNER+" says: You have "+ calc_value((int)this_player()->query_savings()) +" in the vault.\n"); return 1; } /* exchange rate for coins - do not alter * 1 gold = 10 silver, 1 silver = 100 copper */ mixed calc_value(int amount) { string tmp; tmp = (string)call_other(MONEY, "convert", amount); if(tmp == "") tmp = "nothing"; return tmp; } void set_owner(string owner_name){ if(!stringp(owner_name)) owner_name = "keeper"; if(!owner) owner = capitalize(owner_name); if(present(owner_name)) return; owner_ob = clone_object("inherit/monster"); owner_ob -> set_name(lower_case(owner)); owner_ob -> set_no_kill_flag(1); owner_ob -> set_race("human"); owner_ob -> set_short(owner+", the vault watcher"); owner_ob -> set_alias("watcher"); owner_ob -> set_long(owner+" has always kept this vault, and all \n"+ "the money safe inside it. He is vigilant in his efforts \n"+ "of fair play, and monetary gain.\n"); owner_ob -> set_al(100); owner_ob -> set_gender(1); owner_ob -> set_level(15); owner_ob -> set_wc(20); owner_ob -> set_ac(18); owner_ob -> set_hp(700050); owner_ob -> load_chat(5,({ owner+" gives you a smile.\n", owner+" asks: Would you like to keep your money in my vault?\n", owner+" says: I store lots of money in my vault.\n", owner+" glances at your purse string.\n", })); owner_ob -> load_a_chat(25,({ owner+" exclaims: Youu'll never steal from my vault!\n", owner+" gives you a wack over the head with his money bag.\n", })); owner_ob -> add_money(1200 + random(800)); #ifdef NATIVE_MODE owner_ob->move(this_object()); #else move_object(owner_ob, this_object()); #endif /* NATIVE_MODE */ } status long(string str) { ::long(); write("There is a golden plaque on the wall to read.\n"); return 1; } int query_no_kill() { return 1; }