int exchange_money( CHAR_DATA * ch, char *argument ) { MONEY_TYPE *transfer = new MONEY_TYPE; char m_number[MSL]; char m_name[MSL]; char outbuf[MSL]; int base_val; float taxed = 0; for ( ;; ) { short mn; argument = one_argument( argument, m_number ); if ( m_number[0] == '\0' ) break; argument = one_argument( argument, m_name ); if ( m_name[0] == '\0' ) break; if ( ( ( mn = money_lookup( m_name ) ) < 0 ) || ( !is_number( m_number ) ) ) { snprintf( outbuf, MSL, "%s %s isn't a valid money type!\r\n", m_number, m_name ); send_to_char( outbuf, ch ); join_money( transfer, ch->money ); return -1; } if ( ch->money->cash_unit[mn] < atoi( m_number ) ) { snprintf( outbuf, MSL, "You don't have %s %s!\r\n", m_number, m_name ); send_to_char( outbuf, ch ); join_money( transfer, ch->money ); return -1; } ch->money->cash_unit[mn] -= atoi( m_number ); transfer->cash_unit[mn] += atoi( m_number ); } ch->carry_weight -= money_weight( transfer ); base_val = money_value( transfer ); taxed = EXCHANGE_COST * base_val; base_val -= (int)taxed; delete transfer; transfer = round_money( base_val, TRUE ); ch->carry_weight += money_weight( transfer ); join_money( transfer, ch->money ); return (int)taxed; }
bool give_money( CHAR_DATA * ch, CHAR_DATA * victim, char *argument ) { MONEY_TYPE *transfer = new MONEY_TYPE; char m_number[MSL]; char m_name[MSL]; char outbuf[MSL]; for ( ;; ) { short mn; argument = one_argument( argument, m_number ); if ( m_number[0] == '\0' ) break; argument = one_argument( argument, m_name ); if ( m_name[0] == '\0' ) break; if ( ( ( mn = money_lookup( m_name ) ) < 0 ) || ( !is_number( m_number ) ) ) { snprintf( outbuf, MSL, "%s %s isn't a valid money type!\r\n", m_number, m_name ); send_to_char( outbuf, ch ); join_money( transfer, ch->money ); return FALSE; } if ( ch->money->cash_unit[mn] < atoi( m_number ) ) { snprintf( outbuf, MSL, "You don't have %s %s!\r\n", m_number, m_name ); send_to_char( outbuf, ch ); join_money( transfer, ch->money ); return FALSE; } ch->money->cash_unit[mn] -= atoi( m_number ); transfer->cash_unit[mn] += atoi( m_number ); } if ( ( victim->carry_weight + money_weight( transfer ) ) > can_carry_w( victim ) ) { snprintf( outbuf, MSL, "%s cannot carry that much weight!\r\n", ch->get_name(victim) ); send_to_char( outbuf, ch ); join_money( transfer, ch->money ); return FALSE; } ch->carry_weight -= money_weight( transfer ); victim->carry_weight += money_weight( transfer ); join_money( transfer, victim->money ); return TRUE; }
int money_to_value( CHAR_DATA * ch, char *argument ) { /* if successful, takes money from player */ MONEY_TYPE *transfer = new MONEY_TYPE; char m_number[MSL]; char m_name[MSL]; char outbuf[MSL]; int value = 0; for ( ;; ) { short mn; argument = one_argument( argument, m_number ); if ( m_number[0] == '\0' ) break; argument = one_argument( argument, m_name ); if ( m_name[0] == '\0' ) break; if ( ( ( mn = money_lookup( m_name ) ) < 0 ) || ( !is_number( m_number ) ) ) { snprintf( outbuf, MSL, "%s %s isn't a valid money type!\r\n", m_number, m_name ); send_to_char( outbuf, ch ); join_money( transfer, ch->money ); return -1; } if ( ch->money->cash_unit[mn] < atoi( m_number ) ) { snprintf( outbuf, MSL, "You don't have %s %s!\r\n", m_number, m_name ); send_to_char( outbuf, ch ); join_money( transfer, ch->money ); return -1; } ch->money->cash_unit[mn] -= atoi( m_number ); transfer->cash_unit[mn] += atoi( m_number ); } ch->carry_weight -= money_weight( transfer ); value = money_value( transfer ); delete transfer; return value; }
void drop_money( CHAR_DATA * ch, char *argument ) { MONEY_TYPE *transfer = new MONEY_TYPE; char m_number[MSL]; char m_name[MSL]; char outbuf[MSL]; for ( ;; ) { short mn; argument = one_argument( argument, m_number ); if ( m_number[0] == '\0' ) break; argument = one_argument( argument, m_name ); if ( m_name[0] == '\0' ) break; if ( ( ( mn = money_lookup( m_name ) ) < 0 ) || ( !is_number( m_number ) ) ) { snprintf( outbuf, MSL, "%s %s isn't a valid money type!\r\n", m_number, m_name ); send_to_char( outbuf, ch ); join_money( transfer, ch->money ); return; } if ( ch->money->cash_unit[mn] < atoi( m_number ) ) { snprintf( outbuf, MSL, "You don't have %s %s!\r\n", m_number, m_name ); send_to_char( outbuf, ch ); join_money( transfer, ch->money ); return; } ch->money->cash_unit[mn] -= atoi( m_number ); transfer->cash_unit[mn] += atoi( m_number ); } ch->carry_weight -= money_weight( transfer ); join_money( transfer, ch->in_room->treasure ); return; }
void do_withdraw( CHAR_DATA *ch, char *argument ) { BANK_DATA *bank; CHAR_DATA *banker; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; int type = DEFAULT_CURR; int amount = 0; /* * arg1 == amount * arg2 == currency */ if ( !( banker = find_banker( ch ) ) ) { send_to_char( "You're not in a bank!\r\n", ch ); return; } if ( IS_NPC( ch ) ) { snprintf( buf, MSL, "say Sorry, %s, we don't do business with mobs.", ch->name ); interpret( banker, buf ); return; } if ( argument[0] == '\0' ) { send_to_char( "Syntax: withdraw [amount] [currency]\n", ch ); interpret( banker, ( char * ) "say if you need help type &WHELP BANK&D." ); return; } if ( ch->pcdata->bank == NULL ) { send_to_char( "You don't have any bank account open now.\r\n", ch ); return; } /* * Just to make sure that we are retrieving the latest bank info, not relying on the * stale bank info in pcdata struct */ bank = find_bank( ch->pcdata->bank->name ); if ( !bank ) { send_to_char( "There is no account by that name!\r\n", ch ); return; } argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); if ( !str_cmp( arg1, "all" ) ) { amount = -1; } else if ( !is_number( arg1 ) ) { send_to_char( "You can only withdraw coins.\r\n", ch ); return; } else { amount = atoi( arg1 ); } if ( arg1 && arg2 ) type = get_currency_type( arg2 ); if ( type == CURR_NONE ) { send_to_char( "You don't have any of that kind of coin.\r\n", ch ); return; } if ( amount <= 0 ) { send_to_char( "You can't do that.\r\n", ch ); return; } if ( money_weight( amount, type ) + ch->carry_weight >= can_carry_w( ch ) ) { send_to_char( "You can't carry that much.\r\n", ch ); return; } if ( type == CURR_BRONZE ) { if ( amount > bank->bronze ) { ch_printf( ch, "You don't have that much %s in the bank.\r\n", curr_types[type] ); return; } bank->bronze -= amount; ch_printf( ch, "This brings your account bronze balance to %d.\r\n", bank->bronze ); } else if ( type == CURR_COPPER ) { if ( amount > bank->copper ) { ch_printf( ch, "You don't have that much %s in the bank.\r\n", curr_types[type] ); return; } bank->copper -= amount; ch_printf( ch, "This brings your account copper balance to %d.\r\n", bank->copper ); } else if ( type == CURR_GOLD ) { if ( amount > bank->gold ) { ch_printf( ch, "You don't have that much %s in the bank.\r\n", curr_types[type] ); return; } bank->gold -= amount; ch_printf( ch, "This brings your account gold balance to %d.\r\n", bank->gold ); } else if ( type == CURR_SILVER ) { if ( amount > bank->silver ) { ch_printf( ch, "You don't have that much %s in the bank.\r\n", curr_types[type] ); return; } bank->silver -= amount; ch_printf( ch, "This brings your account silver balance to %d.\r\n", bank->silver ); } else { send_to_char( "No such currency.\r\n", ch ); return; } GET_MONEY( ch, type ) += amount; ch_printf( ch, "You took %d %s coins from the bank.\r\n", amount, curr_types[type] ); bank->lastused = current_time; save_bank( ); save_char_obj( ch ); return; }
bool get_money_obj( CHAR_DATA * ch, char *argument, OBJ_DATA * obj ) { MONEY_TYPE *transfer = new MONEY_TYPE; short looper; char m_number[MSL]; char m_name[MSL]; char outbuf[MSL]; if ( !str_cmp( "all", argument ) ) { for ( looper = 0; looper < MAX_CURRENCY; looper++ ) { transfer->cash_unit[looper] = obj->money->cash_unit[looper]; obj->money->cash_unit[looper] = 0; } } else { for ( looper = 0; looper < MAX_CURRENCY; looper++ ) { transfer->cash_unit[looper] = 0; } for ( ;; ) { short mn; argument = one_argument( argument, m_number ); if ( m_number[0] == '\0' ) break; argument = one_argument( argument, m_name ); if ( m_name[0] == '\0' ) break; if ( ( ( mn = money_lookup( m_name ) ) < 0 ) || ( !is_number( m_number ) ) ) { snprintf( outbuf, MSL, "%s %s isn't a valid money type!\r\n", m_number, m_name ); send_to_char( outbuf, ch ); join_money( transfer, obj->money ); return FALSE; } if ( obj->money->cash_unit[mn] < atoi( m_number ) ) { /* snprintf( outbuf, MSL, "There isn't that much %s in %s!\r\n", m_name, obj->short_descr ); send_to_char( outbuf, ch ); */ join_money( transfer, obj->money ); return FALSE; } obj->money->cash_unit[mn] -= atoi( m_number ); transfer->cash_unit[mn] += atoi( m_number ); } } if ( money_value( transfer ) <= 0 ) { delete transfer; return FALSE; } if ( ( ch->carry_weight + money_weight( transfer ) ) > can_carry_w( ch ) ) { snprintf( outbuf, MSL, "%s", "You cannot carry that much weight!\r\n" ); send_to_char( outbuf, ch ); join_money( transfer, obj->money ); return FALSE; } ch->carry_weight += money_weight( transfer ); if ( check_charm_aff(ch, CHARM_AFF_GOLD) ) for ( looper = 0; looper < MAX_CURRENCY; looper++ ) transfer->cash_unit[looper] *= ((100 + get_charm_bonus(ch, CHARM_AFF_GOLD)) / 100); snprintf( outbuf, MSL, "You take %s from %s.\r\n", money_string( transfer ), obj->short_descr ); send_to_char( outbuf, ch ); join_money( transfer, ch->money ); return TRUE; }
bool get_money_room( CHAR_DATA * ch, char *argument ) { MONEY_TYPE *transfer = new MONEY_TYPE; short looper; char m_number[MSL]; char m_name[MSL]; char outbuf[MSL]; if ( !str_cmp( "all", argument ) ) { for ( looper = 0; looper < MAX_CURRENCY; looper++ ) { transfer->cash_unit[looper] = ch->in_room->treasure->cash_unit[looper]; ch->in_room->treasure->cash_unit[looper] = 0; } } else { for ( looper = 0; looper < MAX_CURRENCY; looper++ ) { transfer->cash_unit[looper] = 0; } for ( ;; ) { short mn; argument = one_argument( argument, m_number ); if ( m_number[0] == '\0' ) break; argument = one_argument( argument, m_name ); if ( m_name[0] == '\0' ) break; if ( ( ( mn = money_lookup( m_name ) ) < 0 ) || ( !is_number( m_number ) ) ) { snprintf( outbuf, MSL, "%s %s isn't a valid money type!\r\n", m_number, m_name ); send_to_char( outbuf, ch ); join_money( transfer, ch->in_room->treasure ); return FALSE; } if ( ch->in_room->treasure->cash_unit[mn] < atoi( m_number ) ) { /* snprintf( outbuf, MSL, "There isn't that much %s here!\r\n", m_name ); send_to_char( outbuf, ch ); */ join_money( transfer, ch->in_room->treasure ); return FALSE; } ch->in_room->treasure->cash_unit[mn] -= atoi( m_number ); transfer->cash_unit[mn] += atoi( m_number ); } } if ( ( ch->carry_weight + money_weight( transfer ) ) > can_carry_w( ch ) ) { snprintf( outbuf, MSL, "%s", "You cannot carry that much weight!\r\n" ); send_to_char( outbuf, ch ); join_money( transfer, ch->in_room->treasure ); return FALSE; } ch->carry_weight += money_weight( transfer ); if ( money_value( transfer ) <= 0 ) return FALSE; snprintf( outbuf, MSL, "You pick up %s.\r\n", money_string( transfer ) ); send_to_char( outbuf, ch ); join_money( transfer, ch->money ); return TRUE; }
/** * wylicz liczbê noszonych przez postaæ monet */ int money_count_weight_carried_by_character ( CHAR_DATA *ch ) { return ( IS_NPC( ch ) )? 0 : money_weight( ch->copper, ch->silver, ch->gold, ch->mithril ); }