OnPlayerCommandText

Материал из Pro-Pawn Wiki
Перейти к: навигация, поиск

Описание:

Вызывается, когда игрок или NPC отправляет команду в чат.

Параметры:

(playerid, cmdtext[])
playerid ID игрока, отправившего сообщение.
cmdtext[] Текст комады, включающий в себя название команды и её параметры.


Возвращаемое значение:

При возврате 0 функция не будет вызвана в других фильтрскриптах и в моде, а игроку в чате будет выведено сообщение "SERVER: Unknown command.".

Warning.png
Внимание!
Вместо обработки в OnPlayerCommandText() рекомендуется использовать т.н. командные процессоры - они отличаются гораздо меньшим временем отклика (быстрее отыскивают нужный обработчик команды) и обеспечивают больше возможностей для разбиения скрипта на модули (обработчики команд реализуются в виде отдельных функций, которые можно хранить в разных исходных файлах). Одними из самых известных командных процессоров считаются ZCMD, DC_CMD и Pawn.CMD.


Info rhombus.png
Примечание
Функция вызывается сначала в фильтрскриптах, затем в моде.
Сервер считает командой любую отправляемую в чат строку, начинающуюся с '/'. Название команды и параметры могут содержать в себе любые символы, которые игрок может ввести в чате. При этом название команды может состоять из одного символа '/': например, "/ 123" считается правильной командой с названием "/" и параметром "123".
Длина команды ограничена максимальной длиной ввода в чате, т.е. 128 символами. Следовательно, чтобы гарантированно вместить название команды, нужен массив из 128 + 1 = 129 ячеек.
Длина параметров тоже ограничена 128 символами, однако следует также учитывать знак '/', с которого начинаются команды, и пробел между названием команды и параметрами. В итоге для полного сохранения параметров требуется массив из (128 + 1) - 1 - 1 = 127 ячеек.


Пример использования:

public OnPlayerCommandText(playerid, text[])
{
    new cmd[129], params[127];
    sscanf(cmdtext, "s[129] S[127]", cmd, params);

    if (0 == strcmp(cmd, "/getmoney"))
    {
        GivePlayerMoney(playerid, 1000);
        SendClientMessage(playerid, -1, "Вы получили 1000$.");
        // Не забудем использовать return, чтобы сервер не искал команду дальше.
        // Также вместо "return 1" часто делают возврат результата из любой функции,
        // возвращающей ненулевое значение (например, "return SendClientMessage(...)").
        return 1;
    }

    if (0 == strcmp(cmd, "/restore"))
    {
        if (0 == strcmp(params, "health"))
        {
            SetPlayerHealth(playerid, 100.0);
            return SendClientMessage(playerid, -1, "Здоровье восстановлено.");
        }
        // В английском языке есть 2 варианта написания: "armor" (в британском английском)
        // и "armour" (в американском английском) - учтём оба варианта.
        if (0 == strcmp(params, "armor") || 0 == strcmp(params, "armour"))
        {
            SetPlayerArmour(playerid, 100.0);
            return SendClientMessage(playerid, -1, "Броня восстановлена.");
        }
        return SendClientMessage(playerid, -1, "Использование: /restore [health|armor|armour]");
    }

    // Вместо стандартного "SERVER: Unknown command." (при return 0)
    // отобразим своё сообщение на русском.
    return SendClientMessage(playerid, -1, "Неизвестная команда.");
}


См. также: