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); }
internal static bool CurrentFateHasChain() { var oracleFate = FateDatabase.GetFateFromId(CurrentFateId); if (oracleFate.ChainId != 0) { return(true); } return(false); }
internal static bool PreviousFateChained() { if (PreviousFateId == 0) { return(false); } if (FateDatabase.GetFateFromId(PreviousFateId).ChainId != 0) { return(true); } return(false); }
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); }
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); } }
internal static Fate GetCurrentOracleFate() { return(FateDatabase.GetFateFromId(CurrentFateId)); }
internal static FateData GetChainFate(uint fateId) { var oracleFate = FateDatabase.GetFateFromId(fateId); return(oracleFate.ChainId != 0 ? FateManager.GetFateById(oracleFate.ChainId) : null); }
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); }