Okay, I'm in a very good mood after I found the active chain list :D.
Here is the ability stuff you need:
private static uint EUarray = 0xECEDF8;
private static uint NAarray = 0xF4A118;
private static uint EUnodePointer = 0xAFC;
private static uint EUmultip = 5;
private static uint NAnodePointer = 0xB40;
private static uint NAmultip = 4;
And:
private static uint euID = 0x8;
private static uint naID = 0x8;
private static uint euName = 0x18;
private static uint naName = 0x1C;
private static uint euCooldown = 0x38;
private static uint naCooldown = 0x3c;
private static uint euCooldownRemaining = 0x3C;
private static uint naCooldownRemaining = 0x40;
private static uint euCastTime = 0x58;
private static uint naCastTime = 0x60;
private static uint euLevel = 0x50;
private static uint naLevel = 0x58;
And here the code:
ulong pointer1 = Game.Process.GetPointer((ulong)AionMemory.EntityLi st.basePtr + (ulong)Offsets.abilityListOffsets.getArray());
ulong pointer2 = Game.Process.GetPointer(pointer1 + (ulong)Offsets.abilityListOffsets.getNodePointer() );
this._hAbilityListID.Clear();
this._hAbilityListName.Clear();
foreach (ulong num2 in this._Node(Game.Process.GetPointer(pointer2), new HashSet<ulong>()))
{
Ability ability = new Ability(Game.Process.GetPointer(num2 + (ulong)(Game.Process.PointerSize * Offsets.abilityListOffsets.getNodeMultiplier())), true);
if (ability.GetID() > 0)
{
this._hAbilityListID[ability.GetID()] = ability;
this._hAbilityListName[ability.GetName()] = ability;
}
}
If you still don't understand it ... learn C# first :D. Have fun guys, but it's only the ability list, not the active chain list - don't mix it up with the normal chain list which only shows chains instead of all abilites.