ОТВЕТ 1 для Almaz2512
Квар ставить на юзеров внутри зоны, незнаю возможно ли такое или нет, но мой взгляд что это серверный квар и он 1 по идеи как.
Второй вариант более подходит, так как нужно всего лишь добавить +1 число к наказанию, и добавить блок из плагина AntiBhop на срабатывание. (Хоть мне и не нравится использование OnPlayerRunCmd)
Даже "кастомное" наказание можно сделать, зашёл ради интереса посмотреть)
DoD_Zones/sm_zones.sp at master · zadroot/DoD_Zones · GitHub // 710 строчка, та, что нужна тебе
OnEnteredProtectedZone = CreateGlobalForward("OnEnteredProtectedZone", ET_Ignore, Param_Cell, Param_Cell, Param_String);
OnLeftProtectedZone = CreateGlobalForward("OnLeftProtectedZone", ET_Ignore, Param_Cell, Param_Cell, Param_String);
То есть по идеи ты можешь написать свой плагин, для этого плагина через SourceMod API.
Для этого надо написать .inc файлик если его нету.
Param_Cell, Param_Cell, Param_String - параметры
// файлик .inc
#if defined _myinclude_file_prevent_double_include_
#endinput
#endif
#define _myinclude_file_prevent_double_include_
native void OnEnteredProtectedZone(int client, int activator, char[] Prefix);
native void OnLeftProtectedZone(int client, int activator, char[] Prefix);
В теории вроде так, я незнаю пишу просто) без практики. Может где-то ошибку сделал.
Далее просто создаешь свой плагин с нуля.
И теперь все оч просто.
Инклудишь .inc файлик что ты создал.
Добавляешь событие OnEnteredProtectedZone
И обработку делаешь копируя код из AntiBhop.
(если хочешь ковырнуть плагин изначальный, (просто добавив блок в Switch)
который возможно поддерживается разработчиком,
то учти что дальнейшие обновления ты не поставишь этого плагина, так как ковырнул его сам)
Сделать можно всё что угодно) я думаю найдётся человечек который потратит на это пару минут.
--- Добавлено позже ---
ОТВЕТ 2 ДЛЯ Felton
Как я понял у тебя плагин работает на всех игроков? Этот флаг b - GENERIC ADMIN.
Значит тебе по сути нужно для всех плагинов чтобы работало только.
Окей, смотришь строчку 54. Именно тут магия и происходит.
Для проверки флагов можно почитать тут -
Checking Admin Flags (SourceMod Scripting) - AlliedModders Wiki (если тебе интересно)
Если тебе ничего не интересно, можешь не смотреть.
В целом мы имеем код:
if(damagetype == DMG_DROWN || damagetype == DMG_DROWNRECOVER)
{
damage = 0.0;
return Plugin_Handled;
}
Тут идёт проверка типа урона.
Установка урона на 0.
Для проверки флага добавляем строчку (можно удалить ADMFLAG_KICK)
if (GetUserFlagBits(client) & (ADMFLAG_GENERIC | ADMFLAG_KICK) == (ADMFLAG_GENERIC | ADMFLAG_KICK))
{
// User has both flags
}
ADMFLAG_GENERIC и есть по сути "b" только, "b" - упрощенный вариант записи для нубосиков.
#define ADMFLAG_GENERIC (1<<1) /**< Convenience macro for Admin_Generic as a FlagBit */
#define ADMFLAG_KICK (1<<2) /**< Convenience macro for Admin_Kick as a FlagBit */
В итоге блок становится.
if(damagetype == DMG_DROWN || damagetype == DMG_DROWNRECOVER)
{
if (GetUserFlagBits(client) & (ADMFLAG_GENERIC | ADMFLAG_KICK) == (ADMFLAG_GENERIC | ADMFLAG_KICK))
{
damage = 0.0;
return Plugin_Handled;
}
}
Вот и всё.
Можешь сам всё сделать в .sp файле.
Если сможешь :)