PDA

Просмотр полной версии : С/С++ Вопрос - Ответ


Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28 29 30 31

#Rin
02.06.2020, 18:09
ауе, почему при возврате оригинального wndproc крашит игру?)

C++:






if
(
reason
==
DLL_PROCESS_DETACH
)
{
SetWindowLongA
(
gl
.
gameWindow
,
GWL_WNDPROC
,
reinterpret_cast

(
gl
.
originalWndProc
)
)
;
}




вызывается в DllMain


Любой плагин может установить до и после тебя свой WndProc.

Выгружая свой плагин, адрес на твой WndProc, который другие плагины считают за "оригинальный" становится невалидным, из-за чего они вызывают функцию которой уже нету в памяти. Вернув таким образом якобы "оригинальный" WndProc который тебе известен, ты ломаешь цепочку обработчиков.

Избежать этого можно оставив в памяти функцию пустышку для продолжения цепочки вызовов.

Receiver
02.06.2020, 19:38
Как отгрузить ASI плагин без краша?

Dark_Knight
02.06.2020, 19:55
Как? Молча. Найти из-за чего крашит при выходе и пофиксить это. Если ты думаешь, что у тебя нормальный код, то задай себе вопрос. Какого хера он крашит.

manukhov
02.06.2020, 20:20
Соберите из этого чит в Visual Studio https://yadi.sk/d/FX-O72F-J98EjQ (https://www.blast.hk/redirect/aHR0cHMlM0ElMkYlMkZ2ay5jb20lMkZhd2F5LnBocCUzRnRvJT NEaHR0cHMlMjUzQSUyNTJGJTI1MkZ5YWRpLnNrJTI1MkZkJTI1 MkZGWC1PNzJGLUo5OEVqUSUyNmNjX2tleSUzRA==)


Там если что нихуя нет, пустое говно

Receiver
02.06.2020, 20:36
Как? Молча. Найти из-за чего крашит при выходе и пофиксить это. Если ты думаешь, что у тебя нормальный код, то задай себе вопрос. Какого хера он крашит.


Не при выходе крашит. Пытаюсь отгрузить через FreeLibraryAndExitThread – краш. Перед вызовом, я конечно же отгружаю всё что использую.

SiTrak
02.06.2020, 20:39
Не при выходе крашит. Пытаюсь отгрузить через FreeLibraryAndExitThread – краш. Перед вызовом, я конечно же отгружаю всё что использую.


Ты снимаешь все хуки?

Receiver
02.06.2020, 20:40
Ты снимаешь все хуки?


Да

Dark_Knight
02.06.2020, 20:41
Не при выходе крашит. Пытаюсь отгрузить через FreeLibraryAndExitThread – краш. Перед вызовом, я конечно же отгружаю всё что использую.


Подключи отладку и посмотри на каком моменте крашит. Бывает, что забыл какую-то проверку сделать или что-то в таком духе. С отладкой ты сможешь посмотреть список вызовов до краша. И не забудь перед откладкой скомпилировать с /DEBUG

Receiver
03.06.2020, 10:37
Как рассчитать оффсет в bitStream, для SetReadOffset/SetWriteOffset?

https://forum.antichat.xyz/attachments/27506902/

Все аргументы:

https://forum.antichat.xyz/attachments/27506902/

Мне нужно сразу начинать читать с iClientVerLen. Попытался найти оффсет с помощью offsetof, результат не утешительный.

ufdhbi
03.06.2020, 22:52
Как рассчитать оффсет в bitStream, для SetReadOffset/SetWriteOffset?

Все аргументы:

Мне нужно сразу начинать читать с iClientVerLen. Попытался найти оффсет с помощью offsetof, результат не утешительный.


в ручную биты считать

Dark_Knight
03.06.2020, 23:16
Прям так не получится сразу считывать из-за того, что чары не имеет статичной длинны

barspinoff
05.06.2020, 21:33
Сделал внешний Антситан, как ток включаю игра сразу закрывается. Ни крашей, ничего. Тупо закрывается. Это потому-что проверку не сделал?

Интернал сурс по корому делал:






if
(
bAntiStun
)
{
if
(
!
pSAMP
->
getPlayers
(
)
)
return
;
if
(
!
bAntiStunned
)
{
// but it doesn't work only for sniper
DWORD dwStunAddr
=
*
(
DWORD
*
)
0x00B6F5F0
;
*
(
BYTE
*
)
(
dwStunAddr
+
0x478
)
=
4
;
}
// for sniper stun
float
fRate
=
100.f
;
bAntiStunned
=
true
;
}
else
{
if
(
bAntiStunned
)
{
DWORD dwStunAddr
=
*
(
DWORD
*
)
0x00B6F5F0
;
*
(
BYTE
*
)
(
dwStunAddr
+
0x478
)
=
0
;
float
fRate
=
1.f
;
bAntiStunned
=
false
;
}
}




Вот что я высрал:






{
if
(
materialCheckBox3
->
Checked
)
{
DWORD dwStunAddr
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
0x00B6F5F0
,
&
dwStunAddr
,
sizeof
(
dwStunAddr
)
,
0
)
;
dwStunAddr
=
4
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
dwStunAddr
+
0x478
)
,
&
dwStunAddr
,
sizeof
(
dwStunAddr
)
,
nullptr
)
;
float
fRate
=
100.f
;
}
else
{
DWORD dwStunAddr
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
0x00B6F5F0
,
&
dwStunAddr
,
sizeof
(
dwStunAddr
)
,
0
)
;
dwStunAddr
=
0
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
dwStunAddr
+
0x478
)
,
&
dwStunAddr
,
sizeof
(
dwStunAddr
)
,
nullptr
)
;
float
fRate
=
1.f
;
}
}




@RTD (https://www.blast.hk/members/126461/)


не хватает VirtualProtectEx

RTD
05.06.2020, 22:40
Сделал внешний Антситан, как ток включаю игра сразу закрывается. Ни крашей, ничего. Тупо закрывается. Это потому-что проверку не сделал?

Интернал сурс по корому делал:






if
(
bAntiStun
)
{
if
(
!
pSAMP
->
getPlayers
(
)
)
return
;
if
(
!
bAntiStunned
)
{
// but it doesn't work only for sniper
DWORD dwStunAddr
=
*
(
DWORD
*
)
0x00B6F5F0
;
*
(
BYTE
*
)
(
dwStunAddr
+
0x478
)
=
4
;
}
// for sniper stun
float
fRate
=
100.f
;
bAntiStunned
=
true
;
}
else
{
if
(
bAntiStunned
)
{
DWORD dwStunAddr
=
*
(
DWORD
*
)
0x00B6F5F0
;
*
(
BYTE
*
)
(
dwStunAddr
+
0x478
)
=
0
;
float
fRate
=
1.f
;
bAntiStunned
=
false
;
}
}




Вот что я высрал:






{
if
(
materialCheckBox3
->
Checked
)
{
DWORD dwStunAddr
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
0x00B6F5F0
,
&
dwStunAddr
,
sizeof
(
dwStunAddr
)
,
0
)
;
dwStunAddr
=
4
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
dwStunAddr
+
0x478
)
,
&
dwStunAddr
,
sizeof
(
dwStunAddr
)
,
nullptr
)
;
float
fRate
=
100.f
;
}
else
{
DWORD dwStunAddr
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
0x00B6F5F0
,
&
dwStunAddr
,
sizeof
(
dwStunAddr
)
,
0
)
;
dwStunAddr
=
0
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
dwStunAddr
+
0x478
)
,
&
dwStunAddr
,
sizeof
(
dwStunAddr
)
,
nullptr
)
;
float
fRate
=
1.f
;
}
}




@RTD (https://www.blast.hk/members/126461/)



C++:






DWORD dwStunAddr
;
BYTE data
=
materialCheckBox3
->
Checked
?
4
:
0
;
float
fRate
=
materialCheckBox3
->
Checked
?
100.f
:
1.f
;
ReadProcessMemory
(
hProcess
,
(
LPVOID
)
0xB6F5F0
,
&
dwStunAddr
,
sizeof
(
dwStunAddr
)
,
nullptr
)
;
LPVOID writeAddr
=
(
LPVOID
)
(
dwStunAddr
+
0x478
)
;
DWORD oldProt
;
VirtualProtectEx
(
hProcess
,
writeAddr
,
sizeof
(
data
)
,
PAGE_READWRITE
,
&
oldProt
)
;
WriteProcessMemory
(
hProcess
,
writeAddr
,
&
data
,
sizeof
(
data
)
,
nullptr
)
;
VirtualProtectEx
(
hProcess
,
writeAddr
,
sizeof
(
data
)
,
oldProt
,
&
oldProt
)
;

manukhov
05.06.2020, 22:46
C++:






DWORD dwStunAddr
;
BYTE data
=
materialCheckBox3
->
Checked
?
4
:
0
;
float
fRate
=
materialCheckBox3
->
Checked
?
100.f
:
1.f
;
ReadProcessMemory
(
hProcess
,
(
LPVOID
)
0xB6F5F0
,
&
dwStunAddr
,
sizeof
(
dwStunAddr
)
,
nullptr
)
;
LPVOID writeAddr
=
(
LPVOID
)
(
dwStunAddr
+
0x478
)
;
DWORD oldProt
;
VirtualProtectEx
(
hProcess
,
writeAddr
,
sizeof
(
data
)
,
PAGE_READWRITE
,
&
oldProt
)
;
WriteProcessMemory
(
hProcess
,
writeAddr
,
&
data
,
sizeof
(
data
)
,
nullptr
)
;
VirtualProtectEx
(
hProcess
,
writeAddr
,
sizeof
(
data
)
,
oldProt
,
&
oldProt
)
;





жесть ты крут

Receiver
05.06.2020, 23:41
Аналог doesCharExist из Lua в SF API?

SrMilton
06.06.2020, 11:12
Yo guys. I'm having a problem trying to create a second dialog (after the first one closes). The first dialog appears normally, and when a response it, the second dialog never appears. What should i do ? I had already searched a lot and no answers :(

Код:






void click()
{
SF->getSAMP()->getDialog()->ShowDialog(DIALOG_CRIARCONFIG, DIALOG_STYLE_INPUT, "Criar", "Nome da nova configuração:", "Criar", "Cancelar");//Working
}

void CALLBACK OnDialogResponse(int dialogId, int buttonId, int listItem, const char* input)
{
switch (dialogId)
{
case DIALOG_CRIARCONFIG:
{
if (buttonId == 1)
{
SF->getSAMP()->getDialog()->ShowDialog(DIALOG_AVISO, DIALOG_STYLE_MSGBOX, "Criado", "O Arquivo foi criado!", "Ok", "");//Not Working
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "O Arquivo foi criado!");
}
}
}
}




The first one closes after i response it, and the second never shows. I had already tried Close(0);

_=Gigant=_
06.06.2020, 14:09
how to loop through all images in folder without causing program to bug like hell ?

I have this

static float image_width = 100.0f;

static float image_height = 100.0f;

for(const auto & crap: std::experimental::filesystem::directory_iterator( Example\\Images\\))

{

IDirect3DTexture9* crap_texture;

D3DXCreateTextureFromFileA(g_pd3dDevice, crap.path().string().c_str(), &crap_texture);

ImGui::Image(crap_texture, ImVec2(image_width, image_height));

}

when i compile this it displays images from specified folder but ram memory usage starts to increase like crazy and program is under 5 fps = unusable

Dark_Knight
06.06.2020, 19:47
Аналог doesCharExist из Lua в SF API?


Проверка указателя.

leak.
08.06.2020, 19:34
привет кто может помочь пожалуйста. почему игра крашит при запуске моево чуда плагина?



код:






#include
#include
void
WriteMemory
(
void
*
address
,
void
*
bytes
,
int
byteSize
)
{
DWORD NewProtection
;
VirtualProtect
(
address
,
byteSize
,
PAGE_EXECUTE_READWRITE
,
&
NewProtection
)
;
memcpy
(
address
,
bytes
,
byteSize
)
;
VirtualProtect
(
address
,
byteSize
,
NewProtection
,
&
NewProtection
)
;
}
void
__cdecl
MainThread
(
void
*
pArg
)
{
DWORD dwStunAddr
=
*
(
DWORD
*
)
0x00B6F5F0
;
LPVOID writeAddr
=
(
LPVOID
)
(
dwStunAddr
+
0x478
)
;
BYTE data
=
4
;
WriteMemory
(
writeAddr
,
&
data
,
sizeof
(
data
)
)
;
}
BOOL WINAPI
DllMain
(
_In_ HINSTANCE hinstDLL
,
_In_ DWORD fdwReason
,
_In_ PVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
_beginthread
(
MainThread
,
NULL
,
nullptr
)
;
return
TRUE
;
}









C++:






в начало потока
while
(
1
)
{
if
(
*
(
DWORD
*
)
0xB6F5F0
)
break
;
Sleep
(
1
)
;
}

barspinoff
11.06.2020, 00:10
@barspinoff (https://www.blast.hk/members/81776/) вот здесь нужен VirtualProtectEx? Смещений вроде нет.

сурс:






if
(
c_norecoil
)
{
everything
(
)
;
int
wID
;
wID
=
*
(
BYTE
*
)
0xBAA410
;
DWORD norecoilAddr
=
0xB7CDC8
;
DWORD norecoil
=
1
;
if
(
wID
==
24
&&
deaglepoor24
||
wID
==
31
&&
m4poor24
||
wID
==
30
&&
akpoor24
||
wID
==
27
&&
combatpoor24
||
wID
==
33
&&
riflepoor24
||
wID
==
29
&&
mp5poor24
)
{
if
(
m4poor24
)
{
ReadProcessMemory
(
handle
,
(
LPCVOID
)
norecoilAddr
,
&
norecoil
,
sizeof
(
norecoil
)
,
0
)
;
norecoil
=
1
;
DWORD valuetherm
=
1.074754357
;
WriteProcessMemory
(
handle
,
(
LPVOID
)
norecoilAddr
,
&
valuetherm
,
sizeof
(
valuetherm
)
,
0
)
;
Sleep
(
10
)
;
}
if
(
deaglepoor24
)
{
ReadProcessMemory
(
handle
,
(
LPCVOID
)
norecoilAddr
,
&
norecoil
,
sizeof
(
norecoil
)
,
0
)
;
norecoil
=
1
;
DWORD valuetherm
=
1.074754357
;
WriteProcessMemory
(
handle
,
(
LPVOID
)
norecoilAddr
,
&
valuetherm
,
sizeof
(
valuetherm
)
,
0
)
;
Sleep
(
10
)
;
}
if
(
akpoor24
)
{
ReadProcessMemory
(
handle
,
(
LPCVOID
)
norecoilAddr
,
&
norecoil
,
sizeof
(
norecoil
)
,
0
)
;
norecoil
=
1
;
DWORD valuetherm
=
1.074754357
;
WriteProcessMemory
(
handle
,
(
LPVOID
)
norecoilAddr
,
&
valuetherm
,
sizeof
(
valuetherm
)
,
0
)
;
Sleep
(
10
)
;
}
if
(
combatpoor24
)
{
ReadProcessMemory
(
handle
,
(
LPCVOID
)
norecoilAddr
,
&
norecoil
,
sizeof
(
norecoil
)
,
0
)
;
norecoil
=
1
;
DWORD valuetherm
=
1.074754357
;
WriteProcessMemory
(
handle
,
(
LPVOID
)
norecoilAddr
,
&
valuetherm
,
sizeof
(
valuetherm
)
,
0
)
;
Sleep
(
10
)
;
}
if
(
riflepoor24
)
{
ReadProcessMemory
(
handle
,
(
LPCVOID
)
norecoilAddr
,
&
norecoil
,
sizeof
(
norecoil
)
,
0
)
;
norecoil
=
1
;
DWORD valuetherm
=
1.074754357
;
WriteProcessMemory
(
handle
,
(
LPVOID
)
norecoilAddr
,
&
valuetherm
,
sizeof
(
valuetherm
)
,
0
)
;
Sleep
(
10
)
;
}
if
(
mp5poor24
)
{
ReadProcessMemory
(
handle
,
(
LPCVOID
)
norecoilAddr
,
&
norecoil
,
sizeof
(
norecoil
)
,
0
)
;
norecoil
=
1
;
DWORD valuetherm
=
1.074754357
;
WriteProcessMemory
(
handle
,
(
LPVOID
)
norecoilAddr
,
&
valuetherm
,
sizeof
(
valuetherm
)
,
0
)
;
Sleep
(
10
)
;
}
}
}




моё:






int
wID
;
ReadProcessMemory
(
hProcess
,
(
LPVOID
)
0xBAA410
,
&
wID
,
sizeof
(
wID
)
,
nullptr
)
;
DWORD norecoilAddr
;
ReadProcessMemory
(
hProcess
,
(
LPVOID
)
0xB7CDC8
,
&
norecoilAddr
,
sizeof
(
norecoilAddr
)
,
nullptr
)
;
DWORD norecoil
=
1
;
if
(
wID
==
24
)
{
ReadProcessMemory
(
hProcess
,
(
LPCVOID
)
norecoilAddr
,
&
norecoil
,
sizeof
(
norecoil
)
,
0
)
;
norecoil
=
1
;
DWORD valuetherm
=
1.074754357
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
norecoilAddr
,
&
valuetherm
,
sizeof
(
valuetherm
)
,
0
)
;
Sleep
(
10
)
;
}
if
(
wID
==
31
)
{
ReadProcessMemory
(
hProcess
,
(
LPCVOID
)
norecoilAddr
,
&
norecoil
,
sizeof
(
norecoil
)
,
0
)
;
norecoil
=
1
;
DWORD valuetherm
=
1.074754357
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
norecoilAddr
,
&
valuetherm
,
sizeof
(
valuetherm
)
,
0
)
;
Sleep
(
10
)
;
}
if
(
wID
==
30
)
{
ReadProcessMemory
(
hProcess
,
(
LPCVOID
)
norecoilAddr
,
&
norecoil
,
sizeof
(
norecoil
)
,
0
)
;
norecoil
=
1
;
DWORD valuetherm
=
1.074754357
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
norecoilAddr
,
&
valuetherm
,
sizeof
(
valuetherm
)
,
0
)
;
Sleep
(
10
)
;
}
if
(
wID
==
27
)
{
ReadProcessMemory
(
hProcess
,
(
LPCVOID
)
norecoilAddr
,
&
norecoil
,
sizeof
(
norecoil
)
,
0
)
;
norecoil
=
1
;
DWORD valuetherm
=
1.074754357
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
norecoilAddr
,
&
valuetherm
,
sizeof
(
valuetherm
)
,
0
)
;
Sleep
(
10
)
;
}
if
(
wID
==
33
)
{
ReadProcessMemory
(
hProcess
,
(
LPCVOID
)
norecoilAddr
,
&
norecoil
,
sizeof
(
norecoil
)
,
0
)
;
norecoil
=
1
;
DWORD valuetherm
=
1.074754357
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
norecoilAddr
,
&
valuetherm
,
sizeof
(
valuetherm
)
,
0
)
;
Sleep
(
10
)
;
}
if
(
wID
==
29
)
{
ReadProcessMemory
(
hProcess
,
(
LPCVOID
)
norecoilAddr
,
&
norecoil
,
sizeof
(
norecoil
)
,
0
)
;
norecoil
=
1
;
DWORD valuetherm
=
1.074754357
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
norecoilAddr
,
&
valuetherm
,
sizeof
(
valuetherm
)
,
0
)
;
Sleep
(
10
)
;
}
}
}




@RTD (https://www.blast.hk/members/126461/) Сделал с VP для пур аимбота по твоим примерам, чекни пожалуйста.

Poor Aimbot:






int
wID
;
DWORD pActor
,
pPed
,
pMtrx1
,
pMtrx2
;
float
playerHP
;
ReadProcessMemory
(
hProcess
,
(
LPVOID
)
0xBAA410
,
&
wID
,
sizeof
(
wID
)
,
nullptr
)
;
ReadProcessMemory
(
hProcess
,
(
LPVOID
)
0xB6F5F0
,
&
pActor
,
sizeof
(
pActor
)
,
nullptr
)
;
LPVOID pPedM
=
(
LPVOID
)
(
pActor
+
0x79C
)
;
LPVOID Mtrx1
=
(
LPVOID
)
(
pActor
+
0x14
)
;
LPVOID Mtrx2
=
(
LPVOID
)
(
pPed
+
0x14
)
;
LPVOID playerHP1
=
(
LPVOID
)
(
pPed
+
0x540
)
;
if
(
wID
==
24
)
{
if
(
pPed
>
0
)
{
if
(
playerHP
>
0.0f
)
{
float
x
,
y
,
z
,
x1
,
y1
,
z1
,
RotAngle
,
Xwiping
,
Ywiping
,
Zwiping
;
LPVOID xx
=
(
LPVOID
)
(
pMtrx1
+
0x30
)
;
LPVOID yy
=
(
LPVOID
)
(
pMtrx1
+
0x34
)
;
LPVOID zz
=
(
LPVOID
)
(
pMtrx1
+
0x38
)
;
LPVOID x11
=
(
LPVOID
)
(
pMtrx2
+
0x30
)
;
LPVOID y11
=
(
LPVOID
)
(
pMtrx2
+
0x34
)
;
LPVOID z11
=
(
LPVOID
)
(
pMtrx2
+
0x38
)
;
LPVOID RotAngle1
=
(
LPVOID
)
(
pActor
+
0x558
)
;
x1
=
(
float
)
x
+
2
*
(
float
)
cos
(
RotAngle
+
1.48353F
)
;
y1
=
(
float
)
y
+
2
*
(
float
)
sin
(
RotAngle
+
1.48353F
)
;
z1
=
(
float
)
z
+
0.5F
;
x1
=
(
float
)
Xwiping
;
y1
=
(
float
)
Ywiping
;
z1
=
(
float
)
Zwiping
;
DWORD oldProt
;
VirtualProtectEx
(
hProcess
,
pPedM
,
sizeof
(
pPedM
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProt
)
;
// pPed
WriteProcessMemory
(
hProcess
,
pPedM
,
&
pPed
,
sizeof
(
pPedM
)
,
0
)
;
VirtualProtectEx
(
hProcess
,
pPedM
,
sizeof
(
pPedM
)
,
oldProt
,
NULL
)
;
VirtualProtectEx
(
hProcess
,
Mtrx1
,
sizeof
(
Mtrx1
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProt
)
;
// pMtrx1
WriteProcessMemory
(
hProcess
,
Mtrx1
,
&
Mtrx1
,
sizeof
(
Mtrx1
)
,
0
)
;
VirtualProtectEx
(
hProcess
,
Mtrx1
,
sizeof
(
Mtrx1
)
,
oldProt
,
NULL
)
;
VirtualProtectEx
(
hProcess
,
Mtrx2
,
sizeof
(
Mtrx2
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProt
)
;
// pMtrx2
WriteProcessMemory
(
hProcess
,
Mtrx2
,
&
Mtrx2
,
sizeof
(
Mtrx2
)
,
0
)
;
VirtualProtectEx
(
hProcess
,
Mtrx2
,
sizeof
(
Mtrx2
)
,
oldProt
,
NULL
)
;
VirtualProtectEx
(
hProcess
,
playerHP1
,
sizeof
(
playerHP1
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProt
)
;
// playerHP
WriteProcessMemory
(
hProcess
,
playerHP1
,
&
playerHP1
,
sizeof
(
playerHP1
)
,
0
)
;
VirtualProtectEx
(
hProcess
,
playerHP1
,
sizeof
(
playerHP1
)
,
oldProt
,
NULL
)
;
VirtualProtectEx
(
hProcess
,
xx
,
sizeof
(
xx
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProt
)
;
// x
WriteProcessMemory
(
hProcess
,
xx
,
&
xx
,
sizeof
(
xx
)
,
0
)
;
VirtualProtectEx
(
hProcess
,
xx
,
sizeof
(
xx
)
,
oldProt
,
NULL
)
;
VirtualProtectEx
(
hProcess
,
yy
,
sizeof
(
yy
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProt
)
;
// y
WriteProcessMemory
(
hProcess
,
yy
,
&
yy
,
sizeof
(
yy
)
,
0
)
;
VirtualProtectEx
(
hProcess
,
yy
,
sizeof
(
yy
)
,
oldProt
,
NULL
)
;
VirtualProtectEx
(
hProcess
,
zz
,
sizeof
(
zz
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProt
)
;
// z
WriteProcessMemory
(
hProcess
,
zz
,
&
zz
,
sizeof
(
zz
)
,
0
)
;
VirtualProtectEx
(
hProcess
,
zz
,
sizeof
(
zz
)
,
oldProt
,
NULL
)
;
VirtualProtectEx
(
hProcess
,
x11
,
sizeof
(
x11
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProt
)
;
// x1
WriteProcessMemory
(
hProcess
,
x11
,
&
x11
,
sizeof
(
x11
)
,
0
)
;
VirtualProtectEx
(
hProcess
,
x11
,
sizeof
(
x11
)
,
oldProt
,
NULL
)
;
VirtualProtectEx
(
hProcess
,
y11
,
sizeof
(
y11
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProt
)
;
// y1
WriteProcessMemory
(
hProcess
,
y11
,
&
y11
,
sizeof
(
y11
)
,
0
)
;
VirtualProtectEx
(
hProcess
,
y11
,
sizeof
(
y11
)
,
oldProt
,
NULL
)
;
VirtualProtectEx
(
hProcess
,
z11
,
sizeof
(
z11
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProt
)
;
// z1
WriteProcessMemory
(
hProcess
,
z11
,
&
z11
,
sizeof
(
z11
)
,
0
)
;
VirtualProtectEx
(
hProcess
,
z11
,
sizeof
(
z11
)
,
oldProt
,
NULL
)
;
VirtualProtectEx
(
hProcess
,
RotAngle1
,
sizeof
(
RotAngle1
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProt
)
;
// RotAngle
WriteProcessMemory
(
hProcess
,
RotAngle1
,
&
RotAngle1
,
sizeof
(
RotAngle1
)
,
0
)
;
VirtualProtectEx
(
hProcess
,
RotAngle1
,
sizeof
(
RotAngle1
)
,
oldProt
,
NULL
)
;
}
}
}
}
}





VirtualProtectEx нужен везде где ты собираешься читать или писать в чужом процессе, т.е. перед любым вызовом Read/WriteProcessMemory

kin4stat
11.06.2020, 23:11
Сделал внешний CoordMaster для CRMP. Причина этому - отсутствие клео, сампфункса. Сделал чисто для практики. Чтобы не получать урон от падения, сделал отдельный поток на "Заморозку" Z и "Заморозку" Состояния игрока( CPed +0x46C = [dword] Проверка игрока: 3 - Пешком)

Все работает хорошо, до тех пор, пока по факту анимация должна быть другая. Т.е. когда я стою на земле, состояние 3, но когда я в воздухе, и я программно меняю 0 на 3, игра зависает(Нельзя двигать камерой) и почти не воспринимает нажатия(Серверные вызовы по прежнему работают(к примеру инвентарь на I открывается). Если ничего не поняли, то вот видео:





Код:

Функция Freeze:





[CODE]
int
state
=
3
;
cout



Сам CoordMaster:





[CODE]
float
stepX
=
(
x
>
endPosX
)
?
-
20.0
:
20.0
;
float
stepY
=
(
y
>
endPosY
)
?
-
20.0
:
20.0
;
Sleep
(
7000
)
;
bool
freezeState
=
true
;
thread
freezer
(
freezeZ
,
ref
(
freezeState
)
,
processHandle
,
point
,
cPed
,
ref
(
z
)
)
;
freezer
.
detach
(
)
;
while
(
(
x
!=
endPosX
)
||
(
y
!=
endPosY
)
)
{
x
+=
(
endPosX



Кстати как я понял, этот "Фриз" не помогает от урона. После приземления урон я получил. Может еще найдется тот кто сможет мне помочь и в этом :D

RTD
12.06.2020, 04:39
я программно меняю 0 на 3, игра зависает(Нельзя двигать камерой) и почти не воспринимает нажатия(Серверные вызовы по прежнему работают(к примеру инвентарь на I открывается)


Это вроде встроенный античит так делает, патчи его, как делает собейт

https://github.com/BlastHackNet/mod_s0beit_sa-1/blob/master/src/samp.cpp#L941

manukhov
12.06.2020, 14:50
Чем отличается проверка cVehicle от pVehicle?

imring
12.06.2020, 14:58
Чем отличается проверка cVehicle от pVehicle?


названием

код скинь, ибо не понятно

DarkP1xel
12.06.2020, 15:09
Ну вообще вот https://www.blast.hk/threads/49906/post-464765

C++:






char
*
pVehicle
=
(
char
*
)
(
(
*
pActor
)
+
0x46C
)
;
if
(
*
pVehicle
!=
1
)




Мне бы по хорошему надо её через виртуал протект прогнать, но как это правильно сделать я не понимаю.
И стало интересно чем она отличатся от cVehicle


cVehicle - Название объекта класса.

pVehicle - Название переменной указателя на класс объекта cVehicle.



Мне бы по хорошему надо её через виртуал протект прогнать, но как это правильно сделать я не понимаю.


Свойствам класса не нужно применять защиту.

manukhov
12.06.2020, 15:14
cVehicle - Название объекта класса.
pVehicle - Название переменной указателя на класс объекта cVehicle.

Свойствам класса не нужно применять защиту.


У меня экстернал)

Кстати, я хотел у тебя спросить. Второй гайд по написанию .dll, где ты про клавиши и про WindProc рассказываешь, он для WinForms подойдет?

Dark_Knight
12.06.2020, 15:34
Откажись от этих форм вообще. Забудь о них вообще. Делай гуи на Qt.

manukhov
12.06.2020, 15:45
Откажись от этих форм вообще. Забудь о них вообще. Делай гуи на Qt.


Умру я там, в этом qt

kin4stat
12.06.2020, 16:19
Это вроде встроенный античит так делает, патчи его, как делает собейт
https://github.com/BlastHackNet/mod_s0beit_sa-1/blob/master/src/samp.cpp#L941


Помогло просто занопить инструкцию по адресу gta_sa.exe + 0x1E8FC4 (6 * 0x90) которая меняла состояние игрока на 0(в полете) (Возможно она меняла и другие состояния, но меня интересовало именно это). Анимация того что игрок в воздухе все равно есть, но она на перемещение, серверный античит и урон при падении никак не влияет.

Адрес постоянный. Теперь игра не ломается. В любом случае спасибо за помощь!

И кстати, зачем нужен VirtualProtect? Что будет если его не использовать? У меня вроде и без него все замечательно работает :D

manukhov
12.06.2020, 18:57
Помогло просто занопить инструкцию по адресу gta_sa.exe + 0x1E8FC4 (6 * 0x90) которая меняла состояние игрока на 0(в полете) (Возможно она меняла и другие состояния, но меня интересовало именно это). Анимация того что игрок в воздухе все равно есть, но она на перемещение, серверный античит и урон при падении никак не влияет.
Адрес постоянный. Теперь игра не ломается. В любом случае спасибо за помощь!
И кстати, зачем нужен VirtualProtect? Что будет если его не использовать? У меня вроде и без него все замечательно работает :D


Для записи в память.

Ты попробуй дефолтные функции в экстернале поделать, без этого фиг че заработает

Dark_Knight
12.06.2020, 20:54
Умру я там, в этом qt


Чего же? Он легкий. Правда есть маленькое но. Если у тебя ВСка на русском, то под него завези другой компилятор

imring
12.06.2020, 21:00
Если у тебя ВСка на русском, то под него завези другой компилятор


а в чем проблема?

Dark_Knight
12.06.2020, 23:26
а в чем проблема?


Будут кокозябры. Установка английского языкового пака и его включение не помогает. Надо сразу ставить англ.

Толкин
13.06.2020, 02:11
как узнать версию сампа из игры(сижу с лаунчера хочу узнать какую версию он ставит) и как ее подменить

Dark_Knight
13.06.2020, 12:38
Через пакет может подменять лаунчер или же отправлять свой запрос на сервер при коннекте. Вариантов много и точного тебе никто не скажет.

spr1te_cheater
13.06.2020, 12:56
Как можно быстро выйти из машины без sf api, пробовал телепортироватся на свои координаты на ноги - не помогло.

sc6ut
13.06.2020, 13:51
возможно сделать хук wndproc незная названия окна, но зная название процесса?

imring
13.06.2020, 13:56
возможно сделать хук wndproc незная названия окна, но зная название процесса?



How can I get a process handle by its name in C++? (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvOD Y1MTUyL2hvdy1jYW4taS1nZXQtYS1wcm9jZXNzLWhhbmRsZS1i eS1pdHMtbmFtZS1pbi1j)

I'm trying to get the process handle of, say example.exe, so I can call TerminateProcess on it. How can I do this? Notice, it doesn't have a window so FindWindow won't work.

stackoverflow.com


Get hwnd by process id c++ (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMT E3MTE0MTcvZ2V0LWh3bmQtYnktcHJvY2Vzcy1pZC1j)

How can I get the HWND of application, if I know the process ID? Anyone could post a sample please? I'm using MSV C++ 2010. I found Process::MainWindowHandle but I don't know how to use it.

stackoverflow.com


Changing HWND Window Procedure in runtime (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMz E2NDgxODAvYy1jaGFuZ2luZy1od25kLXdpbmRvdy1wcm9jZWR1 cmUtaW4tcnVudGltZQ)

I'm working in an IDE which creates a hwnd and its respective WndProc LRESULT CALLBACK. I need to change the WndProc to a custom one. I've read that SetWindowLong would do the job, but I can't find...

stackoverflow.com

spr1te_cheater
15.06.2020, 11:31
Как можно быстро выйти с машины не используя sf api?

DolgorukovGTA
16.06.2020, 22:38
Есть у кого хук на плюсах, который глобально перехватывает события клавиш WinForms? Чтобы хоткей использовать


WinForms это же оболочка под классические WinApi окна (вот это я кэп, очевидно же!).

SetWindowLong (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy93aW4zMi9hcGkvd2ludXNlci9uZi13aW51c2VyLXNldHdp bmRvd2xvbmdh) можешь использовать для изменения процедуры окна.

imring
16.06.2020, 22:39
Есть у кого хук на плюсах, который глобально перехватывает события клавиш WinForms? Чтобы хоткей использовать


если ты про гта са:

GitHub - allwanttokissme/Yet-another-hook-library: Hook library for x86-Windows (https://github.com/BlackKnigga/Yet-another-hook-library)

Hook library for x86-Windows. Contribute to allwanttokissme/Yet-another-hook-library development by creating an account on GitHub.

github.com


C++:






void
CALLBACK
WndProc_hooked
(
HWND
&
hwnd
,
UINT
&
Message
,
WPARAM
&
wparam
,
LPARAM
&
lparam
)
{
switch
(
Message
)
{
case
WM_KEYUP
:
if
(
wparam
==
'9'
)
{
// ...
}
break
;
default
:
break
;
}
}
static
hook
wndproc
(
reinterpret_cast

(
0x747EB0
)
,
WndProc_hooked
)
;

kin4stat
19.06.2020, 23:46
Для записи в память.
Ты попробуй дефолтные функции в экстернале поделать, без этого фиг че заработает


У меня запись координат игрока и его состояния и без VirtualProtect хорошо работают :D

Musaigen
19.06.2020, 23:52
У меня запись координат игрока и его состояния и без VirtualProtect хорошо работают :D


CLEO/Собейт снимает защиту со всей GTA.

manukhov
19.06.2020, 23:52
У меня запись координат игрока и его состояния и без VirtualProtect хорошо работают :D


Ну значит там и wpm достаточно

kin4stat
22.06.2020, 01:17
CLEO/Собейт снимает защиту со всей GTA.


Ничего из этого не стоит. Гта вообще чистая(Хотя не факт, это же родмер). Просто записываю в память и ничего не крашит. В принципе на говнодмир(Радмир) ничего из этого не ставится. Поэтому приходится экстерналы делать :D

Кстати пытался перевести коордмастер (https://github.com/AnikiGasai/ml-coordm/blob/master/coordm.lua) с луа на c++. Но чет он в другую сторону летит. Может кто тыкнет, где у меня ошыпка

CoordMaster:






float
angle
=
getHeadingFromVector2d
(
endPosX
-
x
,
endPosY
-
y
)
;
while
(
getDistanceBetweenCoords2d
(
endPosX
,
endPosY
,
x
,
y
)
>
delta
)
{
x
=
x
-
delta
*
sin
(
radians
(
angle
)
)
;
y
=
y
+
delta
*
cos
(
radians
(
angle
)
)
;
setCharCoordinates
(
processHandle
,
point
,
x
,
y
)
;
getCharCoordinates
(
processHandle
,
point
,
&
x
,
&
y
)
;
angle
=
getHeadingFromVector2d
(
endPosX
-
x
,
endPosY
-
y
)
;
Sleep
(
1500
)
;
}




getHeadingFromVector2d:






float
getHeadingFromVector2d
(
float
x
,
float
y
)
{
float
deg
=
atan2
(
y
,
x
)
*
(
180
/
PI
)
;
return
(
deg
>=
0
)
?
deg
:
deg
+
360
;
}




getDistanceBetweenCoords2d:






float
getDistanceBetweenCoords2d
(
float
x
,
float
y
,
float
x1
,
float
y1
)
{
return
sqrt
(
(
(
x1
-
x
)
*
(
x1
-
x
)
)
+
(
(
y1
-
y
)
*
(
y1
-
y
)
)
)
;
}




UPD:

Починил, нужно было в функции получения направления вектора,минусовать 90 градусов. Может кому в будущем поможет

getHeadingFromVector2d:






float
getHeadingFromVector2d
(
float
x
,
float
y
)
{
float
deg
=
atan2
(
y
,
x
)
*
(
180
/
PI
)
-
90
;
return
(
deg
>
0
)
?
deg
:
deg
+
360
;
}

trefa
27.06.2020, 11:22
Как получить указатель на транспорт локального игрока, нашёл только получение ID транспорта.

imring
27.06.2020, 11:32
Как получить указатель на транспорт локального игрока, нашёл только получение ID транспорта.



plugin-sdk/plugin_sa/game_sa/CPed.h at master · DK22Pac/plugin-sdk (https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CPed.h#L237)

An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk

github.com

trefa
27.06.2020, 11:38
plugin-sdk/plugin_sa/game_sa/CPed.h at master · DK22Pac/plugin-sdk (https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CPed.h#L237)

An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk

github.com



Мне для SF надо.

imring
27.06.2020, 11:47
Мне для SF надо.



SFPlugin/game_api/game/CPed.h:






virtual
CVehicle
*
GetVehicle
(
)
=
0
;
// example
CVehicle
*
veh
=
PEDSELF
->
GetVehicle
(
)
;

kin4stat
29.06.2020, 17:25
Как можно починить транспорт в экстернале. В плане восстановить сломанные части типа бампера, фар и т.п.

Восстанавливать хп научился, предотвращать от ломания машину тоже. А как восстанавливать еще не понял. По адресам памяти не нашел

manukhov
29.06.2020, 18:00
Как можно починить транспорт в экстернале. В плане восстановить сломанные части типа бампера, фар и т.п.
Восстанавливать хп научился, предотвращать от ломания машину тоже. А как восстанавливать еще не понял. По адресам памяти не нашел


Если ты про визуал, то в экстернале это вряд-ли возможно. Хотя мб и можно какой нибудь фэйк paynspray сделать, но чет я сомневаюсь.

kin4stat
29.06.2020, 18:23
Если ты про визуал, то в экстернале это вряд-ли возможно. Хотя мб и можно какой нибудь фэйк paynspray сделать, но чет я сомневаюсь.


В Lua вроде есть штука типа fixCar. Она только локально показывается?

Если ты имеешь ввиду визуал в плане внешних частей авто, то я именно про них говорю. Т.е. я врезался в здание, у меня отвалился бампер. Мне надо чтобы он на место вставал

Еще вопрос, как можно сделать AirBrake?

manukhov
29.06.2020, 18:32
В Lua вроде есть штука типа fixCar. Она только локально показывается?
Если ты имеешь ввиду визуал в плане внешних частей авто, то я именно про них говорю. Т.е. я врезался в здание, у меня отвалился бампер. Мне надо чтобы он на место вставал
Еще вопрос, как можно сделать AirBrake?


А Lua что? Lua интернал. Я вроде юзал клео-починку когда-то и там вместе со здоровьем восстанавливались и запчасти, думаю это было не локально.

kin4stat
29.06.2020, 21:49
Wndproc хук на экстернале работает? Я вроде все правильно сделал, и нихера не работает.

wndProc:





[CODE]
WNDPROC g_origWndProc
=
NULL
;
LRESULT CALLBACK
WndProcHook
(
HWND hwnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
std
::
cout



Даже kek не выводит. Тыкните где ошибка. Запускаю от имени одмена

manukhov
29.06.2020, 23:48
[QUOTE="KiN4StAt"]

Wndproc хук на экстернале работает? Я вроде все правильно сделал, и нихера не работает.

wndProc:





[CODE]
WNDPROC g_origWndProc
=
NULL
;
LRESULT CALLBACK
WndProcHook
(
HWND hwnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
std
::
cout

Global keyboard hook with WH_KEYBOARD_LL and keybd_event (windows) (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMj I5NzU5MTYvZ2xvYmFsLWtleWJvYXJkLWhvb2std2l0aC13aC1r ZXlib2FyZC1sbC1hbmQta2V5YmQtZXZlbnQtd2luZG93cy8zMz QzODg3Ng)

I am trying to write a simple global keyboard hook program to redirect some keys. For example, when the program is executed, I press 'a' on the keyboard, the program can disable it and simulate a ...

stackoverflow.com

kin4stat
30.06.2020, 03:15
Опять я со своими тупыми вопросами. Можно ли через память сделать гидравлику машине? По идее же игра хранит где-то информацию о наличии гидравлики у машины

Dark_Knight
30.06.2020, 12:07
gtamodding.ru поищи там

kin4stat
30.06.2020, 16:13
gtamodding.ru поищи там


Полностью облазил пункты cVehicle и cAutomobile в адресах памяти, Пробовал через поиск по странице разные упоминания тюнинга/гидравлики. Нашел upgrade[15], но как работает так и не понял. Адреса памяти функций тоже облазил полностью, там такого тоже нет. В клео есть такой опкод, но на радмир клео не совсем нормально работает.

UPD: Порывшись в обычной гта, выяснил, что когда ставишь собейтом гидравлику, в upgrade[0](cVehicle + 0x43A) записывается 1087. Но когда вручную туда записываешь 1087, гидравлика не появляется, а при добавлении ее через собейт, 1087 записывается в следующую ячейку(upgrade[1])

UPD2: В исходниках собейта нашел такую штуку

call FUNC_cVehcile_AddVehicleUpgrade

как я понял эта функция задейфайнена как адрес в памяти. Найти бы теперь его еще :D

UPD3:

Нашел адрес функции, осталось только найти способ выполнять ASM внутри другого процесса.

Dark_Knight
30.06.2020, 17:50
Plugin SDK смотрел? И зачем юзать АСМ, если можно спокойно вызвать функцию и без него.

kin4stat
30.06.2020, 18:42
Plugin SDK смотрел? И зачем юзать АСМ, если можно спокойно вызвать функцию и без него.


Не знал даже о такой штуке лол. Потом гляну.

Насчет вызова. Как можно в External вызвать функцию?

trefa
30.06.2020, 19:10
Как получить угол поворота машины, через квантарион пробывал - не оч.

al3x_
30.06.2020, 22:48
Как сделать аналог 0AF6 опкода?
Данным образом вызывать мне нежелательно - SF->getCLEO()->callOpcode("0AF6: samp spawn_player");


SF->getSAMP()->getPlayers()->pLocalPlayer->Spawn();

Musaigen
01.07.2020, 10:03
Как получить угол поворота машины, через квантарион пробывал - не оч.



C++:






// Вроде так.
void
CPlaceable
::
SetHeading
(
float
fHeading
)
{
reinterpret_cast

(
0x43E0C0
)
(
this
,
fHeading
)
;
}
float
CPlaceable
::
GetHeading
(
)
{
return
reinterpret_cast

(
0x441DB0
)
(
this
)
;
}

_!danek!_
02.07.2020, 23:05
всем привет есть 2 вопроса:
1. как узнать ид/имя текущей анимации (не нашел этого на сайте с адресами)
2. возможно ли как то узнать отключить определенные анимации (к примеру cowboy или DAM_armL_frmFT).


Вроде так можно узнать ид анимации.

C++:






int
animationid
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
sCurrentAnimID
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"AnimationID: %d"
,
animationid
)
;

loganhackerdff
03.07.2020, 23:55
Как "скачать" сайт если он под защитой от ддос( типо подождать 5секунд )

loganhackerdff
04.07.2020, 00:16
Создавать сессию, ждать 5 секунд, переходить с полученным токеном на сайт.


а чо за сессии и токены? это в какой библиотеке?

traceattack
07.07.2020, 10:03
Есть ли у кого адрес указателя на угол трастеров гидры. Ну или название функи в SF, я чет не нашел 😢(Доступа к нормальному компу пока нет, а если на данном ведре запущу CE и запущу скан, хорошо будет если он хотя бы не расплавится)

kin4stat
12.07.2020, 02:41
Назрело у меня пару вопросов

Первое:

Структура SAMP R3 Выглядит следующим образом:




https://forum.antichat.xyz/attachments/27527648/


Каким образом в ulPort попадает порт, у которого оффсет 1388?

Второе:

Как на хукнутом RakClientInterface реализовать перехват входящих RPC как в s0beit'е. Т.е. условно если сервер пытается сетнуть мне хп, у меня в чат вывелось, что сервер мне пытается поставить мне хп. Или например нопить входящие RPC.

Третье:

Почему-то при вызове addChatMessage в основном потоке, работает, а при вызове этой же функции в где-нибудь в другом месте крашит.

Потоки:






void
test
(
char
*
szParams
)
{
pSAMP
->
addMessageToChat
(
0xFFFFFFFF
,
"addMessageToChat causes exception in gta_sa.exe(samp.dll)"
)
;
}
void
mainThread
(
void
*
pvParams
)
{
if
(
pSAMP
)
{
while
(
!
pSAMP
->
tryInit
(
)
)
{
Sleep
(
100
)
;
}
pSAMP
->
addMessageToChat
(
0xFFFFFFFF
,
"addMessageToChatWorks here!"
)
;
pSAMP
->
addClientCommand
(
"test"
,
test
)
;
}
}




addMessageToChat:






void
SAMPFramework
::
addMessageToChat
(
D3DCOLOR cColor
,
const
char
*
szMsg
,
.
.
.
)
{
if
(
g_Chat
==
nullptr
)
return
;
void
(
__thiscall
*
AddToChatWindowBuffer
)
(
const
void
*
_this
,
int
iType
,
char
*
szText
,
char
*
szPrefix
,
DWORD cColor
,
DWORD cPrefixColor
)
=
(
void
(
__thiscall
*
)
(
const
void
*
,
int
,
char
*
,
char
*
,
DWORD
,
DWORD
)
)
(
dwSAMPAddr
+
SAMP_FUNC_ADDTOCHATWND
)
;
if
(
szMsg
==
NULL
)
return
;
va_list ap
;
char
tmp
[
512
]
;
memset
(
tmp
,
0
,
512
)
;
va_start
(
ap
,
szMsg
)
;
vsnprintf
(
tmp
,
sizeof
(
tmp
)
-
1
,
szMsg
,
ap
)
;
va_end
(
ap
)
;
return
AddToChatWindowBuffer
(
(
void
*
)
g_Chat
,
8
,
tmp
,
NULL
,
cColor
,
0x00
)
;
}




Само исключение:


Вызвано исключение по адресу 0x0A279392 (samp.dll) в gta_sa.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000007.


Стек вызовов пустой

loganhackerdff
16.07.2020, 18:16
как создать объект визуальный объект в самп без емуляции RPC

kin4stat
16.07.2020, 18:18
как создать объект визуальный объект в самп без емуляции RPC



SAMP-API/src/0.3.7-R1/CObjectPool.h at master · DarkP1xel/SAMP-API (https://github.com/DarkP1xel/SAMP-API/blob/master/src/0.3.7-R1/CObjectPool.h#L35)

It is a library for interacting with functions, classes and structures of SAMP. - DarkP1xel/SAMP-API

github.com

reseller
16.07.2020, 20:07
в чем трабл а

1594915674293.pngreseller · 16 Июл 2020 в 19:07' data-fancybox="lb-post-530084" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/62635/" style="cursor: pointer;" title="1594915674293.png">
https://forum.antichat.xyz/attachments/27530084/

Dark_Knight
16.07.2020, 20:13
А где трабл и где код?

MaksQ
17.07.2020, 00:38
как взорвать машину в который ты сидишь? только не через SetHealth(0)

imring
17.07.2020, 01:17
как взорвать машину в который ты сидишь? только не через SetHealth(0)


уточнить игру? ну раз уж это форум, где в основном обитают самперы, то: https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CVehicle.h#L360

Musaigen
17.07.2020, 02:24
Назрело у меня пару вопросов
Первое:
Структура SAMP R3 Выглядит следующим образом:




Каким образом в ulPort попадает порт, у которого оффсет 1388?

Второе:
Как на хукнутом RakClientInterface реализовать перехват входящих RPC как в s0beit'е. Т.е. условно если сервер пытается сетнуть мне хп, у меня в чат вывелось, что сервер мне пытается поставить мне хп. Или например нопить входящие RPC.

Третье:
Почему-то при вызове addChatMessage в основном потоке, работает, а при вызове этой же функции в где-нибудь в другом месте крашит.

Потоки:






void
test
(
char
*
szParams
)
{
pSAMP
->
addMessageToChat
(
0xFFFFFFFF
,
"addMessageToChat causes exception in gta_sa.exe(samp.dll)"
)
;
}
void
mainThread
(
void
*
pvParams
)
{
if
(
pSAMP
)
{
while
(
!
pSAMP
->
tryInit
(
)
)
{
Sleep
(
100
)
;
}
pSAMP
->
addMessageToChat
(
0xFFFFFFFF
,
"addMessageToChatWorks here!"
)
;
pSAMP
->
addClientCommand
(
"test"
,
test
)
;
}
}




addMessageToChat:






void
SAMPFramework
::
addMessageToChat
(
D3DCOLOR cColor
,
const
char
*
szMsg
,
.
.
.
)
{
if
(
g_Chat
==
nullptr
)
return
;
void
(
__thiscall
*
AddToChatWindowBuffer
)
(
const
void
*
_this
,
int
iType
,
char
*
szText
,
char
*
szPrefix
,
DWORD cColor
,
DWORD cPrefixColor
)
=
(
void
(
__thiscall
*
)
(
const
void
*
,
int
,
char
*
,
char
*
,
DWORD
,
DWORD
)
)
(
dwSAMPAddr
+
SAMP_FUNC_ADDTOCHATWND
)
;
if
(
szMsg
==
NULL
)
return
;
va_list ap
;
char
tmp
[
512
]
;
memset
(
tmp
,
0
,
512
)
;
va_start
(
ap
,
szMsg
)
;
vsnprintf
(
tmp
,
sizeof
(
tmp
)
-
1
,
szMsg
,
ap
)
;
va_end
(
ap
)
;
return
AddToChatWindowBuffer
(
(
void
*
)
g_Chat
,
8
,
tmp
,
NULL
,
cColor
,
0x00
)
;
}




Само исключение:


Вызвано исключение по адресу 0x0A279392 (samp.dll) в gta_sa.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000007.


Стек вызовов пустой


1. Переведи 1388 в шестнадцатиричную систему.

2. Используй VMT Hook Manager.

3. Попробуй.

C++:






void
/*CChat::AddEntry*/
AddEntry
(
DWORD color
,
const
char
*
text
,
.
.
.
)
{
char
buf
[
128
]
{
0
}
;
va_list args
;
va_start
(
args
,
text
)
;
vsprintf_s
(
buf
,
text
,
args
)
;
va_end
(
args
)
;
// Адреса 100% действительны для 0.3.7-R1
reinterpret_cast

(
/*(DWORD)GetModuleHandle("samp.dll")*/
g_dwSAMPBase
+
0x63850
)
(
g_Chat
,
buf
)
;
reinterpret_cast

(
g_dwSAMPBase
+
0x64010
)
(
g_Chat
,
8
,
buf
,
nullptr
,
color
,
0
)
;
}

kin4stat
17.07.2020, 02:31
1. Переведи 1388 в шестнадцатиричную систему.
2. Используй VMT Hook Manager.
3. Попробуй.

C++:






void
/*CChat::AddEntry*/
AddEntry
(
DWORD color
,
const
char
*
text
,
.
.
.
)
{
char
buf
[
128
]
{
0
}
;
va_list args
;
va_start
(
args
,
text
)
;
vsprintf_s
(
buf
,
text
,
args
)
;
va_end
(
args
)
;
// Адресса 100% действительны для 0.3.7-R1
reinterpret_cast

(
/*(DWORD)GetModuleHandle("samp.dll")*/
g_dwSAMPBase
+
0x63850
)
(
g_Chat
,
buf
)
;
reinterpret_cast

(
g_dwSAMPBase
+
0x64010
)
(
g_Chat
,
8
,
buf
,
nullptr
,
color
,
0
)
;
}





1. разобрался(1388 уже в 16-ричной был)

2. Не понял тебя. У меня есть хукнутый RakClient как в собейте. Меня интересует как в нем ловить входящие RPC.

3. Пофиксил. Взял Функцию из SAMP-API от LUCHARE

Musaigen
17.07.2020, 02:49
1. разобрался(1388 уже в 16-ричной был)
2. Не понял тебя. У меня есть хукнутый RakClient как в собейте. Меня интересует как в нем ловить входящие RPC.
3. Пофиксил. Взял Функцию из SAMP-API от LUCHARE


Хуки. RakClient не передаёт функцию, где принимаются входящие RPC. Хуки в конце файла samp.cpp.

kin4stat
17.07.2020, 02:51
Так, ладно еще один вопрос. Как мне в ImGui вывести название сервера если оно не UTF-8, а хранится оно в char[257]

(в названии есть русские символы. шрифт подгрузил)

Dark_Knight
17.07.2020, 12:55
cp1251 преобразовать в utf8

kin4stat
17.07.2020, 14:06
cp1251 преобразовать в utf8


А как без костылей это можно сделать, и по нормальному? Как я не пытался, не работает

Dark_Knight
17.07.2020, 15:19
В чем, собственно, костыль? Просто имгуи работает только с UTF8 двухбайтовым. Это и есть по нормальному и без костылей.

loganhackerdff
19.07.2020, 11:44
У меня есть список ImGui::CheckBox();

как мне их вывести с два столбика?

Dark_Knight
19.07.2020, 12:06
Colums или sameline с итерацией

Karbun
20.07.2020, 15:17
Забыл функцию парсинга слова из строки типа строка= "Hello World", а мне нужно достать слово World в переменную a. Типа "Hello %s", a;

Подскажите, плизон)

kin4stat
20.07.2020, 15:28
ImGui рисуется под самповским гуи(чат, ники, диалоги и прочее). Видел на форуме, что хуки надо ставить до или после загрузочного экрана. Менял местами, так и не помогло. Как можно решить?(у меня имгуи работает на ендсцене и ресете)

DarkP1xel
20.07.2020, 15:34
(у меня имгуи работает на ендсцене и ресете)


Present

kin4stat
20.07.2020, 15:52
Present


Круто конечно, а что в него пихать? Или просто перенести все из эндсцены в пресент?

loganhackerdff
20.07.2020, 16:39
как получить угол поворота игрока в градусах от 0 до 360 ?

радианы какие то хуёвые в CPed + 0x558

AdCKuY_DpO4uLa
20.07.2020, 17:02
мейби так?


float rot = ((*(float*)(*(DWORD*)0xB6F5F0 + 0x558) * 180 / PI) - -180) / (180 - -180)*(360 - 0) + 0;

Musaigen
20.07.2020, 20:55
как получить угол поворота игрока в градусах от 0 до 360 ?
радианы какие то хуёвые в CPed + 0x558


Вроде оно.

C++:






void
CPlaceable
::
SetHeading
(
float
fHeading
)
{
reinterpret_cast

(
0x43E0C0
)
(
this
,
fHeading
)
;
}
float
CPlaceable
::
GetHeading
(
)
{
return
reinterpret_cast

(
0x441DB0
)
(
this
)
;
}

Karbun
20.07.2020, 21:47
Забыл функцию парсинга слова из строки типа строка= "Hello World", а мне нужно достать слово World в переменную a. Типа "Hello %s", a;

Подскажите, плизон)

traceattack
20.07.2020, 21:58
Забыл функцию парсинга слова из строки типа строка= "Hello World", а мне нужно достать слово World в переменную a. Типа "Hello %s", a;
Подскажите, плизон)



- C++ Reference (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cuY3BsdXNwbHVzLmNvbS9yZWZlcmVuY2Uvcm VnZXgv)

www.cplusplus.com

imring
20.07.2020, 23:51
Вроде оно.

C++:






void
CPlaceable
::
SetHeading
(
float
fHeading
)
{
reinterpret_cast

(
0x43E0C0
)
(
this
,
fHeading
)
;
}
float
CPlaceable
::
GetHeading
(
)
{
return
reinterpret_cast

(
0x441DB0
)
(
this
)
;
}





в CPlaceable в радианах же [-pi;pi]

kin4stat
22.07.2020, 01:30
Ловлю нажатия клавиш через WndProc, когда жмешь F2 открывается моя меню и появляется курсор. Но если до этого например была нажата клавиша бега, то персонаж продолжить бежать при открытии меню, как это пофиксить?

loganhackerdff
22.07.2020, 13:19
как через reinterept_case установить зажатость игровой клавиши (

SF->getGame()->emulateGTAKey()

)

Dark_Knight
22.07.2020, 14:36
Вопрос, а нахера тебе reinterept_case? Просто указываешь ид игровой клавиши.

loganhackerdff
22.07.2020, 14:55
Вопрос, а нахера тебе reinterept_case? Просто указываешь ид игровой клавиши.


мне надо чтоб она была зажата всегда, а когдя я юзаю emulateGTAKey , она нажимается один раз и всё

AnWu
22.07.2020, 15:55
мне надо чтоб она была зажата всегда, а когдя я юзаю emulateGTAKey , она нажимается один раз и всё


отправлять каждый тик

loganhackerdff
23.07.2020, 13:00
можно ли каким-нибудь образом в битстриме перезаписать лишь определенные данные, не создавая новый? Допустим, я хукаю ShowTextDraw и мне нужно перезаписать в нем лишь modelId.


SetWriteOffset() и запись

kin4stat
23.07.2020, 19:03
addBlipForChar(Ped ped) без SAMPFUNCS на С++ можно сделать? Может в samp-api где-то есть такое?

TheBadZero
24.07.2020, 19:53
Какой адрес у античита samp.dll 0.3.7?

kin4stat
24.07.2020, 21:02
Какой адрес у античита samp.dll 0.3.7?


В собейте... https://github.com/BlastHackNet/mod_s0beit_sa-1/blob/master/src/samp.cpp#L941

loganhackerdff
26.07.2020, 11:50
могу ли я в visual studio code как и в Visual Studio писать .SF ?

SR_team
26.07.2020, 12:08
могу ли я в visual studio code как и в Visual Studio писать .SF ?


можешь

manukhov
26.07.2020, 17:08
Как узнать какой стиль борьбы скольки байтам равен?

И чем отличается #1 от #2?


CPed +0x72D = [byte] Стиль борьбы #1

CPed +0x72E = [byte] Стиль борьбы #2

loganhackerdff
26.07.2020, 18:30
можешь


а собирать проект мне прийдётся через visual studio?

SR_team
26.07.2020, 19:42
а собирать проект мне прийдётся через visual studio?


нет. Если для VSCode нет тулзы дергающей msbuild, то сам пропишешь msbuild в PATH и будешь через встроенные кастомные сборки VSCode его дергать, или через встроенную консоль. Кстати кейс с VSCode будет даже лучше чем со студией, потому что студия хоть и поддерживает системы сборки помимо msbuild, но ходить по ссылкам ошибок и фильтровать ошибки она не умеет

checkdasound
26.07.2020, 20:00
Как узнать какой стиль борьбы скольки байтам равен?
И чем отличается #1 от #2?

CPed +0x72D = [byte] Стиль борьбы #1

CPed +0x72E = [byte] Стиль борьбы #2



Наверное, там надо писать 0/1 (off/on). А насчет стилей, скорее всего это как в одиночке, ты приходишь в одну качалку там тебе показывают один стиль, приходишь в другую, там уже кунг фу.

loganhackerdff
26.07.2020, 21:10
Пытаюсь сделать noradio на sf как в cleo

но у меня не всё получается

радио переключается, но при попытке переключить радио назад, оно опять переключается обратно на выкл, но начинает шипеть как



C++:






void
StartRadio
(
unsigned
int
station
)
{
DWORD dwFunc
=
0x4DBEC3
;
DWORD dwFunc2
=
0x4EB3C3
;
_asm
{
// We can't do this anymore as we've returned out StartRadio
/*
push 0
push station
mov ecx, CLASS_CAudioEngine
call dwFunc
*/
// Push our arguments onto the stack
push
0
push station
// Call something, skip 3 bytes that we have our return instruction on (no arguments)
mov ecx
,
0x8AE554
mov eax
,
dword ptr
[
ecx
+
8
]
call dwFunc
// Check the return value, eventually skip
test al
,
al
jne skip

mov eax
,
dword ptr
[
esp
+
4
]
mov ecx
,
dword ptr
[
esp
]
// Push arguments to some other function
push
0
push
0
push eax
push ecx
// Call it (emulate call instruction)
mov ecx
,
8
CB6F8h
push done
push ebx
mov bl
,
byte ptr
[
esp
+
8
]
jmp dwFunc2
// Pop our arguments back
done
:
pop eax
pop eax

skip
:
}
}
void
ResetRadio
(
)
{
DWORD dwFunc
=
0x4E7F80
;
_asm
{
mov ecx
,
0x8CB6F8
call dwFunc
}
}






Это в mainloop() с проверкой на сидение в авто :

C++:






if
(
g_CMenu
.
bNoRadio
&&
*
(
byte
*
)
0x8CB7A5
!=
13
)
{
*
(
byte
*
)
0xBA679A
=
13
;
*
(
byte
*
)
0x8CB7A5
=
13
;
ResetRadio
(
)
;
StartRadio
(
13
)
;
}

AdCKuY_DpO4uLa
26.07.2020, 21:17
*(BYTE*)0x8CB7A5 = (BYTE)0;


попробуй это пихнуть в мейнлуп

loganhackerdff
26.07.2020, 21:22
*(BYTE*)0x8CB7A5 = (BYTE)0;


попробуй это пихнуть в мейнлуп


всё равно шипит, но теперь не показывает название радио (на милисекунды

C++:






ResetRadio
(
)
;
StartRadio
(
13
)
;
*
(
byte
*
)
0xBA679A
=
(
BYTE
)
0
;
*
(
byte
*
)
0x8CB7A5
=
(
BYTE
)
0
;

manukhov
26.07.2020, 21:28
Наверное, там надо писать 0/1 (off/on)


Ну это же не чит из одиночки. Наверно, если бы это было так, там бы было написано, а там не написано.

AdCKuY_DpO4uLa
26.07.2020, 21:39
всё равно шипит, но теперь не показывает название радио (на милисекунды

C++:






ResetRadio
(
)
;
StartRadio
(
13
)
;
*
(
byte
*
)
0xBA679A
=
(
BYTE
)
0
;
*
(
byte
*
)
0x8CB7A5
=
(
BYTE
)
0
;






вкл noradio

C++:






*
(
BYTE
*
)
0x8CB7A5
=
BYTE
(
0
)
;
*
(
BYTE
*
)
0xBA679A
=
BYTE
(
0
)
;
*
(
BYTE
*
)
0xBA6798
=
BYTE
(
0
)
;
*
(
BYTE
*
)
0xBA6799
=
BYTE
(
0
)
;
*
(
BYTE
*
)
0xBA6795
=
BYTE
(
0
)
;




выкл noradio

C++:






*
(
BYTE
*
)
0xBA6798
=
thisVol
;




C++:






static
BYTE thisVol
=
*
(
BYTE
*
)
0xBA6798
;




это перед тем, как выполнить код "вкл noradio"

в thisVol будет текущая настройка громкости радио

checkdasound
26.07.2020, 22:04
Ну это же не чит из одиночки. Наверно, если бы это было так, там бы было написано, а там не написано.


Я не про чит, я про то, что в одиночке есть стили боя.



Менять можно сразу, посмотри здесь


?

manukhov
26.07.2020, 22:11
Я не про чит, я про то, что в одиночке есть стили боя.


)))) Я знаю.



?


Я прикрепил чит, где можно выбрать стиль боя. Мне показалось что ты не веришь, что их можно менять

kin4stat
27.07.2020, 03:12
Как сделать починку визуала у машины?

loganhackerdff
27.07.2020, 13:58
Как сделать починку визуала у машины?



C++:






CVehicle
*
veh
=
PEDSELF
->
GetVehicle
(
)
;
float
fHealth
=
veh
->
GetHealth
(
)
;
veh
->
Fix
(
)
;
veh
->
SetHealth
(
fHealth
)
;

kin4stat
27.07.2020, 14:04
C++:






CVehicle
*
veh
=
PEDSELF
->
GetVehicle
(
)
;
float
fHealth
=
veh
->
GetHealth
(
)
;
veh
->
Fix
(
)
;
veh
->
SetHealth
(
fHealth
)
;





Круто, а без зависимостей от всего подряд?

и еще вопрос. Взял коллизию у фипа, она как ни странно работает. Но как можно сделать так, чтобы объекты с типом 36(объекты сервера) не рендерились?

loganhackerdff
27.07.2020, 14:27
@FYP (https://www.blast.hk/members/2/) почему в SFAPI в SAMPFUNCS SDK в структуре stInputInfo pDXUTEditBox это какая то шняга, я заменил в SFSAMP.h эту шнянгу на stInputBox из собеита, и работает

C++:






struct
stInputBox
{
void
*
pUnknown
;
uint8_t
bIsChatboxOpen
;
uint8_t
bIsMouseInChatbox
;
uint8_t
bMouseClick_related
;
uint8_t
unk
;
DWORD dwPosChatInput
[
2
]
;
// пока что проверил только это
uint8_t
unk2
[
263
]
;
int
iCursorPosition
;
uint8_t
unk3
;
int
iMarkedText_startPos
;
// Highlighted text between this and iCursorPosition
uint8_t
unk4
[
20
]
;
int
iMouseLeftButton
;
}
;
[
/
code
]

Cake_
27.07.2020, 14:46
@FYP (https://www.blast.hk/members/2/) почему в SFAPI в SAMPFUNCS SDK в структуре stInputInfo pDXUTEditBox это какая то шняга, я заменил в SFSAMP.h эту шнянгу на stInputBox из собеита, и работает

C++:






struct
stInputBox
{
void
*
pUnknown
;
uint8_t
bIsChatboxOpen
;
uint8_t
bIsMouseInChatbox
;
uint8_t
bMouseClick_related
;
uint8_t
unk
;
DWORD dwPosChatInput
[
2
]
;
// пока что проверил только это
uint8_t
unk2
[
263
]
;
int
iCursorPosition
;
uint8_t
unk3
;
int
iMarkedText_startPos
;
// Highlighted text between this and iCursorPosition
uint8_t
unk4
[
20
]
;
int
iMouseLeftButton
;
}
;
[
/
code
]





сфапи писал urshadow, он уже вроде и не обновляется

loganhackerdff
27.07.2020, 15:40
сфапи писал urshadow, он уже вроде и не обновляется


тогда сори FYP зря быканул, а собеит кто писал7

надо сделать свой SFAPI

MISTER_GONWIK
27.07.2020, 15:44
@FYP (https://www.blast.hk/members/2/) почему в SFAPI в SAMPFUNCS SDK в структуре stInputInfo pDXUTEditBox это какая то шняга, я заменил в SFSAMP.h эту шнянгу на stInputBox из собеита, и работает

C++:






struct
stInputBox
{
void
*
pUnknown
;
uint8_t
bIsChatboxOpen
;
uint8_t
bIsMouseInChatbox
;
uint8_t
bMouseClick_related
;
uint8_t
unk
;
DWORD dwPosChatInput
[
2
]
;
// пока что проверил только это
uint8_t
unk2
[
263
]
;
int
iCursorPosition
;
uint8_t
unk3
;
int
iMarkedText_startPos
;
// Highlighted text between this and iCursorPosition
uint8_t
unk4
[
20
]
;
int
iMouseLeftButton
;
}
;
[
/
code
]





это не шняга, а там на самом деле class CDXUTEditBox, со всякими разными функциями и данными, просто в сф апи нет определения этого класса.

Dark_Knight
27.07.2020, 16:55
@FYP (https://www.blast.hk/members/2/) почему в SFAPI в SAMPFUNCS SDK в структуре stInputInfo pDXUTEditBox это какая то шняга, я заменил в SFSAMP.h эту шнянгу на stInputBox из собеита, и работает


C этого момента поподробней, "шняга"

loganhackerdff
27.07.2020, 17:59
C этого момента поподробней, "шняга"


там был class _CDXUTEditBox , а надо чтоб была структура stInputBox как в собе

Dark_Knight
27.07.2020, 18:20
В смысле надо? Тебе вон уже МГ всё ответил.

kin4stat
27.07.2020, 19:01
Ни у кого нету патча самповского AC на R3?

loganhackerdff
27.07.2020, 19:43
нет. Если для VSCode нет тулзы дергающей msbuild, то сам пропишешь msbuild в PATH и будешь через встроенные кастомные сборки VSCode его дергать, или через встроенную консоль. Кстати кейс с VSCode будет даже лучше чем со студией, потому что студия хоть и поддерживает системы сборки помимо msbuild, но ходить по ссылкам ошибок и фильтровать ошибки она не умеет


я скачал msbuild-tools для vs code, прописал в инклуды путь к directx sdk, но не копилится и пишет всякие ошибки


https://forum.antichat.xyz/attachments/27535735/




В смысле надо? Тебе вон уже МГ всё ответил.


я понял

Upd: когда я искал определение этого класса в google, ничего не нашёл

SR_team
27.07.2020, 22:00
но не копилится и пишет всякие ошибки


не всякие, а вполне конкретные. Покажи инклюды

loganhackerdff
28.07.2020, 00:18
не всякие, а вполне конкретные. Покажи инклюды


Сори что так долго




https://forum.antichat.xyz/attachments/27535852/

https://forum.antichat.xyz/attachments/27535852/

https://forum.antichat.xyz/attachments/27535852/

SR_team
29.07.2020, 14:06
Сори что так долго


ничего страшного, то ведь все равно не прислал того, что я просил

loganhackerdff
29.07.2020, 14:54
ничего страшного, то ведь все равно не прислал того, что я просил


я нашёл проблему, SAMPFUNCS_API был не определён, я его прописал как __declspec(dllimport) и ошибки пропали

но msbuild-tools не компилит и выдаёт ошибку

CLEO:






[msbuild-tools]: Running: D:/Microsoft Visual Studio/
2019
/Community/MSBuild/Current/Bin/MSBuild.exe d:\1A ALL\MY CUSTOM SF templater/SFPlugin.sln /m /nologo /verbosity
:minimal
/p
:Configuration
=Debug
d:\1A ALL\MY CUSTOM SF templater\SFPlugin.sln.metaproj : error MSB
4126:
The specified solution configuration
"Debug|Win32"
is invalid. Please specify a valid solution configuration using the Configuration
and
Platform properties (e.g. MSBuild.exe Solution.sln /p
:Configuration
=Debug /p
:Platform
=
"Any CPU"
)
or
leave those properties blank
to
use the default solution configuration. [d:\1A ALL\MY CUSTOM SF templater\SFPlugin.sln]
[msbuild-tools]: exited with
return
code:
1
.

Josh_Manki
30.07.2020, 00:04
При попытке открыть файл sln выходит вот такая ошибка

loganhackerdff
30.07.2020, 00:54
Как узнать что автомобиль находится в воздухе используя СФ API через cped + какой-то оффсет 0 в воздухе / в воде не работает

kin4stat
30.07.2020, 01:25
Как узнать что автомобиль находится в воздухе используя СФ API через cped + какой-то оффсет 0 в воздухе / в воде не работает


конкретно узнать что в воздухе - скорее всего никак. Можно через костыли с колесами.

Game api->CAutomobile

0x0961 | BYTE allWheelsOnGround

Можешь найти эту строку в Адресах sa

loganhackerdff
30.07.2020, 01:45
конкретно узнать что в воздухе - скорее всего никак. Можно через костыли с колесами.

Game api->CAutomobile
0x0961 | BYTE allWheelsOnGround

Можешь найти эту строку в Адресах sa


Дай пж сайт с адресами, на моем такого нет

kin4stat
30.07.2020, 02:33
Дай пж сайт с адресами, на моем такого нет



Адреса Памяти (SA) — GTAModding.ru (https://www.blast.hk/redirect/aHR0cDovL2d0YW1vZGRpbmcucnUvd2lraS8lRDAlOTAlRDAlQj QlRDElODAlRDAlQjUlRDElODElRDAlQjBfJUQwJTlGJUQwJUIw JUQwJUJDJUQxJThGJUQxJTgyJUQwJUI4XyhTQSk)

gtamodding.ru

Musaigen
30.07.2020, 04:17
Дай пж сайт с адресами, на моем такого нет


Получить Z координату объекта, получить Z координату земли, сравнить.

C++:






// Какой метод - хз
float
fGroundZ
=
reinterpret_cast

(
0x569660
)
(
x
,
y
)
;
// Или этот
bool
out
;
float
fGroundZ
=
reinterpret_cast

(
0x569750
)
(
x
,
y
,
z
,
&
out
)
;

SR_team
30.07.2020, 04:22
Получить Z координату объекта, получить Z координату земли, сравнить.

C++:






// Какой метод - хз
float
fGroundZ
=
reinterpret_cast

(
0x569660
)
(
x
,
y
)
;
// Или этот
bool
out
;
float
fGroundZ
=
reinterpret_cast

(
0x569750
)
(
x
,
y
,
z
,
&
out
)
;





только не out, а find, оно true если земля есть и false, если нет

P.S. и второй метод long double кажется возвращал

Musaigen
30.07.2020, 04:24
только не out, а find, оно true если земля есть и false, если нет

P.S. и второй метод long double кажется возвращал



plugin-sdk/plugin_sa/game_sa/CWorld.cpp at b38ab7b07f74ac86f4283095f0386617d12fba73 · DK22Pac/plugin-sdk (https://github.com/DK22Pac/plugin-sdk/blob/b38ab7b07f74ac86f4283095f0386617d12fba73/plugin_sa/game_sa/CWorld.cpp#L395)

An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk

github.com

kin4stat
30.07.2020, 04:26
Получить Z координату объекта, получить Z координату земли, сравнить.

C++:






// Какой метод - хз
float
fGroundZ
=
reinterpret_cast

(
0x569660
)
(
x
,
y
)
;
// Или этот
bool
out
;
float
fGroundZ
=
reinterpret_cast

(
0x569750
)
(
x
,
y
,
z
,
&
out
)
;





Такие приколы наверное с CRMP работать не будут?

Musaigen
30.07.2020, 04:27
Такие приколы наверное с CRMP работать не будут?


Почему? CRMP тоже самое, что и SA:MP.

kin4stat
30.07.2020, 04:59
Почему? CRMP тоже самое, что и SA:MP.


Там карта же своя. Или этот метод все равно будет работать?

Musaigen
30.07.2020, 05:03
Там карта же своя. Или этот метод все равно будет работать?


Кек. Карта то своя, но exe-шник и адреса одни и те же.

kin4stat
30.07.2020, 05:05
Кек. Карта то своя, но exe-шник и адреса одни и те же.


Адреса то черт с ним. Оно же может быть там по херовому сделано, я это имел ввиду.

loganhackerdff
30.07.2020, 13:13
нашёл функцию из sobeit, но что ей запихнуть в dwThis я не знаю(

C++:






bool
CAutomobileSA
::
IsInAir
(
void
)
{
DEBUG_TRACE
(
"bool CAutomobileSA::IsInAir ( void )"
)
;
DWORD dwThis
=
(
DWORD
)
GetInterface
(
)
;
DWORD dwFunc
=
0x6A6140
;
bool
bReturn
;
_asm
{
mov ecx
,
dwThis
call dwFunc
mov bReturn
,
al
}
return
bReturn
;
}




@SR_team (https://www.blast.hk/members/11231/) , ты же мастер по sobeit, подскажи пж что ей скормить

Const
30.07.2020, 13:14
нашёл функцию из sobeit, но что ей запихнуть в dwThis я не знаю(

C++:






bool
CAutomobileSA
::
IsInAir
(
void
)
{
DEBUG_TRACE
(
"bool CAutomobileSA::IsInAir ( void )"
)
;
DWORD dwThis
=
(
DWORD
)
GetInterface
(
)
;
DWORD dwFunc
=
0x6A6140
;
bool
bReturn
;
_asm
{
mov ecx
,
dwThis
call dwFunc
mov bReturn
,
al
}
return
bReturn
;
}




@SR_team (https://www.blast.hk/members/11231/) , ты же мастер по sobeit, подскажи пж что ей скормить


Указатель на интерфейс CAutomobile.

loganhackerdff
30.07.2020, 13:16
Указатель на интерфейс CAutomobile.


ну я это понимаю, но я не шарю где его взять

1596100588724.pngloganhackerdff · 30 Июл 2020 в 12:16' data-fancybox="lb-post-537136" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/63834/" style="cursor: pointer;" title="1596100588724.png">
https://forum.antichat.xyz/attachments/27537136/

Const
30.07.2020, 13:32
ну я это понимаю, но я не шарю где его взять



C++:






CCallHook
*
pProcessControlHook
;
// https://gitlab.com/prime-hack/samp/plugins/templates/AsiBase/-/blob/master/llmo/ccallhook.h
void
*
pAutomobileInterface
;
inline
bool
CAutomobile__IsInAir
(
void
*
pThis
)
{
return
reinterpret_cast

(
0x6A6140
)
(
pThis
)
;
}
void
CAutomobile__ProcessControl
(
)
{
pAutomobileInterface
=
reinterpret_cast

(
pProcessControlHook
->
reg86
(
r86
::
ECX
)
)
;
bool
fResult
=
CAutomobile__IsInAir
(
pAutomobileInterface
)
;
}
// SF: mainloop->!initialized
pProcessControlHook
=
new
CCallHook
(
reinterpret_cast

(
0x006B196D
)
)
;
pProcessControlHook
->
enable
(
CAutomobile__ProcessControl
)
;
// DLL_PROCESS_DETACH / ~YourClass()
delete
pProcessControlHook
;

DarkP1xel
30.07.2020, 14:07
ну я это понимаю, но я не шарю где его взять


CVehicle если знаешь как получить, то можешь просто его скастить до CAutomobile.

loganhackerdff
30.07.2020, 14:11
CVehicle если знаешь как получить, то можешь просто его скастить до CAutomobile.


reinterept_cast`ом его прочитать как CAutomobile? .... в sfapi половины классов не определено, приходится самому их искать в других апи и вписывать, особенно это заметно в когда ты глубоко руки в говно засунул

kin4stat
30.07.2020, 14:36
reinterept_cast`ом его прочитать как CAutomobile? .... в sfapi половины классов не определено, приходится самому их искать в других апи и вписывать, особенно это заметно в когда ты глубоко руки в говно засунул


Тебе вместо this нужно передать указатель на CAutomobile, но так как он наследуется от других классов, ты можешь туда передать указатель на CVehicle, CEntity, CPhysical, CPlaceable.

а вообще, чисто теоретически,можно даже void туда передать

loganhackerdff
30.07.2020, 14:46
простите что гнал на SF, не разобрался, функция оказывается работает только на автомобилях, на мотоциклах нет

DarkP1xel
30.07.2020, 22:09
Тебе вместо this нужно передать указатель на CAutomobile, но так как он наследуется от других классов, ты можешь туда передать указатель на CVehicle, CEntity, CPhysical, CPlaceable.
а вообще, чисто теоретически,можно даже void туда передать


Конкретно в эту функцию нужно отправлять только указатель на CAutomobile.

Const
30.07.2020, 22:12
Конкретно в эту функцию нужно отправлять только указатель на CAutomobile.


Чем отличается CVehicle от CAutomobile? Не интересовался данной темой. Наверное CAutomobile это основной класс, а CVehicle и прочие - наследники.

DarkP1xel
30.07.2020, 22:14
Наверное CAutomobile это основной класс, а CVehicle и прочие - наследники.


В CAutomobile на нулевом оффсете идет CVehicle. Заметь, что CBike, CHeli и т.д. это разные классы и находясь в разном транспорте надо вызывать правильные функции для каждого типа транспорта.

Const
30.07.2020, 22:19
В CAutomobile на нулевом оффсете идет CVehicle. Заметь, что CBike, CHeli и т.д. это разные классы и находясь в разном транспорте надо вызывать правильные функции для каждого типа транспорта.


Если CBike будет наследовать CAutomobile, 0x0-0xN (произвольно), будет схож с CAutomobile. А вот то, что выходит за 0xN, будет совместимо конкретно с CBike, а не с CAutomobile.

DarkP1xel
30.07.2020, 22:21
Если CBike будет наследовать CAutomobile, 0x0-0xN (произвольно), будет схож с CAutomobile. А вот то, что выходит за 0xN, будет совместимо конкретно с CBike, а не с CAutomobile.


Так то да, но вот например CHeli наследует весь CAutomobile в то время как CBike только лишь от CVehicle.

Const
30.07.2020, 22:23
Так то да, но вот например CHeli наследует весь CAutomobile в то время как CBike только лишь от CVehicle.


Тот случай, когда сын превзошел отца.

DarkP1xel
30.07.2020, 22:26
Тот случай, когда сын превзошел отца.


У CBike есть CBMX 😁

Const
30.07.2020, 22:29
У CBike есть CBMX 😁


А про деда CPlaceable все забыли...

manukhov
31.07.2020, 18:01
Добрый вечер, вот что из этого всего реально отвечает за смену навыков владения оружием?

1. CPed +0x72C = [byte] Навык владения оружием (0-4)

2. 0xC8AAB8 - Начало блока, куда считывается информация об оружии с меткой J (оружие ближнего боя) и $ (остальное оружие). В этом блоке 0x50 элементов по 0x70 байт в каждом. Индекс элемента высчитывается по формуле: + . Смещение определяется навыком оружия skilllevel: STD - 0, POOR - 25, PRO - 36, особое (характеристики пистолета копов) - 47. Все имена взяты из заголовка оригинального weapon.dat.

3.


+0x30 = [dword] Владение оружием
0 - POOR //Наихудшее

1 - STD //Среднее

2 - PRO //Наилучшее

3 - особое


+0x34 = [dword] statrequired. Уровень статистики, необходимый для получения текущего навыка владения оружи

kin4stat
31.07.2020, 18:13
Добрый вечер, вот что из этого всего реально отвечает за смену навыков владения оружием?

1. CPed +0x72C = [byte] Навык владения оружием (0-4)

2. 0xC8AAB8 - Начало блока, куда считывается информация об оружии с меткой J (оружие ближнего боя) и $ (остальное оружие). В этом блоке 0x50 элементов по 0x70 байт в каждом. Индекс элемента высчитывается по формуле: + . Смещение определяется навыком оружия skilllevel: STD - 0, POOR - 25, PRO - 36, особое (характеристики пистолета копов) - 47. Все имена взяты из заголовка оригинального weapon.dat.

3.

+0x30 = [dword] Владение оружием
0 - POOR //Наихудшее

1 - STD //Среднее

2 - PRO //Наилучшее

3 - особое


+0x34 = [dword] statrequired. Уровень статистики, необходимый для получения текущего навыка владения оружи



В спойлере скилл локального игрока в процентах. Может быть можно обратным способом записать туда значение. https://www.blast.hk/threads/10970/post-98968

manukhov
31.07.2020, 20:29
В спойлере скилл локального игрока в процентах. Может быть можно обратным способом записать туда значение. https://www.blast.hk/threads/10970/post-98968


Ну так там считывают, а изменять то как? Что записать? ID оружия + 0x36?

kin4stat
31.07.2020, 20:53
Ну так там считывают, а изменять то как? Что записать? ID оружия + 0x36?


Таким же образом, только тебе ReadProcessMemory надо на WriteProcessMemory сменить

loganhackerdff
31.07.2020, 21:13
Ну так там считывают, а изменять то как? Что записать? ID оружия + 0x36?


в dwAddr просто перед адресом добавь (DWORD*)

C++:






template

void
WriteMem
(
DWORD
*
dwAddr
,
size_t size
,
T value
)
{
DWORD NewProtection
;
VirtualProtect
(
dwAddr
,
size
,
PAGE_EXECUTE_READWRITE
,
&
NewProtection
)
;
*
reinterpret_cast

(
dwAddr
)
=
value
;
VirtualProtect
(
dwAddr
,
size
,
NewProtection
,
&
NewProtection
)
;
}

kin4stat
31.07.2020, 21:50
в dwAddr просто перед адресом добавь (DWORD*)

C++:






template

void
WriteMem
(
DWORD
*
dwAddr
,
size_t size
,
T value
)
{
DWORD NewProtection
;
VirtualProtect
(
dwAddr
,
size
,
PAGE_EXECUTE_READWRITE
,
&
NewProtection
)
;
*
reinterpret_cast

(
dwAddr
)
=
value
;
VirtualProtect
(
dwAddr
,
size
,
NewProtection
,
&
NewProtection
)
;
}





Он экстреналы делает

manukhov
31.07.2020, 22:24
в dwAddr просто перед адресом добавь (DWORD*)

C++:






template

void
WriteMem
(
DWORD
*
dwAddr
,
size_t size
,
T value
)
{
DWORD NewProtection
;
VirtualProtect
(
dwAddr
,
size
,
PAGE_EXECUTE_READWRITE
,
&
NewProtection
)
;
*
reinterpret_cast

(
dwAddr
)
=
value
;
VirtualProtect
(
dwAddr
,
size
,
NewProtection
,
&
NewProtection
)
;
}





ты точно этот код прикрепить хотел? Wpm для примера вполне хватит

manukhov
02.08.2020, 18:28
Он экстреналы делает


Да без разницы в принципе, главное чтобы без SF)

kin4stat
02.08.2020, 18:29
Да без разницы в принципе, главное чтобы без SF)


Меня тоже бесит когда везде все через SF делается

Musaigen
02.08.2020, 19:00
Добрый вечер, вот что из этого всего реально отвечает за смену навыков владения оружием?

1. CPed +0x72C = [byte] Навык владения оружием (0-4)

2. 0xC8AAB8 - Начало блока, куда считывается информация об оружии с меткой J (оружие ближнего боя) и $ (остальное оружие). В этом блоке 0x50 элементов по 0x70 байт в каждом. Индекс элемента высчитывается по формуле: + . Смещение определяется навыком оружия skilllevel: STD - 0, POOR - 25, PRO - 36, особое (характеристики пистолета копов) - 47. Все имена взяты из заголовка оригинального weapon.dat.

3.

+0x30 = [dword] Владение оружием
0 - POOR //Наихудшее

1 - STD //Среднее

2 - PRO //Наилучшее

3 - особое


+0x34 = [dword] statrequired. Уровень статистики, необходимый для получения текущего навыка владения оружи




C++:






// Для internal'a
// weaponType - ID оружия.
// cSkill - сам скилл.
void
CPed
::
SetWeaponSkill
(
eWeaponType weaponType
,
char
cSkill
)
{
// Вместо eWeaponType можно и int
reinterpret_cast

(
0x5E3C10
)
(
this
,
weaponType
,
cSkill
)
;
}




this можно заменить

*reinterpret_cast(0xB6F5F0)


Ну и понятное дело вместо CPed* поставить void*

loganhackerdff
02.08.2020, 19:13
C++:






// Для internal'a
// weaponType - ID оружия.
// cSkill - сам скилл.
void
CPed
::
SetWeaponSkill
(
eWeaponType weaponType
,
char
cSkill
)
{
// Вместо eWeaponType можно и int
reinterpret_cast

(
0x5E3C10
,
this
,
weaponType
,
cSkill
)
;
}




this можно заменить

reinterpret_cast(0xB6F5F0)


Ну и понятное дело вместо CPed* поставить void*


а почему инменно reinterept_cast а не static_cast и не простое разименование указателя?

kin4stat
02.08.2020, 19:17
а почему инменно reinterept_cast а не static_cast и не простое разименование указателя?


Потому что reinterpret_cast буквально говорит: Видишь тут хранится float? Вот, считай что теперь это int

А static_cast пытается сохранить значение. Т.е. float 4.0f превратится в int 4, а не в миллион

И получается тебе надо взять тот же указатель, но чтобы процессор расценивал его как void*, Поэтому реинтерпрет каст

Тут более подробно распишу для тех кому интересно:

4 типа int хранится в памяти как 0x00000004, а 4 типа float хранится как 0x00008040

Если сделать reinterpret_cast 4 типа float к int, то получим 1082130432, а не как мы ожидали 4.

Static cast же сделает из 0x00008040 0x00000004

Да, я знаю что нельзя кастовать float к int, просто мне было удобно это для примера :D(Ограничение можно обойти через memcpy)

Const
02.08.2020, 19:36
reinterpret_cast(0xB6F5F0)


Нет. *reinterpret_cast(0xB6F5F0). В данном случае ты сделал абсолютно бессмысленное кастование, одно и то же, что reinterpret_cast(0xB6F5F0)

Musaigen
02.08.2020, 21:36
Нет. *reinterpret_cast(0xB6F5F0). В данном случае ты сделал абсолютно бессмысленное кастование, одно и то же, что reinterpret_cast(0xB6F5F0)


Я знаю что нужно именно так кастовать, только у @T4yz1e (https://www.blast.hk/members/197982/) может не быть класса CPed, я и показал как нужно кастовать в этом случае.

Конечно можно ещё сделать класс пустышку, но зачем?

Const
02.08.2020, 21:49
Я знаю что нужно именно так кастовать, только у @T4yz1e (https://www.blast.hk/members/197982/) может не быть класса CPed, я и показал как нужно кастовать в этом случае.
Конечно можно ещё сделать класс пустышку, но зачем?


Ты даже в том случае написал неправильно, если использовать с void, правильно будет *reinterpret_cast(), а если написать class CPed не нужно объявлять класс-пустышку.

bab0n
02.08.2020, 23:25
3 вопроса:

1] Есть ли функция на то, имеет ли игрок у себя оружие под определённым id? lua:

hasCharGotWeapon(Ped ped, int weapon)

2] Можно ли как то делать изменение активации считывая нажатия с клавиатуры? Тип не так что id клавишы вводиться или её имя, а ты начал кнопку X, программа зарегала её id

3] Есть альтернатива на взятие ствола в руку? lua:

setCurrentCharWeapon(playerPed, id)

SR_team
02.08.2020, 23:40
3 вопроса:
1] Есть ли функция на то, имеет ли игрок у себя оружие под определённым id? lua:
hasCharGotWeapon(Ped ped, int weapon)
2] Можно ли как то делать изменение активации считывая нажатия с клавиатуры? Тип не так что id клавишы вводиться или её имя, а ты начал кнопку X, программа зарегала её id
3] Есть альтернатива на взятие ствола в руку? lua:
setCurrentCharWeapon(playerPed, id)


1. есть

2. можно

3. есть

Const
02.08.2020, 23:46
3 вопроса:
1] Есть ли функция на то, имеет ли игрок у себя оружие под определённым id? lua:
hasCharGotWeapon(Ped ped, int weapon)
2] Можно ли как то делать изменение активации считывая нажатия с клавиатуры? Тип не так что id клавишы вводиться или её имя, а ты начал кнопку X, программа зарегала её id
3] Есть альтернатива на взятие ствола в руку? lua:
setCurrentCharWeapon(playerPed, id)


1.

C++:






__int32
getCurrentWeapon
(
)
{
return
*
reinterpret_cast

(
0x00BAA410
)
;
}




2. самый простой вариант, на скорую руку:

C++:






#include
#include
uint32_t
cheat_key
=
0
;
void
new_key
(
uint32_t
&
cheat_key
)
{
std
::
vector

virtual_keys
=
{
VK_INSERT
,
VK_DELETE
,
VK_HOME
,
// добавляешь сюда все айдишники клавиш, из которых будет осуществляться выбор
}
;
while
(
true
)
{
for
(
auto
key
:
virtual_keys
)
{
if
(
GetAsyncKeyState
(
key
)
)
{
cheat_key
=
key
;
return
;
}
}
}
}
std
::
thread
thr
(
[
&
]
(
)
{
new_key
(
cheat_key
)
;
}
)
;
thr
.
detach
(
)
;

loganhackerdff
02.08.2020, 23:50
1.

C++:






__int32
getCurrentWeapon
(
)
{
return
*
reinterpret_cast

(
0x00BAA410
)
;
}




2. самый простой вариант, на скорую руку:

C++:






#include
#include
uint32_t
cheat_key
=
0
;
void
new_key
(
uint32_t
&
cheat_key
)
{
std
::
vector

virtual_keys
=
{
VK_INSERT
,
VK_DELETE
,
VK_HOME
,
// добавляешь сюда все айдишники клавиш, из которых будет осуществляться выбор
}
;
while
(
true
)
{
for
(
auto
key
:
virtual_keys
)
{
if
(
GetAsyncKeyState
(
key
)
)
{
cheat_key
=
key
;
return
;
}
}
}
}
std
::
thread
thr
(
[
&
]
(
)
{
new_key
(
cheat_key
)
;
}
)
;
thr
.
detach
(
)
;






C++:





[CODE]
bool
KeyButton
(
uint16_t
&
key
,
char
cSpliter
)
{
char
szKey
[
32
]
;
if
(
key
!=
0
)
{
GetKeyNameTextA
(
(
MapVirtualKeyA
(
key
,
MAPVK_VK_TO_VSC
)

MISTER_GONWIK
02.08.2020, 23:59
@Const (https://www.blast.hk/members/249805/) , @loganhackerdff (https://www.blast.hk/members/143988/) wndproc для кого существует

Const
03.08.2020, 12:24
@Const (https://www.blast.hk/members/249805/) , @loganhackerdff (https://www.blast.hk/members/143988/) wndproc для кого существует


Написал же - на скорую руку.

loganhackerdff
03.08.2020, 20:40
Почему когда я использую метод push_back у класса vector который состоит из class ChatBuble игра крашит? тоже самое и с указателями на класс

C++:






class
ChatBubble
{
public
:
UINT16 PlayerID
=
0
;
UINT32 color
=
0
;
UINT32 expiretime
=
0
;
float
drawDistance
=
0.f
;
string message
=
0
;
ChatBubble
(
)
{
}
~
ChatBubble
(
)
{
}
void
InIt
(
UINT16 PlayerIDC
,
UINT32 colorC
,
UINT32 expiretimeC
,
float
drawDistanceC
,
string messageC
)
{
PlayerID
=
PlayerIDC
;
color
=
colorC
;
expiretime
=
expiretimeC
;
drawDistance
=
drawDistanceC
;
message
=
messageC
;
}
}
;

Dark_Knight
03.08.2020, 20:58
Что-то криво передаешь. Инфа сотка.

loganhackerdff
03.08.2020, 21:34
https://forum.antichat.xyz/attachments/27539946/

Попробовал с структурой и в консольном приложении, тоже что-то не так

вроде нащёл проблему

imring
03.08.2020, 22:10
Попробовал с структурой и в консольном приложении, тоже что-то не так
вроде нащёл проблему


std::string message = 0?

bab0n
04.08.2020, 04:33
Можете описать пару способов экспорта и импорта значений переменных?

Вот подобный код на LUA:




Lua:






local
defaults
=
{
sets
=
{
arg1
=
113
,
arg2
=
1
,
arg3
=
50
,
notification
=
true
}
}
local
ini
=
inicfg
.
load
(
defaults
,
'Kavo.ini'
)
local
sets
=
ini
.
sets
function
arg3
(
arg
)
if
type
(
tonumber
(
arg
)
)
==
'number'
then
sets
.
arg3
=
arg
inicfg
.
save
(
ini
,
'Kavo.ini'
)
printString
(
'~y~ updated'
,
1000
)
addOneOffSound
(
0
,
0
,
0
,
1150
)
else
printString
(
'~r~ error'
,
1000
)
addOneOffSound
(
0
,
0
,
0
,
1055
)
end
end
-- пример использования
if
wasKeyPressed
(
sets
.
arg1
)
then
work
=
not
work
if
work
then
printString
(
'~p~ON'
,
1000
)
else
printString
(
'OFF'
,
1000
)
end
end







Я не настаиваю на текстовике, может есть какие то ещё варианты? Реестр может, или какие-то ещё файлы/директории

Dark_Knight
04.08.2020, 10:29
Попробовал с структурой и в консольном приложении, тоже что-то не так
вроде нащёл проблему


По дефолту, все контейнеры пустые. Обнуление делать при иницилизации не нужно.

loganhackerdff
04.08.2020, 11:54
По дефолту, все контейнеры пустые. Обнуление делать при иницилизации не нужно.


у меня присутствуют глобальные переменные , они там нарушают инкапсуляцию и крч в переменных мусор при объявлении появляется

Dark_Knight
04.08.2020, 13:45
Избавляйся от них тогда. Лично, глобальные крайне редко юзаю.

loganhackerdff
04.08.2020, 14:26
Избавляйся от них тогда. Лично, глобальные крайне редко юзаю.


у меня все переменные которые я хочу использовать как глобальные в классе globalvars, и этот класс глобальный))

Dark_Knight
04.08.2020, 16:56
Отказывайся от них лучше. Сделай себе нормальный класс или пространство имен и работай спокойно

loganhackerdff
04.08.2020, 17:03
Отказывайся от них лучше. Сделай себе нормальный класс или пространство имен и работай спокойно


смысле пространство имён?

kin4stat
04.08.2020, 17:05
смысле пространство имён?



C++:






namespace
yourNameSpace
{
Something
}
//usage:
yourNameSpace
::
Something

loganhackerdff
04.08.2020, 17:11
а зачем

kin4stat
04.08.2020, 17:12
Как сделать нормальный ноп для RPC? В плане как хранить данные о RPC? В собейте я нихера не понял :D. Я понимаю что нужна структурка RPC, в которой будет ее статус и прочие свойства, но как хранить эти структуры удобно и т.д.?

loganhackerdff
04.08.2020, 17:38
Как сделать нормальный ноп для RPC? В плане как хранить данные о RPC? В собейте я нихера не понял :D. Я понимаю что нужна структурка RPC, в которой будет ее статус и прочие свойства, но как хранить эти структуры удобно и т.д.?

kin4stat
04.08.2020, 17:42
Да не, не то. Мне надо в функции приема RPC, проверять, включено ли оно. Примерно продумал такой ход: Массив, в нем индекс = ID RPC. массив типа struct RPC, в котором два поля: std::string name и bool enabled. Мне теперь надо придумать как это заполнять

loganhackerdff
04.08.2020, 23:53
как через WndProc получить нажатие кнопок на мышке (а именно Средней, X1 и X2)

DarkP1xel
04.08.2020, 23:55
как через WndProc получить нажатие кнопок на мышке (а именно Средней, X1 и X2)



Сведения о сообщениях и очередях сообщений - Win32 apps (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcnUtcnUvd2luZG 93cy93aW4zMi93aW5tc2cvYWJvdXQtbWVzc2FnZXMtYW5kLW1l c3NhZ2UtcXVldWVz)

В этом разделе рассматриваются сообщения Windows и очереди сообщений.

docs.microsoft.com


Mouse Input Notifications - Win32 apps (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy93aW4zMi9pbnB1dGRldi9tb3VzZS1pbnB1dC1ub3RpZmlj YXRpb25z)

Mouse Input Notifications

docs.microsoft.com

manukhov
05.08.2020, 02:20
Как узнать какой стиль борьбы скольки байтам равен?
И чем отличается #1 от #2?

CPed +0x72D = [byte] Стиль борьбы #1

CPed +0x72E = [byte] Стиль борьбы #2



Не знаю, кому кроме меня это вообще надо, но в гугле ничего нет и пришлось искать методом тыка, так что пусть будет:

Всего 4-16 байт.

Из интересного:

5 - Бокс

6 - Махи ногами (вроде тхэквондо или чет такое)

7 - захват и удар коленом

15 - Уличный стиль

Остальное - это удары оружием ближнего боя.

Записывать в оба адреса, использовать на ПКМ+F.

Пример использования:

C++:






DWORD cPed
;
//Boxing
ReadProcessMemory
(
hProcess
,
(
LPVOID
)
0xB6F5F0
,
&
cPed
,
sizeof
(
cPed
)
,
0
)
;
BYTE value
=
5
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
cPed
+
0x72D
)
,
&
value
,
4
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
cPed
+
0x72E
)
,
&
value
,
4
,
nullptr
)
;

kin4stat
05.08.2020, 02:22
Не знаю, кому кроме меня это вообще надо, но в гугле ничего нет и пришлось искать методом тыка, так что пусть будет:

Всего 4-16 байт.

Из интересного:
5 - Бокс
6 - Махи ногами (вроде тхэквондо или чет такое)
7 - захват и удар коленом
15 - Уличный стиль

Остальное - это удары оружием ближнего боя.

Записывать в оба адреса, использовать на ПКМ+F.


Сделай для этого код(Любой, экстернал/интернал) и выложи в тему Полезные Функции С++ю

Musaigen
05.08.2020, 04:42
Да не, не то. Мне надо в функции приема RPC, проверять, включено ли оно. Примерно продумал такой ход: Массив, в нем индекс = ID RPC. массив типа struct RPC, в котором два поля: std::string name и bool enabled. Мне теперь надо придумать как это заполнять


Используй std::map.

Заполнять через for.

manukhov
05.08.2020, 12:28
Сделай для этого код(Любой, экстернал/интернал) и выложи в тему Полезные Функции С++ю


Код добавил, а в ту тему не вижу смысла кидать, уж очень примитивно. Кому будет нужно, тот увидит. Это теперь и в гугле и в поиске бх есть.

Dark_Knight
05.08.2020, 13:23
Используй std::map.
Заполнять через for.


Можно спокойной через vector сделать не напрягаясь и юзать std::find_if для поиска любых значений.

map имеет метод find, но позволит искать по первому элементу пары(sld::pair)

Ideone.com (https://www.blast.hk/redirect/aHR0cHM6Ly9pZGVvbmUuY29tL0lPb1pNbA)

Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.

ideone.com

manukhov
05.08.2020, 13:36
Здравствуйте, опять я со своими цыганскими фокусами по трансформации internal->external, на сей раз Nametag. Подскажите, что неправильно, я так и не нашёл проблему, а работать оно не хочет.

P.S.

1. Интернал точно правильный.

2. Получение адреса samp.dll точно работает

3. Виртал протект делал, не помогает.

Internal:






Idefine SAMP_INFO 0x21A0F8
#define SAMP_SETTINGS 0x3D5
DWORD* pInfo;
BYTE* ThroughWalls;
BYTE* ShowNameTags;
float* fDistance;


DWORD SampDLL = (DWORD)GetModuleHandleA("samp.dll");
if (SampDLL) {
pInfo = (DWORD*)(SampDLL + SAMP_INFO);
while (*pInfo == 0) Sleep(1000);
while (*(DWORD*)(*pInfo + SAMP_SETTINGS) == 0) Sleep(1000);
ShowNameTags = (BYTE*)(*(DWORD*)(*pInfo + SAMP_SETTINGS) + 0x38);
ThroughWalls = (BYTE*)(*(DWORD*)(*pInfo + SAMP_SETTINGS) + 0x2F);
fDistance = (float*)((DWORD*)(*(DWORD*)(*pInfo + SAMP_SETTINGS) + 0x27));
for (;;)
{
do {
Sleep(100);
} while (!KeyPressed(VK_MENU) || !KeyPressed(0x32));
do {
Sleep(50);
} while (KeyPressed(0x32));
gta_showText("okoboga v2 ~g~Activated", 1000, NULL, NULL);
*ShowNameTags = 1;
*ThroughWalls = 0;
*fDistance = 999.0f;
do {
Sleep(100);
} while (!KeyPressed(VK_MENU) || !KeyPressed(0x32));
do {
Sleep(50);
} while (KeyPressed(0x32));
gta_showText("okoboga v2 ~r~Deactivated", 1000, NULL, NULL);
*ShowNameTags = 1;
*ThroughWalls = 1;
*fDistance = 0.0f;
}
}




External (моё):






#define SAMP_INFO 0x21A0F8
#define SAMP_SETTINGS 0x3D5

if (checkBox5->Checked)
{
DWORD pInfo;
BYTE ShowNameTags = 1;
BYTE ThroughWalls = 0;
float fDistance = 999.0f;

ReadProcessMemory(hProcess, (LPVOID)(moduleBase + SAMP_INFO), &pInfo, sizeof(pInfo), nullptr);
WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x38), &ShowNameTags, sizeof(ShowNameTags), nullptr);
WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x2F), &ThroughWalls, sizeof(ThroughWalls), nullptr);
WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x27), &fDistance, sizeof(fDistance), nullptr);
}
else
{
DWORD pInfo;
BYTE ShowNameTags = 1;
BYTE ThroughWalls = 1;
float fDistance = 0.0f;

ReadProcessMemory(hProcess, (LPVOID)(moduleBase + SAMP_INFO), &pInfo, sizeof(pInfo), nullptr);
WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x38), &ShowNameTags, sizeof(ShowNameTags), nullptr);
WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x2F), &ThroughWalls, sizeof(ThroughWalls), nullptr);
WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x27), &fDistance, sizeof(fDistance), nullptr);

kin4stat
05.08.2020, 14:04
Здравствуйте, опять я со своими цыганскими фокусами по трансформации internal->external, на сей раз Nametag. Подскажите, что неправильно, я так и не нашёл проблему, а работать оно не хочет.


Если я все правильно понял, то

(DWORD*)(*pInfo + SAMP_SETTINGS)


Преобразует *pInfo+SAMP_SETTINGS в DWORD*, после идет +0x27, а из-за арифметики указателей, это получается 0x27 * 4, и потом идет разыменование.

Возможно ты еще с преобразованиями накосячил, пока с телефонам, не совсем удобно смотреть :D

Также возможно у тебя DWORD задейфанен в 8 байт, а не в 4. Я однажды из-за этого час искал где приколы возникли :D

нашел где ошибка. Вместо

C++:






ReadProcessMemory
(
hProcess
,
(
LPVOID
)
(
moduleBase
+
SAMP_INFO
)
,
&
pInfo
,
sizeof
(
pInfo
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pInfo
+
SAMP_SETTINGS
+
0x38
)
,
&
ShowNameTags
,
sizeof
(
ShowNameTags
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pInfo
+
SAMP_SETTINGS
+
0x2F
)
,
&
ThroughWalls
,
sizeof
(
ThroughWalls
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pInfo
+
SAMP_SETTINGS
+
0x27
)
,
&
fDistance
,
sizeof
(
fDistance
)
,
nullptr
)
;




Должно быть что-то типа такого:

C++:






ReadProcessMemory
(
hProcess
,
(
LPVOID
)
(
moduleBase
+
SAMP_INFO
)
,
&
pInfo
,
sizeof
(
pInfo
)
,
nullptr
)
;
DWORD pSettings
;
ReadProcessMemory
(
hProcess
,
(
LPVOID
)
(
pInfo
+
SAMP_SETTINGS
)
,
&
pSettings
,
sizeof
(
pSettings
)
,
NULL
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pSettings
+
0x38
)
,
&
ShowNameTags
,
sizeof
(
ShowNameTags
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pSettings
+
0x2F
)
,
&
ThroughWalls
,
sizeof
(
ThroughWalls
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pSettings
+
0x27
)
,
&
fDistance
,
sizeof
(
fDistance
)
,
nullptr
)
;

manukhov
05.08.2020, 15:05
Если я все правильно понял, то

(DWORD*)(*pInfo + SAMP_SETTINGS)


Преобразует *pInfo+SAMP_SETTINGS в DWORD*, после идет +0x27, а из-за арифметики указателей, это получается 0x27 * 4, и потом идет разыменование.
Возможно ты еще с преобразованиями накосячил, пока с телефонам, не совсем удобно смотреть :D
Также возможно у тебя DWORD задейфанен в 8 байт, а не в 4. Я однажды из-за этого час искал где приколы возникли :D

нашел где ошибка. Вместо

C++:






ReadProcessMemory
(
hProcess
,
(
LPVOID
)
(
moduleBase
+
SAMP_INFO
)
,
&
pInfo
,
sizeof
(
pInfo
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pInfo
+
SAMP_SETTINGS
+
0x38
)
,
&
ShowNameTags
,
sizeof
(
ShowNameTags
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pInfo
+
SAMP_SETTINGS
+
0x2F
)
,
&
ThroughWalls
,
sizeof
(
ThroughWalls
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pInfo
+
SAMP_SETTINGS
+
0x27
)
,
&
fDistance
,
sizeof
(
fDistance
)
,
nullptr
)
;




Должно быть что-то типа такого:

C++:






ReadProcessMemory
(
hProcess
,
(
LPVOID
)
(
moduleBase
+
SAMP_INFO
)
,
&
pInfo
,
sizeof
(
pInfo
)
,
nullptr
)
;
DWORD pSettings
;
ReadProcessMemory
(
hProcess
,
(
LPVOID
)
(
pInfo
+
SAMP_SETTINGS
)
,
&
pSettings
,
sizeof
(
pSettings
)
,
NULL
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pSettings
+
0x38
)
,
&
ShowNameTags
,
sizeof
(
ShowNameTags
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pSettings
+
0x2F
)
,
&
ThroughWalls
,
sizeof
(
ThroughWalls
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pSettings
+
0x27
)
,
&
fDistance
,
sizeof
(
fDistance
)
,
nullptr
)
;





Спасибо, вижу, я не обратил внимания. Но не заработало(



Также возможно у тебя DWORD задейфанен в 8 байт, а не в 4. Я однажды из-за этого час искал где приколы возникли :D


Это как? Я размерность нигде не указывал

kin4stat
05.08.2020, 15:09
Спасибо, вижу, я не обратил внимания. Но не заработало(

Это как? Я размерность нигде не указывал


У меня тоже левых дефайнов не было, а оказалось что где-то есть

manukhov
05.08.2020, 15:23
У меня тоже левых дефайнов не было, а оказалось что где-то есть


Обэма взломал комп и задефайнил пока тебя не было

kin4stat
05.08.2020, 15:30
Обэма взломал комп и задефайнил пока тебя не было


Только что проверил. Вот такой код у меня работает, на монсере как минимум.

C++:






unsigned
char
ShowNameTags
=
1
;
unsigned
char
ThroughWalls
=
0
;
float
fDistance
=
999.0f
;
ReadProcessMemory
(
processHandle
,
(
LPVOID
)
(
sampBase
+
SAMP_INFO
)
,
&
pInfo
,
sizeof
(
pInfo
)
,
nullptr
)
;
uint32_t
pSettings
;
ReadProcessMemory
(
processHandle
,
(
LPVOID
)
(
pInfo
+
SAMP_SETTINGS
)
,
&
pSettings
,
sizeof
(
pSettings
)
,
NULL
)
;
WriteProcessMemory
(
processHandle
,
(
LPVOID
)
(
pSettings
+
0x38
)
,
&
ShowNameTags
,
sizeof
(
ShowNameTags
)
,
nullptr
)
;
WriteProcessMemory
(
processHandle
,
(
LPVOID
)
(
pSettings
+
0x2F
)
,
&
ThroughWalls
,
sizeof
(
ThroughWalls
)
,
nullptr
)
;
WriteProcessMemory
(
processHandle
,
(
LPVOID
)
(
pSettings
+
0x27
)
,
&
fDistance
,
sizeof
(
fDistance
)
,
nullptr
)
;




Ща посчитал оффсет для R1,вышло 3C5 вместо 3D5. Попробуй(нет возможности на R1 протестить сейчас)

еще можешь попробовать 3C9.

manukhov
05.08.2020, 15:43
Ща посчитал оффсет для R1,вышло 3C5 вместо 3D5. Попробуй(нет возможности на R1 протестить сейчас)
еще можешь попробовать 3C9.


Спасибо, реально беды с оффсетами, просто 3D5 в интернале у меня работал, я думал всё ок

bab0n
05.08.2020, 17:32
Можете описать пару способов экспорта и импорта значений переменных?
Вот подобный код на LUA:



Lua:






local
defaults
=
{
sets
=
{
arg1
=
113
,
arg2
=
1
,
arg3
=
50
,
notification
=
true
}
}
local
ini
=
inicfg
.
load
(
defaults
,
'Kavo.ini'
)
local
sets
=
ini
.
sets
function
arg3
(
arg
)
if
type
(
tonumber
(
arg
)
)
==
'number'
then
sets
.
arg3
=
arg
inicfg
.
save
(
ini
,
'Kavo.ini'
)
printString
(
'~y~ updated'
,
1000
)
addOneOffSound
(
0
,
0
,
0
,
1150
)
else
printString
(
'~r~ error'
,
1000
)
addOneOffSound
(
0
,
0
,
0
,
1055
)
end
end
-- пример использования
if
wasKeyPressed
(
sets
.
arg1
)
then
work
=
not
work
if
work
then
printString
(
'~p~ON'
,
1000
)
else
printString
(
'OFF'
,
1000
)
end
end






Я не настаиваю на текстовике, может есть какие то ещё варианты? Реестр может, или какие-то ещё файлы/директории


Актуально

SKIC
07.08.2020, 17:52
Как включить курсор Windows и заморозить управление? Подобно когда заходишь в меню паузы.

kin4stat
07.08.2020, 18:33
Как включить курсор Windows и заморозить управление? Подобно когда заходишь в меню паузы.



C++:






// SAMP 0.3.7-R1
#define SAMP_MISC_INFO = 0x21A10C
#define SAMP_FUNC_TOGGLECURSOR = 0x9BD30
#define SAMP_FUNC_CURSORUNLOCKACTORCAM = 0x9BC10
void
ToggleCursor
(
bool
state
)
{
//state - 1 on; 0 off
if
(
iInputEnabled
)
//is Input Active Check
return
;
void
*
obj
=
*
(
void
*
*
)
(
dwSAMPAddr
+
SAMP_MISC_INFO
)
;
(
(
void
(
__thiscall
*
)
(
void
*
,
int
,
bool
)
)
(
dwSAMPAddr
+
SAMP_TOGGLECURSOR
)
)
(
obj
,
state
?
3
:
0
,
!
state
)
;
if
(
!
state
)
(
(
void
(
__thiscall
*
)
(
void
*
)
)
(
dwSAMPAddr
+
SAMP_CURSORUNLOCKACTORCAM
)
)
(
obj
)
;
}




Для блокировки управления в wndProc добавить return

SKIC
07.08.2020, 18:42
C++:






// SAMP 0.3.7-R1
#define SAMP_MISC_INFO = 0x21A10C
#define SAMP_FUNC_TOGGLECURSOR = 0x9BD30
#define SAMP_FUNC_CURSORUNLOCKACTORCAM = 0x9BC10
void
ToggleCursor
(
bool
state
)
{
//state - 1 on; 0 off
if
(
iInputEnabled
)
//is Input Active Check
return
;
void
*
obj
=
*
(
void
*
*
)
(
dwSAMPAddr
+
SAMP_MISC_INFO
)
;
(
(
void
(
__thiscall
*
)
(
void
*
,
int
,
bool
)
)
(
dwSAMPAddr
+
SAMP_TOGGLECURSOR
)
)
(
obj
,
state
?
3
:
0
,
!
state
)
;
if
(
!
state
)
(
(
void
(
__thiscall
*
)
(
void
*
)
)
(
dwSAMPAddr
+
SAMP_CURSORUNLOCKACTORCAM
)
)
(
obj
)
;
}




Для блокировки управления в wndProc добавить return


Это для SAMP а мне для одиночки.

@FYP (https://www.blast.hk/members/2/), можешь пожалуйста дать код своего showCursor из moonloader. ну пожалуйста.

DarkP1xel
07.08.2020, 22:06
Это для SAMP а мне для одиночки.
@FYP (https://www.blast.hk/members/2/), можешь пожалуйста дать код своего showCursor из moonloader. ну пожалуйста.



Псевдокод функции включения курсора SA-MP'a.:






int
__thiscall
ToggleCursor
(
stMiscInfo
*
this
,
int
cursorMode
,
int
hideCursor
?
)
{
int
result
;
// eax
stMiscInfo
*
v4
;
// esi
result
=
cursorMode
;
v4
=
this
;
switch
(
cursorMode
)
{
case
2
:
UnProtectMemmory
(
(
void
*
)
0x541DF5
,
5
)
;
MEMORY
[
0x541DF5
]
=
0x90909090
;
MEMORY
[
0x541DF9
]
=
0x90u
;
GTA
::
patch
::
enableCursor
(
)
;
MEMORY
[
0xB73424
]
=
0
;
MEMORY
[
0xB73428
]
=
0
;
MEMORY
[
0x541BD0
]
(
)
;
MEMORY
[
0x541DD0
]
(
)
;
UnProtectMemmory
(
(
void
*
)
0x6194A0
,
1
)
;
MEMORY
[
0x6194A0
]
=
0xC3u
;
result
=
(
(
int
(
__stdcall
*
)
(
IDirect3DDevice9
*
,
signed
int
)
)
pDevice
->
vtbl
->
ShowCursor
)
(
pDevice
,
1
)
;
v4
->
iCursorMode
=
2
;
break
;
case
1
:
if
(
this
->
iCursorMode
!=
1
)
{
UnProtectMemmory
(
(
void
*
)
0x541DF5
,
5
)
;
result
=
0x90909090
;
MEMORY
[
0x541DF5
]
=
0x90909090
;
MEMORY
[
0x541DF9
]
=
0x90u
;
v4
->
iCursorMode
=
1
;
}
break
;
case
3
:
if
(
this
->
iCursorMode
!=
3
)
{
GTA
::
patch
::
enableCursor
(
)
;
MEMORY
[
0xB73424
]
=
0
;
MEMORY
[
0xB73428
]
=
0
;
MEMORY
[
0x541BD0
]
(
)
;
MEMORY
[
0x541DD0
]
(
)
;
UnProtectMemmory
(
(
void
*
)
0x6194A0
,
1
)
;
MEMORY
[
0x6194A0
]
=
0xC3u
;
result
=
(
(
int
(
__stdcall
*
)
(
IDirect3DDevice9
*
,
signed
int
)
)
pDevice
->
vtbl
->
ShowCursor
)
(
pDevice
,
1
)
;
v4
->
iCursorMode
=
3
;
}
break
;
case
4
:
if
(
this
->
iCursorMode
!=
4
)
{
sub_1009BB20
(
)
;
MEMORY
[
0xB73424
]
=
0
;
MEMORY
[
0xB73428
]
=
0
;
MEMORY
[
0x541BD0
]
(
)
;
MEMORY
[
0x541DD0
]
(
)
;
result
=
UnProtectMemmory
(
(
void
*
)
0x6194A0
,
1
)
;
MEMORY
[
0x6194A0
]
=
0xC3u
;
v4
->
iCursorMode
=
4
;
}
break
;
default
:
if
(
!
cursorMode
&&
this
->
iCursorMode
)
{
this
->
field_59
=
hideCursor
?
!=
0
?
0
:
0xA
;
result
=
(
(
int
(
__stdcall
*
)
(
IDirect3DDevice9
*
,
_DWORD
)
)
pDevice
->
vtbl
->
ShowCursor
)
(
pDevice
,
0
)
;
v4
->
iCursorMode
=
0
;
}
break
;
}
return
result
;
}

sqdxi
08.08.2020, 02:08
1) Не могли бы подсказать в чем ошибка? (Суть скрипта, чтобы при виде пикапа(иконки зеленого домика"1273" нажимал alt+enter)

В каком формате закидывать в корень? .lua?

Код:

void CalcScreenCoors(D3DXVECTOR3* vecWorld, D3DXVECTOR3* vecScreen)

{

D3DXMATRIX m((float*)(0xB6FA2C));

DWORD* dwLenX = (DWORD*)(0xC17044);

DWORD* dwLenY = (DWORD*)(0xC17048);

vecScreen->x = (vecWorld->z * m._31) + (vecWorld->y * m._21) + (vecWorld->x * m._11) + m._41;

vecScreen->y = (vecWorld->z * m._32) + (vecWorld->y * m._22) + (vecWorld->x * m._12) + m._42;

vecScreen->z = (vecWorld->z * m._33) + (vecWorld->y * m._23) + (vecWorld->x * m._13) + m._43;

double fRecip = (double)1.0 / vecScreen->z;

vecScreen->x *= (float)(fRecip * (*dwLenX));

vecScreen->y *= (float)(fRecip * (*dwLenY));

}

bool IsPickOnScreen(int p)

{

D3DXVECTOR3 vecPos;

vecPos.x = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[p].fPosition[0];

vecPos.y = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[p].fPosition[1];

vecPos.z = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[p].fPosition[2];

D3DXVECTOR3 screenPos;

CalcScreenCoors(&vecPos, &screenPos);

if (screenPos.z

trefa
08.08.2020, 17:19
[QUOTE="sqdxi"]

1) Не могли бы подсказать в чем ошибка? (Суть скрипта, чтобы при виде пикапа(иконки зеленого домика"1273" нажимал alt+enter)
В каком формате закидывать в корень? .lua?
Код:

void CalcScreenCoors(D3DXVECTOR3* vecWorld, D3DXVECTOR3* vecScreen)
{

D3DXMATRIX m((float*)(0xB6FA2C));
DWORD* dwLenX = (DWORD*)(0xC17044);
DWORD* dwLenY = (DWORD*)(0xC17048);

vecScreen->x = (vecWorld->z * m._31) + (vecWorld->y * m._21) + (vecWorld->x * m._11) + m._41;
vecScreen->y = (vecWorld->z * m._32) + (vecWorld->y * m._22) + (vecWorld->x * m._12) + m._42;
vecScreen->z = (vecWorld->z * m._33) + (vecWorld->y * m._23) + (vecWorld->x * m._13) + m._43;

double fRecip = (double)1.0 / vecScreen->z;
vecScreen->x *= (float)(fRecip * (*dwLenX));
vecScreen->y *= (float)(fRecip * (*dwLenY));
}

bool IsPickOnScreen(int p)
{

D3DXVECTOR3 vecPos;
vecPos.x = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[p].fPosition[0];
vecPos.y = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[p].fPosition[1];
vecPos.z = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[p].fPosition[2];

D3DXVECTOR3 screenPos;
CalcScreenCoors(&vecPos, &screenPos);
if (screenPos.z

bab0n
09.08.2020, 00:21
В попытках работы с .ini пробую такой код:




C++:






void
CALLBACK
testik
(
std
::
string param
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Start"
)
;
std
::
fstream
sets
(
"settings.ini"
,
std
::
ios
::
out
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Файл открыт"
)
;
sets

getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Записан аргумент"
)
;
sets
.
close
(
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Файл закрыт"
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"End"
)
;
}









C++:






SF
->
getSAMP
(
)
->
registerChatCommand
(
"test"
,
testik
)
;





Но ничего не работает, краша нет, всё выводиться что должно в сампе, но файл не заполняется.




https://i.yapx.ru/IeAcZ.png

https://i.yapx.ru/IeAWv.png


Хочу услышать любые советы и предположения, сразу говорю что в Cpp я не так давно, и многие локальные фразы могу не понять

loganhackerdff
09.08.2020, 00:23
лови

bab0n
09.08.2020, 00:26
лови


Короткий гайд можно братик? чисто чтоб начальное представление иметь

loganhackerdff
09.08.2020, 00:28
Короткий гайд можно братик? чисто чтоб начальное представление иметь



C++:






float
FloatValue
=
INI
::
GetFloat
(
"Section"
,
"Key"
,
sizeof
(
float
)
,
"C:\\Settings\\ConfigFile.ini"
)
;
INI
::
WriteFloat
(
"Section"
,
"Key"
,
23236526.562362f
,
"C:\\Settings\\ConfigFile.ini"
)
;

Dark_Knight
09.08.2020, 00:35
C++:






float
FloatValue
=
INI
::
GetFloat
(
"Section"
,
"Key"
,
sizeof
(
float
)
,
"C:\\Settings\\ConfigFile.ini"
)
;
INI
::
WriteFloat
(
"Section"
,
"Key"
,
23236526.562362f
,
"C:\\Settings\\ConfigFile.ini"
)
;





Ух ты йобана.

@#Babon (https://www.blast.hk/members/77027/)

Могу посоветовать от SRTeam взять класс для работы с ини.

Вот че неплохое нашел на гитхабе

GitHub - Qix-/tortellini: A really stupid INI file format for C++11 (https://github.com/Qix-/tortellini)

A really stupid INI file format for C++11. Contribute to Qix-/tortellini development by creating an account on GitHub.

github.com


Лично сам юзаю boost::property_ptree, который умеет работать c ini, json, xml и info.

bab0n
09.08.2020, 00:39
Ух ты йобана.
@#Babon (https://www.blast.hk/members/77027/)
Могу посоветовать от SRTeam взять класс для работы с ини.
Вот че неплохое нашел на гитхабе

GitHub - Qix-/tortellini: A really stupid INI file format for C++11 (https://github.com/Qix-/tortellini)

A really stupid INI file format for C++11. Contribute to Qix-/tortellini development by creating an account on GitHub.

github.com


Лично сам юзаю boost::property_ptree, который умеет работать c ini, json, xml и info.


Как я и говорил, с++ изучаю недавно, и многое для меня закрыто как космос. И даже в том что, на ваш взгляд просто, я буду разбираться 2 ночи

UPD: Кстати, почему не работал fstream?

Dark_Knight
09.08.2020, 00:50
Смотри. Если ты ставишь out, то каждый раз при открытии файла позиция для записи ставится на 0, а при app ставится в конец. Возможно ты открыл файл и держал его открытым в блокноте, а он не умеет обновлять состояние файла, если то был изменен. Юзай Notepad++, как стандартный текстовый редактор.



наверно потому что он ты написал std::ios::out, а не std::ios::in или как то так, хз


У него всё верно открывается.

bab0n
09.08.2020, 01:20
C++:






float
FloatValue
=
INI
::
GetFloat
(
"Section"
,
"Key"
,
sizeof
(
float
)
,
"C:\\Settings\\ConfigFile.ini"
)
;
INI
::
WriteFloat
(
"Section"
,
"Key"
,
23236526.562362f
,
"C:\\Settings\\ConfigFile.ini"
)
;






Не понимаю почему не срабатывает, есть готовый .sf и .ini с исходным кодом чтоб я понял что и как?

C++:






void
CALLBACK
testik
(
std
::
string param
)
{
INI
::
WriteInt
(
"Section"
,
"Key"
,
4
,
"config.ini"
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Work"
)
;
}

loganhackerdff
09.08.2020, 01:24
Не понимаю почему не срабатывает, есть готовый .sf и .ini с исходным кодом чтоб я понял что и как?

C++:






void
CALLBACK
testik
(
std
::
string param
)
{
INI
::
WriteInt
(
"Section"
,
"Key"
,
4
,
"config.ini"
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Work"
)
;
}





путь надо к ини фалу а не название

bab0n
09.08.2020, 01:33
путь надо к ини фалу а не название


Всё я смог братик, ещё раз огромное СПС

Но никак не выходит, есть следующие идеи:

1) С памятью:

CPed +0x4F4 = [dword] Текущее оружие (RpClump)

Но понятия не имею как это использовать дальше.

2) С RPC на выдачу оружия, но она работает только со 2 запроса, тоесть оружие выдаётся, а сервер с ним взаимодействовать не может, не спасала даже задержка

C++:





[CODE]
void
emulateRPC_giveweapon
(
uint32_t
weapon_id
,
uint32_t
ammo
)
{
BitStream bsClass
;
bsClass
.
Write
(
uint32_t
(
weapon_id
)
)
;
bsClass
.
Write
(
uint32_t
(
ammo
)
)
;
SF
->
getRakNet
(
)
->
emulateRecvRPC
(
22
,
&
bsClass
)
;
}
emulateRPC_giveweapon
(
sw_id
,
0
)
;
for
(
int
ok
;
ok



3) Возможно как то через GAME->?

AdCKuY_DpO4uLa
09.08.2020, 04:25
Всё я смог братик, ещё раз огромное СПС
Но никак не выходит, есть следующие идеи:
1) С памятью:
CPed +0x4F4 = [dword] Текущее оружие (RpClump)
Но понятия не имею как это использовать дальше.
2) С RPC на выдачу оружия, но она работает только со 2 запроса, тоесть оружие выдаётся, а сервер с ним взаимодействовать не может, не спасала даже задержка

C++:





[CODE]
void
emulateRPC_giveweapon
(
uint32_t
weapon_id
,
uint32_t
ammo
)
{
BitStream bsClass
;
bsClass
.
Write
(
uint32_t
(
weapon_id
)
)
;
bsClass
.
Write
(
uint32_t
(
ammo
)
)
;
SF
->
getRakNet
(
)
->
emulateRecvRPC
(
22
,
&
bsClass
)
;
}
emulateRPC_giveweapon
(
sw_id
,
0
)
;
for
(
int
ok
;
ok
?



C++:






CWeapon
*
weap
=
PEDSELF
->
GiveWeapon
(
eWeaponType
(
24
)
,
1
,
eWeaponSkill
(
100
)
)
;
//24 - ид оружия
weap
->
SetAmmoTotal
(
ammo
)
;
//кол-во пт
weap
->
SetAmmoInClip
(
ammo_clip
)
;
//кол-во заряженных пт

bab0n
09.08.2020, 04:40
C++:






CWeapon
*
weap
=
PEDSELF
->
GiveWeapon
(
eWeaponType
(
24
)
,
1
,
eWeaponSkill
(
100
)
)
;
//24 - ид оружия
weap
->
SetAmmoTotal
(
ammo
)
;
//кол-во пт
weap
->
SetAmmoInClip
(
ammo_clip
)
;
//кол-во заряженных пт





А если а рп сервачке скиллов не будет? Или я недопонимаю работу?

AdCKuY_DpO4uLa
09.08.2020, 04:41
А если а рп сервачке скиллов не будет? Или я недопонимаю работу?


Ну не будет, так не будет

Скорее всего тебя просто кикнет, ибо ты пушку из воздуха достал🤣🤣

bab0n
09.08.2020, 04:45
Ну не будет, так не будет
Скорее всего тебя просто кикнет, ибо ты пушку из воздуха достал🤣🤣


Ща потестил, и да, ты уже написал вывод, вариант отнять 1 пт в конце функции прост?

AdCKuY_DpO4uLa
09.08.2020, 04:46
Не понял твоего вопроса. Зачем отнимать 1 пт?

bab0n
09.08.2020, 04:50
Не понял твоего вопроса. Зачем отнимать 1 пт?


Чтобы на рп сервачках не оставалось лишнего пт, т.к. при крафте 1 функцией оно выдаётся.

а при замене 1 на 0, функция перестаёт работать

AdCKuY_DpO4uLa
09.08.2020, 04:53
За рп не шарю, тут ничего сказать не могу, но сервер знает сколько он тебе выдает пт на оружие и если пт больше, чем тебе выдал сервер, то тебя либо кикнет, что скорее всего, либо отнимет лишнее пт. Разумеется, так же будет, если пт будет меньше, чем тебе выдал сервер

bab0n
09.08.2020, 04:56
За рп не шарю, тут ничего сказать не могу, но сервер знает сколько он тебе выдает пт на оружие и если пт больше, чем тебе выдал сервер, то тебя либо кикнет, что скорее всего, либо отнимет лишнее пт. Разумеется, так же будет, если пт будет меньше, чем тебе выдал сервер



Только что чекнул на арп, не кикало, но пт всё же убрал

C++:






int
GetAmmoTotal
(
)
{
return
PEDSELF
->
GetWeapon
(
PEDSELF
->
GetCurrentWeaponSlot
(
)
)
->
GetAmmoTotal
(
)
;
}
int
ammos
=
GetAmmoTotal
(
)
;
weap
->
SetAmmoTotal
(
ammos
-
1
)
;




Но всё равно всё как то через жопу работает, не берёт ствол в руку сейчас.

checkdasound
09.08.2020, 05:03
Только что чекнул на арп, не кикало, но пт всё же убрал

C++:






int
GetAmmoTotal
(
)
{
return
PEDSELF
->
GetWeapon
(
PEDSELF
->
GetCurrentWeaponSlot
(
)
)
->
GetAmmoTotal
(
)
;
}
int
ammos
=
GetAmmoTotal
(
)
;
weap
->
SetAmmoTotal
(
ammos
-
1
)
;




Но всё равно всё как то через жопу работает, не берёт ствол в руку сейчас.


Типа слот оружия не меняется на нужный или вообще оружия нет?

bab0n
09.08.2020, 05:09
Типа слот оружия не меняется на нужный или вообще оружия нет?


Дигл у перса есть, слот не меняется на дигл.

checkdasound
09.08.2020, 05:14
Дигл у перса есть, слот не меняется на дигл.


P.S. В WeaponInfo есть метод SetSlot().

bab0n
09.08.2020, 05:24
P.S. В WeaponInfo есть метод SetSlot().


Так, это я нашёл, а нельзя как то серверу отправить лишний пакет что у меня в руках уже не кулак?

и ещё,какие есть простенькие задержки кроме циклов for?) + спокойной ночи

checkdasound
09.08.2020, 05:31
Так, это я нашёл, а нельзя как то серверу отправить лишний пакет что у меня в руках уже не кулак?
и ещё,какие есть простенькие задержки кроме циклов for?) + спокойной ночи


Можно, как ты сверху писал rpc, он как раз и сообщит серверу, что ты получил оружие, только тебе надо будет не эмулировать rpc, а отправлять на сервер. Правда, если ты на сервере с античитом, тебя кикнет скорее всего.

А насчет задержки, то Sleep(), в скобках указывай миллисекунды.

kin4stat
09.08.2020, 13:45
А насчет задержки, то Sleep()



Информация - Полезные функции (https://www.blast.hk/threads/10970/post-419257)

uint8_t getPlayerWeaponModelID(int iPlayerID) { if (g_Players == NULL || iPlayerID SAMP_MAX_PLAYERS) return NULL; if (iPlayerID == g_Players->sLocalPlayerID) { if (g_Players->pLocalPlayer->pSAMP_Actor == NULL) return NULL...

www.blast.hk

bab0n
09.08.2020, 16:41
Можно, как ты сверху писал rpc, он как раз и сообщит серверу, что ты получил оружие, только тебе надо будет не эмулировать rpc, а отправлять на сервер. Правда, если ты на сервере с античитом, тебя кикнет скорее всего.
А насчет задержки, то Sleep(), в скобках указывай миллисекунды.


при sleep не обновляются кадры игры и по итогу тормозит вся игра а не только скрипт

r0den
09.08.2020, 19:49
Как показать системный курсор винды в игре но так чтобы он двигался свободно и не поворачивал камеру в самой игре?

Пытлася занопать WM_MOUSEMOVE но чё-то этот ивент не вызывается, хер его знает как это работает

E41L
12.08.2020, 01:31
С++/# для создание читов майнкрафт проектов?

Molchun
12.08.2020, 16:38
Доброго времени суток, как сделать проверку на то, что игрок находиться в прицеле. Что-то около if (SF->getGame()->?игрок прицеливается?). И проверку на 180 градусов, что человек находиться перед тобой, а не сзади. Заранее спасибо

kin4stat
12.08.2020, 21:18
Доброго времени суток, как сделать проверку на то, что игрок находиться в прицеле. Что-то около if (SF->getGame()->?игрок прицеливается?). И проверку на 180 градусов, что человек находиться перед тобой, а не сзади. Заранее спасибо



mtasa-blue/Client/game_sa/CPedSA.h at master · multitheftauto/mtasa-blue (https://github.com/multitheftauto/mtasa-blue/blob/master/Client/game_sa/CPedSA.h#L132)

Multi Theft Auto is a game engine that incorporates an extendable network play element into a proprietary commercial single-player game. - multitheftauto/mtasa-blue

github.com

bab0n
12.08.2020, 23:21
нельзя использовать задержку в основном цикле игры, используй таймеры / потоки (не рекомендуется тк небезопасно в случае с гта са), а вообще лучше всего использовать либу книги или любой другой менеджер таймеров


Покажи пожалуйста пример как её использовать в голом проекте? Я пытаюсь сунуть код но выдаёт 8 ошибок

Screenshot_1.pngbab0n · 12 Авг 2020 в 22:21' data-fancybox="lb-post-545778" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/65390/" style="cursor: pointer;" title="Screenshot_1.png">
https://forum.antichat.xyz/attachments/27545778/

Убрал функцию foo которую он кидал в код, ошибок стало меньше.

Screenshot_2.pngbab0n · 12 Авг 2020 в 22:21' data-fancybox="lb-post-545778" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/65392/" style="cursor: pointer;" title="Screenshot_2.png">
https://forum.antichat.xyz/attachments/27545778/

kin4stat
12.08.2020, 23:32
Покажи пожалуйста пример как её использовать в голом проекте? Я пытаюсь сунуть код но выдаёт 8 ошибок

Убрал функцию foo которую он кидал в код, ошибок стало меньше.


как минимум библиотеку нужно скачать и подключить к проекту

imring
13.08.2020, 00:26
Покажи пожалуйста пример как её использовать в голом проекте? Я пытаюсь сунуть код но выдаёт 8 ошибок

Убрал функцию foo которую он кидал в код, ошибок стало меньше.



почему крашит при отправлении в чат (https://www.blast.hk/threads/58692/post-522304)

всем привет предпринимая очередную попытку пофиксить краши https://www.blast.hk/threads/56447/, наткнулся на проблемную часть: отправку результата распознавания в чат без использования сторонних api я выделил этот момент в отдельный файл, собственно мой вопрос: что я делаю не так и как...

www.blast.hk