-
Classic TBC => Build 43861
Bit late on the post... whoops.
Code:
publicclassOffsets_43861{
public class Guids
{
public const int Mouseover_Guid = 0x2CAEC40;
public const int Pet_Guid = 0x2CED040;
public const int Player_Guid = 0x2C427D0;
public const int Target_Guid = 0x2E22540;
public const int Last_Target_Guid = 0x2E22550;
public const int Last_Enemy_Guid = 0x2E22560;
public const int Last_Friendly_Guid = 0x2E22570;
public const int Focus_Guid = 0x2E22580;
public const int DialogWindowOwner_Guid = 0x2E22590;
public const int Bag_Guid = 0x2CECD20;
}
public class Global_Data
{
public const int In_Game_Status = 0x2CAEBEC;
public const int Player_Name = 0x2C427E8;
public const int Corpse_Position = 0x2B045F0;
public const int Last_Message = 0x2CADA10;
public const int Loot_Window = 0x2CEDB08;
}
public class Quests
{
public const int Base = 0x2D23640;
public const int NumQuests = 0x2D23480;
public const int CurrentQuest = 0x2D13E64;
public const int QuestTitle = 0x2D1EFB0;
public const int GossipQuests = 0x2CE3EF8;
public const int NumQuestChoices = 0x2D23460;
public const int QuestReward = 0x2D23468;
}
public class Auto_Loot
{
public const int Base = 0x2CAE778;
public const int Offset = 0x5C;
}
public class Click_To_Move
{
public const int Base = 0x2CAE730;
public const int Offset = 0x5C;
}
public class Chat
{
public const int Open = 0x3030F14;
public const int Start = 0x2CAF2C0;
public const int Offset = 0xCB8;
public const int Message = 0xE6;
}
public class Key_Bindings
{
public const int Base = 0x2C41B48;
}
public class Add_On
{
public const int Count = 0x2D34468;
public const int List = 0x2D349B0;
}
public class Spellbooks
{
public const int Count = 0x2CE21F0;
public const int Base = 0x2CE21F8;
public const int PetBase = 0x2CE2220;
public const int PetCount = 0x2CE2218;
}
public class Object_Manager
{
public const int Zone_ID = 0x2CAE618;
public const int Names = 0x2B2AD10;
public const int Base = 0x2CAD910;
public const int Cooldown = 0x2C496B0;
}
public class Battlegrounds
{
public const int Finished = 0x2CE9EFC;
public const int Winner = 0x2CE9F00;
public const int Info = 0x2B0E508;
}
public class Camera
{
public const int Base = 0x307E1F8;
public const int Offset = 0x38E0;
}
public class Addons
{
public const int AddOnsLoaded = 0x2D34498;
public const int dword-2AF0248 = 0x2B16258;
public const int Address_3 = 0x2B2AF00;
}
}
Code:
publicclassFields{
public class Inventory
{
public const int EquipmentFirst = 0x000; // Updated
public const int EquipmentLast = 0x110; // Updated
public const int BagSlot1 = 0x130; // Updated
public const int BagSlot2 = 0x140; // Updated
public const int BagSlot3 = 0x150; // Updated
public const int BagSlot4 = 0x160; // Updated
public const int BackpackFirst = 0x170; // Updated
public const int BackpackLast = 0x260; // Updated
public const int BankSlotFirst = 0x2F0; // Updated
public const int BankSlotLast = 0x4A0; // Updated
public const int BankBag1 = 0x130; // Updated
public const int BankBag2 = 0x140; // Updated
public const int BankBag3 = 0x150; // Updated
public const int BankBag4 = 0x160; // Updated
public const int BankBag5 = 0x130; // Updated
public const int BankBag6 = 0x140; // Updated
public const int BankBag7 = 0x150; // Updated
}
public class Item
{
public const int Creator = 0x0; // ?
public const int Expiration = 0x0; // ?
public const int ID = 0x150; // Updated
public const int Flag = 0x1F8; // Updated
public const int Owner = 0x1B0; // Updated
public const int Enchant = 0x2C0; // Updated
public const int Container = 0x1C0; // Updated
public const int Enchant_ID = 0x2C; // Updated
public const int StackCount = 0x1F0; // Updated
public const int Durability = 0x204; // Updated
public const int Enchant_Expire = 0x30; // Updated
public const int MaxDurability = 0x208; // Updated
}
public class Container
{
public const int Count = 0x430; // Updated
public const int Items = 0x438; // Updated
}
public class Unit
{
public const int UnitId = 0x0; // ?
public const int Master = 0x0; // ?
public const int Charmer = 0x0; // ?
public const int DisplayId = 0x0; // ?
public const int Sex = 0xD5DF; // Updated
public const int Race = 0xD5DC; // Updated
public const int Pitch = 0x34; // Updated
public const int Rank = 0x38; // Updated
public const int Type = 0x30; // Updated
public const int Name = 0xF8; // Updated
public const int CastID = 0x560; // Updated
public const int ChanID = 0x5B8; // Updated
public const int Class = 0xD5DD; // Updated
public const int Level = 0xD5E8; // Updated
public const int Info = 0x3A0; // Updated
public const int CastEnd = 0x5B4; // Updated
public const int ChanEnd = 0x5C4; // Updated
public const int Target = 0xD5A8; // Updated
public const int Power1 = 0xD7B8; // Updated
public const int Power2 = 0xD7BC; // Updated
public const int Power3 = 0xD7C0; // Updated
public const int Power4 = 0xD7C4; // Updated
public const int Power5 = 0xD7C8; // Updated
public const int Power6 = 0xD7CC; // Updated
public const int Power7 = 0xD7D0; // Updated
public const int Movement = 0xF0; // Updated
public const int Family = 0x34; // Updated
public const int Creator = 0xD580; // Updated
public const int Health = 0xD4E8; // Updated
public const int NpcFlag = 0xD520; // Updated
public const int Location = 0x20; // Updated
public const int Faction = 0xD60C; // Updated
public const int CastStart = 0x5B0; // Updated
public const int ChanStart = 0x5C0; // Updated
public const int RotationD = 0x2C; // Updated
public const int RotationF = 0x30; // Updated
public const int Summoner = 0xD560; // Updated
public const int MaxHealth = 0xD4F0; // Updated
public const int MaxPower1 = 0xD7D4; // Updated
public const int MaxPower2 = 0xD7D8; // Updated
public const int MaxPower3 = 0xD7DC; // Updated
public const int MaxPower4 = 0xD7E0; // Updated
public const int MaxPower5 = 0xD7E4; // Updated
public const int MaxPower6 = 0xD7E8; // Updated
public const int MaxPower7 = 0xD7EC; // Updated
public const int DynamicFlag = 0xDC; // Updated
public const int UnitFlag1 = 0xD610; // Updated
public const int UnitFlag2 = 0xD614; // Updated
public const int UnitFlag3 = 0xD618; // Updated
public const int MoveFlag = 0x58; // Updated
public const int MountID = 0xD638;
}
public class Player
{
public const int LootTarget = 0x0; // ?
public const int Flags1 = 0xDB78; // Updated
public const int Flags2 = 0xDB7C; // Updated
}
public class LocalPlayer
{
public const int Flags = 0x0; // ?
public const int ComboTarget = 0x0; // ?
public const int Money = 0xE390; // Updated
public const int Experience = 0xE398; // Updated
public const int Inventory = 0x12408; // Updated
public const int NextLevelXP = 0xE39C; // Updated
}
public class Object
{
public const int Name2 = 0xE0; // Updated
public const int Flags = 0xA0; // Updated
public const int Name1 = 0x148; // Updated
public const int Creator = 0x210; // Updated
public const int ObjectID = 0xD0; // Updated
public const int Location = 0x108; // Updated
}
public class Aura
{
public const int Size = 0xB0; // Updated
public const int Table1 = 0x6C0; // Updated
public const int Table2 = 0x6C8; // Updated
}
}
These ads disappear when you log in.
-
Post Thanks / Like - 2 Thanks
0xd5d,
oiramario (2 members gave Thanks to Razzue for this useful post)
-
Member
What is the memory offset of the player's name
use [[Base+ Info] + Name] Failed to get
-
Originally Posted by
ttonline315
What is the memory offset of the player's name
use [[Base+ Info] + Name] Failed to get
Because that's not how you read player names. Please read a few posts before stating the obvious.
-
Active Member
Code:
const uint64_t ObjectEntryID = 0xD8;
const uint64_t LocalPlayerFlags = 0xF22C;
-
Member
I traverse the object manager and match the Guid with my target's Guid so as to determine the address of my target. When the type of my target is Player or LocalPlayer, it works fine. However, when the type is Unit, I find the matched unit is not unique, which means several units have the same Guid. Is the Guid not a unique property for objects?
-
Originally Posted by
Aigewen
I traverse the object manager and match the Guid with my target's Guid so as to determine the address of my target. When the type of my target is Player or LocalPlayer, it works fine. However, when the type is Unit, I find the matched unit is not unique, which means several units have the same Guid. Is the Guid not a unique property for objects?
Then you're simply reading it wrong. A GUID (Aka Globally Unique Identifier) is, surprise surprise, a unique identifier.
-
Member
Originally Posted by
Razzue
Then you're simply reading it wrong. A GUID (Aka Globally Unique Identifier) is, surprise surprise, a unique identifier.
Code:
var CurMgr = MemoryManager.ReadIntPtr(IntPtr.Add(MemoryAddresses.MemBase, Offsets_43638.Object_Manager.Base));
var Count = MemoryManager.ReadInt(CurMgr);
var ArrayAddr = MemoryManager.ReadIntPtr(IntPtr.Add(CurMgr, array));
for (int i = 0; i < Count; i++)
{
var ptr = MemoryManager.ReadIntPtr(IntPtr.Add(ArrayAddr, i * array));
if (ptr == IntPtr.Zero) continue;
while (ptr != IntPtr.Zero)
{
var entryPtr = MemoryManager.ReadIntPtr(IntPtr.Add(ptr, entGuid));
var guid = MemoryManager.ReadUlong(IntPtr.Add(ptr, objGuid));
var type = (ObjectType)MemoryManager.ReadByte(entryPtr + objType);
Log($"i:{i}\t ptr: 0x{ptr.ToString("X2")} \t Entry:0x{entryPtr.ToString("X2")} \t Guid:{guid.ToString("X2")}\t type:{type}");
ptr = MemoryManager.ReadIntPtr(IntPtr.Add(ptr, 0x0));
}
}
I think the way I read guid should be fine. Actually, I am confused about the while loop. I find that in some cases the object pointer and type of two objects are different, but the guid is the same. As show in the figure:F0{[email protected]]S[`2Q~50.png
In the figure, there are three objects at object count 81, which means the while loop iterates three times. Two objects have the same guid. Can anyone explain the while loop?
-
Member
Originally Posted by
Aigewen
Code:
var CurMgr = MemoryManager.ReadIntPtr(IntPtr.Add(MemoryAddresses.MemBase, Offsets_43638.Object_Manager.Base));
var Count = MemoryManager.ReadInt(CurMgr);
var ArrayAddr = MemoryManager.ReadIntPtr(IntPtr.Add(CurMgr, array));
for (int i = 0; i < Count; i++)
{
var ptr = MemoryManager.ReadIntPtr(IntPtr.Add(ArrayAddr, i * array));
if (ptr == IntPtr.Zero) continue;
while (ptr != IntPtr.Zero)
{
var entryPtr = MemoryManager.ReadIntPtr(IntPtr.Add(ptr, entGuid));
var guid = MemoryManager.ReadUlong(IntPtr.Add(ptr, objGuid));
var type = (ObjectType)MemoryManager.ReadByte(entryPtr + objType);
Log($"i:{i}\t ptr: 0x{ptr.ToString("X2")} \t Entry:0x{entryPtr.ToString("X2")} \t Guid:{guid.ToString("X2")}\t type:{type}");
ptr = MemoryManager.ReadIntPtr(IntPtr.Add(ptr, 0x0));
}
}
I think the way I read guid should be fine. Actually, I am confused about the
while loop. I find that in some cases the object pointer and type of two objects are different, but the guid is the same. As show in the figure:
F0{[email protected]]S[`2Q~50.png
In the figure, there are three objects at object count 81, which means the
while loop iterates three times. Two objects have the same guid. Can anyone explain the
while loop?
While loop just reads chaining of hashtable , you can read more about it here Hash table - Wikipedia.
About guid you probably read somethig wrong, but i noticed that some npc in NPE have same guid
Last edited by tayl; 3 Weeks Ago at 03:43 AM.
-
Member
Last edited by hacker5510; 3 Weeks Ago at 04:39 AM.
Reason: Delete
-
Member
Originally Posted by
Aigewen
Code:
var CurMgr = MemoryManager.ReadIntPtr(IntPtr.Add(MemoryAddresses.MemBase, Offsets_43638.Object_Manager.Base));
var Count = MemoryManager.ReadInt(CurMgr);
var ArrayAddr = MemoryManager.ReadIntPtr(IntPtr.Add(CurMgr, array));
for (int i = 0; i < Count; i++)
{
var ptr = MemoryManager.ReadIntPtr(IntPtr.Add(ArrayAddr, i * array));
if (ptr == IntPtr.Zero) continue;
while (ptr != IntPtr.Zero)
{
var entryPtr = MemoryManager.ReadIntPtr(IntPtr.Add(ptr, entGuid));
var guid = MemoryManager.ReadUlong(IntPtr.Add(ptr, objGuid));
var type = (ObjectType)MemoryManager.ReadByte(entryPtr + objType);
Log($"i:{i}\t ptr: 0x{ptr.ToString("X2")} \t Entry:0x{entryPtr.ToString("X2")} \t Guid:{guid.ToString("X2")}\t type:{type}");
ptr = MemoryManager.ReadIntPtr(IntPtr.Add(ptr, 0x0));
}
}
I think the way I read guid should be fine. Actually, I am confused about the
while loop. I find that in some cases the object pointer and type of two objects are different, but the guid is the same. As show in the figure:
F0{[email protected]]S[`2Q~50.png
In the figure, there are three objects at object count 81, which means the
while loop iterates three times. Two objects have the same guid. Can anyone explain the
while loop?
WowGuid.Length is Longger then you thought. Guid.Tostring() Just like "12345678123456781234567812345678",I cant pint the really value ,because guid maybe contains my personal info.
Code:
objectGuid=Memory.Read<ulongulong>(ptr+0x8);
Good luck!
Love life, Love R!
Last edited by hacker5510; 3 Weeks Ago at 02:12 PM.
Reason: lost 'u'
-
Member
Originally Posted by
hacker5510
WowGuid.Length is Longger then you thought. Guid.Tostring() Just like "12345678123456781234567812345678",I cant pint the really value ,because guid maybe contains my personal info.
Code:
objectGuid=Memory.Read<ulongulong>(ptr+0x8);
Good luck!
Love life, Love R!
Thanks!! Indeed, the length of guid is super long. Now my code works fine.
-
Member
Hi! Sorry to bother you with a beginner's question. I use TBC 44036.
I wanted to try the code above, but I was wondering what the value of the offset objType was.
I tried to read the object type from different ways, but no matter what value I give, I always read 0 when entryPtr is used for reading.
If I use ptr I can read values, but it doesn't match with the object type.
I can't figure it out, so if anyone has an idea, I'd love it! Thanks
-
Member
Originally Posted by
paly
Hi! Sorry to bother you with a beginner's question. I use TBC 44036.
I wanted to try the code above, but I was wondering what the value of the offset objType was.
I tried to read the object type from different ways, but no matter what value I give, I always read 0 when
entryPtr is used for reading.
If I use
ptr I can read values, but it doesn't match with the object type.
I can't figure it out, so if anyone has an idea, I'd love it! Thanks

Code:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by Razzue's Tool.
// Love life,love Razzue.
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Offset_Manager
{
public class Offsets_44036
{
public class Scripts
{
public const int ScriptIsAutoRepeatSpell = 0x60DCA0;
}
public class Guids
{
public const int Mouseover_Guid = 0x2BFCC10;
public const int Pet_Guid = 0x2C3B000;
public const int Player_Guid = 0x2B907C0;
public const int Target_Guid = 0x2D704D0;
public const int Last_Target_Guid = 0x2D704E0;
public const int Last_Enemy_Guid = 0x2D704F0;
public const int Last_Friendly_Guid = 0x2D70500;
public const int Focus_Guid = 0x2D70510;
public const int DialogWindowOwner_Guid = 0x2D70520;
public const int Bag_Guid = 0x2C3ACE0;
}
public class Global_Data
{
public const int In_Game_Status = 0x2BFCBBC;
public const int Player_Name = 0x2B907D8;
public const int Corpse_Position = 0x2A525F0;
public const int Last_Ui_Message = 0x30096;
public const int Loot_Window = 0x2C3BAC8;
}
public class Quests
{
public const int Base = 0x2C71600;
public const int NumQuests = 0x2C71440;
public const int CurrentQuest = 0x2C61E24;
public const int QuestTitle = 0x2C6CF70;
public const int GossipQuests = 0x2C326B8;
public const int NumQuestChoices = 0x2C71420;
public const int QuestReward = 0x2C71428;
}
public class Auto_Loot
{
public const int Base = 0x2BFC820;
public const int Offset = 0x5C;
}
public class Click_To_Move
{
public const int Base = 0x2BFC7D8;
public const int Offset = 0x5C;
}
public class Chat
{
public const int Open = 0x2F7EEA4;
public const int Start = 0x2BFD280;
public const int Offset = 0xCB8;
public const int Message = 0xE6;
}
public class Key_Bindings
{
public const int Base = 0x30096;
}
public class Add_On
{
public const int Count = 0x300905F;
public const int List = 0x3009067;
}
public class Spellbooks
{
public const int Count = 0x2C301B0;
public const int Base = 0x2C301B8;
public const int PetBase = 0x2C301E0;
public const int PetCount = 0x2C301D8;
}
public class Object_Manager
{
public const int Zone_ID = 0x300905F;
public const int Names = 0x2A78D10;
public const int Base = 0x2BFB8E0;
public const int Cooldown = 0x2B97680;
}
public class Battlegrounds
{
public const int Finished = 0x2C37EBC;
public const int Winner = 0x2C37EC0;
public const int Info = 0x2A5C508;
}
public class Camera
{
public const int Base = 0x2FCC178;
public const int Offset = 0x38E0;
}
}
}
-
Post Thanks / Like - 1 Thanks
Razzue (1 members gave Thanks to hacker5510 for this useful post)
-
Originally Posted by
Aigewen
Thanks!! Indeed, the length of guid is super long. Now my code works fine.
Oh so I was right? Who would have thought? 
For reference, a GUID is either an int128, or you can read as
struct GUID
{
long Low;
long High;
}
Originally Posted by
hacker5510
Code:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by Razzue's Tool.
// Love life,love Razzue.
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Offset_Manager
{
public class Offsets_44036
{
public class Scripts
{
public const int ScriptIsAutoRepeatSpell = 0x60DCA0;
}
public class Guids
{
public const int Mouseover_Guid = 0x2BFCC10;
public const int Pet_Guid = 0x2C3B000;
public const int Player_Guid = 0x2B907C0;
public const int Target_Guid = 0x2D704D0;
public const int Last_Target_Guid = 0x2D704E0;
public const int Last_Enemy_Guid = 0x2D704F0;
public const int Last_Friendly_Guid = 0x2D70500;
public const int Focus_Guid = 0x2D70510;
public const int DialogWindowOwner_Guid = 0x2D70520;
public const int Bag_Guid = 0x2C3ACE0;
}
public class Global_Data
{
public const int In_Game_Status = 0x2BFCBBC;
public const int Player_Name = 0x2B907D8;
public const int Corpse_Position = 0x2A525F0;
public const int Last_Ui_Message = 0x30096;
public const int Loot_Window = 0x2C3BAC8;
}
public class Quests
{
public const int Base = 0x2C71600;
public const int NumQuests = 0x2C71440;
public const int CurrentQuest = 0x2C61E24;
public const int QuestTitle = 0x2C6CF70;
public const int GossipQuests = 0x2C326B8;
public const int NumQuestChoices = 0x2C71420;
public const int QuestReward = 0x2C71428;
}
public class Auto_Loot
{
public const int Base = 0x2BFC820;
public const int Offset = 0x5C;
}
public class Click_To_Move
{
public const int Base = 0x2BFC7D8;
public const int Offset = 0x5C;
}
public class Chat
{
public const int Open = 0x2F7EEA4;
public const int Start = 0x2BFD280;
public const int Offset = 0xCB8;
public const int Message = 0xE6;
}
public class Key_Bindings
{
public const int Base = 0x30096;
}
public class Add_On
{
public const int Count = 0x300905F;
public const int List = 0x3009067;
}
public class Spellbooks
{
public const int Count = 0x2C301B0;
public const int Base = 0x2C301B8;
public const int PetBase = 0x2C301E0;
public const int PetCount = 0x2C301D8;
}
public class Object_Manager
{
public const int Zone_ID = 0x300905F;
public const int Names = 0x2A78D10;
public const int Base = 0x2BFB8E0;
public const int Cooldown = 0x2B97680;
}
public class Battlegrounds
{
public const int Finished = 0x2C37EBC;
public const int Winner = 0x2C37EC0;
public const int Info = 0x2A5C508;
}
public class Camera
{
public const int Base = 0x2FCC178;
public const int Offset = 0x38E0;
}
}
}
Heh... Nice to see it's still being used :smirk:
-
Post Thanks / Like - 1 Thanks
0xd5d (1 members gave Thanks to Razzue for this useful post)
-
Member
For 44036,you can also use 0x2BFC598 for zoneId (that kind (Zone Id's) of zone, which matches this website)