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);
 }
 public static bool HuntQuestCompleteHook(Func <MonsterHuntQuest, bool> orig, MonsterHuntQuest self)
 {
     if (self is CustomHuntQuest)
     {
         return((self as CustomHuntQuest).IsQuestComplete());
     }
     return(orig(self));
 }
        public static int HuntProgressNextQuestHook(Func <MonsterHuntProgress, int> orig, MonsterHuntProgress self)
        {
            MonsterHuntQuest advancedResult = null;
            int advancedResultIndex         = 0;

            for (int i = 0; i < HuntData.OrderedQuests.Count; i++)
            {
                if (HuntData.OrderedQuests[i] != null)
                {
                    if (!HuntData.OrderedQuests[i].IsQuestComplete())
                    {
                        advancedResult      = HuntData.OrderedQuests[i];
                        advancedResultIndex = i;
                        break;
                    }
                }
            }
            List <MonsterHuntQuest> origQuests = HuntData.OrderedQuests;
            List <MonsterHuntQuest> tempQuests = new List <MonsterHuntQuest>();

            for (int i = 0; i < origQuests.Count; i++)
            {
                if (origQuests[i] != null)
                {
                    if (origQuests[i].QuestFlag != GungeonFlags.NONE)
                    {
                        tempQuests.Add(origQuests[i]);
                    }
                }
            }
            HuntData.OrderedQuests = tempQuests;
            int result = orig(self);
            MonsterHuntQuest normalResult = FindNextQuestNoProcedural();

            HuntData.OrderedQuests = origQuests;
            if (self.ActiveQuest != null && normalResult != null && HuntData.OrderedQuests.IndexOf(self.ActiveQuest) != self.CurrentActiveMonsterHuntID)
            {
                self.CurrentActiveMonsterHuntID = HuntData.OrderedQuests.IndexOf(self.ActiveQuest);
            }
            if (advancedResult != null && normalResult == null)
            {
                self.ActiveQuest = advancedResult;
                self.CurrentActiveMonsterHuntID       = advancedResultIndex;
                self.CurrentActiveMonsterHuntProgress = 0;
            }
            else if (advancedResult != null && normalResult != null)
            {
                if (advancedResultIndex < self.CurrentActiveMonsterHuntID)
                {
                    self.ActiveQuest = advancedResult;
                    self.CurrentActiveMonsterHuntID       = advancedResultIndex;
                    self.CurrentActiveMonsterHuntProgress = 0;
                }
            }
            return(result);
        }
        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);
        }
 public static void HuntQuestUnlockRewardsHook(Action <MonsterHuntQuest> orig, MonsterHuntQuest self)
 {
     if (self is CustomHuntQuest)
     {
         (self as CustomHuntQuest).UnlockRewards();
     }
     else
     {
         orig(self);
     }
 }
Example #6
0
 public static void HuntQuestUnlockRewardsHook(Action <MonsterHuntQuest> orig, MonsterHuntQuest self)
 {
     // ETGModConsole.Log("Unlocking quest rewards");
     if (self is CustomHuntQuest)
     {
         (self as CustomHuntQuest).UnlockRewards();
     }
     else
     {
         orig(self);
     }
 }
Example #7
0
        public static int HuntProgressNextQuestHook(Func <MonsterHuntProgress, int> orig, MonsterHuntProgress self)
        {
            MonsterHuntQuest advancedResult = null;
            int advancedResultIndex         = 0;

            for (int i = 0; i < HuntData.OrderedQuests.Count; i++)
            {
                if (HuntData.OrderedQuests[i] != null)
                {
                    if (!HuntData.OrderedQuests[i].IsQuestComplete())
                    {
                        advancedResult      = HuntData.OrderedQuests[i];
                        advancedResultIndex = i;
                        break;
                    }
                }
            }
            List <MonsterHuntQuest> origQuests = HuntData.OrderedQuests;
            List <MonsterHuntQuest> tempQuests = new List <MonsterHuntQuest>();

            for (int i = 0; i < origQuests.Count; i++)
            {
                if (origQuests[i] != null)
                {
                    if (origQuests[i].QuestFlag != GungeonFlags.NONE)
                    {
                        tempQuests.Add(origQuests[i]);
                    }
                }
            }
            HuntData.OrderedQuests = tempQuests;
            if (self.ActiveQuest != null)
            {
                //ETGModConsole.Log("Active quest is not null");
                //VFXToolbox.DoStringSquirt("Active quest NOT NULL", GameManager.Instance.PrimaryPlayer.CenterPosition, Color.red);
            }
            else if (self.ActiveQuest == null)
            {
                //ETGModConsole.Log("Active quest is null");
                //VFXToolbox.DoStringSquirt("Active quest is NULL", GameManager.Instance.PrimaryPlayer.CenterPosition, Color.red);
            }
            int result = orig(self);
            MonsterHuntQuest normalResult = FindNextQuestNoProcedural();

            HuntData.OrderedQuests = origQuests;
            if (self.ActiveQuest != null && normalResult != null && HuntData.OrderedQuests.IndexOf(self.ActiveQuest) != self.CurrentActiveMonsterHuntID)
            {
                self.CurrentActiveMonsterHuntID = HuntData.OrderedQuests.IndexOf(self.ActiveQuest);
            }
            if (advancedResult != null && normalResult == null)
            {
                self.ActiveQuest = advancedResult;
                self.CurrentActiveMonsterHuntID       = advancedResultIndex;
                self.CurrentActiveMonsterHuntProgress = 0;
            }
            else if (advancedResult != null && normalResult != null)
            {
                if (advancedResultIndex < self.CurrentActiveMonsterHuntID)
                {
                    self.ActiveQuest = advancedResult;
                    self.CurrentActiveMonsterHuntID       = advancedResultIndex;
                    self.CurrentActiveMonsterHuntProgress = 0;
                }
            }
            return(result);
        }