diff --git a/README.md b/README.md index c9a2033..500b21f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,45 @@ -# helpmenu +# Help Menu -Help menu plugin for ArcaneGame server \ No newline at end of file +Простое меню справки для игроков на CS:GO сервере. Открывается командой `!help` в чате и предоставляет 4 пункта: правила, основные команды, ссылки на Telegram и сайт. + +## Функции + +- Главное меню со 4 пунктами +- Подменю «Правила» с топ-5 правилами сервера (показываются как заблокированные пункты) +- Команды — выводятся в чат игроку +- Telegram-ссылка — отправляется в чат с приглашением +- Сайт — отправляется в чат + +## Зависимости + +- [SourceMod](https://www.sourcemod.net/) 1.10+ + +## Установка + +1. Скомпилировать `scripting/helpmenu.sp` +2. Положить `.smx` в `addons/sourcemod/plugins/` +3. Перезапустить сервер или загрузить плагин: `sm plugins load helpmenu` + +## Команды + +| Команда | Доступ | Описание | +|---|---|---| +| `!help` / `sm_help` | Все игроки | Открыть меню справки | + +## Структура меню + +``` +ArcaneGame — справка +├─ Правила сервера → подменю с правилами +├─ Команды → вывод в чат списка команд (!g, !ws, !glove, !knife) +├─ Наш Telegram → ссылка на t.me/arcanegamecs в чат +└─ Наш сайт → ссылка на arcanegame.ru в чат +``` + +## Конфигурация ссылок + +Если поменять Telegram/сайт — отредактируй `#define TG_LINK` и `#define WEBSITE_LINK` в начале `.sp` файла, потом перекомпилируй. + +## Версия + +`1.0.0` — Автор: deidara.dev diff --git a/scripting/helpmenu.sp b/scripting/helpmenu.sp new file mode 100644 index 0000000..bd57cdd --- /dev/null +++ b/scripting/helpmenu.sp @@ -0,0 +1,145 @@ +#pragma semicolon 1 +#pragma newdecls required + +#include + +#define HELP_PREFIX "\x09[HELP]\x01" +#define TG_LINK "https://t.me/arcanegamecs" +#define WEBSITE_LINK "https://arcanegame.ru" + +public Plugin myinfo = +{ + name = "Help Menu", + author = "deidara.dev", + description = "Меню справки для игроков: правила, команды, контакты сервера", + version = "1.0.0", + url = "https://deidara.dev" +}; + +public void OnPluginStart() +{ + RegConsoleCmd("sm_help", Command_Help, "Открыть меню справки"); +} + +public Action Command_Help(int client, int args) +{ + if (client <= 0 || !IsClientInGame(client)) + { + ReplyToCommand(client, "[HELP] Команда доступна только в игре."); + return Plugin_Handled; + } + + ShowMainMenu(client); + return Plugin_Handled; +} + +void ShowMainMenu(int client) +{ + Menu menu = new Menu(MenuHandler_Main); + menu.SetTitle("ArcaneGame — справка"); + + menu.AddItem("rules", "Правила сервера"); + menu.AddItem("commands", "Команды"); + menu.AddItem("telegram", "Наш Telegram"); + menu.AddItem("website", "Наш сайт"); + + menu.ExitButton = true; + menu.Display(client, 30); +} + +public int MenuHandler_Main(Menu menu, MenuAction action, int client, int item) +{ + if (action == MenuAction_End) + { + delete menu; + return 0; + } + + if (action != MenuAction_Select) + { + return 0; + } + + char info[16]; + menu.GetItem(item, info, sizeof(info)); + + if (StrEqual(info, "rules")) + { + ShowRulesMenu(client); + } + else if (StrEqual(info, "commands")) + { + ShowCommands(client); + } + else if (StrEqual(info, "telegram")) + { + ShowTelegram(client); + } + else if (StrEqual(info, "website")) + { + ShowWebsite(client); + } + + return 0; +} + +void ShowRulesMenu(int client) +{ + Menu menu = new Menu(MenuHandler_Rules); + menu.SetTitle("Правила сервера ArcaneGame"); + + // Disabled-пункты: показываются как пронумерованные строки правил, не выбираются + menu.AddItem("r1", "Запрещены читы, скрипты и баг-юзинг", ITEMDRAW_DISABLED); + menu.AddItem("r2", "Запрещён тимкилл и тимфлеш", ITEMDRAW_DISABLED); + menu.AddItem("r3", "Уважение к админам и игрокам", ITEMDRAW_DISABLED); + menu.AddItem("r4", "Запрещены оскорбления и мат", ITEMDRAW_DISABLED); + menu.AddItem("r5", "Запрещён мульти-аккаунт и буст", ITEMDRAW_DISABLED); + + menu.ExitButton = true; + menu.ExitBackButton = true; + menu.Display(client, 30); +} + +public int MenuHandler_Rules(Menu menu, MenuAction action, int client, int item) +{ + if (action == MenuAction_End) + { + delete menu; + return 0; + } + + if (action == MenuAction_Cancel) + { + if (item == MenuCancel_ExitBack) + { + ShowMainMenu(client); + } + return 0; + } + + return 0; +} + +void ShowCommands(int client) +{ + PrintToChat(client, "%s \x04Команды сервера:", HELP_PREFIX); + PrintToChat(client, "%s \x04!g\x01 — меню койнов", HELP_PREFIX); + PrintToChat(client, "%s \x04!ws\x01 — выбор скинов оружия", HELP_PREFIX); + PrintToChat(client, "%s \x04!glove\x01 — выбор перчаток", HELP_PREFIX); + PrintToChat(client, "%s \x04!knife\x01 — выбор ножа", HELP_PREFIX); + PrintToChat(client, "%s \x04!help\x01 — открыть это меню", HELP_PREFIX); +} + +void ShowTelegram(int client) +{ + PrintToChat(client, "%s \x04Наш Telegram-канал:", HELP_PREFIX); + PrintToChat(client, "%s \x05%s\x01", HELP_PREFIX, TG_LINK); + PrintToChat(client, "%s Подписывайся, чтобы быть в курсе обновлений и анонсов!", HELP_PREFIX); +} + +void ShowWebsite(int client) +{ + PrintToChat(client, "%s \x04Наш сайт:", HELP_PREFIX); + PrintToChat(client, "%s \x05%s\x01", HELP_PREFIX, WEBSITE_LINK); + PrintToChat(client, "%s Заходи: статистика, магазин, новости.", HELP_PREFIX); +}