131 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
-- This function is responsible for drawing all the 3d texts ('Press [E] to take off the wheel' e.g)
 | 
						|
function Draw3DText(coords, textInput, scaleX)
 | 
						|
    scaleX = scaleX * Config.textScale
 | 
						|
    local px, py, pz = table.unpack(GetGameplayCamCoords())
 | 
						|
    local dist = GetDistanceBetweenCoords(px, py, pz, coords, true)
 | 
						|
    local scale = (1 / dist) * 20
 | 
						|
    local fov = (1 / GetGameplayCamFov()) * 100
 | 
						|
    scale = scale * fov
 | 
						|
    
 | 
						|
    SetTextScale(scaleX * scale, scaleX * scale)
 | 
						|
    SetTextFont(Config.textFont or 4)
 | 
						|
    SetTextProportional(1)
 | 
						|
    SetTextDropshadow(1, 1, 1, 1, 255)
 | 
						|
    SetTextEdge(2, 0, 0, 0, 150)
 | 
						|
    SetTextDropShadow()
 | 
						|
    SetTextOutline()
 | 
						|
    SetTextEntry("STRING")
 | 
						|
    SetTextCentre(1)
 | 
						|
    AddTextComponentString(textInput)
 | 
						|
    SetDrawOrigin(coords, 0)
 | 
						|
    DrawText(0.0, 0.0)
 | 
						|
    ClearDrawOrigin()
 | 
						|
end
 | 
						|
 | 
						|
function KeybindTip(message)
 | 
						|
    SetTextComponentFormat("STRING")
 | 
						|
    AddTextComponentString(message)
 | 
						|
    EndTextCommandDisplayHelp(0, 0, 0, 200)
 | 
						|
end
 | 
						|
 | 
						|
function IsPlayerUnreachable()
 | 
						|
    local playerPed = PlayerPedId()
 | 
						|
    return IsPedInAnyVehicle(playerPed) or IsPedRagdoll(playerPed) or IsEntityDead(playerPed)
 | 
						|
end
 | 
						|
 | 
						|
function RemoveHandWeapons()
 | 
						|
    SetCurrentPedWeapon(PlayerPedId(), -1569615261, true)
 | 
						|
end
 | 
						|
 | 
						|
function DisableInputs()
 | 
						|
    -- https://docs.fivem.net/docs/game-references/controls/#controls
 | 
						|
    local inputs = {14, 15, 16, 17, 23, 24, 25, 44, 45, 140, 141, 142, 143, 261, 262, 263, 264}
 | 
						|
 | 
						|
    for k, input in pairs(inputs) do
 | 
						|
        DisableControlAction(0, input, true)
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
function IsVehicleLocked(entity)
 | 
						|
    if not IsEntityAVehicle(entity) then
 | 
						|
        return false
 | 
						|
    end
 | 
						|
    
 | 
						|
    local lockStatus = GetVehicleDoorLockStatus(entity)
 | 
						|
    return lockStatus == 2 or lockStatus == 3 or lockStatus == 4 or lockStatus == 10
 | 
						|
end
 | 
						|
 | 
						|
function PlayAnim(dict, anim, flag, duration)
 | 
						|
    Citizen.CreateThread(function()
 | 
						|
        RequestAnimDict(dict)
 | 
						|
        local timeout = 0
 | 
						|
        while not HasAnimDictLoaded(dict) do
 | 
						|
            Citizen.Wait(50)
 | 
						|
            timeout = timeout + 1
 | 
						|
            if timeout > 100 then
 | 
						|
                return
 | 
						|
            end
 | 
						|
        end
 | 
						|
        TaskPlayAnim(PlayerPedId(), dict, anim, 1.5, 1.0, duration or -1, flag or 1, 0, false, false, false)
 | 
						|
        RemoveAnimDict(dict)
 | 
						|
    end)
 | 
						|
end
 | 
						|
 | 
						|
 | 
						|
function ShowTooltip(message)
 | 
						|
    SetTextComponentFormat("STRING")
 | 
						|
    AddTextComponentString(message)
 | 
						|
    EndTextCommandDisplayHelp(0, 0, 1, -1)
 | 
						|
end
 | 
						|
 | 
						|
 | 
						|
CURRENT_KEYBIND_TIP = nil
 | 
						|
 | 
						|
function SetKeybindTip(message)
 | 
						|
    if CURRENT_KEYBIND_TIP == message then
 | 
						|
        return
 | 
						|
    end
 | 
						|
    CURRENT_KEYBIND_TIP = message
 | 
						|
 | 
						|
    Citizen.CreateThread(function()
 | 
						|
        while CURRENT_KEYBIND_TIP == message do
 | 
						|
            local sleep = 100
 | 
						|
            if CURRENT_KEYBIND_TIP then
 | 
						|
                sleep = 1
 | 
						|
                ShowKeybindTip(CURRENT_KEYBIND_TIP)
 | 
						|
            end
 | 
						|
            Citizen.Wait(sleep)
 | 
						|
        end
 | 
						|
    end)
 | 
						|
end
 | 
						|
 | 
						|
function ResetKeybindTip()
 | 
						|
    if CURRENT_KEYBIND_TIP ~= nil then
 | 
						|
        CURRENT_KEYBIND_TIP = nil
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
function ShowKeybindTip(message)
 | 
						|
    SetTextComponentFormat("STRING")
 | 
						|
    AddTextComponentString(message)
 | 
						|
 | 
						|
    EndTextCommandDisplayHelp(0, 0, 0, -1)
 | 
						|
end
 | 
						|
 | 
						|
RegisterNetEvent('kq_towing:client:notify')
 | 
						|
AddEventHandler('kq_towing:client:notify', function(message)
 | 
						|
    Notify(message)
 | 
						|
end)
 | 
						|
 | 
						|
function Notify(message)
 | 
						|
    SetTextComponentFormat("STRING")
 | 
						|
    AddTextComponentString(message)
 | 
						|
    EndTextCommandDisplayHelp(0, 0, 0, 2000)
 | 
						|
end
 | 
						|
 | 
						|
-- Call this event to cancel the placement of a rope
 | 
						|
RegisterNetEvent('kq_towing:client:cancelPlacement')
 | 
						|
AddEventHandler('kq_towing:client:cancelPlacement', function()
 | 
						|
    PLACING_ROPE = false
 | 
						|
end)
 | 
						|
 |