Stefa
Новичок
Здравствуйте, пользователи форума pawno-info.ru
Я знаю, что у новичков в pawn трудности вызывают команды с индексом, типа:
И многие пугаются этих команд, потому что свято верят в необходимость использования подобных непонятных конструкций:
[/CODE]
и
Но как и всё гениальное - есть решение проще.
Сегодня я научу вас использовать DC_CMD.
Преимущества этого способа построения сложных команд в том, что всё работает очень быстро(за счёт обработки информации в плагине) и легко строится (за счёт параметров params[])
Но для работы с этой замечательной системой нам понадобится инклуд и плагин sscanf2.
Ну что, пора начать сам урок?
Файлы с разрешением .dll бросаем в папку plugins, в файле server.cfg вписываем следующее:
Затем файлы .inc кидаем в папку pawno > include
Вверх мода, где у вас инклуды вписываем:
Теперь создадим первую команду, для начала без индекса. Вниз мода, после всех public
Как вы могли заметить, строкой
мы объявили создание команды /test, при введение которой нам выдаст сообщение "Удивительно, но работает!"
При желании эту команду можно написать так:
Следующим шагом будет создание команды с несколькими переменными.
Интерес составляет вот эта строка. "dd" обозначает, что мы используем две переменные цифрового типа, params[0] и params[1] соответственно.
Теперь, сделаем что-то более полезное. Команду /makeadmin, о которой я говорил в начале, например.
Сток GetTheName
Ссылка на include:
Ссылка на плагин:
На этом всё.
Автор данного урока: S1unt
Я знаю, что у новичков в pawn трудности вызывают команды с индексом, типа:
Код:
/makeadmin [id] [lvl]
Код:
[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;
}
и
Код:
tmp = strtok(cmdtext, idx);
Сегодня я научу вас использовать DC_CMD.
Преимущества этого способа построения сложных команд в том, что всё работает очень быстро(за счёт обработки информации в плагине) и легко строится (за счёт параметров params[])
Но для работы с этой замечательной системой нам понадобится инклуд и плагин sscanf2.
Ну что, пора начать сам урок?
Файлы с разрешением .dll бросаем в папку plugins, в файле server.cfg вписываем следующее:
Код:
plugins sscanf2 DC_CMD
Вверх мода, где у вас инклуды вписываем:
Код:
#include <sscanf2>
#include <DC_CMD>
HTML:
CMD:test(playerid, params[])
{
return SendClientMessage(playerid,-1,"Удивительно, но работает!");
}
Код:
CMD:test(playerid, params[])
При желании эту команду можно написать так:
Код:
CMD:test(playerid, params[]) return SendClientMessage(playerid,-1,"Удивительно, но работает!");
Код:
CMD:setscore(playerid, params[]) // команда для изменения счёта игрока
{
if(sscanf(params,"dd", params[0],params[1])) return SendClientMessage(playerid, -1, "Используй: /setscore [id] [score]"); // если не введен индекс
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid,-1,"Игрок не подключён!"); // если игрок не подключён
SetPlayerScore(params[0],params[1]);// ставим счёт
return 1; // возвращаем 1
}
Код:
if(sscanf(params,"dd", params[0],params[1]))
Код:
CMD:makeadmin(playerid,params[]) // объявляем команду
{
if(PV[playerid][aAdmin] < 7) return SendClientMessage(playerid,-1,"[Ошибка] Необходимы права администратора 7 уровня"); // если игрок ввёл команду, но он не админ объясняем ему, что он не прав
if(sscanf(params,"dd",params[0],params[1])) return SendClientMessage(playerid, -1, "Используй: /madmin [id] [level]"); // если не введен индекс выводим информацию
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid,-1,"[Ошибка]Игрок не подключён к серверу"); // если не подключён
new string[128]; // создаём текстовую переменную
PV[params[0]][aAdmin] = params[1]; // присваиваем игроку params[0] значение aAdmin равное params[1]
format(string,sizeof(string),"\n\n\t\n{FFFFFF}Администратор {CCCC33}%s[%d] {FFFFFF}выдал вам права на управление {CCCC33}%d {FFFFFF}уровня\n\n\n",GetTheName(playerid),playerid,params[1]); /* записываем в переменную сообщение о поздравлялке*/
ShowPlayerDialog(params[0],0,0,"{FF0000}Внимание", string ,"Принять",""); // показываем диалог с поздравлялкой
return 1;
}
ALT:makeadmin:madmin; // создание альтернативной команды(ALT:команда1:команда2;) позволяет юзать и /makeadmin и /madmin
Код:
stock GetTheName(playerid){ // объявляем сток
new pName[MAX_PLAYER_NAME]; // Создаём новую переменную на имя
GetPlayerName(playerid, pName, sizeof pName); // берём имя, пишем в переменную
return pName;} // возвращаем переменную с именем
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Ссылка на плагин:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
На этом всё.
Автор данного урока: S1unt
Последнее редактирование:
