но после этого, у нас в меню админа, в категории «Управление игроками», появится два пункта Кик игрока (стандартное и наше, вновь встроенное). Поэтому данный вариант не очень удобный. И во втором варианте рассмотрим, как добавить причины Кика в стандартную функцию.
Вариант №2
В этом варианте добавим причины в стандартную функцию Кика. Но здесь мы будем уже редактировать стандартные исходники плагинов, а затем компилировать уже.
Открываем файл: ../addons/sourcemod/scripting/basecommands.sp
И вставляем в него после строчек:
Код:
new Handle:g_MapList;
new Handle:g_ProtectedVars;
следующее:
Код:
new g_kickTarget[MAXPLAYERS+1];
Сохраняем этот файл.
Теперь открываем файл: ../addons/sourcemod/scripting/basecommands/kick.sp
Находим строку (48 примерно)
g_kickTarget[param1] = target;
DisplayKickReasonMenu(param1);
}
}
}
public MenuHandler_Reason(Handle:menu, MenuAction:action, param1, param2)
{
if (action == MenuAction_End)
{
CloseHandle(menu);
}
else if (action == MenuAction_Cancel)
{
if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE)
{
DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory);
}
}
else if (action == MenuAction_Select)
{
new target = g_kickTarget[param1];
decl String:info[64];
GetMenuItem(menu, param2, info, sizeof(info));
if (target == 0)
{
PrintToChat(param1, "[SM] %t", "Player no longer available");
}
else if (!CanUserTarget(param1, target))
{
PrintToChat(param1, "[SM] %t", "Unable to target");
}
else
{
ShowActivity2(param1, "[SM] ", "%N kicked %N (Reason: %s)", param1, target, info);
PerformKick(param1, target, info);
находим (119 примерно строка):
Код:
DisplayKickMenu(param1);
заменяем на:
Код:
DisplayKickTargetMenu(param1);
Компилируем плагин, и кидаем на сервер. После чего, наша родная встроенная функция Кик игрока, будет с причинами.
Примечание: Если вы причины указываете на русском, то перед компиляцией плагина, необходимо исходник kick.sp перевести в кодировку UTF8 без BOM.
И число символов в левой части не должно превышать 62 знака, иначе причины игроку будут показываться обрезанными.
Подсчитать символы можно с помощью программы Notepad++
Пример ниже
[Ссылки могут видеть только зарегистрированные пользователи. ]
Послесловие от меня: Данной модификацией пользуюсь уже примерно месяцев 7 и это очень помогает порой объяснить игроку, что так делать нельзя, при этом без лишних слов.
Ниже во вложении прилагаются готовые файлы для Sourcemod_1.5.2
[Ссылки могут видеть только зарегистрированные пользователи. ]
Re: Kick игрока с причиной в меню админа Sourcemod
Альпериум, норм робит, спс, без ошибок
L 21.05.14 - 3:43:07: SourceMod error session started
L 21.05.14 - 3:43:07: Info (map "de_dust2") (file "errors_20131210.log")
L 21.05.14 - 3:43:07: [SM] Native "CanUserTarget" reported: Client 3 is not connected
L 21.05.14 - 3:43:07:: [SM] Displaying call stack trace for plugin "basecommands.smx":
L 21.05.14 - 3:43:07: [SM] [0] Line 156, H:\SERVER\01-scripting-sm1.5.2\addons\sourcemod\scripting\basecommands/kick.sp::MenuHandler_Reason()
________________ Знаю все хитрости и баги в игре Легенда, пишем в ЛС.
Кому помог, жмём "Спасибо"