221 lines
7.9 KiB
Lua
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)
|