Просмотр полной версии : Блокировка TAB
Я написал скрипт, который по сути должен блокировать TAB, то бишь не давать его открыть. Но чет у меня не получилось, не понял как.
C++:
#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
}
}
else
{
if
(
SF
->
getGame
(
)
->
isKeyDown
(
192
)
)
{
return
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}
moreveal
13.07.2024, 08:27
wndproc надо хукать (в сф должна быть соответствующая функция), и там уже возврат делать, в мейнлупе ты никакого влияния не получишь, тут возврат никак не предотвращает нажатие клавиши
и насчёт числа, передаваемого в isKeyDown тож не уверен
вайега52
13.07.2024, 09:17
Можно обойтись без прямого хука вндпрока, как вариант, записать в начало функции
void __thiscall CScoreboard::Enable(void)
опкод выхода.
https://forum.antichat.xyz/attachments/28518538/
C++:
auto
samp_handle
=
reinterpret_cast
(
GetModuleHandle
(
"samp.dll"
)
)
)
;
// R1: 0x6AD30
// R3: 0x6EC80
*
reinterpret_cast
(
samp_handle
+
0x6EC80
)
=
0xC3
;
moreveal
13.07.2024, 09:17
Можно обойтись без прямого хука вндпрока, как вариант, записать в начало функции
void __thiscall CScoreboard::Enable(void)
опкод выхода.
C++:
auto
samp_handle
=
reinterpret_cast
(
GetModuleHandle
(
"samp.dll"
)
)
)
;
// R1: 0x6AD30
// R3: 0x6EC81
*
reinterpret_cast
(
samp_handle
+
0x6EC81
)
=
0xC3
;
да, но вопрос по сф, и плагин назван "скриптом" и т.п., я решил не грузить
сф, и плагин назван "скриптом" и т.п., я решил н
Можно обойтись без прямого хука вндпрока, как вариант, записать в начало функции
void __thiscall CScoreboard::Enable(void)
опкод выхода.
C++:
auto
samp_handle
=
reinterpret_cast
(
GetModuleHandle
(
"samp.dll"
)
)
)
;
// R1: 0x6AD30
// R3: 0x6EC80
*
reinterpret_cast
(
samp_handle
+
0x6EC80
)
=
0xC3
;
https://forum.antichat.xyz/attachments/28518677/
C++:
#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
}
}
else
{
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
192
)
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"нет))"
)
;
auto
samp_handle
=
reinterpret_cast
(
GetModuleHandle
(
"samp.dll"
)
)
;
*
reinterpret_cast
(
samp_handle
+
0x6EC80
)
=
0xC3
;
//return;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}
может я не так понял, но оно крашит, даже при открытии консоли сампфункса.
fuflexxxx
13.07.2024, 17:09
C++:
#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
}
}
else
{
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
192
)
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"нет))"
)
;
auto
samp_handle
=
reinterpret_cast
(
GetModuleHandle
(
"samp.dll"
)
)
;
*
reinterpret_cast
(
samp_handle
+
0x6EC80
)
=
0xC3
;
//return;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}
может я не так понял, но оно крашит, даже при открытии консоли сампфункса.
Попробуй права доступа к памяти изменить через VirtualProtect перед записью нового значения.
это конечно очень круто, но позволь поинтересовать зачем тебе блокировать таб?
это конечно очень круто, но позволь поинтересовать зачем тебе блокировать таб?
переделываю на цеф его
up
moreveal
15.07.2024, 06:26
C++:
#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
DWORD oldProtect
;
const
auto
patchAddr
=
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0x6EC86
;
// R1 - 0x6AD36
VirtualProtect
(
reinterpret_cast
(
patchAddr
)
,
2
,
PAGE_READWRITE
,
&
oldProtect
)
;
*
reinterpret_cast
(
patchAddr
)
=
0xC35E
;
VirtualProtect
(
reinterpret_cast
(
patchAddr
)
,
2
,
oldProtect
,
nullptr
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}
C++:
#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
DWORD oldProtect
;
const
auto
patchAddr
=
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0x6EC86
;
// R1 - 0x6AD36
VirtualProtect
(
reinterpret_cast
(
patchAddr
)
,
2
,
PAGE_READWRITE
,
&
oldProtect
)
;
*
reinterpret_cast
(
patchAddr
)
=
0xC35E
;
VirtualProtect
(
reinterpret_cast
(
patchAddr
)
,
2
,
oldProtect
,
nullptr
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}
спасибо, заработало)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot