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

  #5231  
Старый 21.04.2021, 17:07
Musaigen
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами: 4272230

Репутация: 183


По умолчанию

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

Так же как и на серверный диалог, на вики есть пример на SF

Гайд - API SF | Урок 4 - RakNet

Введение RakNet — это сетевой движок, используемый в SA:MP для обмена данными между игроками и сервером. Клиент отправляет пакет серверу, сервер его обрабатывает и рассылает другим игрокам — таким образом это работает. В этом уроке я покажу, как отправлять свои пакеты и заносить в них данные...

www.blast.hk

Код:
SF->getSAMP()->registerDialogCallback(dialogCallback_t callback); // typedef void(__stdcall *dialogCallback_t)(int dialogId, int buttonId, int listItem, const char *input);
 
Ответить с цитированием

  #5232  
Старый 21.04.2021, 20:30
Rei
Познавший АНТИЧАТ
Регистрация: 18.06.2017
Сообщений: 1,632
С нами: 4686777

Репутация: 183


По умолчанию

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

Как в gameLoop'е исполнять свой код раз в секунду?
Пробовал такое, но похоже, что там задержка больше одной мс

C++:





Код:
void
timerUpdateHooked
(
)
{
static
bool
bIsInitialized
=
false
;
static
unsigned
int
iTickedCount
=
0
;
if
(
!
bIsInitialized
&&
SAMP
::
isInitialized
(
)
)
{
bIsInitialized
=
true
;
}
if
(
bIsInitialized
)
{
if
(
iTickedCount
>=
1000
)
{
iTickedCount
=
0
;
// ...
}
else
{
iTickedCount
++
;
}
}
(
(
void
(
__cdecl
*
)
(
)
)
g_Entry
.
m_pTimerUpdateHook
->
m_pTrampoline
)
(
)
;
}

дык геймлуп вызывается с кадрами

C++:





Код:
DWORD dwLastTick
=
GetTickCount
(
)
;
// в глобале
if
(
GetTickCount
(
)
-
dwLastTick
>=
1000
)
{
dwLastTick
=
GetTickCount
(
)
;
// код
}
 
Ответить с цитированием

  #5233  
Старый 21.04.2021, 21:04
imring
Флудер
Регистрация: 03.08.2016
Сообщений: 2,363
С нами: 5145387

Репутация: 183


По умолчанию

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

Как в gameLoop'е исполнять свой код раз в секунду?
Пробовал такое, но похоже, что там задержка больше одной мс

C++:





Код:
void
timerUpdateHooked
(
)
{
static
bool
bIsInitialized
=
false
;
static
unsigned
int
iTickedCount
=
0
;
if
(
!
bIsInitialized
&&
SAMP
::
isInitialized
(
)
)
{
bIsInitialized
=
true
;
}
if
(
bIsInitialized
)
{
if
(
iTickedCount
>=
1000
)
{
iTickedCount
=
0
;
// ...
}
else
{
iTickedCount
++
;
}
}
(
(
void
(
__cdecl
*
)
(
)
)
g_Entry
.
m_pTimerUpdateHook
->
m_pTrampoline
)
(
)
;
}

или можно https://www.blast.hk/threads/10970/post-419257
 
Ответить с цитированием

  #5234  
Старый 24.04.2021, 18:33
PanSeek
Постоянный
Регистрация: 24.06.2016
Сообщений: 912
С нами: 5202871

Репутация: 163


По умолчанию

SF. Как правильно работать с памятью игры (видел гайды, но видимо что-то не то было либо я не понял), вот к примеру как это перевести в C++ из Lua

Lua:





Код:
local
mem
=
require
'memory'
--
mem
.
fill
(
sampGetChatInfoPtr
(
)
+
306
,
0x0
,
25200
)
mem
.
write
(
sampGetChatInfoPtr
(
)
+
306
,
25562
,
4
,
0x0
)
mem
.
write
(
sampGetChatInfoPtr
(
)
+
0x63DA
,
1
,
1
)


Насчет
Код:
std::memcpy
чуть знаю.

Также видел такую функцию в полезных сниппетах для C++

C++:





Код:
void
WriteMemory
(
void
*
address
,
void
*
bytes
,
int
byteSize
)
{
DWORD NewProtection
;
VirtualProtect
(
address
,
byteSize
,
PAGE_EXECUTE_READWRITE
,
&
NewProtection
)
;
std
::
memcpy
(
address
,
bytes
,
byteSize
)
;
VirtualProtect
(
address
,
byteSize
,
NewProtection
,
&
NewProtection
)
;
}


Но где-то принимается более 3-х аргументов.

Получил
Код:
sampGetChatInfoPtr()
оно равно
Код:
0x17924EE0
- если все правильно сделал. Также как я понял оно находится здесь:

C++:





Код:
//SFSAMP.h
//class SAMPFUNCS_API SFSAMP
struct
stChatInfo
*
getChat
(
void
)
;
 
Ответить с цитированием

  #5235  
Старый 24.04.2021, 20:00
Musaigen
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами: 4272230

Репутация: 183


По умолчанию

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

Также видел такую функцию в полезных сниппетах для C++
C++:





Код:
template

void
WriteMemory
(
void
*
address
,
T value
)
{
DWORD protect
;
VirtualProtect
(
address
,
sizeof
(
T
)
,
PAGE_EXECUTE_READWRITE
,
&
protect
)
;
*
reinterpret_cast

(
address
)
=
value
;
VirtualProtect
(
address
,
sizeof
(
T
)
,
protect
,
&
protect
)
;
// вместо &protect можно и nullptr
}


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

mem.fill(sampGetChatInfoPtr() + 306, 0x0, 25200)
C++:





Код:
void
MemoryFill
(
void
*
address
,
int
value
,
unsigned
int
size
)
{
DWORD protect
;
VirtualProtect
(
address
,
size
,
PAGE_EXECUTE_READWRITE
,
&
protect
)
;
memset
(
address
,
value
,
size
)
;
VirtualProtect
(
address
,
size
,
protect
,
&
protect
)
;
}


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

SF. Как правильно работать с памятью игры (видел гайды, но видимо что-то не то было либо я не понял), вот к примеру как это перевести в C++ из Lua

Lua:





Код:
local
mem
=
require
'memory'
--
mem
.
fill
(
sampGetChatInfoPtr
(
)
+
306
,
0x0
,
25200
)
mem
.
write
(
sampGetChatInfoPtr
(
)
+
306
,
25562
,
4
,
0x0
)
mem
.
write
(
sampGetChatInfoPtr
(
)
+
0x63DA
,
1
,
1
)

C++:





Код:
void
ClearChat
(
)
{
stChatInfo
*
chat
=
SF
->
getSAMP
(
)
->
getChat
(
)
;
MemoryFill
(
&
chat
->
chatEntry
,
0
,
sizeof
(
stChatEntry
)
*
100
)
;
chat
->
m_iRedraw
=
1
;
}


Вроде бы этого достаточно.
 
Ответить с цитированием

  #5236  
Старый 25.04.2021, 12:09
frosjkee
Участник форума
Регистрация: 21.01.2020
Сообщений: 123
С нами: 3322808

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

sampapi покежьте как правильно использовать



Lua:





Код:
[
/
B
]
#
include
"main.h"
void __cdecl
DLLProject
(
void
*
pArg
)
{
while
(
true
)
{
Sleep
(
1
)
;
if
(
GetAsyncKeyState
(
VK_END
)
)
{
while
(
GetAsyncKeyState
(
VK_END
)
)
{
Sleep
(
1
)
;
}
sampapi
::
v037r3
::
RefNetGame
(
)
-
>
m_pSettings
-
>
m_bNoNametagsBehindWalls
=
false
;
}
}
}
BOOL WINAPI
DllMain
(
_In_ HINSTANCE hinstDLL
,
_In_ DWORD fdwReason
,
_In_ PVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
_beginthread
(
DLLProject
,
NULL
,
nullptr
)
;
return
TRUE
;
}


 
Ответить с цитированием

  #5237  
Старый 25.04.2021, 16:37
PanSeek
Постоянный
Регистрация: 24.06.2016
Сообщений: 912
С нами: 5202871

Репутация: 163


По умолчанию

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

sampapi покежьте как правильно использовать


Lua:





Код:
[
/
B
]
#
include
"main.h"
void __cdecl
DLLProject
(
void
*
pArg
)
{
while
(
true
)
{
Sleep
(
1
)
;
if
(
GetAsyncKeyState
(
VK_END
)
)
{
while
(
GetAsyncKeyState
(
VK_END
)
)
{
Sleep
(
1
)
;
}
sampapi
::
v037r3
::
RefNetGame
(
)
-
>
m_pSettings
-
>
m_bNoNametagsBehindWalls
=
false
;
}
}
}
BOOL WINAPI
DllMain
(
_In_ HINSTANCE hinstDLL
,
_In_ DWORD fdwReason
,
_In_ PVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
_beginthread
(
DLLProject
,
NULL
,
nullptr
)
;
return
TRUE
;
}



В C++ я конечно не силен, но что-то мне подсказывает, что тут можно не использовать поток.

C++:





Код:
LRESULT CALLBACK
WindowProc
(
HWND hwnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
switch
(
uMsg
)
{
case
WM_KEYUP
:
{
switch
(
wParam
)
{
case
VK_END
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pSettings
->
m_bNoNametagsBehindWalls
=
false
;
break
;
}
}
}
}
return
CallWindowProcA
(
WNDPROC
(
DLLProject
.
PrevWndFunc
)
,
hwnd
,
uMsg
,
wParam
,
lParam
)
;
}
//WinAPI. Перерегистрировать WindowProc нужно
 
Ответить с цитированием

  #5238  
Старый 25.04.2021, 17:06
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

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

В C++ я конечно не силен, но что-то мне подсказывает, что тут можно не использовать поток.
из DllMain WNDPROC хук не поставишь, если аси лоадером подргужать, к тому моменту окно игры еще не создано
 
Ответить с цитированием

  #5239  
Старый 25.04.2021, 18:55
frosjkee
Участник форума
Регистрация: 21.01.2020
Сообщений: 123
С нами: 3322808

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

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

В C++ я конечно не силен, но что-то мне подсказывает, что тут можно не использовать поток.

C++:





Код:
LRESULT CALLBACK
WindowProc
(
HWND hwnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
switch
(
uMsg
)
{
case
WM_KEYUP
:
{
switch
(
wParam
)
{
case
VK_END
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pSettings
->
m_bNoNametagsBehindWalls
=
false
;
break
;
}
}
}
}
return
CallWindowProcA
(
WNDPROC
(
DLLProject
.
PrevWndFunc
)
,
hwnd
,
uMsg
,
wParam
,
lParam
)
;
}
//WinAPI. Перерегистрировать WindowProc нужно

Спасибо за помощь друголек, однако я неправильно вызываю функцию в этом коде и я не знаю как.
 
Ответить с цитированием

  #5240  
Старый 26.04.2021, 23:20
Krisp
Новичок
Регистрация: 03.11.2018
Сообщений: 23
С нами: 3961687

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

Ребят, может кто помочь фиксануть аимбот к ближайшей кости? У меня некоторые проблемки, черканите в лс, тк код не маленький
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT ™ © 2001- Antichat Kft.