private static async Task <HandleMinionResult> HandleMinion(YokaiMinion minion) { if (ConditionParser.HasAtLeast(minion.MedalItemId, YokaiWatchGrindData.GetMedalsToFarm(minion))) { return(HandleMinionResult.Finished); } if (minion.Ignored) { return(HandleMinionResult.Ignored); } if (SummonMinion.CanSummonMinion() && !await SummonMinion.IsMinionSummoned(minion.EnglishName)) { var summonMinionResult = await SummonMinion.Main(minion.EnglishName); if (summonMinionResult != SummonMinionResult.Success) { minion.Ignored = true; return(HandleMinionResult.Failed); } } if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == GetMinionMedalZone(minion)) { return(HandleMinionResult.InProgress); } var medalsToFarm = YokaiWatchGrindData.GetMedalsToFarm(minion) - OracleInventoryManager.GetItemAmount(minion.MedalItemId); Logger.SendLog("We need " + medalsToFarm + " Legendary " + minion.EnglishName + " Medal(s). Teleporting to your chosen zone."); await ZoneChange.HandleZoneChange(GetMinionMedalZone(minion), true); return(HandleMinionResult.InProgress); }
private static async Task TeleportIfNeeded(uint zone) { if (!Core.Player.InCombat && WorldManager.CanTeleport() && WorldManager.ZoneId != zone) { await ZoneChange.HandleZoneChange(zone, true); } }
public void UpdateDistance(float distance) { var newZone = DistanceZone.None; if (distance < _reachDistance) { newZone = DistanceZone.Close; } else if (distance < _closeDistance) { newZone = DistanceZone.Close; } else if (distance < _midDistance) { newZone = DistanceZone.Mid; } else if (distance < _farDistance) { newZone = DistanceZone.Far; } if (newZone != CurrentZone) { CurrentZone = newZone; ZoneChange?.Invoke(CurrentZone); } }
internal static async Task <bool> HandleMultiLevelling() { if (!Core.Player.InCombat && OracleClassManager.NoClassesEnabled()) { Logger.SendErrorLog("You haven't enabled any classes for levelling. Ensure at least one class is enabled and then restart Oracle."); OracleBot.StopOracle("No classes enabled."); } else if (!Core.Player.InCombat && OracleClassManager.FinishedLevelling()) { Logger.SendLog("We've reached level " + ClassSettings.Instance.MaxLevel + " with all enabled classes! Stopping Oracle."); await OracleTeleportManager.TeleportToClosestCity(); OracleBot.StopOracle("We are done!"); } else if (OracleClassManager.ClassChangeNeeded()) { if (GameObjectManager.Attackers.Any()) { return(true); } Logger.SendLog("Class change is needed."); var changeClassResult = await OracleClassManager.ChangeClassJob(OracleClassManager.GetLowestLevelClassJob()); if (changeClassResult == ChangeClassResult.NoGearset || changeClassResult == ChangeClassResult.NonCombatClass) { OracleBot.StopOracle("Problem swapping classes."); } } else if (OracleClassManager.ZoneChangeNeeded()) { if (Core.Player.InCombat || GameObjectManager.Attackers.Any()) { return(true); } Logger.SendLog("Zone change is needed."); await ZoneChange.HandleZoneChange(); } return(true); }
internal static async Task <bool> HandleLevelling() { if (!Core.Player.InCombat && OracleClassManager.FinishedLevelling()) { Logger.SendLog("We've reached level " + ClassSettings.Instance.MaxLevel + " on our current class! Stopping Oracle."); await OracleTeleportManager.TeleportToClosestCity(); OracleBot.StopOracle("We are done!"); } else if (OracleClassManager.ZoneChangeNeeded()) { if (Core.Player.InCombat) { return(true); } Logger.SendLog("Zone change is needed."); await ZoneChange.HandleZoneChange(); } return(true); }
public void AddChange(ZoneChange change) { this.m_changes.Add(change); }
internal static async Task <bool> HandleAnimaGrind() { if (!ConditionParser.HasQuest(AnimaQuest)) { Logger.SendErrorLog("You do not have the quest 'Soul Without Life', which is required to run in Anima grind mode."); OracleBot.StopOracle("Required quest is not picked up."); return(true); } if (ConditionParser.GetQuestStep(AnimaQuest) != AnimaQuestStep) { OracleFateManager.PausePoiSetting = true; if (WorldManager.ZoneId != ZoneMorDhona) { await ZoneChange.HandleZoneChange(ZoneMorDhona, false); } // Step 1: Talk to Rowena. if (ConditionParser.GetQuestStep(AnimaQuest) == 1) { var rowenaLocation = new Vector3(25.65759f, 29f, -822.5876f); if (Core.Player.Distance(rowenaLocation) > 10f) { await OracleMovementManager.NavigateToLocation(rowenaLocation, 2f, false); } const uint rowenaNpcId = 1001304; var rowenaGameObject = GameObjectManager.GameObjects.FirstOrDefault(npc => npc.NpcId == rowenaNpcId); if (rowenaGameObject != null) { if (Core.Player.Distance2D(rowenaGameObject.Location) > 4f) { await OracleMovementManager.NavigateToLocation(rowenaGameObject.Location, 4f, false); } rowenaGameObject.Interact(); await Coroutine.Sleep(MainSettings.Instance.ActionDelay); await SkipDialogue.Main(); } } // Step 2: Talk to Syndony. if (ConditionParser.GetQuestStep(AnimaQuest) == 2) { var syndonyLocation = new Vector3(56.6797f, 50f, -777.5304f); if (Core.Player.Distance(syndonyLocation) > 10f) { await OracleMovementManager.NavigateToLocation(syndonyLocation, 2f, false); } const uint syndonyNpcId = 1016289; var syndonyGameObject = GameObjectManager.GameObjects.FirstOrDefault(npc => npc.NpcId == syndonyNpcId); if (syndonyGameObject != null) { if (Core.Player.Distance2D(syndonyGameObject.Location) > 4f) { await OracleMovementManager.NavigateToLocation(syndonyGameObject.Location, 4f, false); } syndonyGameObject.Interact(); await Coroutine.Sleep(MainSettings.Instance.ActionDelay); await SkipDialogue.Main(); } } } else { if (OracleFateManager.PausePoiSetting) { OracleFateManager.PausePoiSetting = false; } } if (!ConditionParser.HasAtLeast(LuminousIceCrystal, ModeSettings.Instance.AnimaCrystalsToFarm)) { if (OracleClassManager.GetTrueLevel() < 50) { Logger.SendErrorLog("You are too low level to run FATEs in Coerthas Western Highlands."); OracleBot.StopOracle("Too low level to continue."); return(true); } if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == ZoneCoerthasWesternHighlands) { return(true); } var amountNeeded = ModeSettings.Instance.AnimaCrystalsToFarm - OracleInventoryManager.GetItemAmount(LuminousIceCrystal); if (amountNeeded == 1) { Logger.SendLog("We need " + amountNeeded + " more Luminous Ice Crystal."); } else { Logger.SendLog("We need " + amountNeeded + " more Luminous Ice Crystals."); } await ZoneChange.HandleZoneChange(ZoneCoerthasWesternHighlands, true); } else if (!ConditionParser.HasAtLeast(LuminousWindCrystal, ModeSettings.Instance.AnimaCrystalsToFarm)) { if (OracleClassManager.GetTrueLevel() < 50) { Logger.SendErrorLog("You are too low level to run FATEs in The Sea of Clouds."); OracleBot.StopOracle("Too low level to continue."); return(true); } if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == ZoneSeaOfClouds) { return(true); } var amountNeeded = ModeSettings.Instance.AnimaCrystalsToFarm - OracleInventoryManager.GetItemAmount(LuminousWindCrystal); if (amountNeeded == 1) { Logger.SendLog("We need " + amountNeeded + " more Luminous Wind Crystal."); } else { Logger.SendLog("We need " + amountNeeded + " more Luminous Wind Crystals."); } await ZoneChange.HandleZoneChange(ZoneSeaOfClouds, true); } else if (!ConditionParser.HasAtLeast(LuminousEarthCrystal, ModeSettings.Instance.AnimaCrystalsToFarm)) { if (OracleClassManager.GetTrueLevel() < 50) { Logger.SendErrorLog("You are too low level to run FATEs in The Dravanian Forelands."); OracleBot.StopOracle("Too low level to continue."); return(true); } if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == ZoneDravanianForelands) { return(true); } var amountNeeded = ModeSettings.Instance.AnimaCrystalsToFarm - OracleInventoryManager.GetItemAmount(LuminousEarthCrystal); if (amountNeeded == 1) { Logger.SendLog("We need " + amountNeeded + " more Luminous Earth Crystal."); } else { Logger.SendLog("We need " + amountNeeded + " more Luminous Earth Crystals."); } await ZoneChange.HandleZoneChange(ZoneDravanianForelands, true); } else if (!ConditionParser.HasAtLeast(LuminousLightningCrystal, ModeSettings.Instance.AnimaCrystalsToFarm)) { if (OracleClassManager.GetTrueLevel() < 52) { Logger.SendErrorLog("You are too low level to run FATEs in The Churning Mists."); OracleBot.StopOracle("Too low level to continue."); return(true); } if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == ZoneChurningMists) { return(true); } var amountNeeded = ModeSettings.Instance.AnimaCrystalsToFarm - OracleInventoryManager.GetItemAmount(LuminousLightningCrystal); if (amountNeeded == 1) { Logger.SendLog("We need " + amountNeeded + " more Luminous Lightning Crystal."); } else { Logger.SendLog("We need " + amountNeeded + " more Luminous Lightning Crystals."); } await ZoneChange.HandleZoneChange(ZoneChurningMists, true); } else if (!ConditionParser.HasAtLeast(LuminousWaterCrystal, ModeSettings.Instance.AnimaCrystalsToFarm)) { if (OracleClassManager.GetTrueLevel() < 54) { Logger.SendErrorLog("You are too low level to run FATEs in The Dravanian Hinterlands."); OracleBot.StopOracle("Too low level to continue."); return(true); } if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == ZoneDravanianHinterlands) { return(true); } var amountNeeded = ModeSettings.Instance.AnimaCrystalsToFarm - OracleInventoryManager.GetItemAmount(LuminousWaterCrystal); if (amountNeeded == 1) { Logger.SendLog("We need " + amountNeeded + " more Luminous Water Crystal."); } else { Logger.SendLog("We need " + amountNeeded + " more Luminous Water Crystals."); } await ZoneChange.HandleZoneChange(ZoneDravanianHinterlands, true); } else if (!ConditionParser.HasAtLeast(LuminousFireCrystal, ModeSettings.Instance.AnimaCrystalsToFarm)) { if (OracleClassManager.GetTrueLevel() < 55) { Logger.SendErrorLog("You are too low level to run FATEs in Azys Lla."); OracleBot.StopOracle("Too low level to continue."); return(true); } if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == ZoneAzysLla) { return(true); } var amountNeeded = ModeSettings.Instance.AnimaCrystalsToFarm - OracleInventoryManager.GetItemAmount(LuminousFireCrystal); if (amountNeeded == 1) { Logger.SendLog("We need " + amountNeeded + " more Luminous Fire Crystal."); } else { Logger.SendLog("We need " + amountNeeded + " more Luminous Fire Crystals."); } await ZoneChange.HandleZoneChange(ZoneAzysLla, true); } else if (!Core.Player.InCombat) { Logger.SendLog("We have collected " + ModeSettings.Instance.AnimaCrystalsToFarm + " of every crystal! Stopping Oracle."); await OracleTeleportManager.TeleportToClosestCity(); if (OracleTeleportManager.InCity()) { OracleBot.StopOracle("We are done!"); } } return(true); }
internal static async Task <bool> HandleAtmaGrind() { if (!OracleClassManager.ClassJobCanFarmAtma(Core.Player.CurrentJob)) { Logger.SendErrorLog("Your current class (" + OracleClassManager.GetClassJobName(Core.Player.CurrentJob) + ") cannot farm Atma."); OracleBot.StopOracle("Current class cannot farm Atma."); return(true); } var weaponId = GetClassJobZenithWeapon(Core.Player.CurrentJob); if (!OracleInventoryManager.IsItemEquipped(weaponId, EquipmentSlot.MainHand)) { await EquipMainHand(); } // Special case for Gladiator/Paladin shield. if ((Core.Player.CurrentJob == ClassJobType.Gladiator || Core.Player.CurrentJob == ClassJobType.Paladin) && !OracleInventoryManager.IsItemEquipped(ShieldPaladinItemId, EquipmentSlot.OffHand)) { await EquipOffHand(); } if (!ConditionParser.HasAtLeast(AtmaLionItemId, ModeSettings.Instance.AtmaToFarm)) { if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == AtmaLionZoneId) { return(true); } Logger.SendLog("We need " + (ModeSettings.Instance.AtmaToFarm - OracleInventoryManager.GetItemAmount(AtmaLionItemId)) + " Atma of the Lion."); await ZoneChange.HandleZoneChange(AtmaLionZoneId, true); } else if (!ConditionParser.HasAtLeast(AtmaWaterBearerItemId, ModeSettings.Instance.AtmaToFarm)) { if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == AtmaWaterBearerZoneId) { return(true); } Logger.SendLog("We need " + (ModeSettings.Instance.AtmaToFarm - OracleInventoryManager.GetItemAmount(AtmaWaterBearerItemId)) + " Atma of the Water-bearer."); await ZoneChange.HandleZoneChange(AtmaWaterBearerZoneId, true); } else if (!ConditionParser.HasAtLeast(AtmaRamItemId, ModeSettings.Instance.AtmaToFarm)) { if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == AtmaRamZoneId) { return(true); } Logger.SendLog("We need " + (ModeSettings.Instance.AtmaToFarm - OracleInventoryManager.GetItemAmount(AtmaRamItemId)) + " Atma of the Ram."); await ZoneChange.HandleZoneChange(AtmaRamZoneId, true); } else if (!ConditionParser.HasAtLeast(AtmaCrabItemId, ModeSettings.Instance.AtmaToFarm)) { if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == AtmaCrabZoneId) { return(true); } Logger.SendLog("We need " + (ModeSettings.Instance.AtmaToFarm - OracleInventoryManager.GetItemAmount(AtmaCrabItemId)) + " Atma of the Crab."); await ZoneChange.HandleZoneChange(AtmaCrabZoneId, true); } else if (!ConditionParser.HasAtLeast(AtmaFishItemId, ModeSettings.Instance.AtmaToFarm)) { if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == AtmaFishZoneId) { return(true); } Logger.SendLog("We need " + (ModeSettings.Instance.AtmaToFarm - OracleInventoryManager.GetItemAmount(AtmaFishItemId)) + " Atma of the Fish."); await ZoneChange.HandleZoneChange(AtmaFishZoneId, true); } else if (!ConditionParser.HasAtLeast(AtmaBullItemId, ModeSettings.Instance.AtmaToFarm)) { if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == AtmaBullZoneId) { return(true); } Logger.SendLog("We need " + (ModeSettings.Instance.AtmaToFarm - OracleInventoryManager.GetItemAmount(AtmaBullItemId)) + " Atma of the Bull."); await ZoneChange.HandleZoneChange(AtmaBullZoneId, true); } else if (!ConditionParser.HasAtLeast(AtmaScalesItemId, ModeSettings.Instance.AtmaToFarm)) { if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == AtmaScalesZoneId) { return(true); } Logger.SendLog("We need " + (ModeSettings.Instance.AtmaToFarm - OracleInventoryManager.GetItemAmount(AtmaScalesItemId)) + " Atma of the Scales."); await ZoneChange.HandleZoneChange(AtmaScalesZoneId, true); } else if (!ConditionParser.HasAtLeast(AtmaTwinsItemId, ModeSettings.Instance.AtmaToFarm)) { if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == AtmaTwinsZoneId) { return(true); } Logger.SendLog("We need " + (ModeSettings.Instance.AtmaToFarm - OracleInventoryManager.GetItemAmount(AtmaTwinsItemId)) + " Atma of the Twins."); await ZoneChange.HandleZoneChange(AtmaTwinsZoneId, true); } else if (!ConditionParser.HasAtLeast(AtmaScorpionItemId, ModeSettings.Instance.AtmaToFarm)) { if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == AtmaScorpionZoneId) { return(true); } Logger.SendLog("We need " + (ModeSettings.Instance.AtmaToFarm - OracleInventoryManager.GetItemAmount(AtmaScorpionItemId)) + " Atma of the Scorpion."); await ZoneChange.HandleZoneChange(AtmaScorpionZoneId, true); } else if (!ConditionParser.HasAtLeast(AtmaArcherItemId, ModeSettings.Instance.AtmaToFarm)) { if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == AtmaArcherZoneId) { return(true); } Logger.SendLog("We need " + (ModeSettings.Instance.AtmaToFarm - OracleInventoryManager.GetItemAmount(AtmaArcherItemId)) + " Atma of the Archer."); await ZoneChange.HandleZoneChange(AtmaArcherZoneId, true); } else if (!ConditionParser.HasAtLeast(AtmaGoatItemId, ModeSettings.Instance.AtmaToFarm)) { if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == AtmaGoatZoneId) { return(true); } Logger.SendLog("We need " + (ModeSettings.Instance.AtmaToFarm - OracleInventoryManager.GetItemAmount(AtmaGoatItemId)) + " Atma of the Goat."); await ZoneChange.HandleZoneChange(AtmaGoatZoneId, true); } else if (!ConditionParser.HasAtLeast(AtmaMaidenItemId, ModeSettings.Instance.AtmaToFarm)) { if (Core.Player.InCombat || !WorldManager.CanTeleport() || WorldManager.ZoneId == AtmaMaidenZoneId) { return(true); } Logger.SendLog("We need " + (ModeSettings.Instance.AtmaToFarm - OracleInventoryManager.GetItemAmount(AtmaMaidenItemId)) + " Atma of the Maiden."); await ZoneChange.HandleZoneChange(AtmaMaidenZoneId, true); } else if (!Core.Player.InCombat) { Logger.SendLog("We have collected " + ModeSettings.Instance.AtmaToFarm + " of every Atma! Stopping Oracle."); await OracleTeleportManager.TeleportToClosestCity(); OracleBot.StopOracle("We are done!"); } return(true); }