- Обзор
- Установка
- Настройки
- Код/Апи
- Словарь
- Команды
- Обновления
- Скриншоты/Видео
- Благодарности
Автор ar222`
Совместимость с Amx Mod X 1.9.0, Amx Mod X 1.10.0 dev
Плагин добавляет различные режимы в игру, например для тренировки или развлечения. Вводится команда в чат, открывается меню с функциями действующими на всех живых игроков на сервере.
Что входит в меню:
Выдать всем гравитацию.
Выдать всем скорость.
Выдать всем жизни.
Выдать всем невидимость.
Функционал:
В меню можно удобно включать или отключать каждую функцию. (вкл/выкл)
Если Вы что то активируете, то будет оповещение в HUD всем игрокам об этом режиме игры.
В каждом новом раунде идет сброс всех активаций функций, если вы отключите их в меню. (так как, кто-то может быть уже умершим)
Если у какой-то функции положение ВКЛ и начался новый раунд, то функция останется работать, активируется заново.
Все сообщения редактируется в LANG файле (меню и которые в HUD), по этому можете отредактировать их как хотите.
Доступ к меню по флагу. (настройка кваром)
Настройка значений к функциям с помощью кваров.
Функция "Скорость" не сбрасывается при смене оружия.
Возможно вкл/выкл уведомления через заданное время, пока активна какая-то функция (что она активна) в чат. (различные настройки, например только hud или чат, иначе все вместе)
Если игрок спавнится (только зашел на сервер или просто) и если работает какая то функция из меню, то будет оповещение в HUD.
Если игрок заспавнился при входе на сервер, в случае того если какая-то функция активна, то игроку сразу же она добавится.
Сделана возможность проверять каждый раунд, есть ли игроки с флагом от входа в меню (настройка кваром), если нету, то все функции из меню выключатся.
Сделана возможность постоянного кеширования (например для тестов), настройка дефайном.
Есть возможность сделать действия функций на ботов. (настройка кваром)
Установка: База знаний.
#define AUTO_CONFIG //Авто-создание конфига
#define PERSISTENT_CACHING //Постоянное кеширование (если Вам нужно закешировать флаги и другое только при старте карты, закомментруйте)
/*
Плагин - The_Crazy_Menu | Rus: "Очумевшее меню".
Требования: Reapi
Совместимость с: AmxModX 1.9.0, 1.10.0
Описание:
Плагин добавляет различные режимы в игру, например для тренировки или развлечения.
Вводится команда в чат, открывается меню с функциями действующими на всех живых игроков на сервере.
Что входит в меню:
1. Выдать всем гравитацию.
2. Выдать всем скорость.
3. Выдать всем жизни.
4. Выдать всем невидимость.
Функционал:
* - В меню можно удобно включать или отключать каждую функцию. (вкл/выкл)
* - Если Вы что то активируете, то будет оповещение в HUD всем игрокам об этом режиме игры.
* - В каждом новом раунде идет сброс всех активаций функций, если вы отключите их в меню. (так как, кто-то может быть уже умершим)
* - Если у какой-то функции положение ВКЛ и начался новый раунд, то функция останется работать, активируется заново.
* - Все сообщения редактируется в LANG файле (меню и которые в HUD), по этому можете отредактировать их как хотите.
* - Доступ к меню по флагу. (настройка кваром)
* - Настройка значений к функциям с помощью кваров.
* - Функция "Скорость" не сбрасывается при смене оружия.
* - Возможно вкл/выкл уведомления через заданное время, пока активна какая-то функция (что она активна) в чат. (различные настройки, например только hud или чат, иначе все вместе)
* - Если игрок спавнится (только зашел на сервер или просто) и если работает какая то функция из меню, то будет оповещение в HUD.
* - Если игрок заспавнился при входе на сервер, в случае того если какая-то функция активна, то игроку сразу же она добавится.
* - Сделана возможность проверять каждый раунд, есть ли игроки с флагом от входа в меню (настройка кваром), если нету, то все функции из меню выключатся.
* - Сделана возможность постоянного кеширования (например для тестов), настройка дефайном.
* - Есть возможность сделать действия функций на ботов. (настройка кваром)
Поддержка:
Dev-Cs: @ar222`
Telegram: @WellAsGood
*/
/*
Журнал изменений:
ver 0.0.2:
1. Теперь отображение добавляемых жизней (+инфа) будет в соответствии значения квара 'cm_hp_on'. (ранее надо было править бы вручную)
2. Изменен LANG файл.
ver 0.0.3:
1. Теперь невидимость для игрока сделана с использованием reapi. (спасибо: d3m37r4 за напутствие, malniata за готовый код -_-)
2. Убран #include
*/
#include
#include
#include
#define MULTI_DESC(%0) fmt("%L", LANG_SERVER, %0)
#define AUTO_CONFIG //Авто-создание конфига
#define PERSISTENT_CACHING //Постоянное кеширование (если Вам нужно закешировать флаги и другое только при старте карты, закомментруйте)
new const PLUGIN[] = "The_Crazy_Menu";
new const VERSION[] = "0.0.3";
new const AUTHOR[] = "ar222`";
enum any:CVAR_DATA
{
CM_FLAG_MENU[64],
Float:CM_GRAVITY,
Float:CM_SPEED,
Float:CM_HP_ON,
Float:CM_HP_OFF,
CM_INFO_VALUE,
Float:CM_TIME_INFO,
CM_FLAG_CHECK,
CM_BOT_ACTIVITY
};
enum _:MainCheckData
{
bool:Check_gr,
bool:Check_sp,
bool:Check_hp,
bool:Check_hd,
bool:CheckRound
};
enum _:MenuCheckData
{
Check_Gravity,
Check_Speed,
Check_HP,
Check_Hide
};
enum _:SignData
{
bool:Sign_Gravity,
bool:Sign_HP,
bool:Sign_Hide
};
enum
{
ON,
OFF
};
new eCvarData[CVAR_DATA], eMainCheckData[MainCheckData], eMenuCheckData[MAX_PLAYERS+1][MenuCheckData];
new bool:PlayerSpeed[MAX_PLAYERS+1], eSignData[MAX_PLAYERS+1][SignData], SaveFlags;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_dictionary("cm.txt");
register_menu("NextMenuOpen", 1023, "@Handle_NextMenuOpen", 0);
RegisterHookChain(RG_CBasePlayer_ResetMaxSpeed, "@CBasePlayer_ResetMaxSpeed", true);
RegisterHookChain(RG_CSGameRules_PlayerSpawn, "@CBasePlayer_PlayerSpawn", true);
register_logevent("@round_start", 2, "0=World triggered", "1=Round_Start");
register_clcmd("say /crazy-menu", "@OpenCrazyMenu");
register_clcmd("say /cm", "@OpenCrazyMenu");
CreateCvars();
#if defined AUTO_CONFIG
AutoExecConfig(true, "The_Crazy_Menu");
#endif
#if defined PERSISTENT_CACHING
set_task_ex(10.0, "@StartCheck", .flags = SetTask_Repeat);
#else
set_task_ex(10.0, "@StartCheck");
#endif
}
@StartCheck()
{
SaveFlags = read_flags(eCvarData[CM_FLAG_MENU]);
if(eCvarData[CM_INFO_VALUE])
{
new array[1];
if(eCvarData[CM_INFO_VALUE] == 1)
{
array[0] = 1; //только инфа в чат
}
else if(eCvarData[CM_INFO_VALUE] == 2)
{
array[0] = 2; //только инфа в HUD
}
else if(eCvarData[CM_INFO_VALUE] == 3)
{
array[0] = 3; //инфа и в чат и в HUD
}
#if defined PERSISTENT_CACHING
set_task_ex(eCvarData[CM_TIME_INFO], "@DataHandler", 0, array, sizeof array);
#else
set_task_ex(eCvarData[CM_TIME_INFO], "@DataHandler", 0, array, sizeof array, .flags = SetTask_Repeat);
#endif
}
}
public client_disconnected(PlayerID)
{
if(PlayerSpeed[PlayerID])
{
PlayerSpeed[PlayerID] = false;
}
if(eSignData[PlayerID][Sign_Gravity])
{
eSignData[PlayerID][Sign_Gravity] = false;
}
if(eSignData[PlayerID][Sign_HP])
{
eSignData[PlayerID][Sign_HP] = false;
}
if(eSignData[PlayerID][Sign_Hide])
{
eSignData[PlayerID][Sign_Hide] = false;
}
}
@round_start()
{
eMainCheckData[CheckRound] = true;
if(eCvarData[CM_FLAG_CHECK])
{
new ArrayID[MAX_PLAYERS], Count, bool:Check;
get_players_ex(ArrayID, Count, GetPlayers_ExcludeBots|GetPlayers_ExcludeHLTV);
for(new PlayerID, Flag, i; i < Count; i++)
{
PlayerID = ArrayID[i];
Flag = get_user_flags(PlayerID);
if(Flag & SaveFlags == SaveFlags)
{
Check = true;
}
}
if(!Check)
{
eMainCheckData[Check_gr] = false;
eMainCheckData[Check_sp] = false;
eMainCheckData[Check_hp] = false;
eMainCheckData[Check_hd] = false;
}
}
eMainCheckData[Check_gr] ? Activation_Func(1, ON) : Activation_Func(1, OFF);
eMainCheckData[Check_sp] ? Activation_Func(2, ON) : Activation_Func(2, OFF);
if(eMainCheckData[Check_hp])
{
Activation_Func(3, ON);
}
eMainCheckData[Check_hd] ? Activation_Func(4, ON) : Activation_Func(4, OFF);
eMainCheckData[CheckRound] = false;
}
@CBasePlayer_ResetMaxSpeed(PlayerID)
{
if(PlayerSpeed[PlayerID])
{
set_entvar(PlayerID, var_maxspeed, eCvarData[CM_SPEED]);
}
return HC_SUPERCEDE;
}
@CBasePlayer_PlayerSpawn(PlayerID)
{
new array[1];
array[0] = 4;
@DataHandler(array, PlayerID);
}
@OpenCrazyMenu(PlayerID)
{
if(!(get_user_flags(PlayerID) & SaveFlags == SaveFlags))
{
return PLUGIN_HANDLED;
}
NextMenuOpen(PlayerID);
return PLUGIN_HANDLED;
}
NextMenuOpen(PlayerID)
{
new Menu[MAX_MENU_LENGTH], Keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_0;
new Len = formatex(Menu, charsmax(Menu), "%L^n^n", PlayerID, "CRAZY_MENU_TITLE");
Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r[1] \y# \w%L \y[\r%L\y]^n", PlayerID, "CRAZY_MENU_ITEM1", PlayerID, eMenuCheckData[PlayerID][Check_Gravity] == 1 ? "CRAZY_MENU_ON" : "CRAZY_MENU_OFF");
Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r[2] \y# \w%L \y[\r%L\y]^n", PlayerID, "CRAZY_MENU_ITEM2", PlayerID, eMenuCheckData[PlayerID][Check_Speed] == 1 ? "CRAZY_MENU_ON" : "CRAZY_MENU_OFF");
Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r[3] \y# \w%L \y[\r%L\y]^n", PlayerID, "CRAZY_MENU_ITEM3", floatround(eCvarData[CM_HP_ON]), PlayerID, eMenuCheckData[PlayerID][Check_HP] == 1 ? "CRAZY_MENU_ON" : "CRAZY_MENU_OFF");
Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r[4] \y# \w%L \y[\r%L\y]^n^n", PlayerID, "CRAZY_MENU_ITEM4", PlayerID, eMenuCheckData[PlayerID][Check_Hide] == 1 ? "CRAZY_MENU_ON" : "CRAZY_MENU_OFF");
formatex(Menu[Len], charsmax(Menu) - Len, "\r[0] \y# \w%L", PlayerID, "CRAZY_MENU_EXIT");
return show_menu(PlayerID, Keys, Menu, -1, "NextMenuOpen");
}
@Handle_NextMenuOpen(PlayerID, Keys)
{
switch(Keys)
{
case 0:
{
eMenuCheckData[PlayerID][Check_Gravity] = (eMenuCheckData[PlayerID][Check_Gravity] + 1) % 2;
if(eMenuCheckData[PlayerID][Check_Gravity] == 1)
{
Activation_Func(1, ON);
eMainCheckData[Check_gr] = true;
}
else
{
Activation_Func(1, OFF);
eMainCheckData[Check_gr] = false;
}
}
case 1:
{
eMenuCheckData[PlayerID][Check_Speed] = (eMenuCheckData[PlayerID][Check_Speed] + 1) % 2;
if(eMenuCheckData[PlayerID][Check_Speed] == 1)
{
Activation_Func(2, ON);
eMainCheckData[Check_sp] = true;
}
else
{
Activation_Func(2, OFF);
eMainCheckData[Check_sp] = false;
}
}
case 2:
{
eMenuCheckData[PlayerID][Check_HP] = (eMenuCheckData[PlayerID][Check_HP] + 1) % 2;
if(eMenuCheckData[PlayerID][Check_HP] == 1)
{
Activation_Func(3, ON);
eMainCheckData[Check_hp] = true;
}
else
{
Activation_Func(3, OFF);
eMainCheckData[Check_hp] = false;
}
}
case 3:
{
eMenuCheckData[PlayerID][Check_Hide] = (eMenuCheckData[PlayerID][Check_Hide] + 1) % 2;
if(eMenuCheckData[PlayerID][Check_Hide] == 1)
{
Activation_Func(4, ON);
eMainCheckData[Check_hd] = true;
}
else
{
Activation_Func(4, OFF);
eMainCheckData[Check_hd] = false;
}
}
case 9:
{
return PLUGIN_HANDLED;
}
}
NextMenuOpen(PlayerID);
return PLUGIN_HANDLED;
}
Activation_Func(num, check)
{
new ArrayID[MAX_PLAYERS], Count;
if(num == 2)
{
!eCvarData[CM_BOT_ACTIVITY] ? get_players_ex(ArrayID, Count, GetPlayers_ExcludeBots|GetPlayers_ExcludeHLTV) : get_players_ex(ArrayID, Count, GetPlayers_ExcludeHLTV)
}
else
{
!eCvarData[CM_BOT_ACTIVITY] ? get_players_ex(ArrayID, Count, GetPlayers_ExcludeDead|GetPlayers_ExcludeBots|GetPlayers_ExcludeHLTV) : get_players_ex(ArrayID, Count, GetPlayers_ExcludeDead|GetPlayers_ExcludeHLTV);
}
for(new PlayerID, i; i < Count; i++)
{
PlayerID = ArrayID[i];
switch(num)
{
case 1:
{
if(check == 0)
{
eSignData[PlayerID][Sign_Gravity] = true;
set_entvar(PlayerID, var_gravity, eCvarData[CM_GRAVITY]);
}
else
{
set_entvar(PlayerID, var_gravity, 1.0);
}
}
case 2:
{
if(check == 0)
{
PlayerSpeed[PlayerID] = true;
set_entvar(PlayerID, var_maxspeed, eCvarData[CM_SPEED]);
}
else
{
PlayerSpeed[PlayerID] = false;
rg_reset_maxspeed(PlayerID);
}
}
case 3:
{
if(check == 0)
{
eSignData[PlayerID][Sign_HP] = true;
set_entvar(PlayerID, var_health, eCvarData[CM_HP_ON]);
}
else
{
set_entvar(PlayerID, var_health, eCvarData[CM_HP_OFF]);
}
}
case 4:
{
if(check == 0)
{
eSignData[PlayerID][Sign_Hide] = true;
set_entvar(PlayerID, var_effects, get_entvar(PlayerID, var_effects) | EF_NODRAW);
}
else
{
set_entvar(PlayerID, var_effects, get_entvar(PlayerID, var_effects) & ~EF_NODRAW);
}
}
}
}
if(check == 0)
{
if(!eMainCheckData[CheckRound])
{
set_hudmessage(random_num(100, 255), random_num(100, 255), random_num(100, 255), -1.0, -0.65, 0, _, 3.0, 0.5, 1.5, -1);
if(num == 3)
{
show_hudmessage(0, "%L", LANG_PLAYER, "CRAZY_MENU_HUD3", floatround(eCvarData[CM_HP_ON]));
}
else
{
show_hudmessage(0, "%L", LANG_PLAYER, fmt("CRAZY_MENU_HUD%d", num));
}
}
}
}
@DataHandler(num[], PlayerID)
{
new Value = num[0];
if(eMainCheckData[Check_gr])
{
if(Value == 1 || Value == 3)
{
ChatMessage(1);
}
else if(Value == 4)
{
if(!eSignData[PlayerID][Sign_Gravity])
{
set_entvar(PlayerID, var_gravity, eCvarData[CM_GRAVITY]);
}
}
}
if(eMainCheckData[Check_sp])
{
if(Value == 1 || Value == 3)
{
ChatMessage(2);
}
}
if(eMainCheckData[Check_hp])
{
if(Value == 1 || Value == 3)
{
ChatMessage(3);
}
else if(Value == 4)
{
if(!eSignData[PlayerID][Sign_HP])
{
set_task_ex(3.0, "@FixActivateHP", PlayerID);
}
}
}
if(eMainCheckData[Check_hd])
{
if(Value == 1 || Value == 3)
{
ChatMessage(4);
}
else if(Value == 4)
{
if(!eSignData[PlayerID][Sign_Hide])
{
set_entvar(PlayerID, var_effects, get_entvar(PlayerID, var_effects) | EF_NODRAW);
}
}
}
if(eMainCheckData[Check_gr] || eMainCheckData[Check_sp] || eMainCheckData[Check_hp] || eMainCheckData[Check_hd])
{
new array[1];
if(Value == 2 || Value == 3)
{
array[0] = 2;
@HudMessage(array, 0);
}
else if(Value == 4 && (eCvarData[CM_INFO_VALUE] == 2 || eCvarData[CM_INFO_VALUE] == 3))
{
array[0] = 1;
set_task_ex(5.0, "@HudMessage", PlayerID, array, sizeof array);
}
}
}
ChatMessage(num)
{
if(num == 3)
{
client_print_color(0, print_team_default, "%l", "CRAZY_MENU_CHAT3", floatround(eCvarData[CM_HP_ON]));
}
else
{
client_print_color(0, print_team_default, "%l", fmt("CRAZY_MENU_CHAT%d", num));
}
}
@HudMessage(num[], PlayerID)
{
new Value = num[0];
set_hudmessage(random_num(100, 255), random_num(100, 255), random_num(100, 255), -1.0, -0.50, 0, _, 5.0, 1.5, 3.5, -1);
show_hudmessage(PlayerID, "%L", Value == 1 ? PlayerID : LANG_PLAYER, "CRAZY_MENU_NOTIFICATION_SPAWN");
}
@FixActivateHP(PlayerID)
{
set_entvar(PlayerID, var_health, eCvarData[CM_HP_ON]);
}
CreateCvars()
{
bind_pcvar_string(create_cvar(
.name = "cm_flagmenu",
.string = "b",
.description = MULTI_DESC("CM_DESC_FLAGMENU")),
eCvarData[CM_FLAG_MENU],
charsmax(eCvarData[CM_FLAG_MENU])
);
bind_pcvar_num(create_cvar(
.name = "cm_flag_check",
.string = "1",
.description = MULTI_DESC("CM_DESC_FLAG_CHECK"),
.has_min = true,
.min_val = 0.0,
.has_max = true,
.max_val = 1.0),
eCvarData[CM_FLAG_CHECK]
);
bind_pcvar_float(create_cvar(
.name = "cm_gravity",
.string = "0.3",
.description = MULTI_DESC("CM_DESC_GRAVITY")),
eCvarData[CM_GRAVITY]
);
bind_pcvar_float(create_cvar(
.name = "cm_speed",
.string = "1000.0",
.description = MULTI_DESC("CM_DESC_SPEED")),
eCvarData[CM_SPEED]
);
bind_pcvar_float(create_cvar(
.name = "cm_hp_on",
.string = "250.0",
.description = MULTI_DESC("CM_DESC_HP_ON")),
eCvarData[CM_HP_ON]
);
bind_pcvar_float(create_cvar(
.name = "cm_hp_off",
.string = "100.0",
.description = MULTI_DESC("CM_DESC_HP_OFF")),
eCvarData[CM_HP_OFF]
);
bind_pcvar_num(create_cvar(
.name = "cm_info_value",
.string = "1",
.description = MULTI_DESC("CM_DESC_INFO_VALUE"),
.has_min = true,
.min_val = 0.0,
.has_max = true,
.max_val = 3.0),
eCvarData[CM_INFO_VALUE]
);
bind_pcvar_float(create_cvar(
.name = "cm_time_info",
.string = "50.0",
.description = MULTI_DESC("CM_DESC_TIME_INFO")),
eCvarData[CM_TIME_INFO]
);
bind_pcvar_num(create_cvar(
.name = "cm_bot_activity",
.string = "0",
.description = MULTI_DESC("CM_DESC_BOT_ACTIVITY"),
.has_min = true,
.min_val = 0.0,
.has_max = true,
.max_val = 1.0),
eCvarData[CM_BOT_ACTIVITY]
);
}
Мультиязычность RU, EN
[en]
CM_DESC_FLAGMENU = Flag for accessing the menu.
CM_DESC_FLAG_CHECK = On/off (1/0) player search system with the menu access flag every round. (if there are no such players, the functions from the menu will be disabled)
CM_DESC_GRAVITY = Value for the function from the menu: "Gravity" (standard for the player 1.0 == 800)
CM_DESC_SPEED = Value for a function from the menu: "Speed"
CM_DESC_HP_ON = Value for the function from the menu: "Life" (when enabled, when the function is activated)
CM_DESC_HP_OFF = Value for the function from the menu: "Lives" (if disabled, return lives to default value)
CM_DESC_INFO_VALUE = System for displaying info about enabled modes from the menu. Possible values: 0-off; 1-chat only; 2-hud only; 3-chat and hud
CM_DESC_TIME_INFO = The time Interval for cm_info_value. (after this time interval, notifications will be displayed)
CM_DESC_BOT_ACTIVITY = On/off (1/0) actions of functions from the menu on bots.
CRAZY_MENU_TITLE = \w[\rСrazy menu\w]
CRAZY_MENU_ITEM1 = All gravity
CRAZY_MENU_ITEM2 = All speed
CRAZY_MENU_ITEM3 = All %dhp
CRAZY_MENU_ITEM4 = Invisibility to all
CRAZY_MENU_ON = ON
CRAZY_MENU_OFF = OFF
CRAZY_MENU_EXIT = Exit
CRAZY_MENU_HUD1 = [Special mode] - all players are given gravity!
CRAZY_MENU_HUD2 = [Special mode] - all players are given speed!
CRAZY_MENU_HUD3 = [Special mode] - all players are given %d HP!
CRAZY_MENU_HUD4 = [Special mode] - all players are given invisibility!
CRAZY_MENU_NOTIFICATION_SPAWN = Dear Player! Special modes are currently available on the server!
CRAZY_MENU_CHAT1 = ^3[^4Special regime^3] ^1There is a special ^3mode^1! All players are given ^4gravity^1!
CRAZY_MENU_CHAT2 = ^3[^4Special regime^3] ^1There is a special ^3mode^1! All players are given ^4speed^1!
CRAZY_MENU_CHAT3 = ^3[^4Special regime^3] ^1There is a special ^3mode^1! All players are issued ^4%d ^3HP^1!
CRAZY_MENU_CHAT4 = ^3[^4Special regime^3] ^1There is a special ^3mode^1! All players are given ^4invisibility^1!
[ru]
CM_DESC_FLAGMENU = Флаг доступа к меню.
CM_DESC_FLAG_CHECK = Вкл/выкл (1/0) систему поиска игроков с флагом доступа к меню каждый раунд. (если не будет таких игроков, то функции из меню выключатся)
CM_DESC_GRAVITY = Значение для функции из меню: "Гравити" (стандарт у игрока 1.0 == 800)
CM_DESC_SPEED = Значение для функции из меню: "Скорость"
CM_DESC_HP_ON = Значение для функции из меню: "Жизни" (при включении, когда активируется функция)
CM_DESC_HP_OFF = Значение для функции из меню: "Жизни" (при отключении, возвращение жизней на дефолт.значение)
CM_DESC_INFO_VALUE = Система вывода инфо о включенных режимах из меню. Возможные значения: 0-выкл; 1-только чат; 2-только hud; 3-чат и hud
CM_DESC_TIME_INFO = Интервал времени для cm_info_value. (через этот промежуток времени будет вызван показ уведомлений)
CM_DESC_BOT_ACTIVITY = Вкл/выкл (1/0) действия функций из меню на ботов.
CRAZY_MENU_TITLE = \w[\rОчумевшее меню\w]
CRAZY_MENU_ITEM1 = Всем гравити
CRAZY_MENU_ITEM2 = Всем скорость
CRAZY_MENU_ITEM3 = Всем %dхп
CRAZY_MENU_ITEM4 = Всем невидимость
CRAZY_MENU_ON = ВКЛ
CRAZY_MENU_OFF = ВЫКЛ
CRAZY_MENU_EXIT = Выход
CRAZY_MENU_HUD1 = [Особый режим] - Всем игрокам выдана гравитация!
CRAZY_MENU_HUD2 = [Особый режим] - Всем игрокам выдана скорость!
CRAZY_MENU_HUD3 = [Особый режим] - Всем игрокам выдано %d ХП!
CRAZY_MENU_HUD4 = [Особый режим] - Всем игрокам выдана невидимость!
CRAZY_MENU_NOTIFICATION_SPAWN = Ув. Игрок! Сейчас на сервере действуют особые режимы!
CRAZY_MENU_CHAT1 = ^3[^4Особый режим^3] ^1Действует особый ^3режим^1! Всем игрокам выдана ^4гравитация^1!
CRAZY_MENU_CHAT2 = ^3[^4Особый режим^3] ^1Действует особый ^3режим^1! Всем игрокам выдана ^4скорость^1!
CRAZY_MENU_CHAT3 = ^3[^4Особый режим^3] ^1Действует особый ^3режим^1! Всем игрокам выдано ^4%d ^3ХП^1!
CRAZY_MENU_CHAT4 = ^3[^4Особый режим^3] ^1Действует особый ^3режим^1! Всем игрокам выдана ^4невидимость^1!
Открытие меню управления:
say /crazy-menu
say /cm
[Обновление без изменения версии]:
[Added]:
Добавлена новая информация контактов поддержки.
Исходный код еще раз проверен на пригодность и успешное компилирование.
Пересобран архив.
__________________
Благодарности
malniata, d3m37r4