PDA

Просмотр полной версии : [Урок] sscanf + OnPlayerCommandText



wAx
13.12.2013, 16:36
В последнее время появилось множество командных процессоров, и в этой суете, все почти забыли про стандартный. В современных модах (к ним не относятся, ни RLS ни Gf), команд как таковых минимум, и получается если использовать сторонний командный процессор в таком моде, то он не дает никаких плюсов (порой даже минусы)

Конкретнее?

Лишний код
Трудно разобраться с поддержкой кирилицы
Проблемы с вызовом команды из вне

Поэтому для удобства, хочу предложить вам может и не новый способ, но все же функциональный. Это использование sscanf плагина вместо strtok. Этот способ предложил мне XemyL, за что ему огромное спасибо

Достаточно подключить плагин и в OnPlayerCommandText вставить:

new cmd[32], params[128];
sscanf(cmdtext, "s[32]s[128]", cmd, params);

Вот пример команды:

if(strcmp(cmd,"/mycommand",true) == 0)
{
new param1,param2,param3[13];
if(sscanf(params,"dds[12]",param1,param2,param3)) return SendClientMessage(playerid, COLOR_WHITE,"> Ââåäèòå /test [num1] [num2] [text1]");
new string[50];
format(string,sizeof(string),"Переменная 1: %d",param1);
SendClientMessage(playerid, COLOR_YELLOW, string);
format(string,sizeof(string),"Переменная 2: %d",param2);
SendClientMessage(playerid, COLOR_YELLOW, string);
format(string,sizeof(string),"Переменная 3: %s",param3);
SendClientMessage(playerid, COLOR_YELLOW, string);
return 1;
}

Вот и весь урок, если похожие темы созданы, прошу прощения!

Pop
13.12.2013, 18:18
Пользуюсь данным способ уже несколько лет))) лучше всех :D и даже если плагин sscanf нельзя будет использовать, то он есть и без плагина)))

Unreal
14.12.2014, 22:19
new cmd[128]

Команда не может быть больше, ну максимум 16 символов.

Ну кароче говоря можно делать сразу

new cmd[16]

Mr.DeViLsS
29.12.2014, 12:36
так не проще?


new params[128];
sscanf(cmdtext, "s[32]s[128]", cmdtext, params);

MR_BEN
29.12.2014, 14:23
так не проще?


new params[128];
sscanf(cmdtext, "s[32]s[128]", cmdtext, params);

Чем?

Maranzalla
17.01.2015, 02:34
В последнее время появилось множество командных процессоров, и в этой суете, все почти забыли про стандартный. В современных модах (к ним не относятся, ни RLS ни Gf), команд как таковых минимум, и получается если использовать сторонний командный процессор в таком моде, то он не дает никаких плюсов (порой даже минусы)

Конкретнее?

Лишний код
Трудно разобраться с поддержкой кирилицы
Проблемы с вызовом команды из вне

Поэтому для удобства, хочу предложить вам может и не новый способ, но все же функциональный. Это использование sscanf плагина вместо strtok. Этот способ предложил мне XemyL, за что ему огромное спасибо

Достаточно подключить плагин и в OnPlayerCommandText вставить:

new cmd[128], params[128];
sscanf(cmdtext, "s[128]s[128]", cmd, params);

Вот пример команды:

if(strcmp(cmd,"/mycommand",true) == 0)
{
new param1,param2,param3[13];
if(sscanf(params,"dds[12]",param1,param2,param3)) return SendClientMessage(playerid, COLOR_WHITE,"> Ââåäèòå /test [num1] [num2] [text1]");
new string[50];
format(string,sizeof(string),"Переменная 1: %d",param1);
SendClientMessage(playerid, COLOR_YELLOW, string);
format(string,sizeof(string),"Переменная 2: %d",param2);
SendClientMessage(playerid, COLOR_YELLOW, string);
format(string,sizeof(string),"Переменная 3: %s",param3);
SendClientMessage(playerid, COLOR_YELLOW, string);
return 1;
}

Вот и весь урок, если похожие темы созданы, прошу прощения!

Попробуйте какой будет эффект если сделать вот так
new cmd[128], params[128];
sscanf(cmdtext, "s[128]s[128]", cmd, params);

wAx
25.01.2015, 11:10
Попробуйте какой будет эффект если сделать вот так
new cmd[128], params[128];
sscanf(cmdtext, "s[128]s[128]", cmd, params);

А есть смысл?

Mr.DeViLsS
28.01.2015, 07:52
А есть смысл?

не будет лишней переменной.