loganhackerdff
Известный
- 867
- 521
как создать объект визуальный объект в самп без емуляции RPC
уточнить игру? ну раз уж это форум, где в основном обитают самперы, то: https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CVehicle.h#L360как взорвать машину в который ты сидишь? только не через SetHealth(0)
1. Переведи 1388 в шестнадцатиричную систему.Назрело у меня пару вопросов
Первое:
Структура SAMP R3 Выглядит следующим образом:
Каким образом в ulPort попадает порт, у которого оффсет 1388?
Второе:
Как на хукнутом RakClientInterface реализовать перехват входящих RPC как в s0beit'е. Т.е. условно если сервер пытается сетнуть мне хп, у меня в чат вывелось, что сервер мне пытается поставить мне хп. Или например нопить входящие RPC.
Третье:
Почему-то при вызове addChatMessage в основном потоке, работает, а при вызове этой же функции в где-нибудь в другом месте крашит.
Потоки:void test(char* szParams) { pSAMP->addMessageToChat(0xFFFFFFFF, "addMessageToChat causes exception in gta_sa.exe(samp.dll)"); } void mainThread(void *pvParams) { if (pSAMP) { while (!pSAMP->tryInit()) { Sleep(100); } pSAMP->addMessageToChat(0xFFFFFFFF, "addMessageToChatWorks here!"); pSAMP->addClientCommand("test", test); } }Само исключение:addMessageToChat:void SAMPFramework::addMessageToChat(D3DCOLOR cColor, const char* szMsg, ...) { if (g_Chat == nullptr) return; void(__thiscall * AddToChatWindowBuffer) (const void* _this, int iType, char* szText, char* szPrefix, DWORD cColor, DWORD cPrefixColor) = (void(__thiscall*) (const void*, int, char*, char*, DWORD, DWORD)) (dwSAMPAddr + SAMP_FUNC_ADDTOCHATWND); if (szMsg == NULL) return; va_list ap; char tmp[512]; memset(tmp, 0, 512); va_start(ap, szMsg); vsnprintf(tmp, sizeof(tmp) - 1, szMsg, ap); va_end(ap); return AddToChatWindowBuffer((void*)g_Chat, 8, tmp, NULL, cColor, 0x00); }
Вызвано исключение по адресу 0x0A279392 (samp.dll) в gta_sa.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000007.
Стек вызовов пустой
void /*CChat::AddEntry*/AddEntry(DWORD color, const char* text, ...)
{
char buf[128]{0};
va_list args;
va_start(args, text);
vsprintf_s(buf, text, args);
va_end(args);
// Адреса 100% действительны для 0.3.7-R1
reinterpret_cast<void(__thiscall*)(void*, char*)>(/*(DWORD)GetModuleHandle("samp.dll")*/g_dwSAMPBase + 0x63850)(g_Chat, buf);
reinterpret_cast<void(__thiscall*)(void*, int, const char*, const char* DWORD, DWORD)>(g_dwSAMPBase + 0x64010)(g_Chat, 8, buf, nullptr, color, 0);
}
1. разобрался(1388 уже в 16-ричной был)1. Переведи 1388 в шестнадцатиричную систему.
2. Используй VMT Hook Manager.
3. Попробуй.
C++:void /*CChat::AddEntry*/AddEntry(DWORD color, const char* text, ...) { char buf[128]{0}; va_list args; va_start(args, text); vsprintf_s(buf, text, args); va_end(args); // Адресса 100% действительны для 0.3.7-R1 reinterpret_cast<void(__thiscall*)(void*, char*)>(/*(DWORD)GetModuleHandle("samp.dll")*/g_dwSAMPBase + 0x63850)(g_Chat, buf); reinterpret_cast<void(__thiscall*)(void*, int, const char*, const char* DWORD, DWORD)>(g_dwSAMPBase + 0x64010)(g_Chat, 8, buf, nullptr, color, 0); }
Хуки. RakClient не передаёт функцию, где принимаются входящие RPC. Хуки в конце файла samp.cpp.1. разобрался(1388 уже в 16-ричной был)
2. Не понял тебя. У меня есть хукнутый RakClient как в собейте. Меня интересует как в нем ловить входящие RPC.
3. Пофиксил. Взял Функцию из SAMP-API от LUCHARE
А как без костылей это можно сделать, и по нормальному? Как я не пытался, не работаетcp1251 преобразовать в utf8