recurring command updates fix
This commit is contained in:
Binary file not shown.
@@ -240,36 +240,45 @@ end
|
||||
function Stage:CheckAndUpdateSelf()
|
||||
self._logger:debug("Checking on Stage: " .. self.zoneName)
|
||||
|
||||
local activeCount = 0
|
||||
local dbTables = self:GetStageTables()
|
||||
|
||||
local availableMissions = {}
|
||||
for _, mission in pairs(dbTables.missionsByCode) do
|
||||
local state = mission:getState()
|
||||
|
||||
if state == "ACTIVE" then
|
||||
activeCount = activeCount + 1
|
||||
---@return Array<Mission>
|
||||
local getAvailableMissions = function ()
|
||||
---@type Array<Mission>
|
||||
local availableMissions = {}
|
||||
for _, mission in pairs(dbTables.missionsByCode) do
|
||||
if mission:getState() == "NEW" then
|
||||
table.insert(availableMissions, mission)
|
||||
end
|
||||
end
|
||||
return availableMissions
|
||||
end
|
||||
|
||||
if state == "NEW" then
|
||||
table.insert(availableMissions, mission)
|
||||
---@return number
|
||||
local getActiveMissionsCount = function ()
|
||||
local result = 0
|
||||
for _, mission in pairs(dbTables.missionsByCode) do
|
||||
if mission:getState() == "ACTIVE" then
|
||||
result = result + 1
|
||||
end
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
local max = dbTables.maxMissions
|
||||
local availableMissionsCount = Spearhead.Util.tableLength(availableMissions)
|
||||
local availableMissionsCount = Spearhead.Util.tableLength(getAvailableMissions())
|
||||
local activeCount = getActiveMissionsCount()
|
||||
if activeCount < max and availableMissionsCount > 0 then
|
||||
for i = activeCount+1, max do
|
||||
if availableMissionsCount == 0 then
|
||||
i = max+1 --exits this loop
|
||||
else
|
||||
local index = math.random(1, availableMissionsCount)
|
||||
|
||||
---@type Mission
|
||||
local mission = table.remove(availableMissions, index)
|
||||
local mission = Spearhead.Util.randomFromList(getAvailableMissions()) --[[@as Mission]]
|
||||
if mission then
|
||||
mission:SpawnActive()
|
||||
activeCount = activeCount + 1;
|
||||
else
|
||||
return
|
||||
end
|
||||
availableMissionsCount = availableMissionsCount - 1
|
||||
end
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
--- ZoneMission is missions that are defined by zones in the ME
|
||||
---@class ZoneMission : Mission, OnUnitLostListener
|
||||
---@field private _state MissionState
|
||||
---@field private _missionGroups MissionGroups
|
||||
local ZoneMission = {}
|
||||
|
||||
@@ -137,9 +138,6 @@ function ZoneMission:UpdateState(checkHealth, messageIfDone)
|
||||
if checkHealth == nil then checkHealth = false end
|
||||
if messageIfDone == false then messageIfDone = true end
|
||||
|
||||
if self._state == "COMPLETED" then
|
||||
return
|
||||
end
|
||||
|
||||
if checkHealth == true then
|
||||
local function unitAliveState(unitName)
|
||||
@@ -254,6 +252,11 @@ function ZoneMission:SpawnActive()
|
||||
|
||||
self._logger:info("Activating " .. self.name)
|
||||
|
||||
if self._state == "COMPLETED" or self._state == "ACTIVE" then
|
||||
self._logger:debug("Mission already completed, not spawning")
|
||||
return
|
||||
end
|
||||
|
||||
self._state = "ACTIVE"
|
||||
for _, group in pairs(self._missionGroups.groups) do
|
||||
group:Spawn()
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
---@field missionType MissionType
|
||||
---@field missionTypeDisplay string
|
||||
---@field priority MissionPriority
|
||||
---@field missionBriefing string
|
||||
---@field location Vec2?
|
||||
---@field code string
|
||||
---@field protected state MissionState
|
||||
---@field protected _state MissionState
|
||||
---@field protected _missionBriefing string
|
||||
---@field getState fun(self: Mission): MissionState @Get the mission state
|
||||
---@field protected _logger Logger
|
||||
---@field protected _database Database
|
||||
@@ -37,10 +37,10 @@ function Mission.newSuper(self, zoneName, missionName, missionType, missionBrief
|
||||
self.name = missionName
|
||||
self.missionType = missionType
|
||||
self.priority = priority
|
||||
self.state = "NEW"
|
||||
self._state = "NEW"
|
||||
self._logger = logger
|
||||
self._database = database
|
||||
self.missionBriefing = missionBriefing
|
||||
self._missionBriefing = missionBriefing
|
||||
self.code = tostring(database:GetNewMissionCode())
|
||||
|
||||
self._completeListeners = {}
|
||||
@@ -55,7 +55,7 @@ end
|
||||
|
||||
---@return MissionState
|
||||
function Mission:getState()
|
||||
return self.state
|
||||
return self._state
|
||||
end
|
||||
|
||||
--region PUBLIC
|
||||
|
||||
+1
-1
@@ -52,7 +52,7 @@ SpearheadConfig = {
|
||||
maxMissionStage = 10,
|
||||
|
||||
--Stage starting number
|
||||
startingStage = 0,
|
||||
startingStage = 1,
|
||||
|
||||
---DEBUG logging. Consider keeping this disabled
|
||||
debugEnabled = true
|
||||
|
||||
Reference in New Issue
Block a user