Пример #1
0
        public static bool SaveHook(Func <bool> orig)
        {
            bool result = orig();

            AdvancedGameStatsManager.Save();
            return(result);
        }
Пример #2
0
 public static MonsterHuntQuest AddProceduralQuest(MonsterHuntQuest quest)
 {
     if (HuntData == null)
     {
         DoSetup();
     }
     HuntData.ProceduralQuests.Add(quest);
     if (GameStatsManager.HasInstance && GameStatsManager.Instance.huntProgress != null)
     {
         GameStatsManager.Instance.huntProgress.OnLoaded();
     }
     else
     {
         int?cachedHuntIndex = null;
         if (AdvancedGameStatsManager.HasInstance)
         {
             cachedHuntIndex = AdvancedGameStatsManager.Instance.cachedHuntIndex;
             AdvancedGameStatsManager.Save();
         }
         GameStatsManager.Load();
         if (cachedHuntIndex != null && AdvancedGameStatsManager.HasInstance)
         {
             AdvancedGameStatsManager.Instance.cachedHuntIndex = cachedHuntIndex.Value;
         }
     }
     if (addedProceduralQuests == null)
     {
         addedProceduralQuests = new List <MonsterHuntQuest>();
     }
     addedProceduralQuests.Add(quest);
     return(quest);
 }
Пример #3
0
 /// <summary>
 /// Disposes SaveAPI <see cref="Hook"/>s, unloads <see cref="AdvancedGameStatsManager"/> and nulls custom <see cref="SaveManager.SaveType"/>s
 /// </summary>
 public static void Unload()
 {
     if (!m_loaded)
     {
         return;
     }
     AdvancedGameSave    = null;
     AdvancedMidGameSave = null;
     saveHook?.Dispose();
     loadHook?.Dispose();
     resetHook?.Dispose();
     beginSessionHook?.Dispose();
     endSessionHook?.Dispose();
     clearAllStatsHook?.Dispose();
     deleteMidGameSaveHook?.Dispose();
     midgameSaveHook?.Dispose();
     invalidateSaveHook?.Dispose();
     revalidateSaveHook?.Dispose();
     frameDelayedInitizlizationHook?.Dispose();
     moveSessionStatsHook?.Dispose();
     prerequisiteHook?.Dispose();
     clearActiveGameDataHook?.Dispose();
     aiactorRewardsHook?.Dispose();
     aiactorEngagedHook?.Dispose();
     CustomHuntQuests.Unload();
     AdvancedGameStatsManager.Save();
     AdvancedGameStatsManager.Unload();
     BreachShopTool.Unload();
     m_loaded = false;
 }
        /// <summary>
        /// Loads <see cref="AdvancedGameStatsManager"/> from AdvancedGameSave <see cref="SaveManager.SaveType"/>
        /// </summary>
        public static void Load()
        {
            SaveManager.Init();
            bool hasPrevInstance = false;

            SaveManager.SaveSlot?prevInstanceSaveSlot = null;
            int prevInstanceHuntIndex = -1;

            if (m_instance != null)
            {
                hasPrevInstance       = true;
                prevInstanceSaveSlot  = m_instance.cachedSaveSlot;
                prevInstanceHuntIndex = m_instance.cachedHuntIndex;
            }
            if (!SaveManager.Load(SaveAPIManager.AdvancedGameSave, out m_instance, true, 0u, null, null))
            {
                m_instance = new AdvancedGameStatsManager();
            }
            m_instance.cachedSaveSlot = SaveManager.CurrentSaveSlot;
            if (hasPrevInstance && prevInstanceSaveSlot != null && m_instance.cachedSaveSlot == prevInstanceSaveSlot.Value)
            {
                m_instance.cachedHuntIndex = prevInstanceHuntIndex;
            }
            else
            {
                m_instance.cachedHuntIndex = -1;
            }
        }
Пример #5
0
 public static void Unload()
 {
     if (!m_loaded)
     {
         return;
     }
     if (addedOrderedQuests != null)
     {
         foreach (MonsterHuntQuest q in addedOrderedQuests)
         {
             if (HuntData.OrderedQuests.Contains(q))
             {
                 HuntData.OrderedQuests.Remove(q);
             }
         }
         addedOrderedQuests.Clear();
         addedOrderedQuests = null;
     }
     if (addedProceduralQuests != null)
     {
         foreach (MonsterHuntQuest q in addedProceduralQuests)
         {
             if (HuntData.ProceduralQuests.Contains(q))
             {
                 HuntData.ProceduralQuests.Remove(q);
             }
         }
         addedProceduralQuests.Clear();
         addedProceduralQuests = null;
     }
     if (GameStatsManager.HasInstance && GameStatsManager.Instance.huntProgress != null)
     {
         GameStatsManager.Instance.huntProgress.OnLoaded();
     }
     else
     {
         int?cachedHuntIndex = null;
         if (AdvancedGameStatsManager.HasInstance)
         {
             cachedHuntIndex = AdvancedGameStatsManager.Instance.cachedHuntIndex;
             AdvancedGameStatsManager.Save();
         }
         GameStatsManager.Load();
         if (cachedHuntIndex != null && AdvancedGameStatsManager.HasInstance)
         {
             AdvancedGameStatsManager.Instance.cachedHuntIndex = cachedHuntIndex.Value;
         }
     }
     HuntData = null;
     huntProgressLoadedHook?.Dispose();
     huntProgressCompleteHook?.Dispose();
     huntProgressNextQuestHook?.Dispose();
     huntProgressProcessKillHook?.Dispose();
     huntQuestCompleteHook?.Dispose();
     huntQuestUnlockRewardsHook?.Dispose();
     huntProgressQuestCompleteHook?.Dispose();
     m_loaded = false;
 }
Пример #6
0
        public static IEnumerator FrameDelayedInitizlizationHook(Func <Dungeon, MidGameSaveData, IEnumerator> orig, Dungeon self, MidGameSaveData data)
        {
            yield return(orig(self, data));

            AdvancedMidGameSaveData midgameSave;

            if (AdvancedGameStatsManager.VerifyAndLoadMidgameSave(out midgameSave, true))
            {
                midgameSave.LoadDataFromMidGameSave();
            }
            yield break;
        }
Пример #7
0
        public static void HuntProgressLoadedHook(Action <MonsterHuntProgress> orig, MonsterHuntProgress self)
        {
            if (GameManager.HasInstance)
            {
                if (GameManager.Instance.platformInterface == null)
                {
                    if (PlatformInterfaceSteam.IsSteamBuild())
                    {
                        GameManager.Instance.platformInterface = new PlatformInterfaceSteam();
                    }
                    else if (PlatformInterfaceGalaxy.IsGalaxyBuild())
                    {
                        GameManager.Instance.platformInterface = new PlatformInterfaceGalaxy();
                    }
                    else
                    {
                        GameManager.Instance.platformInterface = new PlatformInterfaceGenericPC();
                    }
                }
                GameManager.Instance.platformInterface.Start();
            }
            FieldInfo frifleHuntFlagsInfo = typeof(GameStatsManager).GetField("s_frifleHuntFlags", BindingFlags.NonPublic | BindingFlags.Static);
            FieldInfo pastFlagsFlagsInfo  = typeof(GameStatsManager).GetField("s_pastFlags", BindingFlags.NonPublic | BindingFlags.Static);
            FieldInfo npcFoyerFlagsInfo   = typeof(GameStatsManager).GetField("s_npcFoyerFlags", BindingFlags.NonPublic | BindingFlags.Static);

            if (pastFlagsFlagsInfo.GetValue(null) == null)
            {
                List <GungeonFlags> s_pastFlags = new List <GungeonFlags>();
                s_pastFlags.Add(GungeonFlags.BOSSKILLED_ROGUE_PAST);
                s_pastFlags.Add(GungeonFlags.BOSSKILLED_CONVICT_PAST);
                s_pastFlags.Add(GungeonFlags.BOSSKILLED_SOLDIER_PAST);
                s_pastFlags.Add(GungeonFlags.BOSSKILLED_GUIDE_PAST);
                pastFlagsFlagsInfo.SetValue(null, s_pastFlags);
            }
            if (npcFoyerFlagsInfo.GetValue(null) == null)
            {
                List <GungeonFlags> s_npcFoyerFlags = new List <GungeonFlags>();
                s_npcFoyerFlags.Add(GungeonFlags.META_SHOP_ACTIVE_IN_FOYER);
                s_npcFoyerFlags.Add(GungeonFlags.GUNSLING_KING_ACTIVE_IN_FOYER);
                s_npcFoyerFlags.Add(GungeonFlags.SORCERESS_ACTIVE_IN_FOYER);
                s_npcFoyerFlags.Add(GungeonFlags.LOST_ADVENTURER_ACTIVE_IN_FOYER);
                s_npcFoyerFlags.Add(GungeonFlags.TUTORIAL_TALKED_AFTER_RIVAL_KILLED);
                s_npcFoyerFlags.Add(GungeonFlags.SHOP_TRUCK_ACTIVE);
                s_npcFoyerFlags.Add(GungeonFlags.SHERPA_ACTIVE_IN_ELEVATOR_ROOM);
                s_npcFoyerFlags.Add(GungeonFlags.WINCHESTER_MET_PREVIOUSLY);
                s_npcFoyerFlags.Add(GungeonFlags.LEDGEGOBLIN_ACTIVE_IN_FOYER);
                s_npcFoyerFlags.Add(GungeonFlags.FRIFLE_ACTIVE_IN_FOYER);
                npcFoyerFlagsInfo.SetValue(null, s_npcFoyerFlags);
            }
            if (frifleHuntFlagsInfo.GetValue(null) == null)
            {
                List <GungeonFlags> s_frifleHuntFlags = new List <GungeonFlags>();
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_MONSTERHUNT_01_COMPLETE);
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_MONSTERHUNT_02_COMPLETE);
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_MONSTERHUNT_03_COMPLETE);
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_MONSTERHUNT_04_COMPLETE);
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_MONSTERHUNT_05_COMPLETE);
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_MONSTERHUNT_06_COMPLETE);
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_MONSTERHUNT_07_COMPLETE);
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_MONSTERHUNT_08_COMPLETE);
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_MONSTERHUNT_09_COMPLETE);
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_MONSTERHUNT_10_COMPLETE);
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_MONSTERHUNT_11_COMPLETE);
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_MONSTERHUNT_12_COMPLETE);
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_MONSTERHUNT_13_COMPLETE);
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_MONSTERHUNT_14_COMPLETE);
                s_frifleHuntFlags.Add(GungeonFlags.FRIFLE_CORE_HUNTS_COMPLETE);
                frifleHuntFlagsInfo.SetValue(null, s_frifleHuntFlags);
            }
            MonsterHuntQuest lastUncompletedQuest = null;
            bool             cachedFlagValue      = GameStatsManager.Instance.GetFlag(GungeonFlags.FRIFLE_CORE_HUNTS_COMPLETE);

            foreach (MonsterHuntQuest quest in HuntData.OrderedQuests)
            {
                if (quest != null && !quest.IsQuestComplete())
                {
                    lastUncompletedQuest = quest;
                }
            }
            if (lastUncompletedQuest != null)
            {
                GameStatsManager.Instance.SetFlag(GungeonFlags.FRIFLE_CORE_HUNTS_COMPLETE, false);
            }
            if (SaveAPIManager.IsFirstLoad)
            {
                if (!AdvancedGameStatsManager.HasInstance)
                {
                    AdvancedGameStatsManager.Load();
                }
                AdvancedGameStatsManager.Instance.cachedHuntIndex = self.CurrentActiveMonsterHuntID;
            }
            else
            {
                if (!AdvancedGameStatsManager.HasInstance)
                {
                    AdvancedGameStatsManager.Load();
                }
                if (AdvancedGameStatsManager.HasInstance && self.CurrentActiveMonsterHuntID == -1 && AdvancedGameStatsManager.Instance.cachedHuntIndex != -1)
                {
                    if (GameStatsManager.Instance.GetFlag(GungeonFlags.FRIFLE_CORE_HUNTS_COMPLETE) && GameStatsManager.Instance.GetFlag(GungeonFlags.FRIFLE_REWARD_GREY_MAUSER))
                    {
                        if (AdvancedGameStatsManager.Instance.cachedHuntIndex >= 0 && AdvancedGameStatsManager.Instance.cachedHuntIndex < HuntData.ProceduralQuests.Count)
                        {
                            self.CurrentActiveMonsterHuntID = AdvancedGameStatsManager.Instance.cachedHuntIndex;
                            AdvancedGameStatsManager.Instance.cachedHuntIndex = -1;
                        }
                    }
                    else if (AdvancedGameStatsManager.Instance.cachedHuntIndex >= 0 || AdvancedGameStatsManager.Instance.cachedHuntIndex < HuntData.OrderedQuests.Count)
                    {
                        self.CurrentActiveMonsterHuntID = AdvancedGameStatsManager.Instance.cachedHuntIndex;
                        AdvancedGameStatsManager.Instance.cachedHuntIndex = -1;
                    }
                }
            }
            orig(self);
            if (lastUncompletedQuest == null && !GameStatsManager.Instance.GetFlag(GungeonFlags.FRIFLE_CORE_HUNTS_COMPLETE))
            {
                cachedFlagValue = true;
                List <GungeonFlags> frifleHuntFlags = (List <GungeonFlags>)frifleHuntFlagsInfo.GetValue(null);
                if (frifleHuntFlags != null)
                {
                    int num = 0;
                    for (int i = 0; i < frifleHuntFlags.Count; i++)
                    {
                        num++;
                    }
                    if (GameManager.Instance == null)
                    {
                        if (GameManager.Instance.platformInterface == null)
                        {
                            GameManager.Instance.platformInterface.SetStat(PlatformStat.FRIFLE_CORE_COMPLETED, num);
                        }
                    }
                }
            }
            GameStatsManager.Instance.SetFlag(GungeonFlags.FRIFLE_CORE_HUNTS_COMPLETE, cachedFlagValue);
        }
Пример #8
0
 public static void RevalidateSaveHook(Action orig)
 {
     AdvancedGameStatsManager.RevalidateMidgameSave(false);
     orig();
 }
Пример #9
0
 public static void InvalidateSaveHook(Action <bool> orig, bool savestats)
 {
     AdvancedGameStatsManager.InvalidateMidgameSave(false);
     orig(savestats);
 }
Пример #10
0
 public static void MidgameSaveHook(Action <GlobalDungeonData.ValidTilesets> orig, GlobalDungeonData.ValidTilesets tileset)
 {
     AdvancedGameStatsManager.DoMidgameSave();
     orig(tileset);
 }
Пример #11
0
 public static void ResetHook(Action orig)
 {
     AdvancedGameStatsManager.DANGEROUS_ResetAllStats();
     orig();
 }
Пример #12
0
 public static void LoadHook(Action orig)
 {
     AdvancedGameStatsManager.Load();
     orig();
 }
 /// <summary>
 /// Makes a new Instance and deletes <see cref="AdvancedGameStatsManager"/> backups
 /// </summary>
 public static void DANGEROUS_ResetAllStats()
 {
     m_instance = new AdvancedGameStatsManager();
     SaveManager.DeleteAllBackups(SaveAPIManager.AdvancedGameSave, null);
 }