-
Member
[Help] Read Last Chat Message
Hi guys, can someone help me with reading the latest chat message?
i have offsets
Code:
public const int Last_Ui_Message = 0x30096;
public class Chat
{
public const int Open = 0x2F87134;
public const int Start = 0x30A3810;
public const int Offset = 0xCB8;
public const int Message = 0xE6;
}
But I don't know how to use it
What type to read from Last_Ui_Message , unsigned int?
Help me understand this structure please , and how to read it
Last edited by Hrap; 03-28-2023 at 09:13 AM.
-
"offset": 0xCB8,
"posterGuid": 0x0,
"posterName": 0x34,
"channelName": 0x65,
"message": 0xE6,
"type": 0xCA0,
"channelId": 0xCA4,
"index": 0xCA8,
"time": 0xCB0,
Hello everyone, I'm a newbie~ Recently I'm trying to study how to execute API externally and get the return value of API, as well as the release of aoe spells, come on!
-
Post Thanks / Like - 1 Thanks
Hrap (1 members gave Thanks to qop1832 for this useful post)
-
-
Member
Greetings Razzue,
Fortunately, all the offsets that are critical for me still work.
I still have no idea how to search for templates correctly, so that I can update them later in the dumper.
So far, all the time is spent on building the logic of the bot (moving, fighting, collecting, reactions, etc.)
does not work
Code:
public const int Last_Ui_Message = 0x30096;
public const int Count = 0x30096;
public const int Base = 0x3009E;
so far everything seems
Last edited by Hrap; 12-15-2022 at 05:28 AM.
-
Established Member
Code:
const uint64_t ChatHistoryInitialized = 0x30D3350;
const uint64_t ChatHistory = 0x30A3810;
const uint64_t ChatHistoryCount = 0x3C;
const uint64_t ChatHistoryCurrentIndex = 0x30A380C;
const uint64_t ChatHistoryNextOffset = 0xCB8;
const uint64_t ChatHistorySenderGuid = 0x0;
const uint64_t ChatHistorySenderName = 0x34;
const uint64_t ChatHistoryFullMessage = 0xE6;
const uint64_t ChatHistoryChatType = 0xCA0;
const uint64_t ChatHistoryChannelNum = 0xCA4;
-
Post Thanks / Like - 1 Thanks
Razzue (1 members gave Thanks to oiramario for this useful post)
-
Member
-
"LastError" "48 8D 0D ?? ?? ?? ?? 41 B8 ?? ?? ?? ?? 48 8D 95 ?? ?? ?? ?? 0F 1F 40 ??"
"Chat_Open" "44 39 25 ?? ?? ?? ?? 0F 8E ?? ?? ?? ?? 33"
"Chat_Base" "48 8D 15 ?? ?? ?? ?? 4C 8D 05 ?? ?? ?? ?? 80 BA ?? ?? ?? ?? ?? 74 ?? 8B 01 39 82 ?? ?? ?? ?? 74 ?? 48 81 C2 ?? ?? ?? ?? 49 3B D0 75 ?? 32 C0"
Hello everyone, I'm a newbie~ Recently I'm trying to study how to execute API externally and get the return value of API, as well as the release of aoe spells, come on!
-
Member
Until now, I have not figured out what
Last_Message = 0x2D58940 returns
The address or structure of the last message...?
I try to read as an address
Code:
DWORD_PTR LMptr = Read<DWORD_PTR>(BaseAdrtess + Last_Message);
I get the address but when I try to read a message from it I get an empty string
Understood like with Last Message.
returns the last message, but not from the chat
Code:
OpenChat = 0x2C713A4,
StartChat = 0x2D5B0D0,
How to use it is still not clear.
please help
Last edited by Hrap; 03-28-2023 at 10:37 AM.
-
Last_Message = LastError
"Chat": {
"Open": 0x2c713a4,
"Base": 0x2d5b0d0,
"offset": 0xCB8,
"posterGuid": 0x0,
"posterName": 0x34,
"channelName": 0x65,
"message": 0xE6,
"type": 0xCA0,
"channelId": 0xCA4,
"index": 0xCA8,
"time": 0xCB0,
Hello everyone, I'm a newbie~ Recently I'm trying to study how to execute API externally and get the return value of API, as well as the release of aoe spells, come on!
-
Member
Code:
uint32_t ChatCount = *reinterpret_cast<uint32_t*>((uintptr_t)GlobalVars::ProcVars::g_hModuleBase + 0x2DF40E8);
std::cout << "Message Count: " << ChatCount << std::endl;
for (size_t i = 0; i < ChatCount; i++)
{
auto a = reinterpret_cast<wChat*>((GlobalVars::ProcVars::g_hModuleBase + 0x2DF40F0) + (i* 0xCB8));
std::cout << "Sender: " << a->GetSenderName() << " Message: " << a->GetChatMessage() << std::dec << " ChatType: " << a->GetChatType() << " ChannelNum: " << a->GetChannelNum() << std::endl;
}
class wChat
{
public:
std::string GetSenderName()
{
std::string NameStr = "";
char Name[12];
for (size_t i = 0; i < 12; i++)
{
Name[i] = *reinterpret_cast<char*>(((uintptr_t)this + 0x34) + i);
}
NameStr = Name;
NameStr = split(NameStr, (char)"-");
return NameStr;
}
std::string GetChatMessage()
{
std::string MessageStr = "";
char Message[255];
for (size_t i = 0; i < 255; i++)
{
Message[i] = *reinterpret_cast<char*>(((uintptr_t)this + 0xE6) + i);
}
MessageStr = Message;
return MessageStr;
}
uint32_t GetChatType()
{
return *reinterpret_cast<uint32_t*>((uintptr_t)this + 0xCA0);
}
uint32_t GetChannelNum()
{
return *reinterpret_cast<uint32_t*>((uintptr_t)this + 0xCA4);
}
};
-
Post Thanks / Like - 1 Thanks
Hrap (1 members gave Thanks to ValikK for this useful post)
-
Member
Thank you all for your help, I already figured it out
-
Established Member
Originally Posted by
ValikK
Code:
uint32_t ChatCount = *reinterpret_cast<uint32_t*>((uintptr_t)GlobalVars::ProcVars::g_hModuleBase + 0x2DF40E8);
std::cout << "Message Count: " << ChatCount << std::endl;
for (size_t i = 0; i < ChatCount; i++)
{
auto a = reinterpret_cast<wChat*>((GlobalVars::ProcVars::g_hModuleBase + 0x2DF40F0) + (i* 0xCB8));
std::cout << "Sender: " << a->GetSenderName() << " Message: " << a->GetChatMessage() << std::dec << " ChatType: " << a->GetChatType() << " ChannelNum: " << a->GetChannelNum() << std::endl;
}
class wChat
{
public:
std::string GetSenderName()
{
std::string NameStr = "";
char Name[12];
for (size_t i = 0; i < 12; i++)
{
Name[i] = *reinterpret_cast<char*>(((uintptr_t)this + 0x34) + i);
}
NameStr = Name;
NameStr = split(NameStr, (char)"-");
return NameStr;
}
std::string GetChatMessage()
{
std::string MessageStr = "";
char Message[255];
for (size_t i = 0; i < 255; i++)
{
Message[i] = *reinterpret_cast<char*>(((uintptr_t)this + 0xE6) + i);
}
MessageStr = Message;
return MessageStr;
}
uint32_t GetChatType()
{
return *reinterpret_cast<uint32_t*>((uintptr_t)this + 0xCA0);
}
uint32_t GetChannelNum()
{
return *reinterpret_cast<uint32_t*>((uintptr_t)this + 0xCA4);
}
};
Are the chat messages and message sender names null terminated?
If they are null terminated you can simply reinterpret the base ptr (this + 0xE6) as a *const char to avoid the copies and O(characters) time complexity