forked from Simnation/Main
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 |