Хуком bullet синхрычем отловить инфу о том что игрок произвел выстрел?
WriteProcessMemory если в другой процесс.Как записать какое-либо значение в памяти?
*(int*)0xB7CE50 = 1;
Данная фича не реагирует на тип bool, даже пробывал reinterpet_cast, хз как там. Вот как я делал.WriteProcessMemory если в другой процесс.
А если в свой, то:
C++:*(int*)0xB7CE50 = 1;
*(bool*)0xB7CEE4 = true; // типо должен выдавать мне беск. бег, но нихуя.
Попробуй это:Данная фича не реагирует на тип bool, даже пробывал reinterpet_cast, хз как там. Вот как я делал.
C++:*(bool*)0xB7CEE4 = true; // типо должен выдавать мне беск. бег, но нихуя.
*(BYTE*)0xB7CEE4 = 1;
Не, не сработало. Видимо не суждено мне быть бесконечным бегуном.Попробуй это:
C++:*(BYTE*)0xB7CEE4 = 1;
бесконечным бегуном.
memset_safe((void*)0x60A572, 0x90, 1);
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#pragma comment(lib, "user32.lib")
SAMPFUNCS *SF = new SAMPFUNCS();
WNDPROC oWndProc = 0;
LRESULT __stdcall WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
SF->getSAMP()->getChat()->AddChatMessage(-1, "WNDPROC CALLED");
return CallWindowProcA(oWndProc, hWnd, uMsg, wParam, lParam);
}
void __stdcall Destructor() {
static bool once = false;
if (!once) {
SetWindowLongPtr(GetForegroundWindow(), GWLP_WNDPROC, (long)oWndProc);
once = true;
}
}
void CALLBACK mainloop()
{
static bool init = false;
if (!init)
{
if (GAME == nullptr || GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME || !SF->getSAMP()->IsInitialized())
return;
oWndProc = (WNDPROC)SetWindowLongPtr(GetForegroundWindow(), GWLP_WNDPROC, (long)WndProc);
SF->getGame()->registerGameDestructorCallback(Destructor);
init = true;
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
if (dwReasonForCall == DLL_PROCESS_ATTACH)
SF->initPlugin(mainloop, hModule);
else if (dwReasonForCall == DLL_PROCESS_DETACH)
Destructor();
return TRUE;
}
BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L675)Как вывести локально сообщение в asi?
cheat_state->state maybe can't change, check itwhy this not working i wanted to check when i'm driving to put gravity back to normal
if (cheat_state->state == CHEAT_STATE_ACTOR)
{
gta_gravity_set(10.0000);
}
else if (cheat_state->state == CHEAT_STATE_VEHICLE)
{
gta_gravity_set(0.0080);
}
в sf wndproc уже перехвачен, достаточно зарегать каллбек.Здравствуйте.
Заметил, что из за перехвата оконной процедуры(wndproc) через SetWindowLongPtr, при выгрузке плагина через консоль сф командой "pfree SFPlugin" происходит краш. В коллбэке деструктора игры и DLL PROCESS DETACH'e пытался восстанавливать оригинальный WndProc, но краш все равно был.
Может быть, кто нибудь знает, из за чего такое происходит?
C++:#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS #include <windows.h> #include <string> #include <assert.h> #include <process.h> #include "SAMPFUNCS_API.h" #include "game_api\game_api.h" #pragma comment(lib, "user32.lib") SAMPFUNCS *SF = new SAMPFUNCS(); WNDPROC oWndProc = 0; LRESULT __stdcall WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { SF->getSAMP()->getChat()->AddChatMessage(-1, "WNDPROC CALLED"); return CallWindowProcA(oWndProc, hWnd, uMsg, wParam, lParam); } void __stdcall Destructor() { static bool once = false; if (!once) { SetWindowLongPtr(GetForegroundWindow(), GWLP_WNDPROC, (long)oWndProc); once = true; } } void CALLBACK mainloop() { static bool init = false; if (!init) { if (GAME == nullptr || GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME || !SF->getSAMP()->IsInitialized()) return; oWndProc = (WNDPROC)SetWindowLongPtr(GetForegroundWindow(), GWLP_WNDPROC, (long)WndProc); SF->getGame()->registerGameDestructorCallback(Destructor); init = true; } } BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved) { if (dwReasonForCall == DLL_PROCESS_ATTACH) SF->initPlugin(mainloop, hModule); else if (dwReasonForCall == DLL_PROCESS_DETACH) Destructor(); return TRUE; }
А можно ли как то сделать это без сф?BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L675)
cheat_state->state maybe can't change, check it
в sf wndproc уже перехвачен, достаточно зарегать каллбек.
тут пример - Гайд - API SF | Урок 5 - Подключение ImGui(https://blast.hk/threads/23083/)
нет, твой хук потом еще 40 раз какие-нибудь собейты, сфы перезапишут в итоге очередь не вернутьА можно ли как то сделать это без сф?
Может можно выделить память (Чтобы при выгрузке функция осталось в процессе), записать туда функцию WndProc которая вызывает следующий WndProc, что бы не сломать очередь?нет, твой хук потом еще 40 раз какие-нибудь собейты, сфы перезапишут в итоге очередь не вернуть