Главная Новости Услуги Форум | База знаний

Вверх

Меню
Пользователей онлайн
Онлайн игроков: 60

Пример плагина: Цветной чат и меню (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.
Назад