GE Lua Documentation

Press F to search!

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()