Просмотр полной версии : С/С++ Вопрос - Ответ
BlackKnigga
28.03.2018, 14:10
Assembler - Делаем инжект в функцию(https://blast.hk/threads/2370/) (https://blast.hk/threads/2370/)
ShapeGaz
28.03.2018, 14:36
Assembler - Делаем инжект в функцию(https://blast.hk/threads/2370/) (https://blast.hk/threads/2370/)
Это единственный способ? И откуда взять dwSAMP?
откуда взять dwSAMP?
Это базовый адрес samp.dll
ShapeGaz
28.03.2018, 15:20
Это базовый адрес samp.dll
Там вроде описываются только функции клиента, а как быть с сервером? И где взять этот базовый адрес?
Там вроде описываются только функции клиента, а как быть с сервером?
Сервер отправил инфу - клиент выполнил ее.
И где взять этот базовый адрес?
Загугли getModuleBaseAddress
Mike Ferdinant
28.03.2018, 23:57
Всем привет ребята, у меня такая проблема может кто-то сможет помочь: В общем сделал бота на стройку RP BOX MTA по чек пойнтам, все работает НО часто бывает такое что меня перекидывает через пол карты на другой чекпойнт вообще либо на автомастрерскую либо в какой-то подъезд где продаются квартиры, и приходиться телепортироваться на стройку отключаться от сервера заного подключаться устраиваться на стройку для того что бы обновились координаты чек пойнта, и работает мешков 40 принесет и опять скачет по чек пойнтам и причем на стройке красные чек пойнты а он телепортируеться на зеленые и на белые, я искал в ReClass'e чекпойнты все перерыл подошел только этот с которым в данный момент проблема , и вот к сути вопроса как мне можно сделать типо что -то радиуса что бы он не телепортировался за пол карты на другой чек пойнт а только по этим прыгал, если кто-то может помочь помогите пожалуйста , вот Void в котором действия телепорта на чекпойнт:
Код:
void cords()
{
for (;; Sleep(5))
{
if (bot == 1)
{
mPlayer->PlayerCondition->PlayerCoordinats->Coord_X = bCord->BotX;
mPlayer->PlayerCondition->PlayerCoordinats->Coord_Y = bCord->BotY;
mPlayer->PlayerCondition->PlayerCoordinats->Coord_Z = bCord->BotZ + 1.f;
Sleep(800);
mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTD OWN, x, y, 0, 0);
}
if (GetAsyncKeyState(VK_F9))
{
bot = 1;
}
if (GetAsyncKeyState(VK_F10))
{
bot = 0;
mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTU P, x, y, 0, 0);
}
}
}
CleanLegend
29.03.2018, 00:15
Всем привет ребята, у меня такая проблема может кто-то сможет помочь: В общем сделал бота на стройку RP BOX MTA по чек пойнтам, все работает НО часто бывает такое что меня перекидывает через пол карты на другой чекпойнт вообще либо на автомастрерскую либо в какой-то подъезд где продаются квартиры, и приходиться телепортироваться на стройку отключаться от сервера заного подключаться устраиваться на стройку для того что бы обновились координаты чек пойнта, и работает мешков 40 принесет и опять скачет по чек пойнтам и причем на стройке красные чек пойнты а он телепортируеться на зеленые и на белые, я искал в ReClass'e чекпойнты все перерыл подошел только этот с которым в данный момент проблема , и вот к сути вопроса как мне можно сделать типо что -то радиуса что бы он не телепортировался за пол карты на другой чек пойнт а только по этим прыгал, если кто-то может помочь помогите пожалуйста , вот Void в котором действия телепорта на чекпойнт:
Проверяй дистанцию между игроком и чекпоинтом
Mike Ferdinant
29.03.2018, 00:30
Проверяй дистанцию между игроком и чекпоинтом
а каким образом? там в на самой работе пишет дистанцию до 35 метров вроде как я помню, я просто не понимаю как сделать это все
CleanLegend
29.03.2018, 00:37
а каким образом? там в на самой работе пишет дистанцию до 35 метров вроде как я помню, я просто не понимаю как сделать это все
Для получения дистанции тебе нужно знать свои кординаты и кординатые чекпоинта X,Y,Z.
Далее по формуле: Dist = √(xb - xa)*2 + (yb - ya)*2 + (zb - za)*2
где xa - твои кординаты по X и xb кординаты чекпоинта.
Подробнее можешь найти в интернете по поиску: нахождение дистанции между двумя точками
Mike Ferdinant
29.03.2018, 00:45
Для получения дистанции тебе нужно знать свои кординаты и кординатые чекпоинта X,Y,Z.
Далее по формуле: Dist = √(xb - xa)*2 + (yb - ya)*2 + (zb - za)*2
где xa - твои кординаты по X и xb кординаты чекпоинта.
Подробнее можешь найти в интернете по поиску: нахождение дистанции между двумя точками
ох ну там чепойнтов 50 наверное они денамические возле каждого мешка чекпойнт появляется а мешков там ну может штук 200 видемо столько и чек пойнтов) что мне в этом случае делать?
CleanLegend
29.03.2018, 01:27
ох ну там чепойнтов 50 наверное они денамические возле каждого мешка чекпойнт появляется а мешков там ну может штук 200 видемо столько и чек пойнтов) что мне в этом случае делать?
Через цикл получать кординаты и считать дистанцию
Mike Ferdinant
29.03.2018, 01:33
Через цикл получать кординаты и считать дистанцию
а можно пожалуйста пример? вон там выше мой код можете помочь? вот только что снял видео может оно поможет прояснить ситуацию 3-х минутный ролик посмотрите пожалуйста до конца и вы поймете суть вопроса в чем проблема т.д какие чек пойнты вот ссылка на видео:
CleanLegend
29.03.2018, 17:50
а можно пожалуйста пример? вон там выше мой код можете помочь? вот только что снял видео может оно поможет прояснить ситуацию 3-х минутный ролик посмотрите пожалуйста до конца и вы поймете суть вопроса в чем проблема т.д какие чек пойнты вот ссылка на видео:
Посмотри примеры поиска игроков из собейта.
C++:
[CODE]
for
(
int
i
=
0
;
i
MAX_CHECK - максимальное кол-во чекпоинтов
vegasjeny
30.03.2018, 17:17
а можно пожалуйста пример? вон там выше мой код можете помочь? вот только что снял видео может оно поможет прояснить ситуацию 3-х минутный ролик посмотрите пожалуйста до конца и вы поймете суть вопроса в чем проблема т.д какие чек пойнты вот ссылка на видео:
как ты обошел AC мта, можешь в лс отписать, если не секрет?)
Gromov512
31.03.2018, 07:30
Помогите сделать коордмастер по координатам
Как можно узнать на какие клавиши нажал игрок?
BlackKnigga
01.04.2018, 20:31
Как можно узнать на какие клавиши нажал игрок?
GetASyncKeyState, wnd proc
DarkP1xel
01.04.2018, 20:36
Как можно узнать на какие клавиши нажал игрок?
CKeyGen::GetKey 0x53CF00
Mike Ferdinant
07.04.2018, 02:37
Ребята подскажите как сделать что бы во время телепорта по чек пойнтам игрок стоял на месте , помню пользовался как-то давно таким ботом в сампе, и вот мне тоже понадобилась такая функция
randazzo
07.04.2018, 14:02
Ребята подскажите как сделать что бы во время телепорта по чек пойнтам игрок стоял на месте , помню пользовался как-то давно таким ботом в сампе, и вот мне тоже понадобилась такая функция
Информация - [SF] Полезные функции(https://blast.hk/threads/10970/#post-96186) (https://blast.hk/threads/10970/#post-96186)
Как можно узнать ник игрока, не изменённый через SetLocalPlayerName(). То есть, настоящий ник.
CleanLegend
10.04.2018, 02:12
Как можно узнать ник игрока, не изменённый через SetLocalPlayerName(). То есть, настоящий ник.
Можешь записывать оригинальный ник при заходе или перед использованием SetLocalPlayerName().
Можешь записывать оригинальный ник при заходе или перед использованием SetLocalPlayerName().
А если плагин будет запущен уже после захода?
Как сделать таймер в CALLBACK cmd?
Как установить иммунитеты игроку?
Через структуру педа
Имеется ли возможность узнать точное московское время? (Не компьютерное...)
Если только через запросы, то посоветуйте статью про curl для SF
Vlad Horii
10.04.2018, 17:36
Имеется ли возможность узнать точное московское время? (Не компьютерное...)
Если только через запросы, то посоветуйте статью про curl для SF
C++:
InternetOpen
InternetConnect
HttpOpenRequest
HttpSendRequest
InternetReadFile
InternetCloseHandle
Каким образом можно подключить ImGui в проект SF?
Пытался по этому примеру, не помогает.
C++:
[CODE]
// ImGui - null/dummy example application (compile and link imgui with no inputs, no outputs)
#include "imgui.h"
#include
int
main
(
int
,
char
*
*
)
{
ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
// Build atlas
unsigned
char
*
tex_pixels
=
NULL
;
int
tex_w
,
tex_h
;
io
.
Fonts
->
GetTexDataAsRGBA32
(
&
tex_pixels
,
&
tex_w
,
&
tex_h
)
;
for
(
int
n
=
0
;
n
[QUOTE="๖ۣۣۜШурик"]
Каким образом можно подключить ImGui в проект SF?
Пытался по этому примеру, не помогает.
C++:
[CODE]
// ImGui - null/dummy example application (compile and link imgui with no inputs, no outputs)
#include "imgui.h"
#include
int
main
(
int
,
char
*
*
)
{
ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
// Build atlas
unsigned
char
*
tex_pixels
=
NULL
;
int
tex_w
,
tex_h
;
io
.
Fonts
->
GetTexDataAsRGBA32
(
&
tex_pixels
,
&
tex_w
,
&
tex_h
)
;
for
(
int
n
=
0
;
n
(https://blast.hk/threads/15155/)[/URL]
Эксклюзив - Исходник - Софт - [REL]ImGUI API for SAMPFUNCS(https://blast.hk/threads/15155/) (https://blast.hk/threads/15155/)
не, не, не. Дополнительных файлов мне не надо.
Vlad Horii
11.04.2018, 17:45
не, не, не. Дополнительных файлов мне не надо.
от этого же автора ищи без дополнительных файлов. Кнопка "поиск" в помощь.
Не могу вот настроить кодировку в проекте с ImGUI, использую эти функции, но ничего не помогает...
C++:
string
to_utf8
(
const
char
*
str
)
{
string res
;
int
result_u
,
result_c
;
result_u
=
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
0
,
0
)
;
if
(
!
result_u
)
return
0
;
wchar_t
*
ures
=
new
wchar_t
[
result_u
]
;
if
(
!
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
ures
,
result_u
)
)
{
delete
[
]
ures
;
return
0
;
}
result_c
=
WideCharToMultiByte
(
CP_UTF8
,
0
,
ures
,
-
1
,
0
,
0
,
0
,
0
)
;
if
(
!
result_c
)
{
delete
[
]
ures
;
return
0
;
}
char
*
cres
=
new
char
[
result_c
]
;
if
(
!
WideCharToMultiByte
(
CP_UTF8
,
0
,
ures
,
-
1
,
cres
,
result_c
,
0
,
0
)
)
{
delete
[
]
cres
;
return
0
;
}
delete
[
]
ures
;
res
.
append
(
cres
)
;
delete
[
]
cres
;
return
res
;
}
string
to_cp1251
(
const
char
*
str
)
{
string res
;
int
result_u
,
result_c
;
result_u
=
MultiByteToWideChar
(
CP_UTF8
,
0
,
str
,
-
1
,
0
,
0
)
;
if
(
!
result_u
)
return
string
(
)
;
wchar_t
*
ures
=
new
wchar_t
[
result_u
]
;
if
(
!
MultiByteToWideChar
(
CP_UTF8
,
0
,
str
,
-
1
,
ures
,
result_u
)
)
{
delete
[
]
ures
;
return
0
;
}
result_c
=
WideCharToMultiByte
(
1251
,
0
,
ures
,
-
1
,
0
,
0
,
0
,
0
)
;
if
(
!
result_c
)
{
delete
[
]
ures
;
return
0
;
}
char
*
cres
=
new
char
[
result_c
]
;
if
(
!
WideCharToMultiByte
(
1251
,
0
,
ures
,
-
1
,
cres
,
result_c
,
0
,
0
)
)
{
delete
[
]
cres
;
return
0
;
}
delete
[
]
ures
;
res
.
append
(
cres
)
;
delete
[
]
cres
;
return
res
;
}
BlackKnigga
12.04.2018, 16:39
Не могу вот настроить кодировку в проекте с ImGUI, использую эти функции, но ничего не помогает...
C++:
string
to_utf8
(
const
char
*
str
)
{
string res
;
int
result_u
,
result_c
;
result_u
=
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
0
,
0
)
;
if
(
!
result_u
)
return
0
;
wchar_t
*
ures
=
new
wchar_t
[
result_u
]
;
if
(
!
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
ures
,
result_u
)
)
{
delete
[
]
ures
;
return
0
;
}
result_c
=
WideCharToMultiByte
(
CP_UTF8
,
0
,
ures
,
-
1
,
0
,
0
,
0
,
0
)
;
if
(
!
result_c
)
{
delete
[
]
ures
;
return
0
;
}
char
*
cres
=
new
char
[
result_c
]
;
if
(
!
WideCharToMultiByte
(
CP_UTF8
,
0
,
ures
,
-
1
,
cres
,
result_c
,
0
,
0
)
)
{
delete
[
]
cres
;
return
0
;
}
delete
[
]
ures
;
res
.
append
(
cres
)
;
delete
[
]
cres
;
return
res
;
}
string
to_cp1251
(
const
char
*
str
)
{
string res
;
int
result_u
,
result_c
;
result_u
=
MultiByteToWideChar
(
CP_UTF8
,
0
,
str
,
-
1
,
0
,
0
)
;
if
(
!
result_u
)
return
string
(
)
;
wchar_t
*
ures
=
new
wchar_t
[
result_u
]
;
if
(
!
MultiByteToWideChar
(
CP_UTF8
,
0
,
str
,
-
1
,
ures
,
result_u
)
)
{
delete
[
]
ures
;
return
0
;
}
result_c
=
WideCharToMultiByte
(
1251
,
0
,
ures
,
-
1
,
0
,
0
,
0
,
0
)
;
if
(
!
result_c
)
{
delete
[
]
ures
;
return
0
;
}
char
*
cres
=
new
char
[
result_c
]
;
if
(
!
WideCharToMultiByte
(
1251
,
0
,
ures
,
-
1
,
cres
,
result_c
,
0
,
0
)
)
{
delete
[
]
cres
;
return
0
;
}
delete
[
]
ures
;
res
.
append
(
cres
)
;
delete
[
]
cres
;
return
res
;
}
ImGui::Text(to_utf8("Какие проблемы?").c_str())
Ну и шрифт надо грузить с кириллицей
ImGui::Text(to_utf8("Какие проблемы?").c_str())
Ну и шрифт надо грузить с кириллицей
Вот про шрифт надо будет протестить, а вот to_utf8("Привет").c_str() - делал, не работало.
Vlad Horii
12.04.2018, 16:53
Вот про шрифт надо будет протестить, а вот to_utf8("Привет").c_str() - делал, не работало.
C++:
ImGui
::
GetIO
(
)
.
Fonts
->
AddFontFromFileTTF
(
"C:\\Windows\\Fonts\\trebuc.ttf"
,
16.0f
,
NULL
,
ImGui
::
GetIO
(
)
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
Перед init = true;
Прошу помощи.
Мне нужно найти адрес EndScene из d3d9.dll сканером сигнатур, паттерн и маска известны.
Вот сам код:
C++:
[CODE]
#include
#include
#pragma warning(disable:4996)
DWORD
FindPattern
(
HMODULE hModule
,
char
*
szPattern
,
char
*
szMask
)
{
MODULEINFO mInfo
=
{
}
;
GetModuleInformation
(
GetCurrentProcess
(
)
,
hModule
,
&
mInfo
,
sizeof
(
MODULEINFO
)
)
;
DWORD dwBase
=
(
DWORD
)
mInfo
.
lpBaseOfDll
;
DWORD dwSize
=
(
DWORD
)
mInfo
.
SizeOfImage
;
DWORD dwPatternLength
=
(
DWORD
)
strlen
(
szMask
)
;
for
(
DWORD i
=
0
;
i
Объясню че делает:
1) в dllmain'e создается новый поток "Thread"
2) в потоке "Thread" я получаю модуль d3d9.dll, если его нету вывожу сообщение о его отсутствии
3) если модуль d3d9.dll успешно получен - сканером сигнатур получаю адрес EndScene и вывожу его адрес в HEX'e
Сама проблема:
Если я инжекчу мою длл в тестовое приложение win32, там где нихуя нету, то я увижу это(нормальный адрес EndScene, проблем нет)
https://i.imgur.com/vmVplmF.png
Че я увижу если перейду по этому адресу в откладчике:
https://i.imgur.com/aAOzR6O.png
Вроде бы все заебись, продолжаем.
Закрываем тестовое приложение, открываем SA:MP, инжектим заного ту же DLL уже в самп.
Что я вижу при инжекте:
https://i.imgur.com/uVpYa9c.png
Что это значит?
Это значит то, что модуль d3d9.dll найден, но сканер сигнатур не находит нужный адрес.
Снова перейдем в откладчик, по тому адресу, который мы получили в прошлый раз:
https://i.imgur.com/wswOJzo.png
Мы видим точно ту же картину, что и тогда.
Точно таким же образом я пытался инжектить эту длл в совершенно разные процессы, и там, где был модуль d3d9.dll - везде находило нормальный адрес.
Почему же в сампе это не работает?:thinking:
BlackKnigga
15.04.2018, 01:34
[QUOTE="_Vine_"]
Прошу помощи.
Мне нужно найти адрес EndScene из d3d9.dll сканером сигнатур, паттерн и маска известны.
Вот сам код:
C++:
[CODE]
#include
#include
#pragma warning(disable:4996)
DWORD
FindPattern
(
HMODULE hModule
,
char
*
szPattern
,
char
*
szMask
)
{
MODULEINFO mInfo
=
{
}
;
GetModuleInformation
(
GetCurrentProcess
(
)
,
hModule
,
&
mInfo
,
sizeof
(
MODULEINFO
)
)
;
DWORD dwBase
=
(
DWORD
)
mInfo
.
lpBaseOfDll
;
DWORD dwSize
=
(
DWORD
)
mInfo
.
SizeOfImage
;
DWORD dwPatternLength
=
(
DWORD
)
strlen
(
szMask
)
;
for
(
DWORD i
=
0
;
i
Убери собейт
Спасибо, помогло, но полностью это проблему не решает, почему с собейтом это не работает и как это исправить?
NarutoUA
15.04.2018, 02:33
Спасибо, помогло, но полностью это проблему не решает, почему с собейтом это не работает и как это исправить?
потому что собейт заменяет d3d9 либу и твои сигнатуры там не работают
потому что собейт заменяет d3d9 либу и твои сигнатуры там не работают
Сканер сигнатур ищет сигнатуру во всем модуле, и она там есть, даже в замененном собейтовском d3d9, я кидал скрин с дебаггера, разве не так?
Допиши перед названием длл путь к систем32
BlackKnigga
15.04.2018, 09:00
Спасибо, помогло, но полностью это проблему не решает, почему с собейтом это не работает и как это исправить?
Зачем вообще что то искать? Есть статический указатель на девайс, поищи в гугле
Допиши перед названием длл путь к систем32
круто, спасибо, все работает
Зачем вообще что то искать? Есть статический указатель на девайс, поищи в гугле
не нашел ничего, если есть - можно ссылоку?
CleanLegend
15.04.2018, 12:14
не нашел ничего, если есть - можно ссылоку?
0xC97C28
Как можно вызвать функцию при выключении плагина/выходе из игры
BlackKnigga
15.04.2018, 22:08
Как можно вызвать функцию при выключении плагина/выходе из игры
DLL_PROCESS_DETACH
Dark_Knight
16.04.2018, 00:35
DLL_PROCESS_DETACH
Для СФ это не подойдет. Так же в DLL_PROCESS_DETACH надо делать валидность на плагин.
DarkP1xel
16.04.2018, 00:37
Для СФ это не подойдет. Так же в DLL_PROCESS_DETACH надо делать валидность на плагин.
А причём тут SF?
Как найти указатель на d3dDevice игры?
Искать указатель нужно самому, не используя известного, статического указателя.
Как находили статический указатель на D3DDevice GTA 0xC97C28 и как его можно найти самому для другой игры?
Заранее спасибо за помощь:)
-raymond-
22.04.2018, 16:21
при компилировании
https://i.imgur.com/J9wPgjY.png
CleanLegend
22.04.2018, 16:27
при компилировании
https://i.imgur.com/J9wPgjY.png
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
-raymond-
22.04.2018, 16:30
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
то же самое
Вставил перед инклудами - сработало, спасибо
Может кто помочь с подключением ImGui последней версии? Пользовался данным (https://blast.hk/threads/12387/) проектом, но тут большинства функций нет.
NarutoUA
22.04.2018, 20:47
Как найти указатель на d3dDevice игры?
Искать указатель нужно самому, не используя известного, статического указателя.
Как находили статический указатель на D3DDevice GTA 0xC97C28 и как его можно найти самому для другой игры?
Заранее спасибо за помощь:)
не обезательно что указатель будет статичный для другой игры (он может лежать в динамическом обьекте класса). Можно найти указатель на IDirect3D9 (он создаётся через импортированую Direct3DCreate9 функцию, потом запилить для неё прокси-интерфейс и найти где CreateDevice
Dark_Knight
22.04.2018, 21:41
Может кто помочь с подключением ImGui последней версии? Пользовался данным (https://blast.hk/threads/12387/) проектом, но тут большинства функций нет.
Каких же?
Каких же?
Для примера:
Код:
IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); // new, recommended style
IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); // old, classic imgui style (default)
IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); // best used with borders and a custom, thicker font
Dark_Knight
23.04.2018, 09:32
Для примера:
Код:
IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); // new, recommended style
IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); // old, classic imgui style (default)
IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); // best used with borders and a custom, thicker font
Ну так версия же старая. 1.43 кажется. Стукни в скайп. Скину проект свой который, который уже настроен. Только его надо обновить до 1,60.
Dark_Knight
23.04.2018, 20:20
СPed + TargetOffset. Уже отвечали на этот вопрос.
SAMP.ASI
24.04.2018, 17:00
Как получить id игрока в которого я целюсь? ( sf api )
CleanLegend
24.04.2018, 17:05
Как получить id игрока в которого я целюсь? ( sf api )
Через зеленый треугольник - SF->getSAMP()->getPlayers()->pLocalPlayer->sAimingAtPid
или с помощью этой функции - Информация - [SF] Полезные функции(https://blast.hk/threads/10970/#post-124093) (https://blast.hk/threads/10970/#post-124093)
Может кто помочь с подключением ImGui последней версии? Пользовался данным (https://blast.hk/threads/12387/) проектом, но тут большинства функций нет.
Актуально, нужна помощь :(
CleanLegend
24.04.2018, 20:32
Актуально, нужна помощь :(
Хукаешь present, reset,wnd_proc.
Если ты это хочешь сделать с помощью SF, то регаешь callback на present,reset.
Проводишь инициализацию в present с помощь imgui_init,в ресет добавляешь перезагрузку, в wndproc ImGui_ImplDX9_WndProcHandler.
В проекте достаточно, что бы все это сделать.
В чём проблема? Не грузит весь список (1-2 элемента только)
C++:
static
int
fraction_current
=
fraction
;
const
char
*
fractionList
[
]
=
{
to_utf8
(
"Не выбрано"
)
.
c_str
(
)
,
to_utf8
(
"Полиция г.Los-Santos"
)
.
c_str
(
)
,
to_utf8
(
"Полиция г.San-Fierro"
)
.
c_str
(
)
,
to_utf8
(
"Полиция г.Las-Venturas"
)
.
c_str
(
)
,
to_utf8
(
"Федеральное Бюро Расследований"
)
.
c_str
(
)
}
;
if
(
ImGui
::
Combo
(
"fraction"
,
&
fraction_current
,
fractionList
,
IM_ARRAYSIZE
(
fractionList
)
)
)
fraction
=
fraction_current
;
В чём проблема? Не грузит весь список (1-2 элемента только)
C++:
static
int
fraction_current
=
fraction
;
const
char
*
fractionList
[
]
=
{
to_utf8
(
"Не выбрано"
)
.
c_str
(
)
,
to_utf8
(
"Полиция г.Los-Santos"
)
.
c_str
(
)
,
to_utf8
(
"Полиция г.San-Fierro"
)
.
c_str
(
)
,
to_utf8
(
"Полиция г.Las-Venturas"
)
.
c_str
(
)
,
to_utf8
(
"Федеральное Бюро Расследований"
)
.
c_str
(
)
}
;
if
(
ImGui
::
Combo
(
"fraction"
,
&
fraction_current
,
fractionList
,
IM_ARRAYSIZE
(
fractionList
)
)
)
fraction
=
fraction_current
;
ocornut/imgui(https://github.com/ocornut/imgui/blob/master/imgui_demo.cpp) (https://github.com/ocornut/imgui/blob/master/imgui_demo.cpp)
В imgui_demo.cpp с помощью поиска ищещь Imgui::Combo и смотришь как правильно его юзать.
Хукаешь present, reset,wnd_proc.
Если ты это хочешь сделать с помощью SF, то регаешь callback на present,reset.
Проводишь инициализацию в present с помощь imgui_init,в ресет добавляешь перезагрузку, в wndproc ImGui_ImplDX9_WndProcHandler.
В проекте достаточно, что бы все это сделать.
Делал такую штуку без СФ апи, проблема в том, что если в игру будет загружено два плагина с подрбным хуком пресент и ресет - краш.
Хук через виртуальную таблицу методов. С чем может быть связан краш, как исправить?
И еще, можно ли искать d3dDevice гташки с помощью сигнатуры?(не надо писать, что есть статик. Указатель)
Сигратура будет работаь в разных версиях гта, отличается ли сигнатура в одиночной игре и в сампе?
ocornut/imgui(https://github.com/ocornut/imgui/blob/master/imgui_demo.cpp) (https://github.com/ocornut/imgui/blob/master/imgui_demo.cpp)
В imgui_demo.cpp с помощью поиска ищещь Imgui::Combo и смотришь как правильно его юзать.
Изначально делал строго по примеру и не получалось, вот и обратился сюда.
Изначально делал строго по примеру и не получалось, вот и обратился сюда.
C++:
static
int
fraction_current
=
0
;
const
char
*
list
=
{
u8
"Не выбрано\0"
u8
"Полиция г.Los-Santos\0"
u8
"Полиция г.San-Fierro\0"
u8
"Полиция г.Las-Venturas\0"
u8
"Федеральное Бюро Расследований\0"
}
;
ImGui
::
Combo
(
u8
"Фракция"
,
&
fraction_current
,
list
,
sizeof
(
list
)
)
;
CleanLegend
28.04.2018, 21:18
Делал такую штуку без СФ апи, проблема в том, что если в игру будет загружено два плагина с подрбным хуком пресент и ресет - краш.
Хук через виртуальную таблицу методов. С чем может быть связан краш, как исправить?
И еще, можно ли искать d3dDevice гташки с помощью сигнатуры?(не надо писать, что есть статик. Указатель)
Сигратура будет работаь в разных версиях гта, отличается ли сигнатура в одиночной игре и в сампе?
Попробуй другой метод хука. Насчет поиска device, можешь посмотреть как в собейте это реализуется или через findpattern
SAMP.ASI
28.04.2018, 22:00
Решил перевести из lua в с++
C:
#include
#include
#include
using namespace std
;
DWORD pid
;
DWORD ped
=
0xb6f5f0
;
DWORD p_target
;
DWORD p_player
;
DWORD test
;
DWORD intS
;
int
main
(
)
{
HWND hWnd
=
FindWindowA
(
0
,
"GTA:SA:MP"
)
;
GetWindowThreadProcessId
(
hWnd
,
&
pid
)
;
HANDLE pHandle
=
OpenProcess
(
PROCESS_VM_READ
,
FALSE
,
pid
)
;
HANDLE pwHandle
=
OpenProcess
(
PROCESS_VM_WRITE
,
FALSE
,
pid
)
;
//ReadProcessMemory(pHandle, (LPVOID)0xb6f5f0, &p_player, 4, 0);
while
(
true
)
{
Sleep
(
500
)
;
ReadProcessMemory
(
pHandle
,
(
LPVOID
)
(
0xB6F3B8
)
,
&
p_player
,
4
,
0
)
;
p_player
=
p_player
+
0x79C
;
ReadProcessMemory
(
pHandle
,
(
LPVOID
)
p_player
,
&
intS
,
4
,
0
)
;
if
(
intS
>
0
)
{
DWORD lol
=
0xB73458
;
lol
=
lol
+
34
;
int
temp
=
255
;
WriteProcessMemory
(
pwHandle
,
(
LPVOID
)
lol
,
&
temp
,
4
,
0
)
;
Sleep
(
100
)
;
DWORD inet
;
ReadProcessMemory
(
pHandle
,
(
LPVOID
)
0xB6F3B8
,
&
inet
,
4
,
0
)
;
inet
=
inet
+
0x79C
;
DWORD temp2
=
0
;
WriteProcessMemory
(
pwHandle
,
(
LPVOID
)
inet
,
&
temp2
,
4
,
0
)
;
}
}
return
0
;
}
Из этого
Lua:
script_name
(
"Trigger Bot"
)
script_author
(
"iTz_WEEZY"
)
script_dependencies
(
"SAMP"
)
require
"lib.moonloader"
local
trigger
=
false
function
main
(
)
if
not
isSampLoaded
(
)
and
isSampAvailable
(
)
then
return
end
sampRegisterChatCommand
(
"trigger"
,
activ
)
while
true
do
wait
(
0
)
if
trigger
and
not
isCharOnAnyBike
(
playerPed
)
and
not
isCharDead
(
playerPed
)
then
local
int
=
readMemory
(
0xB6F3B8
,
4
,
0
)
int
=
int
+
0x79C
local
intS
=
readMemory
(
int
,
4
,
0
)
if
intS
>
0
then
local
lol
=
0xB73458
lol
=
lol
+
34
writeMemory
(
lol
,
4
,
255
,
0
)
wait
(
100
)
local
int
=
readMemory
(
0xB6F3B8
,
4
,
0
)
int
=
int
+
0x79C
writeMemory
(
int
,
4
,
0
,
0
)
end
end
end
end
function
activ
(
)
if
trigger
then
trigger
=
false
else
trigger
=
true
end
end
Что я делаю не так?
Есть ли в SAMPFUNCS, что-то по типу такого
iAmerican
29.04.2018, 15:41
Есть ли в SAMPFUNCS, что-то по типу такого
C++:
void
GameText
(
const
char
*
szText
,
int
iTime
,
signed
int
iStyle
)
{
typedef
void
(
__stdcall
*
GameText_t
)
(
const
char
*
,
int
,
signed
int
)
;
GameText_t pGameText
=
(
GameText_t
)
(
g_dwSAMP
+
0x9C2C0
)
;
return
pGameText
(
szText
,
iTime
,
iStyle
)
;
}
using
:
GameText
(
"~r~my text!"
,
1000
,
5
)
;
Решил перевести из lua в с++
C:
#include
#include
#include
using namespace std
;
DWORD pid
;
DWORD ped
=
0xb6f5f0
;
DWORD p_target
;
DWORD p_player
;
DWORD test
;
DWORD intS
;
int
main
(
)
{
HWND hWnd
=
FindWindowA
(
0
,
"GTA:SA:MP"
)
;
GetWindowThreadProcessId
(
hWnd
,
&
pid
)
;
HANDLE pHandle
=
OpenProcess
(
PROCESS_VM_READ
,
FALSE
,
pid
)
;
HANDLE pwHandle
=
OpenProcess
(
PROCESS_VM_WRITE
,
FALSE
,
pid
)
;
//ReadProcessMemory(pHandle, (LPVOID)0xb6f5f0, &p_player, 4, 0);
while
(
true
)
{
Sleep
(
500
)
;
ReadProcessMemory
(
pHandle
,
(
LPVOID
)
(
0xB6F3B8
)
,
&
p_player
,
4
,
0
)
;
p_player
=
p_player
+
0x79C
;
ReadProcessMemory
(
pHandle
,
(
LPVOID
)
p_player
,
&
intS
,
4
,
0
)
;
if
(
intS
>
0
)
{
DWORD lol
=
0xB73458
;
lol
=
lol
+
34
;
int
temp
=
255
;
WriteProcessMemory
(
pwHandle
,
(
LPVOID
)
lol
,
&
temp
,
4
,
0
)
;
Sleep
(
100
)
;
DWORD inet
;
ReadProcessMemory
(
pHandle
,
(
LPVOID
)
0xB6F3B8
,
&
inet
,
4
,
0
)
;
inet
=
inet
+
0x79C
;
DWORD temp2
=
0
;
WriteProcessMemory
(
pwHandle
,
(
LPVOID
)
inet
,
&
temp2
,
4
,
0
)
;
}
}
return
0
;
}
Из этого
Lua:
script_name
(
"Trigger Bot"
)
script_author
(
"iTz_WEEZY"
)
script_dependencies
(
"SAMP"
)
require
"lib.moonloader"
local
trigger
=
false
function
main
(
)
if
not
isSampLoaded
(
)
and
isSampAvailable
(
)
then
return
end
sampRegisterChatCommand
(
"trigger"
,
activ
)
while
true
do
wait
(
0
)
if
trigger
and
not
isCharOnAnyBike
(
playerPed
)
and
not
isCharDead
(
playerPed
)
then
local
int
=
readMemory
(
0xB6F3B8
,
4
,
0
)
int
=
int
+
0x79C
local
intS
=
readMemory
(
int
,
4
,
0
)
if
intS
>
0
then
local
lol
=
0xB73458
lol
=
lol
+
34
writeMemory
(
lol
,
4
,
255
,
0
)
wait
(
100
)
local
int
=
readMemory
(
0xB6F3B8
,
4
,
0
)
int
=
int
+
0x79C
writeMemory
(
int
,
4
,
0
,
0
)
end
end
end
end
function
activ
(
)
if
trigger
then
trigger
=
false
else
trigger
=
true
end
end
Что я делаю не так?
А что происходит , можно подробнее? у тебя цикл раз в пол секунды идет. Может из за этого и не видишь результата.
C++:
void
GameText
(
const
char
*
szText
,
int
iTime
,
signed
int
iStyle
)
{
typedef
void
(
__stdcall
*
GameText_t
)
(
const
char
*
,
int
,
signed
int
)
;
GameText_t pGameText
=
(
GameText_t
)
(
g_dwSAMP
+
0x9C2C0
)
;
return
pGameText
(
szText
,
iTime
,
iStyle
)
;
}
using
:
GameText
(
"~r~my text!"
,
1000
,
5
)
;
А что происходит , можно подробнее? у тебя цикл раз в пол секунды идет. Может из за этого и не видишь результата.
g_dwSAMP?
SAMP.ASI
29.04.2018, 16:14
C++:
void
GameText
(
const
char
*
szText
,
int
iTime
,
signed
int
iStyle
)
{
typedef
void
(
__stdcall
*
GameText_t
)
(
const
char
*
,
int
,
signed
int
)
;
GameText_t pGameText
=
(
GameText_t
)
(
g_dwSAMP
+
0x9C2C0
)
;
return
pGameText
(
szText
,
iTime
,
iStyle
)
;
}
using
:
GameText
(
"~r~my text!"
,
1000
,
5
)
;
А что происходит , можно подробнее? у тебя цикл раз в пол секунды идет. Может из за этого и не видишь результата.
Ничего не происходит, по идее он должен стрелять если наведен на игрока
iAmerican
29.04.2018, 16:15
g_dwSAMP?
Замени g_dwSAMP на SF->getSAMP()->dwSAMPaddr.
Как то так, я уже точно не помню , порыскай.
Ничего не происходит, по идее он должен стрелять если наведен на игрока
Проверяй всё ли правильно получает , если все там нормально. Проблема в нажатии клавиши.
Замени g_dwSAMP на SF->getSAMP()->dwSAMPaddr.
Как то так, я уже точно не помню , порыскай.
Может SF->getSAMP()->getSAMPAddr()?
iAmerican
29.04.2018, 16:20
Может SF->getSAMP()->getSAMPAddr()?
Да , оно самое.
SAMP.ASI
29.04.2018, 19:08
Проверяй всё ли правильно получает , если все там нормально. Проблема в нажатии клавиши.
Где там нажатие клавиши?
Как получить список всех игроков, кто рядом?
iAmerican
29.04.2018, 21:25
Где там нажатие клавиши?
C++:
DWORD lol
=
0xB73458
;
lol
=
lol
+
34
;
int
temp
=
255
;
WriteProcessMemory
(
pwHandle
,
(
LPVOID
)
lol
,
&
temp
,
4
,
0
)
;
Как получить список всех игроков, кто рядом?
C++:
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
i
]
!=
1
)
continue
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
==
NULL
)
continue
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
==
NULL
||
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Actor
==
NULL
)
continue
;
// i - переменная с игроками.
}
Код:
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__RegCloseKey@4 в функции "bool __cdecl GetPlayerAccess(void)" (?GetPlayerAccess@@YA_NXZ)
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__RegOpenKeyExA@20 в функции "bool __cdecl GetPlayerAccess(void)" (?GetPlayerAccess@@YA_NXZ)
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__RegQueryValueExA@24 в функции "bool __cdecl GetPlayerAccess(void)" (?GetPlayerAccess@@YA_NXZ)
В чём проблема?
BlackKnigga
30.04.2018, 08:57
Код:
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__RegCloseKey@4 в функции "bool __cdecl GetPlayerAccess(void)" (?GetPlayerAccess@@YA_NXZ)
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__RegOpenKeyExA@20 в функции "bool __cdecl GetPlayerAccess(void)" (?GetPlayerAccess@@YA_NXZ)
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__RegQueryValueExA@24 в функции "bool __cdecl GetPlayerAccess(void)" (?GetPlayerAccess@@YA_NXZ)
В чём проблема?
Либу не подключил
SAMP.ASI
30.04.2018, 11:21
C++:
DWORD lol
=
0xB73458
;
lol
=
lol
+
34
;
int
temp
=
255
;
WriteProcessMemory
(
pwHandle
,
(
LPVOID
)
lol
,
&
temp
,
4
,
0
)
;
спасибо
Как можно узнать скорость машины, в которой сидит игрок?
Либу не подключил
Погуглил, не нашёл информации о библиотеке и как её подключить.
BlackKnigga
30.04.2018, 20:02
Погуглил, не нашёл информации о библиотеке и как её подключить.
#pragma comment(lib, "advapi32")
#pragma comment(lib, "advapi32")
через #pragma не надо. Ее только cl поддерживает
iAmerican
30.04.2018, 20:15
Как можно узнать скорость машины, в которой сидит игрок?
SpeedHack+.rar(https://yadi.sk/d/4FcfhByhvF2fo) (https://www.blast.hk/redirect/aHR0cHM6Ly95YWRpLnNrL2QvNEZjZmhCeWh2RjJmbw) тут смотри
Немного некорректный вопрос, но по другому не знаю как его задать.
Сделал хук Present и Reset через таблицу виртуальных методов. Адрес таблицы получаю создавая второй D3DDevice, получаю адрес его виртуальной таблицы, получаю адрес методов, перехватываю их через MinHook, а после выгружаю из памяти D3DDevice.
Все почти идеально, работает, почти никаких проблем нет.
Суть самой проблемы проста: у некоторых людей это не работает вовсе.. то есть я скидываю asi плагин, который человек должен будет закинуть в корень гта и зайти в игру, а в игре должно отрисоваться тестовое окошко ImGui, но у 3 человек этого окошка нет, не рисует(крашей и т.д. нет, просто не рисует).
С чем это может быть связано, может быть, кто нибудь уже сталкивался с такой проблемой(не очень хочу устанавливать этим людям TeamViewer и проверять через откладчик в чем же там проблема)?
CleanLegend
01.05.2018, 01:38
Немного некорректный вопрос, но по другому не знаю как его задать.
Сделал хук Present и Reset через таблицу виртуальных методов. Адрес таблицы получаю создавая второй D3DDevice, получаю адрес его виртуальной таблицы, получаю адрес методов, перехватываю их через MinHook, а после выгружаю из памяти D3DDevice.
Все почти идеально, работает, почти никаких проблем нет.
Суть самой проблемы проста: у некоторых людей это не работает вовсе.. то есть я скидываю asi плагин, который человек должен будет закинуть в корень гта и зайти в игру, а в игре должно отрисоваться тестовое окошко ImGui, но у 3 человек этого окошка нет, не рисует(крашей и т.д. нет, просто не рисует).
С чем это может быть связано, может быть, кто нибудь уже сталкивался с такой проблемой(не очень хочу устанавливать этим людям TeamViewer и проверять через откладчик в чем же там проблема)?
Возможно конфликты с чем - то, пусть попробуют на чистой гта
Немного некорректный вопрос, но по другому не знаю как его задать.
Сделал хук Present и Reset через таблицу виртуальных методов. Адрес таблицы получаю создавая второй D3DDevice, получаю адрес его виртуальной таблицы, получаю адрес методов, перехватываю их через MinHook, а после выгружаю из памяти D3DDevice.
Все почти идеально, работает, почти никаких проблем нет.
Суть самой проблемы проста: у некоторых людей это не работает вовсе.. то есть я скидываю asi плагин, который человек должен будет закинуть в корень гта и зайти в игру, а в игре должно отрисоваться тестовое окошко ImGui, но у 3 человек этого окошка нет, не рисует(крашей и т.д. нет, просто не рисует).
С чем это может быть связано, может быть, кто нибудь уже сталкивался с такой проблемой(не очень хочу устанавливать этим людям TeamViewer и проверять через откладчик в чем же там проблема)?
Почему бы не юзать хук из соба? Если принципиально использовать уникальный метод поиска оригинальной таблицы, то в сети есть метод ее нахождения паттерном.
Возможно конфликты с чем - то, пусть попробуют на чистой гта
Так же использовал приложение D3D9 Test, которое создает свой девайс и рисует текст в окне, а так же подгружает автоматически frm.dll, которое находится в папке с ним.
Frm.dll это и есть мой хук, я скидывал программу и Длл людям, и у них так же не рисовало окошко.
Так же, заметил только вчера, у некоторых из тех людей хук заработал на пару часов(и в гта, и в D3D9 Test), а потом чудом опять работать перестал(Frm.dll был один и тот же).
Магия..
Почему бы не юзать хук из соба? Если принципиально использовать уникальный метод поиска оригинальной таблицы, то в сети есть метод ее нахождения паттерном.
C++:
DWORD dwVTablePattern
=
FindPattern
(
hD3D9
,
"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x 89\x86"
,
"xx????xx????xx"
)
;
Оно?
Так же использовал приложение D3D9 Test, которое создает свой девайс и рисует текст в окне, а так же подгружает автоматически frm.dll, которое находится в папке с ним.
Frm.dll это и есть мой хук, я скидывал программу и Длл людям, и у них так же не рисовало окошко.
Так же, заметил только вчера, у некоторых из тех людей хук заработал на пару часов(и в гта, и в D3D9 Test), а потом чудом опять работать перестал(Frm.dll был один и тот же).
Магия..
C++:
DWORD dwVTablePattern
=
FindPattern
(
hD3D9
,
"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x 89\x86"
,
"xx????xx????xx"
)
;
Оно?
Похоже на него. Возможно оно и есть
Похоже на него. Возможно оно и есть
Ок, попробую поиск таблицы через паттерн или в собе хук поищу.
через #pragma не надо. Ее только cl поддерживает
а как тогда? Если можно пример, буду благодарен.
а как тогда? Если можно пример, буду благодарен.
В свойствах проекта
Похоже на него. Возможно оно и есть
Проверил хук VMT, найденной через паттерн, результат тот же, что и был(тестировал в d3d9 test).
iAmerican
02.05.2018, 21:35
Проверил хук VMT, найденной через паттерн, результат тот же, что и был(тестировал в d3d9 test).
Без кода , это тоже самое что иголку в стоге сена искать.
По какой причине колоредитор может не отображать выбираемый цвет в имгуи? Именно сам квадрат белый всегда.
Вообщем, проблема такая. RegEx не может найти ник в чате. Что не так?
Код:
std::string chatm = msg;
std::smatch chatres;
std::regex poisk(R"(Samuel_Revalto)");
if (std::regex_match(chatm, chatres, poisk))
SF->getSAMP()->getChat()->AddChatMessage(-1, "Найдено");
SF->getSAMP()->getChat()->AddChatMessage(-1, "%s", poisk);
Пробовал даже выводить его в AddChatMessage, на что я получал это:
https://pp.userapi.com/c846124/v846124570/4371a/eiATZAYNK2U.jpg
Пример сообщения:
Администратор Samuel_Revalto[235] для Paolo_Boone[133]: Транслит офф
Dark_Knight
08.05.2018, 17:20
Вообщем, проблема такая. RegEx не может найти ник в чате. Что не так?
Дай всю строку.
Vlad Horii
08.05.2018, 18:30
Вообщем, проблема такая. RegEx не может найти ник в чате. Что не так?
Код:
std::string chatm = msg;
std::smatch chatres;
std::regex poisk(R"(Samuel_Revalto)");
if (std::regex_match(chatm, chatres, poisk))
SF->getSAMP()->getChat()->AddChatMessage(-1, "Найдено");
SF->getSAMP()->getChat()->AddChatMessage(-1, "%s", poisk);
Пробовал даже выводить его в AddChatMessage, на что я получал это:
https://pp.userapi.com/c846124/v846124570/4371a/eiATZAYNK2U.jpg
Пример сообщения:
Администратор Samuel_Revalto[235] для Paolo_Boone[133]: Транслит офф
C++:
regex_search
Дай всю строку.
Спасибо, я забыл, что создавал подобную тему в SF API, вы мне тогда ответили, все прекрасно работает!
Код:
#include
#include
using namespace std;
bool CALLBACK incomingRPC(stRakNetHookParams *params) {
if (params->packetId == ScriptRPCEnumeration::RPC_ScrClientMessage) {
DWORD len, color;
char msg[144];
BitStream *bs = params->bitStream;
bs->Read(color);
bs->Read(len);
bs->Read(msg, len);
msg[len] = '\0';
string str = msg;
try {
if (color == 0xFF5030AA &&
regex_search(msg, res, regex(R"(Администратор (.*) выдал бан чата игроку)"))){
SF->getSAMP()->getChat()->AddChatMessage(-1, "%s", res[1].str().c_str());
}
}
catch (const exceptions &e){
SF->Log("%s | %s", __FUCTION__, e.what());
}
};
return true; // успешно завершаем обработку RPC.
};
C++:
regex_search
Уже нашел ответ...
В чем тут проблема?
При нажатии клавиши "1", "2" или "3" должна эмулироватся игровая клавиша под номером "1", которая заставляет игрока бежать вперед/назад.
Писал код на CLEO - все работает безупречно, персонаж бежит.
Писал код на SF API, используя SF->getGame()->emulGTAKey() - персонаж не бежит
Писал код на SF API, используя SF->getCLEO()->callOpcode() - персонаж не бежит
Проверял, что функции SF API вызываются, выводя в чат сообщение перед и после их вызова - сообщения в чат выводились, но игрок так же не бежал.
Код CLEO:
CLEO:
while
true
wait
0
key_down
49
jf
continue
0B56:
set_game_key
1
state -
128
end
Код SF API:
C++:
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
init
)
{
if
(
SF
->
getGame
(
)
->
isKeyDown
(
50
)
)
SF
->
getGame
(
)
->
emulateGTAKey
(
1
,
-
128
)
;
if
(
SF
->
getGame
(
)
->
isKeyDown
(
51
)
)
SF
->
getCLEO
(
)
->
callOpcode
(
"0B56: set_game_key 1 state -128"
)
;
return
;
}
if
(
!
init
)
{
if
(
GAME
==
nullptr
||
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
||
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
init
=
true
;
}
}
Вопрос, почему зависает при использовании рендера у Windows XP? На 7, 8, 10 всё нормально работает, а на XP - зависание.
Dark_Knight
15.05.2018, 19:59
Потому, что ХП - уже мертвая система. Забей на её поддержку.
iAmerican
15.05.2018, 23:34
Есть у кого функция удаления пикапов?
Есть у кого функция удаления пикапов?
Эмулируй RPC_DestroyPickup
iAmerican
16.05.2018, 22:48
Эмулируй RPC_DestroyPickup
Хорошо , скинь мне эмуляцию не на SF.
Есть у кого функция удаления пикапов?
int __thiscall stPickupPool::RemovePickup(stPickupPool *this, signed int id)
samp.dll+0xFE70
https://i.imgur.com/zemWnn2.jpg
Что за дичь? Происходит при запуске потока.
iAmerican
19.05.2018, 01:54
Что за дичь? Происходит при запуске потока.
код кривой
код кривой
C++:
bool
IsPlayerOnScreen
(
int
id
)
{
bool
value
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
IsPlayerDefined
(
id
,
true
)
)
{
DWORD dwFunc
=
0x536BC0
;
DWORD dwThis
=
(
DWORD
)
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTAEntity
;
_asm
{
mov ecx
,
dwThis
call dwFunc
mov value
,
al
}
}
return
value
;
}
int
GetVehicleSpeed
(
int
id
)
{
int
speed
;
CVector vector
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
state
==
50
)
{
vector
.
fX
-=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
vehicle
->
speed
[
0
]
;
vector
.
fY
-=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
vehicle
->
speed
[
1
]
;
vector
.
fZ
-=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
vehicle
->
speed
[
2
]
;
speed
=
(
int
)
sqrt
(
pow
(
vector
.
fX
,
2
)
+
pow
(
vector
.
fY
,
2
)
+
pow
(
vector
.
fZ
,
2
)
)
*
125
;
}
return
speed
;
}
void
thread_radar
(
int
max
)
{
while
(
access
)
{
if
(
SF
->
getGame
(
)
->
isGTAMenuActive
(
)
)
continue
;
bool
status
=
false
;
for
(
int
id
=
0
;
id
getSAMP
(
)
->
getPlayers
(
)
->
sLocalPlayerID
==
id
)
continue
;
else
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
id
]
!=
1
)
continue
;
else
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
==
NULL
)
continue
;
else
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
==
NULL
)
continue
;
else
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
==
NULL
)
continue
;
else
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
state
!=
50
)
continue
;
else
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
vehicle
->
passengers
[
0
]
!=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
)
continue
;
else
if
(
IsPlayerOnScreen
(
id
)
)
{
int
speed
=
GetVehicleSpeed
(
id
)
;
if
(
speed
>
max
)
{
status
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"• {FFA500}[Радиолокатор] {FFFFFF}%s превысил допустимую скорость [%i км/ч]"
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetPlayerName
(
id
)
,
speed
)
;
}
}
}
Sleep
(
status
?
15000
:
1000
)
;
}
}
access = true;
P.S. Этот поток иногда включается, а иногда делает ту херь
??
w0odcr3st
25.05.2018, 18:17
Как можно в синглплеере напрямую грузиться на карту в обход меню? Желательно с нужным сейвом, но это уже не так важно
nt_qwark
28.05.2018, 07:38
Может накидать кто функу спидхака? Т.е. жмем допустим ALT, и машина ускоряется не по вектору движ. а тупо вперед, по вектору направления машины
(C++/C#)
CleanLegend
31.05.2018, 01:14
Может накидать кто функу спидхака? Т.е. жмем допустим ALT, и машина ускоряется не по вектору движ. а тупо вперед, по вектору направления машины
(C++/C#)
Пример - SF Plugin - SpeedHack+(https://blast.hk/threads/13382/) (https://blast.hk/threads/13382/)
nt_qwark
01.06.2018, 14:20
Пример - SF Plugin - SpeedHack+(https://blast.hk/threads/13382/) (https://blast.hk/threads/13382/)
Я не хотел писать SF плагин, я хотел пример реализации посредством стандартных средств C++/C# (WinApi etc)
CleanLegend
01.06.2018, 15:30
Я не хотел писать SF плагин, я хотел пример реализации посредством стандартных средств C++/C# (WinApi etc)
Сам смысл реализации показан в сурсах, для реализации без сф тебе нужно узнать адрес скорости машины.
Адреса Памяти (SA) — GTAModding.ru(http://gtamodding.ru/wiki/%D0%90%D0%B4%D1%80%D0%B5%D1%81%D0%B0_%D0%9F%D0%B0% D0%BC%D1%8F%D1%82%D0%B8_(SA)) (https://www.blast.hk/redirect/aHR0cDovL2d0YW1vZGRpbmcucnUvd2lraS8lRDAlOTAlRDAlQj QlRDElODAlRDAlQjUlRDElODElRDAlQjBfJUQwJTlGJUQwJUIw JUQwJUJDJUQxJThGJUQxJTgyJUQwJUI4XyhTQSk)
Dark_Knight
01.06.2018, 20:21
HOOK функция возвращает CPedSAInterface ,как с помощью CPedSAInterface узнать ID игрока ?
Перебором всех айди игроков и совпадением
Перебором
samp.dll+0x10420
C++:
WORD __thiscall stPlayerPool
::
getPlayerIdByCPed
(
stPlayerPool
*
this
,
CPed
*
ped
)
Dark_Knight
01.06.2018, 21:01
samp.dll+0x10420
C++:
WORD __thiscall stPlayerPool
::
getPlayerIdByCPed
(
stPlayerPool
*
this
,
CPed
*
ped
)
Я же ньюфаг. Что с меня взять.
Как это юзать?
Я делаю так:
C++:
auto
id
=
CallFunc
::
thiscall
(
pPlayerPool
,
g_handle
.
dwSAMP
+
0x10420
,
ped
)
;
Но ты можешь делать так:
C++:
using
namespace
std
::
placeholders
;
std
::
function
stPlayerPool__getPlayerIdByCPed
=
std
::
bind
(
(
WORD
(
__thiscall
*
)
(
stPlayerPool
*
,
CPed
*
)
)
(
(
DWORD
)
GetModuleHandle
(
"samp.dll"
)
+
0x10420
)
,
pPlayerPool
,
_1
)
;
// После чего вызываешь функцию очень просто:
auto
id
=
stPlayerPool__getPlayerIdByCPed
(
ped
)
;
Почему при создании нового потока с бесконечным циклом сильно нагружается ЦП и как это исправить?
При одном потоке нагружается до 50%, при двух до 100%
C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#pragma comment(lib, "User32.lib")
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
ThreadOne
(
)
{
while
(
true
)
{
}
}
void
ThreadTwo
(
)
{
while
(
true
)
{
}
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
||
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
||
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
CreateThread
(
0
,
0
,
(
LPTHREAD_START_ROUTINE
)
ThreadOne
,
0
,
0
,
0
)
;
CreateThread
(
0
,
0
,
(
LPTHREAD_START_ROUTINE
)
ThreadTwo
,
0
,
0
,
0
)
;
init
=
true
;
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}
BlackKnigga
03.06.2018, 13:28
как это исправить?
Дать ему отдохнуть. Sleep(10);
Как узнать, рядом ли машина или далеко?
P.S. Известен ID машины
CleanLegend
04.06.2018, 15:11
Как узнать, рядом ли машина или далеко?
P.S. Известен ID машины
Получай дистанцию между локальным игроком и машиной
Какой адрес у правой кнопки мыши?
Я знаю что у левой - 0xB7347A
Не подскажите правую?
Получай дистанцию между локальным игроком и машиной
Я сделал такую функцию, но есть одно но
C++:
bool
IsPlayerInRangeOfVehicle
(
int
player
,
int
vehicle
,
float
radius
)
{
float
x
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
player
)
->
fPosition
[
0
]
-
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pVehicle
->
pGTA_Vehicle
[
vehicle
]
->
base
.
matrix
[
4
*
3
]
;
float
y
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
player
)
->
fPosition
[
1
]
-
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pVehicle
->
pGTA_Vehicle
[
vehicle
]
->
base
.
matrix
[
4
*
3
+
1
]
;
float
z
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
player
)
->
fPosition
[
2
]
-
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pVehicle
->
pGTA_Vehicle
[
vehicle
]
->
base
.
coords
[
4
*
3
+
2
]
;
return
(
(
x
-
radius
)
)
&&
(
(
y
-
radius
)
)
&&
(
(
z
-
radius
)
)
;
}
Если указать ID машины, который далеко - зависает.
CleanLegend
05.06.2018, 01:52
Я сделал такую функцию, но есть одно но
C++:
bool
IsPlayerInRangeOfVehicle
(
int
player
,
int
vehicle
,
float
radius
)
{
float
x
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
player
)
->
fPosition
[
0
]
-
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pVehicle
->
pGTA_Vehicle
[
vehicle
]
->
base
.
matrix
[
4
*
3
]
;
float
y
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
player
)
->
fPosition
[
1
]
-
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pVehicle
->
pGTA_Vehicle
[
vehicle
]
->
base
.
matrix
[
4
*
3
+
1
]
;
float
z
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
player
)
->
fPosition
[
2
]
-
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pVehicle
->
pGTA_Vehicle
[
vehicle
]
->
base
.
coords
[
4
*
3
+
2
]
;
return
(
(
x
-
radius
)
)
&&
(
(
y
-
radius
)
)
&&
(
(
z
-
radius
)
)
;
}
Если указать ID машины, который далеко - зависает.
Проверяй на валидность машину и игрока.
Проверяй на валидность машину и игрока.
Каким образом? Подскажи плес
CleanLegend
05.06.2018, 02:19
Каким образом? Подскажи плес
if (SF->getSAMP()->getInfo()->pPools->pVehicle->pGTA_Vehicle[vehicle]== null)
return;
как то так
Слушайте, я щас изучаю плюсы по книге прата, и закончил читать 3 главу типы данных и понял там не все. Это норма?
CleanLegend
05.06.2018, 21:23
Слушайте, я щас изучаю плюсы по книге прата, и закончил читать 3 главу типы данных и понял там не все. Это норма?
Бывает, что то сложно понять и приходится перечитывать несколько раз, это нормально.
Больше практикуйся и всё получится
Почему курсор невидимый? (Это в лупе, знаю, немного говнокод, посоветуйте получше)
C++:
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
VK_NUMPAD0
)
)
{
Mouse
=
!
Mouse
;
}
if
(
!
Mouse
)
{
SF
->
getSAMP
(
)
->
getMisc
(
)
->
ToggleCursor
(
false
)
;
}
else
if
(
Mouse
)
{
SF
->
getSAMP
(
)
->
getMisc
(
)
->
ToggleCursor
(
true
)
;
}
C++:
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
VK_NUMPAD0
)
)
{
Mouse
^=
true
;
SF
->
getSAMP
(
)
->
getMisc
(
)
->
ToggleCursor
(
Mouse
)
;
}
nt_qwark
07.06.2018, 17:05
Для того что бы сделать простенький СХ нужно всего лишь:
1 Узнать адрес скорости
2 Прочитать значение скорости
3 Добавить к нему некоторое значение (Увеличить скорость)
4 Записать полученное значение из пункта 3
Всё?
Dark_Knight
07.06.2018, 17:39
Для того что бы сделать простенький СХ нужно всего лишь:
1 Узнать адрес скорости
2 Прочитать значение скорости
3 Добавить к нему некоторое значение (Увеличить скорость)
4 Записать полученное значение из пункта 3
Всё?
Да. Собейт в помощь. Там есть СХ
Mastir228
07.06.2018, 19:13
чем отличается указатель от ссылки ?
Cookie doge
07.06.2018, 20:39
Каким образом? Подскажи плес
Код:
if (SF->getSAMP()->getVehicles()->iIsListed[carid] != 1) continue;
if (SF->getSAMP()->getVehicles()->iIsListed2[carid] != 1) continue;
if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[carid] == NULL) continue;
if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[carid]->pGTA_Vehicle == NULL) continue;
чем отличается указатель от ссылки ?
Что в твоем понятии ссылка?
Мышка всё равно невидимая и независимо от переменной Mouse интерфейс на неё реагирует (ImGUI)
Именю немного вопрос - как сделать так, чтоб мышка открывалась вместе с интерфейсом ImGUI и при этом игровое управление блокировалось? (Чтоб не открывался чат, список игроков, нельзя было бегать и т.п.)
попробуй вместо прессед SF->getGame()->isKeyDown
Dark_Knight
07.06.2018, 21:03
чем отличается указатель от ссылки ?
Указатель может быть нулевым. Ссылка никогда не может быть нулевой.
nt_qwark
08.06.2018, 17:11
Да. Собейт в помощь. Там есть СХ
Бля ты видел сурс собейта? Это грязный ад программиста блять
Cookie doge
08.06.2018, 17:12
Бля ты видел сурс собейта? Это грязный ад программиста блять
ctrl + F пробовал?
nt_qwark
08.06.2018, 17:14
ctrl + F пробовал?
Да, в любом случае все переменные названы *** знает как, много капса, всё в духе ебаных плюсов
=> Хуй разберешь
Да, в любом случае все переменные названы *** знает как, много капса, всё в духе ебаных плюсов
=> Хуй разберешь
Че сложного в спидхаке?
0xBA18FC // Vehicle CPED Pointer
0x44 // Vehicle Speed X
0x48 // Vehicle Speed Y
Читаешь значение из Vehicle CPED Pointer.
И это значение плюс Vehicle Speed X/Y - будет скорость т/c.
Плюсуешь к ним сколько-то или умножаешь.
И все это в цикле.
132113123
08.06.2018, 18:57
Недавно начал пробовать сделать какой-нибудь чит на С++ для crmp(samp 0.3e). Столкнулся с такой проблемой, не могу сделать активацию функций чита командой. На легке сделал активацию комбинацией клавиш, а вот командой не знаю как. В гугле и на форумах ничего толкового не нашел. Может кто-то подскажет, как сделать такое или скинет простенький исходник такого чита/обучающий урок по этой теме(сам не нашел). Пробовал копаться в исходнике собейта, ничего из этого не вышло, слишком много функций, не понятно что откуда и зачем.
P.S. делаю так:
else if (GetAsyncKeyState(VK_MENU)) {
if (GetAsyncKeyState(VK_DOWN)) *reinterpret_cast(SA_Memory::eWeather) += 1;
} Альт+стрелочка вниз = меняется погода.
Хочу сделать чтобы была команда допустим /sweath и id погоды.
Заранее спасибо :)
Недавно начал пробовать сделать какой-нибудь чит на С++ для crmp(samp 0.3e). Столкнулся с такой проблемой, не могу сделать активацию функций чита командой. На легке сделал активацию комбинацией клавиш, а вот командой не знаю как. В гугле и на форумах ничего толкового не нашел. Может кто-то подскажет, как сделать такое или скинет простенький исходник такого чита/обучающий урок по этой теме(сам не нашел). Пробовал копаться в исходнике собейта, ничего из этого не вышло, слишком много функций, не понятно что откуда и зачем.
P.S. делаю так:
else if (GetAsyncKeyState(VK_MENU)) {
if (GetAsyncKeyState(VK_DOWN)) *reinterpret_cast(SA_Memory::eWeather) += 1;
} Альт+стрелочка вниз = меняется погода.
Хочу сделать чтобы была команда допустим /sweath и id погоды.
Заранее спасибо :)
Регистрация SA-MP 0.3.7 R1 команд без использования SAMPFUNCS
CLEO:
// samp 0.3.7 R1
{$cleo .cs}
hex
00
00
end
wait
5000
if
8AA2:
0@
= load_library
"samp.dll"
// IF and SET
then
0A93:
end_custom_thread
end
var
0@
: integer
end
0AC6:
1@
= label
@callback
offset
0AC6:
2@
= label
@cmdname
offset
// write 31@ address to assembly code
1@
+=
2
0AC7:
3@
=
var
31@
offset
0A8C:
write_memory
1@
size
4
value
3@
virtual_protect
1
1@
-=
2
31@
=
0
// zeroing 31 var
0AB1:
call_scm_func
@registerClientCommand
3
dwSAMPHandle:
0@
szCommandName:
2@
CallBack:
1@
while
true
wait
0
if
31@
==
1
then
print
"Enable"
1000
else
print
"Disable"
1000
end
end
:callback
hex
83
35
11
11
11
11
01
// xor [11111111], 01
C3
// retn
end
:cmdname
hex
"test"
0
end
:registerClientCommand
// unsigned long dwSAMPHandle, char szCommandName[], CMDPROC CallBack
var
3@
: integer
4@
: integer
end
3@
=
0@
// dwSAMPHandle
3@
+=
0x21A0E8
// struct
0A8D:
3@
= read_memory
3@
size
4
virtual_protect
1
4@
=
0@
// dwSAMPHandle
4@
+=
0x65AD0
// function
0AA6:
call_method
4@
struct
3@
num_params
2
pop
0
2@
1@
0AB2:
ret
0
upd
CLEO:
1@
+=
9
0AC7:
3@
=
var
30@
offset
0A8C:
write_memory
1@
size
4
value
3@
virtual_protect
1
1@
-=
9
1@
+=
15
0AC7:
3@
=
var
31@
offset
0A8C:
write_memory
1@
size
4
value
3@
virtual_protect
1
1@
-=
15
:callback
hex
51
// push ecx
56
// push esi
8B
74
24
0C
// mov esi, [esp+0Ch]
89
34
25
11
11
11
11
// mov [11111111], esi
83
35
11
11
11
11
01
// xor [11111111], 01
5E
// pop esi
59
// pop ecx
C3
// retn
end
просто адреса меняешь и всё готово
Dark_Knight
08.06.2018, 19:33
Зачем samp.dll вообще юзать? :facepalm2:
Локального хендла кара хватит для работы с головой.
Зачем samp.dll вообще юзать? :facepalm2:
Локального хендла кара хватит для работы с головой.
А ну да забыл, это же адрес GTA.
iAmerican
08.06.2018, 20:01
Да, в любом случае все переменные названы *** знает как, много капса, всё в духе ебаных плюсов
=> Хуй разберешь
Ну если ты его открывал 1 раз , то конечно *** разберешь. Там достаточно всё понятно и по полочкам как раз.
Смотри сурс сф в моей тебе по сх и переводи куда тебе там надо.
Там как раз и есть движение по направлению машины
132113123
08.06.2018, 20:16
просто адреса меняешь и всё готово
ты мб с клео путаешь? Если нет - то на какие менять?
https://sannybuilder.com/forums/viewtopic.php?id=4239 (https://www.blast.hk/redirect/aHR0cHM6Ly9zYW5ueWJ1aWxkZXIuY29tL2ZvcnVtcy92aWV3dG 9waWMucGhwP2lkPTQyMzk)
или скинет исходник
AsiPlugin(https://git.prime-hack.net/SR_team/AsiPlugin) (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4)
AsiPlugin(https://git.prime-hack.net/SR_team/AsiPlugin/src/branch/master/CGame/SAMP/SAMPInputInfo.cpp#L4) (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4vc3JjL2JyYW5jaC9tYXN0ZXIvQ0dhbWUvU0FNUC9T QU1QSW5wdXRJbmZvLmNwcCNMNA)
Появились некоторые вопросы, чтобы не создавать кучу тем на каждый из них, распишу всё в этой теме.
1) Какие существуют дополнения для С++ под samp 0.3e? Слышал о SF API, ASI Plugin, какие есть ещё?
2) Как я понял, эти дополнения добавляют новые возможности(к примеру чтение строки из чата), которые без дополнений реализовать нельзя. Правильно ли я понял?
3) Будут ли работать эти дополнения в CRMP(дело в том, что в крмп нельзя использовать Cleo, Asi Loader, Moonloader, SampFuncs и т.д.)?
4) Возможно ли будет потом скомпилировать всё это дело в .dll, как без дополнений?
5) Где можно найти уроки по с++(ИМЕННО ПОД GTA_SA), какие существуют функции и так далее? Или кроме чтения/записи данных в адрес памяти без дополнений сделать нельзя?
6) Как сделать отправку какого-либо сообщения в чат на С++, желательно без каких-либо дополнений?
7) Как сделать свою команду(к примеру чтобы при вводе команды /hp уровень хп становился равным 50? Чтобы стало 50хп я сделать смогу, но как сделать так, чтобы это активировалось при вводе команды?), желательно без дополнений? Нашел на форуме урок, но там добавляется в собейт, функций собейта у меня в коде нет, поэтому у меня оно не работает.
Пока вроде бы всё, если вспомню что-то ещё, потом добавлю.
Заранее спасибо)
Что такое колбек функции ?
Как узнать, рядом ли машина или далеко?
P.S. Известен ID машины
C++:
long
double
__thiscall stSAMPVehicle
::
getDistanceToLocalPlayer
(
stSAMPVehicle
*
this
)
samp.dll+0x9A700
SF API
Для 0.3e нет.
ASI Plugin
Хер найдешь сейчас.
какие есть ещё?
Старый соб.
эти дополнения добавляют новые возможности
Нет, они просто упрощают существующие операции.
которые без дополнений реализовать нельзя
Можно, некоторые проще, чем с этими "дополнениями".
Правильно ли я понял?
Нет.
Будут ли работать эти дополнения в CRMP
Пили обход и будут работать.
Возможно ли будет потом скомпилировать всё это дело в .dll
asi и есть dll.
ИМЕННО ПОД GTA_SA
У меня и у Таира.
Или кроме чтения/записи данных в адрес памяти без дополнений сделать нельзя?
Можно.
Как сделать отправку какого-либо сообщения в чат на С++, желательно без каких-либо дополнений?
Если ты про добавление локального сообщения: AsiPlugin(https://git.prime-hack.net/SR_team/AsiPlugin/src/branch/master/CGame/SAMP/SAMPChatInfo.cpp#L4) (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4vc3JjL2JyYW5jaC9tYXN0ZXIvQ0dhbWUvU0FNUC9T QU1QQ2hhdEluZm8uY3BwI0w0)
Если ты об отправки сообщения на сервер: AsiPlugin(https://git.prime-hack.net/SR_team/AsiPlugin/src/branch/master/CGame/SAMP/SAMPLocalPlayer.cpp#L4) (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4vc3JjL2JyYW5jaC9tYXN0ZXIvQ0dhbWUvU0FNUC9T QU1QTG9jYWxQbGF5ZXIuY3BwI0w0)
Как сделать свою команду
Команда: AsiPlugin(https://git.prime-hack.net/SR_team/AsiPlugin/src/branch/master/CGame/SAMP/SAMPInputInfo.cpp#L4) (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4vc3JjL2JyYW5jaC9tYXN0ZXIvQ0dhbWUvU0FNUC9T QU1QSW5wdXRJbmZvLmNwcCNMNA)
ХП: AsiPlugin(https://git.prime-hack.net/SR_team/AsiPlugin/src/branch/master/CGame/CPed.h#L102) (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4vc3JjL2JyYW5jaC9tYXN0ZXIvQ0dhbWUvQ1BlZC5o I0wxMDI)
Пили обход и будут работать.
С обходом сейчас на большинство крупных проектов с обходом на сервер не пускает. Без обхода работать не будут?
Если ты про добавление локального сообщения: AsiPlugin(https://git.prime-hack.net/SR_team/AsiPlugin/src/branch/master/CGame/SAMP/SAMPChatInfo.cpp#L4) (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4vc3JjL2JyYW5jaC9tYXN0ZXIvQ0dhbWUvU0FNUC9T QU1QQ2hhdEluZm8uY3BwI0w0)
Вот это я так понимаю сделано при помощи AsiPlugin?
Вот это я так понимаю сделано при помощи AsiPlugin?
Нет.
Cookie doge
08.06.2018, 21:31
Вот это я так понимаю сделано при помощи AsiPlugin?
Это исходник аси
ты мб с клео путаешь? Если нет - то на какие менять?
на адреса из 03е
ну и на плюсы преведи да
Как можно реализовать бег по координатам без API ?
отправить KEYDOWN в окно
с api бег проще замутить?
да
И как мне это сделать? функцию можешь дать
SF->getGame()->emulateGTAKey
И как мне это сделать? функцию можешь дать
AsiPlugin(https://git.prime-hack.net/SR_team/AsiPlugin/src/branch/master/sys/SREvents.cpp#L35) (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4vc3JjL2JyYW5jaC9tYXN0ZXIvc3lzL1NSRXZlbnRz LmNwcCNMMzU) -- хук на ScriptLoop, там можно эмулировать нажатие клавишь как в CLEO
nt_qwark
09.06.2018, 23:21
Возник интересный вопрос (для меня)
Мы имеем несколько методов вывода текста в гта (самп)
1) Хук д3д9 и рисование средствами игры
2) Вывести текст в чат
3) Вывести сообщение на экран (Не хукая д3д9, а юзая функцию игры)
Так вот, не подскажете, как реализовать 2/3 способы? (Без Asi/SF/Inject DLL) только EXTERNAL WIN API
Заранее спасибо
Вывести текст в чат
addChatMessage
Вывести сообщение на экран (Не хукая д3д9, а юзая функцию игры)
ShowGameText
Так вот, не подскажете, как реализовать 2/3 способы? (Без Asi/SF/Inject DLL) только EXTERNAL WIN API
То есть из EXE?
Ну в SAMP API (C++) и в SAMP UDF (AHK) это реализовано через инжекцию ассемблерного кода и создания потока с этим кодом который вызовет функцию.
CleanLegend
09.06.2018, 23:57
Так вот, не подскажете, как реализовать 2/3 способы? (Без Asi/SF/Inject DLL) только EXTERNAL WIN API
Посмотри серию гайдов -
Для начала подойдет
2) Вывести текст в чат
Вот тут (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4vc3JjL2JyYW5jaC9tYXN0ZXIvQ0dhbWUvU0FNUC9T QU1QQ2hhdEluZm8uY3BwI0w0) реализация через обращение к элементам структуры. Это изи под "EXTERNAL WIN API" адаптировать
toxa1373
10.06.2018, 11:34
Кто знает оффсет SetPlayerPos?
Тут несколько вопрос есть, к ответам в данном топике.
1) Зачем СРтим тут сделал this указателем?
C++:
int
__thiscall stPickupPool
::
RemovePickup
(
stPickupPool
[
COLOR
=
#ff0000
]
*
this
[
/
COLOR
]
,
signed
int
id
)
2) Зачем тут list сделали указателем, почему нельзя просто через массив реализовать, без объявление указателя? (к примеру, как это делается в c#)
C++:
static
int
fraction_current
=
0
;
const
char
*
list
=
{
u8
"Не выбрано\0"
u8
"Полиция г.Los-Santos\0"
u8
"Полиция г.San-Fierro\0"
u8
"Полиция г.Las-Venturas\0"
u8
"Федеральное Бюро Расследований\0"
}
;
ImGui
::
Combo
(
u8
"Фракция"
,
&
fraction_current
,
list
,
sizeof
(
list
)
)
;
3) Тут как во втором вопросе, только тут сделали массив через указатели, зачем?
C++:
const
char
*
items
[
]
=
{
"AAAA"
,
"BBBB"
,
"CCCC"
,
"DDDD"
,
"EEEE"
,
"FFFF"
,
"GGGG"
,
"HHHH"
,
"IIII"
,
"JJJJ"
,
"KKKK"
}
;
static
int
item2
=
-
1
;
ImGui
::
Combo
(
"Выбор кости"
,
&
item2
,
items
,
IM_ARRAYSIZE
(
items
)
)
;
чтобы передать указатель на себя
в плюсах указатель на символ читается как строка
то есть в третьем массив из чар указателей, можно сказать массив строк
uryukhai
11.06.2018, 06:47
Как в Lua преобразовать?
C++:
switch
(
taa
)
{
case
0
:
break
;
case
1
:
break
;
case
2
:
break
;
}
randazzo
11.06.2018, 11:21
Как в Lua преобразовать?
C++:
switch
(
taa
)
{
case
0
:
break
;
case
1
:
break
;
case
2
:
break
;
}
lua-users wiki: Switch Statement(http://lua-users.org/wiki/SwitchStatement) (https://www.blast.hk/redirect/aHR0cDovL2x1YS11c2Vycy5vcmcvd2lraS9Td2l0Y2hTdGF0ZW 1lbnQ)
или просто if elseif.
F11GAR0.
11.06.2018, 19:50
пацанва подкиньте пример рендера с ресурсов
пацанва подкиньте пример рендера с ресурсов
рендера чего?
F11GAR0.
11.06.2018, 22:14
рендера чего?
текстурок
kewa_opcode
12.06.2018, 00:15
Дайте пожалуйста адрес координат чекпоинта
Дайте пожалуйста адрес координат чекпоинта
Если не ошибаюсь, то:
X: 0xC7DEC8
Y: 0xC7DECC
Z: 0xC7DED0
текстурок
AsiPlugin(https://git.prime-hack.net/SR_team/AsiPlugin/src/branch/master/d3d9/texture.h) (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4vc3JjL2JyYW5jaC9tYXN0ZXIvZDNkOS90ZXh0dXJl Lmg)
Как находить адреса чекпоинтов?
Как находить адреса чекпоинтов?
Зачем их находить, если можно взять из пула?
Зачем их находить, если можно взять из пула?
а из какого пула брать?
Pools
0x550F10 - Расположение функций пула. Здесь хранятся основные лимиты игры.
00B74484 - PtrNode Single
00B74488 - PtrNode Double
00B7448C - EntryInfoNode
00B74490 - Peds.
00B74494 - Vehicles.
00B74498 - Buildings.
00B7449C - Objects
00B744A0 - Dummys
00B744A4 - ColModel
00B744A8 - Task
00B744AC - Event
00B744B0 - PointRoute
00B744B4 - PatrolRoute
00B744B8 - NodeRoute
00B744CC - TaskAllocator
00B744C0 - PedIntelligence
00B744C4 - PedAttractors
uryukhai
12.06.2018, 20:38
можно как-нибудь отключить проверку на звуковую плату?
а из какого пула брать?
Pools
0x550F10 - Расположение функций пула. Здесь хранятся основные лимиты игры.
00B74484 - PtrNode Single
00B74488 - PtrNode Double
00B7448C - EntryInfoNode
00B74490 - Peds.
00B74494 - Vehicles.
00B74498 - Buildings.
00B7449C - Objects
00B744A0 - Dummys
00B744A4 - ColModel
00B744A8 - Task
00B744AC - Event
00B744B0 - PointRoute
00B744B4 - PatrolRoute
00B744B8 - NodeRoute
00B744CC - TaskAllocator
00B744C0 - PedIntelligence
00B744C4 - PedAttractors
Обычные чекпоинты: 0xC7DD88
Гоночные чекпоинты: 0xC7F168
Код:
0xC7DD58 - Начало блока маркеров. Количество элементов - 32. Размер одного элемента - 160 байт.
+0 = [64 байта] Матрица поворота и позиции
+48 = [float] Позиция X
+52 = [float] Позиция Y
+56 = [float] Позиция Z
+64 = [dword] Неизвестно
+68 = [dword] Неизвестно
+72 = [dword] Указатель на RwObject
+76 = [dword] Указатель на Material
+80 = [word] Тип
1 - Сфера
5 - Конус
6 - Конус
+82 [dword] Статус наличия в поточном фрейме
0 - Не создан
1 - Создан
+84 = [dword] Идентификатор
+88 = [byte] R
+89 = [byte] G
+90 = [byte] B
+91 = [byte] A
+92 = [word] Интервал анимации
+94 = [word] Скорость поворота
+96 = [dword] Время создания
+100 = [float] Частота анимации
+104 = [float] Стандартный размер
+108 = [float] Поточный размер
+112 = [float] Яркость
+116 = [float] Радиус видимости
+120 = [float] Направление X
+124 = [float] Направление Y
+128 = [float] Направление Z
+132 = [word] Последняя полученная координата X
+134 = [word] Последняя полученная координата Y
+136 = [float] Последний результат GetGroundZ
+140 = [float] Высота поднятия
+144 = [float] Последняя позиция X
+148 = [float] Последняя позиция Y
+152 = [float] Последняя позиция Z
+156 = [dword] Время, когда последний раз была совершена проверка IsOnScreen
Код:
Race Checkpoints
The checkpoints block that are used in the "illegal street racing" mini-games.
0xC7F158 - Checkpoint block start. Each block is 38 bytes, but theres always only two at a time.
+0 = [byte] Type of checkpoint
+2 = [byte] RGBA color value
+4 = [float] X-axis Position
+8 = [float] Y-axis Position
+12 = [float] Z-axis Position
+16 to +24 = [float] Rotation Matrix (direction from this checkpoint to the next, all floats)
+32 = [float] Checkpoint radius
C++:
sscanf
(
"15 36 Hello World"
,
"%d %d %s"
,
&
a
,
&
b
,
&
c
)
;
a = 15
b = 36
c = Hello
Как сделать так, чтобы cбыло Hello World
C++:
sscanf
(
"15 36 Hello World"
,
"%d %d %s"
,
&
a
,
&
b
,
&
c
)
;
a = 15
b = 36
c = Hello
Как сделать так, чтобы cбыло Hello World
C++:
std
::
regex
re
(
R"((\d+)\s+(\d+)\s+(.+))"
)
,
std
::
regex
::
icase
)
;
std
::
cmatch m
;
if
(
std
::
regex_match
(
"15 36 Hello World"
,
m
,
re
)
)
{
a
=
stroll
(
m
[
1
]
.
str
(
)
)
;
b
=
stroll
(
m
[
1
]
.
str
(
)
)
;
c
=
m
[
1
]
.
str
(
)
;
}
Есть пикап, есть игрок, который смотрит не в сторону пикапа. Как найти угол между игроком и пикапом, чтобы потом можно было его повернуть к этому пикапу? Без SF API и прочих дополнений.
P.S. пытаюсь сделать что-то вроде бота для бега по пикапам, бег буду делать нажатием клавиши W, угол поворота насколько я понимаю можно изменить через адреса памяти, а вот как найти этот угол?
Как сделать активацию/деактивацию на клавишу?
Как сделать активацию/деактивацию на клавишу?
GetAsyncKeyState(int vKey); в цикле.
Или установить свой WndProc.
CleanLegend
13.06.2018, 18:40
Как сделать активацию/деактивацию на клавишу?
if (GetAsyncKeyState(KEY))
{
bActive ^= 1;
}
Key можешь взять тут - Виртуальные коды клавиш(https://api.farmanager.com/ru/winapi/virtualkeycodes.html) (https://www.blast.hk/redirect/aHR0cHM6Ly9hcGkuZmFybWFuYWdlci5jb20vcnUvd2luYXBpL3 ZpcnR1YWxrZXljb2Rlcy5odG1s)
132113123
13.06.2018, 20:49
Когда только начал делать что-то в С++, сразу хотел сделать dll чит для крмп, где есть только команды. На днях слонобойко слил исходник, там очень много всего, что нужно удалить из исходника, чтобы остались только рабочие команды? Меню и автоинжект удалить, а оставить только команды с функциями, чтобы они работали. Я не прошу сделать все за меня, скажите пожалуйста просто что удалить, дальше я сам разберусь
Есть пикап, есть игрок, который смотрит не в сторону пикапа. Как найти угол между игроком и пикапом, чтобы потом можно было его повернуть к этому пикапу? Без SF API и прочих дополнений.
P.S. пытаюсь сделать что-то вроде бота для бега по пикапам, бег буду делать нажатием клавиши W, угол поворота насколько я понимаю можно изменить через адреса памяти, а вот как найти этот угол?
https://git.prime-hack.net/SR_team/AsiPlugin/src/branch/master/CGame/methods.cpp#L55 (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4vc3JjL2JyYW5jaC9tYXN0ZXIvQ0dhbWUvbWV0aG9k cy5jcHAjTDU1)
CleanLegend
13.06.2018, 20:56
Когда только начал делать что-то в С++, сразу хотел сделать dll чит для крмп, где есть только команды. На днях слонобойко слил исходник, там очень много всего, что нужно удалить из исходника, чтобы остались только рабочие команды? Меню и автоинжект удалить, а оставить только команды с функциями, чтобы они работали. Я не прошу сделать все за меня, скажите пожалуйста просто что удалить, дальше я сам разберусь
Тебе же уже отвечали, нужно сначала смысл понять, позже уже изучать что-то глобально, такое как собейт.
Наберись опыта, напиши что-нибудь с помощь SF API и тд.
Тебе же уже отвечали, нужно сначала смысл понять, позже уже изучать что-то глобально, такое как собейт.
Наберись опыта, напиши что-нибудь с помощь SF API и тд.
Он, как и я, делает для крмп, SF API для крмп не подходит. Он хочет убрать с собейта всё, кроме функций(на установку хп к примеру), чтобы уже самому пытаться что-то сделать. По сути получится тоже самое, что и с SF API. В SF API есть функции, в собейте есть функции. Т.к. sf api не подходит, он решил использовать функции собейта. Но весь собейт ему не надо, вот он и просит написать, где в нём находятся функции, чтобы всё остальное убрать и делать своё.
P.S. в С++ я недавно, возможно это называется и не функциями, я про pCRMP->getChat()->addMessageToChat и тд
P.S. в С++ я недавно, возможно это называется и не функциями, я про pCRMP->getChat()->addMessageToChat и тд
ООП это.
Он, как и я, делает для крмп, SF API для крмп не подходит. Он хочет убрать с собейта всё, кроме функций(на установку хп к примеру), чтобы уже самому пытаться что-то сделать. По сути получится тоже самое, что и с SF API. В SF API есть функции, в собейте есть функции. Т.к. sf api не подходит, он решил использовать функции собейта. Но весь собейт ему не надо, вот он и просит написать, где в нём находятся функции, чтобы всё остальное убрать и делать своё.
Имеется ввиду сперва начать с сампа, а после крмп, вы ещё с сф апи не можете написать что-то нормальное, а хотите что-то независимое.
Имеется ввиду сперва начать с сампа
лучше с консольного приложения
iAmerican
14.06.2018, 02:24
Когда только начал делать что-то в С++, сразу хотел сделать dll чит для крмп, где есть только команды. На днях слонобойко слил исходник, там очень много всего, что нужно удалить из исходника, чтобы остались только рабочие команды? Меню и автоинжект удалить, а оставить только команды с функциями, чтобы они работали. Я не прошу сделать все за меня, скажите пожалуйста просто что удалить, дальше я сам разберусь
Удали всё что не нравится и всё. Выделяй и Delete жми. Потом копируешь в блакнот , сохраняешь как asi и все, Я так уже на крмп читы сделал себе.
Дай те кто нибудь свой hash map
нужен перебор символов от 0000 до 99999999 (Цикл от 0000 до 99999999. Что бы было 0001...0002... 9999 ..... 00001 .... 00002....99999 и так далее)
C++:
[CODE]
for
(
int
i
=
0
;
i
romanblinov2013
16.06.2018, 10:15
Добрый день, форумчане. Как найти WINAPI адрес, из которого можно достать размер определённой картинки?
https://forum.antichat.xyz/attachments/27217037/
И сразу же добивающий вопрос...
Как узнать, сколько файлов в определённой папке?
https://forum.antichat.xyz/attachments/27217037/
Заранее спасибо за ответ:sensored:
Добрый день, форумчане. Как найти WINAPI адрес, из которого можно достать размер определённой картинки?
Как узнать размеры изображения в пикселях (N x N) не загружая его в память - C++ Builder - Киберфорум(http://www.cyberforum.ru/cpp-builder/thread1837218.html) (https://www.blast.hk/redirect/aHR0cDovL3d3dy5jeWJlcmZvcnVtLnJ1L2NwcC1idWlsZGVyL3 RocmVhZDE4MzcyMTguaHRtbA)
В общем, у меня есть функция, которая ставит JMP хук на указанный адрес. Проблема в том, что если поставить хук в разных файлах на один и тот же адрес, то хук перезаписывается и работает только в одном файле. Можно ли как то этого избежать?
BlackKnigga
16.06.2018, 19:55
В общем, у меня есть функция, которая ставит JMP хук на указанный адрес. Проблема в том, что если поставить хук в разных файлах на один и тот же адрес, то хук перезаписывается и работает только в одном файле. Можно ли как то этого избежать?
Можно сохранять перезаписываемые команды и выполнять их после своего кода
iAmerican
16.06.2018, 21:54
Добрый день, форумчане. Как найти WINAPI адрес, из которого можно достать размер определённой картинки?
И сразу же добивающий вопрос...
Как узнать, сколько файлов в определённой папке?
Заранее спасибо за ответ:sensored:
C++:
int
iCount
=
0
;
std
::
string sPatch
=
"D
:
\\ShP\\
;
std
::
string sMask
=
sPatch
+
"*.png"
;
void
CheckFiles
(
)
{
iCount
=
0
;
WIN32_FIND_DATA FindFileData
;
HANDLE hFile
=
FindFirstFileA
(
szFullMask
.
c_str
(
)
,
&
FindFileData
)
;
if
(
hFile
!=
INVALID_HANDLE_VALUE
)
{
do
{
iCount
++
;
}
while
(
FindNextFile
(
hFile
,
&
FindFileData
)
!=
0
)
;
FindClose
(
hFile
)
;
}
}
printf
(
"%i"
,
iCount
)
;
Можно сохранять перезаписываемые команды и выполнять их после своего кода
Как это примерно на C++ будет выглядеть? Чет не нашел ничего на эту тему в гугле.
лучше создай одну хук функцию в которой вызывай из массива другие хук функции,
которые будут регистрироваться просто добавлением функции в этот массив
C++:
[CODE]
using
proc_DialogCallBack
=
void
(
__stdcall
*
)
(
)
;
class
DialogHook
{
public
:
void
registerDialogHook
(
void
(
__stdcall
*
func
)
(
)
)
{
// ...
}
void
registerDialogCallBack
(
proc_DialogCallBack callback
)
{
// ...
callbacks
.
push_back
(
callback
)
;
}
std
::
vector
callbacks
;
}
*
pDialog
;
__declspec
(
naked
)
void
__stdcall
hook
(
)
{
std
::
for_each
(
pDialog
->
callbacks
.
begin
(
)
,
pDialog
->
callbacks
.
end
(
)
,
[
]
(
proc_DialogCallBack
&
callback
)
{
callback
(
)
;
}
)
;
}
int
main
(
)
{
pDialog
->
registerDialogHook
(
hook
)
;
pDialog
->
registerDialogCallBack
(
[
]
(
)
{
std
::
cout
registerDialogCallBack
(
[
]
(
)
{
std
::
cout
registerDialogCallBack
(
[
]
(
)
{
std
::
cout
Вот же не поленился и расписал как это может примерно выглядеть
Нужно ещё учесть то, что хук другого плагина может не стоять. Можешь проверить это вот так: if (*reinterpret_cast(0x021A1F) == 0xE9) // 0xE9 - опкод jmp
А если опкод будет другой
вообще конфликтуют хуки из одного плагина, зачем вообще что то проверять через байты
вообще конфликтуют хуки из одного плагина, зачем вообще что то проверять через байты
Как раз таки из разных плагинов
Как раз таки из разных плагинов
так чевоже ты сразу не указал это
в разных файлах я подумал что в разных файлах проекта лмао
Опишите что он делает
C++:
stRemotePlayer
*
pPlayer
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
;
if
(
!
pPlayer
)
return
;
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];
Помещает в переменную pPlayer указатель на структуру игрока с id'ом находящимся в переменной i.
if(!pPlayer) return;
Проверяет ее валидность.
Пропустил тему ООП и теперь страдаю при разборе других сурсов читов по типу индиго или крмп трейнера слонобойки, так как там весь код разбит на отдельные маленькие cpp/h файлы, а я пишу все в одном файле на 5к строк.
Короче говоря, появляется ошибка "class CTest * test уже определен в main.obj" если *test определен в файле test.h.
Если *test определить в main'e - то все будет норм.
А нужно определить *test в test.h.
Как решить?
https://forum.antichat.xyz/attachments/27218190/
а я пишу все в одном файле на 5к строк.
Так делать не надо, изменил один символ и его полностью нужно перекомпилить.
В .h файле создаешь то что на скрине. В .cpp сами функции и подключенный .h файл.
В файле где нужно подключить класс, просто подключаешь .h файл.
Так делать не надо, изменил один символ и его полностью нужно перекомпилить.
В .h файле создаешь то что на скрине. В .cpp сами функции и подключенный .h файл.
В файле где нужно подключить класс, просто подключаешь .h файл.
Уже я это понял, вот и учусь делать нормально, но теперь появляются новые проблемы, по типу этой.
Уже я это понял, вот и учусь делать нормально, но теперь появляются новые проблемы, по типу этой.
Ты подключаешь оба .h файла в разные .cpp файлы.
Но в .h файле объявлена переменная, вот и выходить в итоге два одинаковых объявления, а это уже ошибка.
Убери это:
https://forum.antichat.xyz/attachments/27218197/
В каком-то файле (.cpp) объявляешь CTest *test;
Если в другом файле нужна эта переменная то в том файле (или в .h).
extern CTest *test;
Ты подключаешь оба .h файла в разные .cpp файлы.
Но в .h файле объявлена переменная, вот и выходить в итоге два одинаковых объявления, а это уже ошибка.
Убери это:
В каком-то файле (.cpp) объявляешь CTest *test;
Если в другом файле нужна эта переменная то в том файле (или в .h).
extern CTest *test;
Понял, знач как я хотел не выйдет, спасибо за помощь)
Думал и без extern'a получится.
Как получить модель машины и её id?
CleanLegend
19.06.2018, 00:41
Как получить модель машины и её id?
Модель храниться в структуре vehicle_info:
C++:
pGTA_Vehicle
->
base
.
model_alt_id
ид машины можно получить через пул сампа, примеры есть в собейте
C++:
for
(
int
j
=
0
;
j
iIsListed
[
j
]
!=
1
)
continue
;
if
(
g_Vehicles
->
pSAMP_Vehicle
[
j
]
==
NULL
)
continue
;
if
(
g_Vehicles
->
pSAMP_Vehicle
[
j
]
->
pGTA_Vehicle
==
NULL
)
continue
;
}
iAmerican
20.06.2018, 02:02
Скиньте пожалуйста перевод Игровых координат в экранные. То что в сф это - SF->getGame()->convertGameCoordsToWindow
Скиньте пожалуйста перевод Игровых координат в экранные. То что в сф это - SF->getGame()->convertGameCoordsToWindow
в собейте.
proxyIDirect3DDevice9.cpp
nt_qwark
20.06.2018, 21:39
Ребзи, возник вопрос:
Есть игра (BF4)
Я нашёл адрес функции, которую нужно занопать, но я не могу это сделать, пишет "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена." Шо с этим делать?
Ребзи, возник вопрос:
Есть игра (BF4)
Я нашёл адрес функции, которую нужно занопать, но я не могу это сделать, пишет "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена." Шо с этим делать?
Понял следующее: проблема не в области, где находятся байты (область кода), а в том, что я пытаюсь записать байты по 64 разрядному адресу, но вот вопрос КАК ЭТО СДЕЛАТЬ ТО СУКА??????? НИГДЕ НАХУЙ НЕ ПИШУТ ПРО ЭТО, Я ЕБАЛ
Ребзи, возник вопрос:
Есть игра (BF4)
Я нашёл адрес функции, которую нужно занопать, но я не могу это сделать, пишет "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена." Шо с этим делать?
VirtualProtect (https://www.blast.hk/redirect/aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicm FyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjY4OTgodj12cy44NSku YXNweA)
Ставишь доступ на запись в память, после нопания, возвращаешь старые права доступа.
64 разрядному адресу
Че?
nt_qwark
20.06.2018, 21:55
VirtualProtect (https://www.blast.hk/redirect/aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicm FyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjY4OTgodj12cy44NSku YXNweA)
Ставишь доступ на запись в память, после нопания, возвращаешь старые права доступа.
Че?
Это тут не причём, проверил
0x1409B8734 Попробуй по такому адресу что то записать, *** чё выйдет
У 64 разрядных процессов адреса памяти достигают 8 байт, вместо 4ёх
И еще вопрос: в чём хранить собственно сами оффсеты (адреса)?
c#
А блять ясно, я не полностью выставил цель платформы: x64, из за этого intptr был размером в 4, вместо 8) Можете не отвечать на мою ***ню
Azller Lollison
22.06.2018, 18:31
как получить позицию игрока по его иду? как проверить что локальный игрок в машине за рулем?
kawa operand
22.06.2018, 18:42
из массива stRemotePlayer достань объект с id как у нужного игрока а оттуда достань stRemotePlayerData а там уже fOnFootPos[3];
CPed +0x46C = [dword] Проверка игрока:
0 = в воздухе/воде
1 = в машине
а если именно водителя надо то свой cped сравни с cped водителя, он в CVehicle находится
Как можно проверить отжатие клавиши в консольном приложение без getch() и без зависания во время зажатости?
WndProc
Библиотеки там
Можно юзать kernel32.dll в ней есть коллбек событий - WndProc
Есть способы без WndProc?
Можно использовать что-нибудь типа Qt, но там тоже внутри WndProc. Но тебе видимо лучше вынести логику из main в отдельный поток.
Я пробовал создавать второй поток и делать в нем цикл с проверкой на отжатие, тк пока зажата программа всеравно фризится
наоборот. Обработку клавишь оставь в основном потоке, а логику вынеси в отдельный поток
kawa operand
25.06.2018, 14:12
второй поток зацикли
[QUOTE="Муззи"]
Ничего не пишется, в том числе и с клавиатуры.
C++:
[CODE]
#include
#include
#pragma comment(lib,"User32.lib")
using
namespace
std
;
static
bool
g_Active
=
false
;
DWORD WINAPI
proizv
(
PVOID Parametr
)
{
if
(
g_Active
)
cout
[QUOTE="Муззи"]
Ничего не пишется, в том числе и с клавиатуры.
C++:
[CODE]
#include
#include
#pragma comment(lib,"User32.lib")
using
namespace
std
;
static
bool
g_Active
=
false
;
DWORD WINAPI
proizv
(
PVOID Parametr
)
{
if
(
g_Active
)
cout
madrasso
28.06.2018, 09:31
Приветы, в общем недавно начал учить С++, до этого изучал ахк.
На словах не знаю, как точно объяснить, но на примере ахк, покажу пример:
C++:
#NoEnv
#Persistent
#Include samp-udf.ahk
chat
:
=
A_MyDocuments
"/GTA San Andreas User Files/SAMP/chatlog.txt"
Loop
,
{
FileRead
,
chatlog
,
%
chat
if
(
RegExMatch
(
chatlog
,
".*Администратор (.*)\[.*\]: (.*)"
,
chm
)
)
{
nick
:
=
getUserName
(
)
serv
:
=
getServerName
(
)
FileAppend
,
%
nick
%
-
%
serv
%
-
%
chm1
%
-
%
chm2
%
}
}
Как сделать подобное на C++ .sf? Мне говорили о хуках, но каких точно я не понял.
kawa operand
28.06.2018, 10:10
в samp.dll есть функция добавления смс в чат, она вызывается в функции добавления дебаг смс в чат, которую легко найти в телах самп команд (headmove fpslimit и тд) внедряешься туда или хукаешь и там будет текст
в samp.dll есть функция добавления смс в чат, она вызывается в функции добавления дебаг смс в чат, которую легко найти в телах самп команд (headmove fpslimit и тд) внедряешься туда или хукаешь и там будет текст
дополню только тем, что она есть в собе, и в сниппетах CLEO, так что адрес ее самому искать не обязательно
madrasso
28.06.2018, 10:25
в samp.dll есть функция добавления смс в чат, она вызывается в функции добавления дебаг смс в чат, которую легко найти в телах самп команд (headmove fpslimit и тд) внедряешься туда или хукаешь и там будет текст
Ну, я не настолько знаю С++, что бы понять что ты написал:blink:
kawa operand
28.06.2018, 10:27
ну тогда в цикле читай последнюю строчку чатлога и жди в ней изменений
madrasso
28.06.2018, 10:47
ну тогда в цикле читай последнюю строчку чатлога и жди в ней изменений
C++:
if
(
RegExMatch
(
chatlog
,
".*Администратор (.*)\[.*\]: (.*)"
,
chm
)
)
{
nick
:
=
getUserName
(
)
serv
:
=
getServerName
(
)
FileAppend
,
%
nick
%
-
%
serv
%
-
%
chm1
%
-
%
chm2
%
}
Можешь сделать такое же на С++, либо где посмотреть примеры такого кода?
kawa operand
28.06.2018, 11:18
пример такого кода ты мне сам только что скинул
тебе остаётся только на плюсы перевести
madrasso
28.06.2018, 12:14
пример такого кода ты мне сам только что скинул
тебе остаётся только на плюсы перевести
В этом то и проблема) На АХК это легко написать, а вот на С++ я не знаю как перевести)
CleanLegend
28.06.2018, 12:17
В этом то и проблема) На АХК это легко написать, а вот на С++ я не знаю как перевести)
Найди функцию поиска текста в файле, в собейте возьми функцию получения ника и сервера, все это читаешь в чат логе.
Или через хук чата читаешь чат
madrasso
28.06.2018, 12:20
Найди функцию поиска текста в файле, в собейте возьми функцию получения ника и сервера, все это читаешь в чат логе.
Или через хук чата читаешь чат
Через чат лог не пройдет, ибо работоспособность на несколько окон, а через хук, можешь сказать хотя бы его название)?)
CleanLegend
28.06.2018, 12:27
Через чат лог не пройдет, ибо работоспособность на несколько окон, а через хук, можешь сказать хотя бы его название)?)
в собейте HandleRPC, id rpc 101(RPC_Chat)
В этом то и проблема) На АХК это легко написать, а вот на С++ я не знаю как перевести)
Че ты несешь? Ты даже АХК не знаешь, а пытаешься что-то с него на C++ переписать.
madrasso
28.06.2018, 12:32
в собейте HandleRPC, id rpc 101(RPC_Chat)
исходник собейта где можно взять?
Че ты несешь? Ты даже АХК не знаешь, а пытаешься что-то с него на C++ переписать.
С чего ты взял, что я не знаю АХК? Может не на максимум, но знаю.
исходник собейта где можно взять?
GitHub
С чего ты взял, что я не знаю АХК? Может не на максимум, но знаю.
Понял это по твоим вопросам. Когда ты знаешь как сделать какую-то вещь в языке А, нет никаких проблем загуглить как сделать это же в языке Б, и судя по всему ты не знаешь что именно делает твой код на AHK
madrasso
28.06.2018, 15:30
Понял это по твоим вопросам. Когда ты знаешь как сделать какую-то вещь в языке А, нет никаких проблем загуглить как сделать это же в языке Б, и судя по всему ты не знаешь что именно делает твой код на AHK
проверяет чат лог на наличие определенной строки, потом из неё вытаскивает определенные слова в переменную, после чего создает текстовик и записывает туда текст:
Ник - Сервер - Ник Админа - Что он написал.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot