Scripts/resources/[qb]/[qb_jobs]/cad-postalop/client.lua

284 lines
9.0 KiB
Lua
Raw Normal View History

2024-12-29 20:06:22 +00:00
local QBCore = exports['qb-core']:GetCoreObject()
--===================================================
-- LOCALS
--===================================================
local currentJob = {}
local onJob = false
local onDelivery = false
local goPostalVehicle = nil
local currentJobPay = 0
local totalpayamount = 0
local MaxDelivery = 0
local PackageObject = nil
local missionblip = nil
local isDeliverySignedIn = false
local PlayerJob = {}
--===================================================
-- CONFIG
--===================================================
local locations = Config.deliveryLocations
local vehicleSpawnLocations = Config.vehicleSpawnLocations
--===================================================
-- FUNCTIONS
--===================================================
CreateThread(function()
local bCfg = Config.blip
PostalBlip = AddBlipForCoord(bCfg.coords)
SetBlipSprite(PostalBlip, bCfg.sprite)
SetBlipScale(PostalBlip, bCfg.scale)
SetBlipDisplay(PostalBlip, 4)
SetBlipColour(PostalBlip, bCfg.color)
SetBlipAsShortRange(PostalBlip, true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(bCfg.label)
EndTextCommandSetBlipName(PostalBlip)
end)
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
PlayerJob = QBCore.Functions.GetPlayerData().job
end)
RegisterNetEvent('QBCore:Client:OnJobUpdate', function()
PlayerJob = QBCore.Functions.GetPlayerData().job
end)
AddEventHandler('onResourceStart', function(resourceName)
if GetCurrentResourceName() == resourceName then
PlayerJob = QBCore.Functions.GetPlayerData().job
end
end)
function NewDeliveryShift()
if MaxDelivery >= 0 then
local jobLocation = locations[math.random(1, #locations)]
SetDeliveryJobBlip(jobLocation[1], jobLocation[2], jobLocation[3])
currentJob = jobLocation
currentJobPay = CalculateTravelDistanceBetweenPoints(GetEntityCoords(goPostalVehicle), currentJob[1],
currentJob[2], currentJob[3]) / 2 / 4
if currentJobPay > 60 then
currentJobPay = math.random(1200, 1500)
end
QBCore.Functions.Notify("Kør til næste leverings punkt!")
else
onJob = false
RemoveJobBlip()
SetNewWaypoint(-425.44, -2787.76, 6.0)
QBCore.Functions.Notify("Du er færdig! Kør tilbage til depottet.")
end
end
function SpawnGoPostal(x, y, z, h)
local vehicleHash = GetHashKey(Config.vehicleModel)
RequestModel(vehicleHash)
while not HasModelLoaded(vehicleHash) do
Wait(0)
end
goPostalVehicle = CreateVehicle(vehicleHash, x, y, z, h, true, false)
local id = NetworkGetNetworkIdFromEntity(goPostalVehicle)
SetNetworkIdCanMigrate(id, true)
SetNetworkIdExistsOnAllMachines(id, true)
SetVehicleDirtLevel(goPostalVehicle, 0)
SetVehicleHasBeenOwnedByPlayer(goPostalVehicle, true)
SetEntityAsMissionEntity(goPostalVehicle, true, true)
SetVehicleEngineOn(goPostalVehicle, true)
SetVehicleColours(goPostalVehicle, 131, 74)
TaskWarpPedIntoVehicle(PlayerPedId(), goPostalVehicle, -1)
TriggerEvent('vehiclekeys:client:SetOwner', GetVehicleNumberPlateText(goPostalVehicle))
exports['qb-fuel']:SetFuel(goPostalVehicle, 100.0)
end
function getParkingPosition(spots)
for id, v in pairs(spots) do
if GetClosestVehicle(v.x, v.y, v.z, 3.0, 0, 70) == 0 then
return true, v
end
end
QBCore.Functions.Notify("Parkeringspladsen er fuld, vent venligst.")
end
function SetDeliveryJobBlip(x, y, z)
if DoesBlipExist(missionblip) then RemoveBlip(missionblip) end
missionblip = AddBlipForCoord(x, y, z)
SetBlipSprite(missionblip, 164)
SetBlipColour(missionblip, 53)
SetNewWaypoint(x, y)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString("Destination")
EndTextCommandSetBlipName(missionblip)
end
function RemoveJobBlip()
if DoesBlipExist(missionblip) then RemoveBlip(missionblip) end
end
function LoadAnim(animDict)
RequestAnimDict(animDict)
while not HasAnimDictLoaded(animDict) do
Wait(10)
end
end
function LoadModel(model)
RequestModel(model)
while not HasModelLoaded(model) do
Wait(10)
end
end
--===================================================
-- JOB WORK
--===================================================
CreateThread(function()
local pedModel = GetHashKey(Config.pedModel)
RequestModel(pedModel)
while not HasModelLoaded(pedModel) do
Wait(1)
end
local ped = CreatePed(4, pedModel, Config.pedCoords.x, Config.pedCoords.y, Config.pedCoords.z,
Config.pedCoords.w, false, false)
SetBlockingOfNonTemporaryEvents(ped, true)
SetPedDiesWhenInjured(ped, false)
SetEntityHeading(ped, Config.pedCoords.w)
SetPedCanPlayAmbientAnims(ped, true)
SetPedCanRagdollFromPlayerImpact(ped, false)
SetEntityInvincible(ped, true)
FreezeEntityPosition(ped, true)
if PlayerJob.name == Config.JobName then
exports['qb-target']:AddTargetModel('s_m_m_postal_01', {
options = {
{
type = "client",
event = "cad-postalop:startwork",
icon = "fas fa-sign-in-alt",
label = "Gå på arbejde",
canInteract = function(entity, data)
return not isDeliverySignedIn
end,
},
{
type = "client",
event = "cad-postalop:finishwork",
icon = "fas fa-money-check-alt",
label = "Modtag løn og afslut arbejde",
canInteract = function(entity, data)
return isDeliverySignedIn
end,
},
},
distance = 1.5
})
end
exports['qb-target']:AddTargetBone('boot', {
options = {
{
type = "client",
event = "cad-postalop:takepackage",
icon = "fas fa-box",
label = "Tag pakke",
canInteract = function(entity, data)
return onJob and (entity == goPostalVehicle)
end,
}
},
distance = 2.5,
})
end)
CreateThread(function()
while true do
local inRange = false
if isDeliverySignedIn then
if (GetDistanceBetweenCoords(GetEntityCoords(PlayerPedId()), currentJob[1], currentJob[2], currentJob[3], true) < 50) and onJob and onDelivery then
inRange = true
DrawMarker(2, currentJob[1], currentJob[2], currentJob[3], 0, 0, 0, 0, 0, 0, 0.3, 0.2, -0.2, 100, 100,
155, 255, true, true, 0, 0)
if (GetDistanceBetweenCoords(GetEntityCoords(PlayerPedId()), currentJob[1], currentJob[2], currentJob[3], true) < 1.5) and onJob and onDelivery then
LoadAnim("creatures@rottweiler@tricks@")
TaskPlayAnim(PlayerPedId(), "creatures@rottweiler@tricks@", "petting_franklin", 8.0, 8.0, -1, 50, 0,
false, false, false)
FreezeEntityPosition(PlayerPedId(), true)
Wait(5000)
DeleteObject(PackageObject)
FreezeEntityPosition(PlayerPedId(), false)
ClearPedTasksImmediately(PlayerPedId())
PackageObject = nil
onDelivery = false
totalpayamount = totalpayamount + currentJobPay
MaxDelivery = MaxDelivery - 1
NewDeliveryShift()
end
end
end
if not inRange then
Wait(1000)
end
Wait(4)
end
end)
RegisterNetEvent('cad-postalop:startwork', function()
if not isDeliverySignedIn and not onJob then
if not DoesEntityExist(goPostalVehicle) then
local freespot, v = getParkingPosition(vehicleSpawnLocations)
if freespot then SpawnGoPostal(v.x, v.y, v.z, v.h) end
MaxDelivery = math.random(2, 8)
NewDeliveryShift()
onJob = true
isDeliverySignedIn = true
else
QBCore.Functions.Notify("Du har allerede et køretøj!")
end
else
QBCore.Functions.Notify("Du er allerede igang med et job, færdiggør det først.")
end
end)
RegisterNetEvent('cad-postalop:takepackage', function()
if not onDelivery and onJob and not IsPedInAnyVehicle(PlayerPedId()) and GetDistanceBetweenCoords(GetEntityCoords(PlayerPedId()), currentJob[1], currentJob[2], currentJob[3], true) < 40 then
LoadModel("hei_prop_heist_box")
local pos = GetEntityCoords(PlayerPedId(), false)
PackageObject = CreateObject(GetHashKey("hei_prop_heist_box"), pos.x, pos.y, pos.z, true, true, true)
AttachEntityToEntity(PackageObject, PlayerPedId(), GetPedBoneIndex(PlayerPedId(), 28422), 0.0, -0.03, 0.0, 5.0,
0.0, 0.0, 1, 1, 0, 1, 0, 1)
LoadAnim("anim@heists@box_carry@")
TaskPlayAnim(PlayerPedId(), "anim@heists@box_carry@", "idle", 8.0, 8.0, -1, 50, 0, false, false, false)
onDelivery = true
end
end)
RegisterNetEvent('cad-postalop:finishwork', function()
if isDeliverySignedIn then
if not onJob then
if DoesEntityExist(goPostalVehicle) then
DeleteVehicle(goPostalVehicle)
RemoveJobBlip()
if IsVehicleDamaged(goPostalVehicle) then
totalpayamount = totalpayamount - 1000
QBCore.Functions.Notify("Din lastbil blev beskadiget, du er blevet trukket 1000,- for at dække skaderne.")
end
isDeliverySignedIn = false
onJob = false
TriggerServerEvent('cad-delivery:cash', totalpayamount, 0)
Wait(500)
totalpayamount = 0
else
isDeliverySignedIn = false
onJob = false
QBCore.Functions.Notify("Den lastbil var altså dyr... Du får ingen løn denne omgang.")
end
else
QBCore.Functions.Notify("Du er nødt til at afslutte dit job først.")
end
else
QBCore.Functions.Notify("Gå på arbejde før du kan få dine penge!")
end
end)
--===================================================
-- END
--===================================================s