Added option to stop all ground movement.

This commit is contained in:
iTracerFacer 2024-12-05 10:14:08 -06:00
parent 29ab7a877f
commit eb2d3bca1e
4 changed files with 549 additions and 61 deletions

View File

@ -1,10 +1,9 @@
CarrierMenu = MENU_MISSION:New("Carrier Operations", missionMenu) -- This script takes Layouts orginally created by Redkite: https://www.youtube.com/user/RedKiteRender/
CarrierLayout4SpawnsClearDeck = MENU_COALITION_COMMAND:New(coalition.side.BLUE, "Clear Deck 4 Spawns", CarrierMenu, CarrierClearDeck4Spawns) -- and rotates through the layouts to spawn them on the carrier deck.
CarrierLayoutBlockedDeck4Spawns = MENU_COALITION_COMMAND:New(coalition.side.BLUE, "Blocked Deck 4 Spawns", CarrierMenu, CarrierBlockedDeck4Spawns) -- Adds a menu item to clear the deck of all spawned objects.
CarrierLayout8SpawnsClearDeck = MENU_COALITION_COMMAND:New(coalition.side.BLUE, "Clear Deck 8 Spawns", CarrierMenu, CarrierClearDeck8Spawns)
CarrierLayoutBlockedDeck8Spawns = MENU_COALITION_COMMAND:New(coalition.side.BLUE, "Blocked Deck 8 Spawns", CarrierMenu, CarrierBlockedDeck8Spawns) local RotateLayoutInterval = 300 -- Time in seconds to rotate through the layouts
CarrierLayoutMassRecoveryCat2Tomcats = MENU_COALITION_COMMAND:New(coalition.side.BLUE, "Mass Recovery", CarrierMenu, CarrierMassRecoveryCat2Tomcats)
CarrierLayoutCleanDeck = MENU_COALITION_COMMAND:New(coalition.side.BLUE, "Clear Deck", CarrierMenu, CarrierCleanDeck)
local function CarrierCleanDeck() local function CarrierCleanDeck()
@ -2064,13 +2063,495 @@ local function CarrierBlockedDeck4Spawns()
end end
local function CarrierCleanDeck16Spawns()
-- Created by Redkite: https://www.youtube.com/user/RedKiteRender/
local staticObj = {
["name"] = "16temp Finger Seahawk", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["livery_id"] = "standard",
["category"] = "Helicopters",
["offsets"] =
{
["y"] = -25.023610410048,
["angle"] = 1.7976891295542,
["x"] = -120.511512843,
}, -- end of ["offsets"]
["type"] = "SH-60B",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
local staticObj = {
["name"] = "16temp Junk Yard Tug", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["offsets"] =
{
["y"] = 29.219321732642,
["angle"] = 2.4958208303519,
["x"] = -77.186823118536,
}, -- end of ["offsets"]
["type"] = "AS32-31A",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
local staticObj = {
["name"] = "16temp LSO Station 3", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["category"] = "Personnel",
["offsets"] =
{
["y"] = -22.370473980031,
["angle"] = 2.4434609527921,
["x"] = -130.61201797701,
}, -- end of ["offsets"]
["shape_name"] = "carrier_lso_usa",
["type"] = "Carrier LSO Personell",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
local staticObj = {
["name"] = "16temp LSO Station 1", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["category"] = "Personnel",
["offsets"] =
{
["y"] = -21.789118479996,
["angle"] = 4.2935099599061,
["x"] = -129.42353100701,
}, -- end of ["offsets"]
["shape_name"] = "carrier_lso1_usa",
["type"] = "Carrier LSO Personell 1",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
local staticObj = {
["name"] = "16temp LSO Station 2", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["livery_id"] = "white",
["category"] = "Personnel",
["offsets"] =
{
["y"] = -22.656188270019,
["angle"] = 1.850049007114,
["x"] = -129.497732263,
}, -- end of ["offsets"]
["shape_name"] = "carrier_tech_USA",
["type"] = "us carrier tech",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
local staticObj = {
["name"] = "16temp Corral Tech 1", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["livery_id"] = "yellow",
["category"] = "Personnel",
["offsets"] =
{
["y"] = 24.378384780779,
["angle"] = 3.1764992386297,
["x"] = -1.862423344297,
}, -- end of ["offsets"]
["shape_name"] = "carrier_tech_USA",
["type"] = "us carrier tech",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
local staticObj = {
["name"] = "16temp Corral Tech 2", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["livery_id"] = "yellow",
["category"] = "Personnel",
["offsets"] =
{
["y"] = 24.943464248674,
["angle"] = 5.218534463463,
["x"] = -2.5415543022973,
}, -- end of ["offsets"]
["shape_name"] = "carrier_tech_USA",
["type"] = "us carrier tech",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
local staticObj = {
["name"] = "16temp Yunk Yard Seaman", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["category"] = "Personnel",
["offsets"] =
{
["y"] = 30.850786532392,
["angle"] = 4.7472955654246,
["x"] = -76.189816852042,
}, -- end of ["offsets"]
["shape_name"] = "carrier_seaman_USA",
["type"] = "Carrier Seaman",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
local staticObj = {
["name"] = "16temp Corral Tug", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["category"] = "ADEquipment",
["offsets"] =
{
["y"] = 25.915128857188,
["angle"] = 2.4958208303519,
["x"] = -1.4404247678031,
}, -- end of ["offsets"]
["type"] = "AS32-31A",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
local staticObj = {
["name"] = "16temp EL1 Tech 1", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["livery_id"] = "yellow",
["category"] = "Personnel",
["offsets"] =
{
["y"] = 19.968042107823,
["angle"] = 1.5707963267949,
["x"] = 28.511725836535,
}, -- end of ["offsets"]
["shape_name"] = "carrier_tech_USA",
["type"] = "us carrier tech",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
local staticObj = {
["name"] = "16temp Patio Firetruck", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["category"] = "ADEquipment",
["offsets"] =
{
["y"] = 29.26265261037,
["angle"] = 1.7453292519943,
["x"] = -112.85393314034,
}, -- end of ["offsets"]
["type"] = "AS32-p25",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
local staticObj = {
["name"] = "16temp Patio Tech", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["livery_id"] = "white",
["category"] = "Personnel",
["offsets"] =
{
["y"] = 26.2488428746,
["angle"] = 3.700098014228,
["x"] = -111.91510989917,
}, -- end of ["offsets"]
["shape_name"] = "carrier_tech_USA",
["type"] = "us carrier tech",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
end
local function CarrierBlockedDeck16Spawns()
-- Created by Redkite: https://www.youtube.com/user/RedKiteRender/
local staticObj = {
["name"] = "16temp Blocker Point S3", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["livery_id"] = "usaf standard",
["category"] = "Planes",
["offsets"] =
{
["y"] = 34.469735879975,
["angle"] = 6.0911990894602,
["x"] = 67.739295549996,
}, -- end of ["offsets"]
["type"] = "S-3B",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
local staticObj = {
["name"] = "16temp Blocker Island Seahawk", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["livery_id"] = "standard",
["category"] = "Helicopters",
["offsets"] =
{
["y"] = 15.023588829965,
["angle"] = 6.0039326268605,
["x"] = -44.319651074009,
}, -- end of ["offsets"]
["type"] = "SH-60B",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
local staticObj = {
["name"] = "16temp Blocker Island Hornet", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["livery_id"] = "VFA-37",
["category"] = "Planes",
["offsets"] =
{
["y"] = 17.969597139978,
["angle"] = 5.7595865315813,
["x"] = -61.257363910001,
}, -- end of ["offsets"]
["type"] = "FA-18C_hornet",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
local staticObj = {
["name"] = "16temp Blocker Yunk Yard Tomcat", -- unit name (Name this something identifiable if you wish to remove it later)
-- Copy and paste over this with the units information
["livery_id"] = "VF-102 Diamondbacks",
["category"] = "Planes",
["offsets"] =
{
["y"] = 20.798515920003,
["angle"] = 5.7246799465414,
["x"] = -78.309457666997,
}, -- end of ["offsets"]
["type"] = "F-14B",
-- Copy and paste over this with the units information end
-- these can be left as is, but is required.
["groupId"] = 33, -- id's of the unit we're spawning (will auto increment if id taken?)
["unitId"] = 33,
["y"] = -00127900, -- The initial location of the unit (required else unit will offet on origin of map)
["x"] = -00126557,
["heading"] = 37.55948550292,
["linkUnit"] = shipID, -- This value must be set Via 'shipID = #' where # is the id of the ship you wish to spawn on
["linkOffset"] = true,
["dead"] = false,
["rate"] = 30,
}
coalition.addStaticObject(country.id.USA, staticObj)
-- ********************************************************
end
local carrierLayouts = { local carrierLayouts = {
CarrierClearDeck8Spawns, CarrierClearDeck8Spawns,
CarrierBlockedDeck8Spawns, CarrierBlockedDeck8Spawns,
CarrierClearDeck4Spawns, CarrierClearDeck4Spawns,
CarrierBlockedDeck4Spawns, CarrierBlockedDeck4Spawns,
CarrierMassRecoveryCat2Tomcats CarrierMassRecoveryCat2Tomcats,
CarrierCleanDeck16Spawns,
CarrierBlockedDeck16Spawns
} }
local currentLayoutIndex = 1 local currentLayoutIndex = 1
@ -2089,8 +2570,11 @@ local function cycleCarrierLayouts()
currentLayoutIndex = currentLayoutIndex % #carrierLayouts + 1 currentLayoutIndex = currentLayoutIndex % #carrierLayouts + 1
-- Schedule the next execution in 15 minutes (900 seconds) -- Schedule the next execution in 15 minutes (900 seconds)
timer.scheduleFunction(cycleCarrierLayouts, nil, timer.getTime() + 900) timer.scheduleFunction(cycleCarrierLayouts, nil, timer.getTime() + RotateLayoutInterval)
end end
-- Start the cycle -- Start the cycle
cycleCarrierLayouts() cycleCarrierLayouts()
CarrierMenu = MENU_MISSION:New("Carrier Operations", missionMenu)
CarrierLayoutCleanDeck = MENU_COALITION_COMMAND:New(coalition.side.BLUE, "Clear Deck", CarrierMenu, CarrierCleanDeck)

View File

@ -97,7 +97,9 @@
-- Infantry Patrol Settings -- Infantry Patrol Settings
-- Due to some maps or locations where infantry moving is either not desired or has problems with the terrain you can disable infantry moving patrols. -- Due to some maps or locations where infantry moving is either not desired or has problems with the terrain you can disable infantry moving patrols.
-- Set to false, infantry units will spawn, and never move from their spawn location. This could be considered a defensive position and probably a good idea. -- Set to false, infantry units will spawn, and never move from their spawn location. This could be considered a defensive position and probably a good idea.
local ENABLE_CAPTURE_ZONE_MESSAGES = false -- Enable or disable attack messages when a zone is attacked. local ENABLE_CAPTURE_ZONE_MESSAGES = false -- Enable or disable attack messages when a zone is attacked.
local MOVING_ARMOR_PATROLS = false -- Units with armor will move to patrol zones if set to true. (default is true)
local MOVING_INFANTRY_PATROLS = false -- Units with infantry will not move to patrol zones if set to false. (default is false, to many moving units can cause performance issues) local MOVING_INFANTRY_PATROLS = false -- Units with infantry will not move to patrol zones if set to false. (default is false, to many moving units can cause performance issues)
local ENABLE_WAREHOUSE_MARKERS = true -- Enable or disable the warehouse markers on the map. local ENABLE_WAREHOUSE_MARKERS = true -- Enable or disable the warehouse markers on the map.
local UPDATE_MARK_POINTS_SCHED = 60 -- Update the map markers for warehouses every 60 seconds. ENABLE_WAREHOUSE_MARKERS must be set to true for this to work. local UPDATE_MARK_POINTS_SCHED = 60 -- Update the map markers for warehouses every 60 seconds. ENABLE_WAREHOUSE_MARKERS must be set to true for this to work.
@ -109,7 +111,7 @@ local SPAWN_SCHED_RED_INFANTRY = 1800 -- Spawn Red Infantry groups every 1800 se
local INIT_RED_ARMOR = 15 -- Initial number of Red Armor groups local INIT_RED_ARMOR = 15 -- Initial number of Red Armor groups
local MAX_RED_ARMOR = 200 -- Maximum number of Red Armor groups local MAX_RED_ARMOR = 200 -- Maximum number of Red Armor groups
local SPAWN_SCHED_RED_ARMOR = 300 -- Spawn Red Armor groups every 300 seconds local SPAWN_SCHED_RED_ARMOR = 600 -- Spawn Red Armor groups every 300 seconds
local INIT_BLUE_INFANTRY = 25 -- Initial number of Blue Infantry groups local INIT_BLUE_INFANTRY = 25 -- Initial number of Blue Infantry groups
local MAX_BLUE_INFANTRY = 100 -- Maximum number of Blue Infantry groups local MAX_BLUE_INFANTRY = 100 -- Maximum number of Blue Infantry groups
@ -691,67 +693,69 @@ end
-- Function to assign tasks to groups -- Function to assign tasks to groups
local function AssignTasks(group, zoneStates) local function AssignTasks(group, zoneStates)
if not group or not group.GetCoalition or not group.GetCoordinate or not group.GetVelocity then if MOVING_ARMOR_PATROLS == true then
env.info("AssignTasks: Invalid group or missing methods") if not group or not group.GetCoalition or not group.GetCoordinate or not group.GetVelocity then
return env.info("AssignTasks: Invalid group or missing methods")
end return
end
local velocity = group:GetVelocityVec3() local velocity = group:GetVelocityVec3()
local speed = math.sqrt(velocity.x^2 + velocity.y^2 + velocity.z^2) local speed = math.sqrt(velocity.x^2 + velocity.y^2 + velocity.z^2)
if speed > 0 then if speed > 0 then
env.info("AssignTasks: Group " .. group:GetName() .. " is already moving. No new orders sent.") env.info("AssignTasks: Group " .. group:GetName() .. " is already moving. No new orders sent.")
return return
end end
env.info("Assigning tasks to group: " .. group:GetName()) env.info("Assigning tasks to group: " .. group:GetName())
local groupCoalition = group:GetCoalition() local groupCoalition = group:GetCoalition()
local groupCoordinate = group:GetCoordinate() local groupCoordinate = group:GetCoordinate()
local closestZone = nil local closestZone = nil
local closestDistance = math.huge local closestDistance = math.huge
env.info("Group Coalition: " .. tostring(groupCoalition)) env.info("Group Coalition: " .. tostring(groupCoalition))
env.info("Group Coordinate: " .. groupCoordinate:ToStringLLDMS()) env.info("Group Coordinate: " .. groupCoordinate:ToStringLLDMS())
for zoneName, state in pairs(zoneStates) do for zoneName, state in pairs(zoneStates) do
env.info("Checking Zone: " .. zoneName .. " with state: " .. tostring(state)) env.info("Checking Zone: " .. zoneName .. " with state: " .. tostring(state))
-- Convert state to a number for comparison -- Convert state to a number for comparison
local stateCoalition = (state == "RED" and 1) or (state == "BLUE" and 2) or nil local stateCoalition = (state == "RED" and 1) or (state == "BLUE" and 2) or nil
if stateCoalition and stateCoalition ~= groupCoalition then if stateCoalition and stateCoalition ~= groupCoalition then
local zone = ZONE:FindByName(zoneName) local zone = ZONE:FindByName(zoneName)
if zone then if zone then
local zoneCoordinate = zone:GetCoordinate() local zoneCoordinate = zone:GetCoordinate()
local distance = groupCoordinate:Get2DDistance(zoneCoordinate) local distance = groupCoordinate:Get2DDistance(zoneCoordinate)
--env.info("Zone Coordinate: " .. zoneCoordinate:ToStringLLDMS()) --env.info("Zone Coordinate: " .. zoneCoordinate:ToStringLLDMS())
--env.info("Distance to zone " .. zoneName .. ": " .. distance) --env.info("Distance to zone " .. zoneName .. ": " .. distance)
if distance < closestDistance then if distance < closestDistance then
closestDistance = distance closestDistance = distance
closestZone = zone closestZone = zone
env.info("New closest zone: " .. zoneName .. " with distance: " .. distance) env.info("New closest zone: " .. zoneName .. " with distance: " .. distance)
end
else
env.info("AssignTasks: Zone not found - " .. zoneName)
end end
else else
env.info("AssignTasks: Zone not found - " .. zoneName) env.info("Zone " .. zoneName .. " is already controlled by coalition: " .. tostring(state))
end end
else
env.info("Zone " .. zoneName .. " is already controlled by coalition: " .. tostring(state))
end end
end
if closestZone then if closestZone then
env.info(group:GetName() .. " is moving to and patrolling zone " .. closestZone:GetName()) env.info(group:GetName() .. " is moving to and patrolling zone " .. closestZone:GetName())
--MESSAGE:New(group:GetName() .. " is moving to and patrolling zone " .. closestZone:GetName(), 10):ToAll() --MESSAGE:New(group:GetName() .. " is moving to and patrolling zone " .. closestZone:GetName(), 10):ToAll()
-- Create a patrol task using the GROUP:PatrolZones method -- Create a patrol task using the GROUP:PatrolZones method
local patrolZones = {closestZone} local patrolZones = {closestZone}
local speed = 20 -- Example speed, adjust as needed local speed = 20 -- Example speed, adjust as needed
local formation = "Cone" -- Example formation, adjust as needed local formation = "Cone" -- Example formation, adjust as needed
local delayMin = 30 -- Example minimum delay, adjust as needed local delayMin = 30 -- Example minimum delay, adjust as needed
local delayMax = 60 -- Example maximum delay, adjust as needed local delayMax = 60 -- Example maximum delay, adjust as needed
group:PatrolZones(patrolZones, speed, formation, delayMin, delayMax) group:PatrolZones(patrolZones, speed, formation, delayMin, delayMax)
else else
env.info("AssignTasks: No suitable zone found for group " .. group:GetName()) env.info("AssignTasks: No suitable zone found for group " .. group:GetName())
end
end end
end end