mirror of
https://github.com/iTracerFacer/DCS_MissionDev.git
synced 2025-12-03 04:14:46 +00:00
Updated CTLD Init so we can pre seed salvage.
This commit is contained in:
parent
fdd6e06f0c
commit
e0991d750f
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
65
Moose_.lua
65
Moose_.lua
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user