Спасибо, что разъяснили всем присутствующим здесь принцип работы клиентских команд в SA:MP.
Вид для печати
плагин как то не любит работать с "strlen" (параметры) передаваемые кмд процессором.
так по мне было написано что принцип работы этого процессора схож с ZCMD, вот сним можно работать с strlen, а с dc_cmd никак.
Простой пример -
PHP код:
CMD:test(playerid,params[])
{
if(sscanf(params, "s[64]", params[0]))
return SendClientMessage(playerid, COLOR_WHITE, "/test [Text]");
if(strlen(params[0]) >= 64)
return SendClientMessage(playerid, COLOR_GREY,"TEST: sokratite text.");
static const
test_msg[] = " %s %s";
new
test_string[ sizeof(test_msg) - (2*2) + MAX_PLAYER_NAME + 64 ]
;
format(test_string,sizeof(test_string), test_msg, Player[playerid][pName], params[0]);
SetPlayerChatBubble(playerid,params[0],0xDD90FFFF,30.0,10000);
return true;
}
Начнём с того, что для чего ты обрабатываешь всего лишь 1 параметр через sscanf, если он в массиве params и так есть? Ты данные из строки в эту же строку и записываешь
И закончим тем, что так проверка естественно не будет срабатывать, ибо ты в самом sscanf указал размер строки в 64 символа и sscanf будет записывать в массив именно 64 символа, а остальной текст отбрасывать, выплёвывая в консоль предупреждение об этом.
Вот как твоя команда должна выглядеть
А вот как твой вариант будет работать, хоть это и неправильная реализацияPHP код:
CMD:test(playerid,params[])
{
if(isnull(params))
//if(!strlen(params))//Либо так, но первый вариант быстрее
return SendClientMessage(playerid, COLOR_WHITE, "/test [Text]");
if(strlen(params) >= 64)
return SendClientMessage(playerid, COLOR_GREY,"TEST: sokratite text.");
static const
test_msg[] = " %s %s";
new
test_string[ sizeof(test_msg) - (2*2) + MAX_PLAYER_NAME + 64 ]
;
format(test_string,sizeof(test_string), test_msg, Player[playerid][pName], params);
SetPlayerChatBubble(playerid,params,0xDD90FFFF,30.0,10000);
return true;
}
PHP код:
CMD:test(playerid,params[])
{
if(sscanf(params, "s[65]", params[0]))
return SendClientMessage(playerid, COLOR_WHITE, "/test [Text]");
if(strlen(params[0]) >= 64)
return SendClientMessage(playerid, COLOR_GREY,"TEST: sokratite text.");
static const
test_msg[] = " %s %s";
new
test_string[ sizeof(test_msg) - (2*2) + MAX_PLAYER_NAME + 64 ]
;
format(test_string,sizeof(test_string), test_msg, Player[playerid][pName], params[0]);
SetPlayerChatBubble(playerid,params[0],0xDD90FFFF,30.0,10000);
return true;
}
я привел простой пример с работой с sscanf, ну дело не в этом, спасибо.
Обновление (оптимизация/добавление новых фишек) будет?