Here is the function I use to move and interact by GUID. It writes the target GUID, XYZ floats, and interact type based upon the target object's type.
Code:
public void moveAndInteract(ulong GUID)
{
WowReader.Write<ulong>((uint)WoWData.OffCTM.Base + (uint)WoWData.OffCTM.InteractGuid, GUID);
WowReader.Write<float>((uint)WoWData.OffCTM.Base + (uint)WoWData.OffCTM.MoveX, CObject.XPosition);
WowReader.Write<float>((uint)WoWData.OffCTM.Base + (uint)WoWData.OffCTM.MoveY, CObject.YPosition);
WowReader.Write<float>((uint)WoWData.OffCTM.Base + (uint)WoWData.OffCTM.MoveZ, CObject.ZPosition);
WowReader.Write<int>((uint)WoWData.OffCTM.Base + (uint)WoWData.OffCTM.ActionType,
CObject.Type == 3 ? (CObject.HealthPercent <= 0 ? (int)WoWData.ActionType.Loot : (int)WoWData.ActionType.InteractNpc)
: (int)WoWData.ActionType.InteractObject);
}
and the CTM enums
Code:
public enum OffCTM : uint
{
Base = 0x011180A0,
Unknown1 = 0x0,
TurnScale = 0x4,
Unknown2 = 0x8,
InteractDistance = 0xC,
ActionType = 0x1C,
InteractGuid = 0x20,
MoveX = 0x8C,
MoveY = 0x90,
MoveZ = 0x94
}
public enum ActionType : uint
{
FaceTarget = 0x1,
Stop = 0x3,
WalkTo = 0x4,
InteractNpc = 0x5,
Loot = 0x6,
InteractObject = 0x7,
Unknown1 = 0x8,
Unknown2 = 0x9,
AttackPos = 0xA,
AttackGuid = 0xB,
WalkAndRotate = 0xC
}