Пример #1
0
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
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
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
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
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;
}
Пример #6
0
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
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;
}