Доступ к архиву

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

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

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

Использование dcmd

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

Dymov1203

Умник
Итак, все мы знаем о командах с индексом, или о командах через пробел.Но дело даже не в команде, а в её построении.
Подробнее о dcmd:
​

DCMD - командный процессор, с помощью которого можно более просто (обходя strtok)
создавать команды с параметрами после пробела. Функция создается с помощью константы:

PHP:
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') &&
(dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1 
В начале функции OnPlayerCommandText объявляем новую команду. Дать игроку оружие:
PHP код:
public OnPlayerCommandText(playerid,cmdtext[])
{
dcmd(weapon,6,cmdtext);//Цифра 6 обозначает сколько символов в команде.
return 1;
}
Этим мы обозначили, что weapon, связан с командой. Теперь создаем новую функцию. В любом месте после OnPlayerCommandText:

PHP:
dcmd_weapon(playerid,params[])//Создана команда weapon
{
new weap;//создана переменная
weap = strval(params[0]);//к weap присваивается числовое значение params[0]
if(IsPlayerConnected(playerid))//Проверка, подключён ли игрок к серверу
{
if(IsPlayerAdmin(playerid))//Проверка, является ли игрок, rcon-админом
{
GivePlayerWeapon(playerid,weap,9999999);даем игроку оружие
}
}
return 1;
}
К тому же, у dcmd больше плюсов чем у стртока. Во первых не надо писать это:

PHP:
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;
}
Во-вторых не нужно никаких

PHP:
if(!strlen(tmp)) и tmp = strtok(cmdtext, idx); и if(!strval(tmp)) 
Да и работает dcmd быстрее
Теперь, разберем как делать команды для администратора с тремя переменными. Например /giveweapon id weapon kol-vo
Начинаем так же:
PHP код:
dcmd_giveweapon(playerid,params[])//Это сама команда
{
new pleer,weap,kolvo;
pleer = strval(params[0]); //К переменной игрока которому мы даем оружие, мы даем параметр 0
weap = strval(params[1]); //К переменной оружия, мы даем параметр 1
kolvo = strval(params[2]); //К переменной патронов, мы даем параметр 2
if(IsPlayerConnected(pleer)) //Проверяем, подключен ли игрок к серверу
{
if(Player[playerid][pAdmin] >= 2)//Проверяем Админку
{
GivePlayerWeapon(pleer,weap,kolvo);//Выполняем действие
}else{
SendClientMessage(playerid,COLOR_RED,"Вы не администратор!");}//Сообщение если игрок не администратор
return 1;
}else{
SendClientMessage(playerid,COLOR_RED,"Игрока нет на сервере");}//Сообщение если игрок не подключен
return 1;
}
И напоследок, как делать команды без параметра. Например, после набора команды, тебе дается 100 здоровья и брони:

PHP:
dcmd_heal(playerid,params[])//Это сама команда
{
#pragma unused params //Это строка говорит о том, что не используется пробел после команды
SetPlayerHealth(playerid,100);
SetPlayerArmor(playerid,100);
return 1;}
На этом урок окончен. Надеюсь, вам он будет полезен.
Автор: Dymov1203​
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу