Code:
//Previous Values from 27101
namespace LazyLib.Wow
{
public class PublicPointers
{
#region Globals enum
public enum Globals
{
PlayerName = 0x2C45408, // -0x1D010
Version = 27144,
}
#endregion
#region InGame enum
public enum InGame
{
//0x00 = out of game, 0x04 in game, others when loading screen, UI loading.
InGame = 0x2B27460, // -0x1D020
InstanceSize = 0x2B273C8, // -0x1D020
HighResCounter = 0x29CFA94, // -0x1D000
}
#endregion
}
internal class Pointers
{
#region Nested type: ObjectManager
internal enum ObjectManager
{
CurMgrPointer = 0x27E07B8, // -0x1CFE0
NextObject = 0x70,
FirstObject = 0x18,
LocalGUID = 0x208,
ObjectTypeOffset = 0x20,
ObjectStorageOffset = 0x10,
}
#endregion
#region Nested type: BMAH
internal enum BMAH
{
ItemCount = 0x2BB2F50, // -0x1D010
ItemStart = ItemCount + 0x08,
}
#endregion
#region Nested type: Globals
internal enum Globals
{
//Currently these two are the same.
//This is used for error messages.
RedMessage = 0x2B26760, // -0x1D020
//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 = 0x2B27488, // -0x1D020
CursorType = 0x2BFE5F0, // -0x1D010
CursorType2 = CursorType + 0x04,
ChatboxIsOpen = 0x2722014, // -0x1CFF0
//Get this one after "in game". Need the target GUID to find in memory accurately.
//Will have 0x100 when looting.
LootWindow = 0x2B8B0B0, // -0x1D010
IsBobbing = 0x014C,
ArchFacing = 0x0470,
ArchFacingOffset2 = 0x01C0,
}
#endregion
#region Nested type: ActionBar enum
public enum ActionBar
{
ActionBarFirstSlot = 0x2B7A250, // -0x1D010
ActionBarBonus = ActionBarFirstSlot + 0x240,
}
#endregion
#region Nested type: ClickToMove enum
public enum ClickToMove
{
Name = 0x30,
Offset = 0x60,
Pointer = 0x2B261E8, // -0x1D020
}
#endregion
#region Nested type: AutoLoot enum
public enum AutoLoot
{
Name = 0x30,
Offset = 0x60,
Pointer = 0x2B26228, // -0x1D020
}
#endregion
#region Nested type: LUAError enum
public enum LUAError
{
Name = 0x30,
Offset = 0x60,
Pointer = 0x2B261D0, // -0x1D020
}
#endregion
#region Nested type: CgUnitCGetCreatureRank enum
public enum CgUnitCGetCreatureRank
{
Offset1 = 0x1740, // 0x18
Offset2 = 0x38,
}
#endregion
#region Nested type: CgUnitCGetCreatureType enum
public enum CgUnitCGetCreatureType
{
Offset1 = 0x1740, // 0x18
Offset2 = 0x30,
}
#endregion
#region Nested type: CgWorldFrameGetActiveCamera enum
public enum CgWorldFrameGetActiveCamera
{
CameraX = 0x10,
CameraY = 0x14,
CameraZ = 0x18,
CameraMatrix = 0x1C,
CameraPointer = 0x2B5B530, // -0x1D020
CameraOffset = 0x3330, // 0x00
}
#endregion
#region Nested type: AutoAttack
internal enum AutoAttack
{
//Address shows the GUID of the Auto Attack target
AutoAttackGUID = 0x1830, // -0x378
}
#endregion
#region Nested type: CastingInfo
internal enum CastingInfo
{
InstantCasting = 0x18F8, // -0x378
IsCasting = 0x1920, // -0x378
ChanneledCasting = 0x1950, // -0x378
ChanneledCastingEndTime = ChanneledCasting + 0xC,
}
#endregion
#region Nested type: Chat
internal enum Chat : uint
{
ChatStart = 0x2B28320, // -0x1D020
ChatPosition = 0x2B2831C, // -0x1D020
OffsetToNextMsg = 0xCB8,
MsgSenderGuid = 0x00,
MsgSenderName = 0x034,
MsgFullMessage = 0x00E6,
MsgChatType = 0xCA0,
MsgChannelNum = 0xCA4,
MsgTimeStamp = 0xCB0,
ChatQueueDepth = 0x40,
}
#endregion
#region Nested type: RealId
internal enum ReadId : uint
{
Array1Pointer = 0x2BB54F0, // -0x1D010
Array1BNetHandleSizeOffset = 0x48,
Array1BNetHandleOffset = 0x58,
Array1NameLengthOffset = 0x70,
Array1NicknameOffset = 0x80,
Array1IDOffset = 0x98,
Array2Pointer = Array1Pointer + 0x10,
Array2IDOffset = 0x08,
Array2NameLengthOffset = 0x28,
Array2NameOffset = 0x18,
}
#endregion
#region Nested type: Runes
internal enum Runes
{
RunesAvailable = 0x2B88294, // -0x1D010
}
#endregion
#region Nested type: KeyBinding
internal enum KeyBinding
{
NumKeyBindings = 0x2B7CA20, // -0x1D010
First = 0xE8,
Next = 0xD8,
Key = 0x30,
Command = 0x58,
}
#endregion
#region Nested type: Macros
internal enum MacroManager
{
MacroCount = 0x2610EC0, // -0x1CFF0
MacroTable = MacroCount + 0x10,
MacroIdOffset = 0x30,
SpecificMacroIdOffset = 0x38,
MacroNameOffset = 0x44,
MacroListCount = 0x80, //0x80
}
#endregion
#region Nested type: Reaction
internal enum Reaction
{
FactionDBCStruct = 0x26C1138, // -0x1CFE0
// WDC2 structure:
// Columns = 0x07, RowSize = 0x17, StringStorage = 0xFF
// Record Count = 0x5BE*, Record Size = 0x07, Min ID = 0x01, Max = 0x0C30*
// Flags = 0x14, Total Field Count = 0x07
// Packed Data = 0x00, Lookup Column Count = 0x09, Field Storage = 0x108
// Common Data = 0x0, Pallet Data = 0x100
// * Will change in future builds.
// Section Header:
// FileOffset = 0x340 RecordCount = 0x5BE* StringTableSize = 0x02
// CopyTableSize = 0x160 OffsetMapOffset = 0x0 IDListSize = 0x16F8
// RelationshipDataSize = 0x0
//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 = 0x26D2A88, // -0x1CFE0
// WDC2 structure:
// Columns = 0x0B, RowSize = 0x25, StringStorage = 0x03
// Record Count = 0x2C5*, Record Size = 0x14, Min ID = 0x06, Max = 0x04A8*
// 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 = 0x26D2F38, // -0x1CFE0
// WDC2 structure:
// Columns = 0x02, RowSize = 0x0C, StringStorage = 0xFFs
// Record Count = 0x343*, Record Size = 0x03, Min ID = 0x01, Max = 0x045D*
// 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: ItemSearchNameDB
internal enum ItemSearchNameDB
{
ItemSearchNameDBCStruct = 0x26C9478,
// WDC2 structure:
// Columns = 0x0E, RowSize = 0x34, StringStorage = 0x02
// Record Count = 0x15BAA*, Record Size = 0x18, Min ID = 0x11, Max = 0x02830D*
// Flags = 0x10, ID Index = 0x02, Total Field Count = 0x0E
// Packed Data Offset = 0x0C, Lookup Column Count = 0x00, Field Storage = 0x150
// Common Data = 0x093A3C, Pallet Data = 0x03D00
// FileOffset = 0x0979B4, SectionRecordCount = 0x015BAA*, StringTableSize = 0x1DC51D*,
// CopyTable = 0x00, OffsetMapOffset = 0x00, IDListSize = 0x00, RelationshipSize = 0x00
// * Will change in future builds.
itemNameOffset = 0x08,
//These fields are now bit-packed
itemIDOffset = 0x0C,
itemIDMask = 0x07FFFF,
itemIDshift = 0x0,
itemQualityOffset = 0x0E,
itemQualityMask = 0x038,
itemQualityShift = 0x3,
}
#endregion
#region Nested type: SpellNameDB
internal enum SpellNameDB
{
SpellNameDBCStruct = 0x26E0A18,
// WDC2 structure:
// Columns = 0x01, RowSize = 0x04, StringStorage = 0xFFs
// Record Count = 0x18F60*, Record Size = 0x4, Min ID = 0x01, Max = 0x044D82*
// 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,
}
#endregion
#region Nested type: WDC2Offsets
internal enum WDC2Offsets
{
//These are the standard offsets to a WDC2 database from the main pointer.
WDC2MainHeader = 0x00,
WDC2FieldStorageInfo = 0x08,
WDC2PalletLocations = 0x20,
WDC2ArrayPalletLocations = 0x38,
WDC2RelationInfo = 0x90,
WDC2DBHeader = 0xF8,
WDC2SectionHeader = 0x100,
WDC2DBData = 0x108,
WDC2IDDataHeader = 0x118,
//@WDC2FieldStorageInfo
//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
//@WDC2PalletLocations
// 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
//@WDC2ArrayPalletLocations
// 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
//@WDC2MainHeader:
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
//@WDC2DBHeader:
DBHeaderMagic = 0x00, // WDC2
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
//@WDC2SectionHeader
DBSectionFileoffset = 0x08, // Abs. position to beginning of section
DBSectionRecordCount = 0x0C, // Recount Count
DBSectionStringTableSize = 0x10, // String table size
DBSectionCopyTableSize = 0x14, // Copy table Size
DBSectionOffSetMapOffset = 0x18, // Offset to array of struct
DBSectionIDListSize = 0x1C, // List of IDs present
DBSectionRelationshipDataSize = 0x20, // Relationship table size
//@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
//@DBColumnTypesPointer
// 0 = int, 2 = string, 3 = float, 4 = byte, 5 = ushort
}
#endregion
#region Nested type: SpellCooldown
internal enum SpellCooldown : uint
{
Cooldown = 0x25F1F78, // -0x1D000
Recharge = Cooldown + 0x30,
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 = 0x198, // -0x78
Offset = 0x58,
Mask = 0x100000,
}
#endregion
#region Nested type: IsFlying enum
public enum IsFlying
{
Pointer = 0x198, // -0x78
Offset = 0x58,
Mask = 0x1000000
}
#endregion
#region Nested type: UnitSpeed
internal enum UnitSpeed
{
Pointer1 = 0x198, // -0x78
Pointer2 = 0xA4,
}
#endregion
#region Nested type: UnitAuras
internal enum UnitAuras : uint
{
AuraCount1 = 0x24D8,
AuraCount2 = 0x1A58,
AuraTable1 = 0x1A58,
AuraTable2 = 0x1A60,
AuraSize = 0xA8,
AuraTableOffset = 0x00,
OwnerGUID = 0x68,
AuraSpellId = 0x88,
AuraFlags = 0x90,
AuraStack = 0x91,
AuraLevel = 0x92,
TimeLeft = 0x98,
//For GCD Modifications:
CurrentHaste = 0x27E08,
//For PLatform / Elevator checks,
MountedOnGUID = 0x1578,
}
#endregion
#region Nested type: UnitName
internal enum UnitName : uint
{
ObjectName1 = 0x478,
ObjectName2 = 0xE0,
PlayerNameGUIDOffset = 0x020,
PlayerNameStringOffset = 0x031,
PlayerNameCachePointer = 0x23D9488, // -0x1D000
UnitName1 = 0x1740, // 0x00
UnitName2 = 0xE0, // 0x00
}
#endregion
#region Nested type: WowObject
internal enum WowObject
{
X = 0x1588,
Y = X + 0x4,
Z = X + 0x8,
RotationOffset = X + 0x10,
GameObjectX = 0x1B0,
GameObjectY = GameObjectX + 0x4,
GameObjectZ = GameObjectX + 0x8,
GameObjectRotation = GameObjectX + 0x10,
}
#endregion
#region Nested type: Zone
internal enum Zone : uint
{
ZoneText = 0x2B266B0, // -0x1D020
ZoneID = 0x2B2675C, // -0x1D020
}
#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 = 0x23D888C, // -0x1D000
ScrHeight = ScrWidth + 0x04,
//These is the offset to the UI struct.
FrameBase = 0x26F2ED0, // -0x1CFE0
//Should contain something once the frames are valid.
UIFramesValidOffset = 0xC8,
//This is the one the mouse is over.
CurrentFrameOffset = 0x198,
FirstFrame = 0xCD0,
NextFrame = 0xCC0,
Name = 0x20,
FrameBottom = 0x90,
FrameLeft = 0x94,
FrameTop = 0x98,
FrameRight = 0x9C,
EffectiveScale = 0xC0,
ParentFrame = 0xD0,
IconNumber = 0xF0,
LabelText = 0x188,
RegionsNext = 0x198,
RegionsFirst = 0x1A8,
EditBoxText = 0x240,
VisibleOffset = 0xC8,
VisibleMask = 0x400,
IsDisabledOffset = 0xF4,
IsDisabledMask = 0x08,
ButtonEnabledPointer = 0x210,
ButtonEnabledMask = 0xF,
ButtonChecked = 0x268,
}
#endregion
}
}