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 crusade_reward( CHAR_DATA *ch ) { char buf[MSL]; int reward = 0; ch->pcdata->records->crusade++; reward = quest_object->value[0]; snprintf( buf, MSL, "You receive %d quest points!\r\n", reward ); send_to_char( buf, ch ); ch->pcdata->quest_points += reward; ch->pcdata->records->qp_tot += reward; if ( ch->pcdata->quest_points > ch->pcdata->records->qp ) { send_to_char("@@yYou've broken your quest point record!@@N\r\n", ch); ch->pcdata->records->qp = ch->pcdata->quest_points; } reward = quest_object->value[1]; snprintf( buf, MSL, "You receive %d practices!\r\n", reward ); send_to_char( buf, ch ); ch->pcdata->practice += reward; reward = (exp_mob_base(quest_mob->level) * sysdata.killperlev); reward = number_range(static_cast<int>(reward * 0.02), static_cast<int>(reward * 0.04)); snprintf( buf, MSL, "You receive %d experience points!\r\n", reward ); send_to_char( buf, ch ); ch->exp += reward; reward = quest_object->value[2]; snprintf( buf, MSL, "You receive %s!\r\n", cost_to_money( reward ) ); send_to_char( buf, ch ); join_money( round_money( reward, TRUE ), ch->money ); 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; }