PDA

Просмотр полной версии : [Вопрос] public OnPlayerCommandText



vovandolg
13.12.2015, 17:49
Передвигался по гуглу так и не нашёл в чём разница написанных команд в этом паблике
Вот к примеру несколько команд:



if(!strcmp(cmd, "/lbed", true))
{
if(PlayerInfo[playerid][pDonateRank] > 0)
{
ApplyAnimation(playerid, "INT_HOUSE", "BED_In_L", 4.1,0,1,1,1,1,1);
return 1;
}
else return SendClientMessage(playerid,COLOR_GRAD1,"Ó Âàñ íåò ñòàòóñà {FACA8D}ViP Bronse");
}



if(strcmp(cmd, "/shield", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(IsACop(playerid) || IsAArm(playerid) || IsACru(playerid))
{
if(shield[playerid] == 0)
{
SetPlayerAttachedObject(playerid, 1, 18637, 14, 0.0, 0.0, 0.0, 0.0, 180.0, 180.0);
SetPlayerHealth(playerid, 160);
shield[playerid] = 1;
}
else
{
RemovePlayerAttachedObject(playerid, 1);
SetPlayerHealth(playerid, 60);
shield[playerid] = 0;
}
}
else return SendClientMessage(playerid, COLOR_GREY, "Вы не Полицейский/Военный/ФБР");
return 1;
}
}



else if(strcmp(cmd, "/donate", true) == 0){Donateblea342(playerid);}


Так вот я как то не брал в голову в чём разница в написанном начале у этих команд..

else if(strcmp(cmd, "", true) == 0)
if(strcmp(cmd, "", true) == 0)
if(!strcmp(cmd, "", true))
if(!strcmp(cmdtext, "", true))
В чём суть разнообразно написанного начало у этих команд?
Может совет кто даст как лучше или как хуже.

VVWVV
13.12.2015, 17:59
1. Результат выполнения кода одинаковый.
2. Условие с нулём не вызывает «not», что и делает выполнение скрипта более производительнее.

vovandolg
13.12.2015, 18:06
То есть не чего страшного что чередование разное в этом паблике?
Такое типо:
if(
if(
else if(
else if(
чуть ниже ещё может быть if(

Я просто привык что пишу по полочками
if(
else if(
else if(
else if(
Типо такого...

VVWVV
13.12.2015, 18:19
То есть не чего страшного что чередование разное в этом паблике?
Такое типо:
if(
if(
else if(
else if(
чуть ниже ещё может быть if(

Я просто привык что пишу по полочками
if(
else if(
else if(
else if(
Типо такого...

Есть небольшие отличия, но пиши как хочешь, главная знай, что код все равно идёт по меткам.


/* Some Asm Commands */
jzer 0 ; Переход на метку
/* Other ASM Commands */

1.0 ; Метка
/* Some Asm Commands */
jnz 1 ; Переход на метку
/* Other ASM Commands */

1.1 ; Метка
/* Some Asm Commands */
jsgrtr 2 ; Переход на метку
/* Other ASM Commands */

/* ... */

vovandolg
13.12.2015, 18:48
Есть такой момент у меня, думаю что это мусор...

public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[144];

Вот 2 переменные типо или как то так
Далее идут 2 команды к примеру:

if(strcmp(cmdtext, "/neon", true) == 0)
if(strcmp(cmd,"/jailal", true) == 0)

Вот гляжу и думаю.. Зачем объявлять подобную команду new cmd[144]; если есть встроенная в паблике cmdtext[]
Я просто мог в самом начале изучения крепить с разных FS вот и не знаю нужна ли она new cmd[144];

Daniel_Cortez
13.12.2015, 19:00
Можно писать команды только с помощью "if" вместо "else if", главное не забывать в конце каждой команды ставить return 1, чтобы сервер после выполнения не стал ещё кучу раз вызывать strcmp из других команд.
А можно вообще забыть об if, else if, обработке параметров команд и прочих технических аспектах, предоставив всю работу специально созданным для этого командным процессорам типа DC_CMD или ZCMD.

(Бесстыжая реклама командных процессоров: ON.)


UPD:

Есть такой момент у меня, думаю что это мусор...

public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[144];

Вот 2 переменные типо или как то так
Далее идут 2 команды к примеру:

if(strcmp(cmdtext, "/neon", true) == 0)
if(strcmp(cmd,"/jailal", true) == 0)

Вот гляжу и думаю.. Зачем объявлять подобную команду new cmd[144]; если есть встроенная в паблике cmdtext[]
Я просто мог в самом начале изучения крепить с разных FS вот и не знаю нужна ли она new cmd[144];
В cmdtext передаётся название команды вместе с параметрами.
В то же время cmd - это вручную объявленный массив, в который записывают только название команды после его отделения от параметров.
Можете попробовать записывать название команды в cmdtext, а массив cmd убрать. Главное, чтобы не потерялись параметры команд.

vovandolg
13.12.2015, 19:24
чтобы сервер после выполнения не стал ещё кучу раз вызывать strcmp из других команд.
Какие последствие могут быть если не стоят возвраты в некоторых командах?
Что будет на сервере твориться плохого если юзать те самые команды без возврата?

VVWVV
13.12.2015, 20:47
Какие последствие могут быть если не стоят возвраты в некоторых командах?
Что будет на сервере твориться плохого если юзать те самые команды без возврата?

Если вы будете использовать только «if», то без оператора возврата, функция может продолжится (будут проверятся последующие «if»), однако если вы будете использовать конструкцию «if-else if», то без оператора возврата, функция продолжится только после всей конструкции.

http://ihost.pro-pawn.ru/image.php?di=8TY7

Daniel_Cortez
13.12.2015, 21:10
Какие последствие могут быть если не стоят возвраты в некоторых командах?
Что будет на сервере твориться плохого если юзать те самые команды без возврата?
Я ж уже написал вам выше, что если внутри ветвления if с командой не сделать возврат, сервер продолжит выполнять код после ветвления. За ним будут другие команды, а в них проверки с использованием strcmp - и все их сервер выполнит, дойдя до самого конца OnPlayerCommandText.

Если вы всё равно не видите разницы, сбегайте в магазин за хлебом. А когда вернётесь, сбегате ещё раз, там вспомните, что вы уже купили хлеб, и вернитесь домой ни с чем. И так ещё раз, и ещё раз, и ещё 154 раза.