private IEnumerator DoAttack() { LogMessage(" ------ DoAttack called", 1); List <Entity> monsters = GameController.EntityListWrapper .ValidEntitiesByType[EntityType.Monster] .Where(o => o.IsAlive) .Where(o => o.IsHostile) .ToList(); Entity leaderPlayer = FollowerHelpers.GetLeaderEntity(Settings.LeaderName, GameController.Entities); Entity player = leaderPlayer ?? GameController.Player; IEnumerator nextStep = null; try { if (monsters.Any()) { List <Entity> closestMonsters = monsters.OrderBy(o => FollowerHelpers.EntityDistance(o, player)).ToList(); Entity closestMonster = closestMonsters.First(); nextStep = AttackEntity(closestMonster); } else { nextStep = DoFollow(); } } catch (ArgumentNullException e) { nextStep = DoFollow(); } yield return(nextStep); }
private IEnumerator DoFollow() { LogMessage(" :::::::: DoFollow called", 1); Entity leaderPlayer = FollowerHelpers.GetLeaderEntity(Settings.LeaderName, GameController.Entities); if (leaderPlayer == null) { yield break; } yield return(TryToClickOnLeader(leaderPlayer)); }
private IEnumerator AttackEntity(Entity closestMonster) { LogMessage(" ------ AttackEntity called", 1); List <SkillSettings> skills = new List <SkillSettings>() { Settings.SkillOne, Settings.SkillTwo, Settings.SkillThree, }; SkillSettings availableSkill = null; try { availableSkill = skills .Where(o => { long delta = GetDeltaInMilliseconds(o.LastTimeUsed); return(delta > Int32.Parse(o.CooldownBetweenCasts.Value)); }) .Where(o => { var distance = FollowerHelpers.EntityDistance(closestMonster, GameController.Player) / 10; LogMessage($"DISTANCE: {distance}"); LogMessage($"o.Range.Value: {o.Range.Value}"); return(distance < o.Range.Value); }) .OrderBy(o => o.Priority.Value) .First(); availableSkill.LastTimeUsed = DateTime.UtcNow; } catch (Exception e) { LogError(" ------ Error during filtering an available skill"); } if (availableSkill != null) { yield return(HoverTo(closestMonster)); Input.KeyPressRelease(availableSkill.SkillHotkey.Value); } else { yield return(DoFollow()); } yield break; }
private IEnumerator EnterNearestInstance() { Entity player = GameController.Player; List <Entity> entities = GameController.EntityListWrapper .ValidEntitiesByType[EntityType.AreaTransition] .OrderBy(o => FollowerHelpers.EntityDistance(o, player)) .ToList(); if (entities.Any()) { Entity entrance = entities.First(); yield return(HoverTo(entrance)); yield return(new WaitTime(100)); yield return(Mouse.LeftClick()); yield return(new WaitTime(2000)); } yield break; }