Exemplo n.º 1
0
        private static void onOuiFileSelectSlotShow(On.Celeste.OuiFileSelectSlot.orig_Show orig, OuiFileSelectSlot self)
        {
            // If we are currently in a collab map, display the lobby level set stats instead.
            AreaKey?savedLastArea = null;
            string  collab        = collabNames.FirstOrDefault(collabName => self.SaveData?.LevelSet != null && self.SaveData.LevelSet.StartsWith($"{collabName}/") && self.SaveData.LevelSet != $"{collabName}/0-Lobbies");

            if (collab != null)
            {
                AreaData firstMapFromCollab = AreaData.Areas.FirstOrDefault(area => area.GetLevelSet() == $"{collab}/0-Lobbies");
                if (firstMapFromCollab != null)
                {
                    savedLastArea = self.SaveData.LastArea_Safe;
                    self.SaveData.LastArea_Safe = firstMapFromCollab.ToKey();
                    self.Strawberries.CanWiggle = false; // prevent the strawberry collect sound from playing.
                }
            }

            orig(self);

            string collab2 = collabNames.FirstOrDefault(collabName => self.SaveData?.LevelSet == $"{collabName}/0-Lobbies");

            if (collab2 != null)
            {
                // recompute the stats for the collab.
                int totalStrawberries                    = 0;
                int totalGoldenStrawberries              = 0;
                int totalHeartGems                       = 0;
                int totalCassettes                       = 0;
                int maxStrawberryCount                   = 0;
                int maxGoldenStrawberryCount             = 0;
                int maxStrawberryCountIncludingUntracked = 0;
                int maxCassettes     = 0;
                int maxCrystalHearts = 0;
                int maxCrystalHeartsExcludingCSides = 0;

                // aggregate all stats for the collab level sets.
                foreach (LevelSetStats stats in self.SaveData.LevelSets)
                {
                    if (stats.Name.StartsWith($"{collab2}/"))
                    {
                        totalStrawberries                    += stats.TotalStrawberries;
                        totalGoldenStrawberries              += stats.TotalGoldenStrawberries;
                        totalHeartGems                       += countTotalHeartGemsForMapsThatHaveHearts(stats);
                        totalCassettes                       += stats.TotalCassettes;
                        maxStrawberryCount                   += stats.MaxStrawberries;
                        maxGoldenStrawberryCount             += stats.MaxGoldenStrawberries;
                        maxStrawberryCountIncludingUntracked += stats.MaxStrawberriesIncludingUntracked;
                        maxCassettes     += stats.MaxCassettes;
                        maxCrystalHearts += stats.MaxHeartGems;
                        maxCrystalHeartsExcludingCSides += stats.MaxHeartGemsExcludingCSides;
                    }
                }

                DynData <OuiFileSelectSlot> slotData = new DynData <OuiFileSelectSlot>(self);
                slotData["totalGoldenStrawberries"]              = totalGoldenStrawberries;
                slotData["totalHeartGems"]                       = totalHeartGems;
                slotData["totalCassettes"]                       = totalCassettes;
                slotData["maxStrawberryCount"]                   = maxStrawberryCount;
                slotData["maxGoldenStrawberryCount"]             = maxGoldenStrawberryCount;
                slotData["maxStrawberryCountIncludingUntracked"] = maxStrawberryCountIncludingUntracked;
                slotData["maxCassettes"]     = maxCassettes;
                slotData["maxCrystalHearts"] = maxCrystalHearts;
                slotData["maxCrystalHeartsExcludingCSides"] = maxCrystalHeartsExcludingCSides;
                slotData["summitStamp"]   = false;
                slotData["farewellStamp"] = false;

                self.Strawberries.Amount = totalStrawberries;
                self.Strawberries.OutOf  = maxStrawberryCount;
            }

            // figure out if some hearts are customized, and store it in DynData so that a IL hook can access it later.
            SaveData oldInstance = SaveData.Instance;

            SaveData.Instance = self.SaveData;
            List <string> customJournalHearts = new List <string>();

            if (self.SaveData != null)
            {
                foreach (AreaStats item in self.SaveData.Areas_Safe)
                {
                    if (item.ID_Safe > self.SaveData.UnlockedAreas_Safe)
                    {
                        break;
                    }
                    if (!AreaData.Areas[item.ID_Safe].Interlude_Safe && AreaData.Areas[item.ID_Safe].CanFullClear)
                    {
                        string lobbyLevelSetName = GetLobbyLevelSet(item.GetSID());
                        if (lobbyLevelSetName != null && MTN.Journal.Has("CollabUtils2Hearts/" + lobbyLevelSetName))
                        {
                            customJournalHearts.Add("CollabUtils2Hearts/" + lobbyLevelSetName);
                        }
                        else
                        {
                            customJournalHearts.Add(null);
                        }
                    }
                }
            }
            new DynData <OuiFileSelectSlot>(self)["collabutils2_customhearts"] = customJournalHearts;
            SaveData.Instance = oldInstance;

            // Restore the last area if it was replaced at the beginning of this method.
            if (savedLastArea != null)
            {
                self.SaveData.LastArea_Safe = savedLastArea.Value;
            }
        }
Exemplo n.º 2
0
        private static void onOuiFileSelectSlotShow(On.Celeste.OuiFileSelectSlot.orig_Show orig, OuiFileSelectSlot self)
        {
            // If we are currently in a collab map, display the lobby level set stats instead.
            AreaKey?savedLastArea = null;
            string  collab        = collabNames.FirstOrDefault(collabName => self.SaveData?.LevelSet != null && self.SaveData.LevelSet.StartsWith($"{collabName}/") && self.SaveData.LevelSet != $"{collabName}/0-Lobbies");

            if (collab != null)
            {
                AreaData firstMapFromCollab = AreaData.Areas.FirstOrDefault(area => area.GetLevelSet() == $"{collab}/0-Lobbies");
                if (firstMapFromCollab != null)
                {
                    savedLastArea = self.SaveData.LastArea_Safe;
                    self.SaveData.LastArea_Safe = firstMapFromCollab.ToKey();
                    self.Strawberries.CanWiggle = false; // prevent the strawberry collect sound from playing.
                }
            }

            orig(self);

            string collab2 = collabNames.FirstOrDefault(collabName => self.SaveData?.LevelSet == $"{collabName}/0-Lobbies");

            if (collab2 != null)
            {
                // recompute the stats for the collab.
                int totalStrawberries                    = 0;
                int totalGoldenStrawberries              = 0;
                int totalHeartGems                       = 0;
                int totalCassettes                       = 0;
                int maxStrawberryCount                   = 0;
                int maxGoldenStrawberryCount             = 0;
                int maxStrawberryCountIncludingUntracked = 0;
                int maxCassettes     = 0;
                int maxCrystalHearts = 0;
                int maxCrystalHeartsExcludingCSides = 0;

                // aggregate all stats for the collab level sets.
                foreach (LevelSetStats stats in self.SaveData.LevelSets)
                {
                    if (stats.Name.StartsWith($"{collab2}/"))
                    {
                        totalStrawberries                    += stats.TotalStrawberries;
                        totalGoldenStrawberries              += stats.TotalGoldenStrawberries;
                        totalHeartGems                       += countTotalHeartGemsForMapsThatHaveHearts(stats);
                        totalCassettes                       += stats.TotalCassettes;
                        maxStrawberryCount                   += stats.MaxStrawberries;
                        maxGoldenStrawberryCount             += stats.MaxGoldenStrawberries;
                        maxStrawberryCountIncludingUntracked += stats.MaxStrawberriesIncludingUntracked;
                        maxCassettes     += stats.MaxCassettes;
                        maxCrystalHearts += stats.MaxHeartGems;
                        maxCrystalHeartsExcludingCSides += stats.MaxHeartGemsExcludingCSides;
                    }
                }

                DynData <OuiFileSelectSlot> slotData = new DynData <OuiFileSelectSlot>(self);
                slotData["totalGoldenStrawberries"]              = totalGoldenStrawberries;
                slotData["totalHeartGems"]                       = totalHeartGems;
                slotData["totalCassettes"]                       = totalCassettes;
                slotData["maxStrawberryCount"]                   = maxStrawberryCount;
                slotData["maxGoldenStrawberryCount"]             = maxGoldenStrawberryCount;
                slotData["maxStrawberryCountIncludingUntracked"] = maxStrawberryCountIncludingUntracked;
                slotData["maxCassettes"]     = maxCassettes;
                slotData["maxCrystalHearts"] = maxCrystalHearts;
                slotData["maxCrystalHeartsExcludingCSides"] = maxCrystalHeartsExcludingCSides;
                slotData["summitStamp"]   = false;
                slotData["farewellStamp"] = false;

                self.Strawberries.Amount = totalStrawberries;
                self.Strawberries.OutOf  = maxStrawberryCount;
            }

            // Restore the last area if it was replaced at the beginning of this method.
            if (savedLastArea != null)
            {
                self.SaveData.LastArea_Safe = savedLastArea.Value;
            }
        }