Public feed
#893202
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<WoWObjectType> OnTargetsUpdated;
private object _EnvironmentLock = new object();
private Dictionary<string, TargetObject> _TargetList = new Dictionary<string, TargetObject>();
public Dictionary<string, TargetObject> TargetList
{
get
{
lock (_TargetList)
{
return _TargetList;
}
}
}
private void UpdateTargets()
{
lock (_TargetList)
{
foreach (KeyValuePair<string, TargetObject> 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<WoWObjectType>(OnTargetsUpdated,_WoWObject.Type);
}
break;
case WoWObjectType.Player:
if (ValidTarget(_WoWObject))
{
lock (_TargetList)
{
_TargetList.Add(ObjectGUID, (new TargetObject(_WoWObject)));
}
(new GenericEvent()).Fire<WoWObjectType>(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<WoWObjectType>(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();
}
}
}
}