Code:
public class PublicPointers
{
#region Globals enum
public enum Globals
{
PlayerName = 0x2557F08,
Version = 28768,
}
#endregion
#region InGame enum
public enum InGame
{
//0x00 = out of game, 0x04 in game, others when loading screen, UI loading.
// Note: can become 0x04 before UI is fully complete.
InGame = 0x26E2440,
InstanceSize = 0x26E32B0,
HighResCounter = 0x26578D4,
}
#endregion
}
internal class Pointers
{
#region Nested type: ObjectManager
//All new object styles for 8.1.
internal enum ObjectManager
{
CurMgrPointer = 0x264A740,
NextObject = 0x30,
FirstObject = 0x18,
LocalGUID = 0x220,
ObjectTypeOffset = 0x10,
}
#endregion
#region Nested type: BMAH
//New auction structure for 8.1
internal enum BMAH
{
ItemCount = 0x273C578, // 0x3EFE0
ItemStart = ItemCount + 0x08,
ItemStructSize = 0xA0, // was 0xA8
}
#endregion
#region Nested type: Globals
internal enum Globals
{
//Currently these two are the same.
//This is used for error messages.
RedMessage = 0x26E26B0,
//This is used in those cases when the chat turns blue to indicate a skill up
// - like "Engineering has increased to blah"
BlueMessage = RedMessage,
MouseOverGUID = 0x26E2448,
CursorType = 0x2788350,
CursorType2 = CursorType + 0x04,
ChatboxIsOpen = 0x25E43A4,
//Will have 0x100 when looting.
LootWindow = 0x2707D80,
IsBobbing = 0x00A4,
//Method Changed for 8.1
ArchFacing = 0x118,
}
#endregion
#region Nested type: ActionBar enum
public enum ActionBar
{
ActionBarFirstSlot = 0x2704990, // 0x3EFE0
ActionBarBonus = ActionBarFirstSlot + 0x240,
}
#endregion
#region Nested type: ClickToMove enum
public enum ClickToMove
{
Name = 0x30,
Offset = 0x60,
Pointer = 0x26E1ED0, // 0x3EFE0
}
#endregion
#region Nested type: AutoLoot enum
public enum AutoLoot
{
Name = 0x30,
Offset = 0x60,
Pointer = 0x26E1F10, // 0x3EFE0
}
#endregion
#region Nested type: LUAError enum
public enum LUAError
{
Name = 0x30,
Offset = 0x60,
Pointer = 0x26E1EB8, // 0x3EFE0
}
#endregion
#region Nested type: CgUnitCGetCreatureRank enum
public enum CgUnitCGetCreatureRank
{
Offset1 = 0x0308, // -0x1438
Offset2 = 0x38,
}
#endregion
#region Nested type: CgUnitCGetCreatureType enum
public enum CgUnitCGetCreatureType
{
Offset1 = 0x0308, // -0x1438
Offset2 = 0x30,
}
#endregion
#region Nested type: CgWorldFrameGetActiveCamera enum
public enum CgWorldFrameGetActiveCamera
{
//return Memory.Read<uint>(Memory.ReadRelative<uint>((uint)Pointers.CgWorldFrameGetActiveCamera.CameraPointer)
// + (uint)Pointers.CgWorldFrameGetActiveCamera.CameraOffset);
CameraX = 0x10,
CameraY = 0x14,
CameraZ = 0x18,
CameraMatrix = 0x1C,
CameraPointer = 0x26E3CB8, // 0x3EFE0
CameraOffset = 0x3330, // 0x00
}
#endregion
#region Nested type: AutoAttack
internal enum AutoAttack
{
//Address shows the GUID of the Auto Attack target
AutoAttackGUID = 0x0400, // -0x1430
}
#endregion
#region Nested type: CastingInfo
internal enum CastingInfo
{
//There are two "is casting" numbers. One shows the casting even if it is "instant".
InstantCasting = 0x04C8, // -0x1430
IsCasting = 0x04F0, // -0x1430
ChanneledCasting = 0x520, // -0x1430
ChanneledCastingEndTime = ChanneledCasting + 0xC,
}
#endregion
#region Nested type: Chat
internal enum Chat : uint
{
ChatStart = 0x26B22A0, // 0x3EFE0
ChatPosition = 0x26B198C, // 0x3EFE0
OffsetToNextMsg = 0xCB8,
MsgSenderGuid = 0x00,
MsgSenderName = 0x034,
MsgFullMessage = 0x00E6,
MsgChatType = 0xCA0,
MsgChannelNum = 0xCA4,
MsgTimeStamp = 0xCB0,
ChatQueueDepth = 0x3C,
}
#endregion
#region Nested type: Runes
internal enum Runes
{
RunesAvailable = 0x2712E2C,
}
#endregion
#region Nested type: KeyBinding
internal enum KeyBinding
{
//New key handler as of 8.1
NumKeyBindings = 0x2705E00,
First = 0x28,
Next = 0x18,
Key = 0x30,
Command = 0x58,
}
#endregion
#region Nested type: Macros
internal enum MacroManager
{
MacroCount = 0x248D0D0, // 0x3EFF0
MacroTable = MacroCount + 0x10,
MacroIdOffset = 0x30,
SpecificMacroIdOffset = 0x38,
MacroNameOffset = 0x44,
MacroListCount = 0x80, //0x80
}
#endregion
#region Nested type: Reaction
internal enum Reaction
{
FactionDBCStruct = 0x2580E88,
// WDC3 structure:
// Columns = 0x07, RowSize = 0x17, StringStorage = 0xFF
// Record Count = 0x5C5*, Record Size = 0x07, Min ID = 0x01, Max = 0x0C3A*
// Flags = 0x14, Total Field Count = 0x07
// Packed Data = 0x00, Lookup Column Count = 0x00, Field Storage = 0xA8
// Common Data = 0x0, Pallet Data = 0x2F14
// * Will change in future builds.
// Section Header:
// FileOffset = 0x340 RecordCount = 0x5C5* StringTableSize = 0x02
// OffsetMapRecords = 0x00 IDListSize = 0x1714 RelationshipDataSize = 0x0
// OffsetMapIDCount = 0x0 CopyTableSize = 0x2C
//
//The FactionDBIDData for factions consists of a series of pairs.
// 1st (2 bytes) = ID for the row.
// 2nd (2 bytes) = Actual row in the database.
// And these are offsets from the "min offset".
DBIDPairSize = 0x04,
//For the expanded table, column offsets:
AzFaction = 0x00, //Faction
AzFactionGroup = 0x02, //Faction Group
AzFriendlyGroup = 0x03, //Friend Group
AzEnemyGroup = 0x04, //Enemy Group
AzHostileList = 0x05, //Enemies 1-4
AzFriendlyList = 0x09, //Friends 1-4
}
#endregion
#region Nested type: MountDB
internal enum MountDB
{
MountDBCStruct = 0x2594188, // 0x3EFE0
// WDC3 structure:
// Columns = 0x0B, RowSize = 0x25, StringStorage = 0x03
// Record Count = 0x2E0*, Record Size = 0x14, Min ID = 0x06, Max = 0x04C7*
// Flags = 0x10, Total Field Count = 0x0B
// Packed Data = 0x0C, Lookup Column Count = 0x09, Field Storage = 0x108
// Common Data = 0x0, Pallet Data = 0x100
// * Will change in future builds.
nameStringOffset = 0x00,
//These fields are bit-packed
mountIDOffset = 0x0C,
mountIDMask = 0x0FFF,
mountIDshift = 0x0,
flags1Offset = 0x0D,
flags1Mask = 0x0FF0,
flags1Shift = 0x4,
spellIDOffset = 0x0F,
spellIDMask = 0x3FFFF80,
spellIDShift = 0x7,
}
#endregion
#region Nested type: MountXDisplayDB
internal enum MountXDisplayDB
{
MountXDisplayDBCStruct = 0x2594698, // 0x3EFE0
// WDC3 structure:
// Columns = 0x02, RowSize = 0x0C, StringStorage = 0xFFs
// Record Count = 0x389*, Record Size = 0x03, Min ID = 0x01, Max = 0x0482*
// Flags = 0x14, Total Field Count = 0x02
// Packed Data = 0x0, Lookup Column Count = 0x01, Field Storage = 0x30
// Common Data = 0x0, Pallet Data = 0x64
// * Will change in future builds.
//Row is now:
//ID in relation data
mountXDisplayIDOffset = 0x00,
//Spare Info is:
mountXDisplayLocalKey = 0x02,
mountXDisplayRemoteKey = 0x00,
mountXDisplayRelationSize = 0x04,
}
#endregion
#region Nested type: SpellNameDB
internal enum SpellNameDB
{
SpellNameDBCStruct = 0x25A41C8, // 0x3EFE0
// WDC3 structure:
// Columns = 0x01, RowSize = 0x04, StringStorage = 0xFFs
// Record Count = 0x19861*, Record Size = 0x4, Min ID = 0x01, Max = 0x04729A*
// Flags = 0x14, Total Field Count = 0x01
// Packed Data Offset = 0x04, Lookup Column Count = 0x00, Field Storage = 0x18
// Common Data = 0x0, Pallet Data = 0x0
// * Will change in future builds.
nameStringOffset = 0x00,
spellNameIDSize = 0x04,
data2RowSize = 0x10,
}
#endregion
#region Nested type: WDC3Offsets
internal enum WDC3Offsets
{
//These are the standard offsets to a WDC3 database from the main pointer.
WDC3MainHeader = 0x00,
WDC3FieldStorageInfo = 0x08,
WDC3PalletLocations = 0x20,
WDC3ArrayPalletLocations = 0x38,
WDC3RelationInfo = 0x90,
WDC3DBHeader = 0xF8,
WDC3SectionHeader = 0x100,
WDC3DBData = 0x120,
WDC3IDDataHeader = 0x130,
//@WDC3FieldStorageInfo
//For each field (column) the following:
DBFSIBitOffset = 0x00, // Number of bits from start of row
DBFSIBFieldSize = 0x02, // Number of bits used for this field
DBFSIBAddDataSize = 0x04, // Amount of data used by this field on pallet/common
DBFSIBFieldCompression = 0x08, // 0 = None, 1 = BPacked, 2 = CommonData, 3 = BPindexed, 4 = BPindexedarray, 5 = BPsigned
// These next 3 vary based on Field CompressionValue
DBFSIBBitpackOffsetBitsORDefault = 0x0c, // Offset bits = vaule@DBFSIBitOffset - vaule@DBHeaderPackedDataOffset or Default Value if CommonData
DBFSIBBitpackSizeBits = 0x10, // Bits used in BPack (usually duplicate of DBFSIBFieldSize)
DBFSIBBitpackFlagORArrayCount = 0x14, // Array Count or Flags
//@WDC3PalletLocations
// These are pointers to the pallet locations for the fields.
// Offset is (sizeof(pointer) + sizeof(ulong) + sizeof(ulong) * field --- 0x18 * field
// For example:
DBPalletLocPallet3 = 0x48, // Pointer to the third feild pallet table location
DBPalletLocPallet5 = 0x78, // Pointer to the fifth feild pallet table location
DBPalletLocPallet8 = 0xC0, // Pointer to the eight feild pallet table location
DBPalletLocPallet9 = 0xD8, // Pointer to the ninth feild pallet table location
DBPalletLocPallet10 = 0xF0, // Pointer to the tenth feild pallet table location
//@WDC3ArrayPalletLocations
// These are pointers to the array pallet locations for the fields.
// Offset is sizeof(pointer) * field
// For example:
DBArrayPalletLocPallet5 = 0x28, // Pointer to the fifth field array pallet table location
DBArrayPalletLocPallet6 = 0x30, // Pointer to the sixth field array pallet table location
//@WDC3MainHeader:
DBNamePointer = 0x00, // Points to string with name of Database
DBColumns = 0x0C, // # of colums
DBRowSize = 0x10, // Expanded row size
DBStringStorageSize = 0x18, // 0xFFs or 0x02 if no strings, otherwise bytes used for stirngs
DBColumnOffsetsPointer = 0x20, // Pointer to Array of offsets (* number of columns)
DBColumnMultiplesPointer = 0x28, // Pointer to Array of multiples (* number of columns)
DBColumnTypesPointer = 0x30, // Pointer to Array of column types (* number of columns)
DBColumnFlagsPointer = 0x38, // Pointer to Array of column flags (* number of columns)
DBHashValue = 0x5C, // Matches Header field - DBHeaderTableHash
//@WDC3DBHeader:
DBHeaderMagic = 0x00, // WDC3
DBHeaderRecordCount = 0x04, // # of records for all secctions
DBHeaderFieldCount = 0x08, // # of columns
DBHeaderRecordSize = 0x0C, // Row size in memory
DBHeaderStringStorageSize = 0x10, // Bytes used for stirngs for all sections
DBHeaderTableHash = 0x14, // Hash of table header
DBHeaderLayoutHash = 0x18, // Hash of layout
DBHeaderMinID = 0x1C, // Minimum ID in table
DBHeaderMaxID = 0x20, // Maximum ID in table
DBHeaderLocale = 0x24, // 0xFFs if no strings, 0x01 for English
DBHeaderFlags = 0x28, // Flags - Compression, etc.
DBHeaderIdIndex = 0x2A, // Column in table for ID/Index
DBHeaderTotalFieldCount = 0x2C, // Total columns
DBHeaderPackedDataOffset = 0x30, // Offset of packed data.
DBHeaderLookupColumnCount = 0x34, // Columns used for Lookup indexing
DBHeaderFieldStorageInfoSize = 0x38, // Size of the Field Storage Table
DBHeaderCommonDataSize = 0x3C, // Size of the Common Data Table
DBHeaderPalletDataSize = 0x40, // Size of the Pallet Data
DBHeaderSectionCount = 0x44, // # of sections of data
//@DBRelationInfo
DBRelationHeaderFunction = 0x00, // Pointer to ?
DBRelationHeaderRecordCount = 0x08, // # of records in relation table
DBRelationHeaderRecordCoountSize = 0x0C, // Size of relation record
DBRelationHeaderMinID = 0x10, // Minimum ID in table
DBRelationHeaderMaxID = 0x14, // Max ID in table
DBRelationHeaderMainDataPointer = 0x18, // Location of main data
DBRelationHeaderData = 0x38, // Location of relation data
//@WDC3SectionHeader
DBSectionFileoffset = 0x08, // Abs. position to beginning of section
DBSectionRecordCount = 0x0C, // Recount Count
DBSectionStringTableSize = 0x10, // String table size
DBSectionOffSetRecordsEnd = 0x14, // Offset to where the records end with an offset map structure
DBSectionIDListSize = 0x18, // List of IDs present
DBSectionRelationshipDataSize = 0x1C, // Relationship table size
DBSectionOffsetMapIDCount = 0x20, // Number of IDs present in the offset map
DBSectionCopyTableCount = 0x24, // Count of the number of dedup entries
//@WDC2IDDataHeader
//DBIDHdrMinID = 0x30, // Min Header in Data
//DBIDHdrMaxID = 0x34, // Max Header in Data
//DBIDHdrRowCount = 0x38, // Row count in ID table
//DBIDDataLocation = 0x68, // Pointer to data table
//DBIDData2Location = 0x80, // Pointer to extra data table
//DBIDData2Entries = 0x88, // Pointer to extra data table
//@WDC3IDDataHeader
DBIDHdrMinID = 0x38, // Min Header in Data
DBIDHdrMaxID = 0x3C, // Max Header in Data
DBIDHdrRowCount = 0x40, // Row count in ID table
DBIDDataLocation = 0x70, // Pointer to data table
DBIDData2Location = 0x88, // Pointer to extra data table
DBIDData2Entries = 0x90, // Pointer to extra data table
//@DBColumnTypesPointer
// 0 = int, 2 = string, 3 = float, 4 = byte, 5 = ushort
}
#endregion
#region Nested type: SpellCooldown
internal enum SpellCooldown : uint
{
Cooldown = 0x246E1E8, // 0x3EFF0
Recharge = Cooldown + 0x30,
PetCooldown = Cooldown + 0xB8,
Offset_NextSpell = 0x00,
Offset_SpellID = 0x10,
Offset_StartTime1 = 0x1C,
Offset_CD1 = 0x20,
Offset_StartTime2 = 0x28,
Offset_CD2 = 0x2C,
Offset_StartTime3 = 0x34,
Offset_CD3 = 0x38,
Offset_RechargeStacks = 0x14,
Offset_RechargeTimeDone = 0x1C,
}
#endregion
#region Nested type: Swimming
internal enum Swimming
{
Pointer = 0xF0, // was 0x198
Offset = 0x58,
Mask = 0x100000,
}
#endregion
#region Nested type: IsFlying enum
public enum IsFlying
{
Pointer = 0xF0, // was 0x198
Offset = 0x58,
Mask = 0x1000000
}
#endregion
#region Nested type: UnitSpeed
internal enum UnitSpeed
{
Pointer1 = 0xF0, // was 0x198
Pointer2 = 0xA4,
}
#endregion
#region Nested type: UnitAuras
internal enum UnitAuras : uint
{
AuraCount1 = 0x10B0,
AuraCount2 = 0x630,
AuraTable1 = 0x630,
AuraTable2 = 0x638,
AuraSize = 0xA8,
AuraTableOffset = 0x00,
OwnerGUID = 0x68,
AuraSpellId = 0x88,
AuraFlags = 0x90,
AuraStack = 0x91,
AuraLevel = 0x92,
TimeLeft = 0x98,
//For GCD Modifications:
CurrentHaste = 0x59A0,
//For Platform / Elevator checks,
MountedOnGUID = 0x140,
}
#endregion
#region Nested type: UnitName
internal enum UnitName : uint
{
ObjectName1 = 0x148,
ObjectName2 = 0xE0,
PlayerNameGUIDOffset = 0x020,
PlayerNameStringOffset = 0x031,
PlayerNameCachePointer = 0x224C148, // 0x3EFF0
UnitName1 = 0x308,
UnitName2 = 0xE0,
}
#endregion
#region Nested type: WowObject
internal enum WowObject
{
X = 0x150,
Y = X + 0x4,
Z = X + 0x8,
RotationOffset = X + 0x10,
GameObjectX = 0x180,
GameObjectY = GameObjectX + 0x4,
GameObjectZ = GameObjectX + 0x8,
GameObjectRotation = GameObjectX + 0x10,
}
#endregion
#region Nested type: Zone
internal enum Zone : uint
{
ZoneText = 0x26E2620, // 0x3EFE0
ZoneID = 0x26E3270, // 0x3EFE0
}
#endregion
#region Nested type: UiFrame
internal enum UiFrame
{
//var @base = Memory.ReadRelative<ulong>((uint)Pointers.UiFrame.FrameBase);
//var worldFrame = Memory.Read<ulong>(Memory.Read<ulong>(@base + (uint)Pointers.UiFrame.FirstFrame));
//These are float values.
ScrWidth = 0x224B5D4, // 0x3EFF0
ScrHeight = ScrWidth + 0x04,
//These is the offset to the UI struct.
FrameBase = 0x25B8340, // 0x3EFE0
//Should contain something once the frames are valid.
UIFramesValidOffset = 0xC8,
//This is the one the mouse is over.
CurrentFrameOffset = 0x198,
FirstFrame = 0xD08, // 0xCD0
NextFrame = 0xCF8, // 0xCC0
Name = 0x20,
FrameBottom = 0x90,
FrameLeft = 0x94,
FrameTop = 0x98,
FrameRight = 0x9C,
EffectiveScale = 0xC0,
ParentFrame = 0xD0,
IconNumber = 0xF0,
VisibleOffset = 0xC8,
VisibleMask = 0x400,
IsDisabledOffset = 0xF4,
IsDisabledMask = 0x08,
//Changed in 8.1!
LabelText = 0x180,
RegionsNext = 0x198,
RegionsFirst = 0x1A8,
EditBoxText = 0x238,
ButtonEnabledPointer = 0x210,
ButtonEnabledMask = 0xF,
ButtonChecked = 0x268,
}
#endregion
}
}
#endif
And some Descriptors: