
13.10.2024, 18:19
|
|
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами:
2055431
Репутация:
3
|
|
Сообщение от NOOBDEV
Всем привет! Подскажите пожалуйста, пишу 1 плагин и пытаюсь разобраться с чего начать.
Ссылка на готовый проект с плагином ASI: https://www.blast.hk/threads/219800/
Взял за основу его. Что делать дальше не пойму.
Как обратиться к адресам и заменить их на свое, и чтобы игра закрывалась если не совпадает ип
Я так понял это момент подключения серверу, как сделать чтобы вместо SAMP Started - писало мой текст, видел украинский исходник асишник, но не получается его запустить
Для начала укажи, под какую версию сампа ты делаешь плагин (можно и под несколько, но если делаешь клиент проекта, то зачастую лучше остановиться на 1, ибо расширение функционала будет боль)
Чтобы заменить надпись в чате, тебе надо найти, где samp.dll берет указатель на эту надпись. На R3 это 0xB7C5 (команда push состоит из 5 байт, первый обозначает саму команду, а остальные адрес строки, поэтому 0xB7C4 + 0x1)1728827852170.pngвайега52 · 13 Окт 2024 в 17:19' data-fancybox="lb-post-1548675" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/254083/" style="cursor: pointer;" title="1728827852170.png">

Для работы с памятью я буду использовать memwrapper:
C++:
Код:
// будем использовать функцию, которая будет копировать строку из плагина в адресное пространство gta_sa.exe
// это поможет в случае выгрузки плагина не крашнуть игру
void
write_allocate_string
(
std
::
string str
,
std
::
uintptr_t address
)
{
void
*
allocAddress
=
VirtualAlloc
(
nullptr
,
str
.
size
(
)
,
MEM_COMMIT
,
PAGE_READWRITE
)
;
memcpy
(
allocAddress
,
str
.
c_str
(
)
,
str
.
size
(
)
)
;
// при этом, нам никто не мешает использовать сразу запись по адресу нашей строки, находящейся внутри памяти нашего плагина
memwrapper
::
write_memory
(
address
,
allocAddress
)
;
}
auto
samp_base
=
reinterpret_cast
(
GetModuleHandleA
(
"samp.dll"
)
)
;
write_allocate_string
(
samp_base
+
0xB7C5
,
"Моя *****тая надпись1336"
)
;
Для проверки на айпи сервера тебе надо ставить хук на какую-то из функций сампа, отвечающую за коннект, к примеру RakClient::Connect (r3: 0x339F0). Для этого можешь использовать библиотеки по типу kthook
|
|
|