Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 16
  1. #1
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,360
    Репутация:
    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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Тут оптимизировать нечего. Можно, разве что, сократить.
    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)) 
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    vovandolg (14.01.2016)
  4. #3
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,664
    Репутация:
    2145 ±
    Цитата Сообщение от 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)
    {
        
    /* Ваши действия. */

    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

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

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

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Цитата Сообщение от 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)
    {
        
    /* Ваши действия. */

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

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

    Steve Pavlina

  8. #6
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

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


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

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,360
    Репутация:
    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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Возможно он имел ввиду что-то подобное:
    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.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

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

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

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

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

    Steve Pavlina

 

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

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

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

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

Ваши права

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