Просмотр полной версии : С/С++ Вопрос - Ответ
F0RQU1N and
03.04.2024, 06:36
как можно реализовать привязку сервера, например если подключаешься на IP 127.0.0.1:7777, то будет выводиться определенная функция, а если на другой IP то ничего не будет
gethostbyname проще всего хукнуть
vmprotect
03.04.2024, 14:24
каким образом можно сделать наложение обводки на радар?
middle1221
14.04.2024, 20:07
Как можно отрисовать imgui меню на android без хука egl swap buffer?
F0RQU1N and
15.04.2024, 09:36
Как можно отрисовать imgui меню на android без хука egl swap buffer?
рисуй поверх
vmprotect
15.04.2024, 19:39
в sampapi возможно создавать свой кастомный диалог? если да каким образом это реализуется ?
вайега52
19.04.2024, 15:16
в sampapi возможно создавать свой кастомный диалог? если да каким образом это реализуется ?
C++:
#include "sampapi/CDialog.h"
sampapi
::
v037r3
::
RefDialog
(
)
-
Show
(
1488
,
2
,
"Title"
,
"Hello"
,
"Ok"
,
"Sosat"
,
false
)
;
как вызывать такое окно для перезапуска программы с правами администратора
https://ds-release.ru/goto/https://ds-release.ru/wp-content/uploads/2014/07/startadmin.jpg
writeline
23.04.2024, 12:09
как можно реализовать привязку сервера, например если подключаешься на IP 127.0.0.1:7777, то будет выводиться определенная функция, а если на другой IP то ничего не будет
При загрузке плагина добавь проверку наличия "ключа" в строке запуска сампа, при наличии твоего IP будет выполнятся функция, если же его не будет то самп запустится как обычно.
с++:
BOOL APIENTRY
DllEntryPoint
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
{
DisableThreadLibraryCalls
(
hModule
)
;
TCHAR
*
cmdline
=
GetCommandLine
(
)
;
if
(
StrStr
(
cmdline
,
"127.0.0.1:7777"
)
)
{
// ТУТ ТВОЙ КОД
}
}
return
TRUE
;
LoadLibrary
(
"samp.dll"
)
;
}
вайега52
23.04.2024, 17:14
как можно реализовать привязку сервера, например если подключаешься на IP 127.0.0.1:7777, то будет выводиться определенная функция, а если на другой IP то ничего не будет
При загрузке плагина добавь проверку наличия "ключа" в строке запуска сампа, при наличии твоего IP будет выполнятся функция, если же его не будет то самп запустится как обычно.
с++:
BOOL APIENTRY
DllEntryPoint
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
{
DisableThreadLibraryCalls
(
hModule
)
;
TCHAR
*
cmdline
=
GetCommandLine
(
)
;
if
(
StrStr
(
cmdline
,
"127.0.0.1:7777"
)
)
{
// ТУТ ТВОЙ КОД
}
}
return
TRUE
;
LoadLibrary
(
"samp.dll"
)
;
}
Можно хукнуть метод RakClient, отвечающий за подключение к серверу
C++:
#include "kthook/kthook.hpp"
using
RakClientConnect_t
=
bool
(
__thiscall
*
)
(
void
*
pRakClient
,
const
char
*
host
,
unsigned
short
serverPort
,
unsigned
short
clientPort
,
unsigned
int
depreciated
,
int
threadSleepTimer
)
;
kthook
::
kthook_simple
(
RakClientConnectHook
)
;
bool
RakClientConnectHooked
(
const
decltype
(
RakClientConnectHook
)
&
hook
,
void
*
pRakClient
,
const
char
*
host
,
unsigned
short
serverPort
,
unsigned
short
clientPort
,
unsigned
int
depreciated
,
int
threadSleepTimer
)
{
if
(
strcmp
(
host
,
"127.0.0.1"
)
==
0
)
)
std
::
cout
(
GetModuleHandle
(
"samp.dll"
)
)
;
RakClientConnectHook
.
set_cb
(
&
RakClientHooked
)
;
RakClientConnectHook
.
set_dest
(
SAMPHandle
+
0x339F0
)
;
// R3
RakClientConnectHook
.
install
(
)
;
Еще к примеру можно хукать какую-нибудь функцию из winsock (получать адрес экпортируемой функции из Ws2_32.dll), но тогда есть вероятность. то функция вызвана не из samp.dll, а например из какого-то плагина
vmprotect
25.04.2024, 18:47
Можно хукнуть метод RakClient, отвечающий за подключение к серверу
C++:
#include "kthook/kthook.hpp"
using
RakClientConnect_t
=
bool
(
__thiscall
*
)
(
void
*
pRakClient
,
const
char
*
host
,
unsigned
short
serverPort
,
unsigned
short
clientPort
,
unsigned
int
depreciated
,
int
threadSleepTimer
)
;
kthook
::
kthook_simple
(
RakClientConnectHook
)
;
bool
RakClientConnectHooked
(
const
decltype
(
RakClientConnectHook
)
&
hook
,
void
*
pRakClient
,
const
char
*
host
,
unsigned
short
serverPort
,
unsigned
short
clientPort
,
unsigned
int
depreciated
,
int
threadSleepTimer
)
{
if
(
strcmp
(
host
,
"127.0.0.1"
)
==
0
)
)
std
::
cout
(
GetModuleHandle
(
"samp.dll"
)
)
;
RakClientConnectHook
.
set_cb
(
&
RakClientHooked
)
;
RakClientConnectHook
.
set_dest
(
SAMPHandle
+
0x339F0
)
;
// R3
RakClientConnectHook
.
install
(
)
;
Еще к примеру можно хукать какую-нибудь функцию из winsock (получать адрес экпортируемой функции из Ws2_32.dll), но тогда есть вероятность. то функция вызвана не из samp.dll, а например из какого-то плагина
а через rakclient можно создать коннект на другой айпи ?
а через rakclient можно создать коннект на другой айпи ?
на любой можно
vmprotect
25.04.2024, 18:59
на любой можно
а можно пример?
ахуеть тема началась в 2013 и до 2024 все еще активна
вайега52
28.04.2024, 11:03
а через rakclient можно создать коннект на другой айпи ?
Если я правильно понимаю, ты хочешь изменить айпи при подключении в сампе?
Тогда ты можешь делать что-то типа такого
https://forum.antichat.xyz/attachments/28488753/
C++:
using
NetGameConnect_t
=
int
(
__thiscall
*
)
(
std
::
uintptr_t
*
netgame
)
;
kthook
::
kthook_simple
NetGameConnectHook
;
// r3
NetGameConnectHook
.
set_dest
(
reinterpret_cast
(
GetModuleHandleA
(
"samp.dll"
)
)
+
0x85D0
)
;
NetGameConnectHook
.
set_cb
(
[
]
(
const
decltype
(
NetGameConnectHook
)
&
hook
,
std
::
uintptr_t
*
netgame
)
{
char
*
host
=
reinterpret_cast
(
*
netgame
+
0x30
)
;
strcpy
(
host
,
"127.0.0.1"
)
;
*
reinterpret_cast
(
*
netgame
+
0x235
)
=
7777
;
return
hook
.
get_trampoline
(
)
(
netgame
)
;
}
)
;
NetGameConnectHook
.
install
(
)
;
vmprotect
28.04.2024, 12:07
Если я правильно понимаю, ты хочешь изменить айпи при подключении в сампе?
Тогда ты можешь делать что-то типа такого
C++:
using
NetGameConnect_t
=
int
(
__thiscall
*
)
(
std
::
uintptr_t
*
netgame
)
;
kthook
::
kthook_simple
NetGameConnectHook
;
// r3
NetGameConnectHook
.
set_dest
(
reinterpret_cast
(
GetModuleHandleA
(
"samp.dll"
)
)
+
0x85D0
)
;
NetGameConnectHook
.
set_cb
(
[
]
(
const
decltype
(
NetGameConnectHook
)
&
hook
,
std
::
uintptr_t
*
netgame
)
{
char
*
host
=
reinterpret_cast
(
*
netgame
+
0x30
)
;
strcpy
(
host
,
"127.0.0.1"
)
;
*
reinterpret_cast
(
*
netgame
+
0x235
)
=
7777
;
return
hook
.
get_trampoline
(
)
(
netgame
)
;
}
)
;
NetGameConnectHook
.
install
(
)
;
крашит, при попытке подключения
Помогите за нажатием W, asi (псдк + сампапи), альтернатива setGameKeyState ((в луа)).
мои попытки успех не обрели, из под винды тыкать W бяка
inexplica
02.05.2024, 11:29
C++:
float
distance
=
bet
.
Length
(
)
;
if
(
distance
>=
10
)
{
bet
.
Normalize
(
)
;
c
.
fX
+=
bet
.
fX
*
3
;
c
.
fY
+=
bet
.
fY
*
3
;
c
.
fZ
+=
bet
.
fZ
*
3
;
sendVehicle
(
c
)
;
AddMessageJumpQ
(
reinterpret_cast
(
distance
)
,
1500
,
12
,
true
)
;
time
=
GetTickCount
(
)
;
}
выдаёт ошибку: недопустимое преобразование типа.
помогите решить пж
F0RQU1N and
02.05.2024, 11:34
C++:
float
distance
=
bet
.
Length
(
)
;
if
(
distance
>=
10
)
{
bet
.
Normalize
(
)
;
c
.
fX
+=
bet
.
fX
*
3
;
c
.
fY
+=
bet
.
fY
*
3
;
c
.
fZ
+=
bet
.
fZ
*
3
;
sendVehicle
(
c
)
;
AddMessageJumpQ
(
reinterpret_cast
(
distance
)
,
1500
,
12
,
true
)
;
time
=
GetTickCount
(
)
;
}
выдаёт ошибку: недопустимое преобразование типа.
помогите решить пж
std::to_string{distance}.c_str()
inexplica
02.05.2024, 13:17
std::to_string{distance}.c_str()
1714641472185.pnginexplica · 2 Май 2024 в 12:17' data-fancybox="lb-post-1490533" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/239012/" style="cursor: pointer;" title="1714641472185.png">
https://forum.antichat.xyz/attachments/28490533/
вайега52
02.05.2024, 13:25
1714642011817.pngвайега52 · 2 Май 2024 в 12:25' data-fancybox="lb-post-1490535" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/239014/" style="cursor: pointer;" title="1714642011817.png">
https://forum.antichat.xyz/attachments/28490535/
Как перевести ImGuiKey в обычную клавишу int?
C++:
if
(
utils
->
isKeyPressed
(
static_cast
(
gConfig
->
data
[
"button"
]
.
get
(
)
)
,
20
)
)
Я уже по разному пробовал, как и метод GetKeyIndex имгуишный и т д, не знаю что делать
Dark_Knight
03.05.2024, 23:54
Как перевести ImGuiKey в обычную клавишу int?
C++:
if
(
utils
->
isKeyPressed
(
static_cast
(
gConfig
->
data
[
"button"
]
.
get
(
)
)
,
20
)
)
Я уже по разному пробовал, как и метод GetKeyIndex имгуишный и т д, не знаю что делать
Ну как бы...
imgui/imgui.h at 0b309471f2ed0117bbffda43684f54404cf14ea2 · ocornut/imgui (https://github.com/ocornut/imgui/blob/0b309471f2ed0117bbffda43684f54404cf14ea2/imgui.h#L182)
Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies - ocornut/imgui
github.com
помоги пожалуйста, как сделать хук входящих пакетов в SAMP API?
Ну как бы...
imgui/imgui.h at 0b309471f2ed0117bbffda43684f54404cf14ea2 · ocornut/imgui (https://github.com/ocornut/imgui/blob/0b309471f2ed0117bbffda43684f54404cf14ea2/imgui.h#L182)
Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies - ocornut/imgui
github.com
Они от 522 (где то так) хранятся, но если вычитать 522, то все равно не тот инт получается, например если Q выбрана, то клавиша, которая получится, если вычесть 522 - это цифра 2
Dark_Knight
04.05.2024, 01:08
Комментарии есть еще. Вариант использовать имгуишный метод проверки нажатия клавиш
imgui/imgui.h at 0b309471f2ed0117bbffda43684f54404cf14ea2 · ocornut/imgui (https://github.com/ocornut/imgui/blob/0b309471f2ed0117bbffda43684f54404cf14ea2/imgui.h#L925)
Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies - ocornut/imgui
github.com
вайега52
04.05.2024, 12:06
помоги пожалуйста, как сделать хук входящих пакетов в SAMP API?
В SAMP-API нет хуков, для удобной работы с ракнет хуками можешь использовать rakhook (https://www.blast.hk/threads/69666/)
Комментарии есть еще. Вариант использовать имгуишный метод проверки нажатия клавиш
imgui/imgui.h at 0b309471f2ed0117bbffda43684f54404cf14ea2 · ocornut/imgui (https://github.com/ocornut/imgui/blob/0b309471f2ed0117bbffda43684f54404cf14ea2/imgui.h#L925)
Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies - ocornut/imgui
github.com
IsKeyPressed вне имгуи = краш, а мне нужно как раз таки извне
UPD. если кому то нужно будет
C++:
std
::
unordered_map
kImGui
=
{
{
ImGuiKey_Tab
,
9
}
,
{
ImGuiKey_LeftArrow
,
37
}
,
{
ImGuiKey_RightArrow
,
39
}
,
{
ImGuiKey_UpArrow
,
38
}
,
{
ImGuiKey_DownArrow
,
40
}
,
{
ImGuiKey_PageUp
,
33
}
,
{
ImGuiKey_PageDown
,
34
}
,
{
ImGuiKey_Home
,
36
}
,
{
ImGuiKey_End
,
35
}
,
{
ImGuiKey_Insert
,
45
}
,
{
ImGuiKey_Delete
,
46
}
,
{
ImGuiKey_Backspace
,
8
}
,
{
ImGuiKey_Space
,
32
}
,
{
ImGuiKey_Enter
,
13
}
,
{
ImGuiKey_Escape
,
27
}
,
{
ImGuiKey_A
,
65
}
,
{
ImGuiKey_B
,
66
}
,
{
ImGuiKey_C
,
67
}
,
{
ImGuiKey_D
,
68
}
,
{
ImGuiKey_E
,
69
}
,
{
ImGuiKey_F
,
70
}
,
{
ImGuiKey_G
,
71
}
,
{
ImGuiKey_H
,
72
}
,
{
ImGuiKey_I
,
73
}
,
{
ImGuiKey_J
,
74
}
,
{
ImGuiKey_K
,
75
}
,
{
ImGuiKey_L
,
76
}
,
{
ImGuiKey_M
,
77
}
,
{
ImGuiKey_N
,
78
}
,
{
ImGuiKey_O
,
79
}
,
{
ImGuiKey_P
,
80
}
,
{
ImGuiKey_Q
,
81
}
,
{
ImGuiKey_R
,
82
}
,
{
ImGuiKey_S
,
83
}
,
{
ImGuiKey_T
,
84
}
,
{
ImGuiKey_U
,
85
}
,
{
ImGuiKey_V
,
86
}
,
{
ImGuiKey_W
,
87
}
,
{
ImGuiKey_X
,
88
}
,
{
ImGuiKey_Y
,
89
}
,
{
ImGuiKey_Z
,
90
}
,
{
ImGuiKey_0
,
48
}
,
{
ImGuiKey_1
,
49
}
,
{
ImGuiKey_2
,
50
}
,
{
ImGuiKey_3
,
51
}
,
{
ImGuiKey_4
,
52
}
,
{
ImGuiKey_5
,
53
}
,
{
ImGuiKey_6
,
54
}
,
{
ImGuiKey_7
,
55
}
,
{
ImGuiKey_8
,
56
}
,
{
ImGuiKey_9
,
57
}
,
{
ImGuiKey_F1
,
112
}
,
{
ImGuiKey_F2
,
113
}
,
{
ImGuiKey_F3
,
114
}
,
{
ImGuiKey_F4
,
115
}
,
{
ImGuiKey_F5
,
116
}
,
{
ImGuiKey_F6
,
117
}
,
{
ImGuiKey_F7
,
118
}
,
{
ImGuiKey_F8
,
119
}
,
{
ImGuiKey_F9
,
120
}
,
{
ImGuiKey_F10
,
121
}
,
{
ImGuiKey_F11
,
122
}
,
{
ImGuiKey_F12
,
123
}
,
{
ImGuiKey_F13
,
124
}
,
{
ImGuiKey_F14
,
125
}
,
{
ImGuiKey_F15
,
126
}
,
{
ImGuiKey_F16
,
127
}
,
{
ImGuiKey_F17
,
128
}
,
{
ImGuiKey_F18
,
129
}
,
{
ImGuiKey_F19
,
130
}
,
{
ImGuiKey_F20
,
131
}
,
{
ImGuiKey_F21
,
132
}
,
{
ImGuiKey_F22
,
133
}
,
{
ImGuiKey_F23
,
134
}
,
{
ImGuiKey_F24
,
135
}
,
{
ImGuiKey_Apostrophe
,
192
}
,
{
ImGuiKey_Comma
,
188
}
,
{
ImGuiKey_Minus
,
189
}
,
{
ImGuiKey_Period
,
190
}
,
{
ImGuiKey_Slash
,
191
}
,
{
ImGuiKey_Semicolon
,
186
}
,
{
ImGuiKey_Equal
,
187
}
,
{
ImGuiKey_LeftBracket
,
219
}
,
{
ImGuiKey_Backslash
,
220
}
,
{
ImGuiKey_RightBracket
,
221
}
,
{
ImGuiKey_GraveAccent
,
192
}
,
{
ImGuiKey_CapsLock
,
20
}
,
{
ImGuiKey_ScrollLock
,
145
}
,
{
ImGuiKey_NumLock
,
144
}
,
{
ImGuiKey_PrintScreen
,
44
}
,
{
ImGuiKey_Pause
,
19
}
,
{
ImGuiKey_Keypad0
,
96
}
,
{
ImGuiKey_Keypad1
,
97
}
,
{
ImGuiKey_Keypad2
,
98
}
,
{
ImGuiKey_Keypad3
,
99
}
,
{
ImGuiKey_Keypad4
,
100
}
,
{
ImGuiKey_Keypad5
,
101
}
,
{
ImGuiKey_Keypad6
,
102
}
,
{
ImGuiKey_Keypad7
,
103
}
,
{
ImGuiKey_Keypad8
,
104
}
,
{
ImGuiKey_Keypad9
,
105
}
,
{
ImGuiKey_KeypadDecimal
,
110
}
,
{
ImGuiKey_KeypadDivide
,
111
}
,
{
ImGuiKey_KeypadMultiply
,
106
}
,
{
ImGuiKey_KeypadSubtract
,
109
}
,
{
ImGuiKey_KeypadAdd
,
107
}
,
{
ImGuiKey_KeypadEnter
,
13
}
,
{
ImGuiKey_KeypadEqual
,
187
}
,
{
ImGuiKey_LeftShift
,
VK_LSHIFT
}
,
{
ImGuiKey_RightShift
,
VK_RSHIFT
}
,
{
ImGuiKey_LeftCtrl
,
VK_LCONTROL
}
,
{
ImGuiKey_RightCtrl
,
VK_RCONTROL
}
,
{
ImGuiKey_LeftAlt
,
VK_LMENU
}
,
{
ImGuiKey_RightAlt
,
VK_RMENU
}
,
{
ImGuiKey_LeftSuper
,
VK_LWIN
}
,
{
ImGuiKey_RightSuper
,
VK_RWIN
}
,
}
;
patrickkoo
05.05.2024, 15:23
Парни такой вопрос как сделать чтобы после того как ты нажал определенную клавишу чтобы длл написанная на с++ нажала F6 и вписала определенный текст можно код с пояснениями
вайега52
06.05.2024, 00:26
Пытаюсь перевести строку из CP1251 в UTF8 для рендера в ImGUI, но результата 0 (в ответ получаю знаки вопроса):
C++:
auto
drawlist
=
ImGui
::
GetBackgroundDrawList
(
)
;
std
::
string huy
=
"huy"
drawlist
->
AddText
(
ImVec2
{
1000
,
100
}
,
0xFFFFFFFF
,
utils
::
convertCP1251ToUTF8
(
huy
.
c_str
(
)
)
)
;
C++:
std
::
string utils
::
CP1251ToUTF8
(
const
char
*
str
)
{
std
::
string res
;
int
result_u
,
result_c
;
result_u
=
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
0
,
0
)
;
if
(
!
result_u
)
return
0
;
wchar_t
*
ures
=
new
wchar_t
[
result_u
]
;
if
(
!
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
ures
,
result_u
)
)
{
delete
[
]
ures
;
return
0
;
}
result_c
=
WideCharToMultiByte
(
CP_UTF8
,
0
,
ures
,
-
1
,
0
,
0
,
0
,
0
)
;
if
(
!
result_c
)
{
delete
[
]
ures
;
return
0
;
}
char
*
cres
=
new
char
[
result_c
]
;
if
(
!
WideCharToMultiByte
(
CP_UTF8
,
0
,
ures
,
-
1
,
cres
,
result_c
,
0
,
0
)
)
{
delete
[
]
cres
;
return
0
;
}
delete
[
]
ures
;
res
.
append
(
cres
)
;
delete
[
]
cres
;
return
res
;
}
Пытаюсь перевести строку из CP1251 в UTF8 для рендера в ImGUI, но результата 0 (в ответ получаю знаки вопроса):
C++:
auto
drawlist
=
ImGui
::
GetBackgroundDrawList
(
)
;
std
::
string huy
=
"huy"
drawlist
->
AddText
(
ImVec2
{
1000
,
100
}
,
0xFFFFFFFF
,
utils
::
convertCP1251ToUTF8
(
huy
.
c_str
(
)
)
)
;
C++:
std
::
string utils
::
CP1251ToUTF8
(
const
char
*
str
)
{
std
::
string res
;
int
result_u
,
result_c
;
result_u
=
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
0
,
0
)
;
if
(
!
result_u
)
return
0
;
wchar_t
*
ures
=
new
wchar_t
[
result_u
]
;
if
(
!
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
ures
,
result_u
)
)
{
delete
[
]
ures
;
return
0
;
}
result_c
=
WideCharToMultiByte
(
CP_UTF8
,
0
,
ures
,
-
1
,
0
,
0
,
0
,
0
)
;
if
(
!
result_c
)
{
delete
[
]
ures
;
return
0
;
}
char
*
cres
=
new
char
[
result_c
]
;
if
(
!
WideCharToMultiByte
(
CP_UTF8
,
0
,
ures
,
-
1
,
cres
,
result_c
,
0
,
0
)
)
{
delete
[
]
cres
;
return
0
;
}
delete
[
]
ures
;
res
.
append
(
cres
)
;
delete
[
]
cres
;
return
res
;
}
Меня спасло, и за тебя помолюсь ( с этим в принципе не нужны приколы с преобразованиями, у меня так )
C++:
#pragma execution_character_set("utf-8")
Musaigen
06.05.2024, 01:58
Пытаюсь перевести строку из CP1251 в UTF8 для рендера в ImGUI, но результата 0 (в ответ получаю знаки вопроса):
C++:
auto
drawlist
=
ImGui
::
GetBackgroundDrawList
(
)
;
std
::
string huy
=
"huy"
drawlist
->
AddText
(
ImVec2
{
1000
,
100
}
,
0xFFFFFFFF
,
utils
::
convertCP1251ToUTF8
(
huy
.
c_str
(
)
)
)
;
C++:
std
::
string utils
::
CP1251ToUTF8
(
const
char
*
str
)
{
std
::
string res
;
int
result_u
,
result_c
;
result_u
=
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
0
,
0
)
;
if
(
!
result_u
)
return
0
;
wchar_t
*
ures
=
new
wchar_t
[
result_u
]
;
if
(
!
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
ures
,
result_u
)
)
{
delete
[
]
ures
;
return
0
;
}
result_c
=
WideCharToMultiByte
(
CP_UTF8
,
0
,
ures
,
-
1
,
0
,
0
,
0
,
0
)
;
if
(
!
result_c
)
{
delete
[
]
ures
;
return
0
;
}
char
*
cres
=
new
char
[
result_c
]
;
if
(
!
WideCharToMultiByte
(
CP_UTF8
,
0
,
ures
,
-
1
,
cres
,
result_c
,
0
,
0
)
)
{
delete
[
]
cres
;
return
0
;
}
delete
[
]
ures
;
res
.
append
(
cres
)
;
delete
[
]
cres
;
return
res
;
}
у тебя память течёт в 20 строке, удали ures
MisterJoule
12.05.2024, 00:05
1715457938229.pngMisterJoule · 11 Май 2024 в 23:05' data-fancybox="lb-post-1495147" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/240154/" style="cursor: pointer;" title="1715457938229.png">
https://forum.antichat.xyz/attachments/28495147/
Помогите пожалуйста)))
Помогите пожалуйста)))
1) Покажи код
2) Скорее всего нужно:
- либо добавить:
#pragma comment (lib, "ws2_32.lib")
- либо убрать инклюд windows.h
MisterJoule
12.05.2024, 01:07
1) Покажи код
2) Скорее всего нужно:
- либо добавить:
#pragma comment (lib, "ws2_32.lib")
- либо убрать инклюд windows.h
Из тогочто ты сказал,ничего не помогло
1715461649516.pngMisterJoule · 12 Май 2024 в 00:07' data-fancybox="lb-post-1495181" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/240176/" style="cursor: pointer;" title="1715461649516.png">
https://forum.antichat.xyz/attachments/28495181/
вайега52
13.05.2024, 23:45
Меня спасло, и за тебя помолюсь ( с этим в принципе не нужны приколы с преобразованиями, у меня так )
C++:
#pragma execution_character_set("utf-8")
Как только не пробовал, ставить кодировку UTF8 в сам файле, ставить префикс u8 перед строкой - все не работает, результат в виде невалидных символов
kin4stat
14.05.2024, 04:05
Как только не пробовал, ставить кодировку UTF8 в сам файле, ставить префикс u8 перед строкой - все не работает, результат в виде невалидных символов
А у тебя к шрифту русские буквы подключены?
вайега52
14.05.2024, 18:10
А у тебя к шрифту русские буквы подключены?
со стандартным шрифтом такая же шняга
Dark_Knight
14.05.2024, 22:00
со стандартным шрифтом такая же шняга
Стандартный кирилицу как бы не поддерживает
MisterJoule
26.05.2024, 00:25
Добрый Вечер,не подскажите ли - имеется ли какие-либо СДК для работы с GUI игры? Для работы с меню паузы и так далее.
Добрый Вечер,не подскажите ли - имеется ли какие-либо СДК для работы с GUI игры? Для работы с меню паузы и так далее.
Plugin SDK (https://github.com/DK22Pac/plugin-sdk). Класс CMenuManager
FindPlayerVehicle(-1, false)->m_matrix->SetRotateX(0.3f); PSDK
Почему машину фиг пойми куда выкидывает?
Rotate происходит, но при этом машину просто непонятно куда выбрасывает
При SetRotateXOnly - сбрасывается весь rotate, и машина теряет угол поворота, куда смотрела
Как машину перевернуть чуть назад то в итоге? Я по разному уже пробовал
В оружии есть sampapi и PSDK
вайега52
31.05.2024, 11:00
Как в рантайме можно менять шрифт ImGUI? Вот такой код крашит с ошибкой
C++:
// function args
auto
fontSize1
=
10.f
;
auto
fontSize2
=
20.f
//
auto
fonts
=
ImGui
::
GetIO
(
)
.
Fonts
;
auto
ranges
=
fonts
->
GetGlyphRangesCyrillic
(
)
;
fonts
->
AddFontFromMemoryTTF
(
testFont
,
sizeof
(
testFont
)
,
fontSize1
,
NULL
,
ranges
)
;
fonts
->
AddFontFromMemoryTTF
(
statusFontBytes
,
sizeof
(
statusFontBytes
)
,
fontSize2
,
NULL
,
ranges
)
;
https://forum.antichat.xyz/attachments/28502763/
Как в рантайме можно менять шрифт ImGUI? Вот такой код крашит с ошибкой
C++:
// function args
auto
fontSize1
=
10.f
;
auto
fontSize2
=
20.f
//
auto
fonts
=
ImGui
::
GetIO
(
)
.
Fonts
;
auto
ranges
=
fonts
->
GetGlyphRangesCyrillic
(
)
;
fonts
->
AddFontFromMemoryTTF
(
testFont
,
sizeof
(
testFont
)
,
fontSize1
,
NULL
,
ranges
)
;
fonts
->
AddFontFromMemoryTTF
(
statusFontBytes
,
sizeof
(
statusFontBytes
)
,
fontSize2
,
NULL
,
ranges
)
;
Нужно до NewFrame обновлять шрифт, и ещё после этого юзать
C++:
io
.
Fonts
->
Build
(
)
;
ImGui_ImplDX9_InvalidateDeviceObjects
(
)
;
Enrique_Alonso
31.05.2024, 16:07
Armeabi-v7a Arm64-v8a
Привет, можно ли переделать [Mobile] AsiLoader (https://www.blast.hk/threads/86435/) и MonetLoader чтоб они работали для архетипа Arm64-v8a, а не только для Armeabi-v7a?
TheJust02
01.06.2024, 10:05
Всем привет. Появилась проблема: Хочу написать dll скрипт, с помощью которого можно уменьшать дальность прорисовки, чтобы повышать таким образом FPS, но почему-то никак не получается это сделать. Единственный адрес памяти, который может изменять прорисовку и который я смог найти – 0xBA6788, но он у меня почему-то не работает. Мой код по идее работает так: на клавишу F12 дистанция прорисовки должна на 500 становится меньше, ну это чисто для теста поставил, надпись "Fog Distance -500" отправляется, а сама прорисовка меньше не становится, может есть какой-нибудь другой адрес? Если что, пишу для CR:MP 0.3e (SA:MP 0.3e)
С++:
case
VK_F12
:
{
*
reinterpret_cast
(
0xBA6788
)
-=
500
;
AddMessageJumpQ
(
(
char
*
)
"Fog Distance -500"
,
1000
,
NULL
,
false
)
;
Sleep
(
100
)
;
break
;
}
как установить imgui? (прост я новичок ток синтаксис выучил, а как устанавливать библиотеку в душе не чаю)
chromiusj
05.06.2024, 13:14
как установить imgui? (прост я новичок ток синтаксис выучил, а как устанавливать библиотеку в душе не чаю)
в смысле установить? может ты имеешь в виду как подключить к проекту?
если первое, то просто скачиваешь релиз отсюда
GitHub - ocornut/imgui: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies (https://github.com/ocornut/imgui)
Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies - ocornut/imgui
github.com
если второе, то вот типо гайда( я по нему делал, но там есть некоторые нюансы не уточненные, нужно версию приложения не забыть поставить соответствующую)
Как подключить PLUGIN SDK к CMAKE проекту?
вайега52
30.06.2024, 09:41
Как подключить PLUGIN SDK к CMAKE проекту?
GitHub - imring/plugin-sdk at cmake (https://github.com/imring/plugin-sdk/tree/cmake)
An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - imring/plugin-sdk
github.com
GitHub - imring/plugin-sdk at cmake (https://github.com/imring/plugin-sdk/tree/cmake)
An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - imring/plugin-sdk
github.com
есть какой то тутор по установке? я вроде сделал все правильно, билд был без ошибок но ничего не работает
пробовал менять пути но нет разницы
есть какой то тутор по установке? я вроде сделал все правильно, билд был без ошибок но ничего не работает
пробовал менять пути но нет разницы
GitHub - xARMORx/SAMP-EmptyProject: Empty project for writing .asi plugins for GTA San Andreas and SAMP (https://github.com/xARMORx/SAMP-EmptyProject)
Empty project for writing .asi plugins for GTA San Andreas and SAMP - xARMORx/SAMP-EmptyProject
github.com
Тут юзается
GitHub - xARMORx/SAMP-EmptyProject: Empty project for writing .asi plugins for GTA San Andreas and SAMP (https://github.com/xARMORx/SAMP-EmptyProject)
Empty project for writing .asi plugins for GTA San Andreas and SAMP - xARMORx/SAMP-EmptyProject
github.com
Тут юзается
спасибо большое, думал что нужно его скачивать и билдить но оказалось все проще чем я думал
В чем проблема? Во время прорисовки радара крашит игру, пробовал сделать многое но результат один. В коде сейчас стандартный код gta_sa.exe но даже при этом происходит краш
https://forum.antichat.xyz/attachments/28514317/
https://forum.antichat.xyz/attachments/28514317/
Andrinall
01.07.2024, 12:09
спасибо большое, думал что нужно его скачивать и билдить но оказалось все проще чем я думал
В чем проблема? Во время прорисовки радара крашит игру, пробовал сделать многое но результат один. В коде сейчас стандартный код gta_sa.exe но даже при этом происходит краш
Там не void (бредовая тема но да)
https://forum.antichat.xyz/attachments/28514405/
Там не void (бредовая тема но да)
пробовал, не работает
Andrinall
01.07.2024, 12:12
пробовал, не работает
Адрес попробуй такой 0x583480 для хука
https://forum.antichat.xyz/attachments/28514407/
Адрес попробуй такой 0x583480 для хука
не-а, я хз в чем проблема (я его тоже пробовал)
обновлю ка я код
https://forum.antichat.xyz/attachments/28514409/
https://forum.antichat.xyz/attachments/28514409/
Andrinall
01.07.2024, 12:34
не-а, я хз в чем проблема (я его тоже пробовал)
обновлю ка я код
У меня кншн щас нет визуалки чтоб протестить конкретно твой код на крестах, но накидал хук на луа и у меня всё работает!
Может ты как-то не так изменяешь данные, что у тебя крашит?
https://forum.antichat.xyz/attachments/28514412/
Lua:
local
ffi
=
require
'ffi'
local
hook
=
require
'hooks'
local
sw
,
sh
=
getScreenResolution
(
)
local
RsGlobals
=
{
maximumWidth
=
sw
,
maximumHeight
=
sh
,
}
ffi
.
cdef
[[
typedef struct CVector2D { float x, y; } CVector2D;
typedef struct RwV2d { float x, y; } RwV2d;
]]
function
radar_position
(
out
,
_in
)
out
[
0
]
.
x
=
0.5
*
(
94.0
*
(
RsGlobals
.
maximumWidth
*
0.0015625
)
)
+
RsGlobals
.
maximumWidth
*
0.0015625
*
40
+
94
*
(
RsGlobals
.
maximumWidth
*
0.0015625
)
*
_in
.
x
*
0.4
out
[
0
]
.
y
=
RsGlobals
.
maximumHeight
-
0.002232143
*
RsGlobals
.
maximumHeight
*
104
+
76
*
(
0.002232143
*
RsGlobals
.
maximumHeight
)
*
0.5
-
76
*
(
0.002232143
*
RsGlobals
.
maximumHeight
)
*
_in
.
y
*
0.5
return
ffi
.
cast
(
'RwV2d*'
,
_in
)
end
function
main
(
)
transformhook
=
hook
.
jmp
.
new
(
'RwV2d*(__cdecl*)(CVector2D* out, CVector2D* in)'
,
radar_position
,
0x583480
)
end
y
У меня кншн щас нет визуалки чтоб протестить конкретно твой код на крестах, но накидал хук на луа и у меня всё работает!
Может ты как-то не так изменяешь данные, что у тебя крашит?
Lua:
local
ffi
=
require
'ffi'
local
hook
=
require
'hooks'
local
sw
,
sh
=
getScreenResolution
(
)
local
RsGlobals
=
{
maximumWidth
=
sw
,
maximumHeight
=
sh
,
}
ffi
.
cdef
[[
typedef struct CVector2D { float x, y; } CVector2D;
typedef struct RwV2d { float x, y; } RwV2d;
]]
function
radar_position
(
out
,
_in
)
out
[
0
]
.
x
=
0.5
*
(
94.0
*
(
RsGlobals
.
maximumWidth
*
0.0015625
)
)
+
RsGlobals
.
maximumWidth
*
0.0015625
*
40
+
94
*
(
RsGlobals
.
maximumWidth
*
0.0015625
)
*
_in
.
x
*
0.4
out
[
0
]
.
y
=
RsGlobals
.
maximumHeight
-
0.002232143
*
RsGlobals
.
maximumHeight
*
104
+
76
*
(
0.002232143
*
RsGlobals
.
maximumHeight
)
*
0.5
-
76
*
(
0.002232143
*
RsGlobals
.
maximumHeight
)
*
_in
.
y
*
0.5
return
ffi
.
cast
(
'RwV2d*'
,
_in
)
end
function
main
(
)
transformhook
=
hook
.
jmp
.
new
(
'RwV2d*(__cdecl*)(CVector2D* out, CVector2D* in)'
,
radar_position
,
0x583480
)
end
не фурычит, какие у тебя значения в RsGlobals потому что у меня они нулевые
Andrinall
01.07.2024, 12:51
y
не фурычит, какие у тебя значения в RsGlobals потому что у меня они нулевые
Вообще это значения screen resolution, установленного в настройках игры, должны быть.
Конкретно у меня это 1600x900
(у меня там кстати очепятка, в PluginSdk это RsGlobal, а не RsGlobals... чисто на 1 символ опечатался у себя в коде. В любом случае я сам задаю значение, а не беру из игры)
Вообще это значения screen resolution, установленного в настройках игры, должны быть.
Конкретно у меня это 1600x900
(у меня там кстати очепятка, в PluginSdk это RsGlobal, а не RsGlobals... чисто на 1 символ опечатался у себя в коде. В любом случае я сам задаю значение, а не беру из игры)
оооочень странно, не работают оба варианта, я думал оно не работает из-за того что в RsGlobal нулевые переменные но нет...
1719824817415.pngyoonost · 1 Июл 2024 в 12:07' data-fancybox="lb-post-1514424" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/245078/" style="cursor: pointer;" title="1719824817415.png">
https://forum.antichat.xyz/attachments/28514424/
Andrinall
01.07.2024, 13:12
оооочень странно, не работают оба варианта, я думал оно не работает из-за того что в RsGlobal нулевые переменные но нет...
Бл попробуй
RwV2d*(__cdecl*)(CVector& out, CVector& in)
Чем чёрт не шутит
Бл попробуй
RwV2d*(__cdecl*)(CVector& out, CVector& in)
Чем чёрт не шутит
Нет -_-
AdCKuY_DpO4uLa
01.07.2024, 14:12
Че за ***ня, оригинал функции верни вместо этих rwssssGloball288, ты же не логику описываешь , а входные данные меняешь
Нет -_-
Че за ***ня, оригинал функции верни вместо этих rwssssGloball288, ты же не логику описываешь , а входные данные меняешь
не много не понял, можешь дать пример? если я верну ориг функции то как он тогда будет данные менять
AdCKuY_DpO4uLa
01.07.2024, 14:29
не много не понял, можешь дать пример? если я верну ориг функции то как он тогда будет данные менять
C++:
return
hook
.
get_trampoline
(
)
(
out
,
in
)
;
C++:
return
hook
.
get_trampoline
(
)
(
out
,
in
)
;
а, не допер сразу о чем ты говоришь
я пробовал это еще 5 часов назад но не работает
AdCKuY_DpO4uLa
01.07.2024, 14:37
полный код кинь
полный код кинь
radar.cpp:
#include "radar.h"
void radar::initialize() {
hookTransformPos.set_dest(0x583480);
hookTransformPos.set_cb(std::bind(&radar::transformPos, this, _1, _2, _3));
hookTransformPos.install();
}
RwV2d* __cdecl radar::transformPos(const decltype(hookTransformPos)& hook, CVector2D* out, CVector2D* in) {
if (FrontEndMenuManager.drawRadarOrMap) {
out->x = FrontEndMenuManager.m_fMapZoom * in->x + FrontEndMenuManager.m_fMapBaseX;
out->y = FrontEndMenuManager.m_fMapBaseY - FrontEndMenuManager.m_fMapZoom * in->y;
}
else {
out->x = 0.5 * (94.0 * (RsGlobal.maximumWidth * 0.0015625)) + RsGlobal.maximumWidth * 0.0015625 * 40.0 + 94.0 * (RsGlobal.maximumWidth * 0.0015625) * in->x * 0.5;
out->y = RsGlobal.maximumHeight - 0.002232143 * RsGlobal.maximumHeight * 104.0 + 76.0 * (0.002232143 * RsGlobal.maximumHeight) * 0.5 - 76.0 * (0.002232143 * RsGlobal.maximumHeight) * in->y * 0.5;
}
return hook.get_trampoline()(out, in);
}
radar.h:
#pragma once
#include
#include
#include
#include
#include
#include "CMenuManager.h"
using namespace plugin;
using namespace std::placeholders;
class radar {
public:
void initialize();
private:
kthook::kthook_simple hookTransformPos {};
RwV2d* __cdecl transformPos(const decltype(hookTransformPos)& hook, CVector2D* out, CVector2D* in);
};
inline radar g_radar;
AdCKuY_DpO4uLa
01.07.2024, 14:55
radar.cpp:
#include "radar.h"
void radar::initialize() {
hookTransformPos.set_dest(0x583480);
hookTransformPos.set_cb(std::bind(&radar::transformPos, this, _1, _2, _3));
hookTransformPos.install();
}
RwV2d* __cdecl radar::transformPos(const decltype(hookTransformPos)& hook, CVector2D* out, CVector2D* in) {
if (FrontEndMenuManager.drawRadarOrMap) {
out->x = FrontEndMenuManager.m_fMapZoom * in->x + FrontEndMenuManager.m_fMapBaseX;
out->y = FrontEndMenuManager.m_fMapBaseY - FrontEndMenuManager.m_fMapZoom * in->y;
}
else {
out->x = 0.5 * (94.0 * (RsGlobal.maximumWidth * 0.0015625)) + RsGlobal.maximumWidth * 0.0015625 * 40.0 + 94.0 * (RsGlobal.maximumWidth * 0.0015625) * in->x * 0.5;
out->y = RsGlobal.maximumHeight - 0.002232143 * RsGlobal.maximumHeight * 104.0 + 76.0 * (0.002232143 * RsGlobal.maximumHeight) * 0.5 - 76.0 * (0.002232143 * RsGlobal.maximumHeight) * in->y * 0.5;
}
return hook.get_trampoline()(out, in);
}
radar.h:
#pragma once
#include
#include
#include
#include
#include
#include "CMenuManager.h"
using namespace plugin;
using namespace std::placeholders;
class radar {
public:
void initialize();
private:
kthook::kthook_simple hookTransformPos {};
RwV2d* __cdecl transformPos(const decltype(hookTransformPos)& hook, CVector2D* out, CVector2D* in);
};
inline radar g_radar;
C++:
class
radar
{
private
:
kthook
::
kthook_simple
TransformRadarPointToScreenSpaceHook
{
}
;
static
void
__cdecl
TransformRadarPointToScreenSpace_HOOKED
(
const
decltype
(
TransformRadarPointToScreenSpaceHook
)
&
hook
,
CVector2D
*
out
,
CVector2D
*
in
)
;
public
:
void
initialize
(
)
;
}
g_radar
;
void
radar
::
initialize
(
)
{
TransformRadarPointToScreenSpaceHook
.
set_dest
(
0x583480
)
;
TransformRadarPointToScreenSpaceHook
.
set_cb
(
&
TransformRadarPointToScreenSpace_HOOKED
)
;
TransformRadarPointToScreenSpaceHook
.
install
(
)
;
}
void
__cdecl radar
::
TransformRadarPointToScreenSpace_HOOKED
(
const
decltype
(
TransformRadarPointToScreenSpaceHook
)
&
hook
,
CVector2D
*
out
,
CVector2D
*
in
)
{
if
(
FrontEndMenuManager
.
drawRadarOrMap
)
{
out
->
x
=
FrontEndMenuManager
.
m_fMapZoom
*
in
->
x
+
FrontEndMenuManager
.
m_fMapBaseX
;
out
->
y
=
FrontEndMenuManager
.
m_fMapBaseY
-
FrontEndMenuManager
.
m_fMapZoom
*
in
->
y
;
}
else
{
out
->
x
=
0.5
*
(
94.0
*
(
RsGlobal
.
maximumWidth
*
0.0015625
)
)
+
RsGlobal
.
maximumWidth
*
0.0015625
*
40.0
+
94.0
*
(
RsGlobal
.
maximumWidth
*
0.0015625
)
*
in
->
x
*
0.5
;
out
->
y
=
RsGlobal
.
maximumHeight
-
0.002232143
*
RsGlobal
.
maximumHeight
*
104.0
+
76.0
*
(
0.002232143
*
RsGlobal
.
maximumHeight
)
*
0.5
-
76.0
*
(
0.002232143
*
RsGlobal
.
maximumHeight
)
*
in
->
y
*
0.5
;
}
//ты ведь в тупую логику переписал?? если так, то не нужно вообще ориг. функцию вызывать, т.к. все рассчеты будут тут
return
;
}
еще я не тестил эту лабуду
C++:
class
radar
{
private
:
kthook
::
kthook_simple
TransformRadarPointToScreenSpaceHook
{
}
;
static
void
__cdecl
TransformRadarPointToScreenSpace_HOOKED
(
const
decltype
(
TransformRadarPointToScreenSpaceHook
)
&
hook
,
CVector2D
*
out
,
CVector2D
*
in
)
;
public
:
void
initialize
(
)
;
}
g_radar
;
void
radar
::
initialize
(
)
{
TransformRadarPointToScreenSpaceHook
.
set_dest
(
0x583480
)
;
TransformRadarPointToScreenSpaceHook
.
set_cb
(
&
TransformRadarPointToScreenSpace_HOOKED
)
;
TransformRadarPointToScreenSpaceHook
.
install
(
)
;
}
void
__cdecl radar
::
TransformRadarPointToScreenSpace_HOOKED
(
const
decltype
(
TransformRadarPointToScreenSpaceHook
)
&
hook
,
CVector2D
*
out
,
CVector2D
*
in
)
{
if
(
FrontEndMenuManager
.
drawRadarOrMap
)
{
out
->
x
=
FrontEndMenuManager
.
m_fMapZoom
*
in
->
x
+
FrontEndMenuManager
.
m_fMapBaseX
;
out
->
y
=
FrontEndMenuManager
.
m_fMapBaseY
-
FrontEndMenuManager
.
m_fMapZoom
*
in
->
y
;
}
else
{
out
->
x
=
0.5
*
(
94.0
*
(
RsGlobal
.
maximumWidth
*
0.0015625
)
)
+
RsGlobal
.
maximumWidth
*
0.0015625
*
40.0
+
94.0
*
(
RsGlobal
.
maximumWidth
*
0.0015625
)
*
in
->
x
*
0.5
;
out
->
y
=
RsGlobal
.
maximumHeight
-
0.002232143
*
RsGlobal
.
maximumHeight
*
104.0
+
76.0
*
(
0.002232143
*
RsGlobal
.
maximumHeight
)
*
0.5
-
76.0
*
(
0.002232143
*
RsGlobal
.
maximumHeight
)
*
in
->
y
*
0.5
;
}
//ты ведь в тупую логику переписал?? если так, то не нужно вообще ориг. функцию вызывать, т.к. все рассчеты будут тут
return
;
}
еще я не тестил эту лабуду
не работает, проверь у себя
логику стандартную использую для теста хука, в будущем буду под плагин делать
https://forum.antichat.xyz/attachments/28517746/
Проще говоря рег каллбэка крашит игру. самп р3
Проще говоря рег каллбэка крашит игру. самп р3
полный код
полный код
C++:
#include "main.h"
bool
isPluginInitialized
=
false
;
//std::unique_ptr pRender = nullptr;
LRESULT __stdcall
WndProcCallBack
(
SAMP
::
CallBacks
::
HookedStructs
::
stWndProcParams
*
params
)
{
if
(
isPluginInitialized
)
{
if
(
ImGui_ImplWin32_WndProcHandler
(
params
->
hWnd
,
params
->
uMsg
,
params
->
wParam
,
params
->
lParam
)
)
{
return
1
;
}
}
return
0
;
//retn null if all good
}
static
bool
isOpen
=
false
;
HRESULT __stdcall
D3DPresentHook
(
SAMP
::
CallBacks
::
HookedStructs
::
stPresentParams
*
params
)
{
if
(
isPluginInitialized
)
{
ImGui_ImplDX9_NewFrame
(
)
;
//вызывалось до инициализации имгуи, поэтому крашило
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
if
(
isOpen
)
{
if
(
ImGui
::
Begin
(
"Тестовое меню##1337"
,
&
isOpen
,
ImGuiWindowFlags_
::
ImGuiWindowFlags_NoSavedSettings
)
)
{
static
bool
bIsDemoWindowActive
=
false
;
ImGui
::
Checkbox
(
"Демо"
,
&
bIsDemoWindowActive
)
;
if
(
bIsDemoWindowActive
)
ImGui
::
ShowDemoWindow
(
&
bIsDemoWindowActive
)
;
for
(
int
i
=
0
;
i
!=
SAMP_MAX_PLAYERS
;
i
++
)
{
if
(
SAMP
::
pSAMP
->
getPlayers
(
)
->
iIsListed
[
i
]
==
0
||
SAMP
::
pSAMP
->
getStreamedOutPlayerInfo
(
)
->
fPlayerPos
[
i
]
[
0
]
==
0
||
SAMP
::
pSAMP
->
getStreamedOutPlayerInfo
(
)
->
fPlayerPos
[
i
]
[
1
]
==
0
||
SAMP
::
pSAMP
->
getStreamedOutPlayerInfo
(
)
->
fPlayerPos
[
i
]
[
2
]
==
0
)
continue
;
ImGui
::
Text
(
"PlayerID: %d, position: %0.f %0.f %0.f"
,
i
,
SAMP
::
pSAMP
->
getStreamedOutPlayerInfo
(
)
->
fPlayerPos
[
i
]
[
0
]
,
SAMP
::
pSAMP
->
getStreamedOutPlayerInfo
(
)
->
fPlayerPos
[
i
]
[
1
]
,
SAMP
::
pSAMP
->
getStreamedOutPlayerInfo
(
)
->
fPlayerPos
[
i
]
[
2
]
)
;
}
if
(
ImGui
::
Button
(
"Отправить пакет"
)
)
{
stOnFootData data
=
SAMP
::
pSAMP
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
data
.
fPosition
[
2
]
+=
10.0f
;
BitStream bs
;
bs
.
Write
(
ID_PLAYER_SYNC
)
;
bs
.
Write
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
SAMP
::
pSAMP
->
getRakNet
(
)
->
Send
(
&
bs
)
;
}
if
(
ImGui
::
Button
(
"Отправить RPC's"
)
)
{
constexpr
char
message
[
]
=
"Тестовое сообщение"
;
BitStream bsSend
;
bsSend
.
Write
(
(
std
::
uint8_t
)
std
::
strlen
(
message
)
)
;
bsSend
.
Write
(
message
,
(
std
::
uint8_t
)
std
::
strlen
(
message
)
)
;
SAMP
::
pSAMP
->
getRakNet
(
)
->
SendRPC
(
RPC_Chat
,
&
bsSend
)
;
}
if
(
ImGui
::
Button
(
"SAMP::classes::"
)
)
{
//WORK on R1 and R3
SAMP
::
classes
::
pChat
->
AddMessage
(
-
1
,
"Тестовое сообщение"
)
;
SAMP
::
classes
::
pGame
->
SetCursorMode
(
SAMP
::
classes
::
CursorMode
::
CMODE_NONE
,
false
)
;
}
for
(
int
i
=
0
;
i
!=
SAMP_MAX_PLAYERS
;
i
++
)
{
if
(
!
SAMP
::
pSAMP
->
getPlayers
(
)
->
IsPlayerStreamed
(
i
)
)
continue
;
#if defined (SAMP_R1_COMPILE)
ImGui
::
Text
(
"name of %d: %s"
,
i
,
SAMP
::
pSAMP
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
szPlayerName
)
;
#elif defined (SAMP_R3_COMPILE)
ImGui
::
Text
(
"name of %d: %s"
,
i
,
SAMP
::
pSAMP
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
PlayerName
.
c_str
(
)
)
;
#endif
}
if
(
ImGui
::
Button
(
"Plugin SDK Teleport"
)
)
{
CVector dest
=
FindPlayerPed
(
)
->
GetPosition
(
)
;
dest
.
z
+=
5.0f
;
FindPlayerPed
(
)
->
Teleport
(
dest
,
false
)
;
}
static
int
vehID
=
0
;
ImGui
::
InputInt
(
"Vehicle ID"
,
&
vehID
)
;
if
(
ImGui
::
Button
(
"тп кар"
)
)
{
if
(
SAMP
::
pSAMP
->
getVehicles
(
)
->
IsVehicleStreamed
(
vehID
)
)
{
SAMP
::
pSAMP
->
getVehicles
(
)
->
GetCVehicleFromSAMPVehicleID
(
vehID
)
->
Teleport
(
FindPlayerPed
(
)
->
GetPosition
(
)
,
false
)
;
}
}
if
(
ImGui
::
Button
(
"emul packet"
)
)
{
stOnFootData data
=
SAMP
::
pSAMP
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
BitStream bs
;
bs
.
Write
(
ID_PLAYER_SYNC
)
;
bs
.
Write
(
49
)
;
//playerID
bs
.
Write
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
SAMP
::
pSAMP
->
getRakNet
(
)
->
EmulPacket
(
&
bs
)
;
}
if
(
ImGui
::
Button
(
"emul rpc"
)
)
{
BitStream bs
;
bs
.
Write
(
0.0f
)
;
bs
.
Write
(
0.0f
)
;
bs
.
Write
(
0.5f
)
;
SAMP
::
pSAMP
->
getRakNet
(
)
->
EmulRPC
(
RPC_ScrSetPlayerVelocity
,
&
bs
)
;
}
ImGui
::
End
(
)
;
}
}
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
//pRender->Initialize(params->pDevice);
//render example
//if (SUCCEEDED(pRender->BeginRender())) {
// pRender->D3DBox(100, 100, 100, 100, 0xFF00BECC);
// pRender->EndRender();
//}
}
return
D3D_OK
;
}
HRESULT __stdcall
D3DResetHook
(
SAMP
::
CallBacks
::
HookedStructs
::
stResetParams
*
params
)
{
if
(
isPluginInitialized
)
{
ImGui_ImplDX9_InvalidateDeviceObjects
(
)
;
//pRender->Invalidate();
}
return
D3D_OK
;
}
bool
__stdcall
RakClientSendHook
(
SAMP
::
CallBacks
::
HookedStructs
::
stRakClientSend
*
params
)
{
if
(
params
->
bitStream
->
GetData
(
)
[
0
]
==
ID_PLAYER_SYNC
)
{
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
IgnoreBits
(
8
)
;
stOnFootData data
=
{
0
}
;
params
->
bitStream
->
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
//data.fMoveSpeed[2] = 1.0f;
params
->
bitStream
->
ResetWritePointer
(
)
;
params
->
bitStream
->
Write
(
ID_PLAYER_SYNC
)
;
params
->
bitStream
->
Write
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
}
return
true
;
}
bool
__stdcall
RakClientRecvHook
(
SAMP
::
CallBacks
::
HookedStructs
::
stRakClientRecv
*
params
)
{
return
true
;
}
bool
__stdcall
RakClientRPCHook
(
SAMP
::
CallBacks
::
HookedStructs
::
stRakClientRPC
*
params
)
{
return
true
;
}
bool
__stdcall
RakClientRPCRecvHook
(
SAMP
::
CallBacks
::
HookedStructs
::
stRakClientRPCRecv
*
params
)
{
return
true
;
}
void
__cdecl
cmd
(
char
*
params
)
{
isOpen
^=
true
;
}
const
char
*
checkAddress
(
const
char
*
ipadress
,
const
char
*
adresses
[
]
,
size_t size
)
{
for
(
size_t i
=
0
;
i
LoadAPI
(
)
)
{
initialized
=
true
;
ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
Fonts
->
AddFontFromFileTTF
(
"C:\\Windows\\Fonts\\Arial.ttf"
,
16
,
NULL
,
ImGui
::
GetIO
(
)
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
(
void
)
io
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
SAMP
::
CallBacks
::
pCallBackRegister
->
GetIDirect3DDevice9
(
)
)
;
ImGui
::
GetIO
(
)
.
ConfigFlags
|=
ImGuiConfigFlags_NoMouseCursorChange
;
//renderф
//pRender = std::make_unique(128);
//initialization
SAMP
::
pSAMP
->
addClientCommand
(
"menu"
,
cmd
)
;
SAMP
::
pSAMP
->
addMessageToChat
(
-
1
,
"SAMP API By AdCKuY_DpO4uLa loaded. %s"
,
SAMP
::
pSAMP
->
getInfo
(
)
->
szIP
)
;
char
*
ipadress
=
SAMP
::
pSAMP
->
getInfo
(
)
->
szIP
;
const
char
*
adresses
[
]
=
{
"46.174.52.144"
,
"37.230.137.194"
,
"37.230.228.142"
}
;
const
char
*
result
=
checkAddress
(
ipadress
,
adresses
,
sizeof
(
adresses
)
/
sizeof
(
adresses
[
0
]
)
)
;
if
(
!
result
)
{
}
//init raknet callbacks
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterRakClientCallback
(
RakClientSendHook
)
;
//registed RakClient Send Hook
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterRakClientCallback
(
RakClientRecvHook
)
;
//registed RakClient Recv Hook
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterRakClientCallback
(
RakClientRPCHook
)
;
//registed RakClient RPC Hook
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterRakClientCallback
(
RakClientRPCRecvHook
)
;
//registed RakClient RPC recv Hook
isPluginInitialized
=
true
;
}
}
if
(
initialized
)
{
//gameLoop
}
}
int
__stdcall
DllMain
(
HMODULE hModule
,
DWORD dwReason
,
LPVOID lpReserved
)
{
switch
(
dwReason
)
{
case
DLL_PROCESS_ATTACH
:
{
SAMP
::
Init
(
)
;
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterGameLoopCallback
(
GameLoop
)
;
//register gameloop hook
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterWndProcCallback
(
WndProcCallBack
)
;
//register wnd proc hook
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterD3DCallback
(
D3DPresentHook
)
;
//register D3D present hook
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterD3DCallback
(
D3DResetHook
)
;
//register D3D reset hook
printf
(
"\n -> Plugin loaded (%d)\n"
,
GetTickCount
(
)
)
;
break
;
}
case
DLL_PROCESS_DETACH
:
{
SAMP
::
pSAMP
->
unregisterChatCommand
(
cmd
)
;
SAMP
::
ShutDown
(
)
;
ImGui_ImplDX9_Shutdown
(
)
;
ImGui_ImplWin32_Shutdown
(
)
;
ImGui
::
DestroyContext
(
)
;
printf
(
"\n -> Plugin unloaded (%d)\n"
,
GetTickCount
(
)
)
;
break
;
}
}
return
true
;
UPD: крашит 12 айди пакета
P.S код не мой
F0RQU1N and
12.07.2024, 06:23
C++:
#include "main.h"
bool
isPluginInitialized
=
false
;
//std::unique_ptr pRender = nullptr;
LRESULT __stdcall
WndProcCallBack
(
SAMP
::
CallBacks
::
HookedStructs
::
stWndProcParams
*
params
)
{
if
(
isPluginInitialized
)
{
if
(
ImGui_ImplWin32_WndProcHandler
(
params
->
hWnd
,
params
->
uMsg
,
params
->
wParam
,
params
->
lParam
)
)
{
return
1
;
}
}
return
0
;
//retn null if all good
}
static
bool
isOpen
=
false
;
HRESULT __stdcall
D3DPresentHook
(
SAMP
::
CallBacks
::
HookedStructs
::
stPresentParams
*
params
)
{
if
(
isPluginInitialized
)
{
ImGui_ImplDX9_NewFrame
(
)
;
//вызывалось до инициализации имгуи, поэтому крашило
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
if
(
isOpen
)
{
if
(
ImGui
::
Begin
(
"Тестовое меню##1337"
,
&
isOpen
,
ImGuiWindowFlags_
::
ImGuiWindowFlags_NoSavedSettings
)
)
{
static
bool
bIsDemoWindowActive
=
false
;
ImGui
::
Checkbox
(
"Демо"
,
&
bIsDemoWindowActive
)
;
if
(
bIsDemoWindowActive
)
ImGui
::
ShowDemoWindow
(
&
bIsDemoWindowActive
)
;
for
(
int
i
=
0
;
i
!=
SAMP_MAX_PLAYERS
;
i
++
)
{
if
(
SAMP
::
pSAMP
->
getPlayers
(
)
->
iIsListed
[
i
]
==
0
||
SAMP
::
pSAMP
->
getStreamedOutPlayerInfo
(
)
->
fPlayerPos
[
i
]
[
0
]
==
0
||
SAMP
::
pSAMP
->
getStreamedOutPlayerInfo
(
)
->
fPlayerPos
[
i
]
[
1
]
==
0
||
SAMP
::
pSAMP
->
getStreamedOutPlayerInfo
(
)
->
fPlayerPos
[
i
]
[
2
]
==
0
)
continue
;
ImGui
::
Text
(
"PlayerID: %d, position: %0.f %0.f %0.f"
,
i
,
SAMP
::
pSAMP
->
getStreamedOutPlayerInfo
(
)
->
fPlayerPos
[
i
]
[
0
]
,
SAMP
::
pSAMP
->
getStreamedOutPlayerInfo
(
)
->
fPlayerPos
[
i
]
[
1
]
,
SAMP
::
pSAMP
->
getStreamedOutPlayerInfo
(
)
->
fPlayerPos
[
i
]
[
2
]
)
;
}
if
(
ImGui
::
Button
(
"Отправить пакет"
)
)
{
stOnFootData data
=
SAMP
::
pSAMP
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
data
.
fPosition
[
2
]
+=
10.0f
;
BitStream bs
;
bs
.
Write
(
ID_PLAYER_SYNC
)
;
bs
.
Write
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
SAMP
::
pSAMP
->
getRakNet
(
)
->
Send
(
&
bs
)
;
}
if
(
ImGui
::
Button
(
"Отправить RPC's"
)
)
{
constexpr
char
message
[
]
=
"Тестовое сообщение"
;
BitStream bsSend
;
bsSend
.
Write
(
(
std
::
uint8_t
)
std
::
strlen
(
message
)
)
;
bsSend
.
Write
(
message
,
(
std
::
uint8_t
)
std
::
strlen
(
message
)
)
;
SAMP
::
pSAMP
->
getRakNet
(
)
->
SendRPC
(
RPC_Chat
,
&
bsSend
)
;
}
if
(
ImGui
::
Button
(
"SAMP::classes::"
)
)
{
//WORK on R1 and R3
SAMP
::
classes
::
pChat
->
AddMessage
(
-
1
,
"Тестовое сообщение"
)
;
SAMP
::
classes
::
pGame
->
SetCursorMode
(
SAMP
::
classes
::
CursorMode
::
CMODE_NONE
,
false
)
;
}
for
(
int
i
=
0
;
i
!=
SAMP_MAX_PLAYERS
;
i
++
)
{
if
(
!
SAMP
::
pSAMP
->
getPlayers
(
)
->
IsPlayerStreamed
(
i
)
)
continue
;
#if defined (SAMP_R1_COMPILE)
ImGui
::
Text
(
"name of %d: %s"
,
i
,
SAMP
::
pSAMP
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
szPlayerName
)
;
#elif defined (SAMP_R3_COMPILE)
ImGui
::
Text
(
"name of %d: %s"
,
i
,
SAMP
::
pSAMP
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
PlayerName
.
c_str
(
)
)
;
#endif
}
if
(
ImGui
::
Button
(
"Plugin SDK Teleport"
)
)
{
CVector dest
=
FindPlayerPed
(
)
->
GetPosition
(
)
;
dest
.
z
+=
5.0f
;
FindPlayerPed
(
)
->
Teleport
(
dest
,
false
)
;
}
static
int
vehID
=
0
;
ImGui
::
InputInt
(
"Vehicle ID"
,
&
vehID
)
;
if
(
ImGui
::
Button
(
"тп кар"
)
)
{
if
(
SAMP
::
pSAMP
->
getVehicles
(
)
->
IsVehicleStreamed
(
vehID
)
)
{
SAMP
::
pSAMP
->
getVehicles
(
)
->
GetCVehicleFromSAMPVehicleID
(
vehID
)
->
Teleport
(
FindPlayerPed
(
)
->
GetPosition
(
)
,
false
)
;
}
}
if
(
ImGui
::
Button
(
"emul packet"
)
)
{
stOnFootData data
=
SAMP
::
pSAMP
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
BitStream bs
;
bs
.
Write
(
ID_PLAYER_SYNC
)
;
bs
.
Write
(
49
)
;
//playerID
bs
.
Write
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
SAMP
::
pSAMP
->
getRakNet
(
)
->
EmulPacket
(
&
bs
)
;
}
if
(
ImGui
::
Button
(
"emul rpc"
)
)
{
BitStream bs
;
bs
.
Write
(
0.0f
)
;
bs
.
Write
(
0.0f
)
;
bs
.
Write
(
0.5f
)
;
SAMP
::
pSAMP
->
getRakNet
(
)
->
EmulRPC
(
RPC_ScrSetPlayerVelocity
,
&
bs
)
;
}
ImGui
::
End
(
)
;
}
}
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
//pRender->Initialize(params->pDevice);
//render example
//if (SUCCEEDED(pRender->BeginRender())) {
// pRender->D3DBox(100, 100, 100, 100, 0xFF00BECC);
// pRender->EndRender();
//}
}
return
D3D_OK
;
}
HRESULT __stdcall
D3DResetHook
(
SAMP
::
CallBacks
::
HookedStructs
::
stResetParams
*
params
)
{
if
(
isPluginInitialized
)
{
ImGui_ImplDX9_InvalidateDeviceObjects
(
)
;
//pRender->Invalidate();
}
return
D3D_OK
;
}
bool
__stdcall
RakClientSendHook
(
SAMP
::
CallBacks
::
HookedStructs
::
stRakClientSend
*
params
)
{
if
(
params
->
bitStream
->
GetData
(
)
[
0
]
==
ID_PLAYER_SYNC
)
{
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
IgnoreBits
(
8
)
;
stOnFootData data
=
{
0
}
;
params
->
bitStream
->
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
//data.fMoveSpeed[2] = 1.0f;
params
->
bitStream
->
ResetWritePointer
(
)
;
params
->
bitStream
->
Write
(
ID_PLAYER_SYNC
)
;
params
->
bitStream
->
Write
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
}
return
true
;
}
bool
__stdcall
RakClientRecvHook
(
SAMP
::
CallBacks
::
HookedStructs
::
stRakClientRecv
*
params
)
{
return
true
;
}
bool
__stdcall
RakClientRPCHook
(
SAMP
::
CallBacks
::
HookedStructs
::
stRakClientRPC
*
params
)
{
return
true
;
}
bool
__stdcall
RakClientRPCRecvHook
(
SAMP
::
CallBacks
::
HookedStructs
::
stRakClientRPCRecv
*
params
)
{
return
true
;
}
void
__cdecl
cmd
(
char
*
params
)
{
isOpen
^=
true
;
}
const
char
*
checkAddress
(
const
char
*
ipadress
,
const
char
*
adresses
[
]
,
size_t size
)
{
for
(
size_t i
=
0
;
i
LoadAPI
(
)
)
{
initialized
=
true
;
ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
Fonts
->
AddFontFromFileTTF
(
"C:\\Windows\\Fonts\\Arial.ttf"
,
16
,
NULL
,
ImGui
::
GetIO
(
)
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
(
void
)
io
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
SAMP
::
CallBacks
::
pCallBackRegister
->
GetIDirect3DDevice9
(
)
)
;
ImGui
::
GetIO
(
)
.
ConfigFlags
|=
ImGuiConfigFlags_NoMouseCursorChange
;
//renderф
//pRender = std::make_unique(128);
//initialization
SAMP
::
pSAMP
->
addClientCommand
(
"menu"
,
cmd
)
;
SAMP
::
pSAMP
->
addMessageToChat
(
-
1
,
"SAMP API By AdCKuY_DpO4uLa loaded. %s"
,
SAMP
::
pSAMP
->
getInfo
(
)
->
szIP
)
;
char
*
ipadress
=
SAMP
::
pSAMP
->
getInfo
(
)
->
szIP
;
const
char
*
adresses
[
]
=
{
"46.174.52.144"
,
"37.230.137.194"
,
"37.230.228.142"
}
;
const
char
*
result
=
checkAddress
(
ipadress
,
adresses
,
sizeof
(
adresses
)
/
sizeof
(
adresses
[
0
]
)
)
;
if
(
!
result
)
{
}
//init raknet callbacks
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterRakClientCallback
(
RakClientSendHook
)
;
//registed RakClient Send Hook
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterRakClientCallback
(
RakClientRecvHook
)
;
//registed RakClient Recv Hook
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterRakClientCallback
(
RakClientRPCHook
)
;
//registed RakClient RPC Hook
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterRakClientCallback
(
RakClientRPCRecvHook
)
;
//registed RakClient RPC recv Hook
isPluginInitialized
=
true
;
}
}
if
(
initialized
)
{
//gameLoop
}
}
int
__stdcall
DllMain
(
HMODULE hModule
,
DWORD dwReason
,
LPVOID lpReserved
)
{
switch
(
dwReason
)
{
case
DLL_PROCESS_ATTACH
:
{
SAMP
::
Init
(
)
;
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterGameLoopCallback
(
GameLoop
)
;
//register gameloop hook
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterWndProcCallback
(
WndProcCallBack
)
;
//register wnd proc hook
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterD3DCallback
(
D3DPresentHook
)
;
//register D3D present hook
SAMP
::
CallBacks
::
pCallBackRegister
->
RegisterD3DCallback
(
D3DResetHook
)
;
//register D3D reset hook
printf
(
"\n -> Plugin loaded (%d)\n"
,
GetTickCount
(
)
)
;
break
;
}
case
DLL_PROCESS_DETACH
:
{
SAMP
::
pSAMP
->
unregisterChatCommand
(
cmd
)
;
SAMP
::
ShutDown
(
)
;
ImGui_ImplDX9_Shutdown
(
)
;
ImGui_ImplWin32_Shutdown
(
)
;
ImGui
::
DestroyContext
(
)
;
printf
(
"\n -> Plugin unloaded (%d)\n"
,
GetTickCount
(
)
)
;
break
;
}
}
return
true
;
UPD: крашит 12 айди пакета
P.S код не мой
мб потому что ты 2 раза регаешь коллбеки?)))
как написать silent aim
типо у меня есть координаты кости головы но я не знаю как изменить координаты пули
как заморозить чела, что бы когда был включен аирбрейк перс не падал
как в samp_api создать команду с параметрами?
скиньте пример пожалуйста
вайега52
22.07.2024, 19:39
как в samp_api создать команду с параметрами?
скиньте пример пожалуйста
C++:
sampapi
::
версия
::
RefInputBox
(
)
->
AddCommand
(
"huy"
,
[
]
(
const
char
*
args
)
{
printf
(
"input: %s"
,
args
)
;
}
)
;
вайега52
22.07.2024, 19:43
как написать silent aim
типо у меня есть координаты кости головы но я не знаю как изменить координаты пули
Перехватывать исходящий пакет bullet sync (https://github.com/BlastHackNet/SAMP-API/blob/6d4db99ab41f19d1a6a7c6cd48f5878bd1e14b62/include/sampapi/0.3.7-R1/Synchronization.h#L99)(в идале также onfoot sync и aim sync) и изменять координаты внутри нее + отправлять рпц о нанесении урона
вайега52
22.07.2024, 19:47
как заморозить чела, что бы когда был включен аирбрейк перс не падал
C++:
auto
ped
=
reinterpret_cast
(
0xB6F5F0
)
;
reinterpret_cast
(
*
ped
+
0x46C
)
=
3
;
https://forum.antichat.xyz/attachments/28521893/
Вопрос касающийся C++.
Разработал клиентский плагин, который отрисовывает неон для определённого автомобиля. (По её идентификатору)
Моя задача синхронизировать это дело с сервером, т.е. я вызываю свою нативную функцию и отправляется пакет, далее я на клиенте принимаю входящий пакет.
Вопрос следующий: Есть какая-то нормальная, в моём понимании "адекватная" библиотека для работы с сетевым движком (RakNet), чтобы я мог отслеживать входящие пакеты. (что-то типа UpdateNetwork)
Прошерстил интернет - такого не нашёл, везде какие-то недописанные ракнеты...
Вопрос касающийся C++.
Разработал клиентский плагин, который отрисовывает неон для определённого автомобиля. (По её идентификатору)
Моя задача синхронизировать это дело с сервером, т.е. я вызываю свою нативную функцию и отправляется пакет, далее я на клиенте принимаю входящий пакет.
Вопрос следующий: Есть какая-то нормальная, в моём понимании "адекватная" библиотека для работы с сетевым движком (RakNet), чтобы я мог отслеживать входящие пакеты. (что-то типа UpdateNetwork)
Прошерстил интернет - такого не нашёл, везде какие-то недописанные ракнеты...
GitHub - imring/RakHook: RakNet events for SA:MP (https://github.com/imring/RakHook)
RakNet events for SA:MP. Contribute to imring/RakHook development by creating an account on GitHub.
github.com
GitHub - imring/RakHook: RakNet events for SA:MP (https://github.com/imring/RakHook)
RakNet events for SA:MP. Contribute to imring/RakHook development by creating an account on GitHub.
github.com
Недавно это использовал, он реально работает?
GitHub - imring/RakHook: RakNet events for SA:MP (https://github.com/imring/RakHook)
RakNet events for SA:MP. Contribute to imring/RakHook development by creating an account on GitHub.
github.com
Кстати, я просто все эти файлы гит клоннул (git clone) к себе в проект, так правильно вообще делать?
И к слову добавить хочу, там есть некоторые ошибки в классе main.cpp
UPD: либа не собирается (всё гуд, собрал)
Я щас в ахуе.. Собрал либу, вст
https://forum.antichat.xyz/attachments/28523665/
роил в проект, ну как следует.
И мой проект компилируется, но я не вижу в компиляции, что подгружается rakhook
Помогите пожалуйста.
Отправляю пакет с сервера, но на клиенте не могу принять..
PACKET_CUSTOM = 251
RPC_HELLOWORLD = 20 (на клиенте тоже самое)
server, send:
new BitStream: bitstream = BS_New();
BS_WriteValue(
bitstream,
PR_UINT8, PACKET_CUSTOM,
PR_UINT32, RPC_HELLOWORLD
);
PR_SendPacket(bitstream, playerid, PR_MEDIUM_PRIORITY, PR_RELIABLE);
BS_Delete(bitstream);
client-side:
rakhook::on_receive_packet += [](Packet* p) -> bool
{
RakNet::BitStream bs(p->data, p->length, false);
uint8_t packetID;
uint32_t rpcID;
bs.ResetReadPointer();
bs.Read(packetID);
bs.Read(rpcID);
if (packetID == 251)
{
if (rpcID == 20)
{
CVehicle* veh = CPools::ms_pVehiclePool->GetAt(1);
Neon.Install(veh, 134, 16, 194);
CMessages::AddMessageJumpQ((char*)"Ccc", 5000, 0, false);
}
}
return true;
};
zxc_paranoik
28.07.2024, 20:58
1.Ваш вопрос Приветствую не могли бы подсказать с чего лучше начать изучать c++
вайега52
06.08.2024, 13:21
Мне нужны адреса памяти, может они у кого-то есть, если поделитесь, было бы здорово:
C++:
SAMP_F1_KEYHANDLER
-
Нужный
0.3
.
7
-
R2
|
0.3
.
7
-
R4
|
0.3
.
7
-
R5
|
SAMP
0.3
DL
SAMP_ANTI_CRASHER
-
Нужный
0.3
.
7
-
R5
SAMP_FPS_UNLOCK
-
Нужный
0.3
.
7
-
R4
|
0.3
.
7
-
R5
sampPatch
[
]
=
"No connecting delay"
-
Нужный
0.3
.7
-
R2
|
0.3
.7
-
R3
|
0.3
.7
-
R4
я так понимаю эти адреса уже есть под R1 или какую-то еще версию, скинь их, не понятно, что именно нужно
0x73616D
07.08.2024, 07:57
Почему крючок не работает?
C++:
[CODE]
#include
#include
#include
#include
using
CTimer__UpdateSignature
=
void
(
__cdecl
*
)
(
)
;
using
WndProcSignature
=
HRESULT
(
__stdcall
*
)
(
HWND
,
UINT
,
WPARAM
,
LPARAM
)
;
using
InitGameInstance
=
HWND
(
__cdecl
*
)
(
HINSTANCE
)
;
kthook
::
kthook_simple
CTimerHook
{
}
;
kthook
::
kthook_signal
hookGameInstanceInit
{
0x745560
}
;
kthook
::
kthook_simple
WndProcHook
{
}
;
HWND gameHwnd
=
[
]
(
)
{
HWND
*
pHwnd
=
*
reinterpret_cast
(
0xC17054
)
;
if
(
pHwnd
!=
nullptr
)
{
return
*
pHwnd
;
}
else
{
hookGameInstanceInit
.
after
+=
[
]
(
const
auto
&
hook
,
HWND
&
returnValue
,
HINSTANCE inst
)
{
gameHwnd
=
returnValue
;
}
;
return
HWND
(
0
)
;
}
}
(
)
;
HRESULT
hWndProc
(
const
decltype
(
WndProcHook
)
&
hook
,
HWND hwnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
std
::
cout
[QUOTE="!Sam#0235"]
Почему крючок не работает?
C++:
[CODE]
#include
#include
#include
#include
using
CTimer__UpdateSignature
=
void
(
__cdecl
*
)
(
)
;
using
WndProcSignature
=
HRESULT
(
__stdcall
*
)
(
HWND
,
UINT
,
WPARAM
,
LPARAM
)
;
using
InitGameInstance
=
HWND
(
__cdecl
*
)
(
HINSTANCE
)
;
kthook
::
kthook_simple
CTimerHook
{
}
;
kthook
::
kthook_signal
hookGameInstanceInit
{
0x745560
}
;
kthook
::
kthook_simple
WndProcHook
{
}
;
HWND gameHwnd
=
[
]
(
)
{
HWND
*
pHwnd
=
*
reinterpret_cast
(
0xC17054
)
;
if
(
pHwnd
!=
nullptr
)
{
return
*
pHwnd
;
}
else
{
hookGameInstanceInit
.
after
+=
[
]
(
const
auto
&
hook
,
HWND
&
returnValue
,
HINSTANCE inst
)
{
gameHwnd
=
returnValue
;
}
;
return
HWND
(
0
)
;
}
}
(
)
;
HRESULT
hWndProc
(
const
decltype
(
WndProcHook
)
&
hook
,
HWND hwnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
std
::
cout
0x73616D
07.08.2024, 10:02
Где установка хука CTimer::Update?
C++:
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
CTimerHook
.
set_dest
(
0x561B10
)
;
CTimerHook
.
set_cb
(
&
CTimer__Update
)
;
CTimerHook
.
install
(
)
;
break
;
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}
walkerdev
10.08.2024, 22:36
Как установить усталость игроку?
Т.е., установить stamina (выносливость) для игрока, у которого запущен данных SF скрипт.
И вопрос, при установке его скорость бега будет видна только ему, или всем игрокам? (быстро бежит/уставший)
Пробовал и через SF->getCleo->opcode, и через reinterpret_cast(0xB7CD84) = 0, и никак =(
если можно реализовать как то без участия SampFuncs, то, подтолкните в нужную сторону, пожалуйста
однако, установка усталости должна идти через мод (т.е. я передаю через ракнет пакет с пользовательской переменной Pawn, а на ее основе устанавливается стамина)
0x73616D
13.08.2024, 19:53
Is there a way to get the string from a textdraw in a loop using RakHook?
Есть ли способ получить строку из зацикленного текстового рисунка с помощью RakHook?
This only works the first time the textdraw is displayed, using while will cause the game to freeze.
Это работает только при первом отображении textdraw, использование while приведет к зависанию игры.
C++:
[CODE]
bool
PluginRPC
::
onShowTextDraw
(
unsigned
char
&
id
,
RakNet
::
BitStream
*
bs
)
{
if
(
id
!=
134
)
{
return
true
;
}
uint16_t
wTextDrawID
;
uint8_t
Flags
;
float
fLetterWidth
;
float
fLetterHeight
;
uint32_t
dLetterColor
;
float
fLineWidth
;
float
fLineHeight
;
uint32_t
dBoxColor
;
uint8_t
Shadow
;
uint8_t
Outline
;
uint32_t
dBackgroundColor
;
uint8_t
Style
;
uint8_t
Selectable
;
float
fX
;
float
fY
;
uint16_t
wModelID
;
float
fRotX
;
float
fRotY
;
float
fRotZ
;
float
fZoom
;
int16_t
wColor1
;
int16_t
wColor2
;
uint16_t
szTextLen
;
std
::
string szText
;
bs
->
Read
(
wTextDrawID
)
;
bs
->
Read
(
Flags
)
;
bs
->
Read
(
fLetterWidth
)
;
bs
->
Read
(
fLetterHeight
)
;
bs
->
Read
(
dLetterColor
)
;
bs
->
Read
(
fLineWidth
)
;
bs
->
Read
(
fLineHeight
)
;
bs
->
Read
(
dBoxColor
)
;
bs
->
Read
(
Shadow
)
;
bs
->
Read
(
Outline
)
;
bs
->
Read
(
dBackgroundColor
)
;
bs
->
Read
(
Style
)
;
bs
->
Read
(
Selectable
)
;
bs
->
Read
(
fX
)
;
bs
->
Read
(
fY
)
;
bs
->
Read
(
wModelID
)
;
bs
->
Read
(
fRotX
)
;
bs
->
Read
(
fRotY
)
;
bs
->
Read
(
fRotZ
)
;
bs
->
Read
(
fZoom
)
;
bs
->
Read
(
wColor1
)
;
bs
->
Read
(
wColor2
)
;
bs
->
Read
(
szTextLen
)
;
szText
.
resize
(
szTextLen
)
;
bs
->
Read
(
szText
.
data
(
)
,
szTextLen
)
;
if
(
wTextDrawID
==
2053
)
{
std
::
string gasolina
=
szText
;
std
::
string gasolinaValue
=
gasolina
;
size_t startPos
=
gasolina
.
find
(
"{"
)
;
size_t endPos
=
gasolina
.
find
(
"}"
)
;
if
(
startPos
!=
std
::
string
::
npos
&&
endPos
!=
std
::
string
::
npos
)
{
gasolinaValue
=
gasolina
.
substr
(
startPos
+
1
,
endPos
-
startPos
-
1
)
;
}
std
::
cout
klyuchik
13.08.2024, 20:51
1.Ваш вопрос: С чего лучше начать изучения языка , желательно видеоролики.
И да я мал по этому и спрашиваю за это так как имею интерес к этому но незнаю с чего начать . Благодарочка всем
вайега52
13.08.2024, 23:31
С чего лучше начать изучения языка , желательно видеоролики.
Для начала тебе стоит выучить базовый синтаксис языка, поэтому вписываешь в ютубе что-то вроде "курс C++ для новичка" и смотришь пару видео. Далее можешь начать читать книжку, лично я читал (но так и не дочитал) Лоспинозо - C++ для профи. Молниеносный старт (2021) (https://www.blast.hk/redirect/aHR0cHM6Ly9kaXNrLnlhbmRleC5ydS9pLzZrSWdnTl9kaUtVaU p3). Потом смотришь чужой код, на том же бластхаке и постепенно пишешь свои проекты
AdCKuY_DpO4uLa
14.08.2024, 01:31
[QUOTE="!Sam#0235"]
Is there a way to get the string from a textdraw in a loop using RakHook?
Есть ли способ получить строку из зацикленного текстового рисунка с помощью RakHook?
This only works the first time the textdraw is displayed, using while will cause the game to freeze.
Это работает только при первом отображении textdraw, использование while приведет к зависанию игры.
C++:
[CODE]
bool
PluginRPC
::
onShowTextDraw
(
unsigned
char
&
id
,
RakNet
::
BitStream
*
bs
)
{
if
(
id
!=
134
)
{
return
true
;
}
uint16_t
wTextDrawID
;
uint8_t
Flags
;
float
fLetterWidth
;
float
fLetterHeight
;
uint32_t
dLetterColor
;
float
fLineWidth
;
float
fLineHeight
;
uint32_t
dBoxColor
;
uint8_t
Shadow
;
uint8_t
Outline
;
uint32_t
dBackgroundColor
;
uint8_t
Style
;
uint8_t
Selectable
;
float
fX
;
float
fY
;
uint16_t
wModelID
;
float
fRotX
;
float
fRotY
;
float
fRotZ
;
float
fZoom
;
int16_t
wColor1
;
int16_t
wColor2
;
uint16_t
szTextLen
;
std
::
string szText
;
bs
->
Read
(
wTextDrawID
)
;
bs
->
Read
(
Flags
)
;
bs
->
Read
(
fLetterWidth
)
;
bs
->
Read
(
fLetterHeight
)
;
bs
->
Read
(
dLetterColor
)
;
bs
->
Read
(
fLineWidth
)
;
bs
->
Read
(
fLineHeight
)
;
bs
->
Read
(
dBoxColor
)
;
bs
->
Read
(
Shadow
)
;
bs
->
Read
(
Outline
)
;
bs
->
Read
(
dBackgroundColor
)
;
bs
->
Read
(
Style
)
;
bs
->
Read
(
Selectable
)
;
bs
->
Read
(
fX
)
;
bs
->
Read
(
fY
)
;
bs
->
Read
(
wModelID
)
;
bs
->
Read
(
fRotX
)
;
bs
->
Read
(
fRotY
)
;
bs
->
Read
(
fRotZ
)
;
bs
->
Read
(
fZoom
)
;
bs
->
Read
(
wColor1
)
;
bs
->
Read
(
wColor2
)
;
bs
->
Read
(
szTextLen
)
;
szText
.
resize
(
szTextLen
)
;
bs
->
Read
(
szText
.
data
(
)
,
szTextLen
)
;
if
(
wTextDrawID
==
2053
)
{
std
::
string gasolina
=
szText
;
std
::
string gasolinaValue
=
gasolina
;
size_t startPos
=
gasolina
.
find
(
"{"
)
;
size_t endPos
=
gasolina
.
find
(
"}"
)
;
if
(
startPos
!=
std
::
string
::
npos
&&
endPos
!=
std
::
string
::
npos
)
{
gasolinaValue
=
gasolina
.
substr
(
startPos
+
1
,
endPos
-
startPos
-
1
)
;
}
std
::
cout
klyuchik
14.08.2024, 20:58
Для начала тебе стоит выучить базовый синтаксис языка, поэтому вписываешь в ютубе что-то вроде "курс C++ для новичка" и смотришь пару видео. Далее можешь начать читать книжку, лично я читал (но так и не дочитал) Лоспинозо - C++ для профи. Молниеносный старт (2021) (https://www.blast.hk/redirect/aHR0cHM6Ly9kaXNrLnlhbmRleC5ydS9pLzZrSWdnTl9kaUtVaU p3). Потом смотришь чужой код, на том же бластхаке и постепенно пишешь свои проекты
Пишет что ссылка не доступна , скинь на гугл диск
вайега52
15.08.2024, 15:59
Пишет что ссылка не доступна , скинь на гугл диск
6.21 MB file on MEGA (https://www.blast.hk/redirect/aHR0cHM6Ly9tZWdhLm56L2ZpbGUvcGswREhhWmIjZlY3NlcwM1 hOREY2Y3Q5YnhPMm9qWFdZLXZDb01yV1FQWk1kZDdhS2N0TQ)
mega.nz
вайега52
15.08.2024, 16:48
как сделать быстрый бег игроку, именно ускорить бег персонажа, а не ускорить всю игру или бег CJ.
Попробуй на постоянке изменять
ped->m_pPlayerData->m_fMoveSpeed
Plugin SDK:
C++:
FindPlayerPed
(
)
->
m_pPlayerData
->
m_fMoveSpeed
=
0.f
;
Ставлю хук, но он не срабатывает при выстреле, в чем проблема может быть?
C++:
using
addBullet
=
bool
(
__cdecl
*
)
(
CEntity
*
,
eWeaponType
,
CVector
,
CVector
)
;
constructor
(
)
{
std
::
uintptr_t base
=
reinterpret_cast
(
GetModuleHandleA
(
"samp.dll"
)
)
;
kthook
::
kthook_simple
(
bullet
)
;
bullet
.
set_cb
(
[
]
(
const
auto
&
hook
,
CEntity
*
eShooter
,
eWeaponType weaponType
,
CVector vecPosition
,
CVector vecVelocity
)
{
sampapi
::
v037r1
::
RefChat
(
)
->
AddMessage
(
-
1
,
(
std
::
to_string
(
(
int
)
weaponType
)
)
.
c_str
(
)
)
;
return
hook
.
get_trampoline
(
)
(
eShooter
,
weaponType
,
vecPosition
,
vecVelocity
)
;
}
)
;
bullet
.
set_dest
(
base
+
0xA0BB0
)
;
bullet
.
install
(
)
;
}
вайега52
16.08.2024, 10:22
Ставлю хук, но он не срабатывает при выстреле, в чем проблема может быть?
C++:
using
addBullet
=
bool
(
__cdecl
*
)
(
CEntity
*
,
eWeaponType
,
CVector
,
CVector
)
;
constructor
(
)
{
std
::
uintptr_t base
=
reinterpret_cast
(
GetModuleHandleA
(
"samp.dll"
)
)
;
kthook
::
kthook_simple
(
bullet
)
;
bullet
.
set_cb
(
[
]
(
const
auto
&
hook
,
CEntity
*
eShooter
,
eWeaponType weaponType
,
CVector vecPosition
,
CVector vecVelocity
)
{
sampapi
::
v037r1
::
RefChat
(
)
->
AddMessage
(
-
1
,
(
std
::
to_string
(
(
int
)
weaponType
)
)
.
c_str
(
)
)
;
return
hook
.
get_trampoline
(
)
(
eShooter
,
weaponType
,
vecPosition
,
vecVelocity
)
;
}
)
;
bullet
.
set_dest
(
base
+
0xA0BB0
)
;
bullet
.
install
(
)
;
}
В чит энджине смотрел, там стоит на месте Хука джамп на аллоциированный адрес и по которому можно будет увидеть следы твоего плагина (в случае ктхука) ?
0x73616D
16.08.2024, 13:28
Как получить статус дверей автомобиля, которым я управляю?
Как узнать состояние двигателя автомобиля, на котором я еду?
Если возможно, это может быть использование адресов памяти.
вайега52
16.08.2024, 13:44
Как узнать состояние двигателя автомобиля, на котором я еду?
SAMP-API/include/sampapi/0.3.DL-1/CVehicle.h at multiver · BlastHackNet/SAMP-API (https://github.com/BlastHackNet/SAMP-API/blob/multiver/include/sampapi/0.3.DL-1/CVehicle.h#L27)
A library for interacting with functions, classes and structures of SA-MP client - BlastHackNet/SAMP-API
github.com
Как узнать статус дверей автомобиля, которым я управляю?
SAMP-API/include/sampapi/0.3.DL-1/CVehicle.h at multiver · BlastHackNet/SAMP-API (https://github.com/BlastHackNet/SAMP-API/blob/multiver/include/sampapi/0.3.DL-1/CVehicle.h#L31)
A library for interacting with functions, classes and structures of SA-MP client - BlastHackNet/SAMP-API
github.com
Нужно отправить дамаг в человека, но ничего не происходит, в чем ошибка? (В первом аргумент отдавал как true, так и false)
https://forum.antichat.xyz/attachments/28530136/
C++:
RakNet
::
BitStream bsDamage
;
bsDamage
.
Write
(
true
)
;
bsDamage
.
Write
(
(
uint16_t
)
nearId
.
first
)
;
bsDamage
.
Write
(
resultDamage
)
;
bsDamage
.
Write
(
(
uint32_t
)
byteWeapon
)
;
bsDamage
.
Write
(
(
uint32_t
)
nearBone
)
;
rakhook
::
emul_rpc
(
115
,
bsDamage
)
;
Вариант ниже тоже не отправляет ничего
C++:
sampapi
::
v037r1
::
RefNetGame
(
)
->
GetPlayerPool
(
)
->
GetLocalPlayer
(
)
->
SendGiveDamage
(
nearId
.
first
,
resultDamage
,
byteWeapon
,
nearBone
)
;
Дебагом когда вывожу - все правильно определяет, проблема ТОЧНО именно в отправке урона
AdCKuY_DpO4uLa
16.08.2024, 20:23
emul_rpc эмулирует входящий рпц, а не отправляет его. Так же нужно отправлять пулю в человека (ID_BULLET_SYNC). Еще желательно слать аим синхну (ID_AIM_SYNC) и онфут синхру (ID_ONFOOT_SYNC), чтобы сервер не кикал за читы
emul_rpc эмулирует входящий рпц, а не отправляет его. Так же нужно отправлять пулю в человека (ID_BULLET_SYNC). Еще желательно слать аим синхну (ID_AIM_SYNC) и онфут синхру (ID_ONFOOT_SYNC), чтобы сервер не кикал за читы
Пуля в человека уже сэмулирована, осталось только урон отправить
manukhov
17.08.2024, 02:25
bsDamage.Write(true);
Первый параметр должен быть false, если речь идет про исходящий урон.
И не совсем понятно зачем тут эмулировать, почему бы просто не отправить?
Задача - повернуть матрицу, как это сделать? Я пробовал уже по разному, разные оси
https://forum.antichat.xyz/attachments/28532555/
И ее нужно повернуть например в противоположном направлении
Матрицу если отдаю измененную в функцию - просто не отображает необходимый мне объект
C++:
RwMatrix
*
matrix
=
RwMatrixCreate
(
)
;
RwV3d axis
=
{
0.f
,
0.f
,
1.f
}
;
RwMatrixRotate
(
matrix
,
&
axis
,
180.f
,
RwOpCombineType
::
rwCOMBINEPOSTCONCAT
)
;
walkerdev
23.08.2024, 11:15
Можно ли каким-то образом добавить прицел для любого оружия? т.е. тот, что на снайперской винтовке 34 id, будет так же и на других видах оружия
as noob as it sounds how can i get health/armor of an enemy player using samp-api, because i get invalid info everytime:
C++:
samp
::
CPlayerInfo
*
pPlayer
=
playerPool
->
GetAt
(
i
)
;
auto
hp
=
remote_player
->
m_onfootData
.
m_nHealth
;
//does work sometimes i think people from that comes to your streamzone gives 0hp
auto
ap
=
remote_player
->
m_onfootData
.
m_nArmor
//does work sometimes i think people from that comes to your streamzone gives 0ap
auto
hpp
=
remote_player
->
m_pPed
->
GetHealth
(
)
;
//always 100
auto
app
=
remote_player
->
m_pPed
->
GetArmour
(
)
;
//always 100
auto
hpp
=
remote_player
->
m_pPed
->
m_pGamePed
->
m_fHealth
;
//always 100 or 0 dont renember
auto
app
=
remote_player
->
m_pPed
->
m_pGamePed
->
m_fArmour
;
//always 100 or 0 dont renember
AdCKuY_DpO4uLa
23.08.2024, 20:48
as noob as it sounds how can i get health/armor of an enemy player using samp-api, because i get invalid info everytime:
C++:
samp
::
CPlayerInfo
*
pPlayer
=
playerPool
->
GetAt
(
i
)
;
auto
hp
=
remote_player
->
m_onfootData
.
m_nHealth
;
//does work sometimes i think people from that comes to your streamzone gives 0hp
auto
ap
=
remote_player
->
m_onfootData
.
m_nArmor
//does work sometimes i think people from that comes to your streamzone gives 0ap
auto
hpp
=
remote_player
->
m_pPed
->
GetHealth
(
)
;
//always 100
auto
app
=
remote_player
->
m_pPed
->
GetArmour
(
)
;
//always 100
auto
hpp
=
remote_player
->
m_pPed
->
m_pGamePed
->
m_fHealth
;
//always 100 or 0 dont renember
auto
app
=
remote_player
->
m_pPed
->
m_pGamePed
->
m_fArmour
;
//always 100 or 0 dont renember
C++:
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pPools
->
m_pPlayer
->
m_pObject
[
i
]
->
m_pPlayer
->
m_pPed
->
GetHealth
(
)
;
вайега52
01.09.2024, 11:39
Как правильно работать с рендером через
CSprite2D::Draw
?
C++:
CRect rect
;
rect
.
left
=
-
0.5f
;
rect
.
top
=
-
0.5f
;
rect
.
right
=
RsGlobal
.
maximumWidth
;
rect
.
bottom
=
RsGlobal
.
maximumHeight
;
sprite
.
Draw
(
rect
,
{
0xFF
,
0xFF
,
0xFF
,
0xFF
}
)
;
Картинка рендерится, однако получается что-то не то:
1725176334028.pngвайега52 · 1 Сен 2024 в 10:39' data-fancybox="lb-post-1535509" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/250825/" style="cursor: pointer;" title="1725176334028.png">
https://forum.antichat.xyz/attachments/28535509/
Как правильно работать с рендером через
CSprite2D::Draw
?
C++:
CRect rect
;
rect
.
left
=
-
0.5f
;
rect
.
top
=
-
0.5f
;
rect
.
right
=
RsGlobal
.
maximumWidth
;
rect
.
bottom
=
RsGlobal
.
maximumHeight
;
sprite
.
Draw
(
rect
,
{
0xFF
,
0xFF
,
0xFF
,
0xFF
}
)
;
Картинка рендерится, однако получается что-то не то:
Потому что от 0.0 до 1.0 пробуй. Или от 0.0 до 640. 0.0 до 360.0
manukhov
14.09.2024, 20:21
Как правильно работать с рендером через
CSprite2D::Draw
?
C++:
CRect rect
;
rect
.
left
=
-
0.5f
;
rect
.
top
=
-
0.5f
;
rect
.
right
=
RsGlobal
.
maximumWidth
;
rect
.
bottom
=
RsGlobal
.
maximumHeight
;
sprite
.
Draw
(
rect
,
{
0xFF
,
0xFF
,
0xFF
,
0xFF
}
)
;
Картинка рендерится, однако получается что-то не то:
А попробуй так
C++:
CRect rect
;
rect
.
left
=
1.0f
;
rect
.
top
=
0.5f
;
rect
.
right
=
RsGlobal
.
maximumWidth
+
1.0f
;
rect
.
bottom
=
RsGlobal
.
maximumHeight
+
0.5f
;
sprite
.
Draw
(
rect
,
{
0xFF
,
0xFF
,
0xFF
,
0xFF
}
)
;
вайега52
14.09.2024, 20:26
А попробуй так
C++:
CRect rect
;
rect
.
left
=
1.0f
;
rect
.
top
=
0.5f
;
rect
.
right
=
RsGlobal
.
maximumWidth
+
1.0f
;
rect
.
bottom
=
RsGlobal
.
maximumHeight
+
0.5f
;
sprite
.
Draw
(
rect
,
{
0xFF
,
0xFF
,
0xFF
,
0xFF
}
)
;
дело, если правильно помню, было не в координатах, а в том, что рендерил не в том месте, не в то время (не в пресенте напрямую, а в хуке PlayerTags::DrawLabel)
Как вообще работает антистан?
Я правильно понимаю, что есть состояния игрока, которые сервер получает?
Как получить, что игрок с каким-то ID (любой) находится в АФК? Через нотепад весь сампапи перебрал, там нет ничего связанного с АФК 0.0
Решение: sampapi::v037r1::RefNetGame()->GetPlayerPool()->GetPlayer(id)->m_nStatus == 2
vmprotect
04.10.2024, 17:11
где находится переменная в самп r3 которая отвечает за хранение денег найти не могу в idb
вайега52
04.10.2024, 19:49
есть ли у кого offset id скина?
plugin-sdk/plugin_sa/game_sa/CEntity.h at master · DK22Pac/plugin-sdk (https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CEntity.h#L64)
An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk
github.com
C++:
auto
skinId
=
FindPlayerPed
(
)
->
m_nModelIndex
;
printf
(
"skin: %d\n"
,
skinId
)
vmprotect
08.10.2024, 20:55
ищу адрес отвечающий за лимиты скинов (r3)
Lance_Sterling
08.10.2024, 21:08
ищу адрес отвечающий за лимиты скинов (r3)
В сампе если не ошибаюсь нет лимитов для скинов, а вот в самой гташке есть
vmprotect
09.10.2024, 08:44
В сампе если не ошибаюсь нет лимитов для скинов, а вот в самой гташке есть
а что за функция тогда отвечает за установку скина?
Lance_Sterling
09.10.2024, 11:26
а что за функция тогда отвечает за установку скина?
plugin-sdk/plugin_sa/game_sa/CPed.h at 12487f6be7846946802497d7471f8c58473b3cd6 · DK22Pac/plugin-sdk (https://github.com/DK22Pac/plugin-sdk/blob/12487f6be7846946802497d7471f8c58473b3cd6/plugin_sa/game_sa/CPed.h#L439)
An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk
github.com
Как получить ид игрока через sampapi (https://github.com/BlastHackNet/SAMP-API/tree/multiver)
вайега52
12.10.2024, 12:02
Как получить ид игрока через sampapi (https://github.com/BlastHackNet/SAMP-API/tree/multiver)
ид какого игрока?
ид какого игрока?
локального (свой)
вайега52
12.10.2024, 12:10
локального (свой)
C++:
auto
id
=
sampapi
::
v037r3
::
RefNetGame
(
)
.
GetPlayerPool
(
)
.
m_localInfo
.
m_nId
;
вайега52
13.10.2024, 00:32
Из-за чего может не реагировать менюшка на курсор (нажатия, растягивание), при этом скролл меню при помощи колесика и шифта работает?
C++:
void
menu
::
set_visible
(
bool
visible
)
{
this
->
visible
=
visible
;
if
(
!
visible
)
sampapi
::
v037r3
::
RefGame
(
)
->
SetCursorMode
(
sampapi
::
v037r3
::
CURSOR_NONE
,
1
)
;
;
}
void
menu
::
present
(
)
{
if
(
!
visible
)
return
;
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
ImGui
::
SetNextWindowPos
(
ImVec2
(
RsGlobal
.
maximumWidth
/
2
,
RsGlobal
.
maximumHeight
/
2
)
,
ImGuiCond_FirstUseEver
,
ImVec2
(
0.5
,
0.5
)
)
;
ImGui
::
SetNextWindowSize
(
ImVec2
(
700
,
420
)
,
ImGuiCond_FirstUseEver
)
;
if
(
ImGui
::
Begin
(
"abcde"
,
nullptr
,
ImGuiWindowFlags_NoCollapse
)
)
{
sampapi
::
v037r3
::
RefGame
(
)
->
SetCursorMode
(
sampapi
::
v037r3
::
CURSOR_LOCKCAM
,
0
)
;
// render
ImGui
::
End
(
)
;
}
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
}
bool
menu
::
wndproc
(
HWND hwnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
switch
(
uMsg
)
{
case
WM_CHAR
:
{
wchar_t
wch
;
MultiByteToWideChar
(
CP_ACP
,
MB_PRECOMPOSED
,
reinterpret_cast
(
&
wParam
)
,
1
,
&
wch
,
1
)
;
wParam
=
wch
;
break
;
}
case
WM_KEYUP
:
if
(
wParam
==
VK_ESCAPE
)
set_visible
(
false
)
;
break
;
}
ImGui_ImplWin32_WndProcHandler
(
hwnd
,
uMsg
,
wParam
,
lParam
)
;
auto
&
io
=
ImGui
::
GetIO
(
)
;
if
(
io
.
WantCaptureKeyboard
||
io
.
WantCaptureMouse
)
{
return
false
;
}
return
true
;
}
Из-за чего может не реагировать менюшка на курсор (нажатия, растягивание), при этом скролл меню при помощи колесика и шифта работает?
C++:
void
menu
::
set_visible
(
bool
visible
)
{
this
->
visible
=
visible
;
if
(
!
visible
)
sampapi
::
v037r3
::
RefGame
(
)
->
SetCursorMode
(
sampapi
::
v037r3
::
CURSOR_NONE
,
1
)
;
;
}
void
menu
::
present
(
)
{
if
(
!
visible
)
return
;
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
ImGui
::
SetNextWindowPos
(
ImVec2
(
RsGlobal
.
maximumWidth
/
2
,
RsGlobal
.
maximumHeight
/
2
)
,
ImGuiCond_FirstUseEver
,
ImVec2
(
0.5
,
0.5
)
)
;
ImGui
::
SetNextWindowSize
(
ImVec2
(
700
,
420
)
,
ImGuiCond_FirstUseEver
)
;
if
(
ImGui
::
Begin
(
"abcde"
,
nullptr
,
ImGuiWindowFlags_NoCollapse
)
)
{
sampapi
::
v037r3
::
RefGame
(
)
->
SetCursorMode
(
sampapi
::
v037r3
::
CURSOR_LOCKCAM
,
0
)
;
// render
ImGui
::
End
(
)
;
}
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
}
bool
menu
::
wndproc
(
HWND hwnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
switch
(
uMsg
)
{
case
WM_CHAR
:
{
wchar_t
wch
;
MultiByteToWideChar
(
CP_ACP
,
MB_PRECOMPOSED
,
reinterpret_cast
(
&
wParam
)
,
1
,
&
wch
,
1
)
;
wParam
=
wch
;
break
;
}
case
WM_KEYUP
:
if
(
wParam
==
VK_ESCAPE
)
set_visible
(
false
)
;
break
;
}
ImGui_ImplWin32_WndProcHandler
(
hwnd
,
uMsg
,
wParam
,
lParam
)
;
auto
&
io
=
ImGui
::
GetIO
(
)
;
if
(
io
.
WantCaptureKeyboard
||
io
.
WantCaptureMouse
)
{
return
false
;
}
return
true
;
}
C++:
if
(
io
.
WantCaptureKeyboard
||
io
.
WantCaptureMouse
)
{
return
true
;
}
как вызвать эту функу?
#include "CAutomobile.h"
FixTyre()
Кто то работал с номерами GTA? Нужно установить кастомный номер на машину, а получается пока только на модель. Помогите.
C++:
srand
(
static_cast
(
time
(
0
)
)
)
;
int
randomNumber
=
1000
+
rand
(
)
%
49001
;
char
randomPlateText
[
9
]
;
sprintf
(
randomPlateText
,
"%d"
,
randomNumber
)
;
const
auto
plateRaster
=
RwRasterCreate
(
64
,
16
,
32
,
rwRASTERFORMAT888
|
rwRASTERPIXELLOCKEDWRITE
)
;
if
(
!
plateRaster
)
return
true
;
if
(
!
RwTextureGetRaster
(
pCharsetTex
)
)
{
RwRasterDestroy
(
plateRaster
)
;
return
true
;
}
if
(
!
RenderLicenseplateTextToRaster
(
randomPlateText
,
RwTextureGetRaster
(
pCharsetTex
)
,
CCustomCarPlateMgr
::
pPalette1555Tab
[
ResolvePlateType
(
modelInfo
->
m_nPlateType
)
]
,
plateRaster
)
)
{
RwRasterDestroy
(
plateRaster
)
;
return
true
;
}
if
(
const
auto
plateTex
=
RwTextureCreate
(
plateRaster
)
)
{
RwTextureSetName
(
plateTex
,
randomPlateText
)
;
RwTextureSetFilterMode
(
plateTex
,
rwFILTERNEAREST
)
;
}
Пробовали этим способом, ставит только на передний номер.
Почему игра может вылетать?
deletee:
void
deletee
(
const
char
*
params
)
{
auto
id
=
atoi
(
params
)
;
sampapi
::
v037r3
::
RefNetGame
(
)
->
GetPlayerPool
(
)
->
GetPlayer
(
id
)
->
Remove
(
)
;
}
вайега52
18.10.2024, 23:52
Почему игра может вылетать?
deletee:
void
deletee
(
const
char
*
params
)
{
auto
id
=
atoi
(
params
)
;
sampapi
::
v037r3
::
RefNetGame
(
)
->
GetPlayerPool
(
)
->
GetPlayer
(
id
)
->
Remove
(
)
;
}
я бы добавил обработчик исключений для atoi + добавил проверку на то, что игрок с таким id существует
я бы добавил обработчик исключений для atoi + добавил проверку на то, что игрок с таким id существует
Да именно крашит когда существующий ид игрока (в зоне стрима) ввожу. Если игрока нет в зоне стрима - ничего не происходит.
maksmanus228
19.10.2024, 04:06
Крашит при вызове RefNetGame::GetRakClient, имеется rce фикс, самп р3
Lance_Sterling
19.10.2024, 04:42
Крашит при вызове RefNetGame::GetRakClient, имеется rce фикс, самп р3
Покажи код
maksmanus228
19.10.2024, 06:11
Покажи код
RakNet::BitStream stream {};
stream.Write("hui");
GetRefGame()->GetRakClient()->Send(&stream, HIGH_PRIORITY, RELIABLE_ORDERED, 0);
пишет что адрес памяти 0x2C недоступен
Как можно в sampapi выключить коллизию у объекта? (определенного по id) в cobject не нашел ничего связанного с этим
вайега52
20.10.2024, 16:25
Как можно в sampapi выключить коллизию у объекта? (определенного по id) в cobject не нашел ничего связанного с этим
CObject наследуется от CEntity, то есть имеет все его поля
SAMP-API/include/sampapi/0.3.7-R3-1/CEntity.h at 6d4db99ab41f19d1a6a7c6cd48f5878bd1e14b62 · BlastHackNet/SAMP-API (https://github.com/BlastHackNet/SAMP-API/blob/6d4db99ab41f19d1a6a7c6cd48f5878bd1e14b62/include/sampapi/0.3.7-R3-1/CEntity.h#L56)
A library for interacting with functions, classes and structures of SA-MP client - BlastHackNet/SAMP-API
github.com
Почему крашит при использовании?
C++:
sampapi
::
v037r1
::
RefNetGame
(
)
->
GetPlayerPool
(
)
->
GetLocalPlayer
(
)
->
m_onfootData
.
m_controllerState
.
m_bRightShoulder1
Это в условие сую, как я понял, плагин вызывает краш на этапе с GetLocalPlayer
Криво косо что-то попытался сделать так sampapi::v037r1::CLocalPlayer* localPlayer = *(sampapi::v037r1::CLocalPlayer**)0xB6F5F0;
Но не срабатывало, хоть краш и пропал 😅
maksmanus228
01.11.2024, 14:42
добрый день, у меня есть новая функция UpdateNetwork (пока что переписанная с idb сампа) и у меня крашит игра при попытке прописать packet->data
вот код
void __fastcall SSmpPackets::UpdateNetwork(CNetGame* game, void* edx)
{
Packet* packet = nullptr;
uint8_t* localdata = nullptr;
uint8_t state {};
for(packet = game->m_pRakClient->Receive(); packet; packet = game->m_pRakClient->Receive())
{
localdata = packet->data;
if(*localdata == 40) state = localdata[5];
switch(state)
{
case 12:
game->Packet_AuthKey(packet);
break;
case 29:
{
AddDebugMessage("The server didn't respond. Retrying..");
game->m_nGameState = 1;
break;
}
case 31:
{
AddDebugMessage("The server didn't respond. Retrying..");
break;
}
case 32:
game->Packet_DisconnectionNotification(packet);
break;
case 33:
game->Packet_ConnectionLost(packet);
break;
case 34:
game->Packet_ConnectionSucceeded(packet);
break;
case 35:
AddDebugMessage("Failed to initialize encryption.");
break;
case 36:
AddDebugMessage("You are banned from this server.");
break;
case 37:
{
AddDebugMessage("Wrong server password.");
game->m_pRakClient->Disconnect(0, 0);
break;
}
case 200:
game->Packet_VehicleSync(packet);
break;
case 203:
game->Packet_AimSync(packet);
break;
case 206:
game->Packet_BulletSync(packet);
break;
case 207:
game->Packet_PlayerSync(packet);
break;
case 208:
game->Packet_MarkersSync(packet);
break;
case 209:
game->Packet_UnoccupiedSync(packet);
break;
case 210:
game->Packet_TrailerSync(packet);
break;
case 211:
game->Packet_PassengerSync(packet);
break;
default: break;
}
game->m_pRakClient->DeallocatePacket(packet);
}
}
В чем может быть дело? структура Packet взяты из этого репозитория:
рак нет для сампа (https://github.com/DpO4uLa/SAMP_API/blob/main/SAMP_API_ONE_HEADER/SAMP/RakNet/NetworkTypes.h)
и еще: работает ли правильно структура Packet2 от этого же репозитория
вайега52
01.11.2024, 17:12
m_pRakClient->Receive
может возвращать nullptr, поэтому проверяй, что пакет и дата в нем указывают на данные
EclipsedFlow
01.11.2024, 21:27
Что стало с выгрузкой ASI файлов при выгрузке(иногда даже загрузке)?
Все Visual C++ 2005-2022 установлены.
Раньше стабильно загружал/выгружал через консоль SF (pload, pfree) - сейчас ловлю краш игры.
При попытке отладить стек вызовов направляет на ntdll модуль. При ещё более подробной отладке выяснил что после вызова DLLMain со статусом DLL_PROCESS_DETACH проходит корректно и дальше уходит в dll_main_dispatch и внутрение штуки виндовс.
Данную штуку не проверял на обычной сборке, может вне запуска аризоны через лаунчер работает все корректно.
вайега52
01.11.2024, 22:13
Что стало с выгрузкой ASI файлов при выгрузке(иногда даже загрузке)?
Все Visual C++ 2005-2022 установлены.
Раньше стабильно загружал/выгружал через консоль SF (pload, pfree) - сейчас ловлю краш игры.
При попытке отладить стек вызовов направляет на ntdll модуль. При ещё более подробной отладке выяснил что после вызова DLLMain со статусом DLL_PROCESS_DETACH проходит корректно и дальше уходит в dll_main_dispatch и внутрение штуки виндовс.
Данную штуку не проверял на обычной сборке, может вне запуска аризоны через лаунчер работает все корректно.
а плагин может быть даже пустым и крашить? он точно не оставляет никаких своих следов в игре?
EclipsedFlow
02.11.2024, 18:57
а плагин может быть даже пустым и крашить? он точно не оставляет никаких своих следов в игре?
Решил проблему. Оказалось краш происходил из-за не корректного хука dx9 (present, reset).
Заюзал пример из этого треда и выгрузка работает на УРА.
Линк - LINK (https://www.blast.hk/threads/113060/)
EclipsedFlow
04.11.2024, 00:27
Как исправить рендер текста кириллицы из текст_дравов. Шрифт имгуи точно поддерживает кириллицу. При дебаге текст так-же валидный, а на рисовке уже покрывается знаками вопроса.
Юзаю смейк проект, стандарт С++ 20, sampapi
https://forum.antichat.xyz/attachments/28556841/
https://forum.antichat.xyz/attachments/28556841/
kin4stat
04.11.2024, 02:51
Как исправить рендер текста кириллицы из текст_дравов. Шрифт имгуи точно поддерживает кириллицу. При дебаге текст так-же валидный, а на рисовке уже покрывается знаками вопроса.
Юзаю смейк проект, стандарт С++ 20, sampapi
imgui понимает текст только в utf8, самп - только в cp1251. Конвертируй кодировки
EclipsedFlow
18.11.2024, 23:49
Как корректно получить киррилицу при хуке rpc 134(RPC_ScrShowTextDraw).
https://forum.antichat.xyz/attachments/28562260/
C++:
rakhook
::
on_receive_rpc
+=
[
]
(
unsigned
char
&
id
,
RakNet
::
BitStream
*
bs
)
->
bool
{
// Версия сампа R1/R3
if
(
id
==
134
)
// RPC_ScrShowTextDraw
{
WORD TID
,
TLen
;
char
Text
[
1024
]
;
bs
->
Read
(
TID
)
;
bs
->
IgnoreBits
(
504
)
;
bs
->
Read
(
TLen
)
;
bs
->
Read
(
Text
,
TLen
)
;
bs
->
ResetReadPointer
(
)
;
Text
[
TLen
]
=
'\0'
;
SendChatMessage
(
"[%d]: %s"
,
TID
,
Text
)
;
}
return
true
;
}
;
вайега52
18.11.2024, 23:51
Как корректно получить киррилицу при хуке rpc 134(RPC_ScrShowTextDraw).
C++:
rakhook
::
on_receive_rpc
+=
[
]
(
unsigned
char
&
id
,
RakNet
::
BitStream
*
bs
)
->
bool
{
// Версия сампа R1/R3
if
(
id
==
134
)
// RPC_ScrShowTextDraw
{
WORD TID
,
TLen
;
char
Text
[
1024
]
;
bs
->
Read
(
TID
)
;
bs
->
IgnoreBits
(
504
)
;
bs
->
Read
(
TLen
)
;
bs
->
Read
(
Text
,
TLen
)
;
bs
->
ResetReadPointer
(
)
;
Text
[
TLen
]
=
'\0'
;
SendChatMessage
(
"[%d]: %s"
,
TID
,
Text
)
;
}
return
true
;
}
;
Исходник - Гайд - Для новичков в Lua | Русские буквы в TextDraw (https://www.blast.hk/threads/33537/)
Русские буквы в TextDraw Для того, чтобы использовать русские буквы текстдравах, нам понадобится таблица: Каждая буква имеет свой символ ( написан после = ), вставив который вы получите ту русскую букву, у которой брали символ. Для тех кто не понял - прикрепил снизу два скрипта. Один из них...
www.blast.hk
chopisat
20.11.2024, 17:13
static_assert failed: 'Unexpected std::string sizeof.' при сборке sf плагина
EclipsedFlow
25.11.2024, 01:34
Возникли проблемы с хуком функции для SetGameKeyState(CPad_UpdateKeyStates, вроде так называется). Раньше работала нормально в проекте когда юзал(тогда юзал другой хукер к слову), а сейчас вылетает много исключений и краш. Вот мой хук который я использую. Правильно все с кодом?
C++:
kthook
::
kthook_simple
hookKeys
{
}
;
auto
CPad_UpdateKeyGame_HOOK
=
[
]
(
const
decltype
(
hookKeys
)
&
hook
,
CPad
*
pPad
,
int
a2
)
->
BYTE
{
if
(
isPluginInitialize
)
{
// do work...
}
return
hook
.
get_trampoline
(
)
(
pPad
,
a2
)
;
}
;
// install
hookKeys
.
set_cb
(
CPad_UpdateKeyGame_HOOK
)
;
hookKeys
.
set_dest
(
0x541E17
)
;
hookKeys
.
install
(
)
;
// remove
hookKeys
.
remove
(
)
;
EclipsedFlow
08.12.2024, 01:19
Возникли проблемы с хуком функции для SetGameKeyState(CPad_UpdateKeyStates, вроде так называется). Раньше работала нормально в проекте когда юзал(тогда юзал другой хукер к слову), а сейчас вылетает много исключений и краш. Вот мой хук который я использую. Правильно все с кодом?
C++:
kthook
::
kthook_simple
hookKeys
{
}
;
auto
CPad_UpdateKeyGame_HOOK
=
[
]
(
const
decltype
(
hookKeys
)
&
hook
,
CPad
*
pPad
,
int
a2
)
->
BYTE
{
if
(
isPluginInitialize
)
{
// do work...
}
return
hook
.
get_trampoline
(
)
(
pPad
,
a2
)
;
}
;
// install
hookKeys
.
set_cb
(
CPad_UpdateKeyGame_HOOK
)
;
hookKeys
.
set_dest
(
0x541E17
)
;
hookKeys
.
install
(
)
;
// remove
hookKeys
.
remove
(
)
;
Все ещё актуально, параллельно сам пробую, но если кто-то раньше подскажет - буду благодарен
Все ещё актуально, параллельно сам пробую, но если кто-то раньше подскажет - буду благодарен
Это из-за того что SF тоже хукает CPad::Update(). Пролог метода изменяется на прыжок в функцию SF
Как выглядит стандартный пролог CPad::Update()
Знімок екрана 2024-12-08 004842.pngARMOR · 8 Дек 2024 в 01:50' data-fancybox="lb-post-1568288" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/258971/" style="cursor: pointer;" title="Знімок екрана 2024-12-08 004842.png">
https://forum.antichat.xyz/attachments/28568288/
Пролог CPad::Update() с накатаным SF:
https://forum.antichat.xyz/attachments/28568288/
EclipsedFlow
08.12.2024, 07:56
Это из-за того что SF тоже хукает CPad::Update(). Пролог метода изменяется на прыжок в функцию SF
Как выглядит стандартный пролог CPad::Update()
Пролог CPad::Update() с накатаным SF:
Спасибо за ответ. И каким образом можно перехукать например?
Спасибо за ответ. И каким образом можно перехукать например?
Почему бы не поставить хук на хук
Dark_Knight
09.12.2024, 21:30
Почему бы не поставить хук на хук
Через минхук
Почему бы не поставить хук на хук
не всегда сработает, к примеру бандикам поллит адрес своего хука и если ставишь свой он ставит свой поверх и хуячит твой.
можно поставить хук после пролога - на 5 байт дальше начала функции условно. по крайней мере, так я пофиксил работу с бандикамом в ультравх.
не всегда сработает, к примеру бандикам поллит адрес своего хука и если ставишь свой он ставит свой поверх и хуячит твой.
можно поставить хук после пролога - на 5 байт дальше начала функции условно. по крайней мере, так я пофиксил работу с бандикамом в ультравх.
Я имел ввиду поставить хук на чужой детур
Приветствую, решил подогнать лоадер с метод инъекции SetWindowsHookEx, изменял только FindWindowA, но лоадер стопается на моменте [ERROR]: please, start game, что не так?
C++:
[CODE]
#include "loaderFree.hpp"
void
downloadFile
(
const
char
*
dllLink
,
const
char
*
dllPath
)
{
URLDownloadToFileA
(
0
,
dllLink
,
dllPath
,
0
,
0
)
;
DeleteUrlCacheEntryA
(
dllLink
)
;
std
::
cout
[QUOTE="geteo"]
Приветствую, решил подогнать лоадер с метод инъекции SetWindowsHookEx, изменял только FindWindowA, но лоадер стопается на моменте [ERROR]: please, start game, что не так?
C++:
[CODE]
#include "loaderFree.hpp"
void
downloadFile
(
const
char
*
dllLink
,
const
char
*
dllPath
)
{
URLDownloadToFileA
(
0
,
dllLink
,
dllPath
,
0
,
0
)
;
DeleteUrlCacheEntryA
(
dllLink
)
;
std
::
cout
Попробуй так
HWND hWnd = FindWindowA(NULL, "GTA:SA:MP");
+ старт программы от имени админа
Теперь ошибка с LoadLibrary, cannot load software
Dark_Knight
15.12.2024, 02:50
Теперь ошибка с LoadLibrary, cannot load software
Возращай код ошибки через GetLastError и уже её гугли
Возращай код ошибки через GetLastError и уже её гугли
Поток 17688 завершился с кодом 1 (0x1).
ERROR_INVALID_FUNCTION
1 (0x1)
Incorrect function.
Поток 17688 завершился с кодом 1 (0x1).
ERROR_INVALID_FUNCTION
1 (0x1)
Incorrect function.
обрати внимание, что твой ехешник должен быть х32, соответствуя игре
обрати внимание, что твой ехешник должен быть х32, соответствуя игре
Перебрал все ошибки мира, а вот оно какое оказалось решение..
обрати внимание, что твой ехешник должен быть х32, соответствуя игре
А вот ещё один вопрос, использую usermode mmap IAT, игру просто всегда крашит, пробывал так же древнейший mmap thread hijacking - результат один и тоже, это так же из-за x32 архитектуры этой прекрасной игры?
GitHub - wtf-keaton/x32-Kernelmode-manual-mapping-through-IAT (https://github.com/wtf-keaton/x32-Kernelmode-manual-mapping-through-IAT)
Contribute to wtf-keaton/x32-Kernelmode-manual-mapping-through-IAT development by creating an account on GitHub.
github.com
https://forum.antichat.xyz/attachments/28571313/
b
Пасаны как сделать инжект закриптованного кода в память с последующим декриптом так-же в памяти. XDD
Кто шарит хелпаните молодому
Upd: пояснение
Допустим есть строка
system("calc");
Я ее хуярю методом AES и получается так - +P8Sq1XJLtk3kns608sfcg== (huihuihuihuihui1 Это ключ)
Загружаю в память и там ее расшифровываю обратно в исполняемый код и там он уже исполняется. (Можно в целом и в байтовом виде или ассемблерном мне до пизды как, главное чтоб работало ) Последний раз с памятью я работал в шараге на Turbo-C
Пасаны как сделать инжект закриптованного кода в память с последующим декриптом так-же в памяти. XDD
Кто шарит хелпаните молодому
А можно русским языком.
Декриптом это ты о чём?
А можно русским языком.
Декриптом это ты о чём?
upd сверху
мистер вселенная
24.12.2024, 15:24
как получить данные из входящего от сервера RPC (кастомный рпс)
AdCKuY_DpO4uLa
24.12.2024, 16:08
как получить данные из входящего от сервера RPC (кастомный рпс)
SAMP_SDK/SAMP_API_REMASTERED/main.cpp at 20f6db662727eccddadfc5305e422741fecc1f1f · DpO4uLa/SAMP_SDK (https://github.com/DpO4uLa/SAMP_SDK/blob/20f6db662727eccddadfc5305e422741fecc1f1f/SAMP_API_REMASTERED/main.cpp#L23)
Ремастер SDK для быстрого взаимодействия с SA-MP & GTA SA - DpO4uLa/SAMP_SDK
github.com
мистер вселенная
29.12.2024, 15:38
как получить разбита ли фара у машины?
как получить разбита ли фара у машины?
вы, вероятно, можете проверить это с помощью этих функций.
Build software better, together (https://github.com/search?q=repo%3ABlastHackNet%2Fmod_sa+GetLightStat us&type=code)
GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over 420 million projects.
github.com
C++:
CVehicle
*
cveh
=
getSelfCVehicle
(
)
;
//0-off light on-1+
for
(
size_t i
=
0
;
i
GetDamageManager
(
)
->
GetLightStatus
(
i
)
)
;
}
//damage status panels
for
(
size_t i
=
0
;
i
GetDamageManager
(
)
->
GetPanelStatus
(
i
)
)
;
}
нужно проверить какому ID панели соответствует отражатель и какому статусу соответствует поврежденный отражатель
Damage Status - SA-MP Wiki (https://sampwiki.blast.hk/wiki/DamageStatus)
sampwiki.blast.hk
Как color перевести в RGB и обратно? Так же этот RGB передать в AddMessage (RefChat)
Очень поможет, может глупый вопрос, но все же
Не надо выдавать ответы гадая, будьте добры, мне нужен корректный ответ который написан не на рандом, что color состоит из r g b давайте разобьем и т.д.
Я несколько раз пытался, криво косо получается и не выдает нужный мне цвет, поэтому пришел сюда за помощью
C++:
rakhook
::
on_receive_rpc
+=
[
]
(
unsigned
char
&
id
,
RakNet
::
BitStream
*
bs
)
->
bool
{
if
(
id
==
93
)
{
bs
->
ResetReadPointer
(
)
;
uint32_t
color
;
bs
->
Read
(
color
)
;
Как color перевести в RGB и обратно? Так же этот RGB передать в AddMessage (RefChat)
Очень поможет, может глупый вопрос, но все же
Не надо выдавать ответы гадая, будьте добры, мне нужен корректный ответ который написан не на рандом, что color состоит из r g b давайте разобьем и т.д.
Я несколько раз пытался, криво косо получается и не выдает нужный мне цвет, поэтому пришел сюда за помощью
C++:
rakhook
::
on_receive_rpc
+=
[
]
(
unsigned
char
&
id
,
RakNet
::
BitStream
*
bs
)
->
bool
{
if
(
id
==
93
)
{
bs
->
ResetReadPointer
(
)
;
uint32_t
color
;
bs
->
Read
(
color
)
;
вам нужно преобразовать int в HEX (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNT EwMDcxOC9pbnRlZ2VyLXRvLWhleC1zdHJpbmctaW4tYw), а затем в RGB (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMz cyMzg0Ni9jb252ZXJ0LWZyb20taGV4LWNvbG9yLXRvLXJnYi1z dHJ1Y3QtaW4tYw).Проблема в том, что, насколько я проверил, цвет, который мы читаем, не соответствует цвету сообщения. Может быть, самп конвертирует int в hex по-другому?
Однако исходный формат — RGBA, а не RGB, отсюда и путаница. Это весь код, который меняет DWCOLOR на RGB и наоборот.
Жду вашей реакции 👍, пишите, если что-то не поняли.
dwcolor to rgb:
[CODE]
void
inttorgb
(
int
color
,
int
colors
[
3
]
)
{
colors
[
0
]
=
(
color
>>
16
)
&
0xFF
;
colors
[
1
]
=
(
color
>>
8
)
&
0xFF
;
colors
[
2
]
=
color
&
0xFF
;
}
case
RPC_ClientMessage
:
{
BitStream
bsData
(
rpcParams
->
input
,
rpcParams
->
numberOfBitsOfData
/
8
,
false
)
;
uint32_t
dwStrLen
;
uint32_t
dwColor
;
char
szMsg
[
1000
]
;
static
char
last_servermsg
[
256
]
;
static
DWORD allow_show_again
=
0
;
bsData
.
Read
(
dwColor
)
;
bsData
.
Read
(
dwStrLen
)
;
if
(
dwStrLen
>=
sizeof
(
szMsg
)
)
dwStrLen
=
sizeof
(
szMsg
)
-
1
;
bsData
.
Read
(
szMsg
,
dwStrLen
)
;
szMsg
[
dwStrLen
]
=
'\0'
;
std
::
stringstream ss
;
ss
https://forum.antichat.xyz/attachments/28575124/
1. Пытаюсь создать педа в сампе, через plugin-sdk. Мой код:
code:
CPed* ped = nullptr;
CVector vector{ x, y, z };
if (type == CPedType::CIVILIAN_PED) {
CStreaming::RequestModel(modelId, GAME_REQUIRED);
CStreaming::LoadAllRequestedModels(false);
CStreaming::SetModelIsDeletable(modelId);
ped = new CCivilianPed(ePedType::PED_TYPE_CIVMALE, modelId);
}
if (type == CPedType::COP_PED) {
/*CStreaming::RequestModel(modelId, eStreamingFlags::GAME_REQUIRED);
CStreaming::LoadAllRequestedModels(false);*/
ped = new CCopPed(eCopType::COP_TYPE_CITYCOP);
}
if (type == CPedType::FIREMAN_PED) {
CStreaming::RequestModel(modelId, eStreamingFlags::GAME_REQUIRED);
CStreaming::LoadAllRequestedModels(true);
ped = new CEmergencyPed(ePedType::PED_TYPE_FIREMAN, modelId);
}
if (type == CPedType::MEDIC_PED) {
CStreaming::RequestModel(modelId, eStreamingFlags::GAME_REQUIRED);
CStreaming::LoadAllRequestedModels(true);
ped = new CEmergencyPed(ePedType::PED_TYPE_MEDIC, modelId);
}
ped->m_nCreatedBy = 2;
ped->m_pIntelligence->SetPedDecisionMakerType(-1);
ped->m_pIntelligence->SetSeeingRange(30.0);
ped->m_pIntelligence->SetHearingRange(30.0);
ped->m_pIntelligence->m_fDmRadius = 0.0f;
ped->m_pIntelligence->m_nDmNumPedsToScan = 0;
ped->SetPosn(vector);
ped->SetOrientation(0.f, 0.f, 0.f);
CWorld::Add(ped);
CPedStruct* pedStruct = new CPedStruct(type, modelId, x, y, z, ped);
m_Peds.push_back(pedStruct);
Итог - не вижу педа на заданных координатах
Кто-то говорит, что SA:MP что-то хукает, ломает игру, и по этому не получается сделать это.
Помогите.
Ребят, есть ли какой то фреймворк для самп аси который работает на всех верзиях 0.3.7 ? Я попробывал ASI-Framework но потом понял что он только для 0.3.7. Или какая таблица со офсетами адресов может быть пригодится.
yung milonov
09.01.2025, 01:33
В SA:MP какой лимит скинов? Я так понял +- до id 319.
на форумах по павно пишут что 30 скинов поверх можно закинуть, дальше только fastman limit adjuster ставить
Лимит скинов сампа (https://www.blast.hk/threads/179698/post-1325496)
Всем Здравствуйте! Задаюсь таким вопросом почему у меня вылетает самп когда я добавляю скин дальше 318, когда я добавляю 319 скин игра перестает работать, когда удаляю все отлично работает. Есть ли у сампа какой то лимит скинов? Если да то как этот лимит обойти?
www.blast.hk
Что-то нет ясной информации, поэтому хочу узнать
Как расширить лимиты у сампапи на скины/кол-во машин и т.д.?
Что-то нет ясной информации, поэтому хочу узнать
Как расширить лимиты у сампапи на скины/кол-во машин и т.д.?
У самп апи нет такой возможности. Калькор кажется при добавлении подгрузки кастомных моделей создает свой массив CModelInfo::ms_aModelInfo и копирует в него значения с игрового, и кастомные модели в свой массив уже и записывает
https://forum.antichat.xyz/attachments/28577721/
И потом при использовании моделей получает информацию о них таким методом:
https://forum.antichat.xyz/attachments/28577721/
marqusss_
14.01.2025, 16:17
Помогите кто знает что за библиотека тут используется
Отдельный респект если скажете как ее установить в моем случае на VS22
Если что sampapi скачан и добавлен правильноВот:
CVehicle* car = FindPlayerVehicle(0, false);
std::string gearStatus;
if (!car) {
gearStatus = "no-data";
}
else {
gearStatus = std::to_string(car->m_nCurrentGear);
}
вайега52
14.01.2025, 17:14
Помогите кто знает что за библиотека тут используется
Отдельный респект если скажете как ее установить в моем случае на VS22
Если что sampapi скачан и добавлен правильноВот:
CVehicle* car = FindPlayerVehicle(0, false);
std::string gearStatus;
if (!car) {
gearStatus = "no-data";
}
else {
gearStatus = std::to_string(car->m_nCurrentGear);
}
Plugin sdk
marqusss_
14.01.2025, 18:39
Plugin sdk
можно узнать как его в свой проект установить?
мистер вселенная
15.01.2025, 17:37
как проверить открыт ли чат у другого игрока? (строка ввода)
AdCKuY_DpO4uLa
15.01.2025, 18:57
как проверить открыт ли чат у другого игрока? (строка ввода)
никак
вайега52
15.01.2025, 20:06
как проверить открыт ли чат у другого игрока? (строка ввода)
если у тебя свой сервак, то отправляй на сервер пакет о том. что открыт в хуке CInput::Enable и тоже самое с закрытием внутри CInput::Disable, на сервере через какой-нибудь павн.ракнет обрабатывать это и отправлять пакет о том, что у кого-то там открыт чат игрокам в зоне стрима к примеру
Nerry12345
16.01.2025, 19:27
Как получить пакет SyncPlayerData именно локал игрока и как получить игрока по айди?
Вопрос 1: как заменить FindPlayerVehicle в коде ниже используя только sampapi
Вопрос 2: как с помощью sampapi узнать айди скина на игроке
Код:
CVehicle* car = FindPlayerVehicle(0, false);
if (!car)
return "no-data";
return to_string(car->m_nCurrentGear);
Ты где в самп апи нашёл функции и поля классов из ПСДК?
marqusss_
17.01.2025, 22:44
Лад а на 2 вопрос хоть ответ можно?
как с помощью sampapi узнать айди скина на игроке
как с помощью sampapi узнать айди скина на игроке(при спавне)
Ответ:
namespace samp = sampapi::v037r3; - либо ваша версия
samp::RefNetGame()->GetPlayerPool()->GetLocalPlayer()->m_spawnInfo.m_nSkin
мистер вселенная
23.01.2025, 00:26
кто то знает как отключить кастомные структуры моделей в сампе? нужно для анлимита на IDE обьекты (выше 20к)
Добавил кастомную машину в игру с помощью FLA, пропатчил клиент и сервер, все окей, синхронизация имеется.
Но вот незадача, пытаюсь вывести TextDrawSetPreviewModel с новой машиной и пустота...
Как с этим бороться ?
Добавил кастомную машину в игру с помощью FLA, пропатчил клиент и сервер, все окей, синхронизация имеется.
Но вот незадача, пытаюсь вывести TextDrawSetPreviewModel с новой машиной и пустота...
Как с этим бороться ?
Патчил добавление моделей на текстдравы? Вот например у транспорта проверка на модель
https://forum.antichat.xyz/attachments/28580883/
1737602989060.pngARMOR · 23 Янв 2025 в 06:30' data-fancybox="lb-post-1580883" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/262309/" style="cursor: pointer;" title="1737602989060.png">
https://forum.antichat.xyz/attachments/28580883/
вайега52
23.01.2025, 08:40
Патчил добавление моделей на текстдравы? Вот например у транспорта проверка на модель
Это надо правильно патчить, чтобы нормальные текстдравы не крашили
Патчил добавление моделей на текстдравы? Вот например у транспорта проверка на модель
Нет, не патчил. Подскажите адрес памяти для r3?
В целом с тяжестью нахожу какие-то куски, реверся samp.dll через IDA PRO, возможно есть какие-то более внятные источники, где можно посмотреть код сампа.
В идеале конечно узнать, откуда Ваш скрин взят)
AdCKuY_DpO4uLa
23.01.2025, 18:37
Нет, не патчил. Подскажите адрес памяти для r3?
В целом с тяжестью нахожу какие-то куски, реверся samp.dll через IDA PRO, возможно есть какие-то более внятные источники, где можно посмотреть код сампа.
В идеале конечно узнать, откуда Ваш скрин взят)
GitHub - Northn/SAMP_IDBs (https://github.com/Northn/SAMP_IDBs)
Contribute to Northn/SAMP_IDBs development by creating an account on GitHub.
github.com
GitHub - Northn/SAMP_IDBs (https://github.com/Northn/SAMP_IDBs)
Contribute to Northn/SAMP_IDBs development by creating an account on GitHub.
github.com
https://forum.antichat.xyz/attachments/28581058/
У меня это выглядит подобным образом(не так подробно, как у парня сверху). Я пропатчил адрес, заменив числа 263u на те, что мне нужны, но эффекта по прежнему 0. Что делаю не так?
https://forum.antichat.xyz/attachments/28581058/
У меня это выглядит подобным образом(не так подробно, как у парня сверху). Я пропатчил адрес, заменив числа 263u на те, что мне нужны, но эффекта по прежнему 0. Что делаю не так?
Удалось всё таки пропатчить, патчил не то место. Но вопрос остаётся актуальным, у меня часть в псевдокоде нормально выглядит, а часть подобным образом. Может я как-то не так открываю idb? Хотелось бы, чтобы было как у ARMOR
Удалось всё таки пропатчить, патчил не то место. Но вопрос остаётся актуальным, у меня часть в псевдокоде нормально выглядит, а часть подобным образом. Может я как-то не так открываю idb? Хотелось бы, чтобы было как у ARMOR
Потому что в большинстве случаев я использую свою базу для 0.3.DL которую делал сам на основе баз от #Northn и допиливал нужные части сам. Тебе нужно:
1. Изменить проверки которые как либо проверяют модели игры
2. Изменить указатель CModelInfo::ms_aModelsInfoPtrs на указатель от FLA в функции GetModelInfoPtr
CModelInfo::ms_aModelsInfoPtrs
Подскажешь адрес для R3 или хотя бы как в реверсе этот участок выглядит? Я постараюсь найти аналогичным образом, как и с твоим скрином выше
И за что именно отвечает данная область?
thelupa1488
27.01.2025, 00:56
Здарова, хочу сделать рендер руды (external) на амайзинге samp R3, но не могу правильно получить адрес объекта
Структуры:
enum Limits
{
SAMP_MAX_ACTORS = 1000,
SAMP_MAX_PLAYERS = 1004,
SAMP_MAX_VEHICLES = 2000,
SAMP_MAX_PICKUPS = 4096,
SAMP_MAX_OBJECTS = 1000,
SAMP_MAX_GANGZONES = 1024,
SAMP_MAX_3DTEXTS = 2048,
SAMP_MAX_TEXTDRAWS = 2048,
SAMP_MAX_PLAYERTEXTDRAWS = 256,
SAMP_MAX_CLIENTCMDS = 144,
SAMP_MAX_MENUS = 128,
SAMP_MAX_PLAYER_NAME = 24,
SAMP_ALLOWED_PLAYER_NAME_LENGTH = 20,
SAMP_MAX_MAPICONS = 100,
};
struct stObject {
char pad_0[6];
int m_nModel;
char pad_1;
bool m_bDontCollideWithCamera;
float m_fDrawDistance;
float field_0;
float m_position[3];
float m_fDistanceToCamera;
bool m_bDrawLast;
char pad_2[64];
float m_rotation[3];
char pad_3[5];
unsigned short m_nAttachedToVehicle;
unsigned short m_nAttachedToObject;
float m_attachOffset[3];
float m_attachRotation[3];
char field_1;
float m_targetMatrix[4][4];
char pad_4[148];
char m_bMoving;
float m_fSpeed;
char pad_5[99];
};
struct stObjectPool
{
int m_nLargestId;
BOOL m_bNotEmpty[SAMP_MAX_OBJECTS];
stObject* m_pObject[SAMP_MAX_OBJECTS];
};
Получение объекта:
uint32_t dwSAMPModule = pGTA->get_module_address("azmp.dll");
uint32_t dwSampInfo = pGTA->read(dwSAMPModule + 0x26E8DC);
uint32_t dwPools = pGTA->read(dwSampInfo + 0x3DE);
uint32_t dwObjects = pGTA->read(dwPools + 0x14);
stObjectPool m_Object = pGTA->read(dwObjects);
for (int i = 0; i read(dwObj);
int iModel = obj.m_nModel;
}
вайега52
27.01.2025, 15:55
Здарова, хочу сделать рендер руды (external) на амайзинге samp R3, но не могу правильно получить адрес объекта
Структуры:
enum Limits
{
SAMP_MAX_ACTORS = 1000,
SAMP_MAX_PLAYERS = 1004,
SAMP_MAX_VEHICLES = 2000,
SAMP_MAX_PICKUPS = 4096,
SAMP_MAX_OBJECTS = 1000,
SAMP_MAX_GANGZONES = 1024,
SAMP_MAX_3DTEXTS = 2048,
SAMP_MAX_TEXTDRAWS = 2048,
SAMP_MAX_PLAYERTEXTDRAWS = 256,
SAMP_MAX_CLIENTCMDS = 144,
SAMP_MAX_MENUS = 128,
SAMP_MAX_PLAYER_NAME = 24,
SAMP_ALLOWED_PLAYER_NAME_LENGTH = 20,
SAMP_MAX_MAPICONS = 100,
};
struct stObject {
char pad_0[6];
int m_nModel;
char pad_1;
bool m_bDontCollideWithCamera;
float m_fDrawDistance;
float field_0;
float m_position[3];
float m_fDistanceToCamera;
bool m_bDrawLast;
char pad_2[64];
float m_rotation[3];
char pad_3[5];
unsigned short m_nAttachedToVehicle;
unsigned short m_nAttachedToObject;
float m_attachOffset[3];
float m_attachRotation[3];
char field_1;
float m_targetMatrix[4][4];
char pad_4[148];
char m_bMoving;
float m_fSpeed;
char pad_5[99];
};
struct stObjectPool
{
int m_nLargestId;
BOOL m_bNotEmpty[SAMP_MAX_OBJECTS];
stObject* m_pObject[SAMP_MAX_OBJECTS];
};
Получение объекта:
uint32_t dwSAMPModule = pGTA->get_module_address("azmp.dll");
uint32_t dwSampInfo = pGTA->read(dwSAMPModule + 0x26E8DC);
uint32_t dwPools = pGTA->read(dwSampInfo + 0x3DE);
uint32_t dwObjects = pGTA->read(dwPools + 0x14);
stObjectPool m_Object = pGTA->read(dwObjects);
for (int i = 0; i read(dwObj);
int iModel = obj.m_nModel;
}
используй sampapi (https://github.com/BlastHackNet/SAMP-API/tree/multiver/src/sampapi/0.3.7-R3-1)
thelupa1488
28.01.2025, 19:33
используй sampapi (https://github.com/BlastHackNet/SAMP-API/tree/multiver/src/sampapi/0.3.7-R3-1)
Спасибо, я решил использовать поиск объектов из гта, а не сампа, так что вопрос отпал
Пытаюсь собрать один сурс чита. Установил plugin sdk, скомпил все как надо. При сборки колотит мозги с Sefetyhooks а именно - (Не удается открыть файл включение: expected: No such file or directory), ответили в одной из тем нужно изменить стандарт C++ при компилировании plugin sdk, хотя он и так по умолчанию стоял latest, в чем может быть проблема?
(так же при компилировании использую сборку визуалки 19 года, т.к на 22 ошибок 100+, так же незнаю почему - Directx SDK установлен)
как id машины получить через sampapi или plugin sdk
и как из uint16_t сделать cvehicle
Receiver
16.02.2025, 01:18
как id машины получить через sampapi или plugin sdk
Получить откуда? Из CVehicle?
и как из uint16_t сделать cvehicle
Если твой uint16_t это индекс машины в пуле: https://github.com/BlastHackNet/SAM...b62/src/sampapi/0.3.7-R1/CVehiclePool.cpp#L82 (https://github.com/BlastHackNet/SAMP-API/blob/6d4db99ab41f19d1a6a7c6cd48f5878bd1e14b62/src/sampapi/0.3.7-R1/CVehiclePool.cpp#L82)
Получить откуда? Из CVehicle?
Если твой uint16_t это индекс машины в пуле: https://github.com/BlastHackNet/SAM...b62/src/sampapi/0.3.7-R1/CVehiclePool.cpp#L82 (https://github.com/BlastHackNet/SAMP-API/blob/6d4db99ab41f19d1a6a7c6cd48f5878bd1e14b62/src/sampapi/0.3.7-R1/CVehiclePool.cpp#L82)
да получить из CVehicle.
Из uint16_t пробовал так делать:
я пробовал так samp::CVehicle* playaVeh = samp::RefNetGame()->GetVehiclePool()->Get(v);
но там были ошибки по типу невозможно приобразовать из samp::CVehicle в CVehicle вот больше кода
C++:
static
void
RenderNeonForVehicle
(
CVehicle
*
vehicle
)
{
CVector Pos
=
CModelInfo
::
ms_modelInfoPtrs
[
vehicle
->
m_nModelIndex
]
->
m_pColModel
->
m_boundBox
.
m_vecMin
;
CVector center
=
vehicle
->
TransformFromObjectSpace
(
CVector
(
0.0f
,
0.0f
,
0.0f
)
)
;
CVector up
=
vehicle
->
TransformFromObjectSpace
(
CVector
(
0.0f
,
0.0f
-
Pos
.
y
,
0.0f
)
)
-
center
;
CVector right
=
vehicle
->
TransformFromObjectSpace
(
CVector
(
Pos
.
x
-
0.0f
,
0.0f
,
0.0f
)
)
-
center
;
}
если типо делать в RenderNeonForVehicle samp::CVehicle то пишет что TransformFromObjectSpace ненайден а в CVehicle* playaVeh = samp::RefNetGame()->GetVehiclePool()->Get(v); без samp:: будут ошибки
да получить из CVehicle.
Из uint16_t пробовал так делать:
я пробовал так samp::CVehicle* playaVeh = samp::RefNetGame()->GetVehiclePool()->Get(v);
но там были ошибки по типу невозможно приобразовать из samp::CVehicle в CVehicle вот больше кода
C++:
static
void
RenderNeonForVehicle
(
CVehicle
*
vehicle
)
{
CVector Pos
=
CModelInfo
::
ms_modelInfoPtrs
[
vehicle
->
m_nModelIndex
]
->
m_pColModel
->
m_boundBox
.
m_vecMin
;
CVector center
=
vehicle
->
TransformFromObjectSpace
(
CVector
(
0.0f
,
0.0f
,
0.0f
)
)
;
CVector up
=
vehicle
->
TransformFromObjectSpace
(
CVector
(
0.0f
,
0.0f
-
Pos
.
y
,
0.0f
)
)
-
center
;
CVector right
=
vehicle
->
TransformFromObjectSpace
(
CVector
(
Pos
.
x
-
0.0f
,
0.0f
,
0.0f
)
)
-
center
;
}
если типо делать в RenderNeonForVehicle samp::CVehicle то пишет что TransformFromObjectSpace ненайден а в CVehicle* playaVeh = samp::RefNetGame()->GetVehiclePool()->Get(v); без samp:: будут ошибки
В samp::CVehicle есть поле m_pGameVehicle, это то что тебе нужно
C++:
samp
::
RefNetGame
(
)
->
GetVehiclePool
(
)
->
Get
(
v
)
;
может кто-то дать этот код только для plugin sdk
C++:
samp
::
RefNetGame
(
)
->
GetVehiclePool
(
)
->
Get
(
v
)
;
может кто-то дать этот код только для plugin sdk
В PSDK ты это никак не сделаешь. Оно перебирает самповский пулл
Wu_Yu_Le
16.02.2025, 19:28
How can I add the main parts of this code to mod_sta? I have already done everything about the menu. But I don't know how to correctly add a new patch
кто может помочь с хуком вот срочка из ida
ida pro:
.text:1008D077 68 D4 B2 0E 10 push offset aSampguiPng ; "sampgui.png"
то есть надо изменить sampgui.png на gui.png чет типо
C++:
patch
::
RedirectCall
(
0x100EB2D4
,
"gui.png"
)
;
ida pro:
void __thiscall CDXUTDialog::InitDefaultElements(CDXUTDialog *this)
{
struct tagRECT rc; // [esp+10h] [ebp-7Ch] BYREF
CDXUTElement a4; // [esp+20h] [ebp-6Ch] BYREF
CGrowableArray::SetTexture(this, 0, "sampgui.png");
CDXUTDialog::InitFont(this);
CDXUTElement::SetFont(&this->m_CapElement, 1, -1, 5);
SetRect(&rc, 17, 269, 241, 287);
CDXUTElement::SetTexture(&this->m_CapElement, 0, &rc, 0xFFFFFFFF);
this->m_CapElement.TextureColor.States[0] = 0xC80A0A0A;
this->m_CapElement.FontColor.States[0] = 0xFFD2D2D2;
CDXUTElement::SetFont(&this->m_CapElement, 1, 0xFFD2D2D2, 4);
DXUTBlendColor::Blend(&this->m_CapElement.TextureColor, 0, 10.0, 0.69999999);
DXUTBlendColor::Blend(&this->m_CapElement.FontColor, 0, 10.0, 0.69999999);
CDXUTElement::SetFont(&a4, 1, -1, 5);
CDXUTElement::SetFont(&a4, 1, 0xFFBEBEBE, 68);
a4.FontColor.States[1] = 0xC8C8C8C8;
CDXUTDialog::SetDefaultElement(this, 1, 0, &a4);
SetRect(&rc, 0, 0, 136, 54);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 0, -1, 5);
a4.TextureColor.States[0] = 0xC8FFFFFF;
a4.TextureColor.States[5] = 0xFF95B0D0;
a4.TextureColor.States[4] = 0xFFB92228;
a4.FontColor.States[4] = 0xFFFFFFFF;
a4.FontColor.States[0] = 0xFFC8C8C8;
CDXUTDialog::SetDefaultElement(this, 0, 0, &a4);
SetRect(&rc, 0, 0, 136, 54);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFu);
a4.TextureColor.States[4] = 0xFFB92228;
a4.TextureColor.States[5] = 0x3C505050;
a4.TextureColor.States[3] = 0xC8FFFFFF;
CDXUTDialog::SetDefaultElement(this, 0, 1, &a4);
SetRect(&rc, 0, 54, 27, 81);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 0, -1, 4);
a4.FontColor.States[1] = 0xC8C8C8C8;
a4.TextureColor.States[0] = 0x96FFFFFF;
a4.TextureColor.States[3] = 0xC8FFFFFF;
a4.TextureColor.States[5] = -1;
CDXUTDialog::SetDefaultElement(this, 2, 0, &a4);
SetRect(&rc, 27, 54, 54, 81);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 2, 1, &a4);
SetRect(&rc, 54, 54, 81, 81);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 0, -1, 4);
a4.FontColor.States[1] = 0xC8C8C8C8;
a4.TextureColor.States[0] = 0x96FFFFFF;
a4.TextureColor.States[3] = 0xC8FFFFFF;
a4.TextureColor.States[5] = -1;
CDXUTDialog::SetDefaultElement(this, 3, 0, &a4);
SetRect(&rc, 81, 54, 108, 81);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 3, 1, &a4);
SetRect(&rc, 7, 81, 247, 123);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 0, -1, 5);
a4.TextureColor.States[0] = 0xC8FFFFFF;
a4.TextureColor.States[4] = 0xFFB92228;
a4.TextureColor.States[3] = 0xFFB92228;
a4.TextureColor.States[1] = 0x46C8C8C8;
a4.FontColor.States[4] = 0xFFFFFFFF;
a4.FontColor.States[5] = 0xFF000000;
a4.FontColor.States[1] = 0xC8C8C8C8;
CDXUTDialog::SetDefaultElement(this, 4, 0, &a4);
SetRect(&rc, 272, 0, 325, 49);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
a4.TextureColor.States[0] = 0xC8FFFFFF;
a4.TextureColor.States[5] = 0xFF969696;
a4.TextureColor.States[3] = 0xFF969696;
a4.TextureColor.States[1] = 0x46FFFFFF;
CDXUTDialog::SetDefaultElement(this, 4, 1, &a4);
SetRect(&rc, 7, 123, 241, 265);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 0, -1, 0);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFB92228, 0xC8808080, 0);
CDXUTDialog::SetDefaultElement(this, 4, 2, &a4);
SetRect(&rc, 7, 266, 241, 289);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 0, -1, 0);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFC8C8C8, 0xC8808080, 0);
CDXUTDialog::SetDefaultElement(this, 4, 3, &a4);
SetRect(&rc, 1, 290, 280, 331);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
a4.TextureColor.States[0] = 0x96FFFFFF;
a4.TextureColor.States[3] = 0xC8FFFFFF;
a4.TextureColor.States[1] = 0x46FFFFFF;
CDXUTDialog::SetDefaultElement(this, 5, 0, &a4);
SetRect(&rc, 54, 54, 81, 81);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFB92228, 0xFF95B0D0, 0);
a4.TextureColor.States[4] = 0xFFF0F0F0;
a4.TextureColor.States[5] = 0xFFB92228;
a4.TextureColor.States[3] = 0xFFDCDCDC;
CDXUTDialog::SetDefaultElement(this, 5, 1, &a4);
SetRect(&rc, 243, 144, 265, 155);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFFFFFFF, 0xFFFFFFFF, 0);
CDXUTDialog::SetDefaultElement(this, 9, 0, &a4);
SetRect(&rc, 243, 124, 265, 144);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFFFFFFF, 0xFFFFFFFF, 0);
CDXUTDialog::SetDefaultElement(this, 9, 1, &a4);
SetRect(&rc, 243, 155, 265, 176);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFFFFFFF, 0xFFFFFFFF, 0);
CDXUTDialog::SetDefaultElement(this, 9, 2, &a4);
SetRect(&rc, 266, 123, 286, 167);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFB92228, 0xFF95B0D0, 0);
CDXUTDialog::SetDefaultElement(this, 9, 3, &a4);
CDXUTElement::SetFont(&a4, 0, -16777216, 4);
SetRect(&rc, 14, 90, 241, 113);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 0, &a4);
SetRect(&rc, 8, 82, 14, 90);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 1, &a4);
SetRect(&rc, 14, 82, 241, 90);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 2, &a4);
SetRect(&rc, 241, 82, 246, 90);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 3, &a4);
SetRect(&rc, 8, 90, 14, 113);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 4, &a4);
SetRect(&rc, 241, 90, 246, 113);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 5, &a4);
SetRect(&rc, 8, 113, 14, 121);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 6, &a4);
SetRect(&rc, 14, 113, 241, 121);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 7, &a4);
SetRect(&rc, 241, 113, 246, 121);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 8, &a4);
CDXUTElement::SetFont(&a4, 0, 0xFF000000, 4);
SetRect(&rc, 14, 90, 241, 113);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 0, &a4);
SetRect(&rc, 8, 82, 14, 90);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 1, &a4);
SetRect(&rc, 14, 82, 241, 90);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 2, &a4);
SetRect(&rc, 241, 82, 246, 90);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 3, &a4);
SetRect(&rc, 8, 90, 14, 113);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 4, &a4);
SetRect(&rc, 241, 90, 246, 113);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 5, &a4);
SetRect(&rc, 8, 113, 14, 121);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 6, &a4);
SetRect(&rc, 14, 113, 241, 121);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 7, &a4);
SetRect(&rc, 241, 113, 246, 121);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 8, &a4);
SetRect(&rc, 0, 0, 136, 54);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 0, -1, 5);
CDXUTDialog::SetDefaultElement(this, 7, 9, &a4);
SetRect(&rc, 13, 124, 241, 265);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 1, -1, 64);
CDXUTDialog::SetDefaultElement(this, 8, 0, &a4);
SetRect(&rc, 17, 269, 241, 287);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 1, 0xFFFFFFFF, 64);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFB92228, 0xC8808080, 0);
CDXUTDialog::SetDefaultElement(this, 8, 1, &a4);
}
вайега52
16.02.2025, 21:56
кто может помочь с хуком вот срочка из ida
ida pro:
.text:1008D077 68 D4 B2 0E 10 push offset aSampguiPng ; "sampgui.png"
то есть надо изменить sampgui.png на gui.png чет типо
C++:
patch
::
RedirectCall
(
0x100EB2D4
,
"gui.png"
)
;
ida pro:
void __thiscall CDXUTDialog::InitDefaultElements(CDXUTDialog *this)
{
struct tagRECT rc; // [esp+10h] [ebp-7Ch] BYREF
CDXUTElement a4; // [esp+20h] [ebp-6Ch] BYREF
CGrowableArray::SetTexture(this, 0, "sampgui.png");
CDXUTDialog::InitFont(this);
CDXUTElement::SetFont(&this->m_CapElement, 1, -1, 5);
SetRect(&rc, 17, 269, 241, 287);
CDXUTElement::SetTexture(&this->m_CapElement, 0, &rc, 0xFFFFFFFF);
this->m_CapElement.TextureColor.States[0] = 0xC80A0A0A;
this->m_CapElement.FontColor.States[0] = 0xFFD2D2D2;
CDXUTElement::SetFont(&this->m_CapElement, 1, 0xFFD2D2D2, 4);
DXUTBlendColor::Blend(&this->m_CapElement.TextureColor, 0, 10.0, 0.69999999);
DXUTBlendColor::Blend(&this->m_CapElement.FontColor, 0, 10.0, 0.69999999);
CDXUTElement::SetFont(&a4, 1, -1, 5);
CDXUTElement::SetFont(&a4, 1, 0xFFBEBEBE, 68);
a4.FontColor.States[1] = 0xC8C8C8C8;
CDXUTDialog::SetDefaultElement(this, 1, 0, &a4);
SetRect(&rc, 0, 0, 136, 54);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 0, -1, 5);
a4.TextureColor.States[0] = 0xC8FFFFFF;
a4.TextureColor.States[5] = 0xFF95B0D0;
a4.TextureColor.States[4] = 0xFFB92228;
a4.FontColor.States[4] = 0xFFFFFFFF;
a4.FontColor.States[0] = 0xFFC8C8C8;
CDXUTDialog::SetDefaultElement(this, 0, 0, &a4);
SetRect(&rc, 0, 0, 136, 54);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFu);
a4.TextureColor.States[4] = 0xFFB92228;
a4.TextureColor.States[5] = 0x3C505050;
a4.TextureColor.States[3] = 0xC8FFFFFF;
CDXUTDialog::SetDefaultElement(this, 0, 1, &a4);
SetRect(&rc, 0, 54, 27, 81);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 0, -1, 4);
a4.FontColor.States[1] = 0xC8C8C8C8;
a4.TextureColor.States[0] = 0x96FFFFFF;
a4.TextureColor.States[3] = 0xC8FFFFFF;
a4.TextureColor.States[5] = -1;
CDXUTDialog::SetDefaultElement(this, 2, 0, &a4);
SetRect(&rc, 27, 54, 54, 81);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 2, 1, &a4);
SetRect(&rc, 54, 54, 81, 81);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 0, -1, 4);
a4.FontColor.States[1] = 0xC8C8C8C8;
a4.TextureColor.States[0] = 0x96FFFFFF;
a4.TextureColor.States[3] = 0xC8FFFFFF;
a4.TextureColor.States[5] = -1;
CDXUTDialog::SetDefaultElement(this, 3, 0, &a4);
SetRect(&rc, 81, 54, 108, 81);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 3, 1, &a4);
SetRect(&rc, 7, 81, 247, 123);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 0, -1, 5);
a4.TextureColor.States[0] = 0xC8FFFFFF;
a4.TextureColor.States[4] = 0xFFB92228;
a4.TextureColor.States[3] = 0xFFB92228;
a4.TextureColor.States[1] = 0x46C8C8C8;
a4.FontColor.States[4] = 0xFFFFFFFF;
a4.FontColor.States[5] = 0xFF000000;
a4.FontColor.States[1] = 0xC8C8C8C8;
CDXUTDialog::SetDefaultElement(this, 4, 0, &a4);
SetRect(&rc, 272, 0, 325, 49);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
a4.TextureColor.States[0] = 0xC8FFFFFF;
a4.TextureColor.States[5] = 0xFF969696;
a4.TextureColor.States[3] = 0xFF969696;
a4.TextureColor.States[1] = 0x46FFFFFF;
CDXUTDialog::SetDefaultElement(this, 4, 1, &a4);
SetRect(&rc, 7, 123, 241, 265);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 0, -1, 0);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFB92228, 0xC8808080, 0);
CDXUTDialog::SetDefaultElement(this, 4, 2, &a4);
SetRect(&rc, 7, 266, 241, 289);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 0, -1, 0);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFC8C8C8, 0xC8808080, 0);
CDXUTDialog::SetDefaultElement(this, 4, 3, &a4);
SetRect(&rc, 1, 290, 280, 331);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
a4.TextureColor.States[0] = 0x96FFFFFF;
a4.TextureColor.States[3] = 0xC8FFFFFF;
a4.TextureColor.States[1] = 0x46FFFFFF;
CDXUTDialog::SetDefaultElement(this, 5, 0, &a4);
SetRect(&rc, 54, 54, 81, 81);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFB92228, 0xFF95B0D0, 0);
a4.TextureColor.States[4] = 0xFFF0F0F0;
a4.TextureColor.States[5] = 0xFFB92228;
a4.TextureColor.States[3] = 0xFFDCDCDC;
CDXUTDialog::SetDefaultElement(this, 5, 1, &a4);
SetRect(&rc, 243, 144, 265, 155);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFFFFFFF, 0xFFFFFFFF, 0);
CDXUTDialog::SetDefaultElement(this, 9, 0, &a4);
SetRect(&rc, 243, 124, 265, 144);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFFFFFFF, 0xFFFFFFFF, 0);
CDXUTDialog::SetDefaultElement(this, 9, 1, &a4);
SetRect(&rc, 243, 155, 265, 176);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFFFFFFF, 0xFFFFFFFF, 0);
CDXUTDialog::SetDefaultElement(this, 9, 2, &a4);
SetRect(&rc, 266, 123, 286, 167);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFB92228, 0xFF95B0D0, 0);
CDXUTDialog::SetDefaultElement(this, 9, 3, &a4);
CDXUTElement::SetFont(&a4, 0, -16777216, 4);
SetRect(&rc, 14, 90, 241, 113);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 0, &a4);
SetRect(&rc, 8, 82, 14, 90);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 1, &a4);
SetRect(&rc, 14, 82, 241, 90);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 2, &a4);
SetRect(&rc, 241, 82, 246, 90);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 3, &a4);
SetRect(&rc, 8, 90, 14, 113);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 4, &a4);
SetRect(&rc, 241, 90, 246, 113);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 5, &a4);
SetRect(&rc, 8, 113, 14, 121);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 6, &a4);
SetRect(&rc, 14, 113, 241, 121);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 7, &a4);
SetRect(&rc, 241, 113, 246, 121);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 6, 8, &a4);
CDXUTElement::SetFont(&a4, 0, 0xFF000000, 4);
SetRect(&rc, 14, 90, 241, 113);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 0, &a4);
SetRect(&rc, 8, 82, 14, 90);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 1, &a4);
SetRect(&rc, 14, 82, 241, 90);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 2, &a4);
SetRect(&rc, 241, 82, 246, 90);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 3, &a4);
SetRect(&rc, 8, 90, 14, 113);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 4, &a4);
SetRect(&rc, 241, 90, 246, 113);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 5, &a4);
SetRect(&rc, 8, 113, 14, 121);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 6, &a4);
SetRect(&rc, 14, 113, 241, 121);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 7, &a4);
SetRect(&rc, 241, 113, 246, 121);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTDialog::SetDefaultElement(this, 7, 8, &a4);
SetRect(&rc, 0, 0, 136, 54);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 0, -1, 5);
CDXUTDialog::SetDefaultElement(this, 7, 9, &a4);
SetRect(&rc, 13, 124, 241, 265);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 1, -1, 64);
CDXUTDialog::SetDefaultElement(this, 8, 0, &a4);
SetRect(&rc, 17, 269, 241, 287);
CDXUTElement::SetTexture(&a4, 0, &rc, 0xFFFFFFFF);
CDXUTElement::SetFont(&a4, 1, 0xFFFFFFFF, 64);
DXUTBlendColor::SetColor(&a4.TextureColor, 0xFFB92228, 0xC8808080, 0);
CDXUTDialog::SetDefaultElement(this, 8, 1, &a4);
}
умнее будет менять указатель на строку в push:
C++:
auto
samp_handle
=
reinterpret_cast
(
GetModuleHandleA
(
"samp.dll"
)
)
;
patch
::
SetPointer
(
samp_handle
+
0x8D078
,
"gui.png"
)
;
C++:
#include
typedef
BOOL
(
WINAPI
*
IsDebuggerPresent_t
)
(
)
;
BOOL WINAPI
FakeIsDebuggerPresent
(
)
{
return
FALSE
;
}
void
HookIAT
(
)
{
DWORD
*
pIAT
=
(
DWORD
*
)
0x10035068
;
DWORD oldProtect
;
VirtualProtect
(
pIAT
,
sizeof
(
DWORD
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProtect
)
;
*
pIAT
=
(
DWORD
)
FakeIsDebuggerPresent
;
VirtualProtect
(
pIAT
,
sizeof
(
DWORD
)
,
oldProtect
,
&
oldProtect
)
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD ul_reason_for_call
,
LPVOID lpReserved
)
{
if
(
ul_reason_for_call
==
DLL_PROCESS_ATTACH
)
{
HookIAT
(
)
;
}
return
TRUE
;
}
че делать если при инжекте
https://i.imgur.com/eZsNtty.png
вайега52
22.02.2025, 17:33
DWORD* pIAT = (DWORD*)0x10035068;
я подозреваю, что 1 в начале адреса лишняя при работе из дллки
fuflexxxx
22.02.2025, 22:09
C++:
#include
typedef
BOOL
(
WINAPI
*
IsDebuggerPresent_t
)
(
)
;
BOOL WINAPI
FakeIsDebuggerPresent
(
)
{
return
FALSE
;
}
void
HookIAT
(
)
{
DWORD
*
pIAT
=
(
DWORD
*
)
0x10035068
;
DWORD oldProtect
;
VirtualProtect
(
pIAT
,
sizeof
(
DWORD
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProtect
)
;
*
pIAT
=
(
DWORD
)
FakeIsDebuggerPresent
;
VirtualProtect
(
pIAT
,
sizeof
(
DWORD
)
,
oldProtect
,
&
oldProtect
)
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD ul_reason_for_call
,
LPVOID lpReserved
)
{
if
(
ul_reason_for_call
==
DLL_PROCESS_ATTACH
)
{
HookIAT
(
)
;
}
return
TRUE
;
}
че делать если при инжекте
https://i.imgur.com/eZsNtty.png
Тип инжекта поменять попробуй. Возможно билдишь длл под архитектуру х64. Возможно ему библиотек не хватает каких-то.
какой оффсет обработчика RPC ClientCheck на R5?
вайега52
23.02.2025, 16:03
какой оффсет обработчика RPC ClientCheck на R5?
дай этот оффсет на р3/r1
есть ли в sampapi функа для посадки в машину, если есть в plugin sdk то дайте еще пожалуйста код получения cvehicle в plugin sdk по id машины
есть ли в sampapi функа для посадки в машину, если есть в plugin sdk то дайте еще пожалуйста код получения cvehicle в plugin sdk по id машины
Получение CVehicle по иду
C++:
samp
::
CVehiclePool
*
pVehiclePool
=
samp
::
RefNetGame
(
)
->
GetVehiclePool
(
)
;
if
(
pVehiclePool
->
m_bNotEmpty
[
nId
]
)
{
samp
::
CVehicle
*
pSampVehicle
=
pVehiclePool
->
m_pObject
[
nId
]
;
// Самповский CVehicle
CVehicle
*
pVehicle
=
pSampVehicle
->
m_pGameVehicle
;
// Игровой CVehicle для Plugin SDK
}
Посадку в машину через PSDK можно осуществить через опкод 05CA.
C++:
Command
(
Хендл Игрока
,
Хендл тачки
,
Время
,
Сиденье
)
C++:
CPed
*
playerPed
=
sampapi
::
v037r1
::
RefNetGame
(
)
->
m_pPools
->
m_pPlayer
->
m_pObject
[
i
]
->
m_pPlayer
->
m_pPed
->
m_pGamePed
;
почему крашит?
C++:
CPed
*
playerPed
=
sampapi
::
v037r1
::
RefNetGame
(
)
->
m_pPools
->
m_pPlayer
->
m_pObject
[
i
]
->
m_pPlayer
->
m_pPed
->
m_pGamePed
;
почему крашит?
А ты уверен что этот CPed* существует?
ida pro:
.text:5D3F9870 ; __unwind { // loc_5D8ADD39
.text:5D3F9870 push ebx
.text:5D3F9871 mov ebx, esp
.text:5D3F9873 sub esp, 8
.text:5D3F9876 and esp, 0FFFFFFF8h
.text:5D3F9879 add esp, 4
.text:5D3F987C push ebp
.text:5D3F987D mov ebp, [ebx+4]
.text:5D3F9880 mov [esp+0Ch+var_8], ebp
.text:5D3F9884 mov ebp, esp
.text:5D3F9886 push 0FFFFFFFFh
.text:5D3F9888 push offset loc_5D8ADD39
.text:5D3F988D mov eax, large fs:0
.text:5D3F9893 push eax
.text:5D3F9894 push ecx
.text:5D3F9895 push ebx
.text:5D3F9896 sub esp, 258h
.text:5D3F989C mov eax, ___security_cookie
.text:5D3F98A1 xor eax, ebp
.text:5D3F98A3 mov [ebp-1Ch], eax
.text:5D3F98A6 push esi
.text:5D3F98A7 push edi
.text:5D3F98A8 push eax
.text:5D3F98A9 lea eax, [ebp-0Ch]
.text:5D3F98AC mov large fs:0, eax
.text:5D3F98B2 mov [ebp-10h], esp
.text:5D3F98B5 mov edi, ecx
.text:5D3F98B7 mov [ebp-140h], edi
.text:5D3F98BD cmp byte ptr [edi], 0
.text:5D3F98C0 mov [ebp-164h], edi
.text:5D3F98C6 jz loc_5D3FB147
.text:5D3F98CC mov eax, dword_5E063C7C
.text:5D3F98D1 push 0
.text:5D3F98D3 push 3
.text:5D3F98D5 mov ecx, [eax]
.text:5D3F98D7 call sub_5D320EA0
.text:5D3F98DC call sub_5D532800
.text:5D3F98E1 push 1
.text:5D3F98E3 sub esp, 0Ch
.text:5D3F98E6 mov ecx, esp
.text:5D3F98E8 mov [esp+294h+var_28C], 41880000h
.text:5D3F98F0 mov dword ptr [ecx], offset aRobotomonoregu ; "RobotoMonoRegular"
.text:5D3F98F6 mov dword ptr [ecx+4], 11h
.text:5D3F98FD mov ecx, eax
.text:5D3F98FF call sub_5D534360
.text:5D3F9904 push eax
.text:5D3F9905 call sub_5D481880
.text:5D3F990A push 0
.text:5D3F990C call sub_5D48FBB0
.text:5D3F9911 push 0
.text:5D3F9913 push 0
.text:5D3F9915 push offset aAmazingRaklogg ; "Amazing Raklogger"
.text:5D3F991A call sub_5D474190
.text:5D3F991F mov eax, large fs:2Ch
.text:5D3F9925 add esp, 14h
.text:5D3F9928 mov ecx, TlsIndex
.text:5D3F992E mov ecx, [eax+ecx*4]
.text:5D3F9931 mov eax, dword_5E07D898
.text:5D3F9936 cmp eax, [ecx+4]
.text:5D3F993C jg loc_5D3FB165
psevdocode:
[CODE]
_DWORD *__usercall sub_5D3F9870@(_BYTE *a1@, int a2@)
{
_DWORD *result; // eax
_BYTE *v3; // edi
int v4; // eax
const char *v5; // eax
int v6; // eax
int v7; // ecx
volatile signed __int32 *v8; // esi
int *v9; // eax
int *v10; // esi
int *v11; // edi
int v12; // ecx
int v13; // esi
int v14; // ecx
_DWORD *v15; // eax
__int128 *v16; // esi
int v17; // ecx
int *v18; // eax
int v19; // ecx
int v20; // eax
int v21; // ecx
_DWORD *v22; // esi
const char *v23; // edx
int v24; // eax
char v25; // al
int v26; // esi
char v27; // al
unsigned __int8 *v28; // edi
int v29; // eax
int v30; // eax
int v31; // esi
int v32; // eax
unsigned __int8 v33; // cl
_DWORD *v34; // esi
unsigned int v35; // eax
unsigned int v36; // eax
__int128 *v37; // edi
unsigned int v38; // ecx
unsigned int v39; // eax
__int128 *v40; // eax
__int128 *v41; // eax
int v42; // edx
int v43; // ecx
int v44; // eax
int v45; // eax
int v46; // esi
int v47; // eax
unsigned __int8 v48; // cl
_DWORD *v49; // esi
int v50; // eax
unsigned int v51; // eax
__int128 *v52; // edi
unsigned int v53; // ecx
unsigned int v54; // eax
__int128 *v55; // eax
__int128 *v56; // eax
int v57; // eax
_BYTE *v58; // edi
int v59; // eax
int v60; // esi
int v61; // eax
_DWORD *v62; // esi
int v63; // eax
unsigned int v64; // eax
__int128 *v65; // edi
unsigned int v66; // ecx
unsigned int v67; // eax
__int128 *v68; // eax
__int128 *v69; // eax
int v70; // eax
unsigned int v71; // ecx
unsigned int v72; // edi
unsigned int v73; // eax
int v74; // esi
_BYTE *v75; // edx
__int128 *v76; // esi
int v77; // edi
__int128 *v78; // eax
__m128i *v79; // eax
__m128i v80; // xmm1
__int64 v81; // xmm0_8
__int128 *v82; // ecx
int v83; // eax
__int32 v84; // edx
int v85; // edx
int v86; // edx
int *v87; // esi
__int128 *v88; // ecx
bool v89; // zf
int v90; // eax
int v91; // ecx
int v92; // eax
volatile signed __int32 *v93; // esi
int v94; // edx
int v95; // esi
unsigned int v96; // edi
unsigned int v97; // esi
int v98; // eax
int v99; // esi
unsigned int v100; // edi
int *v101; // eax
int v102; // ecx
int v103; // ecx
volatile signed __int32 *v104; // esi
int v105; // esi
_DWORD *v106; // edi
char v107; // al
int v108; // edx
const char *v109; // eax
int v110; // edx
char v111; // dl
const char *v112; // ecx
int *v113; // esi
int *v114; // eax
_DWORD *v115; // eax
bool v116; // cc
__int32 v117; // edx
unsigned int v118; // esi
unsigned int v119; // eax
__int128 *v120; // eax
int v121; // ecx
__int128 *v122; // eax
_DWORD *v123; // eax
_DWORD *v124; // ecx
_DWORD *v125; // eax
__int32 v126; // edx
int v127; // edx
int v128; // edx
unsigned int v129; // ecx
int *v130; // esi
int *v131; // edi
unsigned int v132; // ecx
int v133; // eax
unsigned int v134; // ecx
int *v135; // eax
unsigned int v136; // ecx
int v137; // [esp-4h] [ebp-290h]
int v138; // [esp-4h] [ebp-290h]
int v139; // [esp-4h] [ebp-290h]
int v140; // [esp+0h] [ebp-28Ch]
int v141; // [esp+0h] [ebp-28Ch]
int v142; // [esp+0h] [ebp-28Ch]
int v143; // [esp+0h] [ebp-28Ch]
float v144; // [esp+4h] [ebp-288h]
unsigned int v145; // [esp+4h] [ebp-288h]
_BYTE *v146; // [esp+4h] [ebp-288h]
_BYTE *v147; // [esp+4h] [ebp-288h]
float v148; // [esp+4h] [ebp-288h]
int v149; // [esp+8h] [ebp-284h] BYREF
int v150; // [esp+18h] [ebp-274h] BYREF
int v151; // [esp+24h] [ebp-268h] BYREF
int v152; // [esp+34h] [ebp-258h] BYREF
_DWORD v153[9]; // [esp+40h] [ebp-24Ch] BYREF
char v154; // [esp+64h] [ebp-228h]
__int64 v155; // [esp+74h] [ebp-218h] BYREF
int v156; // [esp+7Ch] [ebp-210h]
char v157; // [esp+80h] [ebp-20Ch]
char v158; // [esp+84h] [ebp-208h]
unsigned __int64 v159; // [esp+88h] [ebp-204h]
__int64 v160; // [esp+98h] [ebp-1F4h] BYREF
int v161; // [esp+A0h] [ebp-1ECh]
_DWORD v162[2]; // [esp+A4h] [ebp-1E8h] BYREF
int v163; // [esp+ACh] [ebp-1E0h]
_DWORD v164[2]; // [esp+B0h] [ebp-1DCh] BYREF
int v165; // [esp+B8h] [ebp-1D4h]
_DWORD v166[2]; // [esp+BCh] [ebp-1D0h] BYREF
int v167; // [esp+C4h] [ebp-1C8h]
__int128 v168; // [esp+C8h] [ebp-1C4h] BYREF
__int128 v169; // [esp+D8h] [ebp-1B4h] BYREF
int v170; // [esp+E8h] [ebp-1A4h]
__int128 v171; // [esp+ECh] [ebp-1A0h] BYREF
int v172; // [esp+FCh] [ebp-190h]
int *v173; // [esp+100h] [ebp-18Ch] BYREF
int v174; // [esp+104h] [ebp-188h]
int v175; // [esp+108h] [ebp-184h] BYREF
_DWORD *v176; // [esp+10Ch] [ebp-180h]
int v177; // [esp+110h] [ebp-17Ch]
_BYTE *v178; // [esp+11Ch] [ebp-170h]
int *v179; // [esp+120h] [ebp-16Ch] BYREF
unsigned int v180; // [esp+124h] [ebp-168h]
int *v181; // [esp+128h] [ebp-164h] BYREF
int *v182; // [esp+12Ch] [ebp-160h]
__int128 *v183; // [esp+130h] [ebp-15Ch] BYREF
__int64 v184; // [esp+134h] [ebp-158h] BYREF
int *v185; // [esp+13Ch] [ebp-150h]
_BYTE *v186; // [esp+140h] [ebp-14Ch] BYREF
int *v187; // [esp+144h] [ebp-148h] BYREF
unsigned int v188; // [esp+148h] [ebp-144h]
unsigned int v189; // [esp+14Ch] [ebp-140h] BYREF
_BYTE v190[7]; // [esp+150h] [ebp-13Ch] BYREF
unsigned __int8 v191; // [esp+157h] [ebp-135h] BYREF
int v192; // [esp+158h] [ebp-134h] BYREF
__int128 v193; // [esp+170h] [ebp-11Ch] BYREF
__int64 v194; // [esp+180h] [ebp-10Ch]
__int128 v195; // [esp+188h] [ebp-104h] BYREF
unsigned int v196; // [esp+198h] [ebp-F4h]
unsigned int v197; // [esp+19Ch] [ebp-F0h]
__int128 v198; // [esp+1A0h] [ebp-ECh] BYREF
int v199; // [esp+1B0h] [ebp-DCh]
unsigned int v200; // [esp+1B4h] [ebp-D8h]
__int128 v201; // [esp+1B8h] [ebp-D4h] BYREF
unsigned int v202; // [esp+1C8h] [ebp-C4h]
unsigned int v203; // [esp+1CCh] [ebp-C0h]
char v204[16]; // [esp+1D0h] [ebp-BCh] BYREF
__int64 v205; // [esp+1E0h] [ebp-ACh] BYREF
__m128i v206; // [esp+1E8h] [ebp-A4h] BYREF
__int64 v207; // [esp+1F8h] [ebp-94h]
__int128 v208; // [esp+204h] [ebp-88h] BYREF
_BYTE *v209; // [esp+214h] [ebp-78h]
unsigned int v210; // [esp+218h] [ebp-74h]
__int128 v211; // [esp+21Ch] [ebp-70h] BYREF
unsigned int v212; // [esp+22Ch] [ebp-60h]
unsigned int v213; // [esp+230h] [ebp-5Ch]
__int128 v214; // [esp+234h] [ebp-58h] BYREF
int v215; // [esp+244h] [ebp-48h]
unsigned int v216; // [esp+248h] [ebp-44h]
_BYTE v217[15]; // [esp+261h] [ebp-2Bh] BYREF
int *v218; // [esp+270h] [ebp-1Ch]
_DWORD v219[2]; // [esp+274h] [ebp-18h] BYREF
int v220; // [esp+27Ch] [ebp-10h]
int v221[2]; // [esp+280h] [ebp-Ch] BYREF
int v222; // [esp+288h] [ebp-4h] BYREF
int retaddr; // [esp+28Ch] [ebp+0h]
v221[0] = a2;
v221[1] = retaddr;
v220 = -1;
v219[1] = &loc_5D8ADD39;
v219[0] = NtCurrentTeb()->NtTib.ExceptionList;
*(_DWORD *)&v217[11] = &v222;
result = v219;
v218 = &v149;
v3 = a1;
v186 = a1;
v89 = *a1 == 0;
v178 = a1;
if ( !v89 )
{
sub_5D320EA0(*(void **)dword_5E063C7C, 3, 0);
sub_5D532800();
v4 = sub_5D534360("RobotoMonoRegular", 17, 1099431936, 1);
sub_5D481880(v4);
sub_5D48FBB0(0);
sub_5D474190((int)v221, "Amazing Raklogger", 0, 0);
if ( dword_5E07D898 > *(_DWORD *)(*((_DWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + TlsIndex) + 4) )
sub_5D80924F(&dword_5E07D898);
v89 = v3[1] == 0;
v5 = "pause";
v187 = 0;
if ( v89 )
v5 = "start";
v188 = 0;
if ( (unsigned __int8)sub_5D4A93C0(v5, &v187) )
v3[1] = v3[1] == 0;
sub_5D484450(0, -1082130432);
v187 = 0;
v188 = 0;
if ( (unsigned __int8)sub_5D4A93C0("clear", &v187) )
{
v6 = *((_DWORD *)v3 + 1);
v7 = *((_DWORD *)v3 + 2);
if ( v6 != v7 )
{
sub_5D285760(v6, v7);
*((_DWORD *)v3 + 2) = *((_DWORD *)v3 + 1);
}
v8 = (volatile signed __int32 *)dword_5E07D85C;
dword_5E07D858 = 0;
dword_5E07D85C = 0;
if ( v8 )
{
if ( !_InterlockedExchangeAdd(v8 + 1, 0xFFFFFFFF) )
{
(**(void (__thiscall ***)(volatile signed __int32 *))v8)(v8);
if ( !_InterlockedExchangeAdd(v8 + 2, 0xFFFFFFFF) )
(*(void (__thiscall **)(volatile signed __int32 *))(*v8 + 4))(v8);
}
}
}
if ( dword_5E07D89C > *(_DWORD *)(*((_DWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + TlsIndex) + 4) )
sub_5D80924F(&dword_5E07D89C);
if ( dword_5E07D8A0 > *(_DWORD *)(*((_DWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + TlsIndex) + 4) )
sub_5D80924F(&dword_5E07D8A0);
sub_5D4A9C50("Incoming", &byte_5DF34D30);
sub_5D484450(0, -1082130432);
sub_5D4A9C50("Outcoming", &byte_5DF34D31);
sub_5D4A9C50("Packets", &byte_5DF34D32);
sub_5D484450(0, -1082130432);
sub_5D4A9C50(&word_5DBF7614, &byte_5DF34D33);
sub_5D484450(0, -1082130432);
sub_5D4A9C50("Amazing", &byte_5DF34D34);
v9 = &dword_5DF34B40;
if ( (unsigned int)dword_5DF34B54 > 0xF )
v9 = (int *)dword_5DF34B40;
if ( (unsigned __int8)sub_5D4AFDE0("Filter ids", v9, dword_5DF34B50, 0x40000, sub_5D3F92C0, &dword_5DF34B40) )
{
if ( dword_5E07D860 != dword_5E07D864 )
dword_5E07D864 = dword_5E07D860;
LODWORD(v193) = &dword_5DF34B40;
v10 = &dword_5DF34B40;
BYTE4(v193) = 44;
if ( (unsigned int)dword_5DF34B54 > 0xF )
v10 = (int *)dword_5DF34B40;
LOBYTE(v194) = 0;
sub_5D3F8820(&v189, &v193);
LOBYTE(v185) = 0;
LOBYTE(v176) = 0;
v188 = v189;
LOBYTE(v183) = 0;
v187 = v10;
sub_5D3F8840(&v179, &v187, (char *)&v193 + 4, v183, v176, v185);
v187 = v179;
v188 = v180;
sub_5D3F88B0(&v187);
sub_5D3F8DC0(&v193, v10, DWORD2(v193), HIDWORD(v193));
v215 = v172;
v214 = v171;
sub_5D3FB710(&v206);
v11 = (int *)HIDWORD(v214);
v12 = DWORD2(v214);
v13 = DWORD1(v214);
LABEL_24:
v185 = (int *)v12;
while ( v13 != v206.m128i_i32[1] || (_BYTE)v215 != (_BYTE)v207 )
{
v14 = v12 - v13;
v220 = 0;
v199 = 0;
v198 = 0i64;
v200 = 0;
if ( v13 == v13 + v14 )
{
v199 = 0;
v200 = 15;
LOBYTE(v198) = 0;
}
else
{
sub_5D262330(v13, v14);
}
LOBYTE(v220) = 1;
v15 = (_DWORD *)sub_5D86A71D();
v16 = &v198;
v176 = v15;
if ( v200 > 0xF )
v16 = (__int128 *)v198;
*v15 = 0;
v17 = sub_5D86E895(v16, &v183, 10);
v189 = v17;
if ( v16 == v183 )
sub_5D7F1142("invalid stoi argument");
if ( *v176 == 34 )
sub_5D7F1182("stoi argument out of range");
LOBYTE(v220) = 0;
if ( v200 > 0xF )
{
sub_5D261C90(&v198, v198, v200);
v17 = v189;
}
if ( v17 0xFu )
v19 = *v18;
v20 = v19 + v18[4];
v12 = (int)v185;
v13 = (int)v185;
if ( v185 != (int *)v20 )
{
v13 = (int)v11;
if ( v11 == (int *)v20 )
{
v12 = (int)v11;
LOBYTE(v215) = 1;
DWORD2(v214) = v11;
HIDWORD(v214) = v11;
}
else
{
LOBYTE(v177) = 0;
LOBYTE(v180) = 0;
v174 = v20;
LOBYTE(v188) = 0;
v173 = v11;
sub_5D3F8840(&v184, &v173, v214 + 4, v188, v180, v177);
v11 = (int *)HIDWORD(v184);
v12 = v184;
*((_QWORD *)&v214 + 1) = v184;
}
goto LABEL_24;
}
LOBYTE(v215) = 0;
}
v3 = v186;
}
sub_5D484450(0, -1082130432);
sub_5D4B7530(&unk_5DBF322C, v140);
if ( (unsigned __int8)sub_5D47C1D0(0) )
{
sub_5D476A90();
v144 = sub_5D47A170() * 35.0;
sub_5D481FD0(LODWORD(v144));
sub_5D4B7980("Use a ',' as separator", 0);
sub_5D4817C0();
sub_5D4790B0();
}
sub_5D484450(0, -1082130432);
sub_5D4A9C50("Inverted", &byte_5E07D8A4);
v184 = COERCE_UNSIGNED_INT(*(float *)sub_5D47A0B0(&v173) * 0.40000001) | 0x43FA000000000000i64;
sub_5D4761B0("ChildL", &v184, 1, 2048);
HIDWORD(v205) = 0;
v206.m128i_i32[3] = (__int32)(v3 + 4);
LOBYTE(v207) = v191;
v206.m128i_i32[0] = 0;
v206.m128i_i8[4] = 0;
v206.m128i_i32[2] = -1;
sub_5D3F8C40((char *)&v205 + 4);
memset(&v153[6], 0, 12);
v154 = 0;
sub_5D3F8C40(v21);
sub_5D3F9730((char *)&v171 + 4);
v22 = (_DWORD *)DWORD1(v171);
DWORD1(v168) = &v155;
v185 = (int *)DWORD1(v171);
v178 = *(_BYTE **)(HIDWORD(v155) + 4);
if ( (_BYTE *)DWORD1(v171) != v178 )
{
while ( 1 )
{
sub_5D4819A0(*v22);
v23 = "Incoming";
v89 = *(_BYTE *)*v22 == 0;
v214 = 0i64;
if ( v89 )
v23 = "Outcoming";
v215 = 0;
v216 = 0;
sub_5D262330(v23, strlen(v23));
v24 = *v22;
v220 = 3;
v25 = *(_BYTE *)(v24 + 1);
if ( v25 )
{
if ( v25 == 1 )
{
sub_5D2616A0(" RPC", 4);
}
else if ( v25 == 2 )
{
sub_5D2616A0(" amazing_packet", 15);
}
}
else
{
sub_5D2616A0(" packet", 7);
}
v26 = *v22;
v27 = *(_BYTE *)(v26 + 1);
v28 = (unsigned __int8 *)(v26 + 2);
if ( v27 )
{
if ( v27 == 1 )
{
v44 = *(_DWORD *)(sub_5D2C99B0((char *)&v169 + 8, v26 + 2) + 8);
if ( !*(_BYTE *)(v44 + 13) && *v28 >= *(_BYTE *)(v44 + 16) )
{
sub_5D2C99B0(v164, v26 + 2);
v45 = v165;
if ( *(_BYTE *)(v165 + 13) || *v28 0xFu )
v49 = (_DWORD *)*v49;
v51 = v50 + 1;
v52 = &v195;
v53 = 15;
v188 = v51;
v195 = 0i64;
if ( v51 > 0xF )
{
v54 = v51 | 0xF;
if ( v54 0xF )
v56 = (__int128 *)v195;
LOBYTE(v220) = 7;
sub_5D2616A0(v56, v196);
LOBYTE(v220) = 3;
if ( v197 > 0xF )
sub_5D261C90(&v195, v195, v197);
}
}
else if ( v27 == 2 )
{
v57 = *(_DWORD *)(sub_5D2C99B0((char *)&v168 + 4, v26 + 2) + 8);
if ( !*(_BYTE *)(v57 + 13) )
{
v191 = *v28;
if ( v191 >= *(_BYTE *)(v57 + 16) )
{
v58 = (_BYTE *)(v26 + 2);
sub_5D2C99B0(v162, v26 + 2);
v59 = v163;
if ( *(_BYTE *)(v163 + 13) || v191 0xFu )
v62 = (_DWORD *)*v62;
v64 = v63 + 1;
v65 = &v211;
v66 = 15;
v188 = v64;
v211 = 0i64;
if ( v64 > 0xF )
{
v67 = v64 | 0xF;
if ( v67 0xF )
v69 = (__int128 *)v211;
LOBYTE(v220) = 9;
sub_5D2616A0(v69, v212);
LOBYTE(v220) = 3;
if ( v213 > 0xF )
sub_5D261C90(&v211, v211, v213);
}
}
}
}
else
{
v29 = *(_DWORD *)(sub_5D2C99B0(&v150, v26 + 2) + 8);
if ( !*(_BYTE *)(v29 + 13) && *v28 >= *(_BYTE *)(v29 + 16) )
{
sub_5D2C99B0(v166, v26 + 2);
v30 = v167;
if ( *(_BYTE *)(v167 + 13) || *v28 0xFu )
v34 = (_DWORD *)*v34;
v36 = v35 + 1;
v37 = &v201;
v38 = 15;
v188 = v36;
v201 = 0i64;
if ( v36 > 0xF )
{
v39 = v36 | 0xF;
if ( v39 0xF )
v41 = (__int128 *)v201;
LOBYTE(v220) = 5;
sub_5D2616A0(v41, v202);
LOBYTE(v220) = 3;
if ( v203 > 0xF )
{
v42 = v201;
if ( v203 + 1 >= 0x1000 )
{
v42 = *(_DWORD *)(v201 - 4);
v43 = v203 + 36;
if ( (unsigned int)(v201 - v42 - 4) > 0x1F )
goto LABEL_252;
}
sub_5D808EAC(v42);
}
}
}
v70 = sub_5D269CB0(v217, *(unsigned __int8 *)(*v185 + 2));
v188 = v70;
v209 = 0;
v210 = 0;
v208 = 0i64;
if ( (_BYTE *)v70 == v217 )
{
v71 = 15;
v209 = 0;
v210 = 15;
LOBYTE(v208) = 0;
}
else
{
v72 = (unsigned int)&v217[-v70];
if ( (unsigned int)&v217[-v70] > 0x7FFFFFFF )
goto LABEL_250;
if ( v72 > 0xF )
{
v73 = v72 | 0xF;
if ( (v72 | 0xF) 0xF )
v76 = (__int128 *)v208;
v209 += 2;
if ( v76 >= (__int128 *)"" || &v75[(int)v76] (__int128 *)" (" )
{
v77 = (char *)v76 - " (";
}
else
{
v77 = 0;
}
sub_5D85F6B0((char *)v76 + 2, v76, v75 + 1);
sub_5D85F6B0(v76, " (", v77);
sub_5D85F6B0((char *)v76 + v77, &asc_5DBF7E4C[v77 + 2], 2 - v77);
v78 = &v208;
}
v194 = 0i64;
v193 = 0i64;
v193 = *v78;
v194 = *((_QWORD *)v78 + 2);
*((_DWORD *)v78 + 5) = 15;
LOBYTE(v220) = 11;
*((_DWORD *)v78 + 4) = 0;
*(_BYTE *)v78 = 0;
v79 = (__m128i *)sub_5D2616A0(")", 1);
v81 = v79[1].m128i_i64[0];
v206 = *v79;
v80 = v206;
v207 = v81;
LOBYTE(v220) = 12;
v82 = (__int128 *)&v206;
v79[1].m128i_i32[0] = 0;
v79[1].m128i_i32[1] = 15;
v79->m128i_i8[0] = 0;
v83 = _mm_cvtsi128_si32(v80);
if ( HIDWORD(v207) > 0xF )
v82 = (__int128 *)v83;
sub_5D2616A0(v82, v207);
LOBYTE(v220) = 11;
if ( HIDWORD(v207) > 0xF )
{
v84 = v206.m128i_i32[0];
if ( (unsigned int)(HIDWORD(v207) + 1) >= 0x1000 )
{
v84 = *(_DWORD *)(v206.m128i_i32[0] - 4);
v43 = HIDWORD(v207) + 36;
if ( (unsigned int)(v206.m128i_i32[0] - v84 - 4) > 0x1F )
goto LABEL_252;
}
sub_5D808EAC(v84);
}
LOBYTE(v220) = 10;
if ( HIDWORD(v194) > 0xF )
{
v85 = v193;
if ( (unsigned int)(HIDWORD(v194) + 1) >= 0x1000 )
{
v85 = *(_DWORD *)(v193 - 4);
v43 = HIDWORD(v194) + 36;
if ( (unsigned int)(v193 - v85 - 4) > 0x1F )
goto LABEL_252;
}
sub_5D808EAC(v85);
}
v194 = 0xF00000000i64;
LOBYTE(v193) = 0;
LOBYTE(v220) = 3;
if ( v210 > 0xF )
{
v86 = v208;
if ( v210 + 1 >= 0x1000 )
{
v86 = *(_DWORD *)(v208 - 4);
v43 = v210 + 36;
if ( (unsigned int)(v208 - v86 - 4) > 0x1F )
goto LABEL_252;
}
sub_5D808EAC(v86);
}
v87 = v185;
v88 = &v214;
v175 = 0;
v89 = *v185 == dword_5E07D858;
v176 = 0;
if ( v216 > 0xF )
v88 = (__int128 *)v214;
if ( (unsigned __int8)sub_5D4B41C0(v88, v89, 0, &v175) )
{
v90 = v87[1];
if ( v90 )
_InterlockedIncrement((volatile signed __int32 *)(v90 + 4));
v91 = v87[1];
v92 = *v87;
v93 = (volatile signed __int32 *)dword_5E07D85C;
dword_5E07D858 = v92;
dword_5E07D85C = v91;
if ( v93 )
{
if ( !_InterlockedExchangeAdd(v93 + 1, 0xFFFFFFFF) )
{
(**(void (__thiscall ***)(volatile signed __int32 *))v93)(v93);
if ( !_InterlockedExchangeAdd(v93 + 2, 0xFFFFFFFF) )
(*(void (__thiscall **)(volatile signed __int32 *))(*v93 + 4))(v93);
}
}
}
sub_5D481650();
v220 = -1;
if ( v216 > 0xF )
{
v94 = v214;
if ( v216 + 1 >= 0x1000 )
{
v94 = *(_DWORD *)(v214 - 4);
v43 = v216 + 36;
if ( (unsigned int)(v214 - v94 - 4) > 0x1F )
goto LABEL_252;
}
sub_5D808EAC(v94);
}
v95 = *(_DWORD *)(v172 + 32);
v96 = v172 + 28;
v188 = v172 + 44;
v177 = v172 + 16;
v97 = *(_DWORD *)(v95 + 4);
v98 = sub_5D3F91A0((char *)&v171 + 4);
LOBYTE(v180) = 0;
v159 = __PAIR64__(v96, v97);
sub_5D3F8A30(&v160, *(_QWORD *)v98, *(_DWORD *)(v98 + 8), v97);
HIDWORD(v171) = v161;
*(_QWORD *)((char *)&v171 + 4) = v160;
if ( (_BYTE *)v160 == v178 )
break;
v22 = (_DWORD *)DWORD1(v171);
v185 = (int *)DWORD1(v171);
}
}
if ( byte_5E07D8A5 )
{
v206.m128i_i32[3] = v156;
LOBYTE(v207) = v157;
v205 = 0i64;
BYTE4(v207) = v158;
memset(v204, 0, 13);
v206.m128i_i8[0] = 0;
*(__int64 *)((char *)v206.m128i_i64 + 4) = v155;
sub_5D3F8BA0(v204);
sub_5D3F8BA0(&v192);
sub_5D3F8BA0(v204);
v153[5] = 1;
v99 = 1;
v170 = 1;
v100 = *(_DWORD *)(v153[1] + 4);
DWORD2(v169) = &v152;
HIDWORD(v169) = &v151;
*(_QWORD *)&v169 = __PAIR64__(v153, v100);
sub_5D3F9730((char *)&v171 + 4);
while ( v99 && v100 != DWORD1(v171) )
{
v168 = v169;
v101 = *(int **)sub_5D3F9220(&v168);
v102 = v101[1];
if ( v102 )
_InterlockedIncrement((volatile signed __int32 *)(v102 + 4));
v103 = v101[1];
v104 = (volatile signed __int32 *)dword_5E07D85C;
dword_5E07D858 = *v101;
dword_5E07D85C = v103;
if ( v104 )
{
if ( !_InterlockedExchangeAdd(v104 + 1, 0xFFFFFFFF) )
{
(**(void (__thiscall ***)(volatile signed __int32 *))v104)(v104);
if ( !_InterlockedExchangeAdd(v104 + 2, 0xFFFFFFFF) )
(*(void (__thiscall **)(volatile signed __int32 *))(*v104 + 4))(v104);
}
}
sub_5D3F9220(&v169);
v100 = v169;
v99 = --v170;
}
v148 = sub_5D47A9F0();
sub_5D485040(LODWORD(v148));
}
sub_5D478970();
sub_5D484450(0, -1082130432);
v184 = 0x43FA000000000000i64;
sub_5D4761B0("ChildR", &v184, 1, 2048);
v105 = dword_5E07D858;
if ( !dword_5E07D858 )
goto LABEL_243;
v106 = (_DWORD *)(dword_5E07D858 + 3);
v190[0] = *(_BYTE *)(dword_5E07D858 + 2);
v107 = *(_BYTE *)(dword_5E07D858 + 1);
v188 = v190[0];
if ( v107 )
{
if ( v107 == 1 )
{
v110 = *(_DWORD *)(sub_5D2C99B0((char *)&v168 + 4, v190) + 8);
if ( !*(_BYTE *)(v110 + 13) && *(_BYTE *)(v105 + 2) >= *(_BYTE *)(v110 + 16) )
goto LABEL_188;
}
}
else
{
v108 = *(_DWORD *)(sub_5D2C99B0((char *)&v168 + 4, v190) + 8);
if ( !*(_BYTE *)(v108 + 13) && *(_BYTE *)(v105 + 2) >= *(_BYTE *)(v108 + 16) )
{
LABEL_188:
v109 = (const char *)sub_5D3F90D0(v190);
if ( *((_DWORD *)v109 + 5) > 0xFu )
v109 = *(const char **)v109;
v105 = dword_5E07D858;
LABEL_195:
v111 = *(_BYTE *)(v105 + 1);
if ( v111 )
{
if ( v111 == 1 )
{
v112 = (const char *)&word_5DBF7614;
}
else
{
v112 = "Amazing packet";
if ( v111 != 2 )
v112 = (const char *)&unk_5DED1924;
}
}
else
{
v112 = "Packet";
}
sub_5D4B74B0("%s %s id %d", v112, v109, v188);
sub_5D4B74B0("Size %d bytes", (*v106 + 7) >> 3);
sub_5D4B46C0();
sub_5D4B74B0("Parameters:");
v180 = v106[2];
sub_5D3F76A0(&v181, *(_BYTE *)(dword_5E07D858 + 1), *(_BYTE *)(dword_5E07D858 + 2), v106);
v113 = v181;
v220 = 13;
v188 = (unsigned int)v182;
if ( v181 != v182 )
{
do
{
v114 = v113;
if ( (unsigned int)v113[5] > 0xF )
v114 = (int *)*v113;
v115 = (_DWORD *)sub_5D325DF0(&v206, v114, v113[4]);
v116 = v115[5] 0xF )
{
v117 = v206.m128i_i32[0];
if ( (unsigned int)(HIDWORD(v207) + 1) >= 0x1000 )
{
v117 = *(_DWORD *)(v206.m128i_i32[0] - 4);
v43 = HIDWORD(v207) + 36;
if ( (unsigned int)(v206.m128i_i32[0] - v117 - 4) > 0x1F )
goto LABEL_252;
}
sub_5D808EAC(v117);
}
v113 += 6;
}
while ( v113 != (int *)v188 );
}
sub_5D4B46C0();
sub_5D4B74B0("Unreaded bits %d", *v106 - v106[2]);
sub_5D4B74B0("Dump:");
v118 = v180;
v119 = *v106 - v180;
v106[2] = v180;
sub_5D268600((int)(v119 + 7) >> 3, 0);
v120 = &v211;
v121 = *v106 - v106[2];
if ( v213 > 0xF )
v120 = (__int128 *)v211;
LOBYTE(v220) = 15;
sub_5D321C50(v120, v121, 1);
v106[2] = v118;
v122 = &v211;
if ( v213 > 0xF )
v122 = (__int128 *)v211;
v123 = (_DWORD *)sub_5D3FB230(&v201, v122, v212);
v116 = v123[5] 0xF )
{
v126 = v206.m128i_i32[0];
if ( (unsigned int)(HIDWORD(v207) + 1) >= 0x1000 )
{
v126 = *(_DWORD *)(v206.m128i_i32[0] - 4);
v43 = HIDWORD(v207) + 36;
if ( (unsigned int)(v206.m128i_i32[0] - v126 - 4) > 0x1F )
goto LABEL_252;
}
sub_5D808EAC(v126);
}
v207 = 0xF00000000i64;
v206.m128i_i8[0] = 0;
LOBYTE(v220) = 15;
if ( v203 0xF )
{
v128 = v211;
if ( v213 + 1 >= 0x1000 )
{
v128 = *(_DWORD *)(v211 - 4);
v129 = v213 + 36;
if ( (unsigned int)(v211 - v128 - 4) > 0x1F )
goto LABEL_253;
}
sub_5D808EAC(v128);
}
v130 = v181;
v212 = 0;
v213 = 15;
LOBYTE(v211) = 0;
v220 = -1;
if ( !v181 )
{
LABEL_243:
sub_5D478970();
sub_5D4A9C50("Auto select latest", &byte_5E07D8A5);
sub_5D4815E0();
return (_DWORD *)sub_5D478730();
}
v131 = v182;
if ( v181 != v182 )
{
do
{
v132 = v130[5];
if ( v132 > 0xF )
{
v133 = *v130;
v134 = v132 + 1;
if ( v134 >= 0x1000 )
{
v129 = v134 + 35;
if ( (unsigned int)(v133 - *(_DWORD *)(v133 - 4) - 4) > 0x1F )
goto LABEL_253;
v133 = *(_DWORD *)(v133 - 4);
}
sub_5D808EAC(v133);
}
v130[4] = 0;
v130[5] = 15;
*(_BYTE *)v130 = 0;
v130 += 6;
}
while ( v130 != v131 );
v130 = v181;
}
v135 = v130;
v136 = 24 * (((char *)v183 - (char *)v130) / 24);
if ( v136
что тут именно надо для открытия меню раклоггера, и как вообще получить оффсет может кто объяснить я 0 в реверсинге
paulohardy
11.03.2025, 00:12
1.Ваш вопрос: Пытаюсь реализовать Silent Aim для самп мобайл серверов. Суть реализации: Хукаю Send, ловлю пакет BulletSync и подменяю координаты пули на позицию врага. Что же происходит в итоге, я вижу со своего твинка, что анимации стрельбы есть, но самих пуль вообще нет. Также пытался ловить пакете Aim sync и подменять там координаты позиции, все равно ничего не работает. Кто то может знает, как можно реализовать, возможно связаться через телеграм, даже готов за определенную оплату. Если кто то может, буду очень рад. Уже долго мучаюсь и ничего не могу понять, почему же оно не работает правильно
время стрельбы по пингу давно прошло, удачность выстрела считается на клиенте отправителя
bulletsync не наносит урон, он просто рисует трассер и подмена траектории пули ничего не решит
отсутствие трассеров после корректировки скорее всего обусловлено ошибкой где-то, а чтобы появился урон нужно отправлять RPC_GIVETAKEDAMAGE
AlexeyPetrov111
11.03.2025, 00:34
время стрельбы по пингу давно прошло, удачность выстрела считается на клиенте отправителя
bulletsync не наносит урон, он просто рисует трассер и подмена траектории пули ничего не решит
отсутствие трассеров после корректировки скорее всего обусловлено ошибкой где-то, а чтобы появился урон нужно отправлять RPC_GIVETAKEDAMAGE
Дамаг я пробовал отправить. Проблема в том, что дамаг с оружий не проходит через отправку дамага. Я пытался отправить дамаг с руки, он проходит, а вот с оружий уже нет.
paulohardy
11.03.2025, 00:39
Дамаг я пробовал отправить. Проблема в том, что дамаг с оружий не проходит через отправку дамага. Я пытался отправить дамаг с руки, он проходит, а вот с оружий уже нет.
можешь посмотреть чужую реализацию на примере https://github.com/Stickey21/Stealth-Remastered/blob/origin/Stealth Remastered/Features/Aimbot.cpp (https://github.com/Stickey21/Stealth-Remastered/blob/origin/Stealth%20Remastered/Features/Aimbot.cpp)
ну и твой код конечно же нужен, если ты ожидаешь помощи
paulohardy
11.03.2025, 21:20
bsSync.origin.x = my_position.x; bsSync.origin.y = my_position.y; bsSync.origin.z = my_position.z;
так делать не надо, origin != позиции педа
Попытался реализовать по-другому, без отправок каких либо.
если ты не попал в противника у себя в игре, то без ручной отправки rpc givedamage урона не будет
Похож на тот, что вы прислали выше, пули вроде летят в человека (от моего лица) от другого лица пули летят в ту точку, куда установлен прицел
должно быть наоборот, поскольку взаимодействие происходит только с сетевой частью
хук отправки пакета и изменение вектора трассера в нем не влекут за собой изменение того вектора, по которому твоей клиент его рисует
C++:
BitStream bsGiveDamage
;
bsGiveDamage
.
Write
(
(
bool
)
false
)
;
bsGiveDamage
.
Write
(
(
uint16_t
)
player_id
)
;
bsGiveDamage
.
Write
(
(
float
)
30.f
)
;
bsGiveDamage
.
Write
(
(
uint32_t
)
31
)
;
bsGiveDamage
.
Write
(
(
uint32_t
)
2
)
;
если синхронизация мобильного клиента идентична обычной самповской, то в этом куске(50-55 строки из твоего сообщения) вообще невалидные данные
30.f - у m4 такого урона не бывает
части тела с номером 2 тоже не бывает кликабельно (https://sampwiki.blast.hk/wiki/BodyParts)
paulohardy
11.03.2025, 22:20
Если что проект black russia
насколько мне известно у них многое там перекопано, так что оригинальные самповские структуры могут не подойти
сверь с этим https://www.blast.hk/threads/229993/
AlexeyPetrov111
11.03.2025, 22:22
насколько мне известно у них многое там перекопано, так что оригинальные самповские структуры могут не подойти
сверь с этим https://www.blast.hk/threads/229993/
Это базу я видел и уже давно ей пользуюсь. Структуры, которые используются под отправку я проверил и все нормально(логал и смотрел).
Это базу я видел и уже давно ей пользуюсь. Структуры, которые используются под отправку я проверил и все нормально(логал и смотрел).
Мой вопрос остается открытым. Если кто то может помочь, необязательно прям все готовое. Мне хочется понять хотя бы проблему и в какую сторону двигаться, я уже сижу не первый день, если кто то может помочь. Можем связаться в тг и даже договориться за определенную оплату, мне просто нужен результат какой то получить. Так как видимо отправку дамага нельзя сделать или нужно подменять какие то значения, так как они проверяют оружие, так как обычный дамаг рукой отправляется нормально.
AlexeyPetrov111
13.03.2025, 05:06
насколько мне известно у них многое там перекопано, так что оригинальные самповские структуры могут не подойти
сверь с этим https://www.blast.hk/threads/229993/
Я нашел один из ваших ответов, где вы советовали человеку с похожей проблемой указывать координаты педа в origin. Или тут про что то другое? Вроде бы все также, что урон не регистрировался.
https://forum.antichat.xyz/attachments/28591629/
paulohardy
13.03.2025, 13:29
Я нашел один из ваших ответов, где вы советовали человеку с похожей проблемой указывать координаты педа в origin. Или тут про что то другое? Вроде бы все также, что урон не регистрировался.
ответ очень старый, не думаю что античиты так дотошно проверяют origin в пакетах
в твоей ситуации могу только посоветовать сравнить оригинальные пакеты и те, что ты отправляешь
AlexeyPetrov111
13.03.2025, 18:08
ответ очень старый, не думаю что античиты так дотошно проверяют origin в пакетах
в твоей ситуации могу только посоветовать сравнить оригинальные пакеты и те, что ты отправляешь
А какие то ограничения могут быть? Если например прицел уводить на 180 градусов, это конечно логично, что не даст зарегистрировать, но обойти это вообще возможно?
ответ очень старый, не думаю что античиты так дотошно проверяют origin в пакетах
в твоей ситуации могу только посоветовать сравнить оригинальные пакеты и те, что ты отправляешь
И вот я еще заметил что. С разных оружий по разному эти ограничения работают, у кого то больше можно увести от цели прицел, а у кого-то намного меньше.
Это тоже вроде как звучит логично, что у всех разная отдача и дальность. Но мешает конечно знатно
mikky1337
14.03.2025, 06:15
1741918483554.pngmikky1337 · 14 Мар 2025 в 05:15' data-fancybox="lb-post-1591817" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/265485/" style="cursor: pointer;" title="1741918483554.png">
https://forum.antichat.xyz/attachments/28591817/
правильно закомпилил plugin-sdk, но когда компилю плагин ошибки в чем может быть проблема?
правильно закомпилил plugin-sdk, но когда компилю плагин ошибки в чем может быть проблема?
Поставь preview стандарт C++ в настройках проекта
Привет, Я работаю над модом, который изменяет модель транспортного средства. Мне удаётся успешно заменить её, создавая новую машину и назначая её старой структуре через CVehicle, но, похоже, структура повреждается, и синхронизация водителя перестаёт работать в момент, когда я сажусь в транспорт. Есть ли способ изменить локальную модель транспорта, но при этом сохранить синхронизацию и старые свойства машины? Идея должна быть похожа на кастомный CPed. Спасибо!
fffaff123321ggg
26.03.2025, 10:19
Как защитить программу от статического анализа?
Receiver
26.03.2025, 12:29
Как защитить программу от статического анализа?
Использовать упаковщики/проекторы (UPX, VMProtect) и мутировать код (вместо вызовов API использовать Nt, шифровать строки в статике)
vmprotect
26.03.2025, 12:38
Как защитить программу от статического анализа?
vmprotect
NullPhantom
26.03.2025, 16:55
Всем привет.
Проверка на переполнения буфера.
Ввожу strcpy и компилятор выдает ошибку прося ввести strcpy_c
сразу говорю что компилятор плюсов а не си
1742993696722.pngNullPhantom · 26 Мар 2025 в 15:55' data-fancybox="lb-post-1594774" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/266391/" style="cursor: pointer;" title="1742993696722.png">
https://forum.antichat.xyz/attachments/28594774/
Buffer:
[CODE]
#include
#include
int
main
(
)
{
setlocale
(
LC_ALL
,
"RU"
)
;
char
Buffer
[
20
]
=
{
'\0'
}
;
std
::
cout
[QUOTE="std::vector<>"]
Всем привет.
Проверка на переполнения буфера.
Ввожу strcpy и компилятор выдает ошибку прося ввести strcpy_c
сразу говорю что компилятор плюсов а не си
Buffer:
[CODE]
#include
#include
int
main
(
)
{
setlocale
(
LC_ALL
,
"RU"
)
;
char
Buffer
[
20
]
=
{
'\0'
}
;
std
::
cout
1742995526923.pngARMOR · 26 Мар 2025 в 16:25' data-fancybox="lb-post-1594779" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/266394/" style="cursor: pointer;" title="1742995526923.png">
https://forum.antichat.xyz/attachments/28594779/
NikitosikSSS
28.03.2025, 02:03
Почему при использовании функции IsLineOfSightClear моргают обьекты?
Receiver
28.03.2025, 12:49
Почему при использовании функции IsLineOfSightClear моргают обьекты?
Это странное поведение. Попробуй вызвать эту же функцию в Lua (https://www.blast.hk/dokuwiki/lua:islineofsightclear) и проверь как оно себя поведёт. Если будет так же моргать, то проблема у тебя в ГТАшке, иначе ты возможно нашёл не ту функцию или неправильно её вызываешь. Без более детального описания тут не помочь.
Receiver
28.03.2025, 12:54
[QUOTE="std::vector<>"]
Всем привет.
Проверка на переполнения буфера.
Ввожу strcpy и компилятор выдает ошибку прося ввести strcpy_c
сразу говорю что компилятор плюсов а не си
Buffer:
[CODE]
#include
#include
int
main
(
)
{
setlocale
(
LC_ALL
,
"RU"
)
;
char
Buffer
[
20
]
=
{
'\0'
}
;
std
::
cout
Preprocessor -> Preprocessor Definitions.
1743152056840.pngReceiver · 28 Мар 2025 в 11:54' data-fancybox="lb-post-1595230" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/266489/" style="cursor: pointer;" title="1743152056840.png">
https://forum.antichat.xyz/attachments/28595230/
Про SDL чеки: https://learn.microsoft.com/ru-ru/c...rity-checks?view=msvc-170#compile-time-checks (https://www.blast.hk/redirect/aHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL3J1LXJ1L2NwcC 9idWlsZC9yZWZlcmVuY2Uvc2RsLWVuYWJsZS1hZGRpdGlvbmFs LXNlY3VyaXR5LWNoZWNrcz92aWV3PW1zdmMtMTcwI2NvbXBpbG UtdGltZS1jaGVja3M)
4el0ve4ik
30.03.2025, 21:51
C++:
void
__fastcall
Hook_DoHeadLightBeam
(
CVehicle
*
vehicle
,
void
*
edx
,
int
arg0
,
CMatrix
&
matrix
,
unsigned
char
arg2
)
{
vehicle
->
DoHeadLightBeam
(
arg0
,
matrix
,
arg2
)
;
}
C++:
patch
::
RedirectCall
(
0x6A2EDA
,
Hook_DoHeadLightBeam
)
;
patch
::
RedirectCall
(
0x6A2EF2
,
Hook_DoHeadLightBeam
)
;
patch
::
RedirectCall
(
0x6BDE80
,
Hook_DoHeadLightBeam
)
;
как можно покрасить луч если в void __thiscall CVehicle::DoHeadLightBeam(CVehicle *this, int a2, CMatrix *m, char a4) нету по типу r,g,b как в StoreCarLightShadow
есть только
ida pro:
.text:006E12F6 0A0 B9 FF FF FF 00 mov ecx, 0FFFFFFh
но как тогда красить луч только для нужного CVehicle
Делаешь в хуке проверку то что функция вызвана для нужного т/с.
цвет ты тоже верно нашел, B9 трогать не нужно, все что идёт дальше - цвет, в формате BGR, т.е. 6E12F7 -blue, 6E12F8 -green, 6E12F9 -red.
дальше просто берешь в хуке и
C++:
void
setColor
(
unsigned
char
r
,
unsigned
char
g
,
unsigned
char
b
)
{
//функция написана условна, не забываем про снятия протекта памяти.
*
reinterpret_cast
(
0x6E12F9
)
=
r
;
*
reinterpret_cast
(
0x6E12F8
)
=
g
;
*
reinterpret_cast
(
0x6E12F7
)
=
b
;
}
void
__fastcall
Hook_DoHeadLightBeam
(
CVehicle
*
vehicle
,
void
*
edx
,
int
arg0
,
CMatrix
&
matrix
,
unsigned
char
arg2
)
{
setColor
(
0x00
,
0x00
,
0xff
)
;
//требуемый цвет
vehicle
->
DoHeadLightBeam
(
arg0
,
matrix
,
arg2
)
;
setColor
(
0xff
,
0xff
,
0xff
)
;
// восстанавливаем оригинальный цвет
}
https://forum.antichat.xyz/attachments/28595820/
tanksoftik
03.04.2025, 15:33
C++:
int
AddParticle
(
FxSystem_c
*
particle
,
RwV3d
*
position
,
RwV3d
*
velocity
,
float
unk
,
FxPrtMult_c
*
particleData
,
float
a6
,
float
brightness
,
float
a8
,
int
a9
)
{
particle
->
AddParticle
(
position
,
velocity
,
unk
,
particleData
,
a6
,
brightness
,
a8
,
a9
)
;
return
1
;
}
C++:
patch
::
RedirectCall
(
0x6DF303
,
AddParticle
)
;
patch
::
RedirectCall
(
0x6DEE83
,
AddParticle
)
;
patch
::
RedirectCall
(
0x6DF0C3
,
AddParticle
)
;
функцию AddParticle что в ней передается брал фулл из ida
psevdocode:
int __thiscall FxSystem_c::AddParticle(
FxSystem_c *particle,
CVector *position,
CVector *velocity,
float unk,
FxPrtMult_c *particleData,
float a6,
float brightness,
float a8,
int a9)
{
int v10; // esi
int result; // eax
FxPrim_c *particlePrim; // ecx
float v13; // [esp+18h] [ebp-8h]
int i; // [esp+3Ch] [ebp+1Ch]
v10 = (rand() * 0.000030517578 * 100.0);
result = Fx_c::GetFxQuality(&g_fx);
if ( result || v10 >= 50 )
{
result = Fx_c::GetFxQuality(&g_fx);
if ( result != FX_MEDIUM || v10 >= 25 )
{
v13 = 1.0;
if ( brightness m_pBluePrint->m_nNumEmitters; i = ++result )
{
particlePrim = particle->PrimsList[result];
if ( particlePrim->m_bEnabled )
{
(particlePrim->vtable->field_14)(
particlePrim,
position,
velocity,
LODWORD(unk),
particleData,
LODWORD(a6),
COERCE_FLOAT(LODWORD(v13)),
a9);
result = i;
}
}
}
}
return result;
}
но почему то крашит, пробовал пустую функцию делать все равно крашит
4el0ve4ik
03.04.2025, 15:39
C++:
int
AddParticle
(
FxSystem_c
*
particle
,
RwV3d
*
position
,
RwV3d
*
velocity
,
float
unk
,
FxPrtMult_c
*
particleData
,
float
a6
,
float
brightness
,
float
a8
,
int
a9
)
{
particle
->
AddParticle
(
position
,
velocity
,
unk
,
particleData
,
a6
,
brightness
,
a8
,
a9
)
;
return
1
;
}
C++:
patch
::
RedirectCall
(
0x6DF303
,
AddParticle
)
;
patch
::
RedirectCall
(
0x6DEE83
,
AddParticle
)
;
patch
::
RedirectCall
(
0x6DF0C3
,
AddParticle
)
;
функцию AddParticle что в ней передается брал фулл из ida
psevdocode:
int __thiscall FxSystem_c::AddParticle(
FxSystem_c *particle,
CVector *position,
CVector *velocity,
float unk,
FxPrtMult_c *particleData,
float a6,
float brightness,
float a8,
int a9)
{
int v10; // esi
int result; // eax
FxPrim_c *particlePrim; // ecx
float v13; // [esp+18h] [ebp-8h]
int i; // [esp+3Ch] [ebp+1Ch]
v10 = (rand() * 0.000030517578 * 100.0);
result = Fx_c::GetFxQuality(&g_fx);
if ( result || v10 >= 50 )
{
result = Fx_c::GetFxQuality(&g_fx);
if ( result != FX_MEDIUM || v10 >= 25 )
{
v13 = 1.0;
if ( brightness m_pBluePrint->m_nNumEmitters; i = ++result )
{
particlePrim = particle->PrimsList[result];
if ( particlePrim->m_bEnabled )
{
(particlePrim->vtable->field_14)(
particlePrim,
position,
velocity,
LODWORD(unk),
particleData,
LODWORD(a6),
COERCE_FLOAT(LODWORD(v13)),
a9);
result = i;
}
}
}
}
return result;
}
но почему то крашит, пробовал пустую функцию делать все равно крашит
Потому что нужно соглашение о вызове указать.
C++:
int
__fastcall
AddParticle
(
FxSystem_c
*
particle
,
void
*
unused
,
RwV3d
*
position
,
RwV3d
*
velocity
,
float
unk
,
FxPrtMult_c
*
particleData
,
float
a6
,
float
brightness
,
float
a8
,
int
a9
)
{
particle
->
AddParticle
(
position
,
velocity
,
unk
,
particleData
,
a6
,
brightness
,
a8
,
a9
)
;
return
1
;
}
Кстати почему ты возвращаешь единицу, а не то что тебе отдает оригинальная функция, это задумка или проёб?
tanksoftik
03.04.2025, 20:29
C++:
int
__fastcall
AddParticle
(
FxSystem_c
*
particle
,
void
*
unused
,
RwV3d
*
position
,
RwV3d
*
velocity
,
float
unk
,
FxPrtMult_c
*
particleData
,
float
a6
,
float
brightness
,
float
a8
,
int
a9
)
{
particleData
->
m_color
.
red
=
1
;
particleData
->
m_color
.
green
=
0
;
particleData
->
m_color
.
blue
=
0
;
particle
->
AddParticle
(
position
,
velocity
,
unk
,
particleData
,
a6
,
brightness
,
a8
,
a9
)
;
return
1
;
}
как теперь можно получить CVehicle что бы получать нужный color или же activated
4el0ve4ik
03.04.2025, 22:03
C++:
int
__fastcall
AddParticle
(
FxSystem_c
*
particle
,
void
*
unused
,
RwV3d
*
position
,
RwV3d
*
velocity
,
float
unk
,
FxPrtMult_c
*
particleData
,
float
a6
,
float
brightness
,
float
a8
,
int
a9
)
{
particleData
->
m_color
.
red
=
1
;
particleData
->
m_color
.
green
=
0
;
particleData
->
m_color
.
blue
=
0
;
particle
->
AddParticle
(
position
,
velocity
,
unk
,
particleData
,
a6
,
brightness
,
a8
,
a9
)
;
return
1
;
}
как теперь можно получить CVehicle что бы получать нужный color или же activated
Сделать прослойку где ты будешь передавать в регистр edx тот самый CVehicle*, в таком варианте он у тебя будет приходить вторым аргументом, который сейчас обзывается: void* unused. Это самый простой вариант.
tanksoftik
06.04.2025, 18:36
какой оффсет Create3DTextLabel r1
пробовал искать в idb но чет там нету ну или я не нашел
какой оффсет Create3DTextLabel r1
пробовал искать в idb но чет там нету ну или я не нашел
в sampapi
vmprotect
06.04.2025, 21:28
Короче, как сделать, чтобы хук на LoadTxd редиректил в два разных адреса, в зависимости от того, какой txd'шник грузится? типа
Один FONT.TXD - 0x7320B0
Второй zalupa.txd - какой-то другой адрес
С++:
bool
__cdecl
TestHOOK
(
const
decltype
(
CTxdStore__LoadTxd_Hook
)
&
hook
,
int
index
,
const
char
*
filename
)
{
if
(
strcmp
(
filename
,
(
char
*
)
0x86A648
)
==
0
)
{
return
hook
.
call_trampoline
(
index
,
"FONT.TXD"
)
;
}
else
if
(
strcmp
(
filename
,
(
char
*
)
0x0000
)
==
0
)
{
return
hook
.
call_trampoline
(
index
,
"zalupa.txd"
)
;
}
return
hook
.
call_trampoline
(
index
,
filename
)
;
}
void
install_fucking_hook
(
)
{
CTxdStore__LoadTxd_Hook
.
set_dest
(
0x7320B0
)
;
CTxdStore__LoadTxd_Hook
.
set_cb
(
TestHOOK
)
;
CTxdStore__LoadTxd_Hook
.
install
(
)
;
}
а то я пытался делать в разных функциях, то оно работает только в одном из них а не все, допустим шрифт заменяется а другой txd нет
как можно изменить handling для определенного cvehicle
как можно изменить handling для определенного cvehicle
Кажись у каждого CVehicle есть поле с хендлингом
plugin-sdk/plugin_sa/game_sa/CVehicle.h at master · DK22Pac/plugin-sdk (https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CVehicle.h#L96)
An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk
github.com
plugin-sdk/plugin_sa/game_sa/tHandlingData.h at master · DK22Pac/plugin-sdk (https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/tHandlingData.h)
An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk
github.com
Короче, как сделать, чтобы хук на LoadTxd редиректил в два разных адреса, в зависимости от того, какой txd'шник грузится? типа
Один FONT.TXD - 0x7320B0
Второй zalupa.txd - какой-то другой адрес
С++:
bool
__cdecl
TestHOOK
(
const
decltype
(
CTxdStore__LoadTxd_Hook
)
&
hook
,
int
index
,
const
char
*
filename
)
{
if
(
strcmp
(
filename
,
(
char
*
)
0x86A648
)
==
0
)
{
return
hook
.
call_trampoline
(
index
,
"FONT.TXD"
)
;
}
else
if
(
strcmp
(
filename
,
(
char
*
)
0x0000
)
==
0
)
{
return
hook
.
call_trampoline
(
index
,
"zalupa.txd"
)
;
}
return
hook
.
call_trampoline
(
index
,
filename
)
;
}
void
install_fucking_hook
(
)
{
CTxdStore__LoadTxd_Hook
.
set_dest
(
0x7320B0
)
;
CTxdStore__LoadTxd_Hook
.
set_cb
(
TestHOOK
)
;
CTxdStore__LoadTxd_Hook
.
install
(
)
;
}
а то я пытался делать в разных функциях, то оно работает только в одном из них а не все, допустим шрифт заменяется а другой txd нет
У ктхуков в контексте кажись есть метод для получения указателя на return_address. Можешь попробовать его изменить
Кажись у каждого CVehicle есть поле с хендлингом
plugin-sdk/plugin_sa/game_sa/CVehicle.h at master · DK22Pac/plugin-sdk (https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CVehicle.h#L96)
An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk
github.com
plugin-sdk/plugin_sa/game_sa/tHandlingData.h at master · DK22Pac/plugin-sdk (https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/tHandlingData.h)
An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk
github.com
при изменении меняется для всей модели а мне надо как то сделать для определеного CVehicle
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot