
29.01.2018, 21:10
|
|
Новичок
Регистрация: 17.03.2016
Сообщений: 11
С нами:
5345263
Репутация:
0
|
|
Сообщение от randazzo
В проекте есть пример вывода сообщения в чат, при входе в игру.
Можете все равно пожалуйста сюда кинуть код для примера, я нуб :ССС
1.Ваш вопрос: Как выдать сообщение при загрузке? Которые показываются перед "Connected. Joining the game..."
|
|
|

29.01.2018, 21:43
|
|
Познавший АНТИЧАТ
Регистрация: 21.05.2014
Сообщений: 1,417
С нами:
6304259
Репутация:
183
|
|
Сообщение от Nika23830
Можете все равно пожалуйста сюда кинуть код для примера, я нуб :ССС
C++:
Код:
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
init
=
true
;
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
switch
(
dwReasonForCall
)
{
case
DLL_PROCESS_ATTACH
:
SF
->
initPlugin
(
mainloop
,
hModule
)
;
break
;
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}
|
|
|

28.01.2018, 14:49
|
|
Участник форума
Регистрация: 06.11.2016
Сообщений: 150
С нами:
5008255
Репутация:
18
|
|
Как игра лочит мышку ?
PS: Хукал SetCursorPos и все равно не мог двигать мышкой
|
|
|

30.01.2018, 14:56
|
|
Постоянный
Регистрация: 17.02.2014
Сообщений: 611
С нами:
6438231
Репутация:
133
|
|
Хукаю WndProc ..
C++:
Код:
WNDPROC hOrigProc
=
NULL
;
hOrigProc
=
(
WNDPROC
)
SetWindowLong
(
*
(
HWND
*
)
0xC97C1C
,
GWL_WNDPROC
,
(
LONG
)
(
UINT_PTR
)
WndProc
)
;
C++:
Код:
bool
__stdcall
WndProc
(
HWND hwnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
uMsg
==
WM_KEYDOWN
)
{
pSAMP
->
addMessageToChat
(
-
1
,
"%i"
,
wParam
)
;
if
(
wParam
==
192
)
{
// 192 - ®
pSAMP
->
say
(
"/CMD"
)
;
return
false
;
}
}
return
true
;
}
Получается если я жму "~" , открывается чат сампа , мне надо сделать что бы он не открывался , а отправлялась команда.
Когда захожу в самп , я получаю нажатые клавиши , но перестают реагировать клавиши.
|
|
|

30.01.2018, 15:08
|
|
Постоянный
Регистрация: 15.04.2017
Сообщений: 602
С нами:
4778331
Репутация:
63
|
|
Сообщение от iAmerican
return true;
C++:
Код:
CallWindowProc
(
hOrigProc
,
hWnd
,
uMsg
,
wParam
,
lParam
)
;
и ваще он вот так выглядит
C++:
Код:
LRESULT CALLBACK
WindowProc
(
_In_ HWND hwnd
,
_In_ UINT uMsg
,
_In_ WPARAM wParam
,
_In_ LPARAM lParam
)
;
|
|
|

30.01.2018, 15:16
|
|
Постоянный
Регистрация: 17.02.2014
Сообщений: 611
С нами:
6438231
Репутация:
133
|
|
Сообщение от kewa opcode
C++:
Код:
CallWindowProc
(
hOrigProc
,
hWnd
,
uMsg
,
wParam
,
lParam
)
;
и ваще он вот так выглядит
C++:
Код:
LRESULT CALLBACK
WindowProc
(
_In_ HWND hwnd
,
_In_ UINT uMsg
,
_In_ WPARAM wParam
,
_In_ LPARAM lParam
)
;
И так и так пробовал , если сделать так , то клавиши работают , но всё равно чат открывается.
C++:
Код:
LRESULT CALLBACK
WndProc
(
HWND hWnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
uMsg
==
WM_KEYDOWN
)
{
if
(
wParam
==
192
)
{
pSAMP
->
say
(
"/CMD"
)
;
return
false
;
}
}
return
CallWindowProcA
(
(
WNDPROC
)
hOrigProc
,
hWnd
,
uMsg
,
wParam
,
lParam
)
;
}
В SF этого хватало
C++:
Код:
bool
__stdcall
wndProc
(
HWND hWnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
uMsg
==
WM_KEYDOWN
)
{
if
(
wParam
==
192
)
{
// 192 - ®
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
Say
(
"/CMD"
)
;
return
false
;
}
}
return
true
;
}
|
|
|

31.01.2018, 02:14
|
|
Постоянный
Регистрация: 15.12.2013
Сообщений: 412
С нами:
6530249
Репутация:
133
|
|
Сообщение от iAmerican
И так и так пробовал , если сделать так , то клавиши работают , но всё равно чат открывается.
1) Попробуй SetWindowLong после того, как по адресу samp.dll + 0x119CB8 (4 байта) будет что-то больше 0. Это означает, что самп уже установил новый адрес процедуры диалогового окна для своих нужд. Это значение еще SF модифицирует, так для справки.
2) TRUE != true (BOOL != BOOLEAN), и в специфических условиях это может работать по другому.
C++:
Код:
LRESULT CALLBACK
WndProc
(
HWND hWnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
uMsg
==
WM_CHAR
&&
wParam
==
'`'
)
{
// .. //
return
FALSE
;
}
return
CallWindowProc
(
hOrigProc
,
hWnd
,
uMsg
,
wParam
,
lParam
)
;
}
3) Вместо всего этого WndProc лишь для игнорирования одной клавиши попробуй 5 байт занопить по адресу samp.dll + 0x5DAFD.
4) Проверял это с открытием чата на 'T', у меня нет тильды ))))
|
|
|

30.01.2018, 16:24
|
|
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами:
6921957
Репутация:
183
|
|
Хукай открытие чата
|
|
|

02.02.2018, 21:10
|
|
Новичок
Регистрация: 08.09.2013
Сообщений: 28
С нами:
6671670
Репутация:
53
|
|
Имеется такая функция из сурсов соба
Код:
Код:
#define FUNC_JPegCompressScreenToFile 0x5D0820
#define CLASS_RwCamera 0xB6F97C
VOID CGameSA::TakeScreenshot ( char * szFileName )
{
DWORD dwFunc = FUNC_JPegCompressScreenToFile;
_asm
{
mov eax, CLASS_RwCamera
mov eax, [eax]
push szFileName
push eax
call dwFunc
add esp,8
}
}
Как её можно вызвать без asm вставки?
|
|
|

02.02.2018, 22:09
|
|
Постоянный
Регистрация: 10.01.2016
Сообщений: 922
С нами:
5441999
Репутация:
133
|
|
Сообщение от Ghost29
Имеется такая функция из сурсов соба
Код:
Код:
#define FUNC_JPegCompressScreenToFile 0x5D0820
#define CLASS_RwCamera 0xB6F97C
VOID CGameSA::TakeScreenshot ( char * szFileName )
{
DWORD dwFunc = FUNC_JPegCompressScreenToFile;
_asm
{
mov eax, CLASS_RwCamera
mov eax, [eax]
push szFileName
push eax
call dwFunc
add esp,8
}
}
Как её можно вызвать без asm вставки?
C++:
Код:
#define FUNC_JPegCompressScreenToFile 0x5D0820
#define CLASS_RwCamera 0xB6F97C
typedef
void
(
_cdecl
*
JPegCompressScreenToFile
)
(
void
*
,
char
*
)
;
char
*
szFileName
=
"ПУТЬ ЗДЕСЬ"
;
JPegCompressScreenToFile Func
=
(
JPegCompressScreenToFile
)
FUNC_JPegCompressScreenToFile
;
Func
(
*
(
void
*
*
)
CLASS_RwCamera
,
szFileName
)
;
std::function я чет не осилил:sad_frog2:
Только зачем парится и не использовать ассемблер?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|