#include <money.h> inherit COMMAND_BASE; private mapping money_types; private string pattern; /** @ignore yes */ mapping query_money_types() { return copy(money_types); } void create() { string zone, *zones; zones = keys( MONEY_H->query_all_values() ); money_types = allocate_mapping( sizeof(zones) ); foreach( zone in zones ) money_types[ lower_case( zone ) ] = zone; if( sizeof(zones) > 1 ) pattern = "{"+implode( zones, "|")+"}"; ::create(); } /* create() */ /** @ignore yes */ int find_the_dough( object env ) { if( member_array( MONEY_ALIAS, env->query_alias() ) != -1 ) { while( ( env = ENV(env) ) != TP ) if( env->query_closed() && !env->query_transparent() ) return 0; return 1; } return 0; } /* find_the_dough() */ /** @ignore yes */ int cmd( string str, int brief ) { object *monies, *divided_money; object money, new_money, tmp_money, env; mixed tmp_arr, total; int i, j, success; string tmp; switch( TP->check_dark( ENV(TP)->query_light() ) ) { case -2 : case -1 : add_failed_mess("It is too dark here to count your money.\n"); return 0; case 1 : case 2 : add_failed_mess("It is too bright here to count your money.\n"); return 0; default: } monies = filter( deep_inventory(TP), (: find_the_dough($1) :) ); if( sizeof(monies) ) { total = ({ }); success = 0; divided_money = ({ 0, 0 }); foreach( money in monies ) { tmp_money = money; if( str ) { new_money = clone_object(MONEY_OBJECT); new_money->set_money_array( money->query_money_array() ); divided_money = MONEY_H->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( !brief ) { if( ENV(money) == TP ) { write("Your purse contains "+ query_multiple_short( tmp_money->half_short(1) )+ ".\n"); } else { env = ENV(money); tmp = env->poss_short(); env = ENV(env); while( env != TP ) { tmp += " in "+env->poss_short(); env = ENV(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 "+CAP(str)+".\n"); } else if( brief || ( success >= 1 && sizeof(monies) > 1 ) ) { write("You have a total of "+ MONEY_H->money_string(total)+".\n"); } return 1; } add_failed_mess("You are flat broke.\n"); return 0; } /* cmd() */ /** @ignore yes */ mixed query_patterns() { if( sizeof(money_types) > 1 ) { return ({ "", (: cmd( 0, 0 ) :), "brief", (: cmd( 0, 1 ) :), "brief "+pattern, (: cmd( $4[0], 1 ) :), pattern, (: cmd( $4[0], 0 ) :), }); } return ({ "", (: cmd( 0, 0 ) :), "brief", (: cmd( 0, 1 ) :), }); } /* query_patterns() */