Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 9 из 9
  1. #1
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±

    public OnPlayerCommandText

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

    PHP код:
    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");

    PHP код:
            if(strcmp(cmd"/shield"true) == 0)
        {
            if(
    IsPlayerConnected(playerid))
            {
                if(
    IsACop(playerid) || IsAArm(playerid) || IsACru(playerid))
                {
                    if(
    shield[playerid] == 0)
                    {
                        
    SetPlayerAttachedObject(playerid118637140.00.00.00.0180.0180.0);
                        
    SetPlayerHealth(playerid160);
                        
    shield[playerid] = 1;
                    }
                    else
                    {
                        
    RemovePlayerAttachedObject(playerid1);
                        
    SetPlayerHealth(playerid60);
                        
    shield[playerid] = 0;
                    }
                }
                else return 
    SendClientMessage(playeridCOLOR_GREY"Вы не Полицейский/Военный/ФБР");
                return 
    1;
            }
        } 
    PHP код:
    else if(strcmp(cmd"/donate"true) == 0){Donateblea342(playerid);} 

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

  2. #2
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    1. Результат выполнения кода одинаковый.
    2. Условие с нулём не вызывает «not», что и делает выполнение скрипта более производительнее.

  3. 2 пользователя(ей) сказали cпасибо:
    Desulaid (13.12.2015) vovandolg (13.12.2015)
  4. #3
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    То есть не чего страшного что чередование разное в этом паблике?
    Такое типо:
    if(
    if(
    else if(
    else if(
    чуть ниже ещё может быть if(

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

  5. #4
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    То есть не чего страшного что чередование разное в этом паблике?
    Такое типо:
    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 */
    
    /* ... */
    Последний раз редактировалось VVWVV; 13.12.2015 в 18:25.

  6. Пользователь сказал cпасибо:
    vovandolg (13.12.2015)
  7. #5
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Есть такой момент у меня, думаю что это мусор...

    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];
    Последний раз редактировалось vovandolg; 13.12.2015 в 18:51.

  8. #6
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Можно писать команды только с помощью "if" вместо "else if", главное не забывать в конце каждой команды ставить return 1, чтобы сервер после выполнения не стал ещё кучу раз вызывать strcmp из других команд.
    А можно вообще забыть об if, else if, обработке параметров команд и прочих технических аспектах, предоставив всю работу специально созданным для этого командным процессорам типа DC_CMD или ZCMD.

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


    UPD:
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Есть такой момент у меня, думаю что это мусор...

    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 убрать. Главное, чтобы не потерялись параметры команд.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  9. Пользователь сказал cпасибо:
    vovandolg (13.12.2015)
  10. #7
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    чтобы сервер после выполнения не стал ещё кучу раз вызывать strcmp из других команд.
    Какие последствие могут быть если не стоят возвраты в некоторых командах?
    Что будет на сервере твориться плохого если юзать те самые команды без возврата?

  11. #8
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Какие последствие могут быть если не стоят возвраты в некоторых командах?
    Что будет на сервере твориться плохого если юзать те самые команды без возврата?
    Если вы будете использовать только «if», то без оператора возврата, функция может продолжится (будут проверятся последующие «if»), однако если вы будете использовать конструкцию «if-else if», то без оператора возврата, функция продолжится только после всей конструкции.


  12. 2 пользователя(ей) сказали cпасибо:
    L0ndl3m (13.12.2015) vovandolg (13.12.2015)
  13. #9
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Какие последствие могут быть если не стоят возвраты в некоторых командах?
    Что будет на сервере твориться плохого если юзать те самые команды без возврата?
    Я ж уже написал вам выше, что если внутри ветвления if с командой не сделать возврат, сервер продолжит выполнять код после ветвления. За ним будут другие команды, а в них проверки с использованием strcmp - и все их сервер выполнит, дойдя до самого конца OnPlayerCommandText.

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

  14. 3 пользователя(ей) сказали cпасибо:
    L0ndl3m (13.12.2015) vovandolg (13.12.2015) VVWVV (13.12.2015)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •