104 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 
 | |
| function IsPlayerUnreachable()
 | |
|     local playerPed = PlayerPedId()
 | |
|     return IsPedInAnyVehicle(playerPed) or IsPedRagdoll(playerPed) or IsEntityDead(playerPed)
 | |
| end
 | |
| 
 | |
| function IsVehicleLocked(vehicle)
 | |
|     return Contains({2, 3, 10}, GetVehicleDoorLockStatus(vehicle))
 | |
| end
 | |
| 
 | |
| function CanVehicleHaveRoofbox(vehicle)
 | |
|     if IsVehicleAConvertible(vehicle, false) or not DoesVehicleHaveRoof(vehicle) then
 | |
|         return false
 | |
|     end
 | |
|     return true
 | |
| end
 | |
| 
 | |
| function CanOpenRoofbox(vehicle)
 | |
|     return not IsVehicleLocked(vehicle)
 | |
| end
 | |
| 
 | |
| function CanMoveCycles(vehicle, bike)
 | |
|     if GetPedInVehicleSeat(bike, -1) > 0 then
 | |
|         return false
 | |
|     end
 | |
|     
 | |
|     return not IsVehicleLocked(vehicle)
 | |
| end
 | |
| 
 | |
| 
 | |
| function HasVehicleAccess(vehicle)
 | |
|     if not Config.removal.checkAccess or not Config.removal.checkAccess.system then
 | |
|         return true
 | |
|     end
 | |
|     
 | |
|     local system = Config.removal.checkAccess.system
 | |
|     
 | |
|     if system == 'qbx_vehiclekeys' or system == 'qb-vehiclekeys' then
 | |
|         return exports[system]:HasKeys(vehicle)
 | |
|     end
 | |
|     if system == 'vehicle_keys' then
 | |
|         local plate = GetVehicleNumberPlateText(vehicle)
 | |
|         return exports["vehicles_keys"]:doesPlayerOwnPlate(plate)
 | |
|     end
 | |
|     
 | |
|     return true
 | |
| end
 | |
| 
 | |
| -- Keybinds display
 | |
| local buttons = nil
 | |
| local keybinds = {}
 | |
| 
 | |
| local threadRunning = false
 | |
| local function StartKeybindDisplayThread()
 | |
|     if threadRunning then
 | |
|         return false
 | |
|     end
 | |
|     Citizen.CreateThread(function()
 | |
|         while buttons ~= nil do
 | |
|             local sleep = 1
 | |
|             
 | |
|             DrawScaleformMovieFullscreen(buttons, 255, 255, 255, 255, 0)
 | |
|             
 | |
|             Citizen.Wait(sleep)
 | |
|         end
 | |
|         
 | |
|         threadRunning = false
 | |
|     end)
 | |
| end
 | |
| 
 | |
| function AddKeybindDisplay(key, label)
 | |
|     buttons = nil
 | |
|     
 | |
|     table.insert(keybinds, {
 | |
|         key = '~' .. key .. '~',
 | |
|         label = label,
 | |
|     })
 | |
|     
 | |
|     buttons = RequestScaleformMovie("INSTRUCTIONAL_BUTTONS")
 | |
|     while not HasScaleformMovieLoaded(buttons) do
 | |
|         Wait(0)
 | |
|     end
 | |
|     
 | |
|     BeginScaleformMovieMethod(buttons, "CLEAR_ALL")
 | |
|     EndScaleformMovieMethod()
 | |
|     
 | |
|     for k, keybind in pairs(keybinds) do
 | |
|         BeginScaleformMovieMethod(buttons, "SET_DATA_SLOT")
 | |
|         ScaleformMovieMethodAddParamInt(k - 1)
 | |
|         ScaleformMovieMethodAddParamPlayerNameString(keybind.key)
 | |
|         PushScaleformMovieMethodParameterString(keybind.label)
 | |
|         EndScaleformMovieMethod()
 | |
|     end
 | |
|     
 | |
|     BeginScaleformMovieMethod(buttons, "DRAW_INSTRUCTIONAL_BUTTONS")
 | |
|     EndScaleformMovieMethod()
 | |
|     
 | |
|     StartKeybindDisplayThread()
 | |
| end
 | |
| 
 | |
| function ClearKeybinds()
 | |
|     buttons = nil
 | |
|     keybinds = {}
 | |
| end
 | 
