Для начала вам нужно вставить в свой скрипт необходимый для этой задачи команду-паблик,
который будет считывать переменные из команды, которую вводит игрок (если вы используете
инклуд , то вам не нужно вставлять этот паблик в ваш мод, т. к. он уже содержится в этом
инклуде):
Code
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= " ");)
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > " "); && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
Теперь займёмся самой командой. Найдите паблик OnPlayerCommandText. Для тренировки мы попытаемся
сделать простую команду, чтобы игрок мог убить игрока, ID которого он ввёл в команде. Для
начала каждую команду нужно назначить (в нашем случае пусть будет /killplayer):
Code
if (strcmp("/killplayer", cmdtext, true, 10) == 0)
Затем открываем новый поток, который будет содержать действия команды. Вводим новую переменную,
которая будет содержать переменную игрока; переменную, которая будет содержать номер
переменной игрока и переменную, которая будет содержать ID игрока, которого надо убить:
Code
new tmp[256];
new idx;
new killid;
Эту переменную можно будет постоянно переписывать для следующих переменных игрока. Так что
нет необходимости вводить новую переменную для каждой переменной игрока. В нашей команде будет
одна переменная - это ID игрока, которого нужно убить. Считываем её и записываем в переменную tmp:
Code
tmp = strtok(cmdtext, idx);
Нам затем не обойтись без проверки на существование переменной игрока. Пусть, если она не
существует, будет высвечиваться сообщение белого цвета о том, как нужно вводить команду:
Code
if(!strlen(tmp))
{
SendClientMessage(playerid, 0xFFFFFFAA, "USAGE: /killplayer [ID игрока]");
return 1;
}
Если же переменная будет существовать, то нам нужно ввести её в переменную:
Code
killid = strval(tmp);
Затем делаем проверку, есть ли игрок с данным ID на сервере:
Code
if (IsPlayerConnected(killid))
Теперь открываем новый поток и пишем действия команды (наконец =) ). В нашем случае нам нужно
отобрать все хелсы у игрока под ID, который содержится в переменной killid:
Code
SetPlayerHealth(killid, 0.0);
Закрываем поток, затем пишем else и открываем новый поток. В нём мы будем писать команды, которые
будут выполняться, если игрока с данным ID нет на сервере. Приведу свой вариант:
Code
new string[256];
format(string, sizeof(string), "*На сервере нет игрока с ID %d.", killid);
SendClientMessage(playerid, 0xFFFF00AA, string);
Закрываем поток проверки соединения игрока с данным ID. Затем ещё раз закрываем поток команды
в общем.
Вот и всё. Только что вы научились создавать команды, в которых игрок может вводить свои
переменные.
Урок by RussianCJ