I could be wrong, but I think you’re trying to use a server-sided approach to determine the job. Try something like this, which gets the job once at the beginning and then just listens for job change events after that. (following your ++ = changed/new line style, except for the new functions)

++ ESX = nil
++ local playerJobName = nil

Citizen.CreateThread(
    function()
        ++ loadEsx()
        ++ initializeJob()
        ++ registerJobChangeListener()

        -- Wait for nui to load or just timeout

        local l = 0
        local timeout = false
        while not tabLoaded do
            Citizen.Wait(0)
            l = l + 1
            if l > 500 then
                tabLoaded = true
                timeout = true
            end
        end

        if timeout == true then
            print("Failed to load tablet nui...")
        -- return ---- Quit
        end

        print("::The client lua for tablet loaded::")

        REQUEST_NUI_FOCUS(false) -- This is just in case the resources restarted whilst the NUI is focused.

        while true do
++            if playerJobName == 'ambulance' then**  
                -- Control ID 20 is the 'Z' key by default
                -- 244 = M
                -- Use https://wiki.fivem.net/wiki/Controls to find a different key
                if (IsControlJustPressed(0, 244)) and GetLastInputMethod( 0 ) then
                    tabEnabled = not tabEnabled -- Toggle tablet visible state
                    REQUEST_NUI_FOCUS(tabEnabled)
                    print("The tablet state is: " .. tostring(tabEnabled))
                    Citizen.Wait(0)
                end
                if (tabEnabled) then
                    local ped = GetPlayerPed(-1)
                    DisableControlAction(0, 1, tabEnabled) -- LookLeftRight
                    DisableControlAction(0, 2, tabEnabled) -- LookUpDown
                    DisableControlAction(0, 24, tabEnabled) -- Attack
                    DisablePlayerFiring(ped, tabEnabled) -- Disable weapon firing
                    DisableControlAction(0, 142, tabEnabled) -- MeleeAttackAlternate
                    DisableControlAction(0, 106, tabEnabled) -- VehicleMouseControlOverride
                end
                Citizen.Wait(0)
++            else
++                Citizen.Wait(1000)
++            end
        end
    end
)

function loadEsx()
    while ESX == nil do
        TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
        Citizen.Wait(0)
    end
end

function initializeJob()
    while true do
        local playerData = ESX.GetPlayerData()
        if playerData.job ~= nil then
            handleJobChange(playerData.job)
            break
        end
        Citizen.Wait(10)
    end
end

function registerJobChangeListener()
    RegisterNetEvent('esx:setJob')
    AddEventHandler('esx:setJob', handleJobChange)
end

function handleJobChange(job)
    playerJobName = job.name
end
4 Likes