public void CheckCurrentPath() { if (CurrentPath == null) { CurrentPath = RandomMapPath; } CurrentPathLocation = CurrentPath != null?CurrentPath.FirstAtPosition(Client.Attributes.ServerPosition) : null; if (CurrentPathLocation == null) { CurrentPath = null; } else { if (CurrentPathLocation.NextNode == null) { CurrentPath = CurrentPathLocation = null; } else { if (Client.FieldMap.MapObjects.Where( o => (o.Type == MapObjectType.Aisling | o.Type == MapObjectType.Monster | o.Type == MapObjectType.NPC) && CurrentPathLocation.NextNode.Position.DistanceFrom(o.ServerPosition) == 0 ).Count() > 0) { CurrentPath = CurrentPathLocation = null; } } } }
public void ThreadLoop() { int i = 0; Targeting.Info TargetInfo = null; while (true) { if (!Paused && Client != null && Client.ClientReady && Client.IsInGame() && Client.Attributes != null && Client.ObjectSearcher != null && Client.MapLoaded) { WalkingPath.CheckCurrentPath(); #region Auto Pickup if (AutoPickUp) { MapObject pickupItem = Target.FloorObjects.Where(o => o != null && !o.PickedUp && Client.Attributes.ServerPosition.DistanceFrom(o.ServerPosition) > 0 && (WalkingPath.CurrentPath == null || WalkingPath.CurrentPathLocation == null || WalkingPath.CurrentPathLocation.FirstNodeBackwardsWhere(node => node.Position.DistanceFrom(o.ServerPosition) == 0) == null) && Position.WithinSquare(o.ServerPosition, 2)).FirstOrDefault(); if (pickupItem != null) { pickupItem.PickedUp = true; Console.WriteLine($"Picking up {pickupItem.ServerPosition}"); GameActions.Pickup(Client, pickupItem.ServerPosition); continue; } } #endregion #region Targeting if (Target.CheckTarget()) { if (TargetInfo == null || TargetInfo.BadTargetInfo) { TargetInfo = Target.CurrentTargetInfo; } TargetInfo.CheckPathToTarget(); if (!TargetInfo.BadTargetInfo) { string[] spells = new string[] { //"beag srad", "beag sal", //"beag athar" }; string spell = spells[i = (++i % spells.Length)]; Console.WriteLine($"Casting on sprite {TargetInfo.Value.Sprite}"); Client.Utilities.CastSpell(spells[i], TargetInfo.Value); // System.Threading.Thread.Sleep(100); } } #endregion #region Auto Walk else if (WalkingPath.CurrentPath != null && HPPercent > 50 && MPPercent > 50) { Direction pathDirection = WalkingPath.CurrentPathLocation.Direction; SonarV2.Node nextNode = WalkingPath.CurrentPathLocation.NextNode; bool Walkable = !Client.FieldMap.IsWall(nextNode.Position.X, nextNode.Position.Y); if (!Walkable) { WalkingPath.CurrentPath = WalkingPath.CurrentPathLocation = null; continue; } if (pathDirection == Direction.None || nextNode.Attempts > 4) { WalkingPath.CurrentPath = WalkingPath.CurrentPathLocation = null; continue; } nextNode.Attempts++; GameActions.Walk(Client, pathDirection); System.Threading.Thread.Sleep(375); } #endregion } System.Threading.Thread.Sleep(100); } }
public void UpdatePathToTarget() { PathToTarget = PathFinder.FindPathTo(Position); }