2024-02-25 12:39:30 +02:00

141 lines
3.6 KiB
Lua

supplyPointRegistry = {
blue = {},
red = {}
}
for i,v in ipairs(blueSupply) do
local g = Group.getByName(v)
if g then
supplyPointRegistry.blue[v] = g:getUnit(1):getPoint()
end
end
for i,v in ipairs(redSupply) do
local g = Group.getByName(v)
if g then
supplyPointRegistry.red[v] = g:getUnit(1):getPoint()
end
end
offmapSupplyRegistry = {}
timer.scheduleFunction(function(param, time)
local availableBlue = {}
for i,v in ipairs(param.blue) do
if offmapSupplyRegistry[v] == nil then
table.insert(availableBlue, v)
end
end
local availableRed = {}
for i,v in ipairs(param.red) do
if offmapSupplyRegistry[v] == nil then
table.insert(availableRed, v)
end
end
local redtargets = {}
local bluetargets = {}
for _, zn in ipairs(param.offmapZones) do
if zn:needsSupplies(3000) then
local isOnRoute = false
for _,data in pairs(offmapSupplyRegistry) do
if data.zone.name == zn.name then
isOnRoute = true
break
end
end
if not isOnRoute then
if zn.side == 1 then
table.insert(redtargets, zn)
elseif zn.side == 2 then
table.insert(bluetargets, zn)
end
end
end
end
if #availableRed > 0 and #redtargets > 0 then
local zn = redtargets[math.random(1,#redtargets)]
local red = nil
local minD = 999999999
for i,v in ipairs(availableRed) do
local d = mist.utils.get2DDist(zn.zone.point, supplyPointRegistry.red[v])
if d < minD then
red = v
minD = d
end
end
if not red then red = availableRed[math.random(1,#availableRed)] end
local gr = red
red = nil
mist.respawnGroup(gr, true)
offmapSupplyRegistry[gr] = {zone = zn, assigned = timer.getAbsTime()}
env.info(gr..' was deployed')
timer.scheduleFunction(function(param,time)
local g = Group.getByName(param.group)
TaskExtensions.landAtAirfield(g, param.target.zone.point)
env.info(param.group..' going to '..param.target.name)
end, {group=gr, target=zn}, timer.getTime()+2)
end
if #availableBlue > 0 and #bluetargets>0 then
local zn = bluetargets[math.random(1,#bluetargets)]
local blue = nil
local minD = 999999999
for i,v in ipairs(availableBlue) do
local d = mist.utils.get2DDist(zn.zone.point, supplyPointRegistry.blue[v])
if d < minD then
blue = v
minD = d
end
end
if not blue then blue = availableBlue[math.random(1,#availableBlue)] end
local gr = blue
blue = nil
mist.respawnGroup(gr, true)
offmapSupplyRegistry[gr] = {zone = zn, assigned = timer.getAbsTime()}
env.info(gr..' was deployed')
timer.scheduleFunction(function(param,time)
local g = Group.getByName(param.group)
TaskExtensions.landAtAirfield(g, param.target.zone.point)
env.info(param.group..' going to '..param.target.name)
end, {group=gr, target=zn}, timer.getTime()+2)
end
return time+(60*5)
end, {blue = blueSupply, red = redSupply, offmapZones = offmapZones}, timer.getTime()+60)
timer.scheduleFunction(function(param, time)
for groupname,data in pairs(offmapSupplyRegistry) do
local gr = Group.getByName(groupname)
if not gr then
offmapSupplyRegistry[groupname] = nil
env.info(groupname..' was destroyed')
end
if gr and ((timer.getAbsTime() - data.assigned) > (60*60)) then
gr:destroy()
offmapSupplyRegistry[groupname] = nil
env.info(groupname..' despawned due to being alive for too long')
end
if gr and Utils.allGroupIsLanded(gr) and Utils.someOfGroupInZone(gr, data.zone.name) then
data.zone:addResource(15000)
gr:destroy()
offmapSupplyRegistry[groupname] = nil
env.info(groupname..' landed at '..data.zone.name..' and delivered 15000 resources')
end
end
return time+180
end, {}, timer.getTime()+180)