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

Реклама


   

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

    Статус
    Оффлайн
    Регистрация
    29.05.2016
    Сообщений
    134
    Репутация:
    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
    Адрес
    Восточный Мордор
    Сообщений
    3,007
    Репутация:
    1202 ±
    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);
                    }
                }     
            }
        }

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

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

    Steve Pavlina

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

    Статус
    Онлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,192
    Репутация:
    101 ±
    Если умелый античит написать чтобы не прыгали в авто без анимации то вообще можно не вызывать эти функции:
    GetPlayerState
    GetPlayerVehicleID
    GetVehicleModel
    [Античит] Invisible Fly Hack
    [Античит] Weapon/Ammo Hack
    [Function] ResetPlayerWeaponSlot
    [Function] FIX_SetPlayerAmmo

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

    Статус
    Оффлайн
    Регистрация
    29.05.2016
    Сообщений
    134
    Репутация:
    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
    Адрес
    Восточный Мордор
    Сообщений
    3,007
    Репутация:
    1202 ±
    Ну так она в любом случае не всегда нужна. Имхо, лучше вызывай свой 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.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    29.05.2016
    Сообщений
    134
    Репутация:
    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
    Сообщений
    66
    Репутация:
    15 ±
    Цитата Сообщение от HarrWe Посмотреть сообщение
    А почему лучше записывать ID в переменную?
    Потому что лучше один раз вызвать функцию получения id транспорта, и далее уже работать с полученным значением. Машина ведь не меняется. Получение значения переменной будет быстрее чем вызов функции.

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

    Статус
    Онлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,192
    Репутация:
    101 ±
    Вот это дадут игроки прикурить серверу когда узнают что за такие нажатия вызываются 3-6 функций)) и это только первая система, а что ещё тут появится подобного?
    [Античит] Invisible Fly Hack
    [Античит] Weapon/Ammo Hack
    [Function] ResetPlayerWeaponSlot
    [Function] FIX_SetPlayerAmmo

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

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

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

    Статус
    Онлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,192
    Репутация:
    101 ±
    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.
    [Античит] Invisible Fly Hack
    [Античит] Weapon/Ammo Hack
    [Function] ResetPlayerWeaponSlot
    [Function] FIX_SetPlayerAmmo

 

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

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

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

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

Ваши права

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