Scripts/resources/[qb]/[qb_crimes]/qb-oxyrun/client/main.lua

207 lines
6.0 KiB
Lua
Raw Normal View History

2024-12-29 20:03:28 +00:00
local QBCore = exports['qb-core']:GetCoreObject()
local startedrun = false
local candeliver = false
local curcoords = nil
local oxydelivered = 0
local candropoff = false
local hasdropoff = false
local lastdelivery = 1
RegisterNetEvent("qb-oxyrun:client:alertcops", function()
if Config.PDAlerts == "ps" then
exports['ps-dispatch']:DrugSale() -- Project-SLoth qb-dispatch
elseif Config.PDAlerts == "qb" then
TriggerServerEvent('police:server:policeAlert', 'Suspicious Hand-off') -- Regular qbcore
elseif Config.PDAlerts == "cd" then -- Code Design dispatch
local data = exports['cd_dispatch']:GetPlayerInfo()
TriggerServerEvent('cd_dispatch:AddNotification', {
job_table = {'police'},
coords = data.coords,
title = '10-17 - Mistænkelig person',
message = 'En '..data.sex..' Sidst set i færd med mistænkelig aktivitet ved '..data.street,
flash = 0,
unique_id = data.unique_id,
sound = 1,
blip = {
sprite = 480,
scale = 0.8,
colour = 0,
flashes = true,
text = '911 - Mistænkelig person',
time = 5,
radius = 0,
}
})
else
print("Please change your Config.PDAlerts to match one of the dispatches scripts.")
end
end)
local function transaction(deliveryped)
exports['qb-target']:AddTargetEntity(deliveryped, {
options = {
{
type = "client",
event = "qb-oxyrun:client:check",
icon = 'fas fa-capsules',
label = 'Deliver Oxy',
args = deliveryped,
}
},
distance = 2.0
})
end
local function oxydeliverblip()
dropoffblip = AddBlipForCoord(dropoffcoords.x, dropoffcoords.y, dropoffcoords.z)
SetBlipSprite(dropoffblip, 51)
SetBlipScale(dropoffblip, 0.8)
SetBlipDisplay(dropoffblip, 2)
SetBlipColour(dropoffblip, 0)
SetBlipRoute(dropoffblip, true)
end
local function oxydeliveryped()
local oxyped = Config.DropOffPeds[math.random(#Config.DropOffPeds)]
RequestModel(oxyped)
while not HasModelLoaded(oxyped) do
Wait(10)
end
local dropoffped = CreatePed(0, oxyped, dropoffcoords.x, dropoffcoords.y, dropoffcoords.z-1.0, dropoffcoords.w, false, false)
FreezeEntityPosition(dropoffped, true)
SetEntityInvincible(dropoffped, true)
SetBlockingOfNonTemporaryEvents(dropoffped, true)
transaction(dropoffped)
end
local function DeleteOxyPed(pedhash)
FreezeEntityPosition(pedhash, false)
SetPedKeepTask(pedhash, false)
TaskSetBlockingOfNonTemporaryEvents(pedhash, false)
ClearPedTasks(pedhash)
TaskWanderStandard(pedhash, 10.0, 10)
SetPedAsNoLongerNeeded(pedhash)
Wait(20000)
DeletePed(pedhash)
end
local function fetchlocation()
local curk = Config.DropOffLocation[math.random(#Config.DropOffLocation)]
if curk ~= lastdelivery then
return curk
else
return fetchlocation()
end
end
local function CreateRun()
if oxydelivered == Config.MaxRuns then
QBCore.Functions.Notify("Du er færdig med oxy missionen", "success", 5000)
oxydelivered = 0
startedrun = false
candeliver = false
candropoff = false
hasdropoff = false
TriggerServerEvent("qb-oxyrun:server:finishedrun")
RemoveBlip(dropoffblip)
DeleteOxyPed()
else
oxydelivered = oxydelivered + 1
dropoffcoords = fetchlocation()
lastdelivery = dropoffcoords
oxydeliverblip()
oxydeliveryped()
QBCore.Functions.Notify("Fortsæt til næste afleveringssted", "success", 5000)
end
end
RegisterNetEvent("qb-oxyruns:client:StartOxy", function()
if oxydelivered <= Config.MaxRuns then
candeliver = true
if startedrun == true then
candeliver = false
QBCore.Functions.Notify("Du har allerede påbegyndt en mission.", "error", 3000)
elseif startedrun == false then
hasdropoff = false
CreateRun()
startedrun = true
end
end
end)
RegisterNetEvent("qb-oxyrun:client:check", function(data)
local ped = PlayerPedId()
if candeliver then
TaskTurnPedToFaceEntity(data.args, ped, 1.0)
TaskTurnPedToFaceEntity(ped, data.args, 1.0)
Wait(1500)
PlayAmbientSpeech1(data.args, "Generic_Hi", "Speech_Params_Force")
Wait(1000)
RequestAnimDict("mp_safehouselost@")
while not HasAnimDictLoaded("mp_safehouselost@") do Wait(10) end
TaskPlayAnim(ped, "mp_safehouselost@", "package_dropoff", 8.0, 1.0, -1, 16, 0, 0, 0, 0)
Wait(3100)
PlayAmbientSpeech1(data.args, "Chat_State", "Speech_Params_Force")
Wait(500)
RequestAnimDict("mp_safehouselost@")
while not HasAnimDictLoaded("mp_safehouselost@") do Wait(10) end
TaskPlayAnim(data.args, "mp_safehouselost@", "package_dropoff", 8.0, 1.0, -1, 16, 0, 0, 0, 0 )
Wait(3000)
TriggerServerEvent("qb-oxyrun:server:reward")
if math.random(0, 100) <= Config.CallCopsChance then
TriggerEvent("qb-oxyrun:client:alertcops")
end
candeliver = false
hasdropoff = false
RemoveBlip(dropoffblip)
QBCore.Functions.Notify("Vent for endnu en levering", "primary", 5000)
startedrun = false
DeleteOxyPed(data.args)
Wait(Config.TBR)
TriggerEvent("qb-oxyruns:client:StartOxy")
else
QBCore.Functions.Notify("Du har allerede leveret oxy'en", "error", 3000)
end
end)
RegisterNetEvent("qb-oxyrun:client:spawnoxyvehicle", function()
local vehicle = Config.VehicleModel
local coords = Config.VehicleSpawnLocation.xyzw
QBCore.Functions.SpawnVehicle(vehicle, function(veh)
SetVehicleNumberPlateText(veh, "OXY-"..tostring(math.random(1000, 9999)))
SetEntityHeading(veh, coords.w)
exports['qb-fuel']:SetFuel(veh, 100.0)
TriggerEvent("vehiclekeys:client:SetOwner", QBCore.Functions.GetPlate(veh))
end, coords, true)
end)
CreateThread(function()
-- Starter Ped
local startped = Config.OxyPed
RequestModel(startped)
while not HasModelLoaded(startped) do
Wait(10)
end
local oxyped = CreatePed(0, startped, Config.StartLocation.x, Config.StartLocation.y, Config.StartLocation.z-1.0, Config.StartLocation.w, false, false)
TaskStartScenarioInPlace(oxyped, 'WORLD_HUMAN_CLIPBOARD', -1, true)
FreezeEntityPosition(oxyped, true)
SetEntityInvincible(oxyped, true)
SetBlockingOfNonTemporaryEvents(oxyped, true)
-- Target
exports['qb-target']:AddTargetEntity(oxyped, {
options = {
{
type = "server",
event = "qb-oxyrun:server:StartOxyPayment",
icon = 'fas fa-capsules',
label = 'Start Oxyrun ($'..Config.StartOxyPayment..')',
}
},
distance = 2.0
})
end)