PDA

Просмотр полной версии : [Вопрос] Команда с необязательным параметром



Giffka
15.08.2014, 13:31
1) Подскажите пожалуйста, как сделать параметр "Причина" необязательным?


CMD:kick(playerid, params[]){
new string[164];
if(PlayerInfo[playerid][pAdmin] < 2) return 1;
if(sscanf(params, "u", params[0])) return SendClientMessage(playerid, gray, "Используй /kick [id игрока] [причина]");
if(GetPVarInt(params[0], "LOGGED") == 0) return SendClientMessage(playerid, CGRAY, "Такого игрока нет");
f(string, "Администратор %s кикнул игрока %s. Причина: %s", GN(playerid), GN(params[0]), params[1]);
SendClientMessageToAll(COLOR_LIGHTRED, string);
Kick(params[0]);
return 1;
}


2)
Что тут не так?


if(!response) return 1;
new string[90], mutetime, mutereason[75];
if(sscanf(inputtext, "p<>ds[75]", mutetime, mutereason)) return ShowPlayerDialog(playerid,41,DIALOG_STYLE_INPUT,"Быстрая затычка","Введите через пробел [время в минутах] [причину]","Готово","Отмена");
format(string,sizeof(string),"/mute %d %d %s",PlayerSpectateID[playerid],mutetime,mutereason);
JCMD(string);



[13:39:13] sscanf warning: Unknown format specifier '(', skipping.
[13:39:13] sscanf warning: Unknown format specifier '-', skipping.
[13:39:13] sscanf warning: Unknown format specifier '1', skipping.
[13:39:13] sscanf warning: Unknown format specifier ')', skipping.
[13:39:13] sscanf warning: Unknown format specifier '(', skipping.
[13:39:13] sscanf warning: Unknown format specifier '-', skipping.
[13:39:13] sscanf warning: Unknown format specifier '1', skipping.
[13:39:13] sscanf warning: Unknown format specifier ')', skipping.

L0ndl3m
15.08.2014, 17:47
1.


new
targetid,
reason[28];

sscanf(params, "I(-1)s[28]", targetid, reason);

if(targetid == -1)
return SendClientMessage(playerid, -1, "Используйте: /kick [targetid] {reason}"); // В фигурных скобках - необязательный параметр

if(isnull(reason))
// Причина кика не введена
else
// Причина кика введена

Вместо params[0] используете targetid.

2.
В данном случае разделитель не нужен, sscanf по умолчанию разделяет слова до пробела.

if(sscanf(inputtext, "p<>ds[75]", mutetime, mutereason))
замените на

if(sscanf(inputtext, "is[75]", mutetime, mutereason))

Giffka
15.08.2014, 21:46
1.


new
targetid,
reason[28];

sscanf(params, "I(-1)s[28]", targetid, reason);

if(targetid == -1)
return SendClientMessage(playerid, -1, "Используйте: /kick [targetid] {reason}"); // В фигурных скобках - необязательный параметр

if(isnull(reason))
// Причина кика не введена
else
// Причина кика введена

Вместо params[0] используете targetid.

2.
В данном случае разделитель не нужен, sscanf по умолчанию разделяет слова до пробела.

if(sscanf(inputtext, "p<>ds[75]", mutetime, mutereason))
замените на

if(sscanf(inputtext, "is[75]", mutetime, mutereason))
Эти ошибки всё равно остались при использовании затычки.

[13:39:13] sscanf warning: Unknown format specifier '(', skipping.
[13:39:13] sscanf warning: Unknown format specifier '-', skipping.
[13:39:13] sscanf warning: Unknown format specifier '1', skipping.
[13:39:13] sscanf warning: Unknown format specifier ')', skipping.
[13:39:13] sscanf warning: Unknown format specifier '(', skipping.
[13:39:13] sscanf warning: Unknown format specifier '-', skipping.
[13:39:13] sscanf warning: Unknown format specifier '1', skipping.
[13:39:13] sscanf warning: Unknown format specifier ')', skipping.

L0ndl3m
15.08.2014, 21:55
Пробовали обновлять sscanf до последней версии?

Giffka
16.08.2014, 13:44
Пробовали обновлять sscanf до последней версии?

Обновил. Ошибки пропали. Спасибо)

Salvacore
16.08.2014, 13:50
Closed.