/* -*- LPC -*- */ #include <money.h> inherit "/cmds/base"; private mapping _money_types; void create() { string zone; string *zones; zones = MONEY_HAND->query_all_places(); _money_types = allocate_mapping(sizeof(zones)); foreach(zone in zones) { _money_types[lower_case(zone)] = zone; } ::create(); return; } /* create() */ int cmd(string str, int brief, object * containers) { object *monies; object new_money; object *divided_money; object money; object tmp_money; object *inv; // mixed *tmp_arr; mixed *total; // object env; int success; // string tmp; // int i; // int j; if (this_player()-> check_dark(environment(this_player())->query_light()) < 0) { add_failed_mess("It's too dark to count your money.\n"); return 0; } if (str) { if (str == "here") { if (environment(this_player())->query_bank_name()) str = environment(this_player())->query_money_place(); else str = environment(this_player())->query_property("place"); if (!str) { add_failed_mess("No idea what type of currency is used here.\n"); return 0; } } str = lower_case(str); if (!_money_types[str]) { add_failed_mess("This is not a valid type of money, try one of " + query_multiple_short(keys(_money_types) + ({ "here" })) + ".\n"); return 0; } } // if (!containers) { // inv = deep_inventory(this_player()); // } else { // inv = filter(containers, // (: $1->query_closed() && !$1->query_transparent() :)); // if (sizeof(inv)) { // write(query_multiple_short(inv, "one") + // (sizeof(inv) > 1 ? " are " : " is ") + "closed.\n"); // containers -= inv; // } // if (sizeof(containers)) { // inv = ({ }); // foreach(env in containers) { // inv += deep_inventory(env); // } // } // else return 1; // } inv = all_inventory(this_player()); monies = filter_array(inv, (: this_object()->find_the_dough($1) :)); total = ({ }); if (sizeof(monies)) { success = 0; divided_money = ({ 0, 0 }); foreach(money in monies) { tmp_money = 0; if (!str) { tmp_money = money; } else if (str && _money_types[str]) { new_money = MONEY_VAULT->get_money_ob(); new_money->set_money_array(money->query_money_array()); divided_money = MONEY_HAND-> filter_legal_tender(new_money, _money_types[lower_case(str)]); tmp_money = divided_money[0]; if (divided_money[1]) { divided_money[1]->dest_me(); } } if (tmp_money) { // if (environment(money) == this_player()) { if (!brief) { write("Your purse contains " + query_multiple_short(tmp_money->half_short(1)) + ".\n"); } else { write("Your purse contains " + query_multiple_short(tmp_money->half_symbol_short()) + ".\n"); } // } // else if (!brief) { // env = environment(money); // tmp = env->poss_short(); // env = environment(env); // while (env != this_player()) { // tmp += " in " + env->poss_short(); // env = environment(env); // } // write(tmp + " contains " + // query_multiple_short(tmp_money->half_short(1)) + ".\n"); // } success++; // tmp_arr = tmp_money->query_money_array(); // for (i = 0; i < sizeof(tmp_arr); i += 2) { // j = member_array(tmp_arr[i], total); // if (j != -1) { // total[j + 1] += tmp_arr[i + 1]; // } else { // total += tmp_arr[i..i + 1]; // } // } if (divided_money[0]) { divided_money[0]->dest_me(); } } } if (!success) { write("You have no money from the Land of " + capitalize(str) + ".\n"); } // else if (success > 1 || brief) { // write("You have a total of " + // MONEY_HAND->money_string(total) + ".\n"); // } // } else if (!containers) { // write("You have no money that you can see.\n"); // } else { // if (!str) { // write("You find no money in " + // query_multiple_short(containers, "poss") + ".\n"); // } else { // write("You find no money from " + _money_types[str] + // "in " + query_multiple_short(containers, "poss") + ".\n"); // } } else write("You are flat broke.\n"); return 1; } /* cmd() */ int find_the_dough(object env) { if (member_array(MONEY_ALIAS, env->query_alias()) > -1) { while ((env = environment(env)) != this_player()) { if (env->query_closed() && !env->query_transparent()) { return 0; } } return 1; } else return 0; } /* find_the_dough() */ mixed *query_patterns() { return ({ "", (: cmd(0, 0, 0) :), "brief", (: cmd(0, 1, 0) :), "<string'area name'>", (: cmd($4[0], 0, 0) :), "<string'area name'> brief", (: cmd($4[0], 1, 0) :), // "<string'area name'> in <indirect:object:me'container'>", // (: cmd($4[0], 0, $1) :), // "<string'area name'> in <indirect:object:me'container'> brief", // (: cmd($4[0], 1, $1) :), // "in <indirect:object:me'container'>", (: cmd(0, 0, $1) :), // "in <indirect:object:me'container'> brief", // (: cmd(0, 1, $1) : }); } /* query_patterns() */