HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 29.01.2018, 21:10
Nika23830
Новичок
Регистрация: 17.03.2016
Сообщений: 11
С нами: 5345263

Репутация: 0
По умолчанию

Цитата:
Сообщение от randazzo  

В проекте есть пример вывода сообщения в чат, при входе в игру.
Можете все равно пожалуйста сюда кинуть код для примера, я нуб :ССС

Цитата:

1.Ваш вопрос: Как выдать сообщение при загрузке? Которые показываются перед "Connected. Joining the game..."
 
Ответить с цитированием

  #2  
Старый 29.01.2018, 21:43
randazzo
Познавший АНТИЧАТ
Регистрация: 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
;
}
 
Ответить с цитированием

  #3  
Старый 28.01.2018, 14:49
Jack_Savage
Участник форума
Регистрация: 06.11.2016
Сообщений: 150
С нами: 5008255

Репутация: 18
По умолчанию

Как игра лочит мышку ?

PS: Хукал SetCursorPos и все равно не мог двигать мышкой
 
Ответить с цитированием

  #4  
Старый 30.01.2018, 14:56
iAmerican
Постоянный
Регистрация: 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
;
}


Получается если я жму "~" , открывается чат сампа , мне надо сделать что бы он не открывался , а отправлялась команда.

Когда захожу в самп , я получаю нажатые клавиши , но перестают реагировать клавиши.
 
Ответить с цитированием

  #5  
Старый 30.01.2018, 15:08
kawa operand
Постоянный
Регистрация: 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
)
;
 
Ответить с цитированием

  #6  
Старый 30.01.2018, 15:16
iAmerican
Постоянный
Регистрация: 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
;
}
 
Ответить с цитированием

  #7  
Старый 31.01.2018, 02:14
san0
Постоянный
Регистрация: 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', у меня нет тильды ))))
 
Ответить с цитированием

  #8  
Старый 30.01.2018, 16:24
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

Хукай открытие чата
 
Ответить с цитированием

  #9  
Старый 02.02.2018, 21:10
tropical5466
Новичок
Регистрация: 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 вставки?
 
Ответить с цитированием

  #10  
Старый 02.02.2018, 22:09
BlackKnigga
Постоянный
Регистрация: 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)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.