Пример #1
0
        public static void Invoke(pWardenObjectiveState oldState, pWardenObjectiveState newState)
        {
            bool mainComplete   = oldState.main_status != newState.main_status && newState.main_status == eWardenObjectiveStatus.WardenObjectiveItemSolved;
            bool secondComplete = oldState.second_status != newState.second_status && newState.second_status == eWardenObjectiveStatus.WardenObjectiveItemSolved;
            bool thirdComplete  = oldState.third_status != newState.third_status && newState.third_status == eWardenObjectiveStatus.WardenObjectiveItemSolved;

            var blocks = EventListenerDataBlock.GetAllBlocks();
            var exp    = RundownManager.GetActiveExpeditionData();

            foreach (var block in blocks)
            {
                if (block.Type == EventListenerType.ObjectiveComplete)
                {
                    foreach (var expedition in block.ForExpeditions)
                    {
                        if (expedition.ExpeditionIndex == exp.expeditionIndex && expedition.Tier == exp.tier)
                        {
                            if ((!block.CompleteObjective_Layers.Contains(LG_LayerType.MainLayer) || mainComplete) && (!block.CompleteObjective_Layers.Contains(LG_LayerType.SecondaryLayer) || secondComplete) && (!block.CompleteObjective_Layers.Contains(LG_LayerType.ThirdLayer) || thirdComplete))
                            {
                                EventSequenceManager.StartSequence(block.EventSequenceOnActivate);
                            }

                            break;
                        }
                    }
                }
            }
        }
Пример #2
0
        public static void Invoke(ES_HibernateWakeUp __instance)
        {
            var blocks = EventListenerDataBlock.GetAllBlocks();
            var exp    = RundownManager.GetActiveExpeditionData();

            foreach (var block in blocks)
            {
                if (block.Type == EventListenerType.EnemyWakeUp)
                {
                    foreach (var expedition in block.ForExpeditions)
                    {
                        if (expedition.ExpeditionIndex == exp.expeditionIndex && expedition.Tier == exp.tier)
                        {
                            var enemy = __instance.m_enemyAgent;
                            if (block.EnemyWakeup_EnemyID == enemy.EnemyDataID)
                            {
                                var lg_area = enemy.CourseNode.m_area;
                                var area    = lg_area.m_navInfo.Suffix.ToLower();

                                var lg_zone = lg_area.m_zone;
                                var zone    = lg_zone.LocalIndex;

                                var lg_layer = lg_zone.Layer;
                                var layer    = lg_layer.m_type;

                                bool valid = block.EnemyWakeUp_ForLayers.Count == 0;
                                foreach (var validLayer in block.EnemyWakeUp_ForLayers)
                                {
                                    if (validLayer.Layer == layer)
                                    {
                                        valid = validLayer.Whitelist;
                                        foreach (var validZone in validLayer.Zones)
                                        {
                                            if (validZone.ZoneIndex == zone)
                                            {
                                                valid = validZone.Whitelist;
                                                foreach (var validArea in validZone.Areas)
                                                {
                                                    if (validArea.AreaName.ToLower() == area)
                                                    {
                                                        valid = validArea.Whitelist;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }

                                if (valid)
                                {
                                    EventSequenceManager.StartSequence(block.EventSequenceOnActivate);
                                }
                            }
                            break;
                        }
                    }
                }
            }
        }
        public static bool Invoke(CM_ExpeditionWindow __instance, bool visible, bool inMenuBar)
        {
            __instance.gameObject.SetActive(visible);
            __instance.m_joinWindow.SetVisible(!inMenuBar && !SNetwork.SNet.IsInLobby);
            __instance.m_hostButton.SetVisible(!inMenuBar && !SNetwork.SNet.IsInLobby && (__instance.m_status != eExpeditionIconStatus.TierLocked && __instance.m_status != eExpeditionIconStatus.LockedAndScrambled) && __instance.m_status != eExpeditionIconStatus.TierLockedFinishedAnyway);
            __instance.m_changeExpeditionButton.SetVisible(SNetwork.SNet.IsMaster && !__instance.m_hostButton.IsVisible && (!inMenuBar && SNetwork.SNet.IsInLobby) && (RundownManager.ActiveExpedition != null && __instance.m_status != eExpeditionIconStatus.TierLocked && __instance.m_status != eExpeditionIconStatus.LockedAndScrambled) && __instance.m_status != eExpeditionIconStatus.TierLockedFinishedAnyway);
            __instance.m_matchButton.SetVisible(!inMenuBar && !SNetwork.SNet.IsInLobby && (__instance.m_status != eExpeditionIconStatus.TierLocked && __instance.m_status != eExpeditionIconStatus.LockedAndScrambled) && __instance.m_status != eExpeditionIconStatus.TierLockedFinishedAnyway);
            __instance.m_bottomStripes.SetActive(!__instance.m_hostButton.IsVisible && !__instance.m_changeExpeditionButton.IsVisible);
            if (visible)
            {
                var allCompletionData = CompletionData.LoadFromCache();
                var completionData    = allCompletionData.GetData(__instance.m_tier, __instance.m_expIndex);

                __instance.m_title.gameObject.SetActive(false);
                __instance.m_wardenObjective.gameObject.SetActive(false);
                __instance.m_wardenIntel.gameObject.SetActive(false);
                __instance.m_depth.gameObject.SetActive(false);
                CoroutineManager.BlinkIn(__instance.m_title.gameObject, 0.3f);
                CoroutineManager.BlinkIn(__instance.m_wardenObjective.gameObject, 1.1f);
                CoroutineManager.BlinkIn(__instance.m_wardenIntel.gameObject, 2.5f);
                CoroutineManager.BlinkIn(__instance.m_depth.gameObject, 3f);
                float delay1 = 1.8f;
                float num1   = 0.4f;
                __instance.UpdateProgression();
                SetupIcon(__instance.m_sectorIconMain, completionData.highCompletes > 0, LG_LayerType.MainLayer);
                __instance.m_sectorIconMain.SetVisible(false);
                __instance.m_sectorIconSecond.SetVisible(false);
                __instance.m_sectorIconThird.SetVisible(false);
                __instance.m_sectorIconAllCompleted.SetVisible(false);
                __instance.m_sectorIconMain.StopBlink();
                __instance.m_sectorIconSecond.StopBlink();
                __instance.m_sectorIconThird.StopBlink();
                __instance.m_sectorIconAllCompleted.StopBlink();
                __instance.m_sectorIconMain.BlinkIn(delay1);
                float delay2 = delay1 + num1;
                if (RundownManager.HasSecondaryLayer(__instance.m_data))
                {
                    SetupIcon(__instance.m_sectorIconSecond, completionData.extremeCompletes > 0, LG_LayerType.SecondaryLayer);
                    __instance.m_sectorIconSecond.BlinkIn(delay2);
                    delay2 += num1;
                }
                if (RundownManager.HasThirdLayer(__instance.m_data))
                {
                    SetupIcon(__instance.m_sectorIconThird, completionData.overloadCompletes > 0, LG_LayerType.ThirdLayer);
                    __instance.m_sectorIconThird.BlinkIn(delay2);
                    delay2 += num1;
                }
                if (completionData.highCompletes > 0 && RundownManager.HasSecondaryLayer(__instance.m_data) && completionData.extremeCompletes > 0 && RundownManager.HasThirdLayer(__instance.m_data) && completionData.overloadCompletes > 0 && completionData.peCompletes > 0)
                {
                    __instance.m_sectorIconAllCompleted.BlinkIn(delay2);
                    float num2 = delay2 + num1;
                }
            }
            __instance.IsVisible = visible;

            return(false);
        }
Пример #4
0
        private void Update()
        {
            _discord.RunCallbacks();
            if (_currentTime <= DateTime.Now && SNet.IsInLobby)
            {
                expPackage = RundownManager.GetActiveExpeditionData();

                SetActivity(GetActivity());
                // Recheck status every 10 seconds.
                _currentTime = DateTime.Now.AddSeconds(10);
            }
        }
        public static void Invoke(LG_SecurityDoor __instance, pDoorState state)
        {
            bool valid;
            EventListenerType validListenerType;

            switch (state.status)
            {
            case eDoorStatus.Open:
                valid             = true;
                validListenerType = EventListenerType.SecurityDoorOpen;
                break;

            case eDoorStatus.Unlocked:
                valid             = true;
                validListenerType = EventListenerType.SecurityDoorUnlock;
                break;

            case eDoorStatus.ChainedPuzzleActivated:
                valid             = true;
                validListenerType = EventListenerType.SecurityDoorActivateChainedPuzzle;
                break;

            default:
                valid             = false;
                validListenerType = (EventListenerType)0;
                break;
            }

            if (valid)
            {
                var blocks = EventListenerDataBlock.GetAllBlocks();
                var exp    = RundownManager.GetActiveExpeditionData();
                foreach (var block in blocks)
                {
                    if (block.Type == validListenerType)
                    {
                        foreach (var expedition in block.ForExpeditions)
                        {
                            if (expedition.ExpeditionIndex == exp.expeditionIndex && expedition.Tier == exp.tier)
                            {
                                var data = __instance.LinkedToZoneData;
                                if (__instance.LinksToLayerType == block.SecurityDoor_Layer && data.LocalIndex == block.SecurityDoor_ZoneIndex && data.BuildFromLocalIndex == block.SecurityDoor_BuildFromIndex)
                                {
                                    EventSequenceManager.StartSequence(block.EventSequenceOnActivate);
                                }
                                break;
                            }
                        }
                    }
                }
            }
        }
        public static void Invoke(LG_ComputerTerminal __instance)
        {
            if (__instance.m_chainPuzzleForWardenObjective != null)
            {
                __instance.m_chainPuzzleForWardenObjective.add_OnPuzzleSolved(new Action(() =>
                {
                    __instance.ObjectiveItemSolved = true;
                    Invoke(__instance);
                }));
                return;
            }

            var blocks = EventListenerDataBlock.GetAllBlocks();
            var exp    = RundownManager.GetActiveExpeditionData();

            foreach (var block in blocks)
            {
                if (block.Type == EventListenerType.ObjectiveItemSolved)
                {
                    foreach (var expedition in block.ForExpeditions)
                    {
                        if (expedition.ExpeditionIndex == exp.expeditionIndex && expedition.Tier == exp.tier)
                        {
                            if (__instance.SpawnNode.LayerType == block.ObjectiveItemSolved_Layer)
                            {
                                var items = WardenObjectiveManager.Current.m_objectiveItemCollection[__instance.SpawnNode.LayerType];
                                int count = 0;

                                foreach (var item in items)
                                {
                                    if (item != null && item.ObjectiveItemSolved)
                                    {
                                        count++;
                                    }
                                }

                                if (block.ObjectiveItemSolved_RequiredCount == count)
                                {
                                    EventSequenceManager.StartSequence(block.EventSequenceOnActivate);
                                }
                            }
                            break;
                        }
                    }
                }
            }
        }
Пример #7
0
        public static void Invoke(LG_PickupItem_Sync __instance, pPickupItemState oldState, pPickupItemState newState)
        {
            if (oldState.status != newState.status && newState.status == ePickupItemStatus.PickedUp)
            {
                AIG_CourseNode spawnNode = __instance.item.TryCast <CarryItemPickup_Core>()?.SpawnNode ?? __instance.item.TryCast <GenericSmallPickupItem_Core>()?.SpawnNode;
                if (spawnNode == null)
                {
                    return;
                }

                var blocks = EventListenerDataBlock.GetAllBlocks();
                var exp    = RundownManager.GetActiveExpeditionData();

                foreach (var block in blocks)
                {
                    if (block.Type == EventListenerType.ObjectiveItemSolved)
                    {
                        foreach (var expedition in block.ForExpeditions)
                        {
                            if (expedition.ExpeditionIndex == exp.expeditionIndex && expedition.Tier == exp.tier)
                            {
                                if (spawnNode.LayerType == block.ObjectiveItemSolved_Layer)
                                {
                                    var items = WardenObjectiveManager.Current.m_objectiveItemCollection[spawnNode.LayerType];
                                    int count = 0;

                                    foreach (var item in items)
                                    {
                                        if (item != null && item.ObjectiveItemSolved)
                                        {
                                            count++;
                                        }
                                    }

                                    if (block.ObjectiveItemSolved_RequiredCount == count)
                                    {
                                        EventSequenceManager.StartSequence(block.EventSequenceOnActivate);
                                    }
                                }
                                break;
                            }
                        }
                    }
                }
            }
        }
Пример #8
0
        public static void Invoke(CM_ExpeditionIcon_New __instance, ref eExpeditionIconStatus status, ref string mainFinishCount, ref string secondFinishCount, ref string thirdFinishCount, ref string allFinishedCount)
        {
            if (status == eExpeditionIconStatus.NotPlayed)
            {
                var allCompletionData = CompletionData.LoadFromCache();
                var completionData    = allCompletionData.GetData(__instance.Tier, __instance.ExpIndex);

                var expDataBlock = __instance.DataBlock;

                if (completionData.highCompletes > 0 || completionData.extremeCompletes > 0 || completionData.overloadCompletes > 0 || completionData.peCompletes > 0)
                {
                    status = eExpeditionIconStatus.PlayedAndFinished;
                }

                mainFinishCount   = completionData.highCompletes.ToString();
                secondFinishCount = RundownManager.HasSecondaryLayer(expDataBlock) ? completionData.extremeCompletes.ToString() : "-";
                thirdFinishCount  = RundownManager.HasThirdLayer(expDataBlock) ? completionData.overloadCompletes.ToString() : "-";
                allFinishedCount  = RundownManager.HasAllCompletetionPossibility(expDataBlock) ? completionData.peCompletes.ToString() : "-";
            }
        }
Пример #9
0
        public static void Invoke(LG_PowerGenerator_Core __instance, pPowerGeneratorState oldState, pPowerGeneratorState newState)
        {
            if (oldState.status != newState.status && newState.status == ePowerGeneratorStatus.Powered && __instance.ObjectiveItemSolved)
            {
                var blocks = EventListenerDataBlock.GetAllBlocks();
                var exp    = RundownManager.GetActiveExpeditionData();

                foreach (var block in blocks)
                {
                    if (block.Type == EventListenerType.ObjectiveItemSolved)
                    {
                        foreach (var expedition in block.ForExpeditions)
                        {
                            if (expedition.ExpeditionIndex == exp.expeditionIndex && expedition.Tier == exp.tier)
                            {
                                if (__instance.SpawnNode.LayerType == block.ObjectiveItemSolved_Layer)
                                {
                                    var items = WardenObjectiveManager.Current.m_objectiveItemCollection[__instance.SpawnNode.LayerType];
                                    int count = 0;

                                    foreach (var item in items)
                                    {
                                        if (item != null && item.ObjectiveItemSolved)
                                        {
                                            count++;
                                        }
                                    }

                                    if (block.ObjectiveItemSolved_RequiredCount == count)
                                    {
                                        EventSequenceManager.StartSequence(block.EventSequenceOnActivate);
                                    }
                                }
                                break;
                            }
                        }
                    }
                }
            }
        }
        public static void Invoke()
        {
            GameInfo.State = GameState.InLevel;

            foreach (var light in UnityEngine.Object.FindObjectsOfType <LevelGeneration.LG_Light>())
            {
                if (light.AvailableInLevel)
                {
                    if (light.gameObject.GetComponent <Lights.LightController>() == null)
                    {
                        light.gameObject.AddComponent <Lights.LightController>();
                    }
                }
            }

            var blocks = EventListenerDataBlock.GetAllBlocks();
            var exp    = RundownManager.GetActiveExpeditionData();

            foreach (var block in blocks)
            {
                if (block.Type == EventListenerType.LevelLoad)
                {
                    foreach (var expedition in block.ForExpeditions)
                    {
                        if (expedition.ExpeditionIndex == exp.expeditionIndex && expedition.Tier == exp.tier)
                        {
                            Log.Message($"Start Level Load Event Sequence for listener id {block.persistentID} ({block.name})!");
                            if (block.LevelLoad_IncludeInitialDrop)
                            {
                                Log.Message("Peforming event sequence...");
                                EventSequenceManager.StartSequence(block.EventSequenceOnActivate);
                            }
                            break;
                        }
                    }
                }
            }
        }
        internal void Setup(LG_Layer layer, WardenObjectiveDataBlock objectiveData, bool isGlobalHandler)
        {
            Layer         = layer;
            LayerType     = layer.m_type;
            ObjectiveData = objectiveData;

            IsDefaultObjective = Enum.IsDefined(typeof(eWardenObjectiveType), ObjectiveData.Type);
            IsGlobalHandler    = isGlobalHandler;

            var activeExpedition = RundownManager.ActiveExpedition;

            switch (LayerType)
            {
            case LG_LayerType.MainLayer:
                LayerData = activeExpedition.MainLayerData;
                break;

            case LG_LayerType.SecondaryLayer:
                LayerData = activeExpedition.SecondaryLayerData;
                break;

            case LG_LayerType.ThirdLayer:
                LayerData = activeExpedition.ThirdLayerData;
                break;
            }

            var data = RundownManager.GetActiveExpeditionData();

            CurrentExpeditionTier  = data.tier;
            CurrentExpeditionIndex = data.expeditionIndex;

            Builder         = new BuilderProxy(this);
            WinConditions   = new WinConditionProxy(this);
            ObjectiveStatus = new ObjectiveStatusProxy(this);


            var buildDone      = new Action(BuildDone);
            var elevatorArrive = new Action(ElevatorArrive);
            var levelSuccess   = new Action(OnExpeditionSuccess);
            var levelFail      = new Action(OnExpeditionFail);

            GlobalMessage.OnBuildDoneLate  += buildDone;
            GlobalMessage.OnElevatorArrive += elevatorArrive;

            GlobalMessage.OnLevelSuccess += levelSuccess;
            GlobalMessage.OnLevelFail    += levelFail;

            OnUnloadEvent += () =>
            {
                GlobalMessage.OnBuildDoneLate  -= buildDone;
                GlobalMessage.OnElevatorArrive -= elevatorArrive;

                GlobalMessage.OnLevelSuccess -= levelSuccess;
                GlobalMessage.OnLevelFail    -= levelFail;
            };

            OnSetupEvent?.Invoke();

            OnSetup();

            //Check WinCondition has been set after Setup
            if (!IsGlobalHandler && (!IsDefaultObjective && !ObjectiveStatus.Is))
            {
                Logger.Error("Every Custom Type Handler should set their ObjectiveStatus Update Behaviour Inside OnSetup()! Handler has been Unloaded!\n - typeID: {0}\n - handler {1}", (byte)ObjectiveData.Type, GetType().Name);
                UnloadSelf();
                return;
            }
        }
        public static bool Invoke(ElevatorCargoCage __instance)
        {
            var blocks = ExpeditionSettingsDataBlock.GetAllBlocks();
            var exp    = RundownManager.GetActiveExpeditionData();

            foreach (var block in blocks)
            {
                if (block.Expedition.ExpeditionIndex == exp.expeditionIndex && block.Expedition.Tier == exp.tier)
                {
                    List <uint> bigPickupToSpawn = new List <uint>();
                    for (int index = 0; index < block.CargoCage.BigPickup.Count; index++)
                    {
                        var bigPickup = block.CargoCage.BigPickup[index];
                        if (GameInfo.MeetsProgressionRequirements(bigPickup.RequiredProgression))
                        {
                            bigPickupToSpawn.Add(bigPickup.ItemID);
                        }
                    }

                    List <ConsumableCargoInfo> consumablesToSpawn = new List <ConsumableCargoInfo>();
                    for (int index = 0; index < block.CargoCage.Consumables.Count; index++)
                    {
                        var consumable = block.CargoCage.Consumables[index];
                        if (GameInfo.MeetsProgressionRequirements(consumable.RequiredProgression))
                        {
                            consumablesToSpawn.Add(consumable);
                        }
                    }

                    int length = bigPickupToSpawn.Count + consumablesToSpawn.Count;

                    __instance.m_itemsToMoveToCargo = new Transform[length];

                    if (length < 1)
                    {
                        return(false);
                    }

                    int itemIndex = 0;
                    foreach (var bigPickup in bigPickupToSpawn)
                    {
                        LG_PickupItem lgPickupItem = LG_PickupItem.SpawnGenericPickupItem(ElevatorShaftLanding.CargoAlign);
                        lgPickupItem.SpawnNode = Builder.GetElevatorArea().m_courseNode;
                        lgPickupItem.SetupAsBigPickupItem(Random.Range(0, int.MaxValue), bigPickup, false);
                        __instance.m_itemsToMoveToCargo[itemIndex] = lgPickupItem.transform;
                        itemIndex++;
                    }

                    foreach (var consumable in consumablesToSpawn)
                    {
                        LG_PickupItem lgPickupItem = LG_PickupItem.SpawnGenericPickupItem(ElevatorShaftLanding.CargoAlign);
                        lgPickupItem.SpawnNode = Builder.GetElevatorArea().m_courseNode;
                        lgPickupItem.SetupAsConsumable(Random.Range(0, int.MaxValue), consumable.ItemID);

                        __instance.m_itemsToMoveToCargo[itemIndex] = lgPickupItem.transform;
                        itemIndex++;

                        //Item item = ItemSpawnManager.SpawnItem(consumable.ItemID, ItemMode.Pickup, ElevatorShaftLanding.CargoAlign.position, ElevatorShaftLanding.CargoAlign.rotation, true, new Player.pItemData()
                        //{
                        //    custom = new Player.pItemData_Custom()
                        //    {
                        //        ammo = consumable.UsageRel
                        //    }
                        //}, ElevatorShaftLanding.CargoAlign);

                        //foreach (var comp in item.gameObject.GetComponentsInChildren<iLG_SpawnedInNodeHandler>(true))
                        //{
                        //    comp.SpawnNode = Builder.GetElevatorArea().m_courseNode;
                        //}

                        //__instance.m_itemsToMoveToCargo[itemIndex] = item.transform;
                    }

                    ElevatorRide.Current.m_cargoCageInUse = true;
                    return(false);
                }
            }
            return(true);
        }
        public static void Invoke()
        {
            var state          = WardenObjectiveManager.CurrentState;
            var exp            = RundownManager.GetActiveExpeditionData();
            var completionData = CompletionData.LoadFromCache();
            var data           = completionData.GetData(exp.tier, exp.expeditionIndex);

            bool pe = true;

            if (state.main_status == eWardenObjectiveStatus.WardenObjectiveItemSolved)
            {
                data.highCompletes++;
            }
            else
            {
                pe = false;
            }

            if (state.second_status == eWardenObjectiveStatus.WardenObjectiveItemSolved)
            {
                data.extremeCompletes++;
            }
            else
            {
                pe = false;
            }

            if (state.third_status == eWardenObjectiveStatus.WardenObjectiveItemSolved)
            {
                data.overloadCompletes++;
            }
            else
            {
                pe = false;
            }

            if (pe)
            {
                data.peCompletes++;
            }

            completionData.Save();

            bool highSolved     = WardenObjectiveManager.CurrentState.main_status == eWardenObjectiveStatus.WardenObjectiveItemSolved;
            bool extremeSolved  = RundownManager.HasSecondaryLayer(RundownManager.ActiveExpedition) && WardenObjectiveManager.CurrentState.second_status == eWardenObjectiveStatus.WardenObjectiveItemSolved;
            bool overloadSolved = RundownManager.HasThirdLayer(RundownManager.ActiveExpedition) && WardenObjectiveManager.CurrentState.third_status == eWardenObjectiveStatus.WardenObjectiveItemSolved;

            var progressionData          = ExtendedPlayerAgent.LocalPlayer.ProgressionData;
            var expeditionSettingsBlocks = ExpeditionSettingsDataBlock.GetAllBlocks();

            foreach (var expeditionSettingsBlock in expeditionSettingsBlocks)
            {
                if (expeditionSettingsBlock.Expedition.ExpeditionIndex == exp.expeditionIndex && expeditionSettingsBlock.Expedition.Tier == exp.tier)
                {
                    var completionSettings = expeditionSettingsBlock.CompletionSettings;
                    foreach (var progressionUpdate in completionSettings.ProgressionUpdates)
                    {
                        if (GameInfo.MeetsProgressionRequirements(progressionUpdate.ProgressionRequirements))
                        {
                            if (progressionUpdate.HighCompleted == highSolved && progressionUpdate.ExtremeCompleted == extremeSolved && progressionUpdate.OverloadCompleted == overloadSolved)
                            {
                                progressionData.SetProgressionValue(exp.tier, exp.expeditionIndex, progressionUpdate.Value);
                            }
                        }
                    }
                }
            }

            progressionData.Save();
        }
        public static bool Invoke(CM_PageRundown_New __instance)
        {
            var completionData = CompletionData.LoadFromCache();

            Utilities.Log.Message("Load completion data");

            Debug.Log("CM_PageRundown_New.UpdateRundownExpeditionProgression, RundownManager.RundownProgressionReady: " + RundownManager.RundownProgressionReady.ToString());

            int totalMain   = 0;
            int totalSecond = 0;
            int totalThird  = 0;
            int totalPE     = 0;

            int totalCompletesMain   = 0;
            int totalCompletesSecond = 0;
            int totalCompletesThird  = 0;
            int totalCompletesPE     = 0;

            if (__instance.m_expIconsAll != null)
            {
                for (int index = 0; index < __instance.m_expIconsAll.Count; index++)
                {
                    var    icon          = __instance.m_expIconsAll[index];
                    string expeditionKey = RundownManager.GetRundownProgressionExpeditionKey(icon.Tier, icon.ExpIndex);

                    var completes = completionData.GetData(icon.Tier, icon.ExpIndex);

                    if (completes.highCompletes > 0)
                    {
                        totalCompletesMain++;
                    }
                    if (completes.extremeCompletes > 0)
                    {
                        totalCompletesSecond++;
                    }
                    if (completes.overloadCompletes > 0)
                    {
                        totalCompletesThird++;
                    }
                    if (completes.peCompletes > 0)
                    {
                        totalCompletesPE++;
                    }

                    totalMain++;
                    if (RundownManager.HasSecondaryLayer(icon.DataBlock))
                    {
                        totalSecond++;
                    }
                    if (RundownManager.HasThirdLayer(icon.DataBlock))
                    {
                        totalThird++;
                    }
                    if (RundownManager.HasAllCompletetionPossibility(icon.DataBlock))
                    {
                        totalPE++;
                    }
                }
            }

            if (__instance.m_tierMarkerSectorSummary != null)
            {
                __instance.m_tierMarkerSectorSummary.SetSectorIconTextForMain(totalCompletesMain.ToString() + "<size=50%><color=#FFFFFF33><size=55%>/" + totalMain + "</color></size>");
                __instance.m_tierMarkerSectorSummary.SetSectorIconTextForSecondary(totalCompletesSecond.ToString() + "<size=50%><color=#FFFFFF33><size=55%>/" + totalSecond + "</color></size>");
                __instance.m_tierMarkerSectorSummary.SetSectorIconTextForThird(totalCompletesThird.ToString() + "<size=50%><color=#FFFFFF33><size=55%>/" + totalThird + "</color></size>");
                __instance.m_tierMarkerSectorSummary.SetSectorIconTextForAllCleared(totalCompletesPE.ToString() + "<size=50%><color=#FFFFFF33><size=55%>/" + totalPE + "</color></size>");
            }
            if (__instance.m_tierMarker1 == null)
            {
                return(false);
            }

            var tierBReq = __instance.m_currentRundownData.ReqToReachTierB;
            var tierCReq = __instance.m_currentRundownData.ReqToReachTierC;
            var tierDReq = __instance.m_currentRundownData.ReqToReachTierD;
            var tierEReq = __instance.m_currentRundownData.ReqToReachTierE;

            var progressionData = new RundownManager.RundownProgData()
            {
                totalMain      = totalMain,
                totalSecondary = totalSecond,
                totalThird     = totalThird,
                totalAllClear  = totalPE,

                clearedMain      = totalCompletesMain,
                clearedSecondary = totalCompletesSecond,
                clearedThird     = totalCompletesThird,
                clearedAllClear  = totalCompletesPE,

                tierBUnlocked = totalCompletesMain >= tierBReq.MainSectors && totalCompletesSecond >= tierBReq.SecondarySectors && totalCompletesThird >= tierBReq.ThirdSectors && totalCompletesPE >= tierBReq.AllClearedSectors,
                tierCUnlocked = totalCompletesMain >= tierCReq.MainSectors && totalCompletesSecond >= tierCReq.SecondarySectors && totalCompletesThird >= tierCReq.ThirdSectors && totalCompletesPE >= tierCReq.AllClearedSectors,
                tierDUnlocked = totalCompletesMain >= tierDReq.MainSectors && totalCompletesSecond >= tierDReq.SecondarySectors && totalCompletesThird >= tierDReq.ThirdSectors && totalCompletesPE >= tierDReq.AllClearedSectors,
                tierEUnlocked = totalCompletesMain >= tierEReq.MainSectors && totalCompletesSecond >= tierEReq.SecondarySectors && totalCompletesThird >= tierEReq.ThirdSectors && totalCompletesPE >= tierEReq.AllClearedSectors
            };

            __instance.m_tierMarker1.SetProgression(progressionData, new RundownTierProgressionData());
            __instance.UpdateTierIconsWithProgression(null, __instance.m_expIconsTier1, __instance.m_tierMarker1, true);

            __instance.m_tierMarker2.SetProgression(progressionData, tierBReq);
            __instance.UpdateTierIconsWithProgression(null, __instance.m_expIconsTier2, __instance.m_tierMarker2, progressionData.tierBUnlocked);

            __instance.m_tierMarker3.SetProgression(progressionData, tierCReq);
            __instance.UpdateTierIconsWithProgression(null, __instance.m_expIconsTier3, __instance.m_tierMarker3, progressionData.tierCUnlocked);

            __instance.m_tierMarker4.SetProgression(progressionData, tierDReq);
            __instance.UpdateTierIconsWithProgression(null, __instance.m_expIconsTier4, __instance.m_tierMarker4, progressionData.tierDUnlocked);

            __instance.m_tierMarker5.SetProgression(progressionData, tierEReq);
            __instance.UpdateTierIconsWithProgression(null, __instance.m_expIconsTier5, __instance.m_tierMarker5, progressionData.tierEUnlocked);

            return(false);
        }