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

Тема: SpeedVehicle

  1. #1
    Аватар для SQL_
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.02.2018
    Сообщений
    8
    Репутация:
    0 ±

    SpeedVehicle

    Добрый вечер, еще появился вопрос наткнулся на тему про SpeedVehicle, и Ziggi дал в этой теме формулу скорости:
    PHP код:
    stock Float:SpeedVehicle(vehicleid)
    {
        new 
    Float:xFloat:yFloat:z;
        
    GetVehicleVelocity(vehicleidxyz);
        return 
    VectorSize(xyz) * 150.0;

    Можете обьяснить почему Float: speedVehicle? И данная формула правильная для определения KM/H транспорта?

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

    Статус
    Оффлайн
    Регистрация
    25.02.2018
    Сообщений
    8
    Репутация:
    0 ±
    Можете пожалуйста дать правильную формулу для определения скорости автомобиля?
    Вышеописанная формула не работает!

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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    В смысле почему Float:SpeedVehicle? Вектор возвращает число с плавающей точкой, поэтому и Float, разве нет?

    На счет определения, не уверен, но умножать надо на 180, а не на 150, хотя могу и ошибаться

  4. Пользователь сказал cпасибо:
    SQL_ (26.02.2018)
  5. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Нет универсальной формулы, как минимум, потому, что скорость напрямую зависит от FPS (/fpslimit в помощь, если есть желание проверить мои слова) + чтоб всё нормально работало, формула получения скорости должна быть похожей на формулу установки
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  6. Пользователь сказал cпасибо:
    SQL_ (26.02.2018)
  7. #5
    Аватар для SQL_
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.02.2018
    Сообщений
    8
    Репутация:
    0 ±
    Еще можно задам вопрос, а что лучше обновлять спидометр в секундном таймере или же вызывать его в OnPlayerUpdate?

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

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    18.01.2018
    Сообщений
    128
    Репутация:
    15 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Секундный таймер естественно. Можно даже индивидуальный для каждого игрока, который будет запускаться при посадке в авто (на место водителя, естественно) и убиваться при выходе из авто/с сервера, дабы не нагружать сервер единоразово для всех игроков, а разделять нагрузку по потоку
    Почему в таймере лучше?

    В OnPlayerUpdate обновление скорости плавно происходит, а по таймеру скорость будет обновляться рывками.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от pawnoholic Посмотреть сообщение
    Почему в таймере лучше?

    В OnPlayerUpdate обновление скорости плавно происходит, а по таймеру скорость будет обновляться рывками.
    Потому что ты будешь заставлять сервер выполнять кучу ненужных действий ради необязательной плавности (в том числе и постоянно проверяя, находится ли игрок в авто, даже когда он просто бегает пешком)? Да ещё и флудя пакетами игроку.
    Если уж так хочется добиться плавности (хотя делать подобное со стороны сервера - пустая трата ресурсов) - просто делай время между итерациями таймера меньше и всё.

    Индивидуальные таймеры тем и хороши, что ты, во-первых, можешь настроить частоту обновления, а, во-вторых, обновление будет происходить реально только тогда, когда игрок находится в авто и не будет никаких лишних проверок, ибо пока игрок вне авто, таймер просто не работает.

    И да, автор, предупреждаю сразу: делать старт и окончание таймера следует в OnPlayerStateChange, ибо OnPlayerEnterVehicle и OnPlayerExitVehicle работают немного иначе (вызываются не в момент, когда игрок уже сел или вышел, а когда игрок только начал бежать к двери. И даже если она закрыта/заполнена, они будут вызываться. + не вызываются когда игрок падает с мотоцикла/велосипеда или если на нём применить SetPlayerPos, когда он сидит в транспорте). Так же не забывай таймер при выходе с сервера убивать, ибо OnPlayerStateChange (как и те два коллбэка) не вызывается при выходе с сервера.
    Последний раз редактировалось DeimoS; 27.02.2018 в 00:49.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  11. Пользователь сказал cпасибо:
    SQL_ (27.02.2018)
  12. #9
    Аватар для SQL_
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.02.2018
    Сообщений
    8
    Репутация:
    0 ±
    PHP код:
    public OnPlayerStateChange(playeridnewstateoldstate)
    {
        if(
    newstate == PLAYER_STATE_ENTER_VEHICLE_DRIVER)
        {
        
    /*Вызываю таймер*/
        
    Speedometer_timer[playerid] = SetTimerEx("Update_speedometer",200,1,"d",playerid);
        }
        else if(
    oldstate == PLAYER_STATE_EXIT_VEHICLE)
        {
        
    /*убиваем таймер*/
        
    KillTimer(Speedometer_timer[playerid]);
        }    
        return 
    1;
    }

    forward Update_speedometer(playerid);
    public 
    Update_speedometer(playerid)
    {
    /*тут уже обновлять действия спидометра*/

    Так?

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

    Вопрос еще актуален по по поводу SpeedVehilce, в интернете нашел уйма вариантов.
    PHP код:
    stock SpeedVehicle(playerid)
    {
        new 
    Float:ST[4];
        if(
    IsPlayerInAnyVehicle(playerid))
            
    GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[
    2]);
            else 
    GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);
        
    ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 100.3;
        return 
    floatround(ST[3]);

    Можете обьяснить пожалуйста как идёт тут подсчёт, умножение,складывания:
    PHP код:
        ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 100.3;
        return 
    floatround(ST[3]); 
    И откуда берётся число 100.3(везде поразному 180.0)

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    PHP код:
    public OnPlayerStateChange(playeridnewstateoldstate)
    {
        if(
    newstate == PLAYER_STATE_DRIVER)
        {
            if(
    Speedometer_timer[playerid] == -1)
            {
                
    /*Вызываю таймер*/
                
    Speedometer_timer[playerid] = SetTimerEx("Update_speedometer",200,1,"d",playerid);
            }
        }
        else if(
    oldstate == PLAYER_STATE_DRIVER)
        {
            if(
    Speedometer_timer[playerid] != -1)
            { 
    /*убиваем таймер*/
                
    KillTimer(Speedometer_timer[playerid]);
                
    Speedometer_timer[playerid] -1;
            }
        }    
        return 
    1;

    И при входе на сервер
    PHP код:
    Speedometer_timer[playerid] = -1
    А при выходе
    PHP код:
    if(Speedometer_timer[playerid] != -1)
    /*убиваем таймер*/
        
    KillTimer(Speedometer_timer[playerid]);
        
    Speedometer_timer[playerid] -1;

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

    Цитата Сообщение от SQL_ Посмотреть сообщение
    И откуда берётся число 100.3(везде поразному 180.0)
    Из головы. Оно нужно, чтоб финальная скорость выглядела реалистичнее (чтоб велосипед не ездил под 60 км/ч). Соответственно, разные числа дают разные финальные значения. Чтоб это понять, достаточно было опробовать формулу без этих чисел и посмотреть на результат.

    Вот тут можешь почитать на тему того, какой логики придерживаются при составлении формулы
    Последний раз редактировалось DeimoS; 27.02.2018 в 11:43.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  14. Пользователь сказал cпасибо:
    SQL_ (27.02.2018)
 

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

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

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

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

Ваши права

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