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

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

    Оптимизация?

    Возможно ли подобный код оптимизировать?
    PHP код:
    if(memberrs == && rankk >= 14 || memberrs == && rankk >= 14 || memberrs == 10 && rankk >= 14
    || memberrs == 19 && rankk >= 14 || memberrs == 21 && rankk >= 14 || memberrs == && rankk >= 
    || memberrs == 26 && rankk >= || memberrs == && rankk >= || memberrs == && rankk >= 
    || memberrs == && rankk >= || memberrs == 11 && rankk >= || memberrs == 12 && rankk >= 9
    || memberrs == 13 && rankk >= || memberrs == 14 && rankk >= || memberrs == 15 && rankk >= 
    || memberrs == 17 && rankk >= 

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Тут оптимизировать нечего. Можно, разве что, сократить.
    PHP код:
    if(((memberrs == || memberrs == || memberrs == 10 || memberrs == 19 || memberrs == 21) && rankk >= 14)
    || ((
    memberrs == || memberrs == 26 || memberrs == || memberrs == || memberrs == || memberrs == 11 || memberrs == 12
    || memberrs == 13 || memberrs == 14  || memberrs == 15  || memberrs == 17) && rankk >= 9)) 
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    vovandolg (14.01.2016)
  4. #3
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Тут оптимизировать нечего. Можно, разве что, сократить.
    PHP код:
    if(((memberrs == || memberrs == || memberrs == 10 || memberrs == 19 || memberrs == 21) && rankk >= 14)
    || ((
    memberrs == || memberrs == 26 || memberrs == || memberrs == || memberrs == || memberrs == 11 || memberrs == 12
    || memberrs == 13 || memberrs == 14  || memberrs == 15  || memberrs == 17) && rankk >= 9)) 
    Да почему же нечего? Можно юзануть switch, эта конструкция как раз создана для случаев с несколькими вариантами значений одной переменной.
    Ещё можно вынести все требования к рангам в массив, где индекс элемента будет обозначать ID фракции, а значение - требуемый ранг.
    PHP код:
    // 1-й элемент массива означает номер ранга для 1-й фракции, 2-й элемент - для второй фракции и т.д.
    // Для фракций, которых не было в условии, я поставил в массиве 0 (см. проверку далее).
    // Полный список составляйте сами, раз уж так старательно перепутали ID фракций в условии.
    static const rank_requirements[] = { 01491499900014/* ... */ };
    new 
    required_rank;
    // Не выносите присваивание в required_rank за пределы условия - сначала должна выполниться
    // проверка на правильность ID фракции, иначе можно словить выход за пределы массива.
    if (!(<= memberrs <= 26) || ((required_rank rank_requirements[memberrs]) == 0)
        return 
    SendClientMessage(playerid, -1"Неправильный ID фракции."); // Можно просто вернуть 1/0, без SCM.
    if (rand >= required_rank)
    {
        
    /* Ваши действия. */

    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    PHP код:
    if (rand >= required_rank
    Что такое rand? Ранг который на данный момент у пипла?
    Последний раз редактировалось vovandolg; 14.01.2016 в 20:05.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Да почему же нечего? Можно юзануть switch, эта конструкция как раз создана для случаев с несколькими вариантами значений одной переменной.
    Ещё можно вынести все требования к рангам в массив, где индекс элемента будет обозначать ID фракции, а значение - требуемый ранг.
    PHP код:
    // 1-й элемент массива означает номер ранга для 1-й фракции, 2-й элемент - для второй фракции и т.д.
    // Для фракций, которых не было в условии, я поставил в массиве 0 (см. проверку далее).
    // Полный список составляйте сами, раз уж так старательно перепутали ID фракций в условии.
    static const rank_requirements[] = { 01491499900014/* ... */ };
    new 
    required_rank;
    // Не выносите присваивание в required_rank за пределы условия - сначала должна выполниться
    // проверка на правильность ID фракции, иначе можно словить выход за пределы массива.
    if (!(<= memberrs <= 26) || ((required_rank rank_requirements[memberrs]) == 0)
        return 
    SendClientMessage(playerid, -1"Неправильный ID фракции."); // Можно просто вернуть 1/0, без SCM.
    if (rand >= required_rank)
    {
        
    /* Ваши действия. */

    Только какая существенная польза от такой оптимизации? :) Если уж на то пошло, то давайте сразу на байт-коде всё строчить, ведь на компиляцию тратится время (да и компилятор, глупенький, не умеет впитывать в себя современные методы оптимизации кода). А чего бы и нет? *Погоня за наносекундами*
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    PHP код:
    if (rand >= required_rank
    Что такое rand? Ранг который на данный момент у пипла?
    rank, отвечал с планшета.


    Цитата Сообщение от DeimoS Посмотреть сообщение
    Только какая существенная польза от такой оптимизации? :) Если уж на то пошло, то давайте сразу на байт-коде всё строчить, ведь на компиляцию тратится время (да и компилятор, глупенький, не умеет впитывать в себя современные методы оптимизации кода). А чего бы и нет? *Погоня за наносекундами*
    Я и не заставляю пользоваться тем способом - вариант со switch вполне прокатил бы. Приведённая мной оптимизация с вытаскиванием значения из массива имеет смысл только в коде, критичном ко времени выполнения - в OnPlayerUpdate или каком-нибудь таймере со с циклом по всем игрокам, например. Собственно, описал я здесь этот способ только потому, что не видел, чтобы кто-то разъяснял его где-то ещё. Пользоваться им или нет - зависит только от умений скриптера и поставленных перед ним задач.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    А как тут со switch переплетать если у меня 2 переменной связываются друг с дружкой и у каждого значения memberrs своё значение rankk
    Да допустим я сделаю как мне примерно нужно:
    PHP код:
            switch(memb)
            {
                case 
    8:
                {}
                case 
    16:
                {}
                case 
    23:
                {}
                case 
    29,30:
                {}
                case 
    7,27,28:
                {}
                case 
    1,3,10,19,21:
                {}
                case 
    2,4..6,11..15,17,18,22,24..26:
                {}
            } 
    Или начать с рангов та же лабуда:
    PHP код:
            switch(rank)
            {
                case 
    4,5//это типо (rank >= 4) и так далее
                
    {}
                case 
    5,6:
                {}
                case 
    6,7:
                {}
                case 
    9,10:
                {}
                case 
    11,12:
                {}
                case 
    12,13:
                {}
                case 
    14,15:
                {}
            } 
    И в итоге получается что из одного куска кода мне надо будет скопировать и сделать 7 кусков кода.. Мне кажется или switch не поможет уже тут?

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Возможно он имел ввиду что-то подобное:
    PHP код:
    switch(memberrs)
    {
        case 
    13101921:
        {
            if(
    rankk >= 14)
            {
                
            }
        }
        case 
    24..611..151726:
        {
            if(
    rankk >= 9)
            {
                
    //Действие
            
    }
        }

    И да, не будем забывать, что switch/case не всегда будет быстрее if/else =) Хотя в этом случае должно быть быстрее. Но существенная разница будет заметна либо в лютых скриптах на десятки тысяч итераций, либо где-нибудь в OnPlayerUpdate. Во всех остальных случаях это больше попахивает извращением, чем чем-то действительно полезным. Особенно если в обоих условиях выполняется одинаковый код.
    Последний раз редактировалось DeimoS; 15.01.2016 в 09:03.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    DeimoS, Это только 2 ранга, а у меня их на 7 выйдет, если даже сделать на 7 рангов будет лучше чем вообще без switch?

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    DeimoS, Это только 2 ранга, а у меня их на 7 выйдет, если даже сделать на 7 рангов будет лучше чем вообще без switch?
    Зависит от конкретной ситуации. Как именно будет всё реализовано и какие действия будут происходить после условия? Как уже сказал, switch/case не всегда работает быстрее, да и не везде он уместен. Нужно под конкретную ситуацию смотреть
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

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

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

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

Ваши права

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