Smarter
Member
- Joined
- Jan 15, 2010
- Messages
- 763
- Reaction score
- 9
I have been playing with a Priority Targeting System, and was looking for some advice on Optimizing it. I take all units within a set range, and assign them a variable Priority, defaulted at int.MaxValue; Then, subtracting their distance, and one for each criteria, I chip away at that number. Lowest number, is highest priority :-D?
In a CC's Pulse:
The Function/Class:
In a CC's Pulse:
Code:
private List<Target> _potentialTargets = new List<Target>();
private List<Target> _combatTargets = new List<Target>();
private readonly WaitTimer _targetListTimer = WaitTimer.OneSecond;
public override void Pulse()
{
if (!_targetListTimer.IsFinished) return;
GeneratePriority();
_combatTargets = _potentialTargets.Where(o => o.IsWithinMeleeRange) as List<Target>;
_potentialTargets.First().Target();
_targetListTimer.Reset();
}
The Function/Class:
Code:
private void GeneratePriority()
{
lock (_potentialTargets)
{
_potentialTargets.Clear();
_potentialTargets = ObjectManager.GetObjectsOfType<WoWUnit>().Where(o => o.Distance < 50 && o.IsAlive) as List<Target>;
if (_potentialTargets != null)
{
foreach (var target in _potentialTargets)
{
target.Priority = target.Priority - (200 - target.Distance);
if (target.IsPlayer)
target.Priority = target.Priority--;
target.Priority = target.Priority - (100 - target.HealthPercent);
if (target.Elite)
target.Priority = target.Priority--;
}
_potentialTargets.OrderBy(o => o.Priority);
}
}
}
}
public class Target : WoWUnit
{
/// <summary/>
/// <param name="baseAddress">pointer for this object. </param>
public Target(uint baseAddress) : base(baseAddress)
{
Priority = int.MaxValue;
}
public double Priority;
}
Last edited: