Возможен пример в проект? а то скок пытался - ругается пкд
тебе не нужны хуки - глянь как плагины на сервер делают. Клиент тоже такое поддерживаетОбновил RakHook: https://github.com/imring/RakHook/releases/tag/1.0
Сделал свой код немного читабельней (для себя), добавил поддержку CMake и теперь используются хуки от @r4nx (cyanide)
ты протебе не нужны хуки - глянь как плагины на сервер делают. Клиент тоже такое поддерживает
RakClientInterface::RegisterAsRemoteProcedureCall? в принципе можно, но я не помню, почему их не хотел использоватьСкорее из-за того, что на каждый РПЦ пришлось регать свой коллбек, но скорее всего я ошибаюсьты проRakClientInterface::RegisterAsRemoteProcedureCall? в принципе можно, но я не помню, почему их не хотел использовать
про PluginAttachты проRakClientInterface::RegisterAsRemoteProcedureCall? в принципе можно, но я не помню, почему их не хотел использовать
а как ты будешь через него исходящие пакеты ловить?про PluginAttach
#include <process.h>
#include <string>
#include "RakHook/rakhook.hpp"
using namespace std;
LONG wHandle;
char buffer[64] = { 0 };
// function
inline void set_pos() {
RakNet::BitStream rpc;
rpc.Write<float>(0);
rpc.Write<float>(0);
rpc.Write<float>(0);
rakhook::emul_rpc(12, rpc);
}
void printStringNow(const char* text, unsigned int time, unsigned short flag, bool bPreviousBrief)
{
((void(__cdecl*)(const char*, unsigned int, unsigned short, bool))0x69F1E0)(text, time, flag, bPreviousBrief);
}
#include "main.hpp"
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_KEYUP:
{
switch (wParam)
{
case 0x31: {
*reinterpret_cast<unsigned __int16*>(0xC81320) += 1;
/*
sprintf(buffer, "weatherID: %d", *(unsigned __int16*)0xC81320);
printStringNow(buffer, 1000, NULL, false);
*/
break;
}
case 0x32: {
*reinterpret_cast<unsigned __int16*>(0xC81320) -= 1;
/*
sprintf(buffer, "weatherID: %d", *(unsigned __int16*)0xC81320);
printStringNow(buffer, 1000, NULL, false);
*/
break;
}
case 0x33: {
set_pos();
printStringNow("spawn", 1000, NULL, false);
}
}
}
}
return CallWindowProcA(WNDPROC(wHandle), hwnd, uMsg, wParam, lParam);
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH: {
DisableThreadLibraryCalls(hModule);
wHandle = SetWindowLongA(FindWindowA(NULL, "GTA:SA:MP"), GWL_WNDPROC, LONG(WindowProc));
break;
}
case DLL_PROCESS_DETACH: {
break;
}
}
return TRUE;
}
библиотеку надо собрать через cmakeДайте по бошке не шарющему дебилу, из-за чего ошибка? я так пониаю я неправильно загрузил либу в проект (добавил в дерикторию и подключил include в свойствах проекта).
main.hpp:#include <process.h> #include <string> #include "RakHook/rakhook.hpp" using namespace std; LONG wHandle; char buffer[64] = { 0 }; // function inline void set_pos() { RakNet::BitStream rpc; rpc.Write<float>(0); rpc.Write<float>(0); rpc.Write<float>(0); rakhook::emul_rpc(12, rpc); } void printStringNow(const char* text, unsigned int time, unsigned short flag, bool bPreviousBrief) { ((void(__cdecl*)(const char*, unsigned int, unsigned short, bool))0x69F1E0)(text, time, flag, bPreviousBrief); }Посмотреть вложение 181345main.cpp:#include "main.hpp" LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_KEYUP: { switch (wParam) { case 0x31: { *reinterpret_cast<unsigned __int16*>(0xC81320) += 1; /* sprintf(buffer, "weatherID: %d", *(unsigned __int16*)0xC81320); printStringNow(buffer, 1000, NULL, false); */ break; } case 0x32: { *reinterpret_cast<unsigned __int16*>(0xC81320) -= 1; /* sprintf(buffer, "weatherID: %d", *(unsigned __int16*)0xC81320); printStringNow(buffer, 1000, NULL, false); */ break; } case 0x33: { set_pos(); printStringNow("spawn", 1000, NULL, false); } } } } return CallWindowProcA(WNDPROC(wHandle), hwnd, uMsg, wParam, lParam); } BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved) { switch (fdwReason) { case DLL_PROCESS_ATTACH: { DisableThreadLibraryCalls(hModule); wHandle = SetWindowLongA(FindWindowA(NULL, "GTA:SA:MP"), GWL_WNDPROC, LONG(WindowProc)); break; } case DLL_PROCESS_DETACH: { break; } } return TRUE; }
Посмотреть вложение 181349
Kakбиблиотеку надо собрать через cmake
Open windows promot
git clone https://github.com/AnWuPP/plugin.git
cd plugin && code .
какие именно?do u know how to get memory offsets please ?