コード例 #1
0
ファイル: money.c プロジェクト: Kline-/ackfuss
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;
}
コード例 #2
0
ファイル: money.c プロジェクト: Kline-/ackfuss
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;
}
コード例 #3
0
ファイル: money.c プロジェクト: Kline-/ackfuss
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;

}
コード例 #4
0
ファイル: money.c プロジェクト: Kline-/ackfuss
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;
}
コード例 #5
0
ファイル: bank.c プロジェクト: VanirRezound/6dragons
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;
}
コード例 #6
0
ファイル: money.c プロジェクト: Kline-/ackfuss
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;
}
コード例 #7
0
ファイル: money.c プロジェクト: Kline-/ackfuss
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;
}
コード例 #8
0
ファイル: money.c プロジェクト: KillerMud/Source
/**
 * 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 );
}