Beispiel #1
0
        public async Task <bool> Run()
        {
            if (!_shouldAssign)
            {
                return(false);
            }

            GlobalLog.Debug("[AssignMoveSkillTask] Now going to assign the Move skill to the skillbar. It must be bound to anything except left mouse button.");

            var emptySlot = FirstEmptySkillSlot;

            if (emptySlot == -1)
            {
                GlobalLog.Error("[AssignMoveSkillTask] Cannot assign the Move skill. There are no free slots on the skillbar.");
                BotManager.Stop();
                return(true);
            }

            var moveSkill = Skillbar.Skills.FirstOrDefault(s => s != null && s.InternalName == "Move");

            if (moveSkill == null)
            {
                GlobalLog.Error("[AssignMoveSkillTask] Unknown error. Cannot find the Move skill on the skillbar.");
                BotManager.Stop();
                return(true);
            }

            var err = Skillbar.SetSlot(emptySlot, moveSkill);

            if (err != LokiPoe.InGameState.SetSlotResult.None)
            {
                GlobalLog.Error($"[AssignMoveSkillTask] Fail to assign the Move skill to slot {emptySlot}. Error: \"{err}\".");
                ErrorManager.ReportError();
                await Wait.SleepSafe(500);

                return(true);
            }

            if (!await Wait.For(() => Skillbar.Slot(emptySlot)?.InternalName == "Move", "skill slot changing"))
            {
                ErrorManager.ReportError();
                return(true);
            }

            GlobalLog.Debug($"[AssignMoveSkillTask] Move skill has been successfully assigned to slot {emptySlot}.");
            _shouldAssign = false;
            return(false);
        }
        private static async Task SetAuraToSlot(Skill aura, int slot)
        {
            string name = aura.Name;

            GlobalLog.Debug($"[CastAuraTask] Now setting \"{name}\" to slot {slot}.");
            var isSet = SkillBar.SetSlot(slot, aura);

            if (isSet != LokiPoe.InGameState.SetSlotResult.None)
            {
                GlobalLog.Error($"[CastAuraTask] Fail to set \"{name}\" to slot {slot}. Error: \"{isSet}\".");
                return;
            }
            await Wait.For(() => IsInSlot(slot, name), "aura slot changing");

            await Wait.SleepSafe(100);
        }
        private static async Task ApplyAura(Skill aura)
        {
            string name = aura.Name;

            GlobalLog.Debug($"[CastAuraTask] Now casting \"{name}\".");
            var used = SkillBar.Use(aura.Slot, false);

            if (used != LokiPoe.InGameState.UseResult.None)
            {
                GlobalLog.Error($"[CastAuraTask] Fail to cast \"{name}\". Error: \"{used}\".");
                return;
            }
            await Wait.For(() => !LokiPoe.Me.HasCurrentAction && PlayerHasAura(name), "aura applying");

            await Wait.SleepSafe(100);
        }
        public async Task <bool> Run()
        {
            var area = World.CurrentArea;

            if (!area.IsHideoutArea && !area.IsMapRoom)
            {
                return(false);
            }

            await Coroutines.CloseBlockingWindows();

            var golemSkill = SkillBar.Skills.FirstOrDefault(s => s.IsOnSkillBar && s.SkillTags.Contains("golem"));

            if (golemSkill != null)
            {
                var golemObj = golemSkill.DeployedObjects.FirstOrDefault() as Monster;
                if (golemObj == null || golemObj.HealthPercent < MinGolemHpPercent)
                {
                    GlobalLog.Debug($"[CastAuraTask] Now summoning \"{golemSkill.Name}\".");
                    SkillBar.Use(golemSkill.Slot, false);
                    await Wait.SleepSafe(100);

                    await Coroutines.FinishCurrentAction();

                    await Wait.SleepSafe(100);
                }
            }
            var auras = GetAurasForCast();

            if (auras.Count > 0 && AllAuras.Any(a => a.IsOnSkillBar))
            {
                GlobalLog.Info($"[CastAuraTask] Found {auras.Count} aura(s) for casting.");
                await CastAuras(auras);
            }
            return(false);
        }
        private static bool IsInSlot(int slot, string name)
        {
            var skill = SkillBar.Slot(slot);

            return(skill != null && skill.Name == name);
        }