Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Выдача денег по результатам раунда

Статус пользователя Fraig
сообщение 27.1.2019, 19:04
Сообщение #1
Стаж: 12 лет

Сообщений: 93
Благодарностей: 7
Полезность: < 0

Всем привет!
Хочу немного изменить экономику на сервере, подскажите, пожалуйста, как можно либо заблокировать выдачу денег в начале раунда, либо сделать hud денег в начале раунда на пару секунд невидимым, либо может знаете вариант выдачи другой суммы в начале раунда.
На данный момент я сделал следующим образом: выдаю некоторую сумму в конце раунда, записываю сумму в переменную и в начале раунда выдаю игроку сумму, которую записал в переменную, но это выглядит не совсем красиво, игроку начисляется к примеру $3250, а потом в худе отображается, что списана некоторая сумму
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя SISA
сообщение 27.1.2019, 20:37
Сообщение #2
Стаж: 13 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Вариантов много. Всё зависит от того, какой уровень костылей вам подходит.

На сколько я помню, в реапи есть нативы отвечающие за выдачу денег или в рехлдс. За что они там точно отвечают, я не помню.

На уровне самого движка, все суммы жестко записаны в код и без хука функции:

Код
void CBasePlayer::AddAccount(int amount, bool bTrackChange)
{
    m_iAccount += amount;

    if (m_iAccount < 0)
        m_iAccount = 0;
    else if (m_iAccount > 16000)
        m_iAccount = 16000;

    MESSAGE_BEGIN(MSG_ONE, gmsgMoney, NULL, pev);
    WRITE_LONG(m_iAccount);
    WRITE_BYTE(bTrackChange);
    MESSAGE_END();
}


так просто, вы к ним не подберетесь.

Работа с бабосами зиждиться на клиентском оффсете "m_iAccount" и двух мессагах "Money" и "BlinkAcct"

"m_iAccount" - фактическое количество бабла. Если вы покупаете какое-то оружие, то данные по наличие необходимой суммы у игрока берутся именно с этого оффсета.
"Money" - клиентская мессага. По факту, рисует количество денег на экране игрока.
"BlinkAcct" - вызывает мегание объекта с деньгами (допустим, когда их не достаточно, при попытке купить оружие).

Так же, есть два серверных оффсета:

m_iAccountCT
m_iAccountTerrorist

Они регулируют количество бабла, выдаваемого в следующем раунде, игрокам той или иной команды. Доступ к серверным оффсетам есть на реапи и Amx 1.8.3+

В вашем случае, нужен доступ к серверным оффсетам или жесткие костыли, в виде перехвата мессаги "Money" в нужные моменты и последующим изменением значения оффсета m_iAccount и отправку нужного значения в мессагу через set_msg_arg_int.

Отредактировал: SISA, - 27.1.2019, 20:37
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя georgeml
сообщение 28.1.2019, 3:26
Сообщение #3
Стаж: 10 лет

Сообщений: 1467
Благодарностей: 439
Полезность: 423

Цитата(Fraig @ 28.1.2019, 3:04) *

https://c-s.net.ua/forum/topic79022.html
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя bionext
сообщение 31.1.2019, 18:01
Сообщение #4
Стаж: 13 лет

Сообщений: 5
Благодарностей: 8
Полезность: 0

Цитата(Fraig @ 28.1.2019, 1:04) *
Всем привет!
Хочу немного изменить экономику на сервере, подскажите, пожалуйста, как можно либо заблокировать выдачу денег в начале раунда, либо сделать hud денег в начале раунда на пару секунд невидимым, либо может знаете вариант выдачи другой суммы в начале раунда.
На данный момент я сделал следующим образом: выдаю некоторую сумму в конце раунда, записываю сумму в переменную и в начале раунда выдаю игроку сумму, которую записал в переменную, но это выглядит не совсем красиво, игроку начисляется к примеру $3250, а потом в худе отображается, что списана некоторая сумму

В reapi можно самому назначать награду за определённую победу через
Код:

/**
* Reward rules for rg_get_account_rules, rg_set_account_rules
*/
enum RewardRules
{
RR_CTS_WIN,
RR_TERRORISTS_WIN,
RR_TARGET_BOMB,
RR_VIP_ESCAPED,
RR_VIP_ASSASSINATED,
RR_TERRORISTS_ESCAPED,
RR_CTS_PREVENT_ESCAPE,
RR_ESCAPING_TERRORISTS_NEUTRALIZED,
RR_BOMB_DEFUSED,
RR_BOMB_PLANTED,
RR_BOMB_EXPLODED,
RR_ALL_HOSTAGES_RESCUED,
RR_TARGET_BOMB_SAVED,
RR_HOSTAGE_NOT_RESCUED,
RR_VIP_NOT_ESCAPED,
RR_LOSER_BONUS_DEFAULT,
RR_LOSER_BONUS_MIN,
RR_LOSER_BONUS_MAX,
RR_LOSER_BONUS_ADD,
RR_RESCUED_HOSTAGE,
RR_TOOK_HOSTAGE_ACC,
RR_TOOK_HOSTAGE,
RR_END
};

/*
* Sets the amount of reward in the game account for all players.
*
* @param rules_index Look at the enum with name RewardRules
* @param amount The money amount
*
* @noreturn
*/
native rg_set_account_rules(const RewardRules:rules_index, const amount);

пример:
rg_set_account_rules(RR_TARGET_BOMB, 1100) // за подрыв цели бомбой начислять всем террористам 1100$
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: