Создать акаунт

(ZP) Избавляемся от вознаграждений за убийства и конца раундов


Избавляемся от вознаграждений за убийства и конца раундов

В общем, в Pawn я любитель с 6 летним стажем, а так сижу на C#.
     При разработке зомби сервера без донатов меня сбесил DHUD и я решил избавиться от него полностью (конечно в кабинете будет возможность показывать игроку этот DHUD) и я решил сменить аммо на денежную систему, после того как изменил некоторые параметры в zombie_plague40 и поиграв немного... Я заметил, что появились вознаграждения за убийство, выиграш / проигрыш раунда.
После раздумий и поиска информации в помойке, ой то есть, в интернете я понял, что там ничего нет.
Решением моих проблем стало следующее...
Кстати говоря, почему я решил сделать сервер без донатов... Играл на сервере с зомби и там был типичный игрок с боссом, который убивал весь баланс игры, раздавая топ оружия всем налево и направо, давая по десяток тысяч аммо своим, также брал себе 600 брони... Ну вы понимаете, что в таком сервере невозможно играть. Писал на форумах сайта, тупо проигнорили и удалили записи


Ищем
Player vars

После добавляем пару переменных (в начале, в конец - абсолютно без разницы)
new moneyExelent[33] // Переменная с массивом для хранения денег в дамбе ([33] отвечает за хранение отдельно для каждого игрока
new bool:moneyBloock = false // Булевая переменная для блокирования хранен

После находим
public plugin_init(]

Если в ней нет события, то добавляем (Событие отвечает за выполнение метода при изменении худа с деньгами, message_money - любое название метода)
register_message(get_user_msgid("Money"], "message_money"]

Ищем
public message_money

Выглядит всё так:
public message_money(msg_id, msg_dest, msg_entity]
{
    // Remove money setting enabled?
    if (!get_pcvar_num(cvar_removemoney]]
    return PLUGIN_CONTINUE;

    fm_cs_set_user_money(msg_entity, 0]
    return PLUGIN_HANDLED;
}

Добавляем в начало следующий код
if (!moneyBloock]
    moneyExelent[msg_entity] = cs_get_user_money(msg_entity]
else
    cs_set_user_money(msg_entity, moneyExelent[msg_entity]]

И получаем
public message_money(msg_id, msg_dest, msg_entity]
{
    if (!moneyBloock] // Проверка, хранение не заблокировано, то выполняем
        moneyExelent[msg_entity] = cs_get_user_money(msg_entity] // Закидываем в дамб наш баланс
    else
        cs_set_user_money(msg_entity, moneyExelent[msg_entity]] // Иначе ставим баланс актуальным на дамбе

    // Remove money setting enabled?
    if (!get_pcvar_num(cvar_removemoney]]
        return PLUGIN_CONTINUE;

    fm_cs_set_user_money(msg_entity, 0]
        return PLUGIN_HANDLED;
}


Также не обойтись без событий логирования начала и конца раундов
Если есть (2, "1=Round_Start") и 2, "1=Round_End")), но с другими именами методов,
пожалуйста, не делайте из своего кода мусоросборник, прорабатывайте всё в активном
register_logevent("logevent_round_start", 2, "1=Round_Start"]
register_logevent("logevent_round_end", 2, "1=Round_End"]

Ищем
public plugin_cfg(]

И добавляем к таскам ниже (если там они есть) следующий код, если их нет, в конце листинга метода (перед - "}")
set_task(0.5, "logevent_round_start"] // Чтобы сервер не лег, запуск через .5 сек метода.

После добавляем в public logevent_round_start()
moneyBloock = false

И получаем
public logevent_round_start(]
{
    // Freezetime ends
    moneyBloock = false
    g_freezetime = false
}

После добавляем в public logevent_round_end()
moneyBloock = true

И получаем
public logevent_round_end(]
{
    moneyBloock = true
    <...> // Код ниже
}
Ищем public fw_PlayerKilled(victim, attacker, shouldgib)
public fw_PlayerKilled(victim, attacker, shouldgib]
{        
    if (!is_user_bot(attacker] && is_user_alive(attacker]]
        cs_set_user_money(attacker, cs_get_user_money(attacker] - 300, 0]

    <...> // Код ниже
}

Таким образом наш баланс будет правильным, и мы сможем работать с изменением валюты в свою пользу, к примеру за 100 урона давать 10 долларов и т.д.

Чтобы перенести сервер полностью под Money через zombie_plague40 - Пишите, добавлю статью... (Там попросту нужно в некоторых местах изменить g_ammopacks на cs_set_user_money и cs_get_user_money - Не везде!

Пользователи, которые меняют сервер на Money через вспомогательный плагин (По типу Buy Menu) - нам не по пути. Плагин тот - мусор.




Дополнение:
Если вас раздражает анимация "+300", то можно сделать так:
if (!is_user_bot(attacker] && is_user_alive(attacker]]
{
    cs_set_user_money(attacker, cs_get_user_money(attacker] - 300, 0]
    set_task_ex(0.0, "remove_money_post", attacker] // Вызываем метод, созданный нами через set_task_ex ((set_task_ex - первым параметров поставил время на 0.0, на деле он быстрее 0.1 не работает, это вам на заметку]]
}

public remove_money_post(attacker]  cs_set_user_money(attacker, cs_get_user_money(attacker], 1] // Устанавливаем на баланс баланс, чтобы анимация быстрее исчезла, <span style="color:rgb(84,172,210];">3-й</span> параметр это <span style="color:rgb(235,107,86];">вкл/вкл</span> анимации худа добавление или убыли <span style="color:rgb(26,188,156];">денег</span>, у меня в инклуде по умолчанию стоит <span style="color:rgb(84,172,210];">0</span>, а у вас <span style="color:rgb(84,172,210];">1</span>
Комментарии
Минимальная длина комментария - 50 знаков. комментарии модерируются

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Смотрите также: