Dymov1203
Умник
Итак, все мы знаем о командах с индексом, или о командах через пробел.Но дело даже не в команде, а в её построении.
Подробнее о dcmd:
Подробнее о 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;
}
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;
}
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;
}
PHP:
dcmd_heal(playerid,params[])//Это сама команда
{
#pragma unused params //Это строка говорит о том, что не используется пробел после команды
SetPlayerHealth(playerid,100);
SetPlayerArmor(playerid,100);
return 1;}
Автор: Dymov1203
