138 lines
4.6 KiB
Lua
138 lines
4.6 KiB
Lua
|
Targets = {}
|
||
|
local QBCore = exports['qb-core']:GetCoreObject()
|
||
|
|
||
|
local loaded = false
|
||
|
local PED = nil
|
||
|
local function setPedVariation(pedHnadle, variation)
|
||
|
for componentId, v in pairs(variation) do
|
||
|
if IsPedComponentVariationValid(pedHnadle, componentId, v.drawableId, v.textureId) then
|
||
|
SetPedComponentVariation(pedHnadle, componentId, v.drawableId, v.textureId)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function GETPED()
|
||
|
return PED
|
||
|
end
|
||
|
|
||
|
function SETPED(ped)
|
||
|
PED = ped
|
||
|
end
|
||
|
|
||
|
local function spawn_ped(data)
|
||
|
RequestModel(data.model)
|
||
|
while not HasModelLoaded(data.model) do
|
||
|
Wait(0)
|
||
|
end
|
||
|
|
||
|
if type(data.model) == 'string' then data.model = GetHashKey(data.model) end
|
||
|
|
||
|
local ped = CreatePed(1, data.model, data.coords, data.networked or false, true)
|
||
|
|
||
|
if data.variant then setPedVariation(ped, data.variant) end
|
||
|
if data.freeze then FreezeEntityPosition(ped, true) end
|
||
|
if data.invincible then SetEntityInvincible(ped, true) end
|
||
|
if data.blockevents then SetBlockingOfNonTemporaryEvents(ped, true) end
|
||
|
if data.animDict and data.anim then
|
||
|
RequestAnimDict(data.animDict)
|
||
|
while not HasAnimDictLoaded(data.animDict) do
|
||
|
Wait(0)
|
||
|
end
|
||
|
|
||
|
if type(data.anim) == "table" then
|
||
|
CreateThread(function()
|
||
|
while true do
|
||
|
local anim = data.anim[math.random(0, #data.anim)]
|
||
|
ClearPedTasks(ped)
|
||
|
TaskPlayAnim(ped, data.animDict, anim, 8.0, 0, -1, data.flag or 1, 0, 0, 0, 0)
|
||
|
SETPED(ped)
|
||
|
Wait(7000)
|
||
|
end
|
||
|
end)
|
||
|
else
|
||
|
TaskPlayAnim(ped, data.animDict, data.anim, 8.0, 0, -1, data.flag or 1, 0, 0, 0, 0)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if data.scenario then
|
||
|
SetPedCanPlayAmbientAnims(ped, true)
|
||
|
TaskStartScenarioInPlace(ped, data.scenario, 0, true)
|
||
|
end
|
||
|
|
||
|
if data.voice then
|
||
|
SetAmbientVoiceName(ped, 'A_F_Y_BUSINESS_01_WHITE_FULL_01')
|
||
|
end
|
||
|
SETPED(ped)
|
||
|
end
|
||
|
|
||
|
local function makeCore()
|
||
|
if loaded then return end
|
||
|
Citizen.CreateThread(function()
|
||
|
local c = Oilwell_config.TruckWithdraw.npc.coords
|
||
|
local vec3_coord = vector3(c.x, c.y, c.z)
|
||
|
PED = spawn_ped(Oilwell_config.TruckWithdraw.npc)
|
||
|
|
||
|
exports['qb-target']:AddBoxZone("keep_oilwell_withdraw_truck_target", vec3_coord,
|
||
|
Oilwell_config.TruckWithdraw.box.l,
|
||
|
Oilwell_config.TruckWithdraw.box.w,
|
||
|
{
|
||
|
name = "keep_oilwell_withdraw_truck_target",
|
||
|
heading = Oilwell_config.TruckWithdraw.box.heading,
|
||
|
debugPoly = false,
|
||
|
minZ = vec3_coord.z + Oilwell_config.TruckWithdraw.box.minz_offset,
|
||
|
maxZ = vec3_coord.z + Oilwell_config.TruckWithdraw.box.maxz_offset,
|
||
|
}, {
|
||
|
options = {
|
||
|
{
|
||
|
event = "keep-oilrig:client_lib:withdraw_from_queue",
|
||
|
icon = "fa-solid fa-truck-droplet",
|
||
|
label = 'Tag lastbil',
|
||
|
truck = true
|
||
|
},
|
||
|
},
|
||
|
distance = 2.0
|
||
|
})
|
||
|
loaded = true
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
AddEventHandler('keep-oilwell:client:refund_truck', function(data)
|
||
|
local coord = GetEntityCoords(data.entity)
|
||
|
local spawnLocation = vector3(Oilwell_config.Delivery.SpawnLocation.x, Oilwell_config.Delivery.SpawnLocation.y,
|
||
|
Oilwell_config.Delivery.SpawnLocation.z)
|
||
|
|
||
|
local plate = data.vehiclePlate
|
||
|
|
||
|
if #(coord - spawnLocation) > 5.0 then
|
||
|
QBCore.Functions.Notify('Du er ikke tæt nok på, for at kunne refundere', "primary")
|
||
|
return
|
||
|
end
|
||
|
QBCore.Functions.TriggerCallback('keep-oilwell:server:refund_truck', function(result)
|
||
|
if result == true then
|
||
|
local netId = NetworkGetNetworkIdFromEntity(data.entity)
|
||
|
local entity = NetworkGetEntityFromNetworkId(netId)
|
||
|
NetworkRequestControlOfEntity(entity)
|
||
|
DeleteEntity(entity)
|
||
|
end
|
||
|
end, plate)
|
||
|
end)
|
||
|
|
||
|
|
||
|
AddEventHandler('onResourceStart', function(resourceName)
|
||
|
if (GetCurrentResourceName() ~= resourceName) then return end
|
||
|
Wait(1000)
|
||
|
makeCore()
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
|
||
|
Wait(1000)
|
||
|
makeCore()
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('onResourceStop', function(resourceName)
|
||
|
if resourceName ~= GetCurrentResourceName() then
|
||
|
return
|
||
|
end
|
||
|
DeleteEntity(GETPED())
|
||
|
end)
|