v1.0.0: initial helpmenu plugin
Простое меню справки для игроков: - !help открывает главное меню - 4 пункта: Правила, Команды, Наш Telegram, Наш сайт - Правила в подменю (топ-5 главных) - Команды/Telegram/Сайт выводятся в чат игроку
This commit is contained in:
@@ -1,3 +1,45 @@
|
|||||||
# helpmenu
|
# Help Menu
|
||||||
|
|
||||||
Help menu plugin for ArcaneGame server
|
Простое меню справки для игроков на 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
|
||||||
|
|||||||
@@ -0,0 +1,145 @@
|
|||||||
|
#pragma semicolon 1
|
||||||
|
#pragma newdecls required
|
||||||
|
|
||||||
|
#include <sourcemod>
|
||||||
|
|
||||||
|
#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);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user