Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Урок Использование DC_CMD

Статус
В этой теме нельзя размещать новые ответы.

Stefa

Новичок
Здравствуйте, пользователи форума pawno-info.ru
Я знаю, что у новичков в 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;
}
[/CODE]

и

Код:
tmp = strtok(cmdtext, idx);
Но как и всё гениальное - есть решение проще.
Сегодня я научу вас использовать DC_CMD.
Преимущества этого способа построения сложных команд в том, что всё работает очень быстро(за счёт обработки информации в плагине) и легко строится (за счёт параметров params[])
Но для работы с этой замечательной системой нам понадобится инклуд и плагин sscanf2.
Ну что, пора начать сам урок? :)



Файлы с разрешением .dll бросаем в папку plugins, в файле server.cfg вписываем следующее:
Код:
plugins sscanf2 DC_CMD
Затем файлы .inc кидаем в папку pawno > include

Вверх мода, где у вас инклуды вписываем:
Код:
#include <sscanf2>
#include <DC_CMD>
Теперь создадим первую команду, для начала без индекса. Вниз мода, после всех public
HTML:
CMD:test(playerid, params[])
{
        return SendClientMessage(playerid,-1,"Удивительно, но работает!");
}
Как вы могли заметить, строкой
Код:
CMD:test(playerid, params[])
мы объявили создание команды /test, при введение которой нам выдаст сообщение "Удивительно, но работает!"

При желании эту команду можно написать так:
Код:
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
}
Интерес составляет вот эта строка. "dd" обозначает, что мы используем две переменные цифрового типа, params[0] и params[1] соответственно.

Код:
if(sscanf(params,"dd", params[0],params[1]))
Теперь, сделаем что-то более полезное. Команду /makeadmin, о которой я говорил в начале, например.
Код:
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
Сток GetTheName
Код:
stock GetTheName(playerid){  // объявляем сток
new pName[MAX_PLAYER_NAME]; // Создаём новую переменную на имя
GetPlayerName(playerid, pName, sizeof pName); // берём имя, пишем в переменную 
return pName;} // возвращаем переменную с именем
Ссылка на include:
Ссылка на плагин:

На этом всё. :)
Автор данного урока: S1unt
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу