Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя
Показано с 11 по 20 из 31
  1. #11
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А если и с таймером, то точно не на pVar
    PHP код:
    #define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
    new anti_bh_time[MAX_PLAYERS char];


    if(
    PRESSEDKEY_JUMP ) && newkeys KEY_SPRINT

        if(!
    IsPlayerInAnyVehicle(playerid)  && anti_bh_time{playerid} == 0)
        { 
            
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000); 
            
    anti_bh_time{playerid} = 1;
            
    SetTimerEx("AntiBH"5000"d"playerid); 
         } 
        return 
    1



    forward AntiBH(playerid);  
    public 
    AntiBH(playerid
    {
        
    ApplyAnimationplayerid"PED""getup_front"4.10000); 
        
    anti_bh_time{playerid} = 0;  
        return 
    1;

    Но так вы всё равно не исправите баг с тем, когда люди будут использовать ваш фикс при падении с высоты и выживать

    - - - Добавлено - - -

    А с отловом индексов код будет выглядеть как-то так
    PHP код:
    switch(GetPlayerAnimationIndex(playerid))
    {
        case 
    119511961197:
        {
            
    ClearAnimations(playerid0);
            
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
            
    SetTimerEx("AntiBH"5000"d"playerid);
            return 
    1;
        }

    Свитчить функцию? ата-та так делать :)

  2. #12
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Цитата Сообщение от Пельмень Посмотреть сообщение
    Свитчить функцию? ата-та так делать :)
    А почему нет?

  3. #13
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Цитата Сообщение от Salvador Посмотреть сообщение
    А почему нет?
    А зачем вызывать функцию каждый раз? Это лишняя затрата времени, если записать данные в переменную, перебор будет значительно быстрее!

  4. 2 пользователя(ей) сказали cпасибо:
    L0ndl3m (09.09.2014) Salvacore (09.09.2014)
  5. #14
    Аватар для MR_BEN
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.01.2014
    Сообщений
    110
    Репутация:
    29 ±
    Цитата Сообщение от Пельмень Посмотреть сообщение
    А зачем вызывать функцию каждый раз? Это лишняя затрата времени, если записать данные в переменную, перебор будет значительно быстрее!
    При каждом вызове switch будет использоваться функция GetPlayerAnimationIndex?

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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от Пельмень Посмотреть сообщение
    А зачем вызывать функцию каждый раз? Это лишняя затрата времени, если записать данные в переменную, перебор будет значительно быстрее!
    Если честно, не знал, что несколько раз вызывается функция. Обычно было предположение, что компилятор сам создаёт "переменную" при начале проверки случаев, а далее её проверяет.

    Цитата Сообщение от MR_BEN Посмотреть сообщение
    При каждом вызове switch будет использоваться функция GetPlayerAnimationIndex?
    Сейчас проверил тесты скорости, действительно...
    Последний раз редактировалось L0ndl3m; 09.09.2014 в 21:39.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Пельмень Посмотреть сообщение
    А зачем вызывать функцию каждый раз? Это лишняя затрата времени, если записать данные в переменную, перебор будет значительно быстрее!
    Таки не вводите людей в заблуждение. Switch вызывает функцию 1 раз и уже работает с результатом. Даже если мы введём 100 членов для сравнения.
    Вот вам банальный код как пример:
    PHP код:
    stock GetPlayerAnimationIndexEx(playerid)
    {
        print(
    "\nФункция GetPlayerAnimationIndex вызвана\n");
        return 
    GetPlayerAnimationIndex(playerid);
    }
    #define GetPlayerAnimationIndex GetPlayerAnimationIndexEx

    public OnPlayerConnect(playerid)
    {
        switch(
    GetPlayerAnimationIndex(playerid))
        {
             case 
    119511961197:
            {
                
    ClearAnimations(playerid0);
                
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                
    SetTimerEx("AntiBH"5000"d"playerid);
                return 
    1;
            }
            case 
    12123357:
            {
                
    ClearAnimations(playerid0);
                
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                
    SetTimerEx("AntiBH"5000"d"playerid);
                return 
    1;
            }
            case 
    11565:
            {
                
    ClearAnimations(playerid0);
                
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                
    SetTimerEx("AntiBH"5000"d"playerid);
                return 
    1;
            }
        }
        switch(
    GetPlayerAnimationIndex(playerid))
        {
             case 
    119511961197:
            {
                
    ClearAnimations(playerid0);
                
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                
    SetTimerEx("AntiBH"5000"d"playerid);
                return 
    1;
            }
            case 
    12123357:
            {
                
    ClearAnimations(playerid0);
                
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                
    SetTimerEx("AntiBH"5000"d"playerid);
                return 
    1;
            }
            case 
    11565:
            {
                
    ClearAnimations(playerid0);
                
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                
    SetTimerEx("AntiBH"5000"d"playerid);
                return 
    1;
            }
        }
        return 
    1;

    В консоль выдаст ровно 2 сообщения. Когда такой код:
    PHP код:
    stock GetPlayerAnimationIndexEx(playerid)
    {
        print(
    "\nФункция GetPlayerAnimationIndex вызвана\n");
        return 
    GetPlayerAnimationIndex(playerid);
    }
    #define GetPlayerAnimationIndex GetPlayerAnimationIndexEx

    public OnPlayerConnect(playerid)
    {
        if(
    GetPlayerAnimationIndex(playerid) == 1195 || GetPlayerAnimationIndex(playerid) == 1196 || GetPlayerAnimationIndex(playerid) == 1197)
        {
            
    ClearAnimations(playerid0);
            
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
            
    SetTimerEx("AntiBH"5000"d"playerid);
            return 
    1;
        }
        return 
    1;

    Естественно выдаст 3. Хотя может вы говорите не о том...
    Последний раз редактировалось DeimoS; 09.09.2014 в 21:40.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  8. #17
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Цитата Сообщение от MR_BEN Посмотреть сообщение
    При каждом вызове switch будет использоваться функция GetPlayerAnimationIndex?
    Именно! Доступ к переменной, в которой хранится значение, которое вернула функция, будет осуществляться в разы быстрее, также, можно записывать в переменную данные из одномерных, двумерных и т.д, массивов, для получения результата. т.к к одномерным, двумерным и т.д массивам доступ осуществляется медненнее, чем к обыкновенным переменным.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    Сейчас проверил тесты скорости, действительно...
    Не знаю как вы проверяли... Вот вам мой тест. При записи в переменную время увеличилось (оно и понятно, ибо 2 новых действия добавляем ко всему)
    PHP код:
    public OnPlayerConnect(playerid)
    {
        new 
    time GetTickCount();
        for(new 
    i!= 1000000i++)
        {
            switch(
    GetPlayerAnimationIndex(playerid))
            {
                 case 
    119511961197:
                {
                    
    ClearAnimations(playerid0);
                    
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                    
    SetTimerEx("AntiBH"5000"d"playerid);
                    return 
    1;
                }
                case 
    12123357:
                {
                    
    ClearAnimations(playerid0);
                    
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                    
    SetTimerEx("AntiBH"5000"d"playerid);
                    return 
    1;
                }
                case 
    11565:
                {
                    
    ClearAnimations(playerid0);
                    
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                    
    SetTimerEx("AntiBH"5000"d"playerid);
                    return 
    1;
                }
            }
        }
        
    printf("Цикл 1 сработал за %d мс"GetTickCount()-time);
        
        
    time GetTickCount();
        for(new 
    i!= 1000000i++)
        {
            new 
    index GetPlayerAnimationIndex(playerid);
            switch(
    index)
            {
                 case 
    119511961197:
                {
                    
    ClearAnimations(playerid0);
                    
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                    
    SetTimerEx("AntiBH"5000"d"playerid);
                    return 
    1;
                }
                case 
    12123357:
                {
                    
    ClearAnimations(playerid0);
                    
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                    
    SetTimerEx("AntiBH"5000"d"playerid);
                    return 
    1;
                }
                case 
    11565:
                {
                    
    ClearAnimations(playerid0);
                    
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                    
    SetTimerEx("AntiBH"5000"d"playerid);
                    return 
    1;
                }
            }
        }
        
    printf("Цикл 2 сработал за %d мс\n"GetTickCount()-time);
        return 
    1;





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

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

    Steve Pavlina

  10. Пользователь сказал cпасибо:
    Nurick (09.09.2014)
  11. #19
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Таки не вводите людей в заблуждение. Switch вызывает функцию 1 раз и уже работает с результатом. Даже если мы введём 100 членов для сравнения.
    Вот вам банальный код как пример:
    PHP код:
    stock GetPlayerAnimationIndexEx(playerid)
    {
        print(
    "\nФункция GetPlayerAnimationIndex вызвана\n");
        return 
    GetPlayerAnimationIndex(playerid);
    }
    #define GetPlayerAnimationIndex GetPlayerAnimationIndexEx

    public OnPlayerConnect(playerid)
    {
        switch(
    GetPlayerAnimationIndex(playerid))
        {
             case 
    119511961197:
            {
                
    ClearAnimations(playerid0);
                
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                
    SetTimerEx("AntiBH"5000"d"playerid);
                return 
    1;
            }
            case 
    12123357:
            {
                
    ClearAnimations(playerid0);
                
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                
    SetTimerEx("AntiBH"5000"d"playerid);
                return 
    1;
            }
            case 
    11565:
            {
                
    ClearAnimations(playerid0);
                
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                
    SetTimerEx("AntiBH"5000"d"playerid);
                return 
    1;
            }
        }
        switch(
    GetPlayerAnimationIndex(playerid))
        {
             case 
    119511961197:
            {
                
    ClearAnimations(playerid0);
                
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                
    SetTimerEx("AntiBH"5000"d"playerid);
                return 
    1;
            }
            case 
    12123357:
            {
                
    ClearAnimations(playerid0);
                
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                
    SetTimerEx("AntiBH"5000"d"playerid);
                return 
    1;
            }
            case 
    11565:
            {
                
    ClearAnimations(playerid0);
                
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
                
    SetTimerEx("AntiBH"5000"d"playerid);
                return 
    1;
            }
        }
        return 
    1;

    В консоль выдаст ровно 2 сообщения. Когда такой код:
    PHP код:
    stock GetPlayerAnimationIndexEx(playerid)
    {
        print(
    "\nФункция GetPlayerAnimationIndex вызвана\n");
        return 
    GetPlayerAnimationIndex(playerid);
    }
    #define GetPlayerAnimationIndex GetPlayerAnimationIndexEx

    public OnPlayerConnect(playerid)
    {
        if(
    GetPlayerAnimationIndex(playerid) == 1195 || GetPlayerAnimationIndex(playerid) == 1196 || GetPlayerAnimationIndex(playerid) == 1197)
        {
            
    ClearAnimations(playerid0);
            
    ApplyAnimationplayerid"PED""KO_skid_back"4.10000);
            
    SetTimerEx("AntiBH"5000"d"playerid);
            return 
    1;
        }
        return 
    1;

    Естественно выдаст 3. Хотя может вы говорите не о том...
    Это аналог if, else if, else if (function() == 1) else if (function() == 2) else if (function() == 3) - функция будет вызвана 3 раза, также и в свитче, если я не ошибаюсь, конечно же.

  12. #20
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Цитата Сообщение от Пельмень Посмотреть сообщение
    А зачем вызывать функцию каждый раз? Это лишняя затрата времени, если записать данные в переменную, перебор будет значительно быстрее!
    Пасиб.

 

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

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

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

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

Ваши права

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