 |
|

13.07.2024, 05:52
|
|
Новичок
Регистрация: 08.03.2016
Сообщений: 13
С нами:
5358262
Репутация:
213
|
|
Я написал скрипт, который по сути должен блокировать 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
;
}
|
|
|

13.07.2024, 08:27
|
|
Постоянный
Регистрация: 01.08.2020
Сообщений: 988
С нами:
3043831
Репутация:
163
|
|
wndproc надо хукать (в сф должна быть соответствующая функция), и там уже возврат делать, в мейнлупе ты никакого влияния не получишь, тут возврат никак не предотвращает нажатие клавиши
и насчёт числа, передаваемого в isKeyDown тож не уверен
|
|
|

13.07.2024, 09:17
|
|
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами:
2055431
Репутация:
3
|
|
Можно обойтись без прямого хука вндпрока, как вариант, записать в начало функции
Код:
void __thiscall CScoreboard::Enable(void)
опкод выхода.
C++:
Код:
auto
samp_handle
=
reinterpret_cast
(
GetModuleHandle
(
"samp.dll"
)
)
)
;
// R1: 0x6AD30
// R3: 0x6EC80
*
reinterpret_cast
(
samp_handle
+
0x6EC80
)
=
0xC3
;
|
|
|

13.07.2024, 09:17
|
|
Постоянный
Регистрация: 01.08.2020
Сообщений: 988
С нами:
3043831
Репутация:
163
|
|
Сообщение от whyega
Можно обойтись без прямого хука вндпрока, как вариант, записать в начало функции
Код:
void __thiscall CScoreboard::Enable(void)
опкод выхода.
C++:
Код:
auto
samp_handle
=
reinterpret_cast
(
GetModuleHandle
(
"samp.dll"
)
)
)
;
// R1: 0x6AD30
// R3: 0x6EC81
*
reinterpret_cast
(
samp_handle
+
0x6EC81
)
=
0xC3
;
да, но вопрос по сф, и плагин назван "скриптом" и т.п., я решил не грузить
|
|
|

13.07.2024, 16:43
|
|
Новичок
Регистрация: 08.03.2016
Сообщений: 13
С нами:
5358262
Репутация:
213
|
|
Сообщение от moreveal
сф, и плагин назван "скриптом" и т.п., я решил н
Сообщение от whyega
Можно обойтись без прямого хука вндпрока, как вариант, записать в начало функции
Код:
void __thiscall CScoreboard::Enable(void)
опкод выхода.
C++:
Код:
auto
samp_handle
=
reinterpret_cast
(
GetModuleHandle
(
"samp.dll"
)
)
)
;
// R1: 0x6AD30
// R3: 0x6EC80
*
reinterpret_cast
(
samp_handle
+
0x6EC80
)
=
0xC3
;
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
;
}
может я не так понял, но оно крашит, даже при открытии консоли сампфункса.
|
|
|

13.07.2024, 17:09
|
|
Познающий
Регистрация: 10.06.2020
Сообщений: 37
С нами:
3119285
Репутация:
63
|
|
Сообщение от yssimb
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 перед записью нового значения.
|
|
|

13.07.2024, 17:19
|
|
Новичок
Регистрация: 19.06.2024
Сообщений: 4
С нами:
1002029
Репутация:
3
|
|
это конечно очень круто, но позволь поинтересовать зачем тебе блокировать таб?
|
|
|

13.07.2024, 18:12
|
|
Новичок
Регистрация: 08.03.2016
Сообщений: 13
С нами:
5358262
Репутация:
213
|
|
Сообщение от dertex
это конечно очень круто, но позволь поинтересовать зачем тебе блокировать таб?
переделываю на цеф его
up
|
|
|

15.07.2024, 05:04
|
|
Новичок
Регистрация: 08.03.2016
Сообщений: 13
С нами:
5358262
Репутация:
213
|
|
up
|
|
|

15.07.2024, 06:26
|
|
Постоянный
Регистрация: 01.08.2020
Сообщений: 988
С нами:
3043831
Репутация:
163
|
|
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
;
}
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|