Results of my investigation:
1. Count Raid Members :
Code:
0x00F32280: uint NumRaidMembers;
2. Array ptr GUID Raid Members:
Code:
0x00F321E0: uint[] pRaidMembersGUID;
example:
Code:
public struct RaidMembersOffsets
{
public const uint NumRaidMembers = 0x00F32280;
public const uint pRaidMembersGUID = 0x00F321E0;
}
public List<ulong> GetRaidMembersGUID()
{
List<ulong> result = new List<ulong>();
int RaidMembersCount = manager.reader.ReadObject<int>(RaidMembersOffsets.NumRaidMembers);
for (uint i = 0; i < RaidMembersCount; i++)
{
uint pGUID = manager.reader.ReadObject<uint>(RaidMembersOffsets.pRaidMembersGUID + (i * sizeof(uint)));
if (pGUID == 0) break;
ulong raidmemberGUID = manager.reader.ReadObject<ulong>(pGUID);
if (raidmemberGUID == 0) break;
result.Add(raidmemberGUID);
}
return result;
}
3. Example for activ buffs and debuffs:
Code:
public struct WoWAuraReference
{
public const uint AURA_TABLE_1 = 0xC10;
public const uint AURA_COUNT_1 = 0xE90;
public const uint AURA_TABLE_2 = 0xC18;
public const uint AURA_COUNT_2 = 0xC14;
public const uint AURA_SIZE = 0x28;
public const uint AURA_SPELL_ID = 0x8;
public const uint AURA_SPELL_STACK = 0x0E;
public const uint AURA_SPELL_DURATION = 0x10;
public const uint AURA_SPELL_END = 0x14;
public const uint GLOBAL_TIME = 0x9bee94;
}
public struct WoWAura
{
public uint baseAddress;
public int SpellId;
public byte Stacks;
public uint Left;
public uint Duration;
}
public List<WoWAura> Auras
{
get
{
List<WoWAura> list = new List<WoWAura>();
try
{
uint aurasbase = Base + WoWAuraReference.AURA_TABLE_1;
int aurascount = reader.ReadObject<int>(Base + WoWAuraReference.AURA_COUNT_1);
if (aurascount < 0)
{
aurasbase = reader.ReadObject<uint>(Base + WoWAuraReference.AURA_TABLE_2);
aurascount = reader.ReadObject<int>(Base + WoWAuraReference.AURA_COUNT_2);
}
for (uint i = 0; i < aurascount; i++)
{
uint currentaurabase = aurasbase + (WoWAuraReference.AURA_SIZE * i);
int auraspellID = reader.ReadObject<int>(currentaurabase + WoWAuraReference.AURA_SPELL_ID);
if (auraspellID > 0)
{
WoWAura item = new WoWAura();
item.baseAddress = currentaurabase;
item.SpellId = auraspellID;
item.Duration = reader.ReadObject<uint>(currentaurabase + WoWAuraReference.AURA_SPELL_DURATION) / 1000;
uint currenttime = reader.ReadObject<uint>(reader.WoWBase + WoWAuraReference.GLOBAL_TIME);
uint auraendtime = reader.ReadObject<uint>(currentaurabase + WoWAuraReference.AURA_SPELL_END);
item.Left = (auraendtime - currenttime) / 1000;
item.Stacks = reader.ReadObject<byte>(currentaurabase + WoWAuraReference.AURA_SPELL_STACK);
list.Add(item);
}
}
return list;
}
catch
{
return null;
}
}
}
I hope this is helpful to someone.