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); } }
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); } }
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); }