Пример #1
0
        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);
        }
Пример #2
0
        internal static async Task <bool> HandleYokaiWatchGrind()
        {
            // Summoning a chocobo dismisses your minion, meaning we can't use it here.
            if (!ChocoboManager.BlockSummon)
            {
                ChocoboManager.BlockSummon = true;
            }

            if (ChocoboManager.Summoned)
            {
                await ChocoboManager.DismissChocobo();
            }

            if (!ConditionParser.HasAtLeast(YokaiWatchGrindData.YokaiMedal, ModeSettings.Instance.YokaiMedalsToFarm))
            {
                if (OracleInventoryManager.IsItemEquipped(YokaiWatchGrindData.YokaiWatchItem, EquipmentSlot.Bracelet))
                {
                    var equipResult = await OracleInventoryManager.EquipItem(YokaiWatchGrindData.YokaiWatchItem, EquipmentSlot.Bracelet);

                    if (equipResult != EquipItemResult.Success)
                    {
                        Logger.SendErrorLog("Unable to equip the Yo-kai Watch.");
                        ignoreNormalMedals = true;
                    }
                }
            }

            foreach (var minion in YokaiWatchGrindData.Minions)
            {
                if (await HandleMinion(minion) == HandleMinionResult.InProgress)
                {
                    return(true);
                }
            }

            if (!ConditionParser.HasAtLeast(YokaiWatchGrindData.YokaiMedal, ModeSettings.Instance.YokaiMedalsToFarm) && !ignoreNormalMedals)
            {
                await TeleportIfNeeded(YokaiWatchGrindData.GetNormalMedalZone());

                return(true);
            }

            if (Core.Player.InCombat)
            {
                return(true);
            }

            Logger.SendLog("We've farmed the medals we need for all minions! Stopping Oracle.");
            await OracleTeleportManager.TeleportToClosestCity();

            OracleBot.StopOracle("We are done!");

            return(true);
        }
Пример #3
0
        private static uint GetMinionMedalZone(YokaiMinion minion)
        {
            var zoneIndex = YokaiWatchGrindData.GetZoneChoice(minion);

            switch (zoneIndex)
            {
            case 1:
                return(minion.MedalZoneOne);

            case 2:
                return(minion.MedalZoneTwo);

            case 3:
                return(minion.MedalZoneThree);

            default:
                return(minion.MedalZoneOne);
            }
        }