Просмотр полной версии : С/С++ Вопрос - Ответ
Unknown_251
21.02.2023, 23:20
Как проверить была ли нажата кнопка мыши (например левая) с помощью SAMPFUNCS?
Желательно без вешания обработчика событий на окно игры.
Как я могу сделать то же самое, но на C++? (Я просто хочу научиться отправлять данные в дискорд)) (.asi — .sf)
Lua:
local
encoding
=
require
'encoding'
-- подключаем для корректной отправки русских букв
encoding
.
default
=
'CP1251'
u8
=
encoding
.
UTF8
local
sampev
=
require
'lib.samp.events'
-- подключаем для хука отправки ответа на диалог
local
effil
=
require
'effil'
-- для ассинхронных запросов
local
url
=
'URL'
local
data
=
{
[
'content'
]
=
''
,
-- текст (меняется через команду, так что можно оставить пустым)
[
'username'
]
=
'Sended from .lua script!'
,
-- ник отправителя
[
'avatar_url'
]
=
'https://c.tenor.com/Z9mXH7-MlcsAAAAS/sexy-black-man-thirst-trap.gif'
,
-- ссылка на аватарку (можно убрать, будет дефолтная)
[
'tts'
]
=
false
,
-- tts - text to speech - читалка сообщений (true/false)
-- так же можно сделать еще много чего, подробнее тут: https://discord.com/developers/docs/resources/webhook
}
function
main
(
)
while
not
isSampAvailable
(
)
do
wait
(
0
)
end
sampRegisterChatCommand
(
'ds.msg'
,
function
(
arg
)
data
[
'username'
]
=
sampGetPlayerNickname
(
select
(
2
,
sampGetPlayerIdByCharHandle
(
PLAYER_PED
)
)
)
-- ник отправителя = ник в игре
data
[
'content'
]
=
arg
-- делаем что бы текст сообщения был равен тексту который мы ввели после команды
-- отправляем запрос
asyncHttpRequest
(
'POST'
,
url
,
{
headers
=
{
[
'content-type'
]
=
'application/json'
}
,
data
=
u8
(
encodeJson
(
data
)
)
}
,
function
(
response
)
print
(
'[WebHook] [OK] отправлено!'
)
end
,
function
(
err
)
print
(
'[WebHook] [ERROR] error: '
..
err
)
end
)
end
)
wait
(
-
1
)
end
-- функция для отправки ассинхронных сообщений
function
asyncHttpRequest
(
method
,
url
,
args
,
resolve
,
reject
)
local
request_thread
=
effil
.
thread
(
function
(
method
,
url
,
args
)
local
requests
=
require
'requests'
local
result
,
response
=
pcall
(
requests
.
request
,
method
,
url
,
args
)
if
result
then
response
.
json
,
response
.
xml
=
nil
,
nil
return
true
,
response
else
return
false
,
response
end
end
)
(
method
,
url
,
args
)
-- Если запрос без функций обработки ответа и ошибок.
if
not
resolve
then
resolve
=
function
(
)
end
end
if
not
reject
then
reject
=
function
(
)
end
end
-- Проверка выполнения потока
lua_thread
.
create
(
function
(
)
local
runner
=
request_thread
while
true
do
local
status
,
err
=
runner
:
status
(
)
if
not
err
then
if
status
==
'completed'
then
local
result
,
response
=
runner
:
get
(
)
if
result
then
resolve
(
response
)
else
reject
(
response
)
end
return
elseif
status
==
'canceled'
then
return
reject
(
status
)
end
else
return
reject
(
err
)
end
wait
(
0
)
end
end
)
end
libcurl (https://github.com/curl/curl)+ хук (https://github.com/katursis/urmem)самп-клиентовских функций
EclipsedFlow
22.02.2023, 00:00
[QUOTE="!Sam#0235"]
Why does the string "CambiarColor" not work for me?
I mean, in the sprintf the text is not shown
I have the "CambiarColor" stored as char
C++:
[CODE]
string CambiarColor
=
"{0000FF}"
;
}
if
(
!
pshow
CambiarColor.c_str()
0x73616D
22.02.2023, 00:04
Try passing sprintf not std::string, but const char* -> CambiarColor.c_str()
It gives me this error.
C++:
CambiarColor
.
c_str
(
)
=
Error
(
active
)
E0153 The expression must have a
class
type
,
but it has the type "
char
EclipsedFlow
22.02.2023, 00:57
It gives me this error.
C++:
CambiarColor
.
c_str
(
)
=
Error
(
active
)
E0153 The expression must have a
class
type
,
but it has the type "
char
sprintf custom function?
0x73616D
22.02.2023, 01:15
sprintf custom function?
i think so, the error occurs with this code
C++:
if
(
pshow
>=
174
)
{
const
char
*
CambiarColor
=
"{0000FF}"
;
}
if
(
!
pshow
Print
(
pall
,
D3DCOLOR_ARGB
(
0XFF
,
0XFF
,
0xFF
,
0xFF
)
,
500
,
400
,
false
)
;
}
Dark_Knight
22.02.2023, 01:26
i think so, the error occurs with this code
C++:
if
(
pshow
>=
174
)
{
const
char
*
CambiarColor
=
"{0000FF}"
;
}
if
(
!
pshow
Print
(
pall
,
D3DCOLOR_ARGB
(
0XFF
,
0XFF
,
0xFF
,
0xFF
)
,
500
,
400
,
false
)
;
}
The code is correct. His work logic is not correct. In the second condition, there is no variable CambiarColor and char it type and he has't member's functions.
0x73616D
22.02.2023, 02:06
The code is correct. His work logic is not correct. In the second condition, there is no variable CambiarColor and char it type and he has't member's functions.
what should i do? can u help me?
EclipsedFlow
22.02.2023, 02:42
i think so, the error occurs with this code
C++:
if
(
pshow
>=
174
)
{
const
char
*
CambiarColor
=
"{0000FF}"
;
}
if
(
!
pshow
Print
(
pall
,
D3DCOLOR_ARGB
(
0XFF
,
0XFF
,
0xFF
,
0xFF
)
,
500
,
400
,
false
)
;
}
C++:
const
char
*
CambiarColor
=
"{0000FF}"
;
if
(
pshow
>=
174
)
{
// example
printf
(
"%s"
,
CambiarColor
)
;
}
if
(
!
pshow
Print
(
pall
,
D3DCOLOR_ARGB
(
0XFF
,
0XFF
,
0xFF
,
0xFF
)
,
500
,
400
,
false
)
;
}
Leatington
23.02.2023, 01:33
Возможно ли получить путь по названию процесса без прав администратора? С помощью OpenProcess и последующим GetModuleFileNameEx не работает, если файл, например, находится в Program Files.
moreveal
23.02.2023, 02:53
Возможно ли получить путь по названию процесса без прав администратора? С помощью OpenProcess и последующим GetModuleFileNameEx не работает, если файл, например, находится в Program Files.
C++:
[CODE]
#include
#include
#include
DWORD
GetProcessId
(
const
char
*
processName
)
{
DWORD processId
=
0
;
PROCESSENTRY32 pe32
;
pe32
.
dwSize
=
sizeof
(
PROCESSENTRY32
)
;
HANDLE hSnapshot
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPPROCESS
,
0
)
;
if
(
hSnapshot
==
INVALID_HANDLE_VALUE
)
{
std
::
cout
0x73616D
26.02.2023, 07:30
What's wrong? The color should change but it doesn't.
C++:
char
piluluall
[
64
]
=
{
0
}
;
int
pshow
=
(
int
)
PEDSELF
->
GetHealth
(
)
+
(
int
)
PEDSELF
->
GetArmor
(
)
;
if
(
(
int
)
pshow
Print
(
piluluall
,
D3DCOLOR_ARGB
(
0XFF
,
255
,
0
,
0
)
,
500
,
400
,
false
)
;
// {FF0000} | R = 255 | G = 0 | B = 0 |
}
else
if
(
(
int
)
pshow
>
30
)
{
sprintf
(
piluluall
,
"%d"
,
(
int
)
pshow
)
;
pFont
->
Print
(
piluluall
,
D3DCOLOR_ARGB
(
0XFF
,
255
,
110
,
0
)
,
500
,
400
,
false
)
;
// {FF6E00} | R = 255 | G = 110 | B = 0 |
}
else
if
(
(
int
)
pshow
>
49
)
{
sprintf
(
piluluall
,
"%d"
,
(
int
)
pshow
)
;
pFont
->
Print
(
piluluall
,
D3DCOLOR_ARGB
(
0XFF
,
255
,
180
,
0
)
,
500
,
400
,
false
)
;
// {FFB400} | R = 255 | G = 180 | B = 0 |
}
else
if
(
(
int
)
pshow
>
74
)
{
sprintf
(
piluluall
,
"%d"
,
(
int
)
pshow
)
;
pFont
->
Print
(
piluluall
,
D3DCOLOR_ARGB
(
0XFF
,
255
,
255
,
0
)
,
500
,
400
,
false
)
;
// {FFFF00} | R = 255 | G = 255 | B = 0 |
}
else
if
(
(
int
)
pshow
>
99
)
{
sprintf
(
piluluall
,
"%d"
,
(
int
)
pshow
)
;
pFont
->
Print
(
piluluall
,
D3DCOLOR_ARGB
(
0XFF
,
150
,
255
,
0
)
,
500
,
400
,
false
)
;
// {96FF00} | R = 150 | G = 255 | B = 0 |
}
else
if
(
(
int
)
pshow
>
124
)
{
sprintf
(
piluluall
,
"%d"
,
(
int
)
pshow
)
;
pFont
->
Print
(
piluluall
,
D3DCOLOR_ARGB
(
0XFF
,
0
,
255
,
0
)
,
500
,
400
,
false
)
;
// {00FF00} | R = 0 | G = 255 | B = 0 |
}
else
if
(
(
int
)
pshow
>
149
)
{
sprintf
(
piluluall
,
"%d"
,
(
int
)
pshow
)
;
pFont
->
Print
(
piluluall
,
D3DCOLOR_ARGB
(
0XFF
,
0
,
255
,
255
)
,
500
,
400
,
false
)
;
// {00FFFF} | R = 0 | G = 255 | B = 255 |
}
else
if
(
(
int
)
pshow
>
174
)
{
sprintf
(
piluluall
,
"%d"
,
(
int
)
pshow
)
;
pFont
->
Print
(
piluluall
,
D3DCOLOR_ARGB
(
0XFF
,
0
,
0
,
255
)
,
500
,
400
,
false
)
;
// {0000FF} | R = 0 | G = 0 | B = 255 |
}
jenees.21
26.02.2023, 15:46
C++:
#include
bool
state
=
false
;
kthook
::
kthook_simple
hook
{
0x747EB0
,
[
]
(
const
auto
&
hook
,
void
*
hwnd
,
unsigned
umsg
,
unsigned
wparam
,
unsigned
lparam
)
{
if
(
uMsg
==
WM_KEYDOWN
&&
wparam
==
VK_F2
&&
!
(
lparam
&
KF_REPEAT
)
)
{
state
=
!
state
;
for
(
auto
value
:
{
0x5109AC
,
0x5109C5
,
0x5231A6
,
0x52322D
,
0x5233BA
}
)
{
unsigned
old
;
VirtualProtect
(
reinterpret_cast
(
value
)
,
1
,
PAGE_READWRITE
,
&
old
)
;
if
(
state
)
*
reinterpret_cast
(
value
)
=
0xEB
;
else
*
reinterpret_cast
(
value
)
=
(
value
(
value
)
,
1
,
old
,
&
old
)
;
}
}
return
hook
.
get_trampoline
(
)
(
hwnd
,
umsg
,
wparam
,
lparam
)
;
}
}
Может кто сделать что бы работало только на ган под 24 айди и скомпилировать?
EclipsedFlow
27.02.2023, 13:34
Как запихнуть к проекту дллку? У меня есть самый простой инжектор в процесс, к которому должна быть в этом же каталоге дллка, что бы я мог вписать её название и она заинжектилась в процесс, можно сделать так, что бы длл была скомпилирована вместе с исполняемым файлом .exe?
Переведи длл-ку или что у тебя там в байты и запиши это в массив, далее из этого массива создаешь файл и записываешь в него. Готово
moreveal
27.02.2023, 14:34
А это сработает если у меня сторонняя длл? Не мной написана, и нету исходника её
да
EclipsedFlow
28.02.2023, 21:25
C++:
static
float
color
[
3
]
{
0.0f
,
0.0f
,
0.0f
}
;
Color is written as INT
C++:
if
(
!
ImGui
::
ColorEdit3
(
"Color"
,
color
,
ImGuiColorEditFlags_PickerHueWheel
)
)
{
set_int_to_ini
(
INI_SECTION
,
INI_KEYR1
,
std
::
to_string
(
int
(
color
[
0
]
*
255
)
)
)
;
set_int_to_ini
(
INI_SECTION
,
INI_KEYG1
,
std
::
to_string
(
int
(
color
[
1
]
*
255
)
)
)
;
set_int_to_ini
(
INI_SECTION
,
INI_KEYB1
,
std
::
to_string
(
int
(
color
[
2
]
*
255
)
)
)
;
}
I need some function to take the color from the .INI itself that does not cause me problems, since the function that I use takes them like this:
https://media.discordapp.net/attachments/990341124080164886/1079944036951015474/image.png
Can anyone help me or know of a better way to do this?
C++:
ImVec4 color
=
{
0.0f
,
0.0f
,
0.0f
,
0.0f
}
;
ImGui
::
ColorEdit4
(
"Color"
,
(
float
*
)
&
color
,
ImGuiColorEditFlags_PickerHueWheel
)
;
ImU32 color_hex
=
ImColor
(
color
)
;
// or
ImU32 color_hex
=
ImGui
::
GetColorU32
(
color
)
;
Young123
01.03.2023, 14:44
Подскажите кто нибудь, есть какие-нибудь туторы по поиску оффсетов сампа в Ida Pro?
Leatington
02.03.2023, 19:18
Как в std::sort передать массив wchar_t?
Как в std::sort передать массив wchar_t?
Конвертировать каждую ячейку в wstring
Musaigen
02.03.2023, 20:38
Как в std::sort передать массив wchar_t?
std::begin, std::end
0x73616D
02.03.2023, 20:43
I need some function to take the color from the .INI itself that does not cause me problems, is for ImGui::ColorEdit, since the function that I use takes them like this:
https://forum.antichat.xyz/attachments/28264918/
Leatington
02.03.2023, 23:01
C++:
bool
srt
(
const
wchar_t
&
value1
,
const
wchar_t
&
value2
)
{
return
(
_wcsicmp
(
(
wchar_t
*
)
value1
,
(
wchar_t
*
)
value2
)
>
0
)
;
}
sort
(
*
russian_names
,
*
russian_names
,
srt
)
;
Почему массив сортируется неправильно?
AdCKuY_DpO4uLa
03.03.2023, 01:29
C++:
bool
srt
(
const
wchar_t
&
value1
,
const
wchar_t
&
value2
)
{
return
(
_wcsicmp
(
(
wchar_t
*
)
value1
,
(
wchar_t
*
)
value2
)
>
0
)
;
}
sort
(
*
russian_names
,
*
russian_names
,
srt
)
;
Почему массив сортируется неправильно?
Потому что это бред. Тебе писали выше, использовать std::begin для получения "начала" Массива и std::end для получения "конца" Массива, ты же тупо разыменовал указатель и передал его по ссылке. Что? Зачем? Для чего? Мало того, ты потом пытаешься это снова привести к указатель. Складывается такое впечатление, что ты и доки к _wcsicmp не читал. Это функция сравнения двух строк, без учёта регистра, которая вернёт > 0, если str1 длинее str2, каким образом там должна быть сортировка, мне не известно, судя по твоему коду, твоя функция будет всегда возвращать что-то одно, причём не понятно в каких случаях что, вероятнее всего, это вообще UB(могу ошибаться)
C++:
[CODE]
#include
#include
#include
int
main
(
)
{
std
::
wstring str
{
L
"awdawdawdfawawdjnsfuhjksd"
}
;
std
::
wcout
https://i.ibb.co/XJTDnyY/image.png
Leatington
03.03.2023, 02:17
[QUOTE="AdCKuY_DpO4uLa"]
Потому что это бред. Тебе писали выше, использовать std::begin для получения "начала" Массива и std::end для получения "конца" Массива, ты же тупо разыменовал указатель и передал его по ссылке. Что? Зачем? Для чего? Мало того, ты потом пытаешься это снова привести к указатель. Складывается такое впечатление, что ты и доки к _wcsicmp не читал. Это функция сравнения двух строк, без учёта регистра, которая вернёт > 0, если str1 длинее str2, каким образом там должна быть сортировка, мне не известно, судя по твоему коду, твоя функция будет всегда возвращать что-то одно, причём не понятно в каких случаях что, вероятнее всего, это вообще UB(могу ошибаться)
C++:
[CODE]
#include
#include
#include
int
main
(
)
{
std
::
wstring str
{
L
"awdawdawdfawawdjnsfuhjksd"
}
;
std
::
wcout
Мне нужно сортировать массив wchar_t, а не строку, а begin и end с ними не работает.
str.data() и тебе выкакает массив
EclipsedFlow
03.03.2023, 02:42
Как в std::sort передать массив wchar_t?
Мне нужно сортировать массив wchar_t, а не строку, а begin и end с ними не работает.
Попробуй
C++:
[CODE]
#include
#include
#include
bool
compare
(
const
wchar_t
*
a
,
const
wchar_t
*
b
)
{
return
(
_wcsicmp
(
a
,
b
)
>
0
)
;
}
int
main
(
)
{
const
wchar_t
*
arr
[
]
=
{
L
"abcd"
,
L
"efg"
,
L
"hi"
,
L
"jklmno"
}
;
const
size_t arr_size
=
sizeof
(
arr
)
/
sizeof
(
arr
[
0
]
)
;
std
::
sort
(
arr
,
arr
+
arr_size
,
compare
)
;
for
(
size_t i
=
0
;
i
AdCKuY_DpO4uLa
03.03.2023, 02:50
Мне нужно сортировать массив wchar_t, а не строку, а begin и end с ними не работает.
C++:
[CODE]
#include
#include
int
main
(
)
{
wchar_t
arr
[
]
=
{
0x100
,
0x200
,
0x300
,
0x105
,
0x90
,
0x700
}
;
for
(
auto
&
it
:
arr
)
std
::
cout
https://i.ibb.co/tXzDCHT/image.png
Digger Man52
03.03.2023, 02:50
I need some function to take the color from the .INI itself that does not cause me problems, is for ImGui::ColorEdit, since the function that I use takes them like this:
use this function to get color from ini and pass it to ImGui::ColorEdit
C++:
ImVec4
getColorFromINI
(
const
char
*
key
,
const
char
*
fileName
)
{
ImVec4 color
;
char
buffer
[
256
]
=
{
}
;
GetPrivateProfileString
(
"color"
,
key
,
""
,
buffer
,
sizeof
(
buffer
)
,
fileName
)
;
sscanf
(
buffer
,
"R %f G %f B %f"
,
&
color
.
x
,
&
color
.
y
,
&
color
.
z
)
;
color
.
w
=
1.0f
;
// Alpha
return
color
;
}
Не могу пересобрать, в чом прикол? 1677840341871.pngggwate2 · 3 Мар 2023 в 13:45' data-fancybox="lb-post-1265276" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/191940/" style="cursor: pointer;" title="1677840341871.png">
https://forum.antichat.xyz/attachments/28265276/
Как сделать проверку на то заспавнился ли игрок без задействования памяти SAMP?
AdCKuY_DpO4uLa
04.03.2023, 01:04
Как сделать проверку на то заспавнился ли игрок без задействования памяти SAMP?
plugin sdk:
CPed
*
pPed
=
FindPlayerPed
(
)
;
if
(
pPed
&&
pPed
->
IsAlive
(
)
)
{
//...
}
plugin sdk:
CPed
*
pPed
=
FindPlayerPed
(
)
;
if
(
pPed
&&
pPed
->
IsAlive
(
)
)
{
//...
}
Пробывал делать проверку через IsAlive, но он возвращает true даже во время подключения к серверу. Мне бы что-то типо того что камера прикреплена к педу
Musaigen
04.03.2023, 08:25
камера прикреплена к педу
0xB6F5F0 == FindPlayerPed() ?
jenees.21
04.03.2023, 10:45
как можно реализовать такое только на с++?
Lua:
local
weapon
=
getCurrentCharWeapon
(
playerPed
)
if
weapon
==
24
then
Digger Man52
04.03.2023, 15:34
как можно реализовать такое только на с++?
Lua:
local
weapon
=
getCurrentCharWeapon
(
playerPed
)
if
weapon
==
24
then
SAMP-API/CPed.cpp at f89b35edb7eaf5db374e32a63f2366c4bb714418 · BlastHackNet/SAMP-API (https://github.com/BlastHackNet/SAMP-API/blob/f89b35edb7eaf5db374e32a63f2366c4bb714418/src/sampapi/0.3.7-R1/CPed.cpp#L41)
A library for interacting with functions, classes and structures of SA-MP client - SAMP-API/CPed.cpp at f89b35edb7eaf5db374e32a63f2366c4bb714418 · BlastHackNet/SAMP-API
github.com
Мне бы что-то типо того что камера прикреплена к педу
C++:
*
reinterpret_cast
(
0x8CC388
)
!=
15
_doomsday_
04.03.2023, 23:39
C++:
void
ReplyDialog
(
bool
button
)
{
BYTE respLen
=
(
BYTE
)
strlen
(
szInput
)
;
RakNet
::
BitStream bsSend
;
bsSend
.
Write
(
(
WORD
)
dialog
.
wDialogID
)
;
bsSend
.
Write
(
(
BYTE
)
button
)
;
bsSend
.
Write
(
(
WORD
)
iSelectedItem
)
;
bsSend
.
Write
(
respLen
)
;
bsSend
.
Write
(
szInput
,
respLen
)
;
Bot
::
pRakInterface
->
RPC
(
&
RPC_DialogResponse
,
&
bsSend
,
HIGH_PRIORITY
,
RELIABLE_ORDERED
,
0
,
FALSE
,
UNASSIGNED_NETWORK_ID
,
NULL
)
;
}
Что не так тут? Не выбираются пункты меню в одном диалоге, в другом всегда выбирается нулевой, в другом все корректно выбираются
iSelectedItem int т.к. это селектор имгуи
upd: забыл передать имя селектора
ччбчлчлчъ ччччшчьпьппзвжв
07.03.2023, 14:35
Можно пж колбеки:
1. Когда виндовс отключает мониторы при бездействии
2. Когда виндовс включает мониторы после бездействия
нашел: https://learn.microsoft.com/ru-ru/windows/win32/power/wm-powerbroadcast?redirectedfrom=MSDN (https://www.blast.hk/redirect/aHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL3J1LXJ1L3dpbm Rvd3Mvd2luMzIvcG93ZXIvd20tcG93ZXJicm9hZGNhc3Q_cmVk aXJlY3RlZGZyb209TVNETg)
Как можно проверить сидит ли мой пед в транспорте?
4el0ve4ik
07.03.2023, 19:21
Как можно проверить сидит ли мой пед в транспорте?
CPed +0x46C = [dword] Проверка игрока:
0 = в воздухе/воде
1 = в машине
2 = входит в интерьер
3 = пешком
18 = истекает кровью
AdCKuY_DpO4uLa
07.03.2023, 19:23
Как можно проверить сидит ли мой пед в транспорте?
C++:
if
(
*
reinterpret_cast
(
0xBA18FC
)
)
{
}
0x73616D
08.03.2023, 07:18
Can someone help me rewrite these .lua snippets in C++? I tried it on my own but it didn't work
Lua:
if
move
==
true
then
cursor
(
)
repeat
wait
(
0
)
cursorx
,
cursory
=
getCursorPos
(
)
sampToggleCursor
(
1
)
Ini
.
cfg
.
x
=
cursorx
Ini
.
cfg
.
y
=
cursory
if
isKeyDown
(
27
)
then
move
=
0
end
until
isKeyDown
(
32
)
sampToggleCursor
(
0
)
sampSetCursorMode
(
0
)
move
=
false
Ini
.
cfg
.
x
=
cursorx
Ini
.
cfg
.
y
=
cursory
inicfg
.
save
(
Ini
,
MyIni
)
end
Lua:
function
cursor
(
)
local
x
,
y
=
getScreenResolution
(
)
local
x
=
x
/
2
local
y
=
x
/
2
-- local x = x - 100
local
y
=
y
-
-
70
local
result
,
lib
=
loadDynamicLibrary
(
"user32.dll"
)
if
result
then
local
result
,
proc
=
getDynamicLibraryProcedure
(
"SetCursorPos"
,
lib
)
local
a
=
callFunction
(
proc
,
2
,
0
,
x
,
y
)
freeDynamicLibrary
(
lib
)
end
end
YaAkeGGa228
11.03.2023, 17:21
нужна помощь, не понимаю как параметры ввести юзеру.
так бы на луа выглядило:
lua:
sampRegisterChatCommand
(
'cmd'
,
function
(
arg
)
if
arg
:
match
(
'%d+:%d+:%d+:%d+'
)
then
a
,
b
.
c
.
e
=
arg
:
match
(
'(%d+):(%d+):(%d+):(%d+)'
)
else
sampAddChatMessage
(
'invalid parameters'
,
-
1
)
end
end
)
а на плюсах я делаю что то типо:
cpp(sf):
SF
->
getSAMP
(
)
->
registerChatCommand
(
"cmd"
,
[
]
(
std
::
string param
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"param: %s"
,
param
.
c_str
(
)
)
;
}
)
;
Но как юзеру вводить 4 аргумента, а так же проверять, верно ли он ввел?
YaAkeGGa228
11.03.2023, 18:53
Если хотя бы один аргумент не может быть преобразован в число, мы выводим сообщение об ошибке
Lua:
sampRegisterChatCommand
(
'cmd'
,
function
(
arg
)
local
args
=
arg
:
split
(
":"
)
if
#
args
==
4
then
local
a
,
b
,
c
,
e
=
tonumber
(
args
[
1
]
)
,
tonumber
(
args
[
2
]
)
,
tonumber
(
args
[
3
]
)
,
tonumber
(
args
[
4
]
)
if
a
and
b
and
c
and
e
then
-- все аргументы были успешно преобразованы в числа
-- здесь можно использовать a, b, c, e в качестве аргументов для дальнейшей обработки
else
sampAddChatMessage
(
'invalid parameters'
,
-
1
)
end
else
sampAddChatMessage
(
'invalid parameters'
,
-
1
)
end
end
)
C++ :
C++:
void
cmd
(
std
::
string arg
)
{
std
::
vector
args
=
split
(
arg
,
":"
)
;
if
(
args
.
size
(
)
==
4
)
{
int
a
=
std
::
stoi
(
args
[
0
]
)
;
int
b
=
std
::
stoi
(
args
[
1
]
)
;
int
c
=
std
::
stoi
(
args
[
2
]
)
;
int
e
=
std
::
stoi
(
args
[
3
]
)
;
if
(
a
&&
b
&&
c
&&
e
)
{
// все аргументы были успешно преобразованы в числа
// здесь можно использовать a, b, c, e в качестве аргументов для дальнейшей обработки
}
else
{
sampAddChatMessage
(
"invalid parameters"
,
-
1
)
;
}
}
else
{
sampAddChatMessage
(
"invalid parameters"
,
-
1
)
;
}
}
Или
C++:
void
cmd
(
std
::
string arg
)
{
std
::
vector
args
=
split
(
arg
,
":"
)
;
if
(
args
.
size
(
)
==
4
&&
std
::
all_of
(
args
.
begin
(
)
,
args
.
end
(
)
,
[
]
(
const
std
::
string
&
s
)
{
return
!
s
.
empty
(
)
&&
std
::
all_of
(
s
.
begin
(
)
,
s
.
end
(
)
,
[
]
(
char
c
)
{
return
std
::
isdigit
(
c
)
;
}
)
;
}
)
)
{
int
a
=
std
::
stoi
(
args
[
0
]
)
;
int
b
=
std
::
stoi
(
args
[
1
]
)
;
int
c
=
std
::
stoi
(
args
[
2
]
)
;
int
e
=
std
::
stoi
(
args
[
3
]
)
;
// все аргументы были успешно преобразованы в числа
// здесь можно использовать a, b, c, e в качестве аргументов для дальнейшей обработки
}
else
{
sampAddChatMessage
(
"invalid parameters"
,
-
1
)
;
}
}
нужна помощь, не понимаю как параметры ввести юзеру.
так бы на луа выглядило:
lua:
sampRegisterChatCommand
(
'cmd'
,
function
(
arg
)
if
arg
:
match
(
'%d+:%d+:%d+:%d+'
)
then
a
,
b
.
c
.
e
=
arg
:
match
(
'(%d+):(%d+):(%d+):(%d+)'
)
else
sampAddChatMessage
(
'invalid parameters'
,
-
1
)
end
end
)
а на плюсах я делаю что то типо:
cpp(sf):
SF
->
getSAMP
(
)
->
registerChatCommand
(
"cmd"
,
[
]
(
std
::
string param
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"param: %s"
,
param
.
c_str
(
)
)
;
}
)
;
Но как юзеру вводить 4 аргумента, а так же проверять, верно ли он ввел?
cpp:
void
__stdcall
cmd
(
std
::
string arg
)
{
std
::
regex
ip_regex
(
"\\d+\\:\\d+\\:\\d+\\:\\d+"
)
;
std
::
smatch match
;
if
(
std
::
regex_search
(
arg
,
match
,
ip_regex
)
)
{
std
::
string ip
=
match
[
0
]
;
std
::
regex
time_regex
(
"(\\d+):(\\d+):(\\d+):(\\d+)"
)
;
if
(
std
::
regex_search
(
ip
,
match
,
time_regex
)
)
{
int
a
=
std
::
stoi
(
match
[
1
]
)
;
int
b
=
std
::
stoi
(
match
[
2
]
)
;
int
c
=
std
::
stoi
(
match
[
3
]
)
;
int
e
=
std
::
stoi
(
match
[
4
]
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"%d %d %d %d"
,
a
,
b
,
c
,
e
)
;
}
else
{
SF
->
getSAMP
(
)
->
getDialog
(
)
->
ShowDialog
(
1234
,
DIALOG_STYLE_MSGBOX
,
"назв"
,
"текст"
,
"далее"
,
"отмена"
)
;
}
}
else
{
SF
->
getSAMP
(
)
->
getDialog
(
)
->
ShowDialog
(
1234
,
DIALOG_STYLE_MSGBOX
,
"назв"
,
"текст"
,
"далее"
,
"отмена"
)
;
}
}
//Вызывать: SF->getSAMP()->registerChatCommand("capturwik", cmd);
мб кому то надо, а так же себе на будущее
How to do this in C++?
Lua:
local
inicfg
=
require
"inicfg"
local
color
=
imgui
.
ImFloat4
(
mainIni
.
color
.
R
/
255
,
mainIni
.
color
.
G
/
255
,
mainIni
.
color
.
B
/
255
,
255
)
if
imgui
.
ColorEdit4
(
'Color'
,
color
)
then
local
clr
=
join_argb
(
0
,
color
.
v
[
1
]
*
255
,
color
.
v
[
2
]
*
255
,
color
.
v
[
3
]
*
255
,
color
.
v
[
4
]
*
255
)
local
r
,
g
,
b
,
a
=
color
.
v
[
1
]
*
255
,
color
.
v
[
2
]
*
255
,
color
.
v
[
3
]
*
255
,
color
.
v
[
4
]
*
255
mainIni
.
config
.
hex
=
(
"%06X"
)
:
format
(
clr
)
mainIni
.
color
.
R
=
r
mainIni
.
color
.
G
=
g
mainIni
.
color
.
B
=
b
inicfg
.
save
(
mainIni
,
directIni
)
end
up
Как вывести сообщение в консоль сф? если в луа это просто print()
EclipsedFlow
13.03.2023, 23:05
Как вывести сообщение в консоль сф? если в луа это просто print()
C++:
SF
->
Log
(
"Hello"
)
;
Dzho_Handerson
14.03.2023, 01:52
Приветствую, подскажите как удалить лишние пункты из меню esc samp через asi? Source code
LorianS1
17.03.2023, 11:47
How to do this in C++?
Lua:
local
inicfg
=
require
"inicfg"
local
color
=
imgui
.
ImFloat4
(
mainIni
.
color
.
R
/
255
,
mainIni
.
color
.
G
/
255
,
mainIni
.
color
.
B
/
255
,
255
)
if
imgui
.
ColorEdit4
(
'Color'
,
color
)
then
local
clr
=
join_argb
(
0
,
color
.
v
[
1
]
*
255
,
color
.
v
[
2
]
*
255
,
color
.
v
[
3
]
*
255
,
color
.
v
[
4
]
*
255
)
local
r
,
g
,
b
,
a
=
color
.
v
[
1
]
*
255
,
color
.
v
[
2
]
*
255
,
color
.
v
[
3
]
*
255
,
color
.
v
[
4
]
*
255
mainIni
.
config
.
hex
=
(
"%06X"
)
:
format
(
clr
)
mainIni
.
color
.
R
=
r
mainIni
.
color
.
G
=
g
mainIni
.
color
.
B
=
b
inicfg
.
save
(
mainIni
,
directIni
)
end
C++:
#include
#include
#include
#include
#include
#include "inih/INIReader.h"
#include "imgui/imgui.h"
// A function that combines the values of the color components into a single number
DWORD
JoinARGB
(
BYTE a
,
BYTE r
,
BYTE g
,
BYTE b
)
{
return
(
(
a
&
0xFF
)
(
color
.
x
*
255
)
,
static_cast
(
color
.
y
*
255
)
,
static_cast
(
color
.
z
*
255
)
)
;
mainIni
.
Set
(
"config"
,
"hex"
,
(
"#%02X%02X%02X"
)
.
c_str
(
)
,
static_cast
(
color
.
x
*
255
)
,
static_cast
(
color
.
y
*
255
)
,
static_cast
(
color
.
z
*
255
)
)
;
mainIni
.
SetReal
(
"color"
,
"R"
,
static_cast
(
color
.
x
*
255
)
)
;
mainIni
.
SetReal
(
"color"
,
"G"
,
static_cast
(
color
.
y
*
255
)
)
;
mainIni
.
SetReal
(
"color"
,
"B"
,
static_cast
(
color
.
z
*
255
)
)
;
mainIni
.
SaveFile
(
"config.ini"
)
;
}
return
0
;
}
LorianS1
17.03.2023, 12:03
Can someone help me rewrite these .lua snippets in C++? I tried it on my own but it didn't work
Lua:
if
move
==
true
then
cursor
(
)
repeat
wait
(
0
)
cursorx
,
cursory
=
getCursorPos
(
)
sampToggleCursor
(
1
)
Ini
.
cfg
.
x
=
cursorx
Ini
.
cfg
.
y
=
cursory
if
isKeyDown
(
27
)
then
move
=
0
end
until
isKeyDown
(
32
)
sampToggleCursor
(
0
)
sampSetCursorMode
(
0
)
move
=
false
Ini
.
cfg
.
x
=
cursorx
Ini
.
cfg
.
y
=
cursory
inicfg
.
save
(
Ini
,
MyIni
)
end
Lua:
function
cursor
(
)
local
x
,
y
=
getScreenResolution
(
)
local
x
=
x
/
2
local
y
=
x
/
2
-- local x = x - 100
local
y
=
y
-
-
70
local
result
,
lib
=
loadDynamicLibrary
(
"user32.dll"
)
if
result
then
local
result
,
proc
=
getDynamicLibraryProcedure
(
"SetCursorPos"
,
lib
)
local
a
=
callFunction
(
proc
,
2
,
0
,
x
,
y
)
freeDynamicLibrary
(
lib
)
end
end
sure.
1.
C++:
#include "inicfg.h"
ImVec4
color
(
mainIni
.
color
.
R
/
255.0f
,
mainIni
.
color
.
G
/
255.0f
,
mainIni
.
color
.
B
/
255.0f
,
1.0f
)
;
if
(
ImGui
::
ColorEdit4
(
"Color"
,
&
color
.
x
)
)
{
int
clr
=
join_argb
(
0
,
color
.
x
*
255
,
color
.
y
*
255
,
color
.
z
*
255
,
color
.
w
*
255
)
;
int
r
=
color
.
x
*
255
,
g
=
color
.
y
*
255
,
b
=
color
.
z
*
255
,
a
=
color
.
w
*
255
;
mainIni
.
config
.
hex
=
(
"%06X"
)
.
format
(
clr
)
;
mainIni
.
color
.
R
=
r
;
mainIni
.
color
.
G
=
g
;
mainIni
.
color
.
B
=
b
;
inicfg
::
save
(
mainIni
,
directIni
)
;
}
2.
C++:
#include
void
cursor
(
)
{
int
x
=
GetSystemMetrics
(
SM_CXSCREEN
)
/
2
;
int
y
=
GetSystemMetrics
(
SM_CYSCREEN
)
/
2
;
// x = x - 100; // uncomment this line if you want to move the cursor to the left by 100px
y
=
y
+
70
;
// moves the cursor 70 pixels down
SetCursorPos
(
x
,
y
)
;
// set the cursor to a new position
}
p.s
In this code, we use the GetSystemMetrics WinAPI function to get the screen resolution, and then use the SetCursorPos function to move the cursor to the specified location. By default, the cursor will be shifted 70 pixels down. If you want to move the cursor to the left by 100 pixels, then uncomment the line x = x - 100;.
Dzho_Handerson
17.03.2023, 12:51
Приветствую, подскажите как удалить лишние пункты из меню esc через asi?
up
LorianS1
17.03.2023, 13:10
up
Привет.
Скачай и установи библиотеку Cleo 4
Создай новую папку внутри папки "CLEO" и назови ее "CLEO_TEXT"
В папке "CLEO_TEXT" создай новый файл с именем "MENU" и расширением ".fxt"
Открой созданный файл с помощью любого текстового редактора и добавь в него строки в формате: $REMOVE_TEXT_FROM_ESC "Название пункта меню, который нужно удалить" (Пример: $REMOVE_TEXT_FROM_ESC "Audio Settings")
Ну и в принципе всё, сохрани файл и зайди в игру, должны пропасть
ччбчлчлчъ ччччшчьпьппзвжв
18.03.2023, 14:12
https://forum.antichat.xyz/attachments/28274628/
что я не так делаю, почему это не компилируется?
https://graphviz.org/pdf/libguide.pdf (https://www.blast.hk/redirect/aHR0cHM6Ly9ncmFwaHZpei5vcmcvcGRmL2xpYmd1aWRlLnBkZg )
https://forum.antichat.xyz/attachments/28274628/
https://forum.antichat.xyz/attachments/28274628/
LorianS1
18.03.2023, 22:27
что я не так делаю, почему это не компилируется?
https://graphviz.org/pdf/libguide.pdf (https://www.blast.hk/redirect/aHR0cHM6Ly9ncmFwaHZpei5vcmcvcGRmL2xpYmd1aWRlLnBkZg )
Возможно то, что файл повреждён
Возможно, что он был перемещён, убедись, что он действительно там, обнови путь
Попробуй установить путь к библиотеке Graphviz явно при компиляции с помощью опции -L
" gcc myprogram.c -o myprogram -L/path/to/graphviz/lib -lgvc "
Замени /path/to/graphviz/lib на путь к каталогу с библиотекой Graphviz
0x73616D
20.03.2023, 05:38
What's wrong? my game freezes when using this function, in theory the function should get the X & Y position of the cursor until I press the space key, but when calling the function the game just freezes
C++:
void
cursor_move
(
)
{
bool
mueve
=
true
;
while
(
mueve
==
true
)
{
activew
=
false
;
//cursor();
SF
->
getSAMP
(
)
->
getMisc
(
)
->
ToggleCursor
(
2
,
true
)
;
POINT cursor
=
SF
->
getGame
(
)
->
getCursorPos
(
)
;
int
cursorx
,
cursory
;
cursorx
=
cursor
.
x
;
cursory
=
cursor
.
y
;
if
(
SF
->
getGame
(
)
->
isKeyDown
(
VK_SPACE
)
)
{
mueve
=
false
;
SF
->
getSAMP
(
)
->
getMisc
(
)
->
ToggleCursor
(
false
)
;
activew
=
true
;
break
;
}
}
}
ччбчлчлчъ ччччшчьпьппзвжв
23.03.2023, 01:06
https://forum.antichat.xyz/attachments/28277773/
что делаю не так, почему я не могу открыть проект после билда
reussssya
23.03.2023, 01:09
What's wrong? my game freezes when using this function, in theory the function should get the X & Y position of the cursor until I press the space key, but when calling the function the game just freezes
C++:
void
cursor_move
(
)
{
bool
mueve
=
true
;
while
(
mueve
==
true
)
{
activew
=
false
;
//cursor();
SF
->
getSAMP
(
)
->
getMisc
(
)
->
ToggleCursor
(
2
,
true
)
;
POINT cursor
=
SF
->
getGame
(
)
->
getCursorPos
(
)
;
int
cursorx
,
cursory
;
cursorx
=
cursor
.
x
;
cursory
=
cursor
.
y
;
if
(
SF
->
getGame
(
)
->
isKeyDown
(
VK_SPACE
)
)
{
mueve
=
false
;
SF
->
getSAMP
(
)
->
getMisc
(
)
->
ToggleCursor
(
false
)
;
activew
=
true
;
break
;
}
}
}
ur problem is while(true)
0x73616D
23.03.2023, 22:25
ur problem is while(true)
well, how can i fix it? what do you suggest for my code to work correctly? I don't know what to do honestly
YaAkeGGa228
24.03.2023, 20:25
Нужна помощь, я получаю координаты метки на карте, но Z у нас будет равен 0, из за этого получается все по пизде. На луа нашел решение данной проблемы:
lua:
local
result
,
xTarget
,
yTarget
,
zTarget
=
getTargetBlipCoordinates
(
)
requestCollision
(
xTarget
,
yTarget
)
loadScene
(
xTarget
,
yTarget
,
zTarget
)
arg1
,
arg2
,
arg3
=
xTarget
,
yTarget
,
getGroundZFor3dCoord
(
xTarget
,
yTarget
,
999
)
-- то есть в arg3 записан нормальный, адекватный Z, он равен земле, на которую в дальнейшем мы тпаемся
а на плюсах найти Z - проблемка, хелпуйте
Dzho_Handerson
25.03.2023, 23:21
Приветствую, подскажите как удалить лишние пункты из меню esc samp через asi?
UP
Нужна помощь, я получаю координаты метки на карте, но Z у нас будет равен 0, из за этого получается все по пизде. На луа нашел решение данной проблемы:
lua:
local
result
,
xTarget
,
yTarget
,
zTarget
=
getTargetBlipCoordinates
(
)
requestCollision
(
xTarget
,
yTarget
)
loadScene
(
xTarget
,
yTarget
,
zTarget
)
arg1
,
arg2
,
arg3
=
xTarget
,
yTarget
,
getGroundZFor3dCoord
(
xTarget
,
yTarget
,
999
)
-- то есть в arg3 записан нормальный, адекватный Z, он равен земле, на которую в дальнейшем мы тпаемся
а на плюсах найти Z - проблемка, хелпуйте
C++:
float
findGroundZForCoord
(
const
float
x
,
const
float
y
)
{
return
reinterpret_cast
(
0x569660
)
(
x
,
y
)
;
}
suicideboyze
27.03.2023, 12:32
При создании проекта в VS нет библиотеки динамической компановки (DLL). Что нужно докачать для VS, чтобы данная библиотека появилась?
Digger Man52
31.03.2023, 23:34
При создании проекта в VS нет библиотеки динамической компановки (DLL). Что нужно докачать для VS, чтобы данная библиотека появилась?
Desktop development with C++
251E8ED1-EAF0-4951-B832-7A021CC3BA04.jpegDigger Man52 · 31 Мар 2023 в 22:34' data-fancybox="lb-post-1283449" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/195747/" style="cursor: pointer;" title="251E8ED1-EAF0-4951-B832-7A021CC3BA04.jpeg">
https://forum.antichat.xyz/attachments/28283449/
https://forum.antichat.xyz/attachments/28283449/
Dzho_Handerson
01.04.2023, 03:31
Приветствую, подскажите как удалить лишние пункты из меню esc samp через asi? Source code
Up
Digger Man52
01.04.2023, 03:55
Up
Тебе выше скинули плагин и скрипт, возьми из скрипта оффсеты и перенеси код на плюсы, можешь мемвраппер для этого использовать
What's wrong? the square is not drawn on the screen, if i use endscene it doesn't work either.
C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
#include "VMTHookManager.h"
WNDPROC oWndProc
;
DWORD g_dwSAMP_Addr
;
typedef
HRESULT
(
WINAPI
*
_EndScene
)
(
IDirect3DDevice9
*
)
;
//прототип
_EndScene oEndScene
;
//экземпляр прототипа, для возврата оригинала
typedef
HRESULT
(
WINAPI
*
_Present
)
(
IDirect3DDevice9
*
,
const
RECT
*
,
const
RECT
*
,
HWND
,
const
RGNDATA
*
)
;
//прототип
_Present oPresent
;
//экземпляр прототипа, для возврата оригинала
typedef
HRESULT
(
WINAPI
*
_Reset
)
(
IDirect3DDevice9
*
,
D3DPRESENT_PARAMETERS
*
)
;
_Reset oReset
;
void
DrawRect
(
LPDIRECT3DDEVICE9 m_pDevice
,
int
X
,
int
Y
,
int
L
,
int
H
,
D3DCOLOR color
)
{
D3DRECT rect
=
{
X
,
Y
,
X
+
L
,
Y
+
H
}
;
m_pDevice
->
Clear
(
1
,
&
rect
,
D3DCLEAR_TARGET
,
color
,
0
,
0
)
;
}
HRESULT WINAPI
hooked_Present
(
IDirect3DDevice9
*
pDevice
,
const
RECT
*
pSourceRect
,
const
RECT
*
pDestRect
,
HWND hdest
,
const
RGNDATA
*
pDirtyRegion
)
{
DrawRect
(
pDevice
,
250
,
250
,
10
,
10
,
0xFFFF0000
)
;
return
oPresent
(
pDevice
,
pSourceRect
,
pDestRect
,
hdest
,
pDirtyRegion
)
;
// возврат оригинала
}
HRESULT WINAPI
myEndScene
(
IDirect3DDevice9
*
m_pDevice
)
{
return
oEndScene
(
m_pDevice
)
;
}
HRESULT WINAPI
myReset
(
IDirect3DDevice9
*
m_pDevice
,
D3DPRESENT_PARAMETERS
*
pPresentationParameters
)
{
auto
result
=
oReset
(
m_pDevice
,
pPresentationParameters
)
;
return
result
;
}
void
InitHook
(
)
{
void
*
*
vTableDevice
=
*
(
void
*
*
*
)
(
*
(
DWORD
*
)
0xC97C28
)
;
// адрес Device
VMTHookManager
*
vmtHooks
=
new
VMTHookManager
(
vTableDevice
)
;
oPresent
=
(
_Present
)
vmtHooks
->
Hook
(
17
,
(
void
*
)
hooked_Present
)
;
oEndScene
=
(
_EndScene
)
vmtHooks
->
Hook
(
42
,
(
void
*
)
myEndScene
)
;
// 42 - номер EndScene
oReset
=
(
_Reset
)
vmtHooks
->
Hook
(
16
,
(
void
*
)
myReset
)
;
// 16 - номер Reset
}
int
WINAPI
Thread
(
)
{
while
(
*
(
DWORD
*
)
0xC8D4C0
!=
9
)
// проверка на статус загрузки игры
Sleep
(
100
)
;
InitHook
(
)
;
return
0
;
}
BOOL WINAPI
DllMain
(
HMODULE hModule
,
DWORD dwReason
,
LPVOID lpReserved
)
{
if
(
dwReason
==
DLL_PROCESS_ATTACH
)
CreateThread
(
NULL
,
NULL
,
(
LPTHREAD_START_ROUTINE
)
Thread
,
NULL
,
NULL
,
NULL
)
;
return
TRUE
;
}
up
reussssya
04.04.2023, 20:27
well, how can i fix it? what do you suggest for my code to work correctly? I don't know what to do honestly
std::this_thread::sleep_for(std::chrono::milliseco nds(x)); i guess, but couldn't work
Papercut
05.04.2023, 02:52
у меня есть dll для сампа, я хочу перенести ее в .exe. Попытка сделать загрузку ддлки из байтов, а не из файла, не увенчалась успехом. Как это правильно сделать? Есть мб какие то либы или готовые проекты?
Digger Man52
05.04.2023, 03:24
у меня есть dll для сампа, я хочу перенести ее в .exe. Попытка сделать загрузку ддлки из байтов, а не из файла, не увенчалась успехом. Как это правильно сделать? Есть мб какие то либы или готовые проекты?
ты типо mmap injector делаешь? в ресурсы засунь, на гите чекни как ммап работает
Papercut
05.04.2023, 05:04
ты типо mmap injector делаешь? в ресурсы засунь, на гите чекни как ммап работает
mmap ожидает (https://github.com/TheCruZ/Simple-Manual-Map-Injector/blob/master/Manual%20Map%20Injector/injector.cpp#L135) что дллка что-то вернет, но у меня этого не происходит. Подозреваю, что CreateRemoteThread не вызывает DllMain, а следовательно нету реакции от дллки. Дллка - https://www.blast.hk/threads/130055/
У меня НЕМНОГО дописано но думаю это не влияет на работу. Если что, вот мой main.cpp
C++:
#include
#include
#include "plugin.hpp"
#include "samp/base.hpp"
#include "samp/lib.hpp"
std
::
unique_ptr
plug
;
std
::
filesystem
::
path g_config_path
;
void
gameloop
(
)
{
static
bool
init
=
false
;
if
(
init
||
!
dx9
::
find_device
(
)
||
!
samp
::
inited
(
)
)
return
;
plug
=
std
::
make_unique
(
)
;
init
=
true
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID
)
{
if
(
samp
::
ver
(
)
==
samp
::
ver
::
unknown
)
return
FALSE
;
static
lemon
::
hook
gameloop_hook
(
0x748DA3
)
;
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
{
/*
char mod_path[MAX_PATH] = { 0 };
GetModuleFileNameA(hModule, mod_path, MAX_PATH);
g_config_path = std::filesystem::path(mod_path).replace_extension("json");
*/
gameloop_hook
.
on_before
+=
&
gameloop
;
gameloop_hook
.
install
(
)
;
}
if
(
dwReasonForCall
==
DLL_PROCESS_DETACH
)
{
gameloop_hook
.
remove
(
)
;
plugin
*
foo
=
plug
.
release
(
)
;
delete
foo
;
}
return
TRUE
;
}
мб мне пометить все
extern "C" __declspec(dllexport) ?
Но это уже наугад тыканье. Надеюсь, знающие люди помогут
Young123
06.04.2023, 17:23
Здарова, кто то может шарит за самп мобайл, делаю чит для блек раши, но есть проблема, когда делаю меню на имгуи, оно у меня работает только в на карте, как можно это исправить, мне писали что то с рендером, но не че не понял, может я его как то не так запускаю?
Misha_Sereda
07.04.2023, 22:59
Здарова, кто то может шарит за самп мобайл, делаю чит для блек раши, но есть проблема, когда делаю меню на имгуи, оно у меня работает только в на карте, как можно это исправить, мне писали что то с рендером, но не че не понял, может я его как то не так запускаю?
Скинь свои контакты
reussssya
08.04.2023, 15:00
Здарова, кто то может шарит за самп мобайл, делаю чит для блек раши, но есть проблема, когда делаю меню на имгуи, оно у меня работает только в на карте, как можно это исправить, мне писали что то с рендером, но не че не понял, может я его как то не так запускаю?
мне тоже скинь контакты
inexplica
08.04.2023, 15:06
Такой вопрос (мб не по теме)
Какой редактор кроме vs юзать для сампа.
Т.к vs не хочет устанавливаться и воопще работать у меня.
Такой вопрос (мб не по теме)
Какой редактор кроме vs юзать для сампа.
Т.к vs не хочет устанавливаться и воопще работать у меня.
VS Code + clang/g++ + CMake
reussssya
08.04.2023, 15:38
Такой вопрос (мб не по теме)
Какой редактор кроме vs юзать для сампа.
Т.к vs не хочет устанавливаться и воопще работать у меня.
vs code
Digger Man52
08.04.2023, 17:41
Такой вопрос (мб не по теме)
Какой редактор кроме vs юзать для сампа.
Т.к vs не хочет устанавливаться и воопще работать у меня.
qt creator + clang + cmake
Как перебирать строку по символам через цикл, используя std::string?
Способы отсюда (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudGVjaGllZGVsaWdodC5jb20vcnUvaXRlcm F0ZS1vdmVyLWNoYXJhY3RlcnMtc3RyaW5nLWNwcC8) не предлагайте. При виде символа цикл завершается
Digger Man52
09.04.2023, 01:42
Как перебирать строку по символам через цикл, используя std::string?
Способы отсюда (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudGVjaGllZGVsaWdodC5jb20vcnUvaXRlcm F0ZS1vdmVyLWNoYXJhY3RlcnMtc3RyaW5nLWNwcC8) не предлагайте. При виде символа цикл завершается
C++:
[CODE]
std
::
string str
=
"Hello world!"
;
for
(
size_t i
=
0
;
i
kin4stat
09.04.2023, 06:19
Как перебирать строку по символам через цикл, используя std::string?
Способы отсюда (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudGVjaGllZGVsaWdodC5jb20vcnUvaXRlcm F0ZS1vdmVyLWNoYXJhY3RlcnMtc3RyaW5nLWNwcC8) не предлагайте. При виде символа цикл завершается
Че
inexplica
09.04.2023, 12:14
qt creator + clang + cmake
Можно ссылки🧐
Можно ссылки🧐
Embedded Software Development Tools & Cross Platform IDE | Qt Creator (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cucXQuaW8vcHJvZHVjdC9kZXZlbG9wbWVudC 10b29scw)
Qt Creator is a fully loaded cross-platform IDE that enables embedded software development, has a spectrum of mobile development tools, & more!
www.qt.io
Clang C Language Family Frontend for LLVM (https://www.blast.hk/redirect/aHR0cHM6Ly9jbGFuZy5sbHZtLm9yZy8)
CMake (https://www.blast.hk/redirect/aHR0cHM6Ly9jbWFrZS5vcmcv)
cmake.org
[QUOTE="Digger Man"]
C++:
[CODE]
std
::
string str
=
"Hello world!"
;
for
(
size_t i
=
0
;
i
Digger Man52
11.04.2023, 01:30
При виде пробела не идёт дальше.
Например текст равен "test probela", а выводит оно "test"
C++:
[CODE]
std
::
string str
=
"Hello world!"
;
for
(
size_t i
=
0
;
i
или можно заменить std::endl на std::cout
C++:
if
(
isKeyJustPressed
(
164
)
)
{
bool
dialogActive
=
SF
->
getSAMP
(
)
->
getDialog
(
)
->
iIsActive
;
sampAddChatMessage
(
"%d"
,
dialogActive
)
;
if
(
dialogActive
)
{
int
id
=
SF
->
getSAMP
(
)
->
getDialog
(
)
->
DialogID
;
SF
->
getSAMP
(
)
->
sendDialogResponse
(
3
,
1
,
0
,
""
)
;
sampAddChatMessage
(
"%d"
,
id
)
;
}
}
;
чет не работает sendDialogResponse
И еще, как юзать хуки?
kin4stat
11.04.2023, 01:58
[QUOTE="Digger Man"]
C++:
[CODE]
std
::
string str
=
"Hello world!"
;
for
(
size_t i
=
0
;
i
Dark_Knight
11.04.2023, 21:08
При виде пробела не идёт дальше.
Например текст равен "test probela", а выводит оно "test"
Чего блять?
https://forum.antichat.xyz/attachments/28290754/
как сделать задержку в функции?
чтобы внутри while (1) {} было что то типа wait(500);
как сделать задержку в функции?
чтобы внутри while (1) {} было что то типа wait(500);
1 способ: #include
Sleep(500)
2 способ:
3 способ: https://www.blast.hk/threads/98923/post-824853
Leatington
19.04.2023, 02:43
Использую в проекте "Use Multi-Byte Character Set". Заметил, что при работе с sqlite3_open (www.sqlite.org (https://www.blast.hk/redirect/aHR0cDovL3d3dy5zcWxpdGUub3Jn)) и наличии русских символов в пути к базе возвращает unable to open database file. Как решить проблему?
Digger Man52
19.04.2023, 04:32
Использую в проекте "Use Multi-Byte Character Set". Заметил, что при работе с sqlite3_open (www.sqlite.org (https://www.blast.hk/redirect/aHR0cDovL3d3dy5zcWxpdGUub3Jn)) и наличии русских символов в пути к базе возвращает unable to open database file. Как решить проблему?
Ты когда мульти байт используешь, у тебя некоторые буквы на кириллице представляются несколькими байтами,
sqlite3_open ожидает UTF-8, который использует однобайтовую кодировку для ASCII и многобайтовую для не ASCII, включая кириллицу , преобразуй путь к файлу в UTF-8 перед передачей в sqlite3_open, в винапи для этого есть MultiByteToWideChar и обратная WideCharToMultiByte
Leatington
19.04.2023, 15:36
Ты когда мульти байт используешь, у тебя некоторые буквы на кириллице представляются несколькими байтами,
sqlite3_open ожидает UTF-8, который использует однобайтовую кодировку для ASCII и многобайтовую для не ASCII, включая кириллицу , преобразуй путь к файлу в UTF-8 перед передачей в sqlite3_open, в винапи для этого есть MultiByteToWideChar и обратная WideCharToMultiByte
(обновлено), получилось с помощью следующей функции, спасибо.
C++:
std
::
string
CP1251_to_UTF8
(
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
(
65001
,
0
,
ures
,
-
1
,
0
,
0
,
0
,
0
)
;
if
(
!
result_c
)
{
delete
[
]
ures
;
return
0
;
}
char
*
cres
=
new
char
[
result_c
]
;
if
(
!
WideCharToMultiByte
(
65001
,
0
,
ures
,
-
1
,
cres
,
result_c
,
0
,
0
)
)
{
delete
[
]
cres
;
return
0
;
}
delete
[
]
ures
;
res
.
append
(
cres
)
;
delete
[
]
cres
;
return
res
;
}
Код:
[CODE]
std::string res = CP1251_to_UTF8(path.c_str());
sqlite3* users;
if (sqlite3_open(res.c_str(), &users))
{
std::cout
Musaigen
19.04.2023, 18:35
[QUOTE="Leatington"]
(обновлено), получилось с помощью следующей функции, спасибо.
C++:
std
::
string
CP1251_to_UTF8
(
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
(
65001
,
0
,
ures
,
-
1
,
0
,
0
,
0
,
0
)
;
if
(
!
result_c
)
{
delete
[
]
ures
;
return
0
;
}
char
*
cres
=
new
char
[
result_c
]
;
if
(
!
WideCharToMultiByte
(
65001
,
0
,
ures
,
-
1
,
cres
,
result_c
,
0
,
0
)
)
{
delete
[
]
cres
;
return
0
;
}
delete
[
]
ures
;
res
.
append
(
cres
)
;
delete
[
]
cres
;
return
res
;
}
Код:
[CODE]
std::string res = CP1251_to_UTF8(path.c_str());
sqlite3* users;
if (sqlite3_open(res.c_str(), &users))
{
std::cout
Digger Man52
19.04.2023, 18:39
и вроде функцию можно укоротить в два вызова (но это не точно)
можно, если wstring и wstring_convert юзать
по поводу мемори лика, можно просто перед каждым ретерном добавить delete[] ures/cres
AkeGGa.biz
22.04.2023, 17:10
qq, как имитировать нажатие Y?
от этого стоит защита:
c++:
keybd_event
(
key
,
0
,
KEYEVENTF_KEYDOWN
,
0
)
;
sleep
(
10
)
keybd_event
(
key
,
0
,
KEYEVENTF_KEYUP
,
0
)
;
дайте варики что юзать
Digger Man52
22.04.2023, 19:32
qq, как имитировать нажатие Y?
от этого стоит защита:
c++:
keybd_event
(
key
,
0
,
KEYEVENTF_KEYDOWN
,
0
)
;
sleep
(
10
)
keybd_event
(
key
,
0
,
KEYEVENTF_KEYUP
,
0
)
;
дайте варики что юзать
SendInput() в вин апи есть
input.ki.wScan = MapVirtualKey('Y', MAPVK_VK_TO_VSC);
input.ki.wVk = 'Y';
Как можно получить название кнопок диалога без хука на CDIalog::Show? Облазил всю структуру CDialog и подструктур в ней, но нихуя.
Как можно получить название кнопок диалога без хука на CDIalog::Show? Облазил всю структуру CDialog и подструктур в ней, но нихуя.
Полезные сниппеты и функции (https://www.blast.hk/threads/13380/post-316502)
в чем смысл загружать длл в свой же процесс таким способом? ракбот ну и длл лоадер
www.blast.hk
Solution
26.04.2023, 02:20
как реализовать запуск входа на сервер(открытие гташки) на плюсах? пробовал отправять с цмдху samp.exe с ником/айпи/портом = подключение к :7777, gta_sa.exe = дало одиночку. буду благодарен
[QUOTE="excold"]
как реализовать запуск входа на сервер(открытие гташки) на плюсах? пробовал отправять с цмдху samp.exe с ником/айпи/портом = подключение к :7777, gta_sa.exe = дало одиночку. буду благодарен
AkeGGa.biz
30.04.2023, 17:05
как получить координаты определенного объекта?
как получить координаты определенного объекта?
Если SAMP то CObject + 0x14
AkeGGa.biz
30.04.2023, 17:18
Если SAMP то CObject + 0x14
я про сф апи. Для 3д текстов что то типо такого, для объектов похожее найти не могу:
с++:
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getNetGame
(
)
->
pools
->
textLabelPool
->
iIsListed
[
i
]
!=
1
)
continue
;
std
::
string
strdialogText
(
SF
->
getSAMP
(
)
->
getNetGame
(
)
->
pools
->
textLabelPool
->
textLabel
[
i
]
.
text
)
;
if
(
strdialogText
.
find
(
"НАШ ТЕКСТ"
)
!=
std
::
string
::
npos
)
{
float
labelposX
=
SF
->
getSAMP
(
)
->
getNetGame
(
)
->
pools
->
textLabelPool
->
textLabel
[
i
]
.
position
[
0
]
;
float
labelposY
=
SF
->
getSAMP
(
)
->
getNetGame
(
)
->
pools
->
textLabelPool
->
textLabel
[
i
]
.
position
[
1
]
;
}
}
object:
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getNetGame
(
)
->
pools
->
objectPool
->
isListed
[
i
]
!=
1
)
continue
;
}
я про сф апи. Для 3д текстов что то типо такого, для объектов похожее найти не могу:
с++:
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getNetGame
(
)
->
pools
->
textLabelPool
->
iIsListed
[
i
]
!=
1
)
continue
;
std
::
string
strdialogText
(
SF
->
getSAMP
(
)
->
getNetGame
(
)
->
pools
->
textLabelPool
->
textLabel
[
i
]
.
text
)
;
if
(
strdialogText
.
find
(
"НАШ ТЕКСТ"
)
!=
std
::
string
::
npos
)
{
float
labelposX
=
SF
->
getSAMP
(
)
->
getNetGame
(
)
->
pools
->
textLabelPool
->
textLabel
[
i
]
.
position
[
0
]
;
float
labelposY
=
SF
->
getSAMP
(
)
->
getNetGame
(
)
->
pools
->
textLabelPool
->
textLabel
[
i
]
.
position
[
1
]
;
}
}
object:
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getNetGame
(
)
->
pools
->
objectPool
->
isListed
[
i
]
!=
1
)
continue
;
}
C++:
SF
->
getSAMP
(
)
->
getNetGame
(
)
->
pools
->
objectPool
->
object
[
i
]
->
position
[
0
]
;
Попробуй. Я не шарю в ваших SF'ах
AkeGGa.biz
01.05.2023, 13:13
нужен гм кар, как можно реализовать?
lua:
if
enable
and
isCharInAnyCar
(
PLAYER_PED
)
then
setCarProofs
(
storeCarCharIsInNoSave
(
PLAYER_PED
)
,
true
,
true
,
true
,
true
,
true
)
end
а на сф апи как? (5,5,1 (r3))
нужен гм кар, как можно реализовать?
lua:
if
enable
and
isCharInAnyCar
(
PLAYER_PED
)
then
setCarProofs
(
storeCarCharIsInNoSave
(
PLAYER_PED
)
,
true
,
true
,
true
,
true
,
true
)
end
а на сф апи как? (5,5,1 (r3))
ты имеешь в виду машину, в которой ты сидишь?
C++:
CVehicle
*
cveh
=
getSelfCVehicle
(
)
;
а когда дело доходит до невосприимчивости техники, посмотрите на функцию, дающую бессмертие машине в mod_sa
--------------------------------------------------------------------------------------------------------------------------------------------
мой вопрос
Кто-нибудь знает, что может быть не так с раксампом для 03DL? Я сначала подумал, что дело в моделях, отправленных сервером, но это не так, после прочтения пакетов я знаю, что раксамп подключается нормально, но после подключения что-то вроде теряется, потому что другие пакеты не приходят, а через десяток или около того секунд сервер отключается из-за потери. Интересно, если в локальном сервере отключить кастомные модели и выкинуть некоторые amx файлы, то раксамп работает нормально. может чего-то не хватает в Raknet слое, может есть какой-то лишний пакет?
GitHub - KevY007/RakSAMP-0.8.6-DL: 0.3.DL Updated RakSAMP (https://github.com/KevY007/RakSAMP-0.8.6-DL)
0.3.DL Updated RakSAMP. Contribute to KevY007/RakSAMP-0.8.6-DL development by creating an account on GitHub.
github.com
AkeGGa.biz
06.05.2023, 14:38
sf api
как отправить сообщение в чат с серверной командой?
Команда /phone
это работает, но ОЧЕНЬ долго пишет. Т.е. через 100-200 мс отправляется команда. SF->getSAMP()->getPlayers()->localPlayerInfo.data->Say("/phone");
А мне нужно чтоб все работало быстро, т.е. это не устраивает. Как можно реализовать отправку сообщения в чат?
waparabka
06.05.2023, 14:49
sf api
как отправить сообщение в чат с серверной командой?
Команда /phone
это работает, но ОЧЕНЬ долго пишет. Т.е. через 100-200 мс отправляется команда. SF->getSAMP()->getPlayers()->localPlayerInfo.data->Say("/phone");
А мне нужно чтоб все работало быстро, т.е. это не устраивает. Как можно реализовать отправку сообщения в чат?
возможно то, что ты ищешь
C++:
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
Say
(
"/phone"
)
;
но там уже скорее из-за пинга задержка
AkeGGa.biz
06.05.2023, 15:25
возможно то, что ты ищешь
Это для сф 541. Мне надо для сф 551. Вот то что ты показал: SF->getSAMP()->getPlayers()->localPlayerInfo.data->Say("/phone");
Мне по другому как то отправить команду
Это для сф 541. Мне надо для сф 551. Вот то что ты показал: SF->getSAMP()->getPlayers()->localPlayerInfo.data->Say("/phone");
Мне по другому как то отправить команду
C++:
void
sendCommand
(
std
::
string param
)
{
BitStream bs
;
bs
.
Write
(
param
.
length
(
)
)
;
bs
.
Write
(
param
.
data
(
)
,
param
.
length
(
)
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
50
,
&
bs
)
;
}
;
Пример использования:
C++:
sendCommand
(
"/phone"
)
AkeGGa.biz
06.05.2023, 18:41
C++:
void
sendCommand
(
std
::
string param
)
{
BitStream bs
;
bs
.
Write
(
param
.
length
(
)
)
;
bs
.
Write
(
param
.
data
(
)
,
param
.
length
(
)
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
50
,
&
bs
)
;
}
;
Пример использования:
C++:
sendCommand
(
"/phone"
)
https://forum.antichat.xyz/attachments/28305609/
sf api
как отправить сообщение в чат с серверной командой?
Команда /phone
это работает, но ОЧЕНЬ долго пишет. Т.е. через 100-200 мс отправляется команда. SF->getSAMP()->getPlayers()->localPlayerInfo.data->Say("/phone");
А мне нужно чтоб все работало быстро, т.е. это не устраивает. Как можно реализовать отправку сообщения в чат?
еще актуально
еще актуально
Тебе нужно отправить в чат команду, или сообщение? Укажи нормально что тебе нужно
Могу предложить вот такое самописное говно.
C++:
void
sampSendChat
(
std
::
string param
)
{
BitStream bs
;
param
[
0
]
==
'/'
?
bs
.
Write
(
param
.
length
(
)
)
:
bs
.
Write
(
param
.
length
(
)
)
;
bs
.
Write
(
param
.
c_str
(
)
,
param
.
length
(
)
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
param
[
0
]
==
'/'
?
50
:
101
,
&
bs
)
;
}
;
inexplica
12.05.2023, 13:44
qt creator + clang + cmake
Хотел бы подробнее узнать как да что установить.
Digger Man52
12.05.2023, 14:36
Хотел бы подробнее узнать как да что установить.
qt.io
cmake.org
clang.llvm.org
ЛЕГЕНДА STANDOFFa
14.05.2023, 14:52
Привет всем, что делать если теряется управление в игре? Бывает вообще что игру не могу свернуть, тока через диспетчер оффать. Вроде бы из за imgui, но хз. Кто может помочь? Если что пишу asi с использованием kthook, sampapi, imgui 1.84.2, pluginSDK.
Короче если без функи с рендером ников все ок, но как сделать так чтобы нормально все работало?
Для просмотра скрытого содержимого вы должны войти (https://www.blast.hk/login/) или зарегистрироваться (https://www.blast.hk/login/register).
но как сделать так чтобы нормально все работало?
подключи дебагер и смотри что вызывает краш
kin4stat
15.05.2023, 01:23
Привет всем, что делать если теряется управление в игре? Бывает вообще что игру не могу свернуть, тока через диспетчер оффать. Вроде бы из за imgui, но хз. Кто может помочь? Если что пишу asi с использованием kthook, sampapi, imgui 1.84.2, pluginSDK.
Короче если без функи с рендером ников все ок, но как сделать так чтобы нормально все работало?
*** Скрытый текст не может быть процитирован. ***
Античит сампа срабатывает
ЛЕГЕНДА STANDOFFa
15.05.2023, 04:39
подключи дебагер и смотри что вызывает краш
Краша нет, игра нормально работает, а бегать не могу и камеру повернуть. Проще говоря бегу к челам у них ники зарендерились и хоп персонаж не бежит, хотя я не отпускал W
Краша нет, игра нормально работает, а бегать не могу и камеру повернуть. Проще говоря бегу к челам у них ники зарендерились и хоп персонаж не бежит, хотя я не отпускал W
windowproc игры подменяется на какой-то другой windowproc, и этот windowproc не возвращает игре её windowproc.
но тут я точно не знаю что происходит, банально мб ты ub ловишь
ЛЕГЕНДА STANDOFFa
15.05.2023, 15:47
windowproc игры подменяется на какой-то другой windowproc, и этот windowproc не возвращает игре её windowproc.
но тут я точно не знаю что происходит, банально мб ты ub ловишь
могу видос записать, но вообще я рендер делал по гайдам от kin4stat (https://www.blast.hk/members/161331/)'a.
kin4stat
15.05.2023, 15:55
windowproc игры подменяется на какой-то другой windowproc, и этот windowproc не возвращает игре её windowproc.
но тут я точно не знаю что происходит, банально мб ты ub ловишь
Яж сказал античит сампа пизды дает
ЛЕГЕНДА STANDOFFa
15.05.2023, 15:56
Яж сказал античит сампа пизды дает
я на клиент радмира делаю
я на клиент радмира делаю
ну так это тоже самп
ЛЕГЕНДА STANDOFFa
15.05.2023, 16:17
ну так это тоже самп
сомневаюсь тогда что какой то из плагинов радмира его не нопает
kin4stat
15.05.2023, 18:00
сомневаюсь тогда что какой то из плагинов радмира его не нопает
не нопает
Как эмитировать нажатие ЛКМ? Пробовал вот так, но не работает.
C++:
[CODE]
#include
#include
#include
bool
act
=
false
;
int
main
(
)
{
setlocale
(
LC_ALL
,
"RU"
)
;
std
::
cout
[QUOTE="Sadow"]
Как эмитировать нажатие ЛКМ? Пробовал вот так, но не работает.
C++:
[CODE]
#include
#include
#include
bool
act
=
false
;
int
main
(
)
{
setlocale
(
LC_ALL
,
"RU"
)
;
std
::
cout
Digger Man52
16.05.2023, 16:04
[QUOTE="Sadow"]
Как эмитировать нажатие ЛКМ? Пробовал вот так, но не работает.
C++:
#include
#include
#include
bool
act
=
false
;
int
main
(
)
{
setlocale
(
LC_ALL
,
"RU"
)
;
std
::
cout
C++:
[CODE]
int
buttonid
=
1
;
// тут айди кнопки
HWND hwndbut
=
GetDlgItem
(
hWnd
,
buttonid
)
;
SendMessage
(
hwndbut
,
BM_CLICK
,
0
,
0
)
;
ну и понятное дело нужно дескриптор окна получить, в котором будет происходить нажатие
C++:
HWND hWnd
=
FindWindow
(
NULL
,
"gta sa"
)
;
C++:
int
buttonid
=
1
;
// тут айди кнопки
HWND hwndbut
=
GetDlgItem
(
hWnd
,
buttonid
)
;
SendMessage
(
hwndbut
,
BM_CLICK
,
0
,
0
)
;
ну и понятное дело нужно дескриптор окна получить, в котором будет происходить нажатие
C++:
HWND hWnd
=
FindWindow
(
NULL
,
"gta sa"
)
;
Обязательно регистрировать переменную?
Обязательно регистрировать переменную?
нет
manukhov
16.05.2023, 20:03
@kin4stat (https://www.blast.hk/members/161331/) Почему офсеты на шрека не нашел?
C++:
int
buttonid
=
1
;
// тут айди кнопки
HWND hwndbut
=
GetDlgItem
(
hWnd
,
buttonid
)
;
SendMessage
(
hwndbut
,
BM_CLICK
,
0
,
0
)
;
ну и понятное дело нужно дескриптор окна получить, в котором будет происходить нажатие
C++:
HWND hWnd
=
FindWindow
(
NULL
,
"gta sa"
)
;
Как можно такое реализовать в Rage MP? Я пишу вместо gta sa GTAV (название основного приложения с гташкой) и не работает
Digger Man52
16.05.2023, 22:08
Как можно такое реализовать в Rage MP? Я пишу вместо gta sa GTAV (название основного приложения с гташкой) и не работает
Название окна, должно быть 1:1, а так хукай wndproc, помощь в этом нужна?
kin4stat
16.05.2023, 22:10
Как можно такое реализовать в Rage MP? Я пишу вместо gta sa GTAV (название основного приложения с гташкой) и не работает
rage mp рандомно название окна меняет, там по другому надо
Название окна, должно быть 1:1, а так хукай wndproc, помощь в этом нужна?
da
Digger Man52
16.05.2023, 22:28
da
можно просто в центр кликать, если окно не известно
C++:
HWND hwnd
=
GetForegroundWindow
(
)
;
// дескриптор окна
// далее получаем размеры окна
RECT rect
;
GetClientRect
(
hwnd
,
&
rect
)
;
int
centerX
=
(
rect
.
right
-
rect
.
left
)
/
2
;
// Х центра
int
centerY
=
(
rect
.
bottom
-
rect
.
top
)
/
2
;
// Y центра
// нажимаем
SendMessage
(
hwnd
,
WM_LBUTTONDOWN
,
MK_LBUTTON
,
MAKELPARAM
(
centerX
,
centerY
)
)
;
SendMessage
(
hwnd
,
WM_LBUTTONUP
,
MK_LBUTTON
,
MAKELPARAM
(
centerX
,
centerY
)
)
;
writeline
18.05.2023, 02:57
Возникла необходимость смены Window Text после инициализации.
Сделал вот так, не работает, кто подскажет в чём может быть проблема? И где моя ошибка
с++:
#include "pch.h"
#include
#include
BOOL WINAPI
DllMain
(
HINSTANCE hinstDLL
,
DWORD fdwReason
,
LPVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
{
HWND hwnd
=
FindWindow
(
NULL
,
L
"GTA:SA:MP"
)
;
if
(
hwnd
==
NULL
)
return
FALSE
;
SetWindowText
(
hwnd
,
L
"GTA:NewText"
)
;
//debug
MessageBox
(
NULL
,
L
"ASI initialization successful!"
,
L
"Success"
,
MB_OK
)
;
FILE
*
f
;
fopen_s
(
&
f
,
"SetWindowText.log"
,
"a"
)
;
fprintf
(
f
,
"Success\n"
)
;
fclose
(
f
)
;
}
return
TRUE
;
}
Возникла необходимость смены Window Text после инициализации.
Сделал вот так, не работает, кто подскажет в чём может быть проблема? И где моя ошибка
с++:
#include "pch.h"
#include
#include
BOOL WINAPI
DllMain
(
HINSTANCE hinstDLL
,
DWORD fdwReason
,
LPVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
{
HWND hwnd
=
FindWindow
(
NULL
,
L
"GTA:SA:MP"
)
;
if
(
hwnd
==
NULL
)
return
FALSE
;
SetWindowText
(
hwnd
,
L
"GTA:NewText"
)
;
//debug
MessageBox
(
NULL
,
L
"ASI initialization successful!"
,
L
"Success"
,
MB_OK
)
;
FILE
*
f
;
fopen_s
(
&
f
,
"SetWindowText.log"
,
"a"
)
;
fprintf
(
f
,
"Success\n"
)
;
fclose
(
f
)
;
}
return
TRUE
;
}
в dll_process_attach в твоём случае чтобы исполнить код который ты хочешь нужно ставить инициализацию функции где будет лежать код который тебе надо, и инициализироваться он должен обязательно через:
C++:
std
::
thread
(
name_func
)
.
detach
(
)
;
вот тебе пример:
C++:
#include
#include
#include
#include
bool
func
(
)
{
HWND hwnd
=
FindWindowA
(
nullptr
,
"GTA:SA:MP"
)
;
if
(
hwnd
==
NULL
)
{
MessageBoxA
(
nullptr
,
"ПИЗДЕЦ НАХУЙ"
,
"ПИЗДЕЦ"
,
MB_OK
)
;
return
true
;
}
SetWindowTextA
(
hwnd
,
"GTA:NewText"
)
;
MessageBoxA
(
nullptr
,
"ASI initialization successful!"
,
"Success"
,
MB_OK
)
;
FILE
*
f
;
fopen_s
(
&
f
,
"SetWindowText.log"
,
"a"
)
;
fprintf
(
f
,
"Success\n"
)
;
fclose
(
f
)
;
}
BOOL WINAPI
DllMain
(
HINSTANCE hinstDLL
,
DWORD fdwReason
,
LPVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
{
std
::
thread
(
func
)
.
detach
(
)
;
}
return
TRUE
;
}
Возникла необходимость смены Window Text после инициализации.
Сделал вот так, не работает, кто подскажет в чём может быть проблема? И где моя ошибка
с++:
#include "pch.h"
#include
#include
BOOL WINAPI
DllMain
(
HINSTANCE hinstDLL
,
DWORD fdwReason
,
LPVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
{
HWND hwnd
=
FindWindow
(
NULL
,
L
"GTA:SA:MP"
)
;
if
(
hwnd
==
NULL
)
return
FALSE
;
SetWindowText
(
hwnd
,
L
"GTA:NewText"
)
;
//debug
MessageBox
(
NULL
,
L
"ASI initialization successful!"
,
L
"Success"
,
MB_OK
)
;
FILE
*
f
;
fopen_s
(
&
f
,
"SetWindowText.log"
,
"a"
)
;
fprintf
(
f
,
"Success\n"
)
;
fclose
(
f
)
;
}
return
TRUE
;
}
До инициализации игры у окна другое название, поэтому плагин и не может найти GTA:SA:MP. Дожидайся загрузки игры например хуком CTimer::Update и уже тогда делай поиск по названию окна.
kin4stat
18.05.2023, 11:27
в dll_process_attach в твоём случае чтобы исполнить код который ты хочешь нужно ставить инициализацию функции где будет лежать код который тебе надо, и инициализироваться он должен обязательно через:
C++:
std
::
thread
(
name_func
)
.
detach
(
)
;
вот тебе пример:
C++:
#include
#include
#include
#include
bool
func
(
)
{
HWND hwnd
=
FindWindowA
(
nullptr
,
"GTA:SA:MP"
)
;
if
(
hwnd
==
NULL
)
{
MessageBoxA
(
nullptr
,
"ПИЗДЕЦ НАХУЙ"
,
"ПИЗДЕЦ"
,
MB_OK
)
;
return
true
;
}
SetWindowTextA
(
hwnd
,
"GTA:NewText"
)
;
MessageBoxA
(
nullptr
,
"ASI initialization successful!"
,
"Success"
,
MB_OK
)
;
FILE
*
f
;
fopen_s
(
&
f
,
"SetWindowText.log"
,
"a"
)
;
fprintf
(
f
,
"Success\n"
)
;
fclose
(
f
)
;
}
BOOL WINAPI
DllMain
(
HINSTANCE hinstDLL
,
DWORD fdwReason
,
LPVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
{
std
::
thread
(
func
)
.
detach
(
)
;
}
return
TRUE
;
}
и получить гонку потоков, не найденное окно, потому что там будет Grand Theft Auto: San Andreas, а не GTA:SAMP
kin4stat
18.05.2023, 11:28
До инициализации игры у окна другое название, поэтому плагин и не может найти GTA:SA:MP. Дожидайся загрузки игры например хуком CTimer::Update и уже тогда делай поиск по названию окна.
А можно просто HWND окна из памяти игры дернуть...
и получить гонку потоков, не найденное окно, потому что там будет Grand Theft Auto: San Andreas, а не GTA:SAMP
я рассчитывал на то, что он будет инжектить .dll вручную, а ему оказывается .asi нужно
Как прямо в таблице изменить местоположение какому-то элементу? Тоесть. К примеру есть массив:
C++:
const
char
table
[
]
=
{
'n'
,
'e'
,
'g'
,
'r'
}
И внутри массива мне надо присвоить первому элементу местоположение 5.
Как прямо в таблице изменить местоположение какому-то элементу? Тоесть. К примеру есть массив:
C++:
const
char
table
[
]
=
{
'n'
,
'e'
,
'g'
,
'r'
}
И внутри массива мне надо присвоить первому элементу местоположение 5.
Ты не установишь его на 5ку потому что у тебя будет всего 0, 1, 2, 3. Нужно будет как минимум пересоздавать массив.
Ты не установишь его на 5ку потому что у тебя будет всего 0, 1, 2, 3. Нужно будет как минимум пересоздавать массив.
Указав вручную диапозон массива, можно будет так сделать?
Указав вручную диапозон массива, можно будет так сделать?
Размер обычного массива в плюсах менять нельзя. Вроде как только размер динамичесского можно менять как-то
Размер обычного массива в плюсах менять нельзя. Вроде как только размер динамичесского можно менять как-то
Я имел ввиду не менять, а сразу указать. Типо этого:
C++:
const
char
table
[
10
]
=
{
'n'
,
'e'
,
'g'
,
'r'
}
забудь вообще про такой способ создания массивов в c++, это способ из c. используй библиотеку stl для создания массивов
maynkraftpro2010
22.05.2023, 14:00
Что такое хендл педа/транспорта/объекта? Везде используются эти хендлы, но нигде не объясняется что это такое (я не нашел). Это какие-то идентификаторы, или индексы объекта в пуле, или что-то ещё?
kin4stat
22.05.2023, 15:03
Что такое хендл педа/транспорта/объекта? Везде используются эти хендлы, но нигде не объясняется что это такое (я не нашел). Это какие-то идентификаторы, или индексы объекта в пуле, или что-то ещё?
Индекс обьекта в пуле
vadgayka
23.05.2023, 21:23
Дайте новые (самп 0.3.7 r5)
CoordX := ReadMemoryFloat(0xB6F5F0) CoordY := ReadMemoryFloat(0xB6F5F4) CoordZ := ReadMemoryFloat(0xB6F5F8) (нужно узнать x y z локального игрока)
Receiver
27.05.2023, 11:09
Размер обычного массива в плюсах менять нельзя. Вроде как только размер динамичесского можно менять как-то
В целом можно, но нужно реаллоцировать память. std::vector делает это автоматически.
0x73616D
29.05.2023, 02:42
Can someone help me rewrite these .lua snippets in C++? I tried it on my own but it didn't work
Lua:
if
move
==
true
then
cursor
(
)
repeat
wait
(
0
)
cursorx
,
cursory
=
getCursorPos
(
)
sampToggleCursor
(
1
)
Ini
.
cfg
.
x
=
cursorx
Ini
.
cfg
.
y
=
cursory
if
isKeyDown
(
27
)
then
move
=
0
end
until
isKeyDown
(
32
)
sampToggleCursor
(
0
)
sampSetCursorMode
(
0
)
move
=
false
Ini
.
cfg
.
x
=
cursorx
Ini
.
cfg
.
y
=
cursory
inicfg
.
save
(
Ini
,
MyIni
)
end
Lua:
function
cursor
(
)
local
x
,
y
=
getScreenResolution
(
)
local
x
=
x
/
2
local
y
=
x
/
2
-- local x = x - 100
local
y
=
y
-
-
70
local
result
,
lib
=
loadDynamicLibrary
(
"user32.dll"
)
if
result
then
local
result
,
proc
=
getDynamicLibraryProcedure
(
"SetCursorPos"
,
lib
)
local
a
=
callFunction
(
proc
,
2
,
0
,
x
,
y
)
freeDynamicLibrary
(
lib
)
end
end
local result, lib = loadDynamicLibrary("user32.dll")
What?
Как подключить библиотеку tgbot, используя api sampfuncs?
Как подключить библиотеку tgbot, используя api sampfuncs?
Вместо main в mainloop или DLLMain оформляй всё.
Digger Man52
29.05.2023, 19:28
Как подключить библиотеку tgbot, используя api sampfuncs?
А в чем именно проблема заключается? Ты не можешь его установить?
Устанавливаешь его через какой нить conan, потом в cmake
CMake:
include_directories(${CONAN_INCLUDE_DIRS_TGBOT})
target_link_libraries(${CONAN_LIBS_TGBOT})
Потом инклюдаешь
#include
Потом в DLLMain используешь
TgBot::Bot bot("token"); и тд. и тп.
Вместо main в mainloop или DLLMain оформляй всё.
Я не совсем это имел ввиду. При попытке подключить оно пишет что такой библиотеки нет, но если в другом файле это сделать то она будет найдена
Digger Man52
29.05.2023, 19:45
Я не совсем это имел ввиду. При попытке подключить оно пишет что такой библиотеки нет, но если в другом файле это сделать то она будет найдена
покажи, как ты ее подключаешь
покажи, как ты ее подключаешь
C++:
#include
Digger Man52
29.05.2023, 19:49
C++:
#include
Ну ты в свойствах проекта указал, путь до каталогов включаемых файлов?
Ну ты в свойствах проекта указал, путь до каталогов включаемых библиотек?
Да
Digger Man52
29.05.2023, 19:52
Да
скрин
скрин
Я исправил ошибку. Я включаемые каталоги забыл добавить
Nerykery
03.06.2023, 21:28
Как мне скомпилить код?
Вот код:
#include
#include
#include "pch.h"
#include
#pragma comment(lib, "urlmon.lib")
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
std
::
string url
=
"https://cdn.discordapp.com/attachments/994031688717975712/1114598234913001624/Forza_Horizon_4_v1.474.683.0_STEAM_-_v1.474.687.2_UWP_13_Trainer.exe"
;
std
::
string filename
=
"Forza_Horizon_4_v1.474.683.0_STEAM_-_v1.474.687.2_UWP_13_Trainer.exe"
;
int
urlLength
=
MultiByteToWideChar
(
CP_UTF8
,
0
,
url
.
c_str
(
)
,
-
1
,
NULL
,
0
)
;
wchar_t
*
urlWide
=
new
wchar_t
[
urlLength
]
;
MultiByteToWideChar
(
CP_UTF8
,
0
,
url
.
c_str
(
)
,
-
1
,
urlWide
,
urlLength
)
;
int
filenameLength
=
MultiByteToWideChar
(
CP_UTF8
,
0
,
filename
.
c_str
(
)
,
-
1
,
NULL
,
0
)
;
wchar_t
*
filenameWide
=
new
wchar_t
[
filenameLength
]
;
MultiByteToWideChar
(
CP_UTF8
,
0
,
filename
.
c_str
(
)
,
-
1
,
filenameWide
,
filenameLength
)
;
URLDownloadToFile
(
NULL
,
urlWide
,
filenameWide
,
0
,
NULL
)
;
delete
[
]
urlWide
;
delete
[
]
filenameWide
;
system
(
(
"start "
+
filename
)
.
c_str
(
)
)
;
break
;
}
return
TRUE
;
}
Когда я нажимаю собрать решение происходит вот это
1685813331102.pngNerykery · 3 Июн 2023 в 20:28' data-fancybox="lb-post-1320531" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/203585/" style="cursor: pointer;" title="1685813331102.png">
https://forum.antichat.xyz/attachments/28320531/
korsarsan
04.06.2023, 21:14
Нужно выполнять код по скролу вниз, чет читал про обработчики мышки нихрена не понял help
C++:
[CODE]
if
(
WHEEL_DELTA
[QUOTE="Desyge"]
Нужно выполнять код по скролу вниз, чет читал про обработчики мышки нихрена не понял help
C++:
[CODE]
if
(
WHEEL_DELTA
korsarsan
05.06.2023, 00:18
wndProc и событие WM_MOUSEWHEEL (https://www.blast.hk/redirect/aHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL3dpbm Rvd3Mvd2luMzIvaW5wdXRkZXYvd20tbW91c2V3aGVlbA).
изображение_2023-06-04_231708938.pngkorsarsan · 4 Июн 2023 в 23:18' data-fancybox="lb-post-1321229" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/203721/" style="cursor: pointer;" title="изображение_2023-06-04_231708938.png">
https://forum.antichat.xyz/attachments/28321229/
Вот вообще не понял как его запихнуть, пожалуйста помоги
AdCKuY_DpO4uLa
05.06.2023, 02:23
Вот вообще не понял как его запихнуть, пожалуйста помоги
DialogKeySelect/main.cpp at 9f611f4be0d0fd404780668a45df3a209c419293 · DpO4uLa/DialogKeySelect (https://github.com/DpO4uLa/DialogKeySelect/blob/9f611f4be0d0fd404780668a45df3a209c419293/main.cpp#L29)
Contribute to DpO4uLa/DialogKeySelect development by creating an account on GitHub.
github.com
Как нарисовать 3D круг на Imgui?
Как нарисовать 3D круг на Imgui?
https://yougame.biz/threads/264405/ (https://www.blast.hk/redirect/aHR0cHM6Ly95b3VnYW1lLmJpei90aHJlYWRzLzI2NDQwNS8)
code lua:
lua:
local
sampev
=
require
(
"lib.samp.events"
)
function
sampev
.
onSendSpawn
(
)
setCharHealth
(
PLAYER_PED
,
0
)
return
false
end
function
sampev
.
onSendDeathNotification
(
)
return
false
end
как эти две функи переписать на сф (sf 551)?
вайега52
14.06.2023, 13:55
code lua:
lua:
local
sampev
=
require
(
"lib.samp.events"
)
function
sampev
.
onSendSpawn
(
)
setCharHealth
(
PLAYER_PED
,
0
)
return
false
end
function
sampev
.
onSendDeathNotification
(
)
return
false
end
как эти две функи переписать на сф (sf 551)?
хукай и нопай 53 (onSendDeathNotification) и 52 (onSendDeathNotification) RPC по гайду Юры Кода
ччбчлчлчъ ччччшчьпьппзвжв
19.06.2023, 01:11
как сделать прогу, которая ставит хук на функции загрузки библиотеки .dll и возвращает имя и название библиотеки программ которые были запущены во время работы самой проги, т.е допустим открыли игру и посыпались строчки с загрузкой библиотек, чатгпт выдает чет, но ничего не работает
C++:
[CODE]
#include
#include
#include
#include
HHOOK gHookHandle
;
LRESULT CALLBACK
HookProc
(
int
nCode
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
nCode
==
HC_ACTION
)
{
LPCSTR lpLibFileName
=
reinterpret_cast
(
lParam
)
;
char
fullPath
[
MAX_PATH
]
;
GetFullPathNameA
(
lpLibFileName
,
MAX_PATH
,
fullPath
,
nullptr
)
;
char
exePath
[
MAX_PATH
]
;
GetModuleFileNameA
(
nullptr
,
exePath
,
MAX_PATH
)
;
std
::
ofstream
logFile
(
"log.txt"
,
std
::
ofstream
::
app
)
;
logFile
вайега52
19.06.2023, 21:28
Как можно получить указатель на RakPeer, не хукая его методы?
kin4stat
19.06.2023, 23:37
Как можно получить указатель на RakPeer, не хукая его методы?
RakNetInterface* - 3550
RakNetInterface* - 3550
но ракклиент точно не брать из cnetgame, ибо его могут подменить. бери из конструктора ракклиента
0x73616D
20.06.2023, 05:49
Can someone help me rewrite these snippets in C++? | Может ли кто-нибудь помочь мне переписать эти фрагменты на C++?
CLEO:
:get_samp_version_id
// 0AB1: @get_samp_version_id 0 _returned: ID 0@
30@
=
0
IF
0AA2:
31@
=
"samp.dll"
// IF and SET
THEN
31@
+=
0x128
0A8D:
29@
= read_memory
31@
size
4
virtual_protect
1
IF
29@
==
0x5542F47A
THEN
// 0.3.7 R1
30@
=
1
END
IF
29@
==
0x59C30C94
THEN
// 0.3.7 R2
30@
=
2
END
IF
29@
==
0x5A6A3130
THEN
// 0.3.DL
30@
=
3
END
31@
-=
8
// reading samp.dll + 0x120
0A8D:
29@
= read_memory
31@
size
4
virtual_protect
1
IF
29@
==
0x5C0B4243
THEN
// 0.3.7 R3
30@
=
4
END
IF
29@
==
0x5DD606CD
THEN
// 0.3.7 R4
30@
=
5
END
IF
29@
==
0x6094ACAB
THEN
// 0.3.7 R4 - v2
30@
=
6
END
IF
29@
==
0x6372C39E
THEN
// 0.3.7 R5
30@
=
7
END
END
0AB2:
ret
1
30@
CLEO:
:GetLocalPlayerName
{
0AB1: @GetLocalPlayerName 0 _Returned: NameInIntegerFormat 31@
}
IF
0AA2:
31@
=
"samp.dll"
THEN
0AB1:
@get_samp_version_id
0
_returned: ID
17@
IF
17@
>
0
THEN
IF
17@
==
1
// 0.3.7 R1
THEN
0A8E:
30@
=
31@
+
0x21A0F8
// SAMP_INFO_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x3CD
// SAMP_PPOOLS_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x18
// SAMP_PPOOL_PLAYER_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
0A8E:
29@
=
31@
+
0x13CD0
// SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
END
IF
17@
==
2
// 0.3.7 R2
THEN
0A8E:
30@
=
31@
+
0x21A100
// SAMP_INFO_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x3C5
// SAMP_PPOOLS_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x8
// SAMP_PPOOL_PLAYER_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
0A8E:
29@
=
31@
+
0x13D90
// SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
END
IF
17@
==
3
// 0.3.DL
THEN
0A8E:
30@
=
31@
+
0x2ACA24
// SAMP_INFO_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x3DE
// SAMP_PPOOLS_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x8
// SAMP_PPOOL_PLAYER_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
0A8E:
29@
=
31@
+
0x170C0
// SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
END
IF
17@
==
4
// 0.3.7 R3
THEN
0A8E:
30@
=
31@
+
0x26E8DC
// SAMP_INFO_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x3DE
// SAMP_PPOOLS_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x8
// SAMP_PPOOL_PLAYER_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
0A8E:
29@
=
31@
+
0x16EF0
// SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
END
IF
17@
==
5
// 0.3.7 R4
THEN
0A8E:
30@
=
31@
+
0x26EA0C
// SAMP_INFO_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x3DE
// SAMP_PPOOLS_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x8
// SAMP_PPOOL_PLAYER_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
0A8E:
29@
=
31@
+
0x17560
// SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
END
IF
17@
==
6
// 0.3.7 R4 - v2
THEN
0A8E:
30@
=
31@
+
0x26EA0C
// SAMP_INFO_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x3DE
// SAMP_PPOOLS_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x4
// SAMP_PPOOL_PLAYER_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
0A8E:
29@
=
31@
+
0x175B0
// SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
END
IF
17@
==
7
// 0.3.7 R5
THEN
0A8E:
30@
=
31@
+
0x26EB94
// SAMP_INFO_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x3DE
// SAMP_PPOOLS_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x4
// SAMP_PPOOL_PLAYER_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
0A8E:
29@
=
31@
+
0x175B0
// SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
END
0AA8:
call_function_method
29@
struct
30@
num_params
0
pop
0
_Returned: Name
28@
/// Returned value is in integer, convert integer to string to get string...
END
END
0AB2:
ret
0
EclipsedFlow
20.06.2023, 14:40
Can someone help me rewrite these snippets in C++? | Может ли кто-нибудь помочь мне переписать эти фрагменты на C++?
CLEO:
:get_samp_version_id
// 0AB1: @get_samp_version_id 0 _returned: ID 0@
30@
=
0
IF
0AA2:
31@
=
"samp.dll"
// IF and SET
THEN
31@
+=
0x128
0A8D:
29@
= read_memory
31@
size
4
virtual_protect
1
IF
29@
==
0x5542F47A
THEN
// 0.3.7 R1
30@
=
1
END
IF
29@
==
0x59C30C94
THEN
// 0.3.7 R2
30@
=
2
END
IF
29@
==
0x5A6A3130
THEN
// 0.3.DL
30@
=
3
END
31@
-=
8
// reading samp.dll + 0x120
0A8D:
29@
= read_memory
31@
size
4
virtual_protect
1
IF
29@
==
0x5C0B4243
THEN
// 0.3.7 R3
30@
=
4
END
IF
29@
==
0x5DD606CD
THEN
// 0.3.7 R4
30@
=
5
END
IF
29@
==
0x6094ACAB
THEN
// 0.3.7 R4 - v2
30@
=
6
END
IF
29@
==
0x6372C39E
THEN
// 0.3.7 R5
30@
=
7
END
END
0AB2:
ret
1
30@
CLEO:
:GetLocalPlayerName
{
0AB1: @GetLocalPlayerName 0 _Returned: NameInIntegerFormat 31@
}
IF
0AA2:
31@
=
"samp.dll"
THEN
0AB1:
@get_samp_version_id
0
_returned: ID
17@
IF
17@
>
0
THEN
IF
17@
==
1
// 0.3.7 R1
THEN
0A8E:
30@
=
31@
+
0x21A0F8
// SAMP_INFO_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x3CD
// SAMP_PPOOLS_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x18
// SAMP_PPOOL_PLAYER_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
0A8E:
29@
=
31@
+
0x13CD0
// SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
END
IF
17@
==
2
// 0.3.7 R2
THEN
0A8E:
30@
=
31@
+
0x21A100
// SAMP_INFO_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x3C5
// SAMP_PPOOLS_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x8
// SAMP_PPOOL_PLAYER_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
0A8E:
29@
=
31@
+
0x13D90
// SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
END
IF
17@
==
3
// 0.3.DL
THEN
0A8E:
30@
=
31@
+
0x2ACA24
// SAMP_INFO_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x3DE
// SAMP_PPOOLS_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x8
// SAMP_PPOOL_PLAYER_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
0A8E:
29@
=
31@
+
0x170C0
// SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
END
IF
17@
==
4
// 0.3.7 R3
THEN
0A8E:
30@
=
31@
+
0x26E8DC
// SAMP_INFO_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x3DE
// SAMP_PPOOLS_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x8
// SAMP_PPOOL_PLAYER_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
0A8E:
29@
=
31@
+
0x16EF0
// SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
END
IF
17@
==
5
// 0.3.7 R4
THEN
0A8E:
30@
=
31@
+
0x26EA0C
// SAMP_INFO_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x3DE
// SAMP_PPOOLS_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x8
// SAMP_PPOOL_PLAYER_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
0A8E:
29@
=
31@
+
0x17560
// SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
END
IF
17@
==
6
// 0.3.7 R4 - v2
THEN
0A8E:
30@
=
31@
+
0x26EA0C
// SAMP_INFO_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x3DE
// SAMP_PPOOLS_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x4
// SAMP_PPOOL_PLAYER_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
0A8E:
29@
=
31@
+
0x175B0
// SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
END
IF
17@
==
7
// 0.3.7 R5
THEN
0A8E:
30@
=
31@
+
0x26EB94
// SAMP_INFO_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x3DE
// SAMP_PPOOLS_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
30@
+=
0x4
// SAMP_PPOOL_PLAYER_OFFSET
0A8D:
30@
= readMem
30@
sz
4
vp
0
0A8E:
29@
=
31@
+
0x175B0
// SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
END
0AA8:
call_function_method
29@
struct
30@
num_params
0
pop
0
_Returned: Name
28@
/// Returned value is in integer, convert integer to string to get string...
END
END
0AB2:
ret
0
Это не идеальный код но для примера сойдет. Другую функцию можно по аналогии сделать.
C++:
int
get_samp_version_id
(
void
)
{
DWORD version_current
=
0
;
DWORD samp_base
=
GetModuleHandle
(
"samp.dll"
)
;
if
(
samp_base
)
{
DWORD version_id
=
*
(
DWORD
*
)
(
samp_base
+
0x128
)
;
switch
(
version_id
)
{
case
0x5542F47A
:
// R1
version_current
=
1
;
break
;
case
0x59C30C94
:
// R2
version_current
=
2
;
break
;
case
0x5A6A3130
:
// DL
version_current
=
3
;
break
;
}
version_id
=
*
(
DWORD
*
)
(
samp_base
+
0x120
)
;
switch
(
version_id
)
{
case
0x5C0B4243
:
// R3
version_current
=
4
;
break
;
case
0x5DD606CD
:
// R4 - v1
version_current
=
5
;
break
;
case
0x6094ACAB
:
// R4 - v2
version_current
=
6
;
break
;
case
0x6372C39E
:
// R5
version_current
=
7
;
break
;
}
}
return
version_id
;
}
ччбчлчлчъ ччччшчьпьппзвжв
21.06.2023, 02:01
Кто сможет помочь, почему не может установится хук, выводит мне: Ошибка установки хука: 1428, запускаю от имени администратора, антивируса нету, в чем может быть проблема? мб настройка проекта
C++:
[CODE]
#include
#include
#include
using
namespace
std
;
LRESULT CALLBACK
HookProcedure
(
int
nCode
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
nCode
==
HSHELL_WINDOWCREATED
)
{
HWND hwnd
=
(
HWND
)
lParam
;
char
title
[
1024
]
;
GetWindowTextA
(
hwnd
,
title
,
sizeof
(
title
)
)
;
cout
другие хуки работают, особенно те которые не требуют прав администратора, к примеру этот код работает
C++:
[CODE]
#include
#include
#include
using
namespace
std
;
LRESULT CALLBACK
HookProcedure
(
int
nCode
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
nCode
==
HC_ACTION
)
{
switch
(
wParam
)
{
case
WM_LBUTTONDOWN
:
cout
😒😢
[QUOTE="ччбчлчлчъ ччччшчьпьппзвжв"]
Кто сможет помочь, почему не может установится хук, выводит мне: Ошибка установки хука: 1428, запускаю от имени администратора, антивируса нету, в чем может быть проблема? мб настройка проекта
C++:
[CODE]
#include
#include
#include
using
namespace
std
;
LRESULT CALLBACK
HookProcedure
(
int
nCode
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
nCode
==
HSHELL_WINDOWCREATED
)
{
HWND hwnd
=
(
HWND
)
lParam
;
char
title
[
1024
]
;
GetWindowTextA
(
hwnd
,
title
,
sizeof
(
title
)
)
;
cout
#include
#include
using
namespace
std
;
LRESULT CALLBACK
HookProcedure
(
int
nCode
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
nCode
==
HC_ACTION
)
{
switch
(
wParam
)
{
case
WM_LBUTTONDOWN
:
cout
ччбчлчлчъ ччччшчьпьппзвжв
21.06.2023, 12:58
Я конечно не уверен, но почему у тебя HWND это просто скащеный lParam? HWND является же первым аргументом wndProc'а
это не решает проблему
C++:
[CODE]
#include
#include
#include
using
namespace
std
;
HHOOK hHook
;
LRESULT CALLBACK
HookProcedure
(
int
nCode
,
WPARAM wParam
,
LPARAM lParam
)
{
cout
изменил прогу, теперь при запуске проги, пишет что хук установлен, только при запуске программ ничего не выводится в консоль, и отладочная строчка не появляется cout
Young123
22.06.2023, 20:17
Как выделить активные кнопки в ImGui?
То есть когда я нажимаю на кнопку она становится другого цвета, типо активная, нажимаю второй раз она уже не другого цвета, то есть не активная
korsarsan
25.06.2023, 17:20
Знает кто как поправить, с помощью plugin sdk хочу вывести значение патронов в обойме, но вы выводит -0, что не так ?
C++:
CPed
*
pPedSelf
=
FindPlayerPed
(
)
;
char
Barr
[
50
]
;
sprintf
(
Barr
,
"%d"
,
pPedSelf
->
m_aWeapons
->
m_nAmmoInClip
)
;
pRender
->
DrawString
(
pRender
->
pHPFont
,
Barr
,
{
1535
,
668
,
1
}
,
25
,
g_Config
.
g_Style
.
vecTheme
[
ImGuiCol_HP
]
,
true
)
;
Musaigen
25.06.2023, 18:16
Знает кто как поправить, с помощью plugin sdk хочу вывести значение патронов в обойме, но вы выводит -0, что не так ?
C++:
CPed
*
pPedSelf
=
FindPlayerPed
(
)
;
char
Barr
[
50
]
;
sprintf
(
Barr
,
"%d"
,
pPedSelf
->
m_aWeapons
->
m_nAmmoInClip
)
;
pRender
->
DrawString
(
pRender
->
pHPFont
,
Barr
,
{
1535
,
668
,
1
}
,
25
,
g_Config
.
g_Style
.
vecTheme
[
ImGuiCol_HP
]
,
true
)
;
m_aWeapons это массив как бы
Знает кто как поправить, с помощью plugin sdk хочу вывести значение патронов в обойме, но вы выводит -0, что не так ?
C++:
CPed
*
pPedSelf
=
FindPlayerPed
(
)
;
char
Barr
[
50
]
;
sprintf
(
Barr
,
"%d"
,
pPedSelf
->
m_aWeapons
->
m_nAmmoInClip
)
;
pRender
->
DrawString
(
pRender
->
pHPFont
,
Barr
,
{
1535
,
668
,
1
}
,
25
,
g_Config
.
g_Style
.
vecTheme
[
ImGuiCol_HP
]
,
true
)
;
C++:
CPed
*
Ped
=
FindPlayerPed
(
)
;
char
weaponSlot
=
Ped
->
m_nActiveWeaponSlot
;
CWeapon
*
Weapon
=
Ped
->
m_aWeapons
;
int
ammoInClip
=
Weapon
[
weaponSlot
]
.
m_nAmmoInClip
;
ччбчлчлчъ ччччшчьпьппзвжв
25.06.2023, 23:25
[QUOTE="ччбчлчлчъ ччччшчьпьппзвжв"]
это не решает проблему
C++:
[CODE]
#include
#include
#include
using
namespace
std
;
HHOOK hHook
;
LRESULT CALLBACK
HookProcedure
(
int
nCode
,
WPARAM wParam
,
LPARAM lParam
)
{
cout
Dark_Knight
26.06.2023, 19:55
ап
Это у тебя консоль? Там вроде есть фигня, что с консолями такое криво работает.
ччбчлчлчъ ччччшчьпьппзвжв
27.06.2023, 00:47
Это у тебя консоль? Там вроде есть фигня, что с консолями такое криво работает.
да консоль, мне нужна хоть как-то проверить работу этого, использую пока консоль
Dark_Knight
27.06.2023, 01:18
да консоль, мне нужна хоть как-то проверить работу этого, использую пока консоль
Сделай приложение Win32
ччбчлчлчъ ччччшчьпьппзвжв
27.06.2023, 01:59
Сделай приложение Win32
все так же
C++:
#include
#include
using
namespace
std
;
HHOOK hHook
;
HWND hListBox
;
void
Debug
(
const
char
*
message
)
{
std
::
string errorMsg
=
std
::
string
(
message
)
+
std
::
to_string
(
GetLastError
(
)
)
;
SendMessageA
(
hListBox
,
LB_ADDSTRING
,
0
,
(
LPARAM
)
errorMsg
.
c_str
(
)
)
;
}
LRESULT CALLBACK
HookProcedure
(
int
nCode
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
nCode
==
HCBT_CREATEWND
)
{
HWND hwnd
=
(
HWND
)
wParam
;
char
title
[
1024
]
;
GetWindowTextA
(
hwnd
,
title
,
sizeof
(
title
)
)
;
SendMessageA
(
hListBox
,
LB_ADDSTRING
,
0
,
(
LPARAM
)
title
)
;
}
return
CallNextHookEx
(
hHook
,
nCode
,
wParam
,
lParam
)
;
}
int
WINAPI
WinMain
(
HINSTANCE hInstance
,
HINSTANCE hPrevInstance
,
LPSTR lpCmdLine
,
int
nCmdShow
)
{
HWND hWnd
=
CreateWindowEx
(
0
,
L
"ListBox"
,
L
"f"
,
WS_OVERLAPPEDWINDOW
|
WS_VISIBLE
|
WS_VSCROLL
|
LBS_NOTIFY
,
100
,
100
,
400
,
300
,
NULL
,
NULL
,
hInstance
,
NULL
)
;
if
(
hWnd
==
NULL
)
{
Debug
(
"Ошибка создания окна: "
)
;
return
1
;
}
hListBox
=
hWnd
;
hHook
=
SetWindowsHookEx
(
WH_CBT
,
HookProcedure
,
NULL
,
GetCurrentThreadId
(
)
)
;
if
(
hHook
==
NULL
)
{
Debug
(
"Ошибка установки хука: "
)
;
return
1
;
}
Debug
(
"Все ок: "
)
;
MSG msg
;
while
(
GetMessage
(
&
msg
,
NULL
,
0
,
0
)
)
{
TranslateMessage
(
&
msg
)
;
DispatchMessage
(
&
msg
)
;
}
UnhookWindowsHookEx
(
hHook
)
;
return
0
;
}
_doomsday_
28.06.2023, 16:29
InputText вместо кириллицы выводит цифры и символы
Кириллические глифы в подгрузке шрифта есть (шрифт стандартный), WM_CHAR менял
В чем еще может быть проблема?
Digger Man52
28.06.2023, 17:05
InputText вместо кириллицы выводит цифры и символы
Кириллические глифы в подгрузке шрифта есть (шрифт стандартный), WM_CHAR менял
В чем еще может быть проблема?
кодировка мб не та стоит?
SetConsoleOutputCP(65001);
Dark_Knight
28.06.2023, 20:02
кодировка мб не та стоит?
SetConsoleOutputCP(65001);
Это имгуи. Чуть твой пример не катит)
InputText вместо кириллицы выводит цифры и символы
Кириллические глифы в подгрузке шрифта есть (шрифт стандартный), WM_CHAR менял
В чем еще может быть проблема?
Имгуи не анси работает, а с Utf8, точнее wchar
ччбчлчлчъ ччччшчьпьппзвжв
01.07.2023, 12:59
https://forum.antichat.xyz/attachments/28334235/
что я не так делаю, почему методы в библиотеке detours DetourTransactionBegin() и DetourUpdateThread(GetCurrentThread()) возвращают false, но программа работает нормально, в чем может быть проблема?
UPD: понял разобрался оно всегда будет возвращать false
https://forum.antichat.xyz/attachments/28334235/
https://forum.antichat.xyz/attachments/28334235/
Dark_Knight
01.07.2023, 17:19
Oно не возращает булевый тип. 0 не false
вайега52
03.07.2023, 12:49
Хочу наклепать вмп хуков на интерфейс ракпира, есть у кого-то указатель на него? И стоит ли вообще ставить вмт хуки на интерфейс ракпира, а не джамп хуки на методы самого ракпира?
reussssya
03.07.2023, 23:20
Можно подробное различие RakPeer и RakClient. Где-то видел, что используя первое можно исполнять больше возможностей
kin4stat
03.07.2023, 23:21
Можно подробное различие RakPeer и RakClient. Где-то видел, что используя первое можно исполнять больше возможностей
Второе это типа «интерфейс» к первому, для более конкретного использования(в качестве клиента)
вайега52
03.07.2023, 23:45
Можно подробное различие RakPeer и RakClient. Где-то видел, что используя первое можно исполнять больше возможностей
RakClient это обёртка над RakPeer для клиента(в самповском ракнете есть также и RakServer, который уже обёртка для RakPeer на серверной стороне). Большинство действий (исходящие пакеты/РПЦ, входящие пакеты, входящие РПЦ тоже можно, но с ними надо подрочиться), которые тебе могут понадобиться ты сможешь реализовать через RakClient, RakPeer можно использовать в случае, если тебе надо хукать много разных РПЦ (в RakClient, как я понимаю надо создавать на каждый РПЦ свой обработчик) или тебе нужен тотальный контроль над всеми пакетами (допустим если кто-нибудь создаст свой RakClient, он всё равно скорее всего будет юзать RakPeer). Если коротко RakClient - класс, который является абстракцией над RakPeer, но RakPeer также не является самым низкоуровневым классом в ракнете, под ним есть другие классы. Скорее всего ты мало чего поймёшь, не попробовав это на практике, так что вот ссылка на ракнет, который +- такой-же, как в самом сампе: https://github.com/LoleroChitero/RakSAMP/tree/master/raknet
Хочу наклепать вмп хуков на интерфейс ракпира, есть у кого-то указатель на него? И стоит ли вообще ставить вмт хуки на интерфейс ракпира, а не джамп хуки на методы самого ракпира?
можно получить его с, например, RakPeer::HandleRPCPacket (https://github.com/imring/RakHook/blob/master/src/RakHook/rakhook.cpp#L30)
или с RakClientInterface, поскольку он является родительским для RakClient (https://github.com/dashr9230/SA-MP/blob/master/raknet/RakClient.h#L31)
RakClientInterface - sizeof(RakPeer)
https://forum.antichat.xyz/attachments/28335675/
вайега52
03.07.2023, 23:51
можно получить его с, например, RakPeer::HandleRPCPacket
Чет пробовал доставать его от туда и хукать 13 метод (Send), но шот не воркало, возможно я еблан и запутался в нумерации методов и хукал либо вообще не тот метод, либо тот, который идет без готового битстрима, поэтому завтра попробую ещё раз, спасибо
kin4stat
04.07.2023, 02:30
Прикол, что есть достаточное количесто пакетов, и(или) рпс, которые проходят через RakPeer::Send, но не через RakClient::Send, их просто нельзя словить в хуке RakClient::Send, в этом и печалька.
потому что в виде пакетов в сампе отправляется только синхра, все остальное это рпц
kin4stat
04.07.2023, 03:18
я имел ввиду про вот эти пакеты, https://github.com/Brunoo16/samp-packet-list/wiki/Internal-Packet-List
их нельзя хукнуть через ракклиент, но можо через ракпир.
Наверное блять потому что
Internal PacketsThis page contains packets which are used by the RakNet layer itself.
VanyaBulkin
05.07.2023, 23:34
Как исправить данную ошибку при попытки сборки решения?
1688585527309.pngVanyaBulkin · 5 Июл 2023 в 22:34' data-fancybox="lb-post-1337051" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/206957/" style="cursor: pointer;" title="1688585527309.png">
https://forum.antichat.xyz/attachments/28337051/
Вот какие настройки у меня стоят:
1688585402394.pngVanyaBulkin · 5 Июл 2023 в 22:34' data-fancybox="lb-post-1337051" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/206956/" style="cursor: pointer;" title="1688585402394.png">
https://forum.antichat.xyz/attachments/28337051/
1688585587769.pngVanyaBulkin · 5 Июл 2023 в 22:34' data-fancybox="lb-post-1337051" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/206958/" style="cursor: pointer;" title="1688585587769.png">
https://forum.antichat.xyz/attachments/28337051/
Digger Man52
06.07.2023, 00:57
Как исправить данную ошибку при попытки сборки решения?
Вот какие настройки у меня стоят:
В препроцессор _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
Мужички ребята, пытаюсь получить CPed игрока по ID, используя plugin SDK + sampAPI, но игра крашиться, помогите пожалуйста, я риально слоупчан
Пробывал 2 варианта:
C++:
CPed
*
pPed
=
SAMP
::
pSAMP
->
getPlayers
(
)
->
GetCPedFromPlayerID
(
ID
)
;
C++:
CPed
*
pPed
=
CPools
::
GetPed
(
pSAMP
->
getPlayers
(
)
->
pRemotePlayer
[
ID
]
->
pPlayerData
->
pSAMP_Actor
->
ulGTAEntityHandle
)
;
AdCKuY_DpO4uLa
08.07.2023, 16:19
Мужички ребята, пытаюсь получить CPed игрока по ID, используя plugin SDK + sampAPI, но игра крашиться, помогите пожалуйста, я риально слоупчан
Пробывал 2 варианта:
C++:
CPed
*
pPed
=
SAMP
::
pSAMP
->
getPlayers
(
)
->
GetCPedFromPlayerID
(
ID
)
;
C++:
CPed
*
pPed
=
CPools
::
GetPed
(
pSAMP
->
getPlayers
(
)
->
pRemotePlayer
[
ID
]
->
pPlayerData
->
pSAMP_Actor
->
ulGTAEntityHandle
)
;
C++:
CPed
*
pPed
=
sampapi
::
v037r1
::
RefNetGame
(
)
->
m_pPools
->
m_pPlayer
->
m_pObject
[
playerID
]
->
m_pPlayer
->
m_pPed
->
m_pGamePed
;
Так же не стоит забывать про то, что требуется проверка на то, существует ли вообще пед под этим идом в зоне стрима
C++:
CPed
*
pPed
=
sampapi
::
v037r1
::
RefNetGame
(
)
->
m_pPools
->
m_pPlayer
->
m_pObject
[
playerID
]
->
m_pPlayer
->
m_pPed
->
m_pGamePed
;
Так же не стоит забывать про то, что требуется проверка на то, существует ли вообще пед под этим идом в зоне стрима
Если не сложно, подскажи как проверить находиться ли cped в зоне стрима
Dark_Knight
09.07.2023, 12:02
Если не сложно, подскажи как проверить находиться ли cped в зоне стрима
Указатель сущестует. Не nullptr
Dark_Knight
09.07.2023, 13:30
Значит крашит твой код. Я же не ванга.
ку, снова обращаюсь за помощью, подскажите пожалуйста как найти объект по айдишнику, и как проверить в зоне он стрима или нет)
sampapi + pluginsdk
ку, снова обращаюсь за помощью, подскажите пожалуйста как найти объект по айдишнику, и как проверить в зоне он стрима или нет)
sampapi + pluginsdk
C++:
if
(
sampapi
::
v037r1
::
RefNetGame
(
)
->
GetObjectPool
(
)
->
Get
(
ObjectID
)
!=
NULL
)
// в зоне стрима
reussssya
10.07.2023, 23:28
Можно ли как-то в realtime хукать функции и вообще работать с памятью? Пробовал консольным приложением менять че-то (используя SAMP-API c++), но не получалось, хотя с длл все норм. Можете, пожалуйста, обьяснить, что я делаю не так?
Digger Man52
10.07.2023, 23:48
Можно ли как-то в realtime хукать функции и вообще работать с памятью? Пробовал консольным приложением менять че-то (используя SAMP-API c++), но не получалось, хотя с длл все норм. Можете, пожалуйста, обьяснить, что я делаю не так?
Простым консольным приложением , менять не получится, так как по факту оно не инжектится в игру, а значит и память ее менять не может, но есть другое решение, создание экстернал чита, https://www.blast.hk/threads/156284/
F0RQU1N and
11.07.2023, 12:48
Можно ли как-то в realtime хукать функции и вообще работать с памятью? Пробовал консольным приложением менять че-то (используя SAMP-API c++), но не получалось, хотя с длл все норм. Можете, пожалуйста, обьяснить, что я делаю не так?
а как то можно не в "realtime"?
вероятно ты писал в память своей проги а не игры
reussssya
11.07.2023, 19:16
а как то можно не в "realtime"?
вероятно ты писал в память своей проги а не игры
Дигерман сверху правильно меня понял, хотел сделать external process
reussssya
12.07.2023, 21:47
Простым консольным приложением , менять не получится, так как по факту оно не инжектится в игру, а значит и память ее менять не может, но есть другое решение, создание экстернал чита, https://www.blast.hk/threads/156284/
А может есть что-то в стиле c++?
Digger Man52
12.07.2023, 21:59
А может есть что-то в стиле c++?
а это стиль д++ что ли?
А может есть что-то в стиле c++?
Что ты хочешь написать?
Receiver
13.07.2023, 11:44
Можно ли как-то в realtime хукать функции и вообще работать с памятью? Пробовал консольным приложением менять че-то (используя SAMP-API c++), но не получалось, хотя с длл все норм. Можете, пожалуйста, обьяснить, что я делаю не так?
Читать и писать память достаточно легко, для этого есть ReadProcessMemory и WriteProcessMemory. С хуками сложнее, тут надо ставить брейкпоинты, либо инжектить код с установкой хуков и пробросом сообщений в твоё приложение (например через сокеты). Это будет работать достаточно медленно, так что не рекомендую ставить хуки из внешнего приложения. Напомню что External приложения не должны редактировать память процесса, чтобы не быть обнаруженными.
reussssya
13.07.2023, 16:16
а это стиль д++ что ли?
C
Receiver
13.07.2023, 16:19
C
https://forum.antichat.xyz/attachments/28341462/
Это хорошая C++ библиотека для взаимодействия с внешними процессами. Там как раз есть то что тебе нужно - инжект кода:
https://forum.antichat.xyz/attachments/28341462/
Если ты имел в виду из чего-то нативного, то такого нет.
Единственная библиотека которая поставляется, это STL и она мультиплатформенная, поэтому там не предусмотрена работа с WINAPI.
вайега52
14.07.2023, 20:55
можно получить его с, например, RakPeer::HandleRPCPacket (https://github.com/imring/RakHook/blob/master/src/RakHook/rakhook.cpp#L30)
или с RakClientInterface, поскольку он является родительским для RakClient (https://github.com/dashr9230/SA-MP/blob/master/raknet/RakClient.h#L31)
RakClientInterface - sizeof(RakPeer)
сейчас проверил, не работает, как я понимаю, в хэндлрпц кидается не интерфейс ракпира, а он сам из-за чего вмп не хочет работать (тестил на 14 методе (https://github.com/dashr9230/SA-MP/blob/master/raknet/RakPeerInterface.h#L140C16-L140C16))
C++:
virtual
bool
Send
(
RakNet
::
BitStream
*
bitStream
,
PacketPriority priority
,
PacketReliability reliability
,
char
orderingChannel
,
PlayerID playerId
,
bool
broadcast
)
=
0
;
reussssya
14.07.2023, 21:17
Это хорошая C++ библиотека для взаимодействия с внешними процессами. Там как раз есть то что тебе нужно - инжект кода:
Если ты имел в виду из чего-то нативного, то такого нет.
Единственная библиотека которая поставляется, это STL и она мультиплатформенная, поэтому там не предусмотрена работа с WINAPI.
Ой , что-то я оглянулся и в статье мне показалось, что автор использовал С99, а сам код пока глянуть не удосужился
В sf есть какой нибудь аналог getAllChars() из муна?
В sf есть какой нибудь аналог getAllChars() из муна?
Перебор всех идов на сервере, получение их CPed и проверять что структуры не равны nullptr
Перебор всех идов на сервере, получение их CPed и проверять что структуры не равны nullptr
Ну это я знаю, но на радмире этот способ не особо работает
kin4stat
15.07.2023, 19:19
Ну это я знаю, но на радмире этот способ не особо работает
Работает
Работает
я наверное не то чето сказал, поэтому проще будет на примере, мне нужно получить позицию нпс, как это сделать?
kin4stat
15.07.2023, 21:13
я наверное не то чето сказал, поэтому проще будет на примере, мне нужно получить позицию нпс, как это сделать?
CActorPool
CActorPool
Буду очень благодарен, если пример кода скинеш
korsarsan
15.07.2023, 23:44
Имеются проблемы с выводом hp другого персонажа
Вот этот код постоянно выводит значение 1000
C++:
CPed
*
aPed
=
CPools
::
GetPed
(
pSAMP
->
getPlayers
(
)
->
pRemotePlayer
[
iPlayerID
]
->
pPlayerData
->
pSAMP_Actor
->
ulGTAEntityHandle
)
;
float
fbarr
=
aPed
->
m_fHealth
;
А этот код показывает hp не точно, там постоянно меньше чем на самом деле есть, причем как то рандомно, когда hp 100 он покажет 100, но по мере уменьшения оно становится все менее точно.
C++:
float
fHealth
=
pSAMP
->
getPlayers
(
)
->
pRemotePlayer
[
iPlayerID
]
->
pPlayerData
->
fActorHealth
;
Может кто знает как нормально вывести hp другого перса
Вот этот код постоянно выводит значение 1000
C++:
CPed
*
aPed
=
CPools
::
GetPed
(
pSAMP
->
getPlayers
(
)
->
pRemotePlayer
[
iPlayerID
]
->
pPlayerData
->
pSAMP_Actor
->
ulGTAEntityHandle
)
;
float
fbarr
=
aPed
->
m_fHealth
;
так устроен самп. он хранит значения здоровьев в своих пулах
А этот код показывает hp не точно, там постоянно меньше чем на самом деле есть, причем как то рандомно, когда hp 100 он покажет 100, но по мере уменьшения оно становится все менее точно.
C++:
float
fHealth
=
pSAMP
->
getPlayers
(
)
->
pRemotePlayer
[
iPlayerID
]
->
pPlayerData
->
fActorHealth
;
всё дело в том, как калкор хранит значения хп и брони в синхронизации. не исправить
Dark_Syngers
16.07.2023, 05:24
как получить состояние прицела(разширен он или нет.)
ччбчлчлчъ ччччшчьпьппзвжв
16.07.2023, 16:21
C++:
#include
#include
#include
static
HMODULE
(
WINAPI
*
TrueLoadLibrary
)
(
LPCWSTR lpLibFileName
)
=
LoadLibraryW
;
HMODULE WINAPI
DetouredLoadLibrary
(
LPCWSTR lpLibFileName
)
{
HMODULE res
=
TrueLoadLibrary
(
lpLibFileName
)
;
MessageBoxW
(
NULL
,
lpLibFileName
,
L
"Detoured!"
,
MB_OK
|
MB_ICONEXCLAMATION
)
;
return
res
;
}
void
SetGlobalHook
(
)
{
// Получение адреса оригинальной функции LoadLibraryW из kernel32.dll
TrueLoadLibrary
=
reinterpret_cast
(
GetProcAddress
(
GetModuleHandle
(
TEXT
(
"kernel32.dll"
)
)
,
"LoadLibraryW"
)
)
;
// Установка хука
DetourTransactionBegin
(
)
;
DetourUpdateThread
(
GetCurrentThread
(
)
)
;
DetourAttach
(
&
(
PVOID
&
)
TrueLoadLibrary
,
DetouredLoadLibrary
)
;
DetourTransactionCommit
(
)
;
}
// Функция для удаления глобального хука
void
RemoveGlobalHook
(
)
{
// Удаление хука
DetourTransactionBegin
(
)
;
DetourUpdateThread
(
GetCurrentThread
(
)
)
;
DetourDetach
(
&
(
PVOID
&
)
TrueLoadLibrary
,
DetouredLoadLibrary
)
;
DetourTransactionCommit
(
)
;
}
int
main
(
)
{
// Установка глобального хука
SetGlobalHook
(
)
;
// Ждем нажатия клавиши перед удалением хука
std
::
cout
не работает глобально, что не так? есть такая же версия только в формате длл и без
C++:
[CODE]
TrueLoadLibrary
=
reinterpret_cast
(
GetProcAddress
(
GetModuleHandle
(
TEXT
(
"kernel32.dll"
)
)
,
"LoadLibraryW"
)
)
;
и все работает
F0RQU1N and
16.07.2023, 16:47
C++:
#include
#include
#include
static
HMODULE
(
WINAPI
*
TrueLoadLibrary
)
(
LPCWSTR lpLibFileName
)
=
LoadLibraryW
;
HMODULE WINAPI
DetouredLoadLibrary
(
LPCWSTR lpLibFileName
)
{
HMODULE res
=
TrueLoadLibrary
(
lpLibFileName
)
;
MessageBoxW
(
NULL
,
lpLibFileName
,
L
"Detoured!"
,
MB_OK
|
MB_ICONEXCLAMATION
)
;
return
res
;
}
void
SetGlobalHook
(
)
{
// Получение адреса оригинальной функции LoadLibraryW из kernel32.dll
TrueLoadLibrary
=
reinterpret_cast
(
GetProcAddress
(
GetModuleHandle
(
TEXT
(
"kernel32.dll"
)
)
,
"LoadLibraryW"
)
)
;
// Установка хука
DetourTransactionBegin
(
)
;
DetourUpdateThread
(
GetCurrentThread
(
)
)
;
DetourAttach
(
&
(
PVOID
&
)
TrueLoadLibrary
,
DetouredLoadLibrary
)
;
DetourTransactionCommit
(
)
;
}
// Функция для удаления глобального хука
void
RemoveGlobalHook
(
)
{
// Удаление хука
DetourTransactionBegin
(
)
;
DetourUpdateThread
(
GetCurrentThread
(
)
)
;
DetourDetach
(
&
(
PVOID
&
)
TrueLoadLibrary
,
DetouredLoadLibrary
)
;
DetourTransactionCommit
(
)
;
}
int
main
(
)
{
// Установка глобального хука
SetGlobalHook
(
)
;
// Ждем нажатия клавиши перед удалением хука
std
::
cout
(
GetProcAddress
(
GetModuleHandle
(
TEXT
(
"kernel32.dll"
)
)
,
"LoadLibraryW"
)
)
;
и все работает
а в чем смысл? ты же в своем приложении хукаешь
ччбчлчлчъ ччччшчьпьппзвжв
16.07.2023, 16:52
а в чем смысл? ты же в своем приложении хукаешь
я хочу глобально хукать функцию LoadLibraryW
F0RQU1N and
16.07.2023, 16:58
я хочу глобально хукать функцию LoadLibraryW
драйвер делай тогда
Как получить указатель на CCamera в p-sdk
AdCKuY_DpO4uLa
18.07.2023, 12:22
Как получить указатель на CCamera в p-sdk
TheCamera
Как через plugin sdk + sampapi от blast.hk отправить нажатие\зажатие кнопки в игру, через стандартные C++ штучки по типу sendimput keybd персонаж ходит но не обрабатывает нажатие на e ( Использовать )
reussssya
19.07.2023, 23:06
Как через plugin sdk + sampapi от blast.hk отправить нажатие\зажатие кнопки в игру, через стандартные C++ штучки по типу sendimput keybd персонаж ходит но не обрабатывает нажатие на e ( Использовать )
while(!GetAsyncKeyState(ид клавишы))
while(!GetAsyncKeyState(ид клавишы))
Вопрос все еще актуален 0.o
reussssya
20.07.2023, 21:42
Вопрос все еще актуален 0.o
Вопрос все еще актуален 0.o
только сейчас понял, что за ***ню я написал
korsarsan
22.07.2023, 20:10
Вопрос знат0кам imgui
После запуска компа, и первого запуска сампа вылетает эта ошибка
C++:
ImGuiStyle
&
ImGui
::
GetStyle
(
)
{
IM_ASSERT
(
GImGui
!=
NULL
&&
"No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?"
)
;
//
Style
;
}
И конечно же стиль не подгружается, но на второй запуск сампа и дальнейшие ошибка больше не вылезает и стиль нормально грузится
Кто знает че за магия ? )
AdCKuY_DpO4uLa
22.07.2023, 20:35
Вопрос знат0кам imgui
После запуска компа, и первого запуска сампа вылетает эта ошибка
C++:
ImGuiStyle
&
ImGui
::
GetStyle
(
)
{
IM_ASSERT
(
GImGui
!=
NULL
&&
"No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?"
)
;
//
Style
;
}
И конечно же стиль не подгружается, но на второй запуск сампа и дальнейшие ошибка больше не вылезает и стиль нормально грузится
Кто знает че за магия ? )
Вероятнее всего ты не вызываешь ImGui::CreateContext(); при инициализации.
Если же ты вызываешь эту функцию, то можешь отключить ассерты имгуи в настройках (imconfig.h) для этого нужно раскомментировать строчку
//#define IM_ASSERT(_EXPR) ((void)(_EXPR))
Вопрос знатокам сф апи 551
Как сделать антиафк? (Включение/отключение плагином)
F0RQU1N and
28.07.2023, 04:35
Вопрос знатокам сф апи 551
Как сделать антиафк? (Включение/отключение плагином)
C++:
#include
#include "SAMPFUNCS_API.h"
#include "game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
bool
bafk
=
false
,
init
=
false
;
void
__stdcall
mainloop
(
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
&&
!
init
)
{
SF
->
getSAMP
(
)
->
registerChatCommand
(
"afk"
,
[
]
(
std
::
string params
)
{
bafk
^=
true
;
*
(
std
::
uint8_t
*
)
0x747FB6
=
bafk
;
*
(
std
::
uint8_t
*
)
0x74805A
=
bafk
;
std
::
memcpy
(
(
void
*
)
0x74542B
,
bafk
?
"\x90\x90\x90\x90\x90\x90\x90\x90"
:
"\x50\x51\xFF\x15\x00\x83\x85\x00"
,
8
)
;
std
::
memcpy
(
(
void
*
)
0x53EA88
,
bafk
?
"\x90\x90\x90\x90\x90\x90"
:
"\x0F\x84\x7B\x01\x00\x00"
,
6
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
0xFFFFFFFFF
,
std
::
to_string
(
bafk
)
.
c_str
(
)
)
;
}
)
;
init
=
true
;
}
}
bool
__stdcall
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
void
*
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
true
;
}
адреса для патчей ес чо отсюда (https://www.blast.hk/threads/13380/post-205858) взял
Вероятнее всего ты не вызываешь ImGui::CreateContext(); при инициализации.
Если же ты вызываешь эту функцию, то можешь отключить ассерты имгуи в настройках (imconfig.h) для этого нужно раскомментировать строчку
//#define IM_ASSERT(_EXPR) ((void)(_EXPR))
всмысле, че за ***ню ты советуешь? зачем отключать ассерты там же дальше чтение идет GImGui->Style и просто крашить будет
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot