(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 знаков. комментарии модерируются
Смотрите также:
(ZP) Addon - Promo Code (0.1)
(ZP) Плагин на промо коды, плагин изначально был для (JB), но я решил дописать кейсы на аммо.
(ZP) Addon - Clan System (1.0) для CS 1.6
Данный (ZP) плагин добавит на ваш сервер систему кланов с соклановцами, а так-же с различными бонусами!