Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>;
- #include <tchar.h>
- #include <thread>
- #include <chrono>
- using namespace std;
- using namespace std::chrono_literals;
- HMODULE g_hModule;
- DWORD g_threadID;
- DWORD WINAPI MyThread(LPVOID);
- typedef long(__thiscall * SendChat)(void* _pThis, int messageMode, int channelId, const string& receiver, const string& message);
- INT APIENTRY DllMain(HMODULE hDLL, DWORD Reason, LPVOID Reserved)
- {
- switch (Reason)
- {
- case DLL_PROCESS_ATTACH:
- {
- g_hModule = hDLL;
- DisableThreadLibraryCalls(hDLL);
- CreateThread(NULL, NULL, &MyThread, NULL, NULL, &g_threadID);
- break;
- }
- case DLL_THREAD_ATTACH:
- case DLL_PROCESS_DETACH:
- case DLL_THREAD_DETACH:
- break;
- }
- return TRUE;
- }
- DWORD WINAPI MyThread(LPVOID)
- {
- SendChat sendChatFunc = (SendChat)0x5077b0;
- sendChatFunc((DWORD*)0x1122c3a8, 5, 0, receiver, message);
- FreeLibraryAndExitThread(g_hModule, 0);
- }
- void ProtocolGame::sendTalk(Otc::MessageMode mode, int channelId, const std::string& receiver, const std::string& message)
- {
- if(message.empty())
- return;
- if(message.length() > 255) {
- g_logger.traceError("message too large");
- return;
- }
- OutputMessagePtr msg(new OutputMessage);
- msg->addU8(Proto::ClientTalk);
- msg->addU8(Proto::translateMessageModeToServer(mode));
- switch(mode) {
- case Otc::MessagePrivateTo:
- case Otc::MessageGamemasterPrivateTo:
- case Otc::MessageRVRAnswer:
- msg->addString(receiver);
- break;
- case Otc::MessageChannel:
- case Otc::MessageChannelHighlight:
- case Otc::MessageChannelManagement:
- case Otc::MessageGamemasterChannel:
- msg->addU16(channelId);
- break;
- default:
- break;
- }
- msg->addString(message);
- send(msg);
- }
Add Comment
Please, Sign In to add comment