
10.09.2018, 05:50
|
|
Постоянный
Регистрация: 28.03.2013
Сообщений: 495
С нами:
6908018
Репутация:
213
|
|
Сообщение от mr.krabs
Как вывести локально сообщение в asi?
BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L675)
Сообщение от _=Gigant=_
why 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);
}
cheat_state->state maybe can't change, check it
Сообщение от _Vine_
Здравствуйте.
Заметил, что из за перехвата оконной процедуры(wndproc) через SetWindowLongPtr, при выгрузке плагина через консоль сф командой "pfree SFPlugin" происходит краш. В коллбэке деструктора игры и DLL PROCESS DETACH'e пытался восстанавливать оригинальный WndProc, но краш все равно был.
Может быть, кто нибудь знает, из за чего такое происходит?
C++:
Код:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include
#include
#include
#include
#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
;
}
в sf wndproc уже перехвачен, достаточно зарегать каллбек.
тут пример - Гайд - API SF | Урок 5 - Подключение ImGui(https://blast.hk/threads/23083/)
|
|
|