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

    Статус
    Оффлайн
    Регистрация
    29.05.2016
    Сообщений
    144
    Репутация:
    11 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    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(
    ud 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;

    Иногда и костыли круче какого то мелкого кода
    Ты проверяешь клавишу из переменной ud, которую ты не получил)Завтра проверю твой код посмотрим.

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от HarrWe Посмотреть сообщение
    Ты проверяешь клавишу из переменной ud, которую ты не получил)Завтра проверю твой код посмотрим.
    Там я просто логически сделал, если твой вариант нажимать через некоторое время даже не флудить он будет тормозить,
    а мой я по идее рассчитал чтобы ложного не было, а как работать будет хз)
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  3. #13
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    так почему результат GetPlayerVehicleID еще не занесен в переменную?

  4. #14
    Аватар для Иван Бубнов
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    157
    Репутация:
    8 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    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;

    ИМХО лучше юзать OnPlayerKeyStateChange, ибо OnPlayerUpdate вызывается очень часто (мб и ошибаюсь, но вроде как больше ~30 раз в сек)

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Иван Бубнов Посмотреть сообщение
    ИМХО лучше юзать OnPlayerKeyStateChange, ибо OnPlayerUpdate вызывается очень часто (мб и ошибаюсь, но вроде как больше ~30 раз в сек)
    OnPlayerKeyStateChange Не вызывается при нажатии на стрелки. Их отловить можно только так
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от Иван Бубнов Посмотреть сообщение
    OnPlayerUpdate вызывается очень часто (мб и ошибаюсь, но вроде как больше ~30 раз в сек)
    Это просто наглядный пример как надо сделать код для таймера, перетащить его в свой таймер не будет не для кого проблемой, а частота обновления зависит от того что игрок делает и как часто жмёт кнопки + если не ошибаюсь эту частоту можно увеличивать и уменьшать в server.cfg
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

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

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

    Даже взять в пример один иностранный сервер, на который я наткнулся года 2 назад, где режим игры был связан с самолётами и, собственно, лётчиками. Начинал ты там с простого кукурузника и со временем зарабатывал на более крутые самолёты, летая от точки до точки и, возможно, делая что-то ещё (играл я не долго). Дальнобойщики, только реализованные в виде самолётов. Так вот, там на экране была реализована куча всяких датчиков (компас/спидометр/бензин и т.п.) в виде текстдравов и они, судя по точности обновления, были реализованы как раз в OnPlayerUpdate (тот же компас моментально обновлял данные при малейшем повороте). И ничего, онлайн был около 300 человек и ничего не лагало.
    Так что использовать OnPlayerUpdate - не смертельно. Главное используйте его с умом и только в тех случаях, когда такая частота обновлений действительно важна. В случае с этим фиксом она важна, если хотите исправить "баг" на корню, не дав и малейшей возможности разогнаться. Если не нужно - создавайте таймер и настраивайте интервал под себя
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    На самом деле ничего страшного не будет от такого кода в OnPlayerUpdate. Есть скрипты, использующие этот коллбэк для гораздо более страшных вычислений.

    Даже взять в пример один иностранный сервер, на который я наткнулся года 2 назад, где режим игры был связан с самолётами и, собственно, лётчиками. Начинал ты там с простого кукурузника и со временем зарабатывал на более крутые самолёты, летая от точки до точки и, возможно, делая что-то ещё (играл я не долго). Дальнобойщики, только реализованные в виде самолётов. Так вот, там на экране была реализована куча всяких датчиков (компас/спидометр/бензин и т.п.) в виде текстдравов и они, судя по точности обновления, были реализованы как раз в OnPlayerUpdate (тот же компас моментально обновлял данные при малейшем повороте). И ничего, онлайн был около 300 человек и ничего не лагало.
    Так что использовать OnPlayerUpdate - не смертельно. Главное используйте его с умом и только в тех случаях, когда такая частота обновлений действительно важна. В случае с этим фиксом она важна, если хотите исправить "баг" на корню, не дав и малейшей возможности разогнаться. Если не нужно - создавайте таймер и настраивайте интервал под себя
    Я думаю что у них машинка была нормальная, всё ж лучше делать проще если это возможно)
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

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

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    217
    Репутация:
    39 ±
    Я думаю на samp-rp такое ставить точно не стоит.

  10. #20
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    На самом деле ничего страшного не будет от такого кода в OnPlayerUpdate. Есть скрипты, использующие этот коллбэк для гораздо более страшных вычислений.

    Даже взять в пример один иностранный сервер, на который я наткнулся года 2 назад, где режим игры был связан с самолётами и, собственно, лётчиками. Начинал ты там с простого кукурузника и со временем зарабатывал на более крутые самолёты, летая от точки до точки и, возможно, делая что-то ещё (играл я не долго). Дальнобойщики, только реализованные в виде самолётов. Так вот, там на экране была реализована куча всяких датчиков (компас/спидометр/бензин и т.п.) в виде текстдравов и они, судя по точности обновления, были реализованы как раз в OnPlayerUpdate (тот же компас моментально обновлял данные при малейшем повороте). И ничего, онлайн был около 300 человек и ничего не лагало.
    Так что использовать OnPlayerUpdate - не смертельно. Главное используйте его с умом и только в тех случаях, когда такая частота обновлений действительно важна. В случае с этим фиксом она важна, если хотите исправить "баг" на корню, не дав и малейшей возможности разогнаться. Если не нужно - создавайте таймер и настраивайте интервал под себя
    По сути согласен с DeimoS, многие однажды услышали что: "писать код в OnPlayerUpdate - самый страшный грех любого скриптера" и теперь не вникая в саму идею использования этого callback'a, слепо повторяют то же самое. Я конечно утрировал немного, но общий смысл ясен. Теперь по теме кода, я опять же соглашусь с DeimoS, т.к. перед каждым разработчиком будет всегда выбор, в этом случае выбор в том, как использовать код из мануала. Я считаю, что автор всегда должен предлагать код (фикс), который должен будет срабатывать при выполнении минимального условия, а уж потом кому нужно, подправит его для себя (и если захочет, предложит топикстартеру свой вариант для добавления в тему). Возвращаясь к самой теме о нагрузке этого кода, все на этом форуме любят фразу "мы тут не гадалки", так чего ж вы гадаете упадет сервер или нет? Есть возможность - проверьте, обсуждать можно много и долго но пока не будет конкретного примера, кто-то не запустит хотя-бы очень близкий к реальным нагрузкам тест этого кода - нам не выяснить, увы, ничего.

 

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

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

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

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

Ваши права

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