示例#1
0
        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)");
            }
        }
示例#2
0
        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>();
            }
        }
示例#3
0
        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));
        }