-
-
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
-
-
Established 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?
-
-
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{SQT0@01KNSJ]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{SQT0@01KNSJ]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; 06-13-2022 at 03:43 AM.
-
Member
Last edited by hacker5510; 06-13-2022 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{SQT0@01KNSJ]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; 06-13-2022 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)
-
Contributor
Avid Ailurophile
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)