OnPlayerCommandText
Материал из Pro-Pawn Wiki
Описание:
Вызывается, когда игрок или NPC отправляет команду в чат.
Параметры:
(playerid, cmdtext[]) |
playerid | ID игрока, отправившего сообщение. |
cmdtext[] | Текст комады, включающий в себя название команды и её параметры. |
Возвращаемое значение:
При возврате
0
функция не будет вызвана в других фильтрскриптах и в моде, а игроку в чате будет выведено сообщение "SERVER: Unknown command."
.
Внимание! |
Вместо обработки в OnPlayerCommandText() рекомендуется использовать т.н. командные процессоры - они отличаются гораздо меньшим временем отклика (быстрее отыскивают нужный обработчик команды) и обеспечивают больше возможностей для разбиения скрипта на модули (обработчики команд реализуются в виде отдельных функций, которые можно хранить в разных исходных файлах). Одними из самых известных командных процессоров считаются ZCMD, DC_CMD и Pawn.CMD.
|
Пример использования:
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, "Неизвестная команда.");
}
{
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, "Неизвестная команда.");
}
См. также: