Updated CTLD Init so we can pre seed salvage.

This commit is contained in:
iTracerFacer 2025-11-29 15:42:47 -06:00
parent fdd6e06f0c
commit e0991d750f
3 changed files with 117 additions and 26 deletions

View File

@ -25,13 +25,24 @@ local blueCfg = {
'UH-1H','Mi-8MTV2','Mi-24P','SA342M','SA342L','SA342Minigun','UH-60L','CH-47Fbl1','CH-47F','Mi-17','GazelleAI'
},
-- Optional: drive zone activation from mission flags (preferred: set per-zone below via flag/activeWhen)
MapDraw = {
Enabled = true,
DrawMASHZones = true, -- Enable MASH zone drawing
},
Zones = {
MEDEVAC = {
Enabled = true,
InitialSalvage = 25, -- Starting salvage points for this coalition
MobileMASH = {
Enabled = true,
ZoneRadius = 300,
BeaconFrequency = '32.0 FM',
AnnouncementInterval = 300, -- Announce position every 5 minutes
},
},
MapDraw = {
Enabled = true,
DrawMASHZones = true, -- Enable MASH zone drawing
},
Zones = {
PickupZones = { { name = 'S1', flag = 9001, activeWhen = 0 },
{ name = "S2", flag = 9004, activeWhen = 0 },
{ name = "S3", flag = 9005, activeWhen = 0 },
@ -50,6 +61,7 @@ if blueCfg.Zones and blueCfg.Zones.MASHZones and blueCfg.Zones.MASHZones[1] then
env.info('[DEBUG] blueCfg.Zones.MASHZones[1].name: ' .. tostring(blueCfg.Zones.MASHZones[1].name))
end
ctldBlue = _MOOSE_CTLD:New(blueCfg)
env.info('[CTLD_INIT] After BLUE init, salvage = ' .. tostring((CTLD._salvagePoints and CTLD._salvagePoints[coalition.side.BLUE]) or 'nil'))
local redCfg = {
CoalitionSide = coalition.side.RED,
@ -60,12 +72,23 @@ local redCfg = {
},
-- Optional: drive zone activation for RED via per-zone flag/activeWhen
MapDraw = {
Enabled = true,
DrawMASHZones = true, -- Enable MASH zone drawing
},
Zones = {
MEDEVAC = {
Enabled = true,
InitialSalvage = 25, -- Starting salvage points for this coalition
MobileMASH = {
Enabled = true,
ZoneRadius = 300,
BeaconFrequency = '30.0 FM',
AnnouncementInterval = 1800, -- Announce position every 30 minutes
},
},
MapDraw = {
Enabled = true,
DrawMASHZones = true, -- Enable MASH zone drawing
},
Zones = {
PickupZones = { { name = 'RedLoadZone1', flag = 9101, activeWhen = 0 },
{ name = "RedLoadZone2", flag = 9104, activeWhen = 0 },
{ name = "RedLoadZone3", flag = 9105, activeWhen = 0 },
@ -85,6 +108,7 @@ if redCfg.Zones and redCfg.Zones.MASHZones and redCfg.Zones.MASHZones[1] then
env.info('[DEBUG] redCfg.Zones.MASHZones[1].name: ' .. tostring(redCfg.Zones.MASHZones[1].name))
end
ctldRed = _MOOSE_CTLD:New(redCfg)
env.info('[CTLD_INIT] After RED init, salvage = ' .. tostring((CTLD._salvagePoints and CTLD._salvagePoints[coalition.side.RED]) or 'nil'))
-- Merge catalog into both CTLD instances if catalog was loaded
env.info('[init_mission_dual_coalition] Checking for catalog: '..((_CTLD_EXTRACTED_CATALOG and 'FOUND') or 'NOT FOUND'))
@ -104,6 +128,7 @@ else
env.info('[init_mission_dual_coalition] WARNING: _CTLD_EXTRACTED_CATALOG not found - catalog not loaded!')
env.info('[init_mission_dual_coalition] Available globals: '..((_G._CTLD_EXTRACTED_CATALOG and 'in _G') or 'not in _G'))
end
env.info('[CTLD_INIT] End of init - BLUE salvage: ' .. tostring(CTLD._salvagePoints and CTLD._salvagePoints[coalition.side.BLUE] or 'nil') .. ', RED salvage: ' .. tostring(CTLD._salvagePoints and CTLD._salvagePoints[coalition.side.RED] or 'nil'))
else
env.info('[init_mission_dual_coalition] Moose or CTLD missing; skipping CTLD init')
end

View File

@ -25,7 +25,18 @@ local blueCfg = {
'UH-1H','Mi-8MTV2','Mi-24P','SA342M','SA342L','SA342Minigun','UH-60L','CH-47Fbl1','CH-47F','Mi-17','GazelleAI'
},
-- Optional: drive zone activation from mission flags (preferred: set per-zone below via flag/activeWhen)
MEDEVAC = {
Enabled = true,
InitialSalvage = 25, -- Starting salvage points for this coalition
MobileMASH = {
Enabled = true,
ZoneRadius = 300,
BeaconFrequency = '32.0 FM',
AnnouncementInterval = 300, -- Announce position every 5 minutes
},
},
MapDraw = {
Enabled = true,
DrawMASHZones = true, -- Enable MASH zone drawing
@ -59,6 +70,7 @@ if blueCfg.Zones and blueCfg.Zones.MASHZones and blueCfg.Zones.MASHZones[1] then
env.info('[DEBUG] blueCfg.Zones.MASHZones[1].name: ' .. tostring(blueCfg.Zones.MASHZones[1].name))
end
ctldBlue = _MOOSE_CTLD:New(blueCfg)
env.info('[CTLD_INIT] After BLUE init, salvage = ' .. tostring((CTLD._salvagePoints and CTLD._salvagePoints[coalition.side.BLUE]) or 'nil'))
local redCfg = {
CoalitionSide = coalition.side.RED,
@ -69,6 +81,17 @@ local redCfg = {
},
-- Optional: drive zone activation for RED via per-zone flag/activeWhen
MEDEVAC = {
Enabled = true,
InitialSalvage = 25, -- Starting salvage points for this coalition
MobileMASH = {
Enabled = true,
ZoneRadius = 300,
BeaconFrequency = '30.0 FM',
AnnouncementInterval = 1800, -- Announce position every 30 minutes
},
},
MapDraw = {
Enabled = true,
DrawMASHZones = true, -- Enable MASH zone drawing
@ -94,6 +117,7 @@ if redCfg.Zones and redCfg.Zones.MASHZones and redCfg.Zones.MASHZones[1] then
env.info('[DEBUG] redCfg.Zones.MASHZones[1].name: ' .. tostring(redCfg.Zones.MASHZones[1].name))
end
ctldRed = _MOOSE_CTLD:New(redCfg)
env.info('[CTLD_INIT] After RED init, salvage = ' .. tostring((CTLD._salvagePoints and CTLD._salvagePoints[coalition.side.RED]) or 'nil'))
-- Merge catalog into both CTLD instances if catalog was loaded
env.info('[init_mission_dual_coalition] Checking for catalog: '..((_CTLD_EXTRACTED_CATALOG and 'FOUND') or 'NOT FOUND'))
@ -113,6 +137,7 @@ else
env.info('[init_mission_dual_coalition] WARNING: _CTLD_EXTRACTED_CATALOG not found - catalog not loaded!')
env.info('[init_mission_dual_coalition] Available globals: '..((_G._CTLD_EXTRACTED_CATALOG and 'in _G') or 'not in _G'))
end
env.info('[CTLD_INIT] End of init - BLUE salvage: ' .. tostring(CTLD._salvagePoints and CTLD._salvagePoints[coalition.side.BLUE] or 'nil') .. ', RED salvage: ' .. tostring(CTLD._salvagePoints and CTLD._salvagePoints[coalition.side.RED] or 'nil'))
else
env.info('[init_mission_dual_coalition] Moose or CTLD missing; skipping CTLD init')
end

View File

@ -1,4 +1,4 @@
env.info('*** MOOSE GITHUB Commit Hash ID: 2025-11-27T18:07:18+01:00-0abb0db2a3e46a509bf3f05ec4960fa84a6fb43c ***')
env.info('*** MOOSE GITHUB Commit Hash ID: 2025-11-28T12:49:54+01:00-7fa360f32c58b62a7c65f093054f17ba638adc80 ***')
if not MOOSE_DEVELOPMENT_FOLDER then
MOOSE_DEVELOPMENT_FOLDER='Scripts'
end
@ -37135,7 +37135,6 @@ TargetIsScenery=true
TargetType="Scenery"
TargetSceneryObject=TargetUNIT
self:T("***** Target is Scenery and TargetUNIT is SCENERY object!")
UTILS.PrintTableToLog(TargetSceneryObject)
end
TargetUnitCoalition=_SCORINGCoalition[TargetCoalition]
TargetUnitCategory=_SCORINGCategory[TargetCategory]
@ -37294,6 +37293,7 @@ local Score=ScoreZoneData.Score
if TargetUNIT and ScoreZone:IsVec2InZone(TargetUNIT:GetVec2())then
local PlayerName=Event.IniPlayerName or"Ghost"
local Player=self.Players[PlayerName]
if Player then
Player.Score=Player.Score+Score
Player.Score=Player.Score+self.ScoreIncrementOnHit
MESSAGE:NewType(self.DisplayMessagePrefix.."hit in zone '"..ScoreZone:GetName().."'."..
@ -37306,6 +37306,7 @@ end
end
end
end
end
function SCORING:_EventOnDeadOrCrash(Event)
self:F({Event})
local TargetUnit=nil
@ -72457,7 +72458,7 @@ self.helo=Spawn
UsesAliveGroup=true
delay=1
else
local Spawn=SPAWN:NewWithAlias(self.helogroupname,self.alias)
Spawn=SPAWN:NewWithAlias(self.helogroupname,self.alias)
Spawn:InitModex(self.modex)
end
if UsesAliveGroup==false and self.takeoff==SPAWN.Takeoff.Air then
@ -72477,6 +72478,7 @@ else
self:E(string.format("ERROR: No uncontrolled (alive) rescue helo group with name %s could be found!",self.helogroupname))
return
end
end
elseif UsesAliveGroup==false then
self.helo=Spawn:SpawnAtAirbase(self.airbase,self.takeoff,nil,AIRBASE.TerminalType.HelicopterUsable)
if self.takeoff==SPAWN.Takeoff.Runway then
@ -72487,7 +72489,6 @@ elseif self.takeoff==SPAWN.Takeoff.Cold then
delay=60
end
end
end
self.followset=SET_GROUP:New()
self.followset:AddGroup(self.helo)
self.HeloFuel0=self.helo:GetFuel()
@ -74951,7 +74952,7 @@ CTLD.FixedWingTypes={
["Mosquito"]="Mosquito",
["C-130J-30"]="C-130J-30",
}
CTLD.version="1.3.39"
CTLD.version="1.3.40"
function CTLD:New(Coalition,Prefixes,Alias)
local self=BASE:Inherit(self,FSM:New())
BASE:T({Coalition,Prefixes,Alias})
@ -75308,6 +75309,12 @@ if cargo.Name==Name then
return cargo
end
end
for _,_cargo in pairs(self.Cargo_Statics)do
local cargo=_cargo
if cargo.Name==Name then
return cargo
end
end
return nil
end
function CTLD:AddAllowedFixedWingType(typename)
@ -75737,14 +75744,16 @@ self:_GetCrates(Group,Unit,cargoObj,total,false,false,true)
return self
end
function CTLD:_AddCrateQuantityMenus(Group,Unit,parentMenu,cargoObj,stockSummary)
self:T("_AddCrateQuantityMenus "..cargoObj.Name)
local needed=cargoObj:GetCratesNeeded()or 1
local stockEntry=self:_GetCrateStockEntry(cargoObj,stockSummary)
local stock=nil
local stock=0
if stockEntry and type(stockEntry.Stock)=="number"then
stock=stockEntry.Stock
else
stock=cargoObj:GetStock()
end
self:T("_AddCrateQuantityMenus "..cargoObj.Name.." Stock: "..tostring(stock))
local maxQuantity=self.maxCrateMenuQuantity or 1
local availableSets=nil
if type(stock)=="number"and stock>=0 then
@ -75758,6 +75767,7 @@ maxQuantity=availableSets
end
end
maxQuantity=math.floor(maxQuantity)
self:T("_AddCrateQuantityMenus maxQuantity "..maxQuantity)
if maxQuantity<1 then
return self
end
@ -75793,6 +75803,7 @@ allowLoad=false
maxQuantity=1
end
end
self:T("_AddCrateQuantityMenus maxQuantity "..maxQuantity.." allowLoad "..tostring(allowLoad))
local maxMassSets=nil
if Unit then
local maxload=self:_GetMaxLoadableMass(Unit)
@ -75808,10 +75819,12 @@ maxQuantity=maxMassSets
end
end
end
self:T("_AddCrateQuantityMenus maxQuantity "..maxQuantity.." allowLoad "..tostring(allowLoad))
if maxQuantity<1 then
return self
end
if maxQuantity==1 then
self:T("_AddCrateQuantityMenus maxQuantity "..maxQuantity.." Menu for MaxQ=1 ".."parentMenu.MenuText = "..parentMenu.MenuText)
MENU_GROUP_COMMAND:New(Group,"Get",parentMenu,self._GetCrateQuantity,self,Group,Unit,cargoObj,1)
local canLoad=(allowLoad and(not capacitySets or capacitySets>=1)and(not maxMassSets or maxMassSets>=1))
if canLoad then
@ -75825,10 +75838,13 @@ msg="Crate limit reached"
end
MENU_GROUP_COMMAND:New(Group,msg,parentMenu,self._SendMessage,self,msg,10,false,Group)
end
parentMenu:Refresh()
return self
end
for quantity=1,maxQuantity do
self:T("_AddCrateQuantityMenus maxQuantity "..maxQuantity.." Menu for MaxQ>1")
local label=tostring(quantity)
self:T("_AddCrateQuantityMenus Label "..label)
local qMenu=MENU_GROUP:New(Group,label,parentMenu)
MENU_GROUP_COMMAND:New(Group,"Get",qMenu,self._GetCrateQuantity,self,Group,Unit,cargoObj,quantity)
local canLoad=(allowLoad and(not capacitySets or capacitySets>=quantity)and(not maxMassSets or maxMassSets>=quantity))
@ -77618,7 +77634,12 @@ if cargoObj.DontShowInMenu then
return
end
local needed=cargoObj:GetCratesNeeded()or 1
local txt=string.format("%d crate%s %s (%dkg)",needed,needed==1 and""or"s",cargoObj.Name,cargoObj.PerCrateMass or 0)
local txt
if needed>1 then
txt=string.format("%d crate%s %s (%dkg)",needed,needed==1 and""or"s",cargoObj.Name,cargoObj.PerCrateMass or 0)
else
txt=string.format("%s (%dkg)",cargoObj.Name,cargoObj.PerCrateMass or 0)
end
if cargoObj.Location then txt=txt.."[R]"end
if self.showstockinmenuitems then
local suffix=self:_FormatCrateStockSuffix(cargoObj,crateStockSummary)
@ -77628,7 +77649,7 @@ local mSet=MENU_GROUP:New(_group,txt,parentMenu)
_group.CTLD_CrateMenus[cargoObj.Name]=mSet
self:_AddCrateQuantityMenus(_group,_unit,mSet,cargoObj,crateStockSummary)
end
if self.usesubcats then
if self.usesubcats==true then
local subcatmenus={}
for catName,_ in pairs(self.subcats)do
subcatmenus[catName]=MENU_GROUP:New(_group,catName,cratesmenu)
@ -77656,7 +77677,12 @@ end
for _,cargoObj in pairs(self.Cargo_Crates)do
if not cargoObj.DontShowInMenu then
local needed=cargoObj:GetCratesNeeded()or 1
local txt=string.format("%d crate%s %s (%dkg)",needed,needed==1 and""or"s",cargoObj.Name,cargoObj.PerCrateMass or 0)
local txt
if needed>1 then
txt=string.format("%d crate%s %s (%dkg)",needed,needed==1 and""or"s",cargoObj.Name,cargoObj.PerCrateMass or 0)
else
txt=string.format("%s (%dkg)",cargoObj.Name,cargoObj.PerCrateMass or 0)
end
if cargoObj.Location then txt=txt.."[R]"end
local stock=cargoObj:GetStock()
if stock>=0 and self.showstockinmenuitems then txt=txt.."["..stock.."]"end
@ -77666,7 +77692,12 @@ end
for _,cargoObj in pairs(self.Cargo_Statics)do
if not cargoObj.DontShowInMenu then
local needed=cargoObj:GetCratesNeeded()or 1
local txt=string.format("%d crate%s %s (%dkg)",needed,needed==1 and""or"s",cargoObj.Name,cargoObj.PerCrateMass or 0)
local txt
if needed>1 then
txt=string.format("%d crate%s %s (%dkg)",needed,needed==1 and""or"s",cargoObj.Name,cargoObj.PerCrateMass or 0)
else
txt=string.format("%s (%dkg)",cargoObj.Name,cargoObj.PerCrateMass or 0)
end
if cargoObj.Location then txt=txt.."[R]"end
local stock=cargoObj:GetStock()
if stock>=0 and self.showstockinmenuitems then txt=txt.."["..stock.."]"end
@ -77677,7 +77708,12 @@ else
for _,cargoObj in pairs(self.Cargo_Crates)do
if not cargoObj.DontShowInMenu then
local needed=cargoObj:GetCratesNeeded()or 1
local txt=string.format("%d crate%s %s (%dkg)",needed,needed==1 and""or"s",cargoObj.Name,cargoObj.PerCrateMass or 0)
local txt
if needed>1 then
txt=string.format("%d crate%s %s (%dkg)",needed,needed==1 and""or"s",cargoObj.Name,cargoObj.PerCrateMass or 0)
else
txt=string.format("%s (%dkg)",cargoObj.Name,cargoObj.PerCrateMass or 0)
end
if cargoObj.Location then txt=txt.."[R]"end
local stock=cargoObj:GetStock()
if stock>=0 and self.showstockinmenuitems then txt=txt.."["..stock.."]"end
@ -77687,7 +77723,12 @@ end
for _,cargoObj in pairs(self.Cargo_Statics)do
if not cargoObj.DontShowInMenu then
local needed=cargoObj:GetCratesNeeded()or 1
local txt=string.format("%d crate%s %s (%dkg)",needed,needed==1 and""or"s",cargoObj.Name,cargoObj.PerCrateMass or 0)
local txt
if needed>1 then
txt=string.format("%d crate%s %s (%dkg)",needed,needed==1 and""or"s",cargoObj.Name,cargoObj.PerCrateMass or 0)
else
txt=string.format("%s (%dkg)",cargoObj.Name,cargoObj.PerCrateMass or 0)
end
if cargoObj.Location then txt=txt.."[R]"end
local stock=cargoObj:GetStock()
if stock>=0 and self.showstockinmenuitems then txt=txt.."["..stock.."]"end