Пример плагина: Цветной чат и меню (colorchat.inc + amxmisc.inc)
Пример: цветной чат + интерактивное меню
<colorchat> — цветные сообщения в чате (красный/синий/серый, в зависимости от команды игрока-отправителя). <amxmisc> — обвязка для меню (старый стиль new menu system) и администрации.
Что делает плагин
- Команда
/menu— открывает меню с действиями: восстановить HP, 1000$ дать, godtoggle. - Цветные уведомления всем при выборе пункта меню.
Полный код плагина
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <fun>
#include <cstrike>
public plugin_init()
{
register_plugin("Color Menu Demo", "1.0", "WikiExample");
register_clcmd("say /menu", "cmd_show_menu");
}
public cmd_show_menu(id)
{
if (!is_user_alive(id))
{
ColorChat(id, RED, "[Menu]^1 Мёртвые не могут открыть меню.");
return PLUGIN_HANDLED;
}
new title[128];
formatex(title, charsmax(title), "\r[Wiki Menu]\y Выберите действие:");
new menu = menu_create(title, "menu_handler");
menu_additem(menu, "Восстановить 100 HP", "1", 0);
menu_additem(menu, "Выдать 1000$", "2", 0);
menu_additem(menu, "Включить godmode", "3", 0);
menu_additem(menu, "Перейти в наблюдатели", "4", 0);
menu_additem(menu, "Закрыть меню", "5", 0);
menu_setprop(menu, MPROP_EXITNAME, "Выход");
menu_display(id, menu, 0);
return PLUGIN_HANDLED;
}
public menu_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], iName[64], access, callback;
menu_item_getinfo(menu, item, access, data, charsmax(data), iName, charsmax(iName), callback);
new choice = str_to_num(data);
switch (choice)
{
case 1:
{
set_user_health(id, 100);
ColorChat(id, GREEN, "[Menu]^1 Здоровье восстановлено до^4 100 HP^1.");
}
case 2:
{
new money = cs_get_user_money(id);
cs_set_user_money(id, money + 1000);
ColorChat(id, BLUE, "[Menu]^1 Вы получили^3 1000$^1. Текущий баланс:^3 %d$", money + 1000);
}
case 3:
{
set_user_godmode(id, !get_user_godmode(id));
new status[16];
if (get_user_godmode(id)) copy(status, charsmax(status), "ВКЛЮЧЁН");
else copy(status, charsmax(status), "ВЫКЛЮЧЕН");
ColorChat(id, RED, "[Menu]^1 Godmode:^3 %s", status);
}
case 4:
{
user_kill(id, 1);
cs_set_user_team(id, CS_TEAM_SPECTATOR, CS_DONTCHANGE);
ColorChat(id, GREY, "[Menu]^1 Вы в наблюдателях.");
}
case 5:
{
ColorChat(id, NORMAL, "[Menu]^1 Меню закрыто.");
}
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
Ключевые функции
ColorChat(id, COLOR, "^1text ^3 %s", arg)— цветной чат. ColorChat (RED/BLUE/GREY/GREEN/NORMAL). ^1=обычный, ^3=цвет команды, ^4=зелёный.client_print_color(id, print_team_default, msg)— парная функция в amxmodx.inc (в новых версиях).menu_create(title, handler)— создаёт меню, возвращает ID.menu_additem(menu, name, info, paccess)— добавляет пункт. info=строка-идентификатор (достается в handler через menu_item_getinfo).menu_display(id, menu, page)— показывает игроку.menu_handler(id, menu, item)— callback с индексом кликнутого пункта (item=-3 = exit).menu_destroy(menu)— обязательно освобождает ресурсы меню.
Компиляция: для colorchat.inc нужно положить colorchat.inc в include/ вашего компилятора. Стандартная поставка AMX Mod X.
Подробные инструкции и обсуждения ждём вас на нашем форуме — в разделе CS 1.6.