updateUnlockStatus
Definition
-- @/lua/ge/extensions/gameplay/missions/unlocks.lua:22
-- the "main" mission unlock caluclation. Sets the Startable and Visible flags and infos for missions.
local function updateUnlockStatus(missions)
if career_modules_branches_leagues then career_modules_branches_leagues.clearLeagueUnlockCache() end
missions = missions or gameplay_missions_missions.get()
local counts = {startable = 0, visible = 0}
local referencedMissions = {}
local careerActive = career_career and career_career.isActive()
local missionIdsById = {}
for _, mission in ipairs(missions) do
local startableInfo = conditionMet(mission.startCondition or deepcopy(conditionTypes['always']))
mission.unlocks = mission.unlocks or {}
mission.unlocks.startable = startableInfo.met
mission.unlocks.startableDetails = startableInfo
mission.unlocks.hideStartableDetails = startableInfo.hidden
if mission.careerSetup.showInCareer and mission.careerSetup.showInFreeroam and not careerActive then
mission.unlocks.startable = true
mission.unlocks.startableDetails = nil
end
counts.startable = counts.startable + (mission.unlocks.startable and 1 or 0)
end
for _, mission in ipairs(missions) do
local isVisible = true
mission.unlocks.visible = false
if careerActive then
isVisible = mission.careerSetup.showInCareer
else
isVisible = mission.careerSetup.showInFreeroam
end
--isVisible = true
if isVisible then
if mission.visibleCondition.type == 'automatic' then
if not mission.unlocks.backward or #mission.unlocks.backward == 0 then
mission.unlocks.visible = true
else
for _, bId in ipairs(mission.unlocks.backward or {}) do
local back = gameplay_missions_missions.getMissionById(bId)
if back then
mission.unlocks.visible = back.unlocks.startable or mission.unlocks.visible
end
end
end
if mission.careerSetup.showInCareer and mission.careerSetup.showInFreeroam and not careerActive then
mission.unlocks.visible = true
end
else
local visibleInfo = conditionMet(mission.visibleCondition or deepcopy(conditionTypes['always']))
mission.unlocks.visible = visibleInfo.met
end
end
counts.visible = counts.visible + (mission.unlocks.visible and 1 or 0)
end
log("D", "", "Processed unlock status of missions: ".. counts.startable.."/"..#missions .. " startable missions, " .. counts.visible.."/"..#missions.." visible missions.")
end
Callers
@/lua/ge/extensions/gameplay/missions/missions.lua
gameplay_missions_unlocks.setUnlockForwardBackward(missions)
gameplay_missions_unlocks.updateUnlockStatus(missions)
end
@/lua/ge/extensions/gameplay/missions/progress.lua
if not batchMode then
gameplay_missions_unlocks.updateUnlockStatus()
local unlockMissionsAfter = gameplay_missions_unlocks.getSimpleUnlockedStatus()