Main/resources/[jobs]/[civ]/lawn-mowing/client/client.lua
2025-06-07 08:51:21 +02:00

213 lines
No EOL
8 KiB
Lua

-- client.lua
local inMission = nil
local lawnConfig = nil
-- Ped erstellen
lib.requestModel(Config.JobStart.ped, 500)
local ped = CreatePed(4, Config.JobStart.ped, Config.JobStart.coords.x, Config.JobStart.coords.y, Config.JobStart.coords.z, Config.JobStart.coords.w, false, false)
FreezeEntityPosition(ped, true)
SetEntityCanBeDamaged(ped, false)
SetBlockingOfNonTemporaryEvents(ped, true)
SetPedDiesWhenInjured(ped, false)
SetPedCanPlayAmbientAnims(ped, true)
SetPedCanRagdollFromPlayerImpact(ped, false)
SetEntityInvincible(ped, true)
target(false, 'p1ngu_lawnmoving', Config.Locales['start_talking'], 'E', 'p-jobs:lawnmower:client:start', 'client', Config.JobStart.coords)
RegisterNetEvent("p-jobs:lawnmower:client:start", function()
lib.registerContext({
id = 'lawnmoving_menu',
title = 'Lawn Moving Job',
menu = 'lawnmoving_menu',
options = {
{
title = 'Job starten',
icon = 'fa fa-sign-in',
description = 'Starte den Mäh Auftrag. Du kannst bis zu 500$ verdienen',
onSelect = function()
if inMission then
Notify('Du hast schon einen Auftrag', 'Beende diesen um bezahlt zu werden!', 'error')
return
end
local answer = lib.callback.await('p1ngu_lawnmoving_getLawns', false)
if not answer then
print("not jobs")
return
end
if Config.UseCarRentPayment then
local carRentPayment = lib.callback.await('p1ngu_lawnmoving_makeCarPayment', false)
if carRentPayment then
Notify('Payment failed', 'Du hast nicht genug Geld!', 'error')
return
end
end
inMission = true
spawnVehicles()
setJobCoords(answer)
end,
}
}
})
lib.showContext('lawnmoving_menu')
end)
RegisterNetEvent('p-jobs:lawnmower:client:mowerCoords', function()
DetachEntity(mower, true, true)
SetEntityCoords(mower, vector3(878.9641, -506.1289, 57.5049))
SetEntityHeading(mower, 310.5745)
target(true, targerMowerId)
RemoveBlip(blipToCustomer)
end)
RegisterNetEvent('p1ngu_lawnmoving:returnEquiment', function()
targetSetOnTrailer = "lawnmower" .. tostring(math.random(1, 8899923123131))
target(true, targerPayoutId)
target(false, targetSetOnTrailer, Config.Locales['set_mower_on_trailer'], 'E', 'p1ngu_lawnmoving:setOnTrailer', 'client', lawnConfig.lawnMover.targetCoords)
end)
RegisterNetEvent('p1ngu_lawnmoving:setOnTrailer', function()
AttachMowerToTrailer(trailer, mower)
target(true, targetSetOnTrailer)
returnEquiment()
end)
RegisterNetEvent('p1ngu_lawnmoving:endTasks', function()
DeleteEntity(GetVehiclePedIsIn(PlayerPedId(), false))
target(true, deleteEquipment)
lawnConfig = nil
inMission = false
RemoveBlip(blipBackToStart)
ClearPedTasks(PlayerPedId())
end)
function returnEquiment()
blipBackToStart = AddBlipForCoord(Config.JobStart.deleteVehicleCoords)
SetBlipSprite(blipBackToStart, 1)
SetBlipColour(blipBackToStart, 63)
SetBlipRoute(blipBackToStart, true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(Config.Locales['blip_return'])
EndTextCommandSetBlipName(blipBackToStart)
deleteEquipment = "lawnmower" .. tostring(math.random(1, 8899923123131))
target(false, deleteEquipment, Config.Locales['end_job'], 'E', 'p1ngu_lawnmoving:endTasks', 'client', Config.JobStart.deleteVehicleCoords)
end
function spawnVehicles()
local vehicleCoords = Config.JobStart.vehicleCoords
local trailerCoords = Config.JobStart.trailerCoords
local mowerCoords = Config.JobStart.mowerCoords
lib.requestModel(Config.JobStart.vehicleModel, 200)
veh = CreateVehicle(Config.JobStart.vehicleModel, vehicleCoords.x, vehicleCoords.y, vehicleCoords.z, vehicleCoords.w, true, false)
lib.requestModel(Config.JobStart.trailerModel, 200)
trailer = CreateVehicle(Config.JobStart.trailerModel, trailerCoords.x, trailerCoords.y, trailerCoords.z, trailerCoords.w, true, false)
AttachVehicleToTrailer(veh, trailer)
lib.requestModel(Config.JobStart.mowerModel, 200)
mower = CreateVehicle(Config.JobStart.mowerModel, mowerCoords.x, mowerCoords.y, mowerCoords.z, mowerCoords.w, true, false)
AttachMowerToTrailer(trailer, mower)
end
function AttachMowerToTrailer(trailer, mower)
local trailerPos = GetEntityCoords(trailer)
local trailerHeading = GetEntityHeading(trailer)
local mowerPos = vector3(trailerPos.x, trailerPos.y, trailerPos.z + 1.0)
SetEntityCoords(mower, mowerPos.x, mowerPos.y, mowerPos.z, false, false, false, true)
SetEntityHeading(mower, trailerHeading)
AttachEntityToEntity(mower, trailer, 0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, true, true, false, true, 0, true)
end
function setJobCoords(data)
local cfg = Config.Lawns[data.index]
local propertyOwnerCoords = cfg.propertyOwner.coords
blipToCustomer = AddBlipForCoord(propertyOwnerCoords.x, propertyOwnerCoords.y, propertyOwnerCoords.z)
SetBlipSprite(blipToCustomer, 1)
SetBlipColour(blipToCustomer, 63)
SetBlipRoute(blipToCustomer, true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(Config.Locales['blip'])
EndTextCommandSetBlipName(blipToCustomer)
spawnPropertyOwner(propertyOwnerCoords, cfg)
lawnMovingLogic(data.index)
end
function spawnPropertyOwner(coords, cfg)
lib.requestModel(cfg.propertyOwner.ped, 500)
propertyOwnerPed = CreatePed(4, cfg.propertyOwner.ped, coords.x, coords.y, coords.z, coords.w, false, false)
FreezeEntityPosition(propertyOwnerPed, true)
SetEntityCanBeDamaged(propertyOwnerPed, false)
SetBlockingOfNonTemporaryEvents(propertyOwnerPed, true)
SetPedDiesWhenInjured(propertyOwnerPed, false)
SetPedCanPlayAmbientAnims(propertyOwnerPed, true)
SetPedCanRagdollFromPlayerImpact(propertyOwnerPed, false)
SetEntityInvincible(propertyOwnerPed, true)
end
function getPayment(lawnConfig)
if inMission then
targerPayoutId = "lawnmower" .. tostring(math.random(1, 88999231231312312))
local coords = lawnConfig.propertyOwner.coords
target(false, targerPayoutId, Config.Locales["collect_rewards"], 'E', 'give', 'server', coords)
end
end
function removeCloseProps(props, lawnConfig)
mowed = false
local playerPed = PlayerPedId()
for i = #props, 1, -1 do
local prop = props[i]
local propCoords = GetEntityCoords(prop)
local playerCoords = GetEntityCoords(playerPed)
local dist = #(propCoords - playerCoords)
if IsPedInAnyVehicle(playerPed, false) and dist < 1.0 then
DeleteObject(prop)
SetEntityAsNoLongerNeeded(prop)
table.remove(props, i)
end
end
if #props == 0 then
mowed = true
getPayment(lawnConfig)
end
end
function lawnMovingLogic(lawnId)
local lawnIndex = lawnId
lawnConfig = Config.Lawns[lawnIndex]
spawnedProps = {}
targerMowerId = "lawnmower" .. tostring(math.random(1, 8899923123131))
target(false, targerMowerId, Config.Locales['drive'], 'E', 'p-jobs:lawnmower:client:mowerCoords', 'client', lawnConfig.lawnMover.targetCoords)
for _, coords in ipairs(lawnConfig.propCoords) do
local x, y, z = coords.x, coords.y, coords.z
lib.requestModel("prop_weeds_nxg07b001", 500)
local prop = CreateObject(GetHashKey("prop_weeds_nxg07b001"), x, y, z, false, false, false)
if DoesEntityExist(prop) then
PlaceObjectOnGroundProperly(prop)
table.insert(spawnedProps, prop)
end
end
while #spawnedProps > 0 do
Wait(500)
removeCloseProps(spawnedProps, lawnConfig)
end
end