Scripts/resources/[qb]/[qb_jobs]/kloud-farmjob/init.lua
2024-12-29 21:06:22 +01:00

221 lines
7.9 KiB
Lua

_T = {
Zone = {},
Props = {},
Blip = {},
PickedTrees = {},
Peds = {},
}
_G = {
InZone = false,
IsBusy = false,
CurrentZone = nil,
Cooldown = false
}
Start = function()
for zone, info in pairs(KloudDev.Locations) do
_T.Zone[zone] = lib.zones.sphere({
coords = info.coords,
radius = info.zoneRadius,
debug = KloudDev.Debug,
onEnter = function()
if info.job and PlayerJob.name ~= info.job then return end
_G.InZone = true
_G.CurrentZone = zone
SpawnProps(zone)
end,
onExit = function()
_G.InZone = false
_G.CurrentZone = nil
ClearProps()
end
})
end
for zone, info in pairs(KloudDev.Trees) do
if info.zoneType == "sphere" then
_T.Zone[zone] = lib.zones.sphere({
coords = info.coords,
radius = info.zoneRadius,
debug = KloudDev.Debug,
onEnter = function()
if info.job and PlayerJob.name ~= info.job then return end
_G.InZone = true
_G.CurrentZone = zone
end,
onExit = function()
_G.InZone = false
_G.CurrentZone = nil
end
})
elseif info.zoneType == "poly" then
lib.zones.poly({
points = info.zonePoints,
thickness = 25,
debug = KloudDev.Debug,
onEnter = function()
if info.job and PlayerJob.name ~= info.job then return end
_G.InZone = true
_G.CurrentZone = zone
end,
onExit = function()
_G.InZone = false
_G.CurrentZone = nil
end
})
end
end
CreateBlips()
CreateTargets()
CreatePeds()
end
CreateBlips = function()
for zone, info in pairs(KloudDev.Locations) do
if info.blip.enabled then
_T.Blip[zone] = AddBlipForCoord(info.coords.x, info.coords.y, info.coords.z)
SetBlipSprite(_T.Blip[zone], info.blip.sprite)
SetBlipDisplay(_T.Blip[zone], 4)
SetBlipScale(_T.Blip[zone], info.blip.scale)
SetBlipColour(_T.Blip[zone], info.blip.colour)
SetBlipAsShortRange(_T.Blip[zone], true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(info.blip.label)
EndTextCommandSetBlipName(_T.Blip[zone])
end
end
for zone, info in pairs(KloudDev.Trees) do
if info.blip.enabled then
_T.Blip[zone] = AddBlipForCoord(info.coords.x, info.coords.y, info.coords.z)
SetBlipSprite(_T.Blip[zone], info.blip.sprite)
SetBlipDisplay(_T.Blip[zone], 4)
SetBlipScale(_T.Blip[zone], info.blip.scale)
SetBlipColour(_T.Blip[zone], info.blip.colour)
SetBlipAsShortRange(_T.Blip[zone], true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(info.blip.label)
EndTextCommandSetBlipName(_T.Blip[zone])
end
end
for zone, info in pairs(KloudDev.Shops) do
if info.blip.enabled then
for _, coords in pairs(info.coords) do
_T.Blip[zone] = AddBlipForCoord(coords.x, coords.y, coords.z)
SetBlipSprite(_T.Blip[zone], info.blip.sprite)
SetBlipDisplay(_T.Blip[zone], 4)
SetBlipScale(_T.Blip[zone], info.blip.scale)
SetBlipColour(_T.Blip[zone], info.blip.colour)
SetBlipAsShortRange(_T.Blip[zone], true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(info.blip.label)
EndTextCommandSetBlipName(_T.Blip[zone])
end
end
end
if KloudDev.WashLocations.blip.enabled then
for k, coords in pairs(KloudDev.WashLocations.coords) do
_T.Blip["Wash"..k] = AddBlipForCoord(coords.x, coords.y, coords.z)
SetBlipSprite(_T.Blip["Wash"..k], KloudDev.WashLocations.blip.sprite)
SetBlipDisplay(_T.Blip["Wash"..k], 4)
SetBlipScale(_T.Blip["Wash"..k], KloudDev.WashLocations.blip.scale)
SetBlipColour(_T.Blip["Wash"..k], KloudDev.WashLocations.blip.colour)
SetBlipAsShortRange(_T.Blip["Wash"..k], true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(KloudDev.WashLocations.blip.label)
EndTextCommandSetBlipName(_T.Blip["Wash"..k])
end
end
end
CreateTargets = function()
for zone, info in pairs(KloudDev.Trees) do
if info.job and PlayerJob.name ~= info.job then return end
AddTargetModel(info.prop, {
{
event = 'kloud-farm:client:pickTree',
label = info.target.label,
name = "PickTrees",
icon = info.target.icon,
currentZone = zone,
canInteract = function(entity)
if not _G.IsBusy and _G.InZone and CanPick(entity) and _G.CurrentZone == zone then return true end
return false
end,
distance = 2,
}
})
end
for _, coords in pairs(KloudDev.WashLocations.coords) do
lib.zones.sphere({
coords = coords,
radius = 4.5,
debug = KloudDev.Debug,
onEnter = function()
DrawText(locale("press_wash_crops", "[E]"))
end,
onExit = function()
HideText()
end,
inside = function ()
if not _G.IsBusy and IsControlJustPressed(0, 38) then
TriggerEvent("kloud-farm:client:wash")
end
if _G.IsBusy then
HideText()
end
end
})
end
end
CreatePeds = function()
while not PlayerLoaded do Wait(100) end
for k, v in pairs(KloudDev.Shops) do
for _, coords in pairs(v.coords) do
if k == "sell" then
local model = v.pedModels[math.random(1, #v.pedModels)]
lib.requestModel(model, 10000)
_T.Peds[k] = CreatePed(5, joaat(model), coords.x, coords.y, coords.z, coords.w, false, false)
FreezeEntityPosition(_T.Peds[k], true)
SetBlockingOfNonTemporaryEvents(_T.Peds[k], true)
SetEntityInvincible(_T.Peds[k], true)
AddEntityTarget(_T.Peds[k], {
{
event = 'kloud-farm:client:openSell',
label = locale('open_sell'),
name = "kloud-farm:openSell",
icon = "fas fa-basket-shopping",
distance = 2.5,
},
})
SetModelAsNoLongerNeeded(model)
end
if k == "shop" then
local model = v.pedModels[math.random(1, #v.pedModels)]
lib.requestModel(model, 10000)
_T.Peds[k] = CreatePed(5, joaat(model), coords.x, coords.y, coords.z, coords.w, false, false)
FreezeEntityPosition(_T.Peds[k], true)
SetBlockingOfNonTemporaryEvents(_T.Peds[k], true)
SetEntityInvincible(_T.Peds[k], true)
AddEntityTarget(_T.Peds[k], {
{
event = 'kloud-farm:client:openShop',
label = locale('open_shop'),
name = "kloud-farm:openShop",
icon = "fas fa-basket-shopping",
distance = 2.5,
},
})
SetModelAsNoLongerNeeded(model)
end
end
end
end
CreateThread(Start)