This commit is contained in:
2024-09-25 00:33:08 +02:00
parent 0a1c6a7ee1
commit 0a0bdafcac
7 changed files with 90 additions and 13 deletions
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
+47
View File
@@ -1491,6 +1491,47 @@ do
end
end
do --COMMANDS
do -- status updates
local onStatusRequestReceivedListeners = {}
---comment
---@param listener table object with OnStatusRequestReceived(self, groupId)
SpearheadEvents.AddOnStatusRequestReceivedListener = function(listener)
if type(listener) ~= "table" then
SpearheadLogger:warn("Unit lost Event listener not of type table/object")
return
end
table.insert(onStatusRequestReceivedListeners, listener)
end
local triggerStatusRequestReceived = function (groupId)
for _, callable in pairs(onStatusRequestReceivedListeners) do
local succ, err = pcall(function ()
callable:OnStatusRequestReceived(groupId)
end)
end
end
SpearheadEvents.AddCommandsToGroup = function(groupId)
local base = "MISSIONS"
if groupId then
missionCommands.addCommandForGroup(groupId, "Stage Status", {}, triggerStatusRequestReceived, groupId)
end
end
--Single player purpose
for i = 1, 2 do
for _, unit in pairs(coalition.getPlayers(i)) do
local groupId = unit:getGroup():getID()
SpearheadEvents.AddCommandsToGroup(groupId)
end
end
end
end
local e = {}
function e:onEvent(event)
@@ -1529,6 +1570,12 @@ do
end
end
end
if event.id == world.event.S_EVENT_PLAYER_ENTER_UNIT then
env.info("blaat player entering unit")
local groupId = event.initiator:getGroup():getID()
SpearheadEvents.AddCommandsToGroup(groupId)
end
end
world.addEventHandler(e)
+17 -10
View File
@@ -298,7 +298,7 @@ do -- DB
local baseId = tostring(airbase:getID())
local point = airbase:getPoint()
if isAirbaseInZone[tostring(baseId) or "something" ] == true then
if isAirbaseInZone[tostring(baseId) or "something" ] == true and airbase:getDesc().Category == Airbase.Category.AIRDROME then
o.tables.redAirbaseGroupsPerAirbase[baseId] = {}
o.tables.blueAirbaseGroupsPerAirbase[baseId] = {}
local groups = Spearhead.DcsUtil.areGroupsInCustomZone(all_groups, { x = point.x, z = point.z, radius = 6600 })
@@ -309,8 +309,10 @@ do -- DB
if object then
if object:getCoalition() == coalition.side.RED then
table.insert(o.tables.redAirbaseGroupsPerAirbase[baseId], groupName)
is_group_taken[groupName] = true
elseif object:getCoalition() == coalition.side.BLUE then
table.insert(o.tables.blueAirbaseGroupsPerAirbase[baseId], groupName)
is_group_taken[groupName] = true
end
end
else
@@ -330,25 +332,24 @@ do -- DB
end
end
o.tables.miscGroupsInStage = {}
local loadMiscGroupsInStage = function ()
o.tables.miscGroupsInStages = {}
local loadMiscGroupsInStages = function ()
local all_groups = getAvailableGroups()
for _, stage_zone in pairs(o.tables.stage_zones) do
o.tables.miscGroupsInStage[stage_zone] = {}
o.tables.miscGroupsInStages[stage_zone] = {}
local groups = Spearhead.DcsUtil.getGroupsInZone(all_groups, stage_zone)
for _, groupName in pairs(groups) do
if Spearhead.DcsUtil.IsGroupStatic(groupName) == true then
local object = StaticObject.getByName(groupName)
if object and object:getCoalition() ~= coalition.side.NEUTRAL then
is_group_taken[groupName] = true
table.insert(o.tables.miscGroupsInStage[stage_zone], groupName)
table.insert(o.tables.miscGroupsInStages[stage_zone], groupName)
end
else
local group = Group.getByName(groupName)
if group and group:getCoalition() ~= coalition.side.NEUTRAL then
is_group_taken[groupName] = true
table.insert(o.tables.miscGroupsInStage[stage_zone], groupName)
table.insert(o.tables.miscGroupsInStages[stage_zone], groupName)
end
end
end
@@ -360,7 +361,9 @@ do -- DB
loadRandomMissionzoneUnits()
loadFarpGroups()
loadAirbaseGroups()
loadMiscGroupsInStage()
loadMiscGroupsInStages()
Logger:debug(o.tables.miscGroupsInStages)
local cleanup = function () --CLean up all groups that are now managed inside zones by spearhead
@@ -546,12 +549,16 @@ do -- DB
o.getRedGroupsAtAirbase = function (self, airbaseId)
local baseId = tostring(airbaseId)
return self.tables.redAirbaseGroupsPerAirbase[baseId]
return self.tables.redAirbaseGroupsPerAirbase[baseId] or {}
end
o.getBlueGroupsAtAirbase = function (self, airbaseId)
local baseId = tostring(airbaseId)
return self.tables.blueAirbaseGroupsPerAirbase[baseId]
return self.tables.blueAirbaseGroupsPerAirbase[baseId] or {}
end
o.getMiscGroupsAtStage = function(self, stageName)
return self.tables.miscGroupsInStages[stageName] or {}
end
o.GetNewMissionCode = function (self)
+26 -3
View File
@@ -27,7 +27,7 @@ do --init STAGE DIRECTOR
o.stageNumber = orderNumber
o.database = database
o.logger = logger
o.db = {}
o.db.missions = {}
o.db.sams = {}
@@ -35,6 +35,7 @@ do --init STAGE DIRECTOR
o.db.blueAirbasegroups = {}
o.db.airbaseIds = {}
o.db.farps = {}
o.activeStage = 0
o.preActivated = false
do --Init Stage
@@ -82,7 +83,6 @@ do --init STAGE DIRECTOR
for _, airbaseId in pairs(airbaseIds) do
for _, groupName in pairs(database:getRedGroupsAtAirbase(airbaseId)) do
logger:debug("blaat)")
table.insert(o.db.redAirbasegroups, groupName)
end
@@ -117,7 +117,7 @@ do --init STAGE DIRECTOR
end
end
logger:debug("blaat Pre-activating stage with airbase groups amount: " .. Spearhead.Util.tableLength(self.db.redAirbasegroups))
self.logger:debug("Pre-activating stage with airbase groups amount: " .. Spearhead.Util.tableLength(self.db.redAirbasegroups))
for _ , groupName in pairs(self.db.redAirbasegroups) do
Spearhead.DcsUtil.SpawnGroupTemplate(groupName)
@@ -129,6 +129,18 @@ do --init STAGE DIRECTOR
self:PreActivate()
end
local miscGroups = self.database:getMiscGroupsAtStage(self.zoneName)
self.logger:debug("Activating Misc groups for zone: " .. Spearhead.Util.tableLength(miscGroups))
for _, groupName in pairs(miscGroups) do
Spearhead.DcsUtil.SpawnGroupTemplate(groupName)
end
for _, mission in pairs(self.db.missions) do
if mission.missionType == Spearhead.internal.Mission.MissionType.DEAD then
mission:Activate()
end
end
--[[
TODO: Activate Stage
]]--
@@ -221,7 +233,18 @@ do --init STAGE DIRECTOR
o.ManageStage = function(self)
end
o.OnStatusRequestReceived = function(self, groupId)
trigger.action.outTextForGroup("Status Update incoming... ")
end
o.OnStageNumberChanged = function (self, number)
if self.activeStage == number then --only activate once for a stage
return
end
self.activeStage = number
if Spearhead.capInfo.IsCapActiveWhenZoneIsActive(self.zoneName, number) == true then
self:PreActivate()
end