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

    Статус
    Оффлайн
    Регистрация
    29.05.2016
    Сообщений
    144
    Репутация:
    11 ±

    Фикс бага с ускорением на ↑

    Приветствую форумчане, недавно думал о том как пофиксить ускорение на стрелочку, вот что получилось:

    PHP код:
    fix_bug_moto[MAX_PLAYERS char]  //Создатим глоб. переменную что бы нас постоянно не замедляло 
    Это вставляем в OnPlayerUpdate:
    PHP код:
    static keysudlr,
        
    Floatv_vel_x,
        
    Floatv_vel_y,
        
    Floatv_vel_z;
    GetPlayerKeys(playeridkeysudlr);
    if(
    ud == KEY_UP)
    {
        if(
    GetPlayerState(playerid) == 2)
        {
            switch(
    GetVehicleModel(GetPlayerVehicleID(playerid)))
            {
                case 
    462522:
                {
                    if(
    GetSpeed(playerid) >= 50)
                    {
                        if(++
    fix_bug_moto{playerid} >= 3)
                        {
                            
    fix_bug_moto[playerid] =0;
                            
    GetVehicleVelocity(GetPlayerVehicleID(playerid), v_vel_xv_vel_yv_vel_z);
                            
    SetVehicleVelocity(GetPlayerVehicleID(playerid), v_vel_x 0.9v_vel_y 0.9v_vel_z 0.9);
                        }
                    }
                }
            }
        }

    PHP код:
    stock GetSpeed(playerid)
    {
        new 
    vehicleid GetPlayerVehicleID(playerid),
            
    Floatpos_x,
            
    Floatpos_y,
            
    Floatpos_z;
            
        switch(
    vehicleid)
        {
            case 
    0GetPlayerVelocity(playeridpos_xpos_ypos_z);
            default: 
    GetVehicleVelocity(vehicleidpos_xpos_ypos_z);
        }
        return 
    floatround(VectorSize(pos_xpos_ypos_z) * 100.0);

    Вроде бы на этом всё.Если возможно как то улучшить то пишите как и что)
    Помогали: DeimoS, Nexius_Tailer.
    Последний раз редактировалось HarrWe; 29.10.2016 в 22:48.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    PHP код:
    new fix_bug_moto[MAX_PLAYERS char
    PHP код:
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER
    {
        static     
    keys
                
    __,
                
    vehicleid,
                
    Floatv_vel_x
                
    Floatv_vel_y
                
    Floatv_vel_z
                
        
    vehicleid GetPlayerVehicleID(playerid);
        switch(
    GetVehicleModel(vehicleid))
        {
            case 
    462522:
            {
                
    GetPlayerKeys(playeridkeys____); 
                if(
    ud KEY_UP)
                {
                    if(++
    fix_bug_moto{playerid} >= 3
                    {
                        
    fix_bug_moto{playerid} = 0;
                        
    GetVehicleVelocity(vehicleidv_vel_xv_vel_yv_vel_z);
                        
    SetVehicleVelocity(vehicleidv_vel_x 0.9v_vel_y 0.9v_vel_z 0.9);
                    }
                }     
            }
        }

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Если умелый античит написать чтобы не прыгали в авто без анимации то вообще можно не вызывать эти функции:
    GetPlayerState
    GetPlayerVehicleID
    GetVehicleModel
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  4. #4
    Аватар для HarrWe
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.05.2016
    Сообщений
    144
    Репутация:
    11 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    PHP код:
    new fix_bug_moto[MAX_PLAYERS char
    PHP код:
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER
    {
        static     
    keys
                
    __,
                
    vehicleid,
                
    Floatv_vel_x
                
    Floatv_vel_y
                
    Floatv_vel_z
                
        
    vehicleid GetPlayerVehicleID(playerid);
        switch(
    GetVehicleModel(vehicleid))
        {
            case 
    462522:
            {
                
    GetPlayerKeys(playeridkeys____); 
                if(
    ud KEY_UP)
                {
                    if(++
    fix_bug_moto{playerid} >= 3
                    {
                        
    fix_bug_moto{playerid} = 0;
                        
    GetVehicleVelocity(vehicleidv_vel_xv_vel_yv_vel_z);
                        
    SetVehicleVelocity(vehicleidv_vel_x 0.9v_vel_y 0.9v_vel_z 0.9);
                    }
                }     
            }
        }

    Мне удобно что бы была сначала проверка на клавишу, т.к это клавиша не только в этом фиксе юзается а ещё кое где.

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

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

    В любом случае GetPlayerVehicleID лучше записать в переменную
    PHP код:
    static     keys
            
    __,
            
    vehicleid,
            
    Floatv_vel_x
            
    Floatv_vel_y
            
    Floatv_vel_z
    GetPlayerKeys(playeridkeys____); 
    if(
    ud KEY_UP)
    {
        if(
    GetPlayerState(playerid) == PLAYER_STATE_DRIVER
        {        
            
    vehicleid GetPlayerVehicleID(playerid);
            switch(
    GetVehicleModel(vehicleid))
            {
                case 
    462522:
                {
                    if(++
    fix_bug_moto{playerid} >= 3
                    {
                        
    fix_bug_moto{playerid} = 0;
                        
    GetVehicleVelocity(vehicleidv_vel_xv_vel_yv_vel_z);
                        
    SetVehicleVelocity(vehicleidv_vel_x 0.9v_vel_y 0.9v_vel_z 0.9);
                    }
                }     
            }
        }

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    29.05.2016
    Сообщений
    144
    Репутация:
    11 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну так она в любом случае не всегда нужна. Имхо, лучше вызывай свой GetPlayerKeys для каждого конкретного случая, чем насиловать сервер вызовом функции с тремя параметрами при каждом вызове OnPlayerUpdate.

    В любом случае GetPlayerVehicleID лучше записать в переменную
    PHP код:
    static     keys
            
    __,
            
    vehicleid,
            
    Floatv_vel_x
            
    Floatv_vel_y
            
    Floatv_vel_z
    GetPlayerKeys(playeridkeys____); 
    if(
    ud KEY_UP)
    {
        if(
    GetPlayerState(playerid) == PLAYER_STATE_DRIVER
        {        
            
    vehicleid GetPlayerVehicleID(playerid);
            switch(
    GetVehicleModel(vehicleid))
            {
                case 
    462522:
                {
                    if(++
    fix_bug_moto{playerid} >= 3
                    {
                        
    fix_bug_moto{playerid} = 0;
                        
    GetVehicleVelocity(vehicleidv_vel_xv_vel_yv_vel_z);
                        
    SetVehicleVelocity(vehicleidv_vel_x 0.9v_vel_y 0.9v_vel_z 0.9);
                    }
                }     
            }
        }

    И ты не исправил сам массив.
    А почему лучше записывать ID в переменную?

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

    Статус
    Оффлайн
    Регистрация
    07.06.2016
    Адрес
    Minsk, Belarus
    Сообщений
    78
    Репутация:
    15 ±
    Цитата Сообщение от HarrWe Посмотреть сообщение
    А почему лучше записывать ID в переменную?
    Потому что лучше один раз вызвать функцию получения id транспорта, и далее уже работать с полученным значением. Машина ведь не меняется. Получение значения переменной будет быстрее чем вызов функции.

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Вот это дадут игроки прикурить серверу когда узнают что за такие нажатия вызываются 3-6 функций)) и это только первая система, а что ещё тут появится подобного?
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

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

    Статус
    Оффлайн
    Регистрация
    29.05.2016
    Сообщений
    144
    Репутация:
    11 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Вот это дадут игроки прикурить серверу когда узнают что за такие нажатия вызываются 3-6 функций)) и это только первая система, а что ещё тут появится подобного?
    Как по другому тогда сделать?

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    PHP код:
    new pVehID[MAX_PLAYERS],
        
    pState[MAX_PLAYERS char],
        
    fix_bug_moto[MAX_PLAYERS char];

    //native PutPlayerInVehicle(playerid, vehicleid, seatid); её перехватить не забыть и другие нужные функции где бы обнулялась/ставилась инфа
    public OnPlayerEnterVehicle(playeridvehicleidispassenger)
    {
        
    pVehID[playerid] = vehicleid;
        return 
    1;
    }

    public 
    OnPlayerStateChange(playeridnewstateoldstate)
    {
        
    pState{playerid} = newstate;
        return 
    1;
    }

    public 
    OnPlayerUpdate(playerid)
    {
        static
            
    keys
            
    __,
            
    Floatv_vel_x
            
    Floatv_vel_y
            
    Floatv_vel_z;

        
    GetPlayerKeys(playeridkeys____); 

        if(
    keys KEY_UP)
        {
            if(
    pState{playerid} == PLAYER_STATE_DRIVER
            {
                switch(
    GetVehicleModel(pVehID[playerid])) //с GetVehicleModel перепутал, хотя можно под каждый транспорт выделить ячейку и туда записывать модель, я бы так и сделал, мне не жалко памяти :)
                
    {
                    case 
    462522:
                    {
                        
    fix_bug_moto{playerid} += 2;
                        if(
    fix_bug_moto{playerid} > 5
                        {
                            
    fix_bug_moto{playerid} = 0;
                            
    GetVehicleVelocity(pVehID[playerid], v_vel_xv_vel_yv_vel_z);
                            
    SetVehicleVelocity(pVehID[playerid], floatmul(v_vel_x0.9), floatmul(v_vel_y0.9), floatmul(v_vel_z0.9));
                            
    //на сколько я знаю делать операции для дробных чисел через ^такие функции чучуть идут быстрее
                            //+ я не проверял какие функции ещё могут тормозить игрока, там полюбасу можно найти что то быстрее
                        
    }
                    }     
                }
            }
        }
        else
        {
            if(
    fix_bug_moto{playerid} > 0fix_bug_moto{playerid} --;
        }
        return 
    1;

    Иногда и костыли круче какого то мелкого кода

    UPD: Ночь была не сильно понял про какую переменную шла речь, да и вообще вариант оптимизированней будет если сделать по DeimoS'a схеме, но с моим вариантом перехватов пабликов чтобы облегчённо узнавать об игроке.

    То есть так:

      Открыть/закрыть
    PHP код:
    new pVehID[MAX_PLAYERS],
        
    pState[MAX_PLAYERS char],
        
    fix_bug_moto[MAX_PLAYERS char];

    //native PutPlayerInVehicle(playerid, vehicleid, seatid); её перехватить не забыть и другие нужные функции где бы обнулялась/ставилась инфа
    public OnPlayerEnterVehicle(playeridvehicleidispassenger)
    {
        
    pVehID[playerid] = vehicleid;
        return 
    1;
    }

    public 
    OnPlayerStateChange(playeridnewstateoldstate)
    {
        
    pState{playerid} = newstate;
        return 
    1;
    }

    public 
    OnPlayerUpdate(playerid)
    {
        if(
    pState{playerid} == PLAYER_STATE_DRIVER
        {
            switch(
    GetVehicleModel(pVehID[playerid])) //с GetVehicleModel перепутал, хотя можно под каждый транспорт выделить ячейку и туда записывать модель, я бы так и сделал, мне не жалко памяти :)
            
    {
                case 
    462522:
                {
                    static
                        
    keys
                        
    __,
                        
    Floatv_vel_x
                        
    Floatv_vel_y
                        
    Floatv_vel_z;

                    
    GetPlayerKeys(playeridkeys____); 
                    if(
    keys KEY_UP)
                    {
                        
    fix_bug_moto{playerid} += 2;
                        if(
    fix_bug_moto{playerid} > 5
                        {
                            
    fix_bug_moto{playerid} = 0;
                            
    GetVehicleVelocity(pVehID[playerid], v_vel_xv_vel_yv_vel_z);
                            
    SetVehicleVelocity(pVehID[playerid], floatmul(v_vel_x0.9), floatmul(v_vel_y0.9), floatmul(v_vel_z0.9));
                            
    //на сколько я знаю делать операции для дробных чисел через ^такие функции чучуть идут быстрее
                            //+ я не проверял какие функции ещё могут тормозить игрока, там полюбасу можно найти что то быстрее
                        
    }
                    }
                    else
                    {
                        if(
    fix_bug_moto{playerid} > 0fix_bug_moto{playerid} --;
                    }
                }     
            }
        }
        return 
    1;

    Последний раз редактировалось vovandolg; 30.10.2016 в 15:43.
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

 

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

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

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

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

Ваши права

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