★Сириус★
Участник
- Сообщения
- 743
- Реакции
- 197
Kick игрока с причиной в меню админа Sourcemod
Вариант №1
Открываем файл: ../addons/sourcemod/configs/adminmenu_custom.txt
и заполняем его следующим:
C-подобный:
"Commands"
{
"PlayerCommands"
{
"Кикнуть игрока"
{
"cmd" "sm_kick #1 @2"
"1"
{
"title" "Выберите игрока"
"type" "player"
}
"2"
{
"title" "Причина кика"
"type" "list"
"1" "мат"
"2" "оскорбление игроков"
"3" "реклама"
"4" "спам в микрофон"
"5" "игнорирование админа"
"6" "некорректный спрей"
"7" "нарушение правил сервера"
"8" "другое"
"9" "долгое время в спеках"
}
}
}
}
Вариант №2
В этом варианте добавим причины в стандартную функцию Кика. Но здесь мы будем уже редактировать стандартные исходники плагинов, а затем компилировать уже.
- Открываем файл: ../addons/sourcemod/scripting/basecommands.sp
И вставляем в него после строчек:
следующее:C-подобный:new Handle:g_MapList; new Handle:g_ProtectedVars;
Сохраняем этот файл.C-подобный:new g_kickTarget[MAXPLAYERS+1];
- Теперь открываем файл: ../addons/sourcemod/scripting/basecommands/kick.sp
Находим строку (48 примерно)
и заменяем на:C-подобный:DisplayKickMenu(client)
C-подобный:DisplayKickTargetMenu(client)
Теперь после этой функции:
вставляем наши причины:C-подобный:DisplayKickTargetMenu(client) { new Handle:menu = CreateMenu(MenuHandler_Kick); decl String:title[100]; Format(title, sizeof(title), "%T:", "Kick player", client); SetMenuTitle(menu, title); SetMenuExitBackButton(menu, true); AddTargetsToMenu(menu, client, false, false); DisplayMenu(menu, client, MENU_TIME_FOREVER); }
C-подобный:DisplayKickReasonMenu(client) { new Handle:menu = CreateMenu(MenuHandler_Reason); decl String:title[100]; Format(title, sizeof(title), "Kick reason", client); SetMenuTitle(menu, title); SetMenuExitBackButton(menu, true); AddMenuItem(menu, "Abusive", "Abusive"); AddMenuItem(menu, "Racism", "Racism"); AddMenuItem(menu, "General cheating/exploits", "General cheating/exploits"); AddMenuItem(menu, "Wallhack", "Wallhack"); AddMenuItem(menu, "Aimbot", "Aimbot"); AddMenuItem(menu, "Speedhacking", "Speedhacking"); AddMenuItem(menu, "Mic spamming", "Mic spamming"); AddMenuItem(menu, "Admin disrepect", "Admin disrepect"); AddMenuItem(menu, "Camping", "Camping"); AddMenuItem(menu, "Team killing", "Team killing"); AddMenuItem(menu, "Unacceptable Spray", "Unacceptable Spray"); AddMenuItem(menu, "Breaking Server Rules", "Breaking Server Rules"); AddMenuItem(menu, "Other", "Other"); DisplayMenu(menu, client, MENU_TIME_FOREVER); }
Находим строчку (101 примерно строка):
заменяем на:C-подобный:DisplayKickMenu(param);
C-подобный:DisplayKickTargetMenu(param);
находим (110 примерно строка)
заменяем на:C-подобный:decl String:name[MAX_NAME_LENGTH]; GetClientName(target, name, sizeof(name)); ShowActivity2(param1, "[SM] ", "%t", "Kicked target", "_s", name); PerformKick(param1, target, "");
C-подобный: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 примерно строка):
заменяем на:C-подобный:DisplayKickMenu(param1);
Компилируем плагин, и кидаем на сервер. После чего, наша родная встроенная функция Кик игрока, будет с причинами.C-подобный:DisplayKickTargetMenu(param1);
Примечание: Если вы причины указываете на русском, то перед компиляцией плагина, необходимо исходник kick.sp перевести в кодировку UTF8 без BOM.
И число символов в левой части не должно превышать 62 знака, иначе причины игроку будут показываться обрезанными.
Подсчитать символы можно с помощью программы Notepad++
Пример ниже
Эту модификацию я нашел здесь: forums.alliedmods.net
Ниже во вложении прилагаются готовые файлы для Sourcemod_1.5.2