Использование strtok RU
From SA-MP Wiki
Использование strtok
Урок по использованию strtok
strtok это функция, используемая чтобы определить пробел между командой и параметром. Вам кажется сложным отличать параметры от команды? Этот урок должен вам помочь.
public OnPlayerCommandText(playerid, cmdtext[]) { new tmp[255], string[255], cmd[255], idx, giveplayerid, sendername, giveplayer; cmd = strtok(cmdtext, idx); GetPlayerName(playerid, sendername, sizeof(sendername)); if(strcmp(cmd, "/akill", true) == 0) { if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0x919191FF, "Вы должны быть администратором чтобы использовать эту команду."); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, 0x919191FF, "Использование: \"/akill [ID]\""); giveplayerid = strval(tmp); GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); if(!IsPlayerConnected(giveplayerid))SendClientMessage(playerid, 0x919191FF, "Игрок с данным ID не подключён."); SetPlayerHealth(giveplayerid, 0); format(string, sizeof(string), "Админ %s[%i] убил вас!", sendername, playerid); SendClientMessage(giveplayerid, 0xE21D2CFF, string); format(string, sizeof(string), "Вы убили %s[%i]!", giveplayer, giveplayerid); SendClientMessage(playerid, 0xE21D2CFF, string); return 1; } }
Объяснение
giveplayerid = strval(tmp);
Присвоение переменной 'giveplayerid', числовое значение 'tmp'.
if(!strlen(tmp)) return SendClientMessage(...);
Если 'giveplayerid' не был указан (То есть было написано /akill вместо /akill ID)
GetPlayerName(playerid, sendername, sizeof(sendername)); GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
Чтобы вывести правильное сообщение (т.е.: "Nickname1(ID:4) убил Nickname2(ID:2)") мы должны извлечь два никнейма в 2 переменные. P.S.: Извлекайте никнейм у 'giveplayerid' ПОСЛЕ того как вы связали его с 'tmp'.
Все равно не очень понятно? Просмотрите это:
if(strcmp(cmd, "/ban", true) == 0) { if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0x919191FF, "Вы не админ."); // проверка на админку tmp = strtok(cmdtext, idx); // Мы объявляем что мы используем strtok для переменной 'tmp' if(!strlen(tmp)) return SendClientMessage(playerid, 0x919191FF, "Использование: /ban [id]"); // Если ID не был указан giveplayerid = strval(tmp); // Связываем с переменной 'giveplayerid' if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid, 0x919191FF, "Игрок с данным ID не подключен."); // если 'giveplayerid' не онлайн Ban(giveplayerid); return 1; }
Объяснение
if(!IsPlayerAdmin(playerid))
Если игрок не RCON админ, вывод сообщения, и остановка процесса
tmp = strtok(cmdtext, idx);
Связываем strtok с 'tmp'
if(!strlen(tmp))
Если параметр не был задан, вывод сообщения, и остановка процесса
giveplayerid = strval(tmp);
Связываем 'giveplayerid' с числовым значением tmp
if(!IsPlayerConnected(giveplayerid))
Если 'giveplayerid' не подключён, вывод сообщения, и остановка процесса
Ban(giveplayerid);
Конечный результат команды, каждому понятен.
Переводил на русский язык MazaHACKa