Here how I handle objects (it's a crappy code but I'm not good at C#)
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Coloa
{
class ObjectManager
{
private List<WoWNPC> m_Objects;
private WoWNPC m_TargetObject;
private WoWNPC m_Player;
private UInt32 m_pObjMgr;
private UInt64 m_TargetGUID, m_LocalGUID;
public ObjectManager()
{
UInt32 pClientConnection = Memory.Instance.MemoryReader.Read<UInt32>(
new IntPtr(Offsets.P_CLIENT_CONNECTION));
m_pObjMgr = Memory.Instance.MemoryReader.Read<UInt32>(new IntPtr(pClientConnection
+ Offsets.P_OBJMGR));
m_LocalGUID = Memory.Instance.MemoryReader.Read<UInt64>(new IntPtr(m_pObjMgr
+ Offsets.OBJMGR_LOCALGUID));
m_Objects = new List<WoWNPC>();
}
public UInt64 LocalGUID
{
get { return m_LocalGUID; }
}
public void Flush()
{
m_Objects.Clear();
}
public List<WoWNPC> GetObjects()
{
return m_Objects;
}
public void Update()
{
Int32 dwFirstObject, dwCurObject;
m_TargetGUID = Memory.Instance.MemoryReader.Read<UInt64>(new IntPtr(Offsets.P_TARGET_GUID));
dwFirstObject = Memory.Instance.MemoryReader.Read<Int32>(new IntPtr(m_pObjMgr
+ Offsets.OBJMGR_FIRSTOBJ));
dwCurObject = dwFirstObject;
while (dwCurObject != 0 && (dwCurObject & 1) == 0)
{
UInt64 ObjGUID;
bool ObjectExists = false;
ObjGUID = Memory.Instance.MemoryReader.Read<UInt64>(new IntPtr(dwCurObject
+ Offsets.OBJMGR_OBJGUID));
if (m_Objects.Count == 0)
{
int typeid = Memory.Instance.MemoryReader.Read<int>(new IntPtr(
dwCurObject + Offsets.GAME_OBJECT_CREATEDBY));
if (typeid == 3)
{
m_Objects.Add(new WoWNPC(dwCurObject));
}
}
else
{
for (int i = 0; i < m_Objects.Count; i++)
{
if (m_Objects[i].GetGUID() == ObjGUID)
{
ObjectExists = true;
}
}
if (ObjectExists == false)
{
int typeid = Memory.Instance.MemoryReader.Read<int>(new IntPtr(
dwCurObject + Offsets.GAME_OBJECT_CREATEDBY));
if (typeid == 3)
{
m_Objects.Add(new WoWNPC(dwCurObject));
}
}
}
// If the target is the current object
if (ObjGUID == m_TargetGUID)
{
m_TargetObject = new WoWNPC(dwCurObject);
}
// If the target is the current object
if (ObjGUID == m_LocalGUID)
{
m_Player = new WoWNPC(dwCurObject);
}
dwFirstObject = dwCurObject;
dwCurObject = Memory.Instance.MemoryReader.Read<Int32>(new IntPtr(dwFirstObject
+ Offsets.OBJMGR_NEXTOBJ));
if (dwCurObject == dwFirstObject)
{
break;
}
}
}
public int GetObjectByGUID(UInt64 GUID)
{
for (int i = 0; i < m_Objects.Count; i++)
{
if (m_Objects[i].GetGUID() == GUID)
{
return m_Objects[i].Object;
}
}
return 0;
}
public WoWNPC GetWoWObjectByGUID(UInt64 GUID)
{
for (int i = 0; i < m_Objects.Count; i++)
{
if (m_Objects[i].GetGUID() == GUID)
{
return m_Objects[i];
}
}
return null;
}
public WoWNPC TargetObject
{
get { return m_TargetObject; }
set { m_TargetObject = value; }
}
public WoWNPC Player
{
get { return m_Player; }
set { m_Player = value; }
}
}
}
Credits: Apoc, kynox, and the guy who wrote the memory reader lib.
Feel free to comment.