Esempio n. 1
0
        internal static bool FateProgressionMet(FateData fate)
        {
            if (FateDatabase.GetFateFromFateData(fate).Type != FateType.Boss && FateDatabase.GetFateFromFateData(fate).Type != FateType.MegaBoss)
            {
                return(true);
            }

            if (FateDatabase.GetFateFromFateData(fate).Type == FateType.Boss && fate.Progress >= FateSettings.Instance.BossEngagePercentage)
            {
                return(true);
            }

            if (FateDatabase.GetFateFromFateData(fate).Type == FateType.Boss && FateSettings.Instance.WaitAtBossForProgress)
            {
                return(true);
            }

            if (FateDatabase.GetFateFromFateData(fate).Type == FateType.MegaBoss && fate.Progress >= FateSettings.Instance.MegaBossEngagePercentage)
            {
                return(true);
            }

            if (FateDatabase.GetFateFromFateData(fate).Type == FateType.MegaBoss && FateSettings.Instance.WaitAtMegaBossForProgress)
            {
                return(true);
            }

            return(false);
        }
Esempio n. 2
0
        internal static bool CurrentFateHasChain()
        {
            var oracleFate = FateDatabase.GetFateFromId(CurrentFateId);

            if (oracleFate.ChainId != 0)
            {
                return(true);
            }

            return(false);
        }
Esempio n. 3
0
        internal static bool PreviousFateChained()
        {
            if (PreviousFateId == 0)
            {
                return(false);
            }

            if (FateDatabase.GetFateFromId(PreviousFateId).ChainId != 0)
            {
                return(true);
            }

            return(false);
        }
Esempio n. 4
0
        internal static bool WaitingForChainFate()
        {
            if (!FateSettings.Instance.WaitForChain)
            {
                return(false);
            }

            if (PreviousFateId == 0)
            {
                return(false);
            }

            var chainId = FateDatabase.GetFateFromId(PreviousFateId).ChainId;

            if (chainId == 0)
            {
                return(false);
            }

            if (!ReachedCurrentFate)
            {
                Logger.SendLog("Not waiting for the next FATE in the chain: we didn't reach the previous FATE.");
                PreviousFateId = 0;
                return(false);
            }

            var chainOracleFateInfo = FateDatabase.GetFateFromId(chainId);

            if (!IsFateTypeEnabled(chainOracleFateInfo))
            {
                Logger.SendLog("Not waiting for the next FATE in the chain: its type is not enabled.");
                PreviousFateId = 0;
                return(false);
            }

            if (BlacklistSettings.Instance.BlacklistedFates.Contains(chainId))
            {
                Logger.SendLog("Not waiting for the next FATE in the chain: it is contained in the user blacklist.");
                PreviousFateId = 0;
                return(false);
            }

            return(true);
        }
Esempio n. 5
0
        private static async Task ParseFateData()
        {
            fateDataXml = GetXmlDocument();
            database    = new FateDatabase();

            if (fateDataInvalidFlag || fateDataXml.DocumentElement == null)
            {
                return;
            }

            try
            {
                foreach (XmlNode currentNode in fateDataXml.DocumentElement.ChildNodes)
                {
                    // Ensure nodes are instantiated.
                    fateId                = 0;
                    fateName              = string.Empty;
                    fateLevel             = 0;
                    fateType              = FateType.Null;
                    fateSupportLevel      = FateSupportLevel.Unsupported;
                    fateLandingRadius     = 1f;
                    fateCollectItemId     = 0;
                    fateNpcId             = 0;
                    fatePreferredTargetId = new List <uint>();
                    fateChainId           = 0;

                    if (currentNode["ID"] != null)
                    {
                        fateId = uint.Parse(currentNode["ID"].InnerText);
                    }

                    if (currentNode["Name"] != null)
                    {
                        fateName = currentNode["Name"].InnerText;
                    }

                    if (currentNode["Level"] != null)
                    {
                        fateLevel = uint.Parse(currentNode["Level"].InnerText);
                    }

                    if (currentNode["Type"] != null)
                    {
                        fateType = (FateType)int.Parse(currentNode["Type"].InnerText);
                    }

                    if (currentNode["OracleSupport"] != null)
                    {
                        fateSupportLevel = (FateSupportLevel)int.Parse(currentNode["OracleSupport"].InnerText);
                    }

                    if (currentNode["LandingRadius"] != null)
                    {
                        fateLandingRadius = float.Parse(currentNode["LandingRadius"].InnerText);
                    }

                    if (currentNode["CollectItemId"] != null)
                    {
                        fateCollectItemId = uint.Parse(currentNode["CollectItemId"].InnerText);
                    }

                    if (currentNode["NpcId"] != null)
                    {
                        fateNpcId = uint.Parse(currentNode["NpcId"].InnerText);
                    }

                    if (currentNode["PreferredTargetId"] != null)
                    {
                        var targets = currentNode.SelectNodes("PreferredTargetId");
                        if (targets != null)
                        {
                            for (var i = 0; i < targets.Count; i++)
                            {
                                var xmlNode = targets.Item(i);
                                if (xmlNode != null)
                                {
                                    fatePreferredTargetId.Add(uint.Parse(xmlNode.InnerText));
                                }
                            }
                        }
                    }

                    if (currentNode["ChainID"] != null)
                    {
                        fateChainId = uint.Parse(currentNode["ChainID"].InnerText);
                    }

                    database.AddFateToDatabase(CreateFate());
                }
            }
            catch (FormatException exception)
            {
                Logger.SendErrorLog("Formatting error during fate data parse.");
                Logger.SendDebugLog("FormatException thrown:\n\n" + exception + "\n");
            }
            catch (OverflowException exception)
            {
                Logger.SendErrorLog("Numerical conversion resulted in overflow.");
                Logger.SendDebugLog("OverflowException thrown.\n\n" + exception);
            }
        }
Esempio n. 6
0
 internal static Fate GetCurrentOracleFate()
 {
     return(FateDatabase.GetFateFromId(CurrentFateId));
 }
Esempio n. 7
0
        internal static FateData GetChainFate(uint fateId)
        {
            var oracleFate = FateDatabase.GetFateFromId(fateId);

            return(oracleFate.ChainId != 0 ? FateManager.GetFateById(oracleFate.ChainId) : null);
        }
Esempio n. 8
0
        internal static bool FateFilter(FateData fate)
        {
            var oracleFateData = FateDatabase.GetFateFromFateData(fate);

            if (oracleFateData.Type == FateType.Boss && !FateSettings.Instance.BossFatesEnabled)
            {
                return(false);
            }

            if (oracleFateData.Type == FateType.Collect && !FateSettings.Instance.CollectFatesEnabled)
            {
                return(false);
            }

            if (oracleFateData.Type == FateType.Defence && !FateSettings.Instance.DefenceFatesEnabled)
            {
                return(false);
            }

            if (oracleFateData.Type == FateType.Escort && !FateSettings.Instance.EscortFatesEnabled)
            {
                return(false);
            }

            if (oracleFateData.Type == FateType.Kill && !FateSettings.Instance.KillFatesEnabled)
            {
                return(false);
            }

            if (oracleFateData.Type == FateType.MegaBoss && !FateSettings.Instance.MegaBossFatesEnabled)
            {
                return(false);
            }

            if (WaitingForChainFate() && GetChainFate(PreviousFateId).Id != fate.Id)
            {
                return(false);
            }

            if (ModeSettings.Instance.OracleOperationMode == OracleOperationMode.SpecificFates && !FateSettings.Instance.SpecificFateList.Contains(fate.Id))
            {
                return(false);
            }

            if (Blacklist.Contains(fate.Id, BlacklistFlags.Node))
            {
                return(false);
            }

            if (BlacklistSettings.Instance.BlacklistedFates.Contains(fate.Id))
            {
                return(false);
            }

            if (FateSettings.Instance.IgnoreLowDuration)
            {
                if (Math.Abs(fate.Progress) < 0.5f && fate.TimeLeft < TimeSpan.FromSeconds(FateSettings.Instance.LowFateDuration))
                {
                    return(false);
                }
            }

            // Always ignore FATEs under 60 seconds if they're collection FATEs (stops reselecting FATE after final turn in).
            if (oracleFateData.Type == FateType.Collect && fate.TimeLeft < TimeSpan.FromSeconds(60))
            {
                return(false);
            }

            if (oracleFateData.SupportLevel == FateSupportLevel.Unsupported)
            {
                return(false);
            }

            if (oracleFateData.SupportLevel == FateSupportLevel.Problematic && !FateSettings.Instance.RunProblematicFates)
            {
                return(false);
            }

            if (oracleFateData.SupportLevel == FateSupportLevel.NotInGame)
            {
                return(false);
            }

            if (!FateProgressionMet(fate))
            {
                return(false);
            }

            if (fate.Level > OracleClassManager.GetTrueLevel() + FateSettings.Instance.FateMaxLevelAbove)
            {
                return(false);
            }

            if (fate.Level < OracleClassManager.GetTrueLevel() - FateSettings.Instance.FateMinLevelBelow &&
                (ModeSettings.Instance.OracleOperationMode == OracleOperationMode.FateGrind ||
                 ModeSettings.Instance.OracleOperationMode == OracleOperationMode.LevelMode ||
                 ModeSettings.Instance.OracleOperationMode == OracleOperationMode.MultiLevelMode))
            {
                return(false);
            }

            return(true);
        }