using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using LavishScriptAPI; using ISXWoW; namespace Predator { class TargetObject { private int _Priority = 100; private WoWObject _WoWObject; public WoWObject WoWObject { get { return _WoWObject; } } public int Priority { get { return _Priority; } } public TargetObject(WoWObject WoWObject) { _WoWObject = WoWObject; } } class Environment : ThreadBase { public event GenericDelegate OnTargetsUpdated; private object _EnvironmentLock = new object(); private Dictionary _TargetList = new Dictionary(); public Dictionary TargetList { get { lock (_TargetList) { return _TargetList; } } } private void UpdateTargets() { lock (_TargetList) { foreach (KeyValuePair Pair in _TargetList) { } } } private bool ValidTarget(WoWObject _WoWObject) { WoWPlayer _Player; WoWUnit _Unit; switch (_WoWObject.Type) { case WoWObjectType.Player: _Player = _WoWObject.GetPlayer(); if (!_Player.Attackable) { return false; } if (_Player.FactionGroup == Bot.Instance.WoW.Me.FactionGroup) { return false; } if (!_Player.Pvp) { return false; } break; case WoWObjectType.Unit: _Unit = _WoWObject.GetUnit(); if (!_Unit.Attackable) { return false; } if (_Unit.Tapped) { return false; } if (_Unit.CreatureType == WoWCreatureType.Critter) { return false; } break; } return true; } public void WoWObjectAdded(object sender, LSEventArgs ea) { string ObjectGUID = ea.Args[0].Trim(); WoWObject _WoWObject; _WoWObject = WoWObject.Get(ObjectGUID); switch (_WoWObject.Type) { case WoWObjectType.Unit: if (ValidTarget(_WoWObject)) { lock (_TargetList) { _TargetList.Add(ObjectGUID, (new TargetObject(_WoWObject))); } (new GenericEvent()).Fire(OnTargetsUpdated,_WoWObject.Type); } break; case WoWObjectType.Player: if (ValidTarget(_WoWObject)) { lock (_TargetList) { _TargetList.Add(ObjectGUID, (new TargetObject(_WoWObject))); } (new GenericEvent()).Fire(OnTargetsUpdated, _WoWObject.Type); } break; case WoWObjectType.Container: break; case WoWObjectType.Item: break; } } public void WoWObjectRemoved(object sender, LSEventArgs ea) { string ObjectGUID = ea.Args[0].Trim(); lock (_TargetList) { if (_TargetList.ContainsKey(ObjectGUID)) { _TargetList.Remove(ObjectGUID); } } (new GenericEvent()).Fire(OnTargetsUpdated, WoWObjectType.NULL); } public void Hook() { LavishScriptAPI.LavishScript.Events.AttachEventTarget("WoW:Object Added", WoWObjectAdded); LavishScriptAPI.LavishScript.Events.AttachEventTarget("WoW:Object Removed", WoWObjectRemoved); } public void Unhook() { LavishScriptAPI.LavishScript.Events.DetachEventTarget("WoW:Object Added", WoWObjectAdded); LavishScriptAPI.LavishScript.Events.DetachEventTarget("WoW:Object Removed", WoWObjectRemoved); } public override void Worker() { while (true) { Thread.Sleep(500); UpdateTargets(); } } } }