-
Member
how to get these offsets?
Снимок.JPG
-
Member
Originally Posted by
ermite66
I fail in memory reader. XYZ 0x148
Last edited by ermite66; 10-09-2022 at 04:06 PM.
-
Member
I'm sorry for the stupid question, but how do you read the name of the GameObject?
it is of type 8 as I understand it and I am trying to read its name like this
Code:
char buf[128];
memset(buf, 0, sizeof buf);
DWORD_PTR namePtr = RemouteMemory->Read<DWORD_PTR>(entry + 0x148);
strcpy_s(buf, RemouteMemory->ReadCStr(namePtr + 0xE0, 64));
I'm probably missing something
please tell me what am i doing wrong?
-
Member
Originally Posted by
Hrap
I'm sorry for the stupid question, but how do you read the name of the GameObject?
it is of type 8 as I understand it and I am trying to read its name like this
Code:
char buf[128];
memset(buf, 0, sizeof buf);
DWORD_PTR namePtr = RemouteMemory->Read<DWORD_PTR>(entry + 0x148);
strcpy_s(buf, RemouteMemory->ReadCStr(namePtr + 0xE0, 64));
I'm probably missing something
please tell me what am i doing wrong?
object_base + 0x148 = (float) X coord , +4 = Y coord , +8 = Z coord , 0x148 its not for name.
PS i play in ru client , and cant read names , get shit from player name offset.
Снимок.JPG
-
-
-
Member
Originally Posted by
Razzue
Yeah... You're wrong.
[[GameObject + 0x148] + 0xE0] => Object Name
[Game Object + 0x108] => Object Location
overlayed — ImgBB
I dont know how it works, my position offset is object_base + 0x148 =) need try read name
Снимок.JPG
-
-
Member
Originally Posted by
Razzue
Just because it works, doesn't mean it's right 🤷*♂️
Its u code adapt for c++ =) I don't understand why the offsets are different .... but it work for me .... i find 0x148 manualy read objbase + 4 , +4 +4 ... +4 *n , while not get XYZ pos.
Code:
DWORD64 managerBase = g_pProcess->Read<DWORD64>(Offsets::Object_Manager::Base + g_pProcess->GetBase());
int curCount = g_pProcess->Read<int>(managerBase + 0x10);
int maxCount = g_pProcess->Read<int>(managerBase + 0x0);
CGGuid player_guid = g_pProcess->Read<CGGuid>(g_pProcess->GetBase() + 0x2D01C60);
DWORD64* ptrArray = new DWORD64[maxCount];
g_pProcess->Read(g_pProcess->Read<DWORD64>(managerBase + 0x8), ptrArray, sizeof(DWORD64) * maxCount);
for (auto i = 0; i < maxCount; i++)
{
DWORD64 ptr = ptrArray[i];
if (ptr == 0)
continue;
do
{
auto entry = g_pProcess->Read<DWORD64>(ptr + 0x18);
if (entry == 0)
continue;
CGGuid guid = g_pProcess->Read<CGGuid>(entry + 0x18);
auto type = g_pProcess->Read<byte>(entry + 0x10);
if (type > 13 || guid.isEmpty())
continue;
if (player_guid == guid)
{
// 0x148 - xyz
float xyz[3];
g_pProcess->Read(entry + 0x148, xyz, sizeof(float) * 3);
char name[30];
g_pProcess->Read(entry + 0x148, name, sizeof(char) * 30);
printf("name : %s i : %d type : %d %f %f %f\n", name, i, type, xyz[0], xyz[1], xyz[2]);
}
ptr = g_pProcess->Read<DWORD64>(ptr + 0x0);
} while (ptr != 0);
}
if (ptrArray != nullptr)
delete[] ptrArray;
-
Contributor
Avid Ailurophile
Originally Posted by
ermite66
Its u code adapt for c++ =) I don't understand why the offsets are different .... but it work for me .... i find 0x148 manualy read objbase + 4 , +4 +4 ... +4 *n , while not get XYZ pos.
Code:
DWORD64 managerBase = g_pProcess->Read<DWORD64>(Offsets::Object_Manager::Base + g_pProcess->GetBase());
int curCount = g_pProcess->Read<int>(managerBase + 0x10);
int maxCount = g_pProcess->Read<int>(managerBase + 0x0);
CGGuid player_guid = g_pProcess->Read<CGGuid>(g_pProcess->GetBase() + 0x2D01C60);
DWORD64* ptrArray = new DWORD64[maxCount];
g_pProcess->Read(g_pProcess->Read<DWORD64>(managerBase + 0x8), ptrArray, sizeof(DWORD64) * maxCount);
for (auto i = 0; i < maxCount; i++)
{
DWORD64 ptr = ptrArray[i];
if (ptr == 0)
continue;
do
{
auto entry = g_pProcess->Read<DWORD64>(ptr + 0x18);
if (entry == 0)
continue;
CGGuid guid = g_pProcess->Read<CGGuid>(entry + 0x18);
auto type = g_pProcess->Read<byte>(entry + 0x10);
if (type > 13 || guid.isEmpty())
continue;
if (player_guid == guid)
{
// 0x148 - xyz
float xyz[3];
g_pProcess->Read(entry + 0x148, xyz, sizeof(float) * 3);
char name[30];
g_pProcess->Read(entry + 0x148, name, sizeof(char) * 30);
printf("name : %s i : %d type : %d %f %f %f\n", name, i, type, xyz[0], xyz[1], xyz[2]);
}
ptr = g_pProcess->Read<DWORD64>(ptr + 0x0);
} while (ptr != 0);
}
if (ptrArray != nullptr)
delete[] ptrArray;
Game Object != Unit roflmao...
"May all your bacon burn"
-
Active Member
Any pointer as to what the QuestLog Flags are?
I tried searching for them through the forum and Trinity source, but nothing lines up.
Reading the quest amount, I get more quests than I actually have. Having looked at IDA I've seen that they do (QuestFlags(?) & 1) == 0 for it to be a valid quest.
But what are the other entries then?
I am reading the 3 ints seperately. One is the questID (if the condition is met), second one a index and third the flags.
What is the questID tho when (QuestFlags(?) & 1) != 0? And what are the other Flags?
-
It's possible to grab the quest complete states externally, But it's a mission I think there like 3 or 4 different sub you'll need to reverse. If you're already internal I would strongly suggest just trying to call the Script internally
Best of luck though.
-
Post Thanks / Like - 1 Thanks
SatyPardus (1 members gave Thanks to Dupheadss for this useful post)
-
Active Member
Originally Posted by
Dupheadss
It's possible to grab the quest complete states externally, But it's a mission I think there like 3 or 4 different sub you'll need to reverse. If you're already internal I would strongly suggest just trying to call the Script internally
Best of luck though.
Oh I am not worried about that. Just trying to understand what's actually happening there lol. Like what does that Flag 0x1 indicate.