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

Реклама


   
IP:176.32.36.96:7777 Ha6op adm,liderov + bonuse.

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

    Статус
    Оффлайн
    Регистрация
    29.05.2016
    Сообщений
    134
    Репутация:
    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,202
    Репутация:
    102 ±
    Цитата Сообщение от HarrWe Посмотреть сообщение
    Ты проверяешь клавишу из переменной ud, которую ты не получил)Завтра проверю твой код посмотрим.
    Там я просто логически сделал, если твой вариант нажимать через некоторое время даже не флудить он будет тормозить,
    а мой я по идее рассчитал чтобы ложного не было, а как работать будет хз)
    [Античит] Invisible Fly Hack
    [Античит] Weapon/Ammo Hack
    [Function] ResetPlayerWeaponSlot
    [Function] FIX_SetPlayerAmmo

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

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

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

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    160
    Репутация:
    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
    Адрес
    Восточный Мордор
    Сообщений
    3,025
    Репутация:
    1207 ±
    Цитата Сообщение от Иван Бубнов Посмотреть сообщение
    ИМХО лучше юзать OnPlayerKeyStateChange, ибо OnPlayerUpdate вызывается очень часто (мб и ошибаюсь, но вроде как больше ~30 раз в сек)
    OnPlayerKeyStateChange Не вызывается при нажатии на стрелки. Их отловить можно только так
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,202
    Репутация:
    102 ±
    Цитата Сообщение от Иван Бубнов Посмотреть сообщение
    OnPlayerUpdate вызывается очень часто (мб и ошибаюсь, но вроде как больше ~30 раз в сек)
    Это просто наглядный пример как надо сделать код для таймера, перетащить его в свой таймер не будет не для кого проблемой, а частота обновления зависит от того что игрок делает и как часто жмёт кнопки + если не ошибаюсь эту частоту можно увеличивать и уменьшать в server.cfg
    [Античит] Invisible Fly Hack
    [Античит] Weapon/Ammo Hack
    [Function] ResetPlayerWeaponSlot
    [Function] FIX_SetPlayerAmmo

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

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

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

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

    Steve Pavlina

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

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

    Даже взять в пример один иностранный сервер, на который я наткнулся года 2 назад, где режим игры был связан с самолётами и, собственно, лётчиками. Начинал ты там с простого кукурузника и со временем зарабатывал на более крутые самолёты, летая от точки до точки и, возможно, делая что-то ещё (играл я не долго). Дальнобойщики, только реализованные в виде самолётов. Так вот, там на экране была реализована куча всяких датчиков (компас/спидометр/бензин и т.п.) в виде текстдравов и они, судя по точности обновления, были реализованы как раз в OnPlayerUpdate (тот же компас моментально обновлял данные при малейшем повороте). И ничего, онлайн был около 300 человек и ничего не лагало.
    Так что использовать OnPlayerUpdate - не смертельно. Главное используйте его с умом и только в тех случаях, когда такая частота обновлений действительно важна. В случае с этим фиксом она важна, если хотите исправить "баг" на корню, не дав и малейшей возможности разогнаться. Если не нужно - создавайте таймер и настраивайте интервал под себя
    Я думаю что у них машинка была нормальная, всё ж лучше делать проще если это возможно)
    [Античит] Invisible Fly Hack
    [Античит] Weapon/Ammo Hack
    [Function] ResetPlayerWeaponSlot
    [Function] FIX_SetPlayerAmmo

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

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

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

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

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

 

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

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

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

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

Ваши права

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