506 lines
		
	
	
		
			No EOL
		
	
	
		
			14 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			506 lines
		
	
	
		
			No EOL
		
	
	
		
			14 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| Framework.LoadModel = function(model)
 | |
|     if not tonumber(model) then model = joaat(model) end
 | |
| 
 | |
|     if HasModelLoaded(model) then return end
 | |
| 
 | |
|     if not IsModelValid(model) then
 | |
|         return error(("Model '%s' does not exist or is invalid"):format(model))
 | |
|     end
 | |
| 
 | |
|     RequestModel(model)
 | |
| 
 | |
|     if coroutine.isyieldable() then
 | |
|         while not HasModelLoaded(model) do
 | |
|             Wait(0)
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| Framework.LoadAnimDict = function(animDict)
 | |
|     if HasAnimDictLoaded(animDict) then return end
 | |
| 
 | |
|     if type(animDict) ~= "string" then
 | |
|         return error(("Animation Dictionary needs to be of type 'string' but is type of %s"):format(type(animDict)))
 | |
|     end
 | |
| 
 | |
|     if not DoesAnimDictExist(animDict) then
 | |
|         return error(("Animation Dictionary '%s' does not exist or is invalid"):format(animDict))
 | |
|     end
 | |
| 
 | |
|     RequestAnimDict(animDict)
 | |
| 
 | |
|     if coroutine.isyieldable() then
 | |
|         while not HasAnimDictLoaded(animDict) do
 | |
|             Wait(0)
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| Framework.LoadAnimSet = function(animSet)
 | |
|     if HasAnimSetLoaded(animSet) then return end
 | |
| 
 | |
|     if type(animSet) ~= "string" then
 | |
|         return error(("Animation Clipset needs to be of type 'string' but is type of %s"):format(type(animSet)))
 | |
|     end
 | |
| 
 | |
|     RequestAnimSet(animSet)
 | |
| 
 | |
|     if coroutine.isyieldable() then
 | |
|         while not HasAnimSetLoaded(animSet) do
 | |
|             Wait(0)
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| Framework.LoadAmbientAudioBank = function(bank)
 | |
|     if RequestAmbientAudioBank(bank, false) then return end
 | |
| 
 | |
|     if type(bank) ~= "string" then
 | |
|         return error(("Ambient Audio Bank needs to be of type 'string' but is type of %s"):format(type(bank)))
 | |
|     end
 | |
| 
 | |
|     RequestAmbientAudioBank(bank, false)
 | |
| 
 | |
|     if coroutine.isyieldable() then
 | |
|         while not RequestAmbientAudioBank(bank, false) do
 | |
|             Wait(0)
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| Framework.LoadMissionAudioBank = function(bank)
 | |
|     if RequestMissionAudioBank(bank, false) then return end
 | |
| 
 | |
|     if type(bank) ~= "string" then
 | |
|         return error(("Mission Audio Bank needs to be of type 'string' but is type of %s"):format(type(bank)))
 | |
|     end
 | |
| 
 | |
|     RequestMissionAudioBank(bank, false)
 | |
| 
 | |
|     if coroutine.isyieldable() then
 | |
|         while not RequestMissionAudioBank(bank, false) do
 | |
|             Wait(0)
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| Framework.LoadScriptAudioBank = function(bank)
 | |
|     if RequestScriptAudioBank(bank, false) then return end
 | |
| 
 | |
|     if type(bank) ~= "string" then
 | |
|         return error(("Script Audio Bank needs to be of type 'string' but is type of %s"):format(type(bank)))
 | |
|     end
 | |
| 
 | |
|     RequestScriptAudioBank(bank, false)
 | |
| 
 | |
|     if coroutine.isyieldable() then
 | |
|         while not RequestScriptAudioBank(bank, false) do
 | |
|             Wait(0)
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| Framework.LoadParticleDict = function(partDict)
 | |
|     if HasNamedPtfxAssetLoaded(partDict) then return end
 | |
| 
 | |
|     if type(partDict) ~= "string" then
 | |
|         return error(("Particle Dictionary fxName needs to be of type 'string' but is type of %s"):format(type(partDict)))
 | |
|     end
 | |
| 
 | |
|     RequestNamedPtfxAsset(partDict)
 | |
| 
 | |
|     if coroutine.isyieldable() then
 | |
|         while not HasNamedPtfxAssetLoaded(partDict) do
 | |
|             Wait(0)
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| Framework.GetPeds = function()
 | |
|     return GetGamePool('CPed')
 | |
| end
 | |
| 
 | |
| Framework.GetObjects = function()
 | |
|     return GetGamePool('CObject')
 | |
| end
 | |
| 
 | |
| Framework.GetVehicles = function()
 | |
|     return GetGamePool('CVehicle')
 | |
| end
 | |
| 
 | |
| Framework.GetPickups = function()
 | |
|     return GetGamePool('CPickup')
 | |
| end
 | |
| 
 | |
| Framework.GetClosestPed = function(coords, distance)
 | |
|     local peds = Framework.GetPeds()
 | |
|     local closestPed, closestCoords
 | |
|     distance = distance or 2.0
 | |
| 
 | |
|     for i = 1, #peds do
 | |
|         local ped = peds[i]
 | |
| 
 | |
|         if not IsPedAPlayer(ped) then
 | |
|             local pedCoords = GetEntityCoords(ped)
 | |
|             local pedDistance = #(coords - pedCoords)
 | |
| 
 | |
|             if pedDistance < distance then
 | |
|                 distance = pedDistance
 | |
|                 closestPed = ped
 | |
|                 closestCoords = pedCoords
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return closestPed, closestCoords
 | |
| end
 | |
| 
 | |
| Framework.GetClosestPlayer = function(coords, distance, includeLocal)
 | |
|     local players = GetActivePlayers()
 | |
|     local closestPlayer, closestPed, closestCoords
 | |
|     distance = distance or 2.0
 | |
| 
 | |
|     for i = 1, #players do
 | |
|         local player = players[i]
 | |
| 
 | |
|         if player ~= PlayerId() or includeLocal then
 | |
|             local playerPed = GetPlayerPed(player)
 | |
|             local playerCoords = GetEntityCoords(playerPed)
 | |
|             local playerDistance = #(coords - playerCoords)
 | |
| 
 | |
|             if playerDistance < distance then
 | |
|                 distance = playerDistance
 | |
|                 closestPlayer = player
 | |
|                 closestPed = playerPed
 | |
|                 closestCoords = playerCoords
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return closestPlayer, closestPed, closestCoords
 | |
| end
 | |
| 
 | |
| Framework.GetClosestObject = function(coords, distance)
 | |
|     local objects = Framework.GetObjects()
 | |
|     local closestObject, closestCoords
 | |
|     distance = distance or 2.0
 | |
| 
 | |
|     for i = 1, #objects do
 | |
|         local object = objects[i]
 | |
| 
 | |
|         local objectCoords = GetEntityCoords(object)
 | |
|         local objectDistance = #(coords - objectCoords)
 | |
| 
 | |
|         if objectDistance < distance then
 | |
|             distance = objectDistance
 | |
|             closestObject = object
 | |
|             closestCoords = objectCoords
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return closestObject, closestCoords
 | |
| end
 | |
| 
 | |
| Framework.GetClosestVehicle = function(coords, distance, includeLocal)
 | |
|     local vehicles = Framework.GetVehicles()
 | |
|     local closestVehicle, closestCoords
 | |
|     distance = distance or 2.0
 | |
|     local ped = PlayerPedId()
 | |
|     local inVehicle = IsPedInAnyVehicle(ped, true)
 | |
|     local localVehicle = GetVehiclePedIsIn(ped, false)
 | |
| 
 | |
|     for i = 1, #vehicles do
 | |
|         local vehicle = vehicles[i]
 | |
|         
 | |
|         if not inVehicle or vehicle ~= localVehicle or includeLocal then
 | |
|             local vehicleCoords = GetEntityCoords(vehicle)
 | |
|             local vehicleDistance = #(coords - vehicleCoords)
 | |
| 
 | |
|             if vehicleDistance < distance then
 | |
|                 distance = vehicleDistance
 | |
|                 closestVehicle = vehicle
 | |
|                 closestCoords = vehicleCoords
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return closestVehicle, closestCoords
 | |
| end
 | |
| 
 | |
| Framework.GetClosestPickup = function(coords, distance)
 | |
|     local pickups = Framework.GetPickups()
 | |
|     local closestPickup, closestCoords
 | |
|     distance = distance or 2.0
 | |
| 
 | |
|     for i = 1, #pickups do
 | |
|         local pickup = pickups[i]
 | |
| 
 | |
|         local pickupCoords = GetEntityCoords(pickup)
 | |
|         local pickupDistance = #(coords - pickupCoords)
 | |
| 
 | |
|         if pickupDistance < distance then
 | |
|             distance = pickupDistance
 | |
|             closestPickup = pickup
 | |
|             closestCoords = pickupCoords
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return closestPickup, closestCoords
 | |
| end
 | |
| 
 | |
| Framework.GetNearbyPeds = function(coords, distance)
 | |
|     local peds = Framework.GetPeds()
 | |
|     local nearby = {}
 | |
|     distance = distance or 2.0
 | |
| 
 | |
|     for i = 1, #peds do
 | |
|         local ped = peds[i]
 | |
| 
 | |
|         if not IsPedAPlayer(ped) then
 | |
|             local pedCoords = GetEntityCoords(ped)
 | |
|             local pedDistance = #(coords - pedCoords)
 | |
| 
 | |
|             if pedDistance < distance then
 | |
|                 nearby[#nearby+1] = {
 | |
|                     ped = ped,
 | |
|                     coords = pedCoords
 | |
|                 }
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return nearby
 | |
| end
 | |
| 
 | |
| Framework.GetNearbyPlayers = function(coords, distance, includeLocal)
 | |
|     local players = GetActivePlayers()
 | |
|     local nearby = {}
 | |
|     distance = distance or 2.0
 | |
| 
 | |
|     for i = 1, #players do
 | |
|         local player = players[i]
 | |
| 
 | |
|         if player ~= PlayerId() or includeLocal then
 | |
|             local playerPed = GetPlayerPed(player)
 | |
|             local playerCoords = GetEntityCoords(playerPed)
 | |
|             local playerDistance = #(coords - playerCoords)
 | |
| 
 | |
|             if playerDistance < distance then
 | |
|                 nearby[#nearby+1] = {
 | |
|                     id = player,
 | |
|                     ped = playerPed,
 | |
|                     coords = playerCoords
 | |
|                 }
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return nearby
 | |
| end
 | |
| 
 | |
| Framework.GetNearbyObjects = function(coords, distance)
 | |
|     local objects = Framework.GetObjects()
 | |
|     local nearby = {}
 | |
|     distance = distance or 2.0
 | |
| 
 | |
|     for i = 1, #objects do
 | |
|         local object = objects[i]
 | |
| 
 | |
|         local objectCoords = GetEntityCoords(object)
 | |
|         local objectDistance = #(coords - objectCoords)
 | |
| 
 | |
|         if objectDistance < distance then
 | |
|             nearby[#nearby+1] = {
 | |
|                 object = object,
 | |
|                 coords = objectCoords
 | |
|             }
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return nearby
 | |
| end
 | |
| 
 | |
| Framework.GetNearbyVehicles = function(coords, distance, includeLocal)
 | |
|     local vehicles = Framework.GetVehicles()
 | |
|     local nearby = {}
 | |
|     distance = distance or 2.0
 | |
|     local ped = PlayerPedId()
 | |
|     local inVehicle = IsPedInAnyVehicle(ped, true)
 | |
|     local localVehicle = GetVehiclePedIsIn(ped, false)
 | |
| 
 | |
|     for i = 1, #vehicles do
 | |
|         local vehicle = vehicles[i]
 | |
| 
 | |
|         if not inVehicle or vehicle ~= localVehicle or includeLocal then
 | |
|             local vehicleCoords = GetEntityCoords(vehicle)
 | |
|             local vehicleDistance = #(coords - vehicleCoords)
 | |
| 
 | |
|             if vehicleDistance < distance then
 | |
|                 nearby[#nearby+1] = {
 | |
|                     vehicle = vehicle,
 | |
|                     coords = vehicleCoords
 | |
|                 }
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return nearby
 | |
| end
 | |
| 
 | |
| Framework.GetNearbyPickups = function(coords, distance)
 | |
|     local pickups = Framework.GetPickups()
 | |
|     local nearby = {}
 | |
|     distance = distance or 2.0
 | |
| 
 | |
|     for i = 1, #pickups do
 | |
|         local pickup = pickups[i]
 | |
| 
 | |
|         local pickupCoords = GetEntityCoords(pickup)
 | |
|         local pickupDistance = #(coords - pickupCoords)
 | |
| 
 | |
|         if pickupDistance < distance then
 | |
|             nearby[#nearby+1] = {
 | |
|                 pickup = pickup,
 | |
|                 coords = pickupCoords
 | |
|             }
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return nearby
 | |
| end
 | |
| 
 | |
| Framework.ProgressBar = function(data)
 | |
|     if GetResourceState('progressbar'):find('start') then
 | |
|         local props = {}
 | |
|         if data.props then
 | |
|             if data.props.model then
 | |
|                 props[1] = {
 | |
|                     model = data.props.model,
 | |
|                     bone = data.props.bone,
 | |
|                     pos = data.props.pos,
 | |
|                     rot = data.props.rot
 | |
|                 }
 | |
|             else
 | |
|                 for index, value in ipairs(data.props) do
 | |
|                     props[index] = {
 | |
|                         model = value.model,
 | |
|                         bone = value.bone,
 | |
|                         pos = value.pos,
 | |
|                         rot = value.rot
 | |
|                     }
 | |
|                 end
 | |
|             end
 | |
|         end
 | |
| 
 | |
|         exports['progressbar']:Progress({
 | |
|             name = data.label,
 | |
|             duration = data.duration,
 | |
|             label = data.label,
 | |
|             useWhileDead = data.useWhileDead,
 | |
|             canCancel = data.canCancel,
 | |
|             controlDisables = (not data.disable and nil or {
 | |
|                 disableMovement = data.disable.move or false,
 | |
|                 disableMouse = data.disable.mouse or false,
 | |
|                 disableCarMovement = data.disable.vehicle or false,
 | |
|                 disableCombat = data.disable.combat or false
 | |
|             }),
 | |
|             animation = (data.anim and {
 | |
|                 animDict = data.anim.dict,
 | |
|                 anim = data.anim.clip,
 | |
|                 flag = data.anim.flag or 49,
 | |
|                 task = data.anim.scenario
 | |
|             }),
 | |
|             prop = (props[1] and {
 | |
|                 model = props[1].model,
 | |
|                 bone = props[1].bone,
 | |
|                 coords = props[1].pos,
 | |
|                 rotation = props[1].rot,
 | |
|             }),
 | |
|             propTwo = (props[2] and {
 | |
|                 model = props[2].model,
 | |
|                 bone = props[2].bone,
 | |
|                 coords = props[2].pos,
 | |
|                 rotation = props[2].rot,
 | |
|             }),
 | |
|         }, function(cancelled)
 | |
|             if data.anim then
 | |
|                 StopAnimTask(PlayerPedId(), data.anim.dict, data.anim.clip, 1.0)
 | |
|                 Wait(0)
 | |
|             else
 | |
|                 ClearPedTasks(PlayerPedId())
 | |
|             end
 | |
|             if not cancelled and data.onFinish then data.onFinish() end
 | |
|             if cancelled and data.onCancel then data.onCancel() end
 | |
|         end)
 | |
|         return
 | |
|     end
 | |
| 
 | |
|     if GetResourceState('ox_lib'):find('start') then
 | |
|         if lib.progressBar({
 | |
|             duration = data.duration,
 | |
|             label = data.label,
 | |
|             useWhileDead = data.useWhileDead,
 | |
|             canCancel = data.canCancel,
 | |
|             disable = (data.disable and {
 | |
|                 move = data.disable.move or false,
 | |
|                 mouse = data.disable.mouse or false,
 | |
|                 car = data.disable.vehicle or false,
 | |
|                 combat = data.disable.combat or false
 | |
|             }),
 | |
|             anim = (data.anim and {
 | |
|                 dict = data.anim.dict,
 | |
|                 clip = data.anim.clip,
 | |
|                 flag = data.anim.flag or 49,
 | |
|                 scenario = data.anim.scenario
 | |
|             }),
 | |
|             prop = data.props
 | |
|         }) then
 | |
|             if data.onFinish then data.onFinish() end
 | |
|         else
 | |
|             if data.onCancel then data.onCancel() end
 | |
|         end
 | |
|         return
 | |
|     end
 | |
| end
 | |
| 
 | |
| Framework.NetworkRequestControlOfNetworkId = function(netid)
 | |
|     if not NetworkDoesNetworkIdExist(netid) then
 | |
|         return
 | |
|     end
 | |
| 
 | |
|     NetworkRequestControlOfNetworkId(netid)
 | |
| 
 | |
|     if coroutine.isyieldable() then
 | |
|         while not NetworkHasControlOfNetworkId(netid) do
 | |
|             Wait(0)
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| Framework.NetworkRequestControlOfEntity = function(entity)
 | |
|     if not DoesEntityExist(entity) or not NetworkGetEntityIsNetworked(entity) then
 | |
|         return
 | |
|     end
 | |
| 
 | |
|     NetworkRequestControlOfEntity(entity)
 | |
| 
 | |
|     if coroutine.isyieldable() then
 | |
|         while not NetworkHasControlOfEntity(entity) do
 | |
|             Wait(0)
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| Framework.NetworkRequestControlOfDoor = function(door)
 | |
|     if not NetworkIsDoorNetworked(door) then
 | |
|         return
 | |
|     end
 | |
| 
 | |
|     NetworkRequestControlOfDoor(door)
 | |
| 
 | |
|     if coroutine.isyieldable() then
 | |
|         while not NetworkHasControlOfDoor(door) do
 | |
|             Wait(0)
 | |
|         end
 | |
|     end
 | |
| end | 
