Как получить угол дрифта

Randy

Известный
Автор темы
74
43
Версия MoonLoader
.027.0-preview
Доброго времени суток.

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

Может быть, кто-то может набросать код, который будет работать как надо?

Заранее благодарен.
 
Решение
аххах, ты год с этим дрифтом ебешься?
Lua:
    function getCarDriftAngle(car)
        if not doesVehicleExist(car) then
            return -1;
        end

        local car_a = getCarHeading(car);
        local speed_a = getHeadingFromVector2d(getCarSpeedVector(car))
        local drift_a = math.abs(car_a - speed_a)

        return drift_a > 180.0 and 360.0 - drift_a or drift_a
    end

Randy

Известный
Автор темы
74
43
Это то понятно. Дело в том, что, когда я использую формулы - ничего не получается. Либо я что-то неправильно делаю, либо функция муна косячит. Поэтому и прошу набросать код тех, кто шарит.

так reolistic drisft в ютубе от bobSanta
Ты сообщение топика читал вообще?
 

#SameLine

Активный
421
38
Это то понятно. Дело в том, что, когда я использую формулы - ничего не получается. Либо я что-то неправильно делаю, либо функция муна косячит. Поэтому и прошу набросать код тех, кто шарит.


Ты сообщение топика читал вообще?
не тупи если можешь, он объяснял поведение колес скриптера который делал угол дрифта как получить угол дрифта он все возможное объяснил, я тебе не говорил скачать сам скрипт
 

savvin

Известный
406
139
Lua:
function getCarDriftAngle(car)
    if not doesVehicleExist(car) then
        return -1;
    end
   
    local vecX, vecY, vecZ = getCarSpeedVector(car);
    local angle = getCarHeading(car);

    local driftAngle = 0.0;

    if vecX < 0.0 and vecY > 0.0 then
        driftAngle = 0.0;
    elseif (vecX < 0.0 and vecY < 0.0) or (vecX > 0.0 and vecY < 0.0) then
        driftAngle = 180.0;
    elseif vecX > 0.0 and vecY > 0.0 then
        driftAngle = angle;
    end

    driftAngle = driftAngle - (math.atan(vecX / vecY) * 57.2957795130823);
    return (driftAngle ~= driftAngle) and (0.0) or (math.abs(driftAngle - angle));
end

Вроде нормально работает.

Lua:
while true do
    if isCharSittingInAnyCar(PLAYER_PED) then
        local vehicle = storeCarCharIsInNoSave(PLAYER_PED);
        if vehicle then
            sampAddChatMessage('Угол заноса: '..getCarDriftAngle(vehicle), -1);
        end
    end

    wait(0);
end
 

Randy

Известный
Автор темы
74
43
Lua:
function getCarDriftAngle(car)
    if not doesVehicleExist(car) then
        return -1;
    end
  
    local vecX, vecY, vecZ = getCarSpeedVector(car);
    local angle = getCarHeading(car);

    local driftAngle = 0.0;

    if vecX < 0.0 and vecY > 0.0 then
        driftAngle = 0.0;
    elseif (vecX < 0.0 and vecY < 0.0) or (vecX > 0.0 and vecY < 0.0) then
        driftAngle = 180.0;
    elseif vecX > 0.0 and vecY > 0.0 then
        driftAngle = angle;
    end

    driftAngle = driftAngle - (math.atan(vecX / vecY) * 57.2957795130823);
    return (driftAngle ~= driftAngle) and (0.0) or (math.abs(driftAngle - angle));
end

Вроде нормально работает.

Lua:
while true do
    if isCharSittingInAnyCar(PLAYER_PED) then
        local vehicle = storeCarCharIsInNoSave(PLAYER_PED);
        if vehicle then
            sampAddChatMessage('Угол заноса: '..getCarDriftAngle(vehicle), -1);
        end
    end

    wait(0);
end
Я примерно такой же код делал, но, он почему-то не работал... Спасибо!

Единственное, что заметил ещё - если ехать в определённую сторону, то снова детектится какой-то определённый угол поворота.
 

Rei

Известный
Друг
1,611
1,668
аххах, ты год с этим дрифтом ебешься?
Lua:
    function getCarDriftAngle(car)
        if not doesVehicleExist(car) then
            return -1;
        end

        local car_a = getCarHeading(car);
        local speed_a = getHeadingFromVector2d(getCarSpeedVector(car))
        local drift_a = math.abs(car_a - speed_a)

        return drift_a > 180.0 and 360.0 - drift_a or drift_a
    end
 
  • Нравится
Реакции: Randy

Randy

Известный
Автор темы
74
43
аххах, ты год с этим дрифтом ебешься?
Lua:
    function getCarDriftAngle(car)
        if not doesVehicleExist(car) then
            return -1;
        end

        local car_a = getCarHeading(car);
        local speed_a = getHeadingFromVector2d(getCarSpeedVector(car))
        local drift_a = math.abs(car_a - speed_a)

        return drift_a > 180.0 and 360.0 - drift_a or drift_a
    end
Огромное спасибо!
Да что-то хрен сам допёр, по итогу у себя в коде только усложнял всё, тем самым утопив себя в яме...