public static void HuntProgressCompleteHook(Action <MonsterHuntProgress> orig, MonsterHuntProgress self) { if (self.ActiveQuest != null) { //ETGModConsole.Log("New: active quest is not null (HuntProgressCompleteHook BEGINNING)"); } else { //ETGModConsole.Log("New: active quest is null (HuntProgressCompleteHook BEGINNING)"); } GungeonFlags cachedFlag = self.ActiveQuest.QuestFlag; bool cachedFlagValue = GameStatsManager.Instance.GetFlag(GungeonFlags.INTERNALDEBUG_HAS_SEEN_DEMO_TEXT); if (self.ActiveQuest is CustomHuntQuest) { (self.ActiveQuest as CustomHuntQuest).Complete(); if (self.ActiveQuest.QuestFlag == GungeonFlags.NONE) { self.ActiveQuest.QuestFlag = GungeonFlags.INTERNALDEBUG_HAS_SEEN_DEMO_TEXT; } } orig(self); GameStatsManager.Instance.SetFlag(GungeonFlags.INTERNALDEBUG_HAS_SEEN_DEMO_TEXT, cachedFlagValue); self.ActiveQuest.QuestFlag = cachedFlag; if (self.ActiveQuest != null) { //ETGModConsole.Log("New: active quest is not null (HuntProgressCompleteHook END)"); } else { //ETGModConsole.Log("New: active quest is null (HuntProgressCompleteHook END)"); } }
public static void SetupUnlockOnFlag(this PickupObject self, GungeonFlags flag, bool requiredFlagValue) //thanks SpAPI { EncounterTrackable encounterTrackable = self.encounterTrackable; bool flag2 = encounterTrackable.prerequisites == null; if (flag2) { encounterTrackable.prerequisites = new DungeonPrerequisite[1]; encounterTrackable.prerequisites[0] = new DungeonPrerequisite { prerequisiteType = DungeonPrerequisite.PrerequisiteType.FLAG, requireFlag = requiredFlagValue, saveFlagToCheck = flag }; } else { encounterTrackable.prerequisites = encounterTrackable.prerequisites.Concat(new DungeonPrerequisite[] { new DungeonPrerequisite { prerequisiteType = DungeonPrerequisite.PrerequisiteType.FLAG, requireFlag = requiredFlagValue, saveFlagToCheck = flag } }).ToArray <DungeonPrerequisite>(); } EncounterDatabaseEntry entry = EncounterDatabase.GetEntry(encounterTrackable.EncounterGuid); bool flag3 = !string.IsNullOrEmpty(entry.ProxyEncounterGuid); if (flag3) { entry.ProxyEncounterGuid = ""; } bool flag4 = entry.prerequisites == null; if (flag4) { entry.prerequisites = new DungeonPrerequisite[1]; entry.prerequisites[0] = new DungeonPrerequisite { prerequisiteType = DungeonPrerequisite.PrerequisiteType.FLAG, requireFlag = requiredFlagValue, saveFlagToCheck = flag }; } else { entry.prerequisites = entry.prerequisites.Concat(new DungeonPrerequisite[] { new DungeonPrerequisite { prerequisiteType = DungeonPrerequisite.PrerequisiteType.FLAG, requireFlag = requiredFlagValue, saveFlagToCheck = flag } }).ToArray <DungeonPrerequisite>(); } }
public static GungeonFlags GetFlagFromTargetItem(int shopItemId) { GungeonFlags result = GungeonFlags.NONE; PickupObject byId = PickupObjectDatabase.GetById(shopItemId); for (int i = 0; i < byId.encounterTrackable.prerequisites.Length; i++) { if (byId.encounterTrackable.prerequisites[i].prerequisiteType == DungeonPrerequisite.PrerequisiteType.FLAG) { result = byId.encounterTrackable.prerequisites[i].saveFlagToCheck; } } return(result); }
public static void HuntProgressCompleteHook(Action <MonsterHuntProgress> orig, MonsterHuntProgress self) { GungeonFlags cachedFlag = self.ActiveQuest.QuestFlag; bool cachedFlagValue = GameStatsManager.Instance.GetFlag(GungeonFlags.INTERNALDEBUG_HAS_SEEN_DEMO_TEXT); if (self.ActiveQuest is CustomHuntQuest) { (self.ActiveQuest as CustomHuntQuest).Complete(); if (self.ActiveQuest.QuestFlag == GungeonFlags.NONE) { self.ActiveQuest.QuestFlag = GungeonFlags.INTERNALDEBUG_HAS_SEEN_DEMO_TEXT; } } orig(self); GameStatsManager.Instance.SetFlag(GungeonFlags.INTERNALDEBUG_HAS_SEEN_DEMO_TEXT, cachedFlagValue); self.ActiveQuest.QuestFlag = cachedFlag; }
/// <summary> /// Builds a new <see cref="MonsterHuntQuest"/> and adds it to the quest list /// </summary> /// <param name="questFlag">The flag that will be used to check if the quest is complete and will be set to true when the quest is completed</param> /// <param name="questIntroConversation">The list of text Frifle will say when giving the player the quest</param> /// <param name="targetEnemyName">The name that will be used when Frifle or Grey Mauser say how much enemies are remaining</param> /// <param name="targetEnemies">List of enemies that can progress the quest</param> /// <param name="numberKillsRequired">Amount of kills that are required for the quest to be completed</param> /// <param name="rewardFlags">Flags that will be set when the player talks to Frifle or the Grey Mauser after completing the quest</param> /// <param name="customRewardFlags">Custom flags that will be set when the player talks to Frifle or the Grey Mauser after completing the quest</param> /// <param name="requiredState">Enemy state that will be required for the quest to count the kill</param> /// <param name="validTargetCheck">Custom check function that will be used to check if a kill is valid</param> /// <param name="index">Index to add the quest at</param> /// <returns>The built quest</returns> public static MonsterHuntQuest AddQuest(GungeonFlags questFlag, List <string> questIntroConversation, string targetEnemyName, List <AIActor> targetEnemies, int numberKillsRequired, List <GungeonFlags> rewardFlags = null, List <CustomDungeonFlags> customRewardFlags = null, JammedEnemyState requiredState = JammedEnemyState.NoCheck, Func <AIActor, MonsterHuntProgress, bool> validTargetCheck = null, int?index = null) { string questStringPrefix = "#CUSTOMQUEST_" + questFlag.ToString() + "_" + Guid.NewGuid().ToString().ToUpper(); string questIntroString = questStringPrefix + "_INTRO"; string questTargetEnemyString = questStringPrefix + "_TARGET"; ETGMod.Databases.Strings.Core.SetComplex(questIntroString, questIntroConversation.ToArray()); ETGMod.Databases.Strings.Core.Set(questTargetEnemyString, targetEnemyName); return(AddQuest(new CustomHuntQuest() { QuestFlag = questFlag, QuestIntroString = questIntroString, TargetStringKey = questTargetEnemyString, ValidTargetMonsterGuids = targetEnemies.Convert(delegate(AIActor enemy) { return enemy.EnemyGuid; }), FlagsToSetUponReward = rewardFlags != null ? SaveTools.CloneList(rewardFlags) : new List <GungeonFlags>(), CustomFlagsToSetUponReward = customRewardFlags != null ? SaveTools.CloneList(customRewardFlags) : new List <CustomDungeonFlags>(), NumberKillsRequired = numberKillsRequired, RequiredEnemyState = requiredState, ValidTargetCheck = validTargetCheck, CustomQuestFlag = CustomDungeonFlags.NONE }, index)); }