Система команд ZCMD в Pawn: полное руководство

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

ZCMD - быстрая и удобная система команд. Разберем использование.

Установка
1. Скачайте zcmd.inc
2. Поместите в папку includes
3. Подключите: #include <zcmd>

Базовое использование
Код:
#include <zcmd>

CMD:help(playerid, params[])
{
    SendClientMessage(playerid, -1, "Доступные команды: /help, /stats");
    return 1;
}

CMD:stats(playerid, params[])
{
    new string[128];
    format(string, sizeof(string), "Уровень: %d, Деньги: $%d", 
        PlayerInfo[playerid][pLevel], 
        GetPlayerMoney(playerid));
    SendClientMessage(playerid, -1, string);
    return 1;
}

Парсинг параметров
Код:
CMD:give(playerid, params[])
{
    new targetid, amount;
    if(sscanf(params, "ui", targetid, amount))
    {
        SendClientMessage(playerid, -1, "Использование: /give [id] [сумма]");
        return 1;
    }
    
    if(!IsPlayerConnected(targetid))
    {
        SendClientMessage(playerid, -1, "Игрок не подключен");
        return 1;
    }
    
    GivePlayerMoney(targetid, amount);
    SendClientMessage(playerid, -1, "Деньги выданы");
    return 1;
}

Проверка прав доступа
Код:
CMD:kick(playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] < 1)
    {
        SendClientMessage(playerid, -1, "У вас нет прав администратора");
        return 1;
    }
    
    new targetid, reason[128];
    if(sscanf(params, "us[128]", targetid, reason))
    {
        SendClientMessage(playerid, -1, "Использование: /kick [id] [причина]");
        return 1;
    }
    
    Kick(targetid);
    return 1;
}

Алиасы команд
Код:
CMD:help(playerid, params[])
{
    ShowHelp(playerid);
    return 1;
}

CMD:h(playerid, params[])
{
    return cmd_help(playerid, params);
}

CMD:справка(playerid, params[])
{
    return cmd_help(playerid, params);
}

Команды с подкомандами
Код:
CMD:admin(playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] < 1)
    {
        return 1;
    }
    
    new subcmd[32], rest[128];
    if(sscanf(params, "s[32]S()[128]", subcmd, rest))
    {
        SendClientMessage(playerid, -1, "Использование: /admin [kick/ban/teleport]");
        return 1;
    }
    
    if(!strcmp(subcmd, "kick", true))
    {
        new targetid;
        if(sscanf(rest, "u", targetid))
        {
            SendClientMessage(playerid, -1, "Использование: /admin kick [id]");
            return 1;
        }
        Kick(targetid);
    }
    else if(!strcmp(subcmd, "ban", true))
    {
        new targetid;
        if(sscanf(rest, "u", targetid))
        {
            SendClientMessage(playerid, -1, "Использование: /admin ban [id]");
            return 1;
        }
        Ban(targetid);
    }
    else if(!strcmp(subcmd, "teleport", true))
    {
        new Float:x, Float:y, Float:z;
        if(sscanf(rest, "fff", x, y, z))
        {
            SendClientMessage(playerid, -1, "Использование: /admin teleport [x] [y] [z]");
            return 1;
        }
        SetPlayerPos(playerid, x, y, z);
    }
    
    return 1;
}

Группировка команд
Код:
// Команды для игроков
CMD:help(playerid, params[]) { return 1; }
CMD:stats(playerid, params[]) { return 1; }
CMD:time(playerid, params[]) { return 1; }

// Команды для администраторов
CMD:akick(playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] < 1) return 1;
    // код
    return 1;
}

CMD:aban(playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] < 1) return 1;
    // код
    return 1;
}

Обработка ошибок
Код:
CMD:safe(playerid, params[])
{
    new targetid, amount;
    if(sscanf(params, "ui", targetid, amount))
    {
        SendClientMessage(playerid, -1, "Использование: /safe [id] [сумма]");
        return 1;
    }
    
    if(!IsPlayerConnected(targetid))
    {
        SendClientMessage(playerid, -1, "Игрок не подключен");
        return 1;
    }
    
    if(amount < 0)
    {
        SendClientMessage(playerid, -1, "Сумма не может быть отрицательной");
        return 1;
    }
    
    if(GetPlayerMoney(playerid) < amount)
    {
        SendClientMessage(playerid, -1, "Недостаточно денег");
        return 1;
    }
    
    GivePlayerMoney(targetid, amount);
    GivePlayerMoney(playerid, -amount);
    SendClientMessage(playerid, -1, "Деньги переданы");
    return 1;
}

Логирование команд
Код:
CMD:logtest(playerid, params[])
{
    new string[256], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "[CMD] %s использовал команду /logtest с параметрами: %s", name, params);
    print(string);
    return 1;
}

Важные моменты:
- Всегда возвращайте 1 при успехе
- Проверяйте параметры перед использованием
- Предоставляйте справку по командам
- Логируйте важные команды

ZCMD - быстрая и удобная система команд!
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху