#Native GTA "/tpm"

1 messages · Page 1 of 1 (latest)

old vale
#

Uses the native GTA "ped switch" instead of just a screen fade out. Sure its a bit slower but, kinda cooler imo.

Replace your QBCore:Command:GoToMarker event with the code below.

    if IsPlayerSwitchInProgress() then return end
    local blipMarker <const> = GetFirstBlipInfoId(8)
    if not DoesBlipExist(blipMarker) then
        Notify(locale('error.no_waypoint'), 'error')
        return 'marker'
    end

    SwitchToMultiFirstpart(cache.ped, 0, 1)
    CreateThread(function()
        while IsPlayerSwitchInProgress() do
            Wait(0)
            SetCloudHatOpacity(0)
            HideHudAndRadarThisFrame()
        end
    end)
    while GetPlayerSwitchState() ~= 5 do Wait(0) end

    local ped, coords <const> = cache.ped, GetBlipInfoIdCoord(blipMarker)
    local vehicle = GetVehiclePedIsIn(ped, false)
    local oldCoords <const> = GetEntityCoords(ped)

    -- Unpack coords instead of having to unpack them while iterating.
    -- 825.0 seems to be the max a player can reach while 0.0 being the lowest.
    local x, y, groundZ, Z_START = coords.x, coords.y, 850.0, 950.0
    local found = false
    if vehicle > 0 then
        FreezeEntityPosition(vehicle, true)
    else
        FreezeEntityPosition(ped, true)
    end

    for i = Z_START, 0, -25.0 do
        local z = i
        if (i % 2) ~= 0 then
            z = Z_START - i
        end

        NewLoadSceneStart(x, y, z, x, y, z, 50.0, 0)
        local curTime = GetGameTimer()
        while IsNetworkLoadingScene() do
            if GetGameTimer() - curTime > 1000 then
                break
            end
            Wait(0)
        end
        NewLoadSceneStop()
        SetPedCoordsKeepVehicle(ped, x, y, z)

        while not HasCollisionLoadedAroundEntity(ped) do
            RequestCollisionAtCoord(x, y, z)
            if GetGameTimer() - curTime > 1000 then
                break
            end
            Wait(0)
        end

        -- Get ground coord. As mentioned in the natives, this only works if the client is in render distance.
        found, groundZ = GetGroundZFor_3dCoord(x, y, z, false);
        if found then
            Wait(0)
            SetPedCoordsKeepVehicle(ped, x, y, groundZ)
            break
        end
    end

    if vehicle > 0 then
        FreezeEntityPosition(vehicle, false)
    else
        FreezeEntityPosition(ped, false)
    end

    if not found then
        -- If we can't find the coords, set the coords to the old ones.
        -- We don't unpack them before since they aren't in a loop and only called once.
        SetPedCoordsKeepVehicle(ped, oldCoords.x, oldCoords.y, oldCoords.z - 1.0)
        SwitchToMultiSecondpart(cache.ped)
        Notify(locale('error.tp_error'), 'error')
        return
    end

    -- If Z coord was found, set coords in found coords.
    SetPedCoordsKeepVehicle(ped, x, y, groundZ)
    SwitchToMultiSecondpart(cache.ped)
devout cosmos
#

this looks good

#

Does this work with esx?

old vale
steady spoke
steady spoke
naive scaffold
#

I like this! Nice work

iron thicket
#

no transition at all >>

#

but looks great loveG

compact dawn
#

Sexy. Good work AJ

small ridge
#

ha for a moment waiting to hear lobby music 😄