PDA

Просмотр полной версии : [Вопрос] Отключение DC_CMD



Sersoftin
15.10.2014, 13:23
Некоторые поймут наверное. Возникла необходимость отрубить возможность использования команд до тех пор, пока игрок не авторизуется и это логично, как мне кажется. Я бы даже сказал, что необходимо


if (!AcInfo[playerid][ac_Logined]) return 0;
в OnPlayerCommandText не прокатывает. Скажите, что и куда тыкнуть, т.к. я нуб пока в этом деле.

Nurick
15.10.2014, 14:40
Колбэки OnPlayerCommandReceived и OnPlayerCommandPerformed:

OnPlayerCommandReceived:

OnPlayerCommandReceived(playerid, cmdtext[])
Вызывается перед обработкой команды. В ней можно указать условия выполнения команды.
При этом с помощью return 1/0 можно разрешить/запретить выполнение команды.
Пример:

public OnPlayerCommandReceived(playerid, cmdtext[])
{
if(PlayerInfo[playerid][pMute] == 1) // если у игрока затычка (/mute)
{
SendClientMessage(playerid, -1, "Дождитесь окончания действия заглушки!");
return 0; // передать плагину, чтобы он не выполнял команду
}
return 1; // разрешить выполнение команды
}
OnPlayerCommandPerformed:

OnPlayerCommandPerformed(playerid, cmdtext[], success);
Вызывается после выполнения команды.
При этом если success = 1 - команда выполнилась успешно, success = 0 - с ошибкой, success = -1 - команда не найдена.
Таким образом можно самостоятельно сделать поддержку стандартных команд:

public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
if(success == -1) // если команда не найдена
{
return OnPlayerCommandText(playerid, cmdtext);
}
return 1; // разрешить выполнение команды
}
Либо можно сделать сообщение о несуществующей команде:

public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
if(success == -1) // если команда не найдена
{
return SendClientMessage(playerid, -1, "Несуществующая команда. Используйте /help, чтобы узнать список команд сервера.");
}
return 1;
}

...