PDA

Просмотр полной версии : [Вопрос] Вопросы про sscanf и return



DmitriyVasilev
17.07.2019, 10:18
Привет всем. Хотелось бы спросить:
1) если в sscanf уже есть проверка на подключение игрока, то как можно сделать так но без этой функции мб за
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, COLOR_GRAD,!"Игрок не в сети");//+

2) Вопрос про return, почитал но не всегда понятно.
Например почему в OnPlayerText нуда возвращать 0, но в некоторых надо 1 вот пример
public OnPlayerText(playerid, text[])
{
if(User[playerid][Mute] > 0) { SendClientMessage(playerid,COLOR_GRAD,"У вас бан чата"); return 0; } //почему тут 0 а не 1
}
и вот другой
CMD:ooc(playerid, params[])// ООС чат
{
if(noooc[1] > 0 && GetPVarInt(playerid,"Admins") < 4) return SendClientMessage(playerid, COLOR_GRAD, "Ошибка: Подождите немного...");
if(noooc[0] == 0 && GetPVarInt(playerid,"Admins") < 4) return SendClientMessage(playerid, COLOR_GRAD,"Ошибка: Общий чат отключен");
else if((GetPVarInt(playerid,"Admins") < 1 || !GetPVarInt(playerid,"AdminLogin")) && noooc[0] > 0) { }
if(User[playerid][Mute] > 0) return SendClientMessage(playerid,COLOR_GRAD,"Ошибка: У вас бан чата"); //Почему тут уже 1
if(sscanf(params, "s[144]",params[0])) return SendClientMessage(playerid, -1,!"[INFO]: (/o)oc [текст]");
format(string,145, "<< %s[%i]: %s >>",User[playerid][Name], playerid, params[0]);
SendClientMessageToAll(0xE0FFFFFF,string);
if(GetPVarInt(playerid,"Admins") <= 0) noooc[1] = noooc[0];
return 1;
}

whale
17.07.2019, 16:39
1. В sscanf есть спецификатор 'u', который может принимать как NickName игрока, так и его ID.
Так что, при его использовании, будет вполне достаточно сравнивать с INVALID_PLAYER_ID.


CMD:kick(playerid, params[])
{
new
target,
reason[32 + 1];

if(sscanf(params, "us[32]", target, reason))
return SendClientMessage(playerid, -1, !"Используйте: /kick [ID игрока/часть NickName] [причина]");

if(target == INVALID_PLAYER_ID)
return SendClientMessage(playerid, -1, !"Ошибка: Указанный игрок не подключён к серверу.");

// etc...
return 1;
}

2. Если в OnPlayerText возвращаемое значение является истинной (true/1) - текст (сообщение) игрока будет отправлено в чат, если же возвращаемое значение является ложью (false/0) - сообщение не будет отправлено в чат. У тебя в коде проверяется наличие блокировки чата у игрока и, если у него есть блокировка чата - его об этом оповестит и его сообщение не будет отправлено в чат.
В случае же с командой особой роли это не играет (разве что, в Pawn.CMD есть определённые возвращаемые значения, если не изменяет память). Тут, возвратом функции (точнее, после выполнения функция вернёт 1) - обрывается последующий код команды.