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

    Статус
    Оффлайн
    Регистрация
    19.05.2017
    Сообщений
    103
    Репутация:
    1 ±

    Новый вопрос с диалогами (Оптимизация есть?)

    PHP код:
    switch(dialogid
        {
            case 
    2999:
            {
                if(
    response)
                {
                    
    guns(playerid);
                }
                else
                {
                    
    scm(playerid, -1"Вы закрыли меню покупки");
                    
    SetCameraBehindPlayer(playerid);
                }
            }
            case 
    2998:
            {
                if(
    response){}
                else{
    SetCameraBehindPlayer(playerid);}
            }
        } 
    (на счет ковычек это php так делает. У меня все лесенкой.)

    Вопрос: это оптимизированный код?
    по команде вызывается диалог 2999, после нажатия 1 кнопки вызывается диалог 2998 (2998 помещен в сток)
    Дальше следует case 2998 там все правильно? или можно как-то по другому сделать?

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Нет, особо нечего оптимизировать.

    Ну разве что вот эту конструкцию
    PHP код:
    if(response){} 
    else{
    SetCameraBehindPlayer(playerid);} 
    можно записать вот так
    PHP код:
    if(!response)
        
    SetCameraBehindPlayer(playerid); 
    И "return" проставил в нужных местах (чисто для того, чтоб визуально понимать, что на моменте с return обработка кода прерывается)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    phpadmin (06.07.2017)
  4. #3
    Аватар для phpadmin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.05.2017
    Сообщений
    103
    Репутация:
    1 ±
    там итак все ясно лично мне
    Визуально я итак пойму, я вообще return нигде не указываю все работает норм и мозг понимает что и где как надо
    Последний раз редактировалось DeimoS; 06.07.2017 в 15:15.

  5. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    > спрашивает как оптимизировать код
    > получает ответ
    > говорит, что ему и так норм


    Там дело не в читаемости, а в лишних инструкциях, что генерируются при пустом условии. То же самое и с return: в ситуациях, по типу
    PHP код:
    new test 3;
    if(
    test == 1)
    {
       print(
    "1");
    }
    if(
    test == 3)
    {
       print(
    "3");
    }
    if(
    test == 2)
    {
       print(
    "2");
    }
    if(
    test == 4)
    {
       print(
    "4");
    }
    if(
    test == 5)
    {
       print(
    "5");

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

    Если ты делаешь так, как нравится тебе, то и не нужно спрашивать о том, как делать правильно.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  6. #5
    Аватар для phpadmin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.05.2017
    Сообщений
    103
    Репутация:
    1 ±
    Это можно через else if сделать последовательно

    - - - Updated - - -

    PHP код:
    else if(IsPlayerInRangeOfPoint(playerid,2.0,-958.7089,1925.8114,9.0000) && (hacksystem == 1))
                    {
                           
    scm(playerid,-1,"{A8A8A8}[Hackerman]: Канал данных забит трафиком, подождите пока ДДОС атака деактивируется!");
                    }
                    else if(
    IsPlayerInRangeOfPoint(playerid,2.0,-958.7089,1925.8114,9.0000) && (hacksystem == 2))
                    {
                        
    scm(playerid,-1,"{A8A8A8}[Hackerman]: Питание сервера был отключен на некоторое время из-за попытки взлома!");
                    }
                    else if(
    IsPlayerInRangeOfPoint(playerid,2.0,-958.7089,1925.8114,9.0000) && (hacksystem == 3))
                    {
                        
    scm(playerid,-1,"{A8A8A8}[Hackerman]: Главный сервер был взорван с целью защиты данных от злоумышлеников!");
                        
    scm(playerid,-1,"{A8A8A8}[Hackerman]: На данный момент идет востановление главного сервера дата-центра!");
                    }
                    else if(
    IsPlayerInRangeOfPoint(playerid,2.0,-958.7089,1925.8114,9.0000) && (hacksystem == 4))
                    {
                        
    scm(playerid,-1,"{A8A8A8}[Hackerman]: Главный сервер был взломан. В связи с этим был изъят жесткий диск с данными!");
                        
    scm(playerid,-1,"{A8A8A8}[Hackerman]: Главный сервер будет доступен через некоторое время после переустановки системы!");
                    } 
    - - - Updated - - -

    в принципе частично ты прав

  7. #6
    Аватар для Salik_Davince
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.02.2014
    Сообщений
    93
    Репутация:
    1 ±
    Ты явно не понял о чем он говорит, он говорит что ты (ХакерМан) не обрываешь выполнение кода, т.e (пример) тебе нужно узнать какая скорость Авто идет 1й но в твоем коде очень много проверок и так твой код выполняется и ты все таки нашёл эту 1-ю скорость Авто при проверке (if | case) вроде бы твоя задача решена но твой код дальше не останавливается и начинает проверять другие проверки т.e лишняя трата времени впустую и нагрузка. Тот же твой код можно упростить switch'ом и не нужно вызывать каждый раз функцию IsPlayerInRangeOfPoint (лишняя трата) т.e [пример] -
    PHP код:
    if(IsPlayerInRangeOfPoint(playerid,2.0,-958.7089,1925.8114,9.0000))
    {
        switch(
    hacksystem)
        {
            case 
    1scm(playerid,-1,"{A8A8A8}[Hackerman]: 1 действие");
            case 
    2scm(playerid,-1,"{A8A8A8}[Hackerman]: 2 действие");
            case 
    3: {
                
    scm(playerid,-1,"{A8A8A8}[Hackerman]: 3 действие");
                  
    scm(playerid,-1,"{A8A8A8}[Hackerman]: 3 действие");
            }
            case 
    4: {
                 
    scm(playerid,-1,"{A8A8A8}[Hackerman]: 4 действие");
                
    scm(playerid,-1,"{A8A8A8}[Hackerman]: 4 действие");
            }
        }
        return 
    true;//функция успешно выполнена наша работа окончена

    Последний раз редактировалось Salik_Davince; 06.07.2017 в 20:11.

  8. #7
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от phpadmin Посмотреть сообщение
    Это можно через else if сделать последовательно
    1) Теряется читаемость (не ясно с первого взгляда, будет ли ещё какой-либо код после твоих if/else if или нет).
    2) Нет возможности добавить этот самый код после if/else if, ибо он начнёт срабатывать не для конкретных условий, а для всех.
    К чему вообще эта дурацкая упёртость? Естественно можно и ветку отпилить при помощи острого камня при должном упорстве, но для чего это делать, если для этого придумали пилу? Не проще делать так, как следует, а не изобретать велосипеды, усложняя себе жизнь?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #8
    Аватар для phpadmin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.05.2017
    Сообщений
    103
    Репутация:
    1 ±
    можно было и так? не*я спс :D ща чекну. Ну так то по делу, мне тогда придеться в каждом законченной системе ставить return true мол действие обрывается на этом моменте и дальше работать коду не обьязательно?

    - - - Updated - - -

    Цитата Сообщение от Salik_Davince Посмотреть сообщение
    Ты явно не понял о чем он говорит, он говорит что ты (ХакерМан) не обрываешь выполнение кода, т.e (пример) тебе нужно узнать какая скорость Авто идет 1й но в твоем коде очень много проверок и так твой код выполняется и ты все таки нашёл эту 1-ю скорость Авто при проверке (if | case) вроде бы твоя задача решена но твой код дальше не останавливается и начинает проверять другие проверки т.e лишняя трата времени впустую и нагрузка. Тот же твой код можно упростить switch'ом и не нужно вызывать каждый раз функцию IsPlayerInRangeOfPoint (лишняя трата) т.e [пример] -
    PHP код:
    if(IsPlayerInRangeOfPoint(playerid,2.0,-958.7089,1925.8114,9.0000))
    {
        switch(
    hacksystem)
        {
            case 
    1scm(playerid,-1,"{A8A8A8}[Hackerman]: 1 действие");
            case 
    2scm(playerid,-1,"{A8A8A8}[Hackerman]: 2 действие");
            case 
    3: {
                
    scm(playerid,-1,"{A8A8A8}[Hackerman]: 3 действие");
                  
    scm(playerid,-1,"{A8A8A8}[Hackerman]: 3 действие");
            }
            case 
    4: {
                 
    scm(playerid,-1,"{A8A8A8}[Hackerman]: 4 действие");
                
    scm(playerid,-1,"{A8A8A8}[Hackerman]: 4 действие");
            }
        }
        return 
    true;//функция успешно выполнена наша работа окончена

    PHP код:
    switch(dialogid
        {
            case 
    2999:
            {
                if(
    response)
                {
                    
    guns(playerid);
                    return 
    true;
                }
                else
                {
                    
    scm(playerid, -1"Вы закрыли меню покупки");
                    
    SetCameraBehindPlayer(playerid);
                    return 
    true;
                }
            }
            case 
    2998:
            {
                if(!
    response)
                    
    Savebalance() && SetCameraBehindPlayer(playerid);
            }
        } 
    Это правильная конструкция? (лесенку не образщай внимание)

  10. #9
    Аватар для Seviel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Можно и так сделать, чтобы логику не портить, и return может возвращать не только true, но и что угодно(ну не везде правда, в OnDialogResponse можно), и как можно видеть, если в if записан return, то дальше код не идет, по этому можно обойтись без else.
    PHP код:
    switch(dialogid
    {
        case 
    2998:
        {
        if(!
    response)
        
    Savebalance() && SetCameraBehindPlayer(playerid);
        }
        case 
    2999:
        {
        if(
    response) return guns(playerid);
        
    scm(playerid, -1"Вы закрыли меню покупки");
        
    SetCameraBehindPlayer(playerid);
        }

    чую что гуру pawn меня побьют палками за запись в одну строку.

 

 

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

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

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

Ваши права

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