Просмотр полной версии : С/С++ Вопрос - Ответ
Покажи пожалуйста пример как её использовать в голом проекте? Я пытаюсь сунуть код но выдаёт 8 ошибок
Убрал функцию foo которую он кидал в код, ошибок стало меньше.
билди библиотеку boost ( если не получается или ещё что-то - можешь воспользоваться встроенным пакетным менеджером от студии, вот линк на сам пакет: https://www.nuget.org/packages/boost/ (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cubnVnZXQub3JnL3BhY2thZ2VzL2Jvb3N0Lw ) установи пакет в студию потом в сам проект для этого заходи в кмд промт пакет. менеджера и вводи Install-Package boost -Version 1.72.0) после того так буст подключен к проекту - подключай хук либу ( либо глобально либо локально ( лично у меня создана отдельная папка со всеми либами которые я часто использую ( подключаю глобально ) ) я так понимаю ты их пытаешься подключить локально, судя по всему ты просто закинул файлы библиотеки просто в корень твоего проекта но не подключил ( подключать так: project ->Add->Existing file), и так же нужно поставить поддержку c++17 ( книга пишет этим стандартом ).
*посмотри ещё обучающие уроки по C++ тк дальше сложнее будет
билди библиотеку boost ( если не получается или ещё что-то - можешь воспользоваться встроенным пакетным менеджером от студии, вот линк на сам пакет: https://www.nuget.org/packages/boost/ (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cubnVnZXQub3JnL3BhY2thZ2VzL2Jvb3N0Lw ) установи пакет в студию потом в сам проект для этого заходи в кмд промт пакет. менеджера и вводи Install-Package boost -Version 1.72.0) после того так буст подключен к проекту - подключай хук либу ( либо глобально либо локально ( лично у меня создана отдельная папка со всеми либами которые я часто использую ( подключаю глобально ) ) я так понимаю ты их пытаешься подключить локально, судя по всему ты просто закинул файлы библиотеки просто в корень твоего проекта но не подключил ( подключать так: project ->Add->Existing file), и так же нужно поставить поддержку c++17 ( книга пишет этим стандартом ).
*посмотри ещё обучающие уроки по C++ тк дальше сложнее будет
Есть какая нибудь книга/серия видосов которые можешь посоветовать?
Есть какая нибудь книга/серия видосов которые можешь посоветовать?
есть отдельная тема с источниками https://www.blast.hk/threads/23848/
mtasa-blue/Client/game_sa/CPedSA.h at master · multitheftauto/mtasa-blue (https://github.com/multitheftauto/mtasa-blue/blob/master/Client/game_sa/CPedSA.h#L132)
Multi Theft Auto is a game engine that incorporates an extendable network play element into a proprietary commercial single-player game. - multitheftauto/mtasa-blue
github.com
Подключил библиотеку, а она вызвала ошибки.
https://i.imgur.com/sAiKVYy.png
Подключил библиотеку, а она вызвала ошибки.
https://i.imgur.com/sAiKVYy.png
Стесняюсь спросить где ты её подключил? Ты её только объявил.
Стесняюсь спросить где ты её подключил? Ты её только объявил.
Теперь подключил, вроде как, но все равно выдает ошибки.
https://i.imgur.com/rlASk7G.png
kin4stat
13.08.2020, 14:07
Теперь подключил, вроде как, но все равно выдает ошибки.
https://i.imgur.com/rlASk7G.png
Я кинул чтобы ты класс оттуда взял, а не всю библиотеку
Я кинул чтобы ты класс оттуда взял, а не всю библиотеку
Благодарю, теперь ошибок нет, только я не особо понял как реализовать метод проверки.
kin4stat
13.08.2020, 14:22
Благодарю, теперь ошибок нет, только я не особо понял как реализовать метод проверки.
Берешь локального педа, и проверяешь у него этот флаг. Типа
if (localPlayer->bIsAimingGun)
kin4stat
14.08.2020, 23:21
Как завести/заглушить двигатель? Функция EnableEngine из SAMP-API делает это на миллисекунды, а GTA функция и установка флага заведения вообще не делают ничего
DarkP1xel
15.08.2020, 13:36
Как завести/заглушить двигатель? Функция EnableEngine из SAMP-API делает это на миллисекунды, а GTA функция и установка флага заведения вообще не делают ничего
В SA-MP'e надо патчить функцию работы двигателя.
? Я пытался скачать и скомпилировать boost 1_72 но сайт не даёт скачивать
Пробовал компилировать и подключать boost 1_73, пробовал и через менеджер VS
Dark_Knight
18.08.2020, 15:37
Банально, нет либ файла. Плюс флаги компиляции надо изменить. Все это в гугле можно найти.
kin4stat
18.08.2020, 21:31
Как занопить управление игроком? Для Airbrake например. в WndProc просто return true?
ЕБАТЬу меня уже руки сами тянутся к полу.
Есть вариант узнать сколько комп операций делает в секунду через .cpp?
Возможно LUA код засунуть в cpp? Я вроде видел что возможно, но не представляю как отработает задержа.
https://forum.antichat.xyz/attachments/27550263/
https://forum.antichat.xyz/attachments/27550263/
kin4stat
20.08.2020, 23:45
Где лучше и удобнее всего можно накидать имгуи чтобы потом его легко на плюсы перенести?
loganhackerdff
21.08.2020, 00:03
Где лучше и удобнее всего можно накидать имгуи чтобы потом его легко на плюсы перенести?
в imgui_example
kin4stat
21.08.2020, 16:34
Как сделать чтобы хуки не конфликтовали между собой? т.е. если я ставлю 2 хука, то они оба выполнились, а так, что один перезаписал другой и все
_=Gigant=_
21.08.2020, 20:22
i have functions like
void something(bool bEnable)
{
}
it works fine
but I am curious is it better to use bool* bEnable ?
Dark_Knight
21.08.2020, 20:33
Как сделать чтобы хуки не конфликтовали между собой? т.е. если я ставлю 2 хука, то они оба выполнились, а так, что один перезаписал другой и все
Зачем 2 хука на одну и ту же функцию в одном проекте? -_-
Делай все в одном хуке что тебе надо.
i have functions like
void something(bool bEnable)
{
}
it works fine
but I am curious is it better to use bool* bEnable ?
in c++ should avoid pointers if it possible (that's c / unsafe) in other cases u should use refs
kin4stat
21.08.2020, 20:42
Зачем 2 хука на одну и ту же функцию в одном проекте? -_-
Делай все в одном хуке что тебе надо.
Разные проекты разные плагины, один хук на входящие рпц
Dark_Knight
21.08.2020, 21:03
Ну если у тебя 2 твоих хука будут выполнять одни и те же действия, но возвращать разные результаты, то будет возращаться результат, который выполнился позднее. В остальных случаях ничего страшного.
kin4stat
21.08.2020, 21:15
Ну если у тебя 2 твоих хука будут выполнять одни и те же действия, но возвращать разные результаты, то будет возращаться результат, который выполнился позднее. В остальных случаях ничего страшного.
Условно два плагина, один бот, другой автоответчик.Оба ставят хуки. Один ловит рпц обновления текстдрава, другой сообщения сервера. Че делать в таком случае
Dark_Knight
22.08.2020, 12:32
А ты проверил, как они работают между собой? Возможно они у тебя работать будут нормально.
loganhackerdff
26.08.2020, 21:17
я хочу сделать что то такое как тут - https://www.blast.hk/threads/21272/
но как?
я хочу сделать что то такое как тут - https://www.blast.hk/threads/21272/
но как?
Хукать drawIndexedPrimitive
loganhackerdff
26.08.2020, 22:52
Хукать drawIndexedPrimitive
bool CALLBACK PrimitiveDraw(D3DPRIMITIVETYPE* type, INT BaseVertexIndex, UINT MinIndex, UINT NumVertices, UINT StartCount, UINT PrimitiveCount)
а как из него получить позицию и то что это примитив скина челика?
Dark_Knight
27.08.2020, 18:31
Никак скорее всего.
bool CALLBACK PrimitiveDraw(D3DPRIMITIVETYPE* type, INT BaseVertexIndex, UINT MinIndex, UINT NumVertices, UINT StartCount, UINT PrimitiveCount)
а как из него получить позицию и то что это примитив скина челика?
Если очень загнаться - можно попробовать почитать адреса возврата цепочки вызовов, может и выйдешь на что-то связанное с педом
kin4stat
29.08.2020, 00:51
Почему не компилирует? samp sdk брал
У тебя между SFPlugin и bin в настройках проекта 2 /
Убери один
kin4stat
29.08.2020, 01:26
в настройках проекта
spr1te_cheater
29.08.2020, 04:51
а то шо студия у нево 19 а проект 12 версии всем по***...
bool CALLBACK PrimitiveDraw(D3DPRIMITIVETYPE* type, INT BaseVertexIndex, UINT MinIndex, UINT NumVertices, UINT StartCount, UINT PrimitiveCount)
а как из него получить позицию и то что это примитив скина челика?
Можешь посмотреть еще как в собейте сделано (только с сф не работают там чамсы)
spr1te_cheater
29.08.2020, 14:26
2012 года vs качать?
просто обновить настройки проэкта.
kin4stat
29.08.2020, 15:24
а как?
Проект->Свойства $ProjectName
spr1te_cheater
29.08.2020, 20:53
Проект->Свойства $ProjectName
Причем тут ProjectName? Ему надо изменить другие два параметра...
@Smeruxa (https://www.blast.hk/members/341712/)
https://forum.antichat.xyz/attachments/27557428/
так же сделай
kin4stat
29.08.2020, 21:05
Причем тут ProjectName? Ему надо изменить другие два параметра...
@Smeruxa (https://www.blast.hk/members/341712/)
так же сделай
Он спросил как зайти в настройки проекта, я ему ответил. Ваще с головой беды?
kin4stat
09.09.2020, 18:56
Как узнать размер игрового окна через память?
Адрес я нашел, но их 3:
gta_sa.exe+817044(0xC17044)
gta_sa.exe+89BEE4(0xC9BEE4)
gta_sa.exe+89C040(0xC9C040)
Какой из них использовать?
CleanLegend
09.09.2020, 19:02
Как узнать размер игрового окна через память?
Адрес я нашел, но их 3:
gta_sa.exe+817044(0xC17044)
gta_sa.exe+89BEE4(0xC9BEE4)
gta_sa.exe+89C040(0xC9C040)
Какой из них использовать?
C++:
*
(
float
*
)
0x00C17044
*
(
float
*
)
0x00C17048
sefen5553
09.09.2020, 19:13
не удалось найти файл plugin.lib, писал тему на БХ - 0 ответа, писал известным людям по этой сфере - 0 ответа. Теперь и сюда напишу. Как ее решить? Установил плагин сдк нету библиотек от plugin sdk, в чём проблема. переустановить не могу. Это рассширение установлено на всех устройствах.
помогите плз
не удалось найти файл plugin.lib, писал тему на БХ - 0 ответа, писал известным людям по этой сфере - 0 ответа. Теперь и сюда напишу. Как ее решить? Установил плагин сдк нету библиотек от plugin sdk, в чём проблема. переустановить не могу. Это рассширение установлено на всех устройствах.
помогите плз
Пропиши в настройках проекта путь до этой либы
1599664889879.pngRazorRw · 9 Сен 2020 в 18:21' data-fancybox="lb-post-562707" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/68329/" style="cursor: pointer;" title="1599664889879.png">
https://forum.antichat.xyz/attachments/27562707/
Linker -> Input -> Additional Dependencies
sefen5553
09.09.2020, 19:57
Пропиши в настройках проекта путь до этой либы
Linker -> Input -> Additional Dependencies
не работает так. всеравно еррор.
UPD: там путь к папке с plugin sdk, но там output/lib а у меня он отсутствует. все эти папки и plugin.lib хотя установил всё
акак
https://i.imgur.com/lKQTHu3.png
акак
https://i.imgur.com/lKQTHu3.png
Гайд - Интегрированная отладка asi/sf/dll плагинов в игре с помощью Visual Studio (https://www.blast.hk/threads/20320/)
прив Многие ли из вас знают, что с помощью Visual Studio можно отлаживать плагины прямо в игре и что делается это очень просто? Нет, блять, нихуя вы не знаете! Но я вас научу. Берём студию и проект своего плагина, идём в конфигурацию проекта на страницу "Debugging" (Отладка) и ставим такие...
www.blast.hk
я не умею правильно пользоваться поиском по проекту, так что помогите, пожалуйста, найти это:
isCharStopped, sampIsLocalPlayerSpawned, есть ли оружие в наличии (не в руках), writeMemory
------
как осуществлять поиск из массива?
есть массив с никами, если ник = массиву тогда что-то
kin4stat
12.09.2020, 01:11
я не умею правильно пользоваться поиском по проекту, так что помогите, пожалуйста, найти это:
isCharStopped, sampIsLocalPlayerSpawned, есть ли оружие в наличии (не в руках), writeMemory
------
как осуществлять поиск из массива?
есть массив с никами, если ник = массиву тогда что-то
C++:
[CODE]
for
(
int
i
=
0
;
i
нужен аналог isCharStopped
kin4stat
12.09.2020, 10:23
нужен аналог isCharStopped
Заходишь в исходник mta sa, и там будут все методы педов
mtasa-blue/Client/game_sa/CPedSA.h at master · multitheftauto/mtasa-blue (https://github.com/multitheftauto/mtasa-blue/blob/master/Client/game_sa/CPedSA.h)
Multi Theft Auto is a game engine that turns Grand Theft Auto: San Andreas into networked multiplayer. - multitheftauto/mtasa-blue
github.com
Если нет такого метода, ищи в флагах. Если нет в флагах, значит это реализовано через кучи проверок на луа
как перезаписать самповскую команду? (/q к примеру)
kin4stat
12.09.2020, 14:09
как перезаписать самповскую команду? (/q к примеру)
Регистрируешь ее еще раз, и все. Либо в структуре stInputInfo изменяешь функцию (CMDPROC) на свою, поиском по зарегистрированным именам команд
C++:
typedef
void
(
__cdecl
*
CMDPROC
)
(
PCHAR
)
;
struct
stInputInfo
{
void
*
pD3DDevice
;
void
*
pDXUTDialog
;
stInputBox
*
pDXUTEditBox
;
CMDPROC pCMDs
[
SAMP_MAX_CLIENTCMDS
]
;
char
szCMDNames
[
SAMP_MAX_CLIENTCMDS
]
[
33
]
;
int
iCMDCount
;
int
iInputEnabled
;
char
szInputBuffer
[
129
]
;
char
szRecallBufffer
[
10
]
[
129
]
;
char
szCurrentBuffer
[
129
]
;
int
iCurrentRecall
;
int
iTotalRecalls
;
CMDPROC pszDefaultCMD
;
}
;
Регистрируешь ее еще раз, и все.
как я понял, сф ее не перезаписывает, как это делает луа
kin4stat
12.09.2020, 14:24
как я понял, сф ее не перезаписывает, как это делает луа
Значит через структуру подменить CMDPROC нужно будет
checkdasound
12.09.2020, 14:31
Есть плагин с d3d9 рендером. Как сделать, чтобы инициализация хука происходила в нужный момент. Объясню: если поставить проверку на загрузку игры (0xC8D4C0 != 9) и сразу после нее инициализировать, то не будет работать, но если поставить после этого задержку в секунд так 10, то будет, но это такое. Мб есть какой-то адрес, отвечающий за это или что-то типа того.
4el0ve4ik
12.09.2020, 14:38
Есть плагин с d3d9 рендером. Как сделать, чтобы инициализация хука происходила в нужный момент. Объясню: если поставить проверку на загрузку игры (0xC8D4C0 != 9) и сразу после нее инициализировать, то не будет работать, но если поставить после этого задержку в секунд так 10, то будет, но это такое. Мб есть какой-то адрес, отвечающий за это или что-то типа того.
Проверять 0xC97C28 - IDirect3DDevice9 pointer! = nullptr, после проверки делать инициальзацию
kin4stat
12.09.2020, 14:46
Есть плагин с d3d9 рендером. Как сделать, чтобы инициализация хука происходила в нужный момент. Объясню: если поставить проверку на загрузку игры (0xC8D4C0 != 9) и сразу после нее инициализировать, то не будет работать, но если поставить после этого задержку в секунд так 10, то будет, но это такое. Мб есть какой-то адрес, отвечающий за это или что-то типа того.
Думаю можно хукнуть это:
plugin-sdk/plugin_sa/game_sa/CRenderer.cpp at b38ab7b07f74ac86f4283095f0386617d12fba73 · DK22Pac/plugin-sdk (https://github.com/DK22Pac/plugin-sdk/blob/b38ab7b07f74ac86f4283095f0386617d12fba73/plugin_sa/game_sa/CRenderer.cpp#L37)
An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk
github.com
CleanLegend
12.09.2020, 14:48
Проверять 0xC97C28 - IDirect3DDevice9 pointer! = nullptr, после проверки делать инициальзацию
такое не прокатит, он уже проверят инициализацию игры через 0xC8D4C0.
этот указатель(0xC97C28) заменяется на новый указатель при инициализации samp.dll.
нужно ждать пока пройдет инициализация замены указателя и только потом хукать, так как изначально выход идет на present от gta_sa, потом samp заменяет всю виртуальную таблицу на свою.
как вариант можно проверять какую либо структуру из samp на null
checkdasound
12.09.2020, 14:50
такое не прокатит, он уже проверят инициализацию игры через 0xC8D4C0.
этот указатель(0xC97C28) заменяется на новый указатель при инициализации samp.dll.
нужно ждать пока пройдет инициализация замены указателя и только потом хукать, так как изначально выход идет на present от gta_sa, потом samp заменяет всю виртуальную таблицу на свою.
как вариант можно проверять какую либо структуру из samp на null
мне нужно было без сампа, а вариант человечика прокатил
p.s. на самом деле нет, просто я забыл задержку убрать
4el0ve4ik
12.09.2020, 14:52
такое не прокатит, он уже проверят инициализацию игры через 0xC8D4C0.
этот указатель(0xC97C28) заменяется на новый указатель при инициализации samp.dll.
нужно ждать пока пройдет инициализация замены указателя и только потом хукать, так как изначально выход идет на present от gta_sa, потом samp заменяет всю виртуальную таблицу на свою.
как вариант можно проверять какую либо структуру из samp на null
Че это не прокатит, просто самп будет рендерить раньше плагина и всего лишь, мы то подменим таблицу гта са, после чего самп уже заменяет измененную таблицу на свою и получится цепочка в виде самп->наш плагин->гта са
@CleanLegend (https://www.blast.hk/members/268/) работает же
https://forum.antichat.xyz/attachments/27564100/
C++:
void
Thread
(
void
*
)
{
while
(
*
reinterpret_cast
(
0xC97C28
)
!=
nullptr
)
Sleep
(
350
)
;
d3d3hk
=
new
D3D9Hook
(
*
reinterpret_cast
(
0xC97C28
)
)
;
d3d3hk
->
SetHook
(
&
hkdPresent
,
iPresent
)
;
d3d3hk
->
SetHook
(
&
hkdReset
,
iReset
)
;
gOriginalPresent
=
(
tPresent
)
d3d3hk
->
GetOriginalFunc
(
iPresent
)
;
gOriginalReset
=
(
tReset
)
d3d3hk
->
GetOriginalFunc
(
iReset
)
;
}
остальную часть кода нет смысла выкладывать.
По поводу SF: да, она перезаписывает самповскую команду, ошибка была в другом. Вопрос теперь у меня другой:
- как сделать проверку, остановился ли персонаж? в PEDSELF не нашел
kin4stat
12.09.2020, 17:09
По поводу SF: да, она перезаписывает самповскую команду, ошибка была в другом. Вопрос теперь у меня другой:
- как сделать проверку, остановился ли персонаж? в PEDSELF не нашел
стоит на месте или остановился?
Если стоит на месте - во флагах педа 1 бит. Или проверять скорость на нули.
А если остановился - можно закостылить через ид анимки сампа, если без костылей, то придется мудрить с Tasks
как получить все числа из строки? есть строка "абвгд123еёжзийкл228", должен получить 123, 228
kin4stat
12.09.2020, 19:27
как получить все числа из строки? есть строка "абвгд123еёжзийкл228", должен получить 123, 228
C++:
#include
#include
std
::
vector
numbers
;
int
number
;
// scanning numbers from buffer(const char*) until available
while
(
sscanf
(
buffer
,
“
%
99999
d”
,
&
number
)
!=
0
)
{
numbers
.
push_back
(
number
)
;
}
// I didnt tested this code, so check it before using
C++:
#include
#include
std
::
vector
numbers
;
int
number
;
// scanning numbers from buffer(const char*) until available
while
(
sscanf
(
buffer
,
“
%
99999
d”
,
&
number
)
!=
0
)
{
numbers
.
push_back
(
number
)
;
}
// I didnt tested this code, so check it before using
fuck the sscanf:
[CODE]
#include
#include
#include
std
::
vector
getNumberFromString
(
std
::
string input
)
{
std
::
vector
output
;
std
::
regex
regex
(
R"((\d+))"
)
;
std
::
smatch matches
;
while
(
std
::
regex_search
(
input
,
matches
,
regex
)
)
{
output
.
push_back
(
std
::
stoi
(
matches
[
1
]
.
str
(
)
)
)
;
input
=
matches
.
suffix
(
)
.
str
(
)
;
}
return
output
;
}
void
main
(
)
{
std
::
vector
vec
=
getNumberFromString
(
"str123str890str25str5"
)
;
for
(
auto
value
:
vec
)
std
::
cout
Как получить текст после :? Пример: "Привет: мир, как дела?", должен получить мир
Izvinisb
12.09.2020, 22:40
Как получить текст после :? Пример: "Привет: мир", должен получить мир
C++:
[CODE]
#include
#include
#include
int
main
(
)
{
std
::
string str
=
"Привет: мир"
;
std
::
cmatch res
;
std
::
regex
reg
(
"\\s(\.+)"
)
;
if
(
std
::
regex_search
(
str
.
c_str
(
)
,
res
,
reg
)
)
std
::
cout
Как сделать диалог с инпутом, в инпут которого принимается только текст формата 00:00:00 либо 00.00.0000
(где 0 - любое число)
Dark_Knight
13.09.2020, 00:17
Проще будет сделать проверку на то что уже ввел игрок после нажатия чем в момент нажатия.
Проще будет сделать проверку на то что уже ввел игрок после нажатия чем в момент нажатия.
ну я это и имел ввиду, сверить инпут с форматом как?
kin4stat
13.09.2020, 00:30
ну я это и имел ввиду, сверить инпут с форматом как?
Регулярными выражениями
Помогите решить вот такую ошибку
1599982910306.pngweq_dev · 13 Сен 2020 в 10:27' data-fancybox="lb-post-564504" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/68632/" style="cursor: pointer;" title="1599982910306.png">
https://forum.antichat.xyz/attachments/27564504/
как сделать unregister команды, которую я сам создал?
как сделать unregister команды, которую я сам создал?
SF->getSAMP()->getInput()->UnregisterClientCommand("mycmd");
kin4stat
13.09.2020, 12:11
как сделать unregister команды, которую я сам создал?
Без SF - в структуре stInputInfo найти свой CMDPROC или свою команду и заполнить нулями
kin4stat
15.09.2020, 21:08
Недавно начал изучать ImGui, почему крашит скрипт? Ошибок нет
Код:
#include
using namespace std;
#include "imgui.h"
int main()
{
ImGui::Begin("Demo window");
ImGui::Button("Hello!");
ImGui::End();
}
потому что как минимум нужна библиотека для отрисовки графики
Открой на гитхабе имгуи examples
Недавно начал изучать ImGui
Как ты изучал? Ты примеры видел то...
imgui/examples/example_win32_directx9/main.cpp at master · ocornut/imgui (https://github.com/ocornut/imgui/blob/master/examples/example_win32_directx9/main.cpp)
Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies - ocornut/imgui
github.com
как разделить строку на подстроки по символу '\n' ?
kin4stat
20.09.2020, 18:11
как разделить строку на подстроки по символу '\n' ?
Разделение string на элементы массива через нужный символ (https://www.blast.hk/redirect/aHR0cHM6Ly9ydS5zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbn MvNDk1MjUv0KDQsNC30LTQtdC70LXQvdC40LUtc3RyaW5nLdC9 0LAt0Y3Qu9C10LzQtdC90YLRiy3QvNCw0YHRgdC40LLQsC3Rh9 C10YDQtdC3LdC90YPQttC90YvQuS3RgdC40LzQstC-0Ls)
Подскажите, а способа как использовать для разделения нужной мне строки на подстроки, которые будут заноситься в массив, нет? Нужно из: "Привет; Как; Дела" Получить: str[0]="Приве...
ru.stackoverflow.com
Разделение string на элементы массива через нужный символ (https://www.blast.hk/redirect/aHR0cHM6Ly9ydS5zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbn MvNDk1MjUv0KDQsNC30LTQtdC70LXQvdC40LUtc3RyaW5nLdC9 0LAt0Y3Qu9C10LzQtdC90YLRiy3QvNCw0YHRgdC40LLQsC3Rh9 C10YDQtdC3LdC90YPQttC90YvQuS3RgdC40LzQstC-0Ls)
Подскажите, а способа как использовать для разделения нужной мне строки на подстроки, которые будут заноситься в массив, нет? Нужно из: "Привет; Как; Дела" Получить: str[0]="Приве...
ru.stackoverflow.com
не получается сделать у меня, может поможешь?
Dark_Knight
21.09.2020, 12:27
не получается сделать у меня, может поможешь?
Код не получается скопировать? -_-
Код не получается скопировать? -_-
da
как на плюсах выглядит?
Lua:
name
=
"192.4 192.5 192.6"
x
,
y
,
z
=
name
:
match
(
"(.*) (.*) (.*)"
)
Подскажите пожалуйста как получить версию GTA (R1 - R3) без API
https://github.com/imring/TimeFormat/blob/master/samp.hpp#L19
Нету ничего
AM0R3M1O
26.09.2020, 01:49
как на плюсах выглядит?
Lua:
name
=
"192.4 192.5 192.6"
x
,
y
,
z
=
name
:
match
(
"(.*) (.*) (.*)"
)
C++:
int
main
(
)
{
std
::
string name
[
3
]
=
{
"123.1"
,
"123.2"
,
"123.3"
}
;
double
X
=
::
atof
(
name
[
0
]
.
c_str
(
)
)
;
double
Y
=
::
atof
(
name
[
1
]
.
c_str
(
)
)
;
double
Z
=
::
atof
(
name
[
2
]
.
c_str
(
)
)
;
}
Но , я могу ошибаться (
traceattack
26.09.2020, 02:34
как на плюсах выглядит?
Lua:
name
=
"192.4 192.5 192.6"
x
,
y
,
z
=
name
:
match
(
"(.*) (.*) (.*)"
)
C++:
[CODE]
#include
#include
#include
using
namespace
std
;
int
main
(
)
{
double
X
,
Y
,
Z
;
X
=
Y
=
Z
=
0
;
string obj
=
"192.4 192.5 192.6"
;
smatch find_pool
;
regex_search
(
obj
,
find_pool
,
regex
(
"^(.+) (.+) (.+)$"
)
)
;
if
(
find_pool
.
ready
(
)
)
{
X
=
stod
(
find_pool
[
1
]
)
;
Y
=
stod
(
find_pool
[
2
]
)
;
Z
=
stod
(
find_pool
[
3
]
)
;
}
cout
kin4stat
26.09.2020, 03:13
Че за приколы с хуком, понять не могу.
Есть вот такой вызов функции:
https://forum.antichat.xyz/attachments/27571462/
прототип функции:
int __stdcall D3DXSaveSurfaceToFileA(int a1, int a2, int a3, int a4, int a5)
Ставлю хук вот так:
C++:
int
__stdcall
SaveSurfaceHooked
(
LPCSTR filename
,
D3DXIMAGE_FILEFORMAT fileFormat
,
LPDIRECT3DSURFACE9 pSurface
,
PALETTEENTRY
*
pPEntry
,
RECT
*
pRect
)
{
// функция пустышка для теста
return
0
;
}
MH_CreateHook
(
(
void
*
)
(
AddScreenAddress
+
14
)
,
&
SaveSurfaceHooked
,
reinterpret_cast
(
fpD3DXSaveSurfaceToFile
)
)
;
MH_EnableHook
(
(
void
*
)
(
AddScreenAddress
+
14
)
)
;
И внутри SaveSurfaceHooked все аргументы смещаются на 1 влево. Че за приколы понять не могу
каким чудом это происходит?
библиотеки нет
скинь пожалуйста
я не у пк щас, посмотри в Гугле, там куча
lemonager
28.09.2020, 08:52
каким чудом это происходит?
пкм по названию проекта, свойства и тут ставишь все самое последнее, что у тебя есть:
https://forum.antichat.xyz/attachments/27572667/
Жмешь применить, а потом Ок
не помогло, настройки как у тебя
У тебя точно установлен Windows SDK?
DolgorukovGTA
28.09.2020, 21:34
[QUOTE="M1NDS3TD1SSOLV3R"]
C++:
#include
#include
#include
using
namespace
std
;
int
main
(
)
{
double
X
,
Y
,
Z
;
X
=
Y
=
Z
=
0
;
string obj
=
"192.4 192.5 192.6"
;
smatch find_pool
;
regex_search
(
obj
,
find_pool
,
regex
(
"^(.+) (.+) (.+)$"
)
)
;
if
(
find_pool
.
ready
(
)
)
{
X
=
stod
(
find_pool
[
1
]
)
;
Y
=
stod
(
find_pool
[
2
]
)
;
Z
=
stod
(
find_pool
[
3
]
)
;
}
cout
C:
[CODE]
#include
#include
int
main
(
void
)
{
int
res
=
0
;
double
a
[
3u
]
;
uint8_t i
=
0u
;
const
char
s
[
18u
]
=
{
"192.4 192.5 192.6"
}
;
const
uint8_t sz
=
(
uint8_t
)
(
sizeof
(
a
)
/
sizeof
(
a
[
0u
]
)
)
;
res
=
sscanf
(
&
s
[
0u
]
,
"%lf %lf %lf"
,
&
a
[
0u
]
,
&
a
[
1u
]
,
&
a
[
2u
]
)
;
if
(
(
const
int
)
(
sz
)
!=
res
)
{
fprintf
(
stderr
,
"К глубокому сожалению, не удалось "
"считать успешно все 3 числа.\n"
)
;
return
1
;
}
for
(
i
;
sz
>
i
;
i
++
)
{
printf
(
"%u: %.1lf\n"
,
(
1u
+
i
)
,
a
[
i
]
)
;
}
}
Благодарю!
neYarik.
28.09.2020, 21:38
У тебя точно установлен Windows SDK?
там же нужен DirectX SDK вроде
traceattack
28.09.2020, 21:42
Приветик, я присяду ненамного, позвольте же мне слегка размяться.
C:
#include
#include
int
main
(
void
)
{
int
res
=
0
;
double
a
[
3u
]
;
uint8_t i
=
0u
;
const
char
s
[
18u
]
=
{
"192.4 192.5 192.6"
}
;
const
uint8_t sz
=
(
uint8_t
)
(
sizeof
(
a
)
/
sizeof
(
a
[
0u
]
)
)
;
res
=
sscanf
(
&
s
[
0u
]
,
"%lf %lf %lf"
,
&
a
[
0u
]
,
&
a
[
1u
]
,
&
a
[
2u
]
)
;
if
(
(
const
int
)
(
sz
)
!=
res
)
{
fprintf
(
stderr
,
"К глубокому сожалению, не удалось "
"считать успешно все 3 числа.\n"
)
;
return
1
;
}
for
(
i
;
sz
>
i
;
i
++
)
{
printf
(
"%u: %.1lf\n"
,
(
1u
+
i
)
,
a
[
i
]
)
;
}
}
Благодарю!
Ментальное отторжение ;[]
Dark_Knight
28.09.2020, 22:04
Ментальное отторжение ;[]
Это С. Расслабься. Все в порядке.
kin4stat
29.09.2020, 00:22
как это фиксится?
C++:
1
>
ImGui
++
.
obj
:
error LNK2019
:
ссылка на неразрешенный внешний символ
"bool __cdecl ImGui::Begin(char const *,bool *,int)"
(
?
Begin@ImGui@@YA_NPBDPA_NH@Z
)
в функции _main
.
1
>
ImGui
++
.
obj
:
error LNK2019
:
ссылка на неразрешенный внешний символ
"void __cdecl ImGui::End(void)"
(
?
End@ImGui@@YAXXZ
)
в функции _main
.
1
>
MSVCRTD
.
lib
(
exe_winmain
.
obj
)
:
error LNK2019
:
ссылка на неразрешенный внешний символ _WinMain@
16
в функции
"int __cdecl invoke_main(void)"
(
?
invoke_main@@YAHXZ
)
.
cpp файлов imgui нет
AdCKuY_DpO4uLa
29.09.2020, 13:39
как преобразовать шрифт (font.ttf) в массив байт?
Shypisaw
01.10.2020, 20:58
Есть строка : std::string str = "0x50, 0x20, 0x30";
Как конвертировать в массив uint8_t arr[] = { 0x50, 0x20, 0x30 };
_=Gigant=_
02.10.2020, 11:12
Есть строка : std::string str = "0x50, 0x20, 0x30";
Как конвертировать в массив uint8_t arr[] = { 0x50, 0x20, 0x30 };
Converting a string to uint8_t array in C++ (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNz Y2NDUyOS9jb252ZXJ0aW5nLWEtc3RyaW5nLXRvLXVpbnQ4LXQt YXJyYXktaW4tYw)
I want an std::string object (such as a name) to a uint8_t array in C++. The function reinterpret_cast rejects my string. And since I'm coding using NS-3, some warnings are be...
stackoverflow.com
Converting a string to uint8_t array in C++ (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNz Y2NDUyOS9jb252ZXJ0aW5nLWEtc3RyaW5nLXRvLXVpbnQ4LXQt YXJyYXktaW4tYw)
I want an std::string object (such as a name) to a uint8_t array in C++. The function reinterpret_cast rejects my string. And since I'm coding using NS-3, some warnings are be...
stackoverflow.com
не знаешь - не советуй. По ссылке вообще другой кейс
Есть строка : std::string str = "0x50, 0x20, 0x30";
Как конвертировать в массив uint8_t arr[] = { 0x50, 0x20, 0x30 };
C++:
std
::
stringstream
ss
(
"0x50, 0x20, 0x30"
)
;
std
::
string item
;
std
::
vector
arr
;
while
(
std
::
getline
(
ss
,
item
,
','
)
)
arr
.
push_back
(
std
::
stoll
(
item
,
nullptr
,
16
)
)
;
Как получить значение текстдрава через id?
- - -
Как изменить значение текстдрава через id?
kin4stat
04.10.2020, 18:02
Как получить значение текстдрава через id?
- - -
Как изменить значение текстдрава через id?
По идее как-то так:
C++:
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
playerTextdraw
[
id
]
1.Стоит-ли использовать С++ как первый язык программирования? В данный момент, нахожусь на 1 курсе колледжа. Хочу начать изучение программирования уже сейчас.
1.Стоит-ли использовать С++ как первый язык программирования? В данный момент, нахожусь на 1 курсе колледжа. Хочу начать изучение программирования уже сейчас.
Если тебе нужен C++ для каких-то целей, то да - почему бы и нет, а если ты просто ищешь что бы поучить, то лучше выбрать более простой вариант языка для изучения. Можешь попробовать Си-подобные языки, если нравится синтаксис и есть желание в будущем перейти на C / C++, либо что-нибудь другое, если подобие синтаксиса не так важно. Например, если нужно что-то попроще, то можно попробовать скриптовые языки программирования - они легки для изучения.
1.Стоит-ли использовать С++ как первый язык программирования?
Смотря в какую сторону хочешь развиваться. Но я бы вместо плюсов сразу начал с C, потом будет проще понять как всё устроено в плюсовом ооп
Смотря в какую сторону хочешь развиваться. Но я бы вместо плюсов сразу начал с C, потом будет проще понять как всё устроено в плюсовом ооп
Нет не будет
loganhackerdff
05.10.2020, 22:32
что не так в этом коде? машина 100% существует
C++:
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
VK_F1
)
)
PEDSELF
->
GetVehicle
(
)
->
GetHandlingData
(
)
->
SetEngineAcceleration
(
80.f
)
;
крашит при использовании
1.Ваш вопрос:
Код:
Ошибка (активно) E0167 аргумент типа "const char *" несовместим с параметром типа "PCHAR"
main.cpp
Код:
#include
#include "main.h"
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_KEYUP:
{
switch (wParam)
{
case VK_F10:
{
AddMessageJumpQ("Hello World: 2", 500, NULL, false);
}
case VK_F11:
{
AddMessageJumpQ("Hello World: 2", 500, NULL, false);
}
}
}
}
return CallWindowProcA(WNDPROC(pDLLProject.PrevWndFunc), hwnd, uMsg, wParam, lParam);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
{
pDLLProject.PrevWndFunc = SetWindowLongA(FindWindowA(NULL, "GTA:SA:MP"), GWL_WNDPROC, LONG(WindowProc));
}
}
return TRUE;
}
main.h
Код:
#define FUNC_CMessages__AddMessageJumpQ 0x69F1E0
void AddMessageJumpQ(PCHAR text, UINT time, USHORT flag, bool bPreviousBrief) // Функция показа сообщения на экране.
{
((void(__cdecl*)(PCHAR, UINT, USHORT, bool))FUNC_CMessages__AddMessageJumpQ)(text, time, flag, bPreviousBrief);
}
struct stDLLProject
{
LONG PrevWndFunc;
} pDLLProject;
1.Ваш вопрос:
Код:
Ошибка (активно) E0167 аргумент типа "const char *" несовместим с параметром типа "PCHAR"
main.cpp
Код:
#include
#include "main.h"
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_KEYUP:
{
switch (wParam)
{
case VK_F10:
{
AddMessageJumpQ("Hello World: 2", 500, NULL, false);
}
case VK_F11:
{
AddMessageJumpQ("Hello World: 2", 500, NULL, false);
}
}
}
}
return CallWindowProcA(WNDPROC(pDLLProject.PrevWndFunc), hwnd, uMsg, wParam, lParam);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
{
pDLLProject.PrevWndFunc = SetWindowLongA(FindWindowA(NULL, "GTA:SA:MP"), GWL_WNDPROC, LONG(WindowProc));
}
}
return TRUE;
}
main.h
Код:
#define FUNC_CMessages__AddMessageJumpQ 0x69F1E0
void AddMessageJumpQ(PCHAR text, UINT time, USHORT flag, bool bPreviousBrief) // Функция показа сообщения на экране.
{
((void(__cdecl*)(PCHAR, UINT, USHORT, bool))FUNC_CMessages__AddMessageJumpQ)(text, time, flag, bPreviousBrief);
}
struct stDLLProject
{
LONG PrevWndFunc;
} pDLLProject;
у тебя функция принимает изменяемый аргумент, а ты передаешь не изменяемый.
Делай так:
Код:
void AddMessageJumpQ(const PCHAR text, UINT time, USHORT flag, bool bPreviousBrief) // Функция показа сообщения на экране.
{
((void(__cdecl*)(const PCHAR, UINT, USHORT, bool))FUNC_CMessages__AddMessageJumpQ)(text, time, flag, bPreviousBrief);
}
у тебя функция принимает изменяемый аргумент, а ты передаешь не изменяемый.
Делай так:
Код:
void AddMessageJumpQ(const PCHAR text, UINT time, USHORT flag, bool bPreviousBrief) // Функция показа сообщения на экране.
{
((void(__cdecl*)(const PCHAR, UINT, USHORT, bool))FUNC_CMessages__AddMessageJumpQ)(text, time, flag, bPreviousBrief);
}
Код:
Ошибка (активно) E0167 аргумент типа "const char *" несовместим с параметром типа "PCHAR"
Ошибка C2664 "void AddMessageJumpQ(const PCHAR,UINT,USHORT,bool)": невозможно преобразовать аргумент 1 из "const char [15]" в "const PCHAR"
Код:
Ошибка (активно) E0167 аргумент типа "const char *" несовместим с параметром типа "PCHAR"
Ошибка C2664 "void AddMessageJumpQ(const PCHAR,UINT,USHORT,bool)": невозможно преобразовать аргумент 1 из "const char [15]" в "const PCHAR"
у тебя PCHAR это точно char*? если нет, то замени
у тебя PCHAR это точно char*? если нет, то замени
Как?) Я просто еще новичек в этом ремесле
kin4stat
06.10.2020, 18:12
Как?) Я просто еще новичек в этом ремесле
Просто замени PCHAR на char * в своем коде
underhazee
08.10.2020, 21:49
мужики в чем проблема
условие: Дано целое число N (> 0). Найти произведение N! = 1 • 2 • ... • N.
Код:
[CODE]
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
int n = 0;
cout > n;
for (int i = 1; i
в таком случае в консоль не выводится ничего, если в for написать int i = 0, выведется 0.
Izvinisb
08.10.2020, 22:04
[QUOTE="underhazee"]
мужики в чем проблема
условие: Дано целое число N (> 0). Найти произведение N! = 1 • 2 • ... • N.
Код:
[CODE]
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
int n = 0;
cout > n;
for (int i = 1; i
C++:
[CODE]
#include
int
main
(
)
{
uint64_t
n
,
fact
=
1
;
std
::
cin
>>
n
;
for
(
uint64_t
i
=
1
;
i
bl3ckside
10.10.2020, 11:43
С помощью каких библиотек можно получить кол-во онлайн игроков на сервере по IP сервера?
Язык C#.
Допустим у меня есть dll в чите. Как создать для него лоадер .exe чтобы еще его можно было отгрузить на кнопку?
loganhackerdff
11.10.2020, 00:03
@DarkP1xel (https://www.blast.hk/members/3658/) , помоги пж, я хочу получить CVehicle через handle машины, (пока-что только с SFAPI) я пробовал:
ты когда-то сказал что хендл это типо игрового id
CVehicle
Каждый транспорт как объект, равняется 2584 (0xA18) байтам и начинается с 0xC502AA0.
0xB74494 - Содержит указатель. Этот указатель:
+0 = Содержит указатель на первый элемент в пуле CVehicle
+4 = Содержит указатель на карту байтов показывающую какие элементы сейчас используются в пуле CVehicle
+8 = [dword] максимальное кол-во элементов в пуле CVehicle
+12 = [dword] текущее кол-во элементов в пуле CVehicle
C++:
DW pools_cars
=
*
(
DW
*
)
0xB74494
;
//
int
carid
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
inCarData
.
sVehicleID
;
int
veh_handle
=
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
GetCarHandleFromSAMPCarID
(
carid
)
;
DW car
=
*
(
DW
*
)
(
pools_cars
+
(
veh_handle
*
0xA18
)
)
;
////////////////////////////////////////////////////////////////////////////////////
DW pools_cars
=
*
(
DW
*
)
(
*
(
DW
*
)
0xB74494
)
;
int
carid
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
inCarData
.
sVehicleID
;
int
veh_handle
=
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
GetCarHandleFromSAMPCarID
(
carid
)
;
DW car
=
*
(
DW
*
)
(
pools_cars
+
(
veh_handle
*
0xA18
)
)
;
////////////////////////////////////////////////////////////////////////////////////
DW pools_cars
=
0xC502AA0
;
int
carid
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
inCarData
.
sVehicleID
;
int
veh_handle
=
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
GetCarHandleFromSAMPCarID
(
carid
)
;
DW car
=
*
(
DW
*
)
(
pools_cars
+
(
veh_handle
*
0xA18
)
)
;
но всё крашило
kin4stat
11.10.2020, 00:07
@DarkP1xel (https://www.blast.hk/members/3658/) , помоги пж, я хочу получить CVehicle через handle машины, (пока-что только с SFAPI) я пробовал:
ты когда-то сказал что хендл это типо игрового id
CVehicle
Каждый транспорт как объект, равняется 2584 (0xA18) байтам и начинается с 0xC502AA0.
0xB74494 - Содержит указатель. Этот указатель:
+0 = Содержит указатель на первый элемент в пуле CVehicle
+4 = Содержит указатель на карту байтов показывающую какие элементы сейчас используются в пуле CVehicle
+8 = [dword] максимальное кол-во элементов в пуле CVehicle
+12 = [dword] текущее кол-во элементов в пуле CVehicle
C++:
DW pools_cars
=
*
(
DW
*
)
0xB74494
;
//
int
carid
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
inCarData
.
sVehicleID
;
int
veh_handle
=
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
GetCarHandleFromSAMPCarID
(
carid
)
;
DW car
=
*
(
DW
*
)
(
pools_cars
+
(
veh_handle
*
0xA18
)
)
;
////////////////////////////////////////////////////////////////////////////////////
DW pools_cars
=
*
(
DW
*
)
(
*
(
DW
*
)
0xB74494
)
;
int
carid
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
inCarData
.
sVehicleID
;
int
veh_handle
=
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
GetCarHandleFromSAMPCarID
(
carid
)
;
DW car
=
*
(
DW
*
)
(
pools_cars
+
(
veh_handle
*
0xA18
)
)
;
////////////////////////////////////////////////////////////////////////////////////
DW pools_cars
=
0xC502AA0
;
int
carid
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
inCarData
.
sVehicleID
;
int
veh_handle
=
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
GetCarHandleFromSAMPCarID
(
carid
)
;
DW car
=
*
(
DW
*
)
(
pools_cars
+
(
veh_handle
*
0xA18
)
)
;
но всё крашило
Ты хочешь машину в которой ты сидишь получить?
loganhackerdff
11.10.2020, 00:10
Ты хочешь машину в которой ты сидишь получить?
Да, но не стандартным способом, чтоб получить свою машину, я использую -
C++:
DWORD me
=
*
(
DWORD
*
)
0xB6F5F0
;
DWORD car
=
*
(
DWORD
*
)
(
me
+
0x58C
)
;
В имгуи при попытке загрузки шрифта из пути имеющего русские символы, не получается загрузить шрифт.
https://forum.antichat.xyz/attachments/27582799/
Загружаю так:
C++:
io
.
Fonts
->
AddFontFromFileTTF
(
font
,
15.0f
,
&
icons_config
,
icons_ranges
)
;
Кто-то знает как можно решить эту проблему?
kin4stat
16.10.2020, 10:45
В имгуи при попытке загрузки шрифта из пути имеющего русские символы, не получается загрузить шрифт.
Загружаю так:
C++:
io
.
Fonts
->
AddFontFromFileTTF
(
font
,
15.0f
,
&
icons_config
,
icons_ranges
)
;
Кто-то знает как можно решить эту проблему?
Путь в utf-8 отдаешь?
делаю вот так, но не уверен, что это правильно
C++:
char
path
[
MAX_PATH
]
,
font
[
MAX_PATH
]
;
GetCurrentDirectory
(
MAX_PATH
,
path
)
;
sprintf
(
font
,
u8
"%s\\%s"
,
path
,
FONT_PATH
)
;
Это нелогично, ты обёртываешь под кодировку не путь, а только текст %s\\%s, поэтому ошибка, у тебя строка всё ещё не под utf8
Отдельно перекодируй
|| NN - NoName ||
22.10.2020, 20:07
https://forum.antichat.xyz/attachments/27587421/
C++:
#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
CALLBACK
cmd_show_info_player
(
std
::
string param
)
{
if
(
param
.
empty
(
)
)
return
;
int
i
=
std
::
stoi
(
param
)
;
char
buf
[
128
]
;
stRemotePlayer
*
pPlayer
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
;
if
(
!
pPlayer
)
return
;
sprintf
(
buf
,
"Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d"
,
pPlayer
->
szPlayerName
,
pPlayer
->
iPing
,
pPlayer
->
iScore
,
pPlayer
->
iIsNPC
,
pPlayer
->
pPlayerData
->
iAFKState
==
2
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
buf
)
;
}
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
SF
->
getSAMP
(
)
->
registerChatCommand
(
"showinfo"
,
cmd_show_info_player
)
;
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Bl"
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}
C++:
#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
CALLBACK
cmd_show_info_player
(
std
::
string param
)
{
if
(
param
.
empty
(
)
)
return
;
int
i
=
std
::
stoi
(
param
)
;
char
buf
[
128
]
;
stRemotePlayer
*
pPlayer
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
;
if
(
!
pPlayer
)
return
;
sprintf
(
buf
,
"Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d"
,
pPlayer
->
szPlayerName
,
pPlayer
->
iPing
,
pPlayer
->
iScore
,
pPlayer
->
iIsNPC
,
pPlayer
->
pPlayerData
->
iAFKState
==
2
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
buf
)
;
}
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
SF
->
getSAMP
(
)
->
registerChatCommand
(
"showinfo"
,
cmd_show_info_player
)
;
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Bl"
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}
Гайд - Интегрированная отладка asi/sf/dll плагинов в игре с помощью Visual Studio (https://www.blast.hk/threads/20320/)
прив Многие ли из вас знают, что с помощью Visual Studio можно отлаживать плагины прямо в игре и что делается это очень просто? Нет, блять, нихуя вы не знаете! Но я вас научу. Берём студию и проект своего плагина, идём в конфигурацию проекта на страницу "Debugging" (Отладка) и ставим такие...
www.blast.hk
настрой и посмотри
там скорее всего исключение в stoi вызывается, если больше sizeof(int) то std::out_of_range, если туда отправляется текст без цифр то std::invalid_argument
|| NN - NoName ||
22.10.2020, 20:11
Гайд - Интегрированная отладка asi/sf/dll плагинов в игре с помощью Visual Studio (https://www.blast.hk/threads/20320/)
прив Многие ли из вас знают, что с помощью Visual Studio можно отлаживать плагины прямо в игре и что делается это очень просто? Нет, блять, нихуя вы не знаете! Но я вас научу. Берём студию и проект своего плагина, идём в конфигурацию проекта на страницу "Debugging" (Отладка) и ставим такие...
www.blast.hk
настрой и посмотри
там скорее всего исключение в stoi вызывается, если больше sizeof(int) то std::out_of_range, если туда отправляется текст без цифр то std::invalid_argument
Сорри, я тупой нихуя не понял. Но, то что ты скинул(ссылку), я сделал уже.
Сорри, я тупой нихуя не понял
C++:
void
CALLBACK
si
(
std
::
string param
)
{
if
(
param
.
empty
(
)
||
param
.
length
(
)
>
23
)
return
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Please use /si "
)
;
try
{
int
id
=
std
::
stoi
(
param
)
;
if
(
id
>
SAMP_MAX_PLAYERS
-
5
)
_Xout_of_range
(
"stoi"
)
;
stRemotePlayer
*
pData
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
;
if
(
!
pData
)
throw
std
::
exception
(
"Player is offline"
)
;
std
::
string text
=
"ID: "
+
param
+
" | NAME: "
+
pData
.
name
// fields may be wrong
+
" | SCORE: "
+
to_string
(
pData
.
score
)
+
" | PING: "
+
to_string
(
pData
.
ping
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
text
.
c_str
(
)
)
;
}
catch
(
const
std
::
out_of_range
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Not more than 1000"
)
;
}
catch
(
const
std
::
invalid_argument
)
{
// here u can try find player by nickname
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"You didn't put number"
)
;
}
catch
(
const
std
::
exception
&
arg
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
arg
.
what
(
)
)
;
}
}
kin4stat
22.10.2020, 20:31
C++:
void
CALLBACK
si
(
std
::
string param
)
{
if
(
param
.
empty
(
)
||
param
.
length
(
)
>
23
)
return
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Please use /si "
)
;
try
{
int
id
=
std
::
stoi
(
param
)
;
if
(
id
>
SAMP_MAX_PLAYERS
-
5
)
_Xout_of_range
(
"stoi"
)
;
stRemotePlayer
*
pData
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
;
if
(
!
pData
)
throw
std
::
exception
(
"Player is offline"
)
;
std
::
string text
=
"ID: "
+
param
+
" | NAME: "
+
pData
.
name
// fields may be wrong
+
" | SCORE: "
+
to_string
(
pData
.
score
)
+
" | PING: "
+
to_string
(
pData
.
ping
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
text
.
c_str
(
)
)
;
}
catch
(
const
std
::
out_of_range
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Not more than 1000"
)
;
}
catch
(
const
std
::
invalid_argument
)
{
// here u can try find player by nickname
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"You didn't put number"
)
;
}
catch
(
const
std
::
exception
&
arg
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
arg
.
what
(
)
)
;
}
}
Исключения в c++ чересчур медленные. Для чтения числа можно использовать scanf, либо regex_match.
Исключения в c++ чересчур медленные. Для чтения числа можно использовать scanf, либо regex_match.
Добро пожаловать в 2к20. Если исключение не брошено, то оно ничего не стоит
kin4stat
22.10.2020, 20:39
Добро пожаловать в 2к20. Если исключение не брошено, то оно ничего не стоит
Тоже верно. :D
(Оптимизация головного мозга, извините)
(Оптимизация головного мозга, извините)
Разве? Тогда как ты объяснишь рекомендацию использовать регулярки вместо stoi? Вот совет тебе по конвертации скроки в число и обратно - используй std::from_chars и std::to_chars
kin4stat
22.10.2020, 20:47
Разве? Тогда как ты объяснишь рекомендацию использовать регулярки вместо stoi? Вот совет тебе по конвертации скроки в число и обратно - используй std::from_chars и std::to_chars
Ну я хотел для валидации написать, но что-то пошло не так. А так да, std и boost рулит плюсами
Ну я хотел для валидации написать, но что-то пошло не так. А так да, std и boost рулит плюсами
АСТАНАВИСЬ! stoi и regex_match тоже в std
kin4stat
22.10.2020, 20:48
АСТАНАВИСЬ! stoi и regex_match тоже в std
Я имел ввиду другое ну да по***, забей кароч у меня шиза да
frosjkee
23.10.2020, 11:08
Anim press key как сделать ?
|| NN - NoName ||
23.10.2020, 17:57
Сорри я тупой и не понимаю схуяли игра зависает из за этого блока.
https://forum.antichat.xyz/attachments/27587995/
Сорри я тупой и не понимаю схуяли игра зависает из за этого блока.
Ты в основной поток пихаешь цикл, и игра ждёт, пока этот цикл завершится, чтобы продолжить работу остальных функций
Игра не зависает, а ждёт исполнение этого цикла.
Чтобы не зависало, нужно отдельный поток создавать, детачить и в него уже цикл пихать
kin4stat
23.10.2020, 18:22
Ты в основной поток пихаешь цикл, и игра ждёт, пока этот цикл завершится, чтобы продолжить работу остальных функций
Игра не зависает, а ждёт исполнение этого цикла.
Чтобы не зависало, нужно отдельный поток создавать, детачить и в него уже цикл пихать
Или не использовать потоки, а использовать хуки обновления игры, которые выполняются раз в кадр
Dark_Knight
28.10.2020, 23:34
Есть же параметр restart булевый в СтримПлеей.
Dark_Knight
29.10.2020, 21:23
Кинь код лучше.
Musaigen
07.11.2020, 17:02
Как можно перезаписать входящий пакет, без использования SF?
kin4stat
07.11.2020, 17:04
Как можно перезаписать входящий пакет, без использования SF?
R1:
C++:
typedef
Packet
*
(
__fastcall
*
RakPeer_Receive
)
(
void
*
)
;
RakPeer_Receive fpReceive
=
NULL
;
Packet
*
__fastcall
HOOK_RakPeer_Receive
(
void
*
pRakPeer
)
{
Packet
*
packet
=
fpReceive
(
pRakPeer
)
;
if
(
packet
!=
nullptr
&&
packet
->
data
)
{
// your code
}
return
packet
;
}
MH_CreateAndEnableHook
(
dwSampModule
+
0x31180
,
&
HOOK_RakPeer_Receive
,
reinterpret_cast
(
&
fpReceive
)
)
Musaigen
07.11.2020, 17:08
R1:
C++:
typedef
Packet
*
(
__fastcall
*
RakPeer_Receive
)
(
void
*
)
;
RakPeer_Receive fpReceive
=
NULL
;
Packet
*
__fastcall
HOOK_RakPeer_Receive
(
void
*
pRakPeer
)
{
Packet
*
packet
=
fpReceive
(
pRakPeer
)
;
if
(
packet
!=
nullptr
&&
packet
->
data
)
{
// your code
}
return
packet
;
}
MH_CreateAndEnableHook
(
dwSampModule
+
0x31180
,
&
HOOK_RakPeer_Receive
,
reinterpret_cast
(
&
fpReceive
)
)
А это тут при чём, меня интересует как перезаписать входящий пакет, а не как хукнуть его.
kin4stat
07.11.2020, 17:08
А это тут при чём, меня интересует как перезаписать входящий пакет, а не как хукнуть его.
Ну так в хуке и перезаписываешь нужную инфу, не?
Как можно перезаписать входящий пакет, без использования SF?
mod_sa/src/HookedRakClient.cpp at v4.4.1.3 · BlastHackNet/mod_sa (https://github.com/BlastHackNet/mod_s0beit_sa-1/blob/v4.4.1.3/src/HookedRakClient.cpp#L48)
Multi-purpose cheat tool for GTA San Andreas and SA-MP - BlastHackNet/mod_sa
github.com
Joni Scripts
08.11.2020, 02:23
Как сделать проверку на этот диалог в RPC который дает мне сервер, код ниже не работает, find не умею пользоваться
https://forum.antichat.xyz/attachments/27600108/
1604788008277.pngJoni Scripts · 8 Ноя 2020 в 01:23' data-fancybox="lb-post-600108" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/74867/" style="cursor: pointer;" title="1604788008277.png">
https://forum.antichat.xyz/attachments/27600108/
kin4stat
08.11.2020, 03:21
Как сделать проверку на этот диалог в RPC который дает мне сервер, код ниже не работает, find не умею пользоваться
C++:
if
(
strcmp
(
info
,
"Ник пригласившего игрока бла-бла"
)
==
0
)
{
}
// тоже самое, но в c++ стиле
if
(
std
::
string
{
info
}
==
"Ник пригласившго бла-бла"
)
{
}
Как сделать проверку на этот диалог в RPC который дает мне сервер, код ниже не работает, find не умею пользоваться
C++:
if
(
strstr
(
cInfo
,
"Введите ник игрока, пригласившего вас на сервер или промокод"
)
&&
strstr
(
cCaption
,
"{FFFFFF}Приглашение | {ae433d}Регистрация"
)
)
{
//
}
For example:
C++:
auto
sendPacketHandler
(
BitStream
*
const
bitStream
,
const
uint32_t
packetPriority
,
const
uint32_t
packetReliability
,
const
char
orderingChannel
)
const
{
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wattributes"
using
sendPacket_t
=
bool
(
__thiscall
*
)
(
const
RakClient
*
const
,
BitStream
*
const
,
const
uint32_t
,
const
uint32_t
,
const
char
)
;
#pragma GCC diagnostic pop
uint8_t
packetId
{
}
;
bitStream
->
Read
(
packetId
)
;
if
(
packetId
==
ID_PLAYER_SYNC
)
{
stOnFootData onFootData
{
}
;
bitStream
->
Read
(
reinterpret_cast
(
&
onFootData
)
,
sizeof
(
stOnFootData
)
)
;
bitStream
->
ResetWritePointer
(
)
;
onFootData
.
fPosition
[
2
]
+=
5.f
;
bitStream
->
Write
(
packetId
)
;
bitStream
->
Write
(
reinterpret_cast
(
&
onFootData
)
,
sizeof
(
stOnFootData
)
)
;
}
auto
sendPacket
{
sendPacket_t
(
originalVirtualTable
[
6
]
)
}
;
return
sendPacket
(
rakClientInterface
,
bitStream
,
packetPriority
,
packetReliability
,
orderingChannel
)
;
}
without SF
Gunborg Johansson
12.11.2020, 21:56
without SF
There I showed you how to overwrite an outcoming packet instead of an incoming one. From the context, I realized that you need a ready-made solution.
Example of hooking the method of sending outcoming synchronization:
constexpr
auto
sampModuleHandle
{
"samp.dll"
}
;
constexpr
auto
sampRakClientOffset
{
0x3C9
}
;
constexpr
auto
sampNetGameOffset
{
0x21A0F8
}
;
constexpr
auto
sampRakClientSize
{
55u
}
;
constexpr
auto
sampPlayerSync
{
207u
}
;
constexpr
auto
sampVehicleSync
{
200u
}
;
constexpr
auto
sampAimSync
{
203u
}
;
constexpr
auto
sampBulletSync
{
206u
}
;
constexpr
auto
sampSpectatorSync
{
212u
}
;
class
RakClient
;
class
CNetGame
;
RakClient
*
rakClientInterface
{
}
;
CNetGame
*
netGame
{
}
;
uint32_t
*
fakeVirtualTable
{
}
;
uint32_t
*
originalVirtualTable
{
}
;
class
AnyClassName
{
public
:
auto
sendPacketHandler
(
BitStream
*
const
bitStream
,
const
uint32_t
packetPriority
,
const
uint32_t
packetReliability
,
const
char
orderingChannel
)
const
{
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wattributes"
using
sendPacket_t
=
bool
(
__thiscall
*
)
(
const
RakClient
*
const
,
BitStream
*
const
,
const
uint32_t
,
const
uint32_t
,
const
char
)
;
#pragma GCC diagnostic pop
uint8_t
packetId
{
}
;
bitStream
->
Read
(
packetId
)
;
if
(
packetId
==
sampPlayerSync
)
{
stOnFootData onFootData
{
}
;
bitStream
->
Read
(
reinterpret_cast
(
&
onFootData
)
,
sizeof
(
stOnFootData
)
)
;
bitStream
->
ResetWritePointer
(
)
;
// Do whatever you want with BitStream.
bitStream
->
Write
(
packetId
)
;
bitStream
->
Write
(
reinterpret_cast
(
&
onFootData
)
,
sizeof
(
stOnFootData
)
)
;
}
auto
sendPacket
{
sendPacket_t
(
originalVirtualTable
[
6
]
)
}
;
return
sendPacket
(
rakClientInterface
,
bitStream
,
packetPriority
,
packetReliability
,
orderingChannel
)
;
}
AnyClassName
(
)
{
std
::
thread
hookThread
(
[
&
]
(
)
{
while
(
true
)
{
auto
moduleHandle
{
uint32_t
(
::
GetModuleHandle
(
sampModuleHandle
)
)
}
;
if
(
moduleHandle
)
{
netGame
=
*
reinterpret_cast
(
moduleHandle
+
sampNetGameOffset
)
;
if
(
netGame
)
{
rakClientInterface
=
*
reinterpret_cast
(
uint32_t
(
netGame
)
+
sampRakClientOffset
)
;
if
(
rakClientInterface
)
{
originalVirtualTable
=
*
reinterpret_cast
(
rakClientInterface
)
;
fakeVirtualTable
=
new
uint32_t
[
sampRakClientSize
]
;
memcpy
(
fakeVirtualTable
,
originalVirtualTable
,
sampRakClientSize
*
sizeof
(
uint32_t
)
)
;
*
reinterpret_cast
(
rakClientInterface
)
=
fakeVirtualTable
;
fakeVirtualTable
[
6
]
=
force_cast
(
&
AntiCheat
::
sendPacketHandler
)
;
break
;
}
}
}
std
::
this_thread
::
sleep_for
(
std
::
chrono
::
milliseconds
(
5
)
)
;
}
}
)
;
hookThread
.
detach
(
)
;
}
}
AnyObjectName
;
R1:
C++:
typedef
Packet
*
(
__fastcall
*
RakPeer_Receive
)
(
void
*
)
;
RakPeer_Receive fpReceive
=
NULL
;
Packet
*
__fastcall
HOOK_RakPeer_Receive
(
void
*
pRakPeer
)
{
Packet
*
packet
=
fpReceive
(
pRakPeer
)
;
if
(
packet
!=
nullptr
&&
packet
->
data
)
{
// your code
}
return
packet
;
}
MH_CreateAndEnableHook
(
dwSampModule
+
0x31180
,
&
HOOK_RakPeer_Receive
,
reinterpret_cast
(
&
fpReceive
)
)
This is a RakPeer hook, not a RakClient.
kin4stat
12.11.2020, 22:17
This is a RakPeer hook, not a RakClient.
That makes a difference?
Gunborg Johansson
12.11.2020, 22:18
That makes a difference?
Yes.
Ввести одномерный массив целых чисел размерностью N. Сформировать новый массив из элементов исходного массива, кратных 1-му элементу массива.
Помогите плз лабу сделать c/c++
kin4stat
13.11.2020, 11:56
Ввести одномерный массив целых чисел размерностью N. Сформировать новый массив из элементов исходного массива, кратных 1-му элементу массива.
Помогите плз лабу сделать c/c++
C++:
[CODE]
#include
#include
int
main
(
)
{
std
::
vector
arrayOutput
;
int
n
;
int
first
=
0
;
std
::
cin
>>
n
;
std
::
cin
>>
first
;
for
(
int
i
=
0
;
i
>
temp
;
if
(
temp
%
first
==
0
)
arrayOutput
.
push_back
(
temp
)
;
}
for
(
std
::
vector
::
iterator i
=
arrayOutput
.
begin
(
)
;
i
!=
arrayOutput
.
end
(
)
;
i
++
)
std
::
cout
AdCKuY_DpO4uLa
13.11.2020, 17:35
У меня есть 3 шрифта в ImGui, первый Arial, его я юзаю во всем проекте. Второй - иконочный и 3-й (стилизованный), я хочу юзать иконочный и стилизованный одновременно, но если я пушу (ImGui::PushFont) сразу оба шрифта подряд, то работает только тот, который я пушил вторым и Arial. Вопрос такой: как юзать стилизованный шрифт и иконочный одновременно?
Ввести одномерный массив целых чисел размерностью N. Сформировать новый массив из элементов исходного массива, кратных 1-му элементу массива.
Помогите плз лабу сделать c/c++
C++:
[CODE]
#include
#include
int
main
(
)
{
const
size_t N
=
8
;
int
sourceArray
[
N
]
=
{
}
;
std
::
vector
outArray
;
for
(
size_t i
=
0
;
i
>
sourceArray
[
i
]
;
for
(
auto
value
:
sourceArray
)
if
(
value
%
sourceArray
[
0
]
==
0
)
outArray
.
push_back
(
value
)
;
for
(
auto
value
:
outArray
)
std
::
cout
upd: не увидел что спрашивал ты утром и что тебе уже ответили
Я хочу сделать триггер бот для кс 1.6, и уже нашёл все значения. Скажите, как можно симулировать нажатие мыши, чтобы при наведении на врага скрипт сам нажимал ЛКМ?
C++:
#include
#include
using
namespace
std
;
int
main
(
)
{
DWORD PID
;
DWORD Memory
=
0x0D8011F8
;
HWND Window
=
FindWindowA
(
0
,
(
"Counter-Strike"
)
)
;
int
mem
;
GetWindowThreadProcessId
(
Window
,
&
PID
)
;
HANDLE Process
=
OpenProcess
(
PROCESS_ALL_ACCESS
,
FALSE
,
PID
)
;
ReadProcessMemory
(
Process
,
(
LPVOID
)
Memory
,
&
mem
,
sizeof
(
mem
)
,
0
)
;
if
(
mem
==
2
)
{
}
}
checkdasound
15.11.2020, 21:03
Я хочу сделать триггер бот для кс 1.6, и уже нашёл все значения. Скажите, как можно симулировать нажатие мыши, чтобы при наведении на врага скрипт сам нажимал ЛКМ?
C++:
#include
#include
using
namespace
std
;
int
main
(
)
{
DWORD PID
;
DWORD Memory
=
0x0D8011F8
;
HWND Window
=
FindWindowA
(
0
,
(
"Counter-Strike"
)
)
;
int
mem
;
GetWindowThreadProcessId
(
Window
,
&
PID
)
;
HANDLE Process
=
OpenProcess
(
PROCESS_ALL_ACCESS
,
FALSE
,
PID
)
;
ReadProcessMemory
(
Process
,
(
LPVOID
)
Memory
,
&
mem
,
sizeof
(
mem
)
,
0
)
;
if
(
mem
==
2
)
{
}
}
могу помочь только с эмуляцией выстрела
C++:
#include
void
Shoot
(
)
{
INPUT Input
=
{
INPUT_MOUSE
,
0
,
0
,
0
,
MOUSEEVENTF_LEFTDOWN
,
0
,
0
}
;
SendInput
(
1
,
&
Input
,
sizeof
(
INPUT
)
)
;
Sleep
(
100
)
;
Input
.
mi
.
dwFlags
=
MOUSEEVENTF_LEFTUP
;
SendInput
(
1
,
&
Input
,
sizeof
(
INPUT
)
)
;
}
kin4stat
15.11.2020, 21:04
могу помочь только с эмуляцией выстрела
C++:
#include
void
Shoot
(
)
{
INPUT Input
=
{
INPUT_MOUSE
,
0
,
0
,
0
,
MOUSEEVENTF_LEFTDOWN
,
0
,
0
}
;
SendInput
(
1
,
&
Input
,
sizeof
(
INPUT
)
)
;
Sleep
(
100
)
;
Input
.
mi
.
dwFlags
=
MOUSEEVENTF_LEFTUP
;
SendInput
(
1
,
&
Input
,
sizeof
(
INPUT
)
)
;
}
костыли наше все
Вызываем вот такое:
C++:
void
SendChat
(
std
::
string msg
)
{
typedef
int
(
__stdcall
*
SendMsg
)
(
const
char
*
)
;
static
SendMsg sendMsg
=
(
SendMsg
)
(
dwSAMP
+
0x68E65
)
;
sendMsg
(
msg
.
c_str
(
)
)
;
}
Получаем вот такое:
1605553766654.pngVintik · 16 Ноя 2020 в 22:09' data-fancybox="lb-post-607069" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/76066/" style="cursor: pointer;" title="1605553766654.png">
https://forum.antichat.xyz/attachments/27607069/
И чё делать? 😁
@KiN4StAt (https://www.blast.hk/members/161331/) @checkdasound (https://www.blast.hk/members/174217/) @Cake_ (https://www.blast.hk/members/128690/) @redcode (https://www.blast.hk/members/216568/) помогите плиз
Gunborg Johansson
17.11.2020, 11:22
Вызываем вот такое:
C++:
void
SendChat
(
std
::
string msg
)
{
typedef
int
(
__stdcall
*
SendMsg
)
(
const
char
*
)
;
static
SendMsg sendMsg
=
(
SendMsg
)
(
dwSAMP
+
0x68E65
)
;
sendMsg
(
msg
.
c_str
(
)
)
;
}
Получаем вот такое:
И чё делать? 😁
@KiN4StAt (https://www.blast.hk/members/161331/) @checkdasound (https://www.blast.hk/members/174217/) @Cake_ (https://www.blast.hk/members/128690/) @redcode (https://www.blast.hk/members/216568/) помогите плиз
C++:
// samp.dll (r1):
.
text
:
10068E60
fsub ds
:
flt_100D390C
What are you going to call?
C++:
// samp.dll (r1):
.
text
:
10068E60
fsub ds
:
flt_100D390C
What are you going to call?
This function. It's not R1.
This function. It's not R1.
Все верно, он тебе показал, что по твоему адресу лежит инструкция
fsub ds:flt_100D390C
, а не функция отправки в чат
Все верно, он тебе показал, что по твоему адресу лежит инструкция
fsub ds:flt_100D390C
, а не функция отправки в чат
но он же говорит, что это смещение не с [0.3.7-]R1
CleanLegend
17.11.2020, 12:06
Вызываем вот такое:
C++:
void
SendChat
(
std
::
string msg
)
{
typedef
int
(
__stdcall
*
SendMsg
)
(
const
char
*
)
;
static
SendMsg sendMsg
=
(
SendMsg
)
(
dwSAMP
+
0x68E65
)
;
sendMsg
(
msg
.
c_str
(
)
)
;
}
Получаем вот такое:
И чё делать? 😁
@KiN4StAt (https://www.blast.hk/members/161331/) @checkdasound (https://www.blast.hk/members/174217/) @Cake_ (https://www.blast.hk/members/128690/) @redcode (https://www.blast.hk/members/216568/) помогите плиз
Она вроде из класса, поэтому нужно еще передавать указатель, а у тебя идет чисто аргумент в виде указателя на текст
но он же говорит, что это смещение не с [0.3.7-]R1
нужную ему версию SAMP он тоже не написал
Gunborg Johansson
17.11.2020, 13:38
Она вроде из класса, поэтому нужно еще передавать указатель, а у тебя идет чисто аргумент в виде указателя на текст
Then it is a __thiscall and not __stdcall. It needs to pass a pointer to CChat.
нужную ему версию SAMP он тоже не написал
Amazing CRMP какую использует? мне она и нужна.
Gunborg Johansson
17.11.2020, 13:42
Amazing CRMP какую использует? мне она и нужна.
Give me samp.dll
R3 насколько я помню
BlastHackNet/SAMP-API (https://github.com/BlastHackNet/SAMP-API/blob/multiver/sampapi/src/0.3.7-R3-1/CChat.cpp)
A library for interacting with functions, classes and structures of SA-MP client - BlastHackNet/SAMP-API
github.com
изучай
Amazing CRMP какую использует? мне она и нужна.
посмотри в свойствах samp.dll
Она вроде из класса, поэтому нужно еще передавать указатель, а у тебя идет чисто аргумент в виде указателя на текст
C++:
void
SendChat
(
const
std
::
string
&
text
)
{
typedef
int
(
__stdcall
*
SendCommand
)
(
const
char
*
)
;
typedef
int
(
__stdcall
*
SendText
)
(
const
char
*
)
;
static
SendCommand sendCommand
=
(
SendCommand
)
(
(
DWORD
)
GetModuleHandle
(
"samp.dll"
)
+
0x65C60
)
;
static
SendText sendText
=
(
SendText
)
(
(
DWORD
)
GetModuleHandle
(
"samp.dll"
)
+
0x57F0
)
;
/*
какой-нибудь способ конвертировать std::string -> const char*, чтобы оно не крашило через n повторений
*/
if
(
text
[
0
]
==
'/'
)
sendCommand
(
cstr
)
;
else
sendText
(
cstr
)
;
}
Почему то тут не передаёт человек только указатель на строку и у него работает (если что, из этой (https://www.blast.hk/threads/58692/#post-522187) темы)
R3 насколько я помню
BlastHackNet/SAMP-API (https://github.com/BlastHackNet/SAMP-API/blob/multiver/sampapi/src/0.3.7-R3-1/CChat.cpp)
A library for interacting with functions, classes and structures of SA-MP client - BlastHackNet/SAMP-API
github.com
изучай
R2 это
https://forum.antichat.xyz/attachments/27607345/
Gunborg Johansson
17.11.2020, 13:48
C++:
void
SendChat
(
const
std
::
string
&
text
)
{
typedef
int
(
__stdcall
*
SendCommand
)
(
const
char
*
)
;
typedef
int
(
__stdcall
*
SendText
)
(
const
char
*
)
;
static
SendCommand sendCommand
=
(
SendCommand
)
(
(
DWORD
)
GetModuleHandle
(
"samp.dll"
)
+
0x65C60
)
;
static
SendText sendText
=
(
SendText
)
(
(
DWORD
)
GetModuleHandle
(
"samp.dll"
)
+
0x57F0
)
;
/*
какой-нибудь способ конвертировать std::string -> const char*, чтобы оно не крашило через n повторений
*/
if
(
text
[
0
]
==
'/'
)
sendCommand
(
cstr
)
;
else
sendText
(
cstr
)
;
}
Почему то тут не передаёт человек только указатель на строку и у него работает (если что, из этой (https://www.blast.hk/threads/58692/#post-522187) темы)
C++:
const
uint32_t
sampHandle
=
.
.
.
;
void
AddRecail
(
const
char
*
const
recailString
)
{
using
AddRecail_t
=
void
(
__thiscall
*
)
(
class
CInput
*
,
const
char
*
const
)
;
auto
addRecail
{
reinterpret_cast
(
sampHandle
+
0x68E60
)
}
;
addRecail
(
*
reinterpret_cast
(
sampHandle
+
0x26E8CC
)
,
recailString
)
;
}
R2 это
дллка р3
https://forum.antichat.xyz/attachments/27607347/
калкор лентяй не обновил инфу или забыл
Gunborg Johansson
17.11.2020, 13:50
C++:
const
uint32_t
sampHandle
=
.
.
.
;
void
AddRecail
(
const
char
*
const
recailString
)
{
using
AddRecail_t
=
void
(
__thiscall
*
)
(
class
CInput
*
,
const
char
*
const
)
;
auto
addRecail
{
reinterpret_cast
(
sampHandle
+
0x68E60
)
}
;
addRecail
(
*
reinterpret_cast
(
sampHandle
+
0x26E8CC
)
,
recailString
)
;
}
Just don't forget to check CInput for nullptr.
дллка р3
калкор лентяй не обновил инфу или забыл
Да, ты прав
Да, ты прав
То есть что мне в итоге надо сделать, чтобы не было моей ошибки: EXCEPTION_ACCESS_VIOLATION?
Gunborg Johansson
17.11.2020, 13:55
То есть что мне в итоге надо сделать, чтобы не было моей ошибки: EXCEPTION_ACCESS_VIOLATION?
I threw you the code above, check CInput for nullptr and everything will work.
То есть что мне в итоге надо сделать, чтобы не было моей ошибки: EXCEPTION_ACCESS_VIOLATION?
https://github.com/BlastHackNet/SAMP-API/blob/multiver/sampapi/src/0.3.7-R3-1/CInput.cpp#L70 Отправка команд
https://github.com/BlastHackNet/SAMP-API/blob/multiver/sampapi/src/0.3.7-R3-1/CLocalPlayer.cpp#L170 Отправка обычного текста
I threw you the code above, check CInput for nullptr and everything will work.
Error C2198 void (__thiscall *)(AddRecail::CInput,AddRecail::CInput *,const char *): слишком мало аргументов для вызова
too few arguments to call
Gunborg Johansson
17.11.2020, 14:02
Error C2198 void (__thiscall *)(AddRecail::CInput,AddRecail::CInput *,const char *): слишком мало аргументов для вызова
Show me the code
Show me the code
C++:
void
AddRecail
(
const
char
*
const
recailString
)
{
using
AddRecail_t
=
void
(
__thiscall
*
)
(
class
CInput
*
,
const
char
*
const
)
;
auto
addRecail
{
reinterpret_cast
(
dwSAMP
+
0x68E60
)
}
;
addRecail
(
*
reinterpret_cast
(
dwSAMP
+
0x26E8CC
)
,
recailString
)
;
}
Gunborg Johansson
17.11.2020, 14:09
C++:
void
AddRecail
(
const
char
*
const
recailString
)
{
using
AddRecail_t
=
void
(
__thiscall
*
)
(
class
CInput
*
,
const
char
*
const
)
;
auto
addRecail
{
reinterpret_cast
(
dwSAMP
+
0x68E60
)
}
;
addRecail
(
*
reinterpret_cast
(
dwSAMP
+
0x26E8CC
)
,
recailString
)
;
}
Strange, on MinGW compiles. What line is the error on?
Strange, on MinGW compiles. What line is the error on?
6
Gunborg Johansson
17.11.2020, 14:15
6
C++:
class
CInput
;
void
AddRecail
(
const
char
*
const
recailString
)
{
using
AddRecail_t
=
void
(
__thiscall
*
)
(
CInput
*
,
const
char
*
const
)
;
auto
addRecail
{
reinterpret_cast
(
dwSAMP
+
0x68E60
)
}
;
addRecail
(
*
reinterpret_cast
(
dwSAMP
+
0x26E8CC
)
,
recailString
)
;
}
Как можно рисовать на загрузочном экране SA-MP'a? (черный экран и где логотип nvdia, raknet и т.д)
kin4stat
23.11.2020, 01:02
Как можно рисовать на загрузочном экране SA-MP'a? (черный экран и где логотип nvdia, raknet и т.д)
hook directx после появления окна игры
hook directx после появления окна игры
Есть ли у тебя адрес это directx device?
CleanLegend
23.11.2020, 09:57
Есть ли у тебя адрес это directx device?
C++:
0xC97C28
гайд - https://www.blast.hk/threads/32712/
Как с помощью samp api (https://github.com/BlastHackNet/SAMP-API) можно получить сообщения, которые отправляются в чат?
kin4stat
25.11.2020, 01:49
Как с помощью samp api (https://github.com/BlastHackNet/SAMP-API) можно получить сообщения, которые отправляются в чат?
Никак
Никак
Ок, а без RakNet можно же захукать функцию, которая выводит в чат?
kin4stat
25.11.2020, 02:11
Ок, а без RakNet можно же захукать функцию, которая выводит в чат?
Да
Да
Какой адрес и сигнатура у этой функции? Я попробовал похукать функции которые в samp api (CChat::AddChatMessage / CChat::AddMessage). Одна скрашила, другая не выводит ничего в лог.
Dark_Knight
25.11.2020, 03:37
Хук как ставишь?
Хук как ставишь?
x86 jmp (detour) hook. По адресу: base + 0x64450 / base + 0x645A0 (https://github.com/BlastHackNet/SAMP-API/blob/multiver/sampapi/src/0.3.7-R1/CChat.cpp#L84-L90)
UPD: Крашит AddChatMessage. Код:
C++:
[CODE]
PLH
::
CapstoneDisassembler
dis2
(
PLH
::
Mode
::
x86
)
;
PLH
::
x86Detour
detour2
(
sampapi
::
GetAddress
(
0x678A0
)
,
(
uint64_t
)
&
hk_AddChatMessage
,
&
hookAddChatMessageTramp
,
dis2
)
;
detour2
.
hook
(
)
;
void
CALLBACK
hk_AddChatMessage
(
int
nType
,
const
char
*
szText
,
const
char
*
szPrefix
,
unsigned
long
textColor
,
unsigned
long
prefixColor
)
{
f
kin4stat
25.11.2020, 08:29
[QUOTE="dekname"]
x86 jmp (detour) hook. По адресу: base + 0x64450 / base + 0x645A0 (https://github.com/BlastHackNet/SAMP-API/blob/multiver/sampapi/src/0.3.7-R1/CChat.cpp#L84-L90)
UPD: Крашит AddChatMessage. Код:
C++:
[CODE]
PLH
::
CapstoneDisassembler
dis2
(
PLH
::
Mode
::
x86
)
;
PLH
::
x86Detour
detour2
(
sampapi
::
GetAddress
(
0x678A0
)
,
(
uint64_t
)
&
hk_AddChatMessage
,
&
hookAddChatMessageTramp
,
dis2
)
;
detour2
.
hook
(
)
;
void
CALLBACK
hk_AddChatMessage
(
int
nType
,
const
char
*
szText
,
const
char
*
szPrefix
,
unsigned
long
textColor
,
unsigned
long
prefixColor
)
{
f
Есть ли Wiki по функциям для samp api как это для Lua?
__thiscall функция потому что
Я попытался захукать через __fastcall (как есть методы в инете). В лог даже вывело: Connecting to xxx.xx.x.x:7777...
Но после этого крашнуло с экшешином:
https://i.imgur.com/njMQQq3.png
Код:
C++:
PLH
::
CapstoneDisassembler
dis2
(
PLH
::
Mode
::
x86
)
;
PLH
::
x86Detour
detour2
(
sampapi
::
GetAddress
(
0x64010
)
,
(
uint64_t
)
&
hk_AddChatMessage
,
&
hookAddChatMessageTramp
,
dis2
)
;
detour2
.
hook
(
)
;
Код:
void __fastcall hk_AddChatMessage(void* pCChat, const char* szPrefix, unsigned long prefixColor, const char* szText)
{
if (pCChat == nullptr)
{
return;
}
f (hk_AddChatMessage))(pCChat, szPrefix, prefixColor, szText);
}
FnCast:
C++:
#define PH_UNUSED(a) (void)a
C++:
template
T
FnCast
(
uint64_t
fnToCast
,
T pFnCastTo
)
{
PH_UNUSED
(
pFnCastTo
)
;
return
(
T
)
fnToCast
;
}
Как правильно захучить __thiscall?
Gunborg Johansson
25.11.2020, 17:03
Я попытался захукать через __fastcall (как есть методы в инете). В лог даже вывело: Connecting to xxx.xx.x.x:7777...
Но после этого крашнуло с экшешином:
https://i.imgur.com/njMQQq3.png
Код:
C++:
PLH
::
CapstoneDisassembler
dis2
(
PLH
::
Mode
::
x86
)
;
PLH
::
x86Detour
detour2
(
sampapi
::
GetAddress
(
0x64010
)
,
(
uint64_t
)
&
hk_AddChatMessage
,
&
hookAddChatMessageTramp
,
dis2
)
;
detour2
.
hook
(
)
;
Код:
void __fastcall hk_AddChatMessage(void* pCChat, const char* text, DWORD textColor)
{
if (pCChat == nullptr)
{
return;
}
f
T
FnCast
(
uint64_t
fnToCast
,
T pFnCastTo
)
{
PH_UNUSED
(
pFnCastTo
)
;
return
(
T
)
fnToCast
;
}
Как правильно захучить __thiscall?
They add all sorts like PolyHook libraries to the project, and they can't figure them out themselves. At least learn the hook logic.
Как правильно захучить __thiscall?
Использовать __fastcall и не терять EDX.
C++:
// прототип функции
typedef
void
(
__fastcall
*
hookedAddChatMessage_t
)
(
void
*
_this
,
DWORD EDX
,
const
char
*
text
,
DWORD color
)
;
// указатель на оригинальную функцию / трамплин
hookedAddChatMessage_t orig_AddChatMessage
;
void
__fastcall
hooked_AddChatMessage
(
void
*
_this
,
DWORD EDX
,
const
char
*
text
,
DWORD color
)
{
// любые действия
return
orig_AddChatMessage
(
_this
,
EDX
,
text
,
color
)
;
}
Использовать __fastcall и не терять EDX.
C++:
// прототип функции
typedef
void
(
__fastcall
*
hookedAddChatMessage_t
)
(
void
*
_this
,
DWORD EDX
,
const
char
*
text
,
DWORD color
)
;
// указатель на оригинальную функцию / трамплин
hookedAddChatMessage_t orig_AddChatMessage
;
void
__fastcall
hooked_AddChatMessage
(
void
*
_this
,
DWORD EDX
,
const
char
*
text
,
DWORD color
)
{
// любые действия
return
orig_AddChatMessage
(
_this
,
EDX
,
text
,
color
)
;
}
С таким кодом просто крашит (в логе даже нет сообщения о коннекте):
C++:
using
AddChatMessage_t
=
void
(
__thiscall
*
)
(
void
*
pCChat
,
DWORD EDX
,
const
char
*
szPrefix
,
unsigned
long
prefixColor
,
const
char
*
szText
)
;
C++:
void
__fastcall
hk_AddChatMessage
(
void
*
pCChat
,
DWORD EDX
,
const
char
*
szPrefix
,
unsigned
long
prefixColor
,
const
char
*
szText
)
{
if
(
pCChat
==
nullptr
)
{
return
;
}
f
(
hk_AddChatMessage
)
)
(
pCChat
,
EDX
,
szPrefix
,
prefixColor
,
szText
)
;
}
С таким кодом просто крашит (в логе даже нет сообщения о коннекте):
Во первых: стоит использовать нормальную библиотеку для хуков, например: MinHook, Microsoft Detours.
Во вторых: правильный прототип функции должен выглядеть так:
C++:
using
AddEntry_t
=
void
(
__fastcall
*
)
(
void
*
_this
,
DWORD edx
,
int
nType
,
const
char
*
szText
,
const
char
*
szPrefix
,
D3DCOLOR textColor
,
D3DCOLOR prefixColor
)
;
Во первых: стоит использовать нормальную библиотеку для хуков, например: MinHook, Microsoft Detours.
Если вы не слышали, что-то о какой либо библиотеке, например в данном случаи PolyHook, то это не значит, что библиотека говно или наоборот. 600 звезд на GitHub и на unknowncheats.me (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudW5rbm93bmNoZWF0cy5tZQ) не считают, что она говно.
Во вторых: правильный прототип функции должен выглядеть так:
C++:
using
AddEntry_t
=
void
(
__fastcall
*
)
(
void
*
_this
,
DWORD edx
,
int
nType
,
const
char
*
szText
,
const
char
*
szPrefix
,
D3DCOLOR textColor
,
D3DCOLOR prefixColor
)
;
Хотелось бы узнать: Почему надо хукать AddEntry, а не AddChatMessage?
А, так спасибо, работает)
Если вы не слышали, что-то о какой либо библиотеке, например в данном случаи PolyHook, то это не значит, что библиотека говно или наоборот. 600 звезд на GitHub и на unknowncheats.me (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudW5rbm93bmNoZWF0cy5tZQ) не считают, что она говно.
Дело не в том, что она плохая, а в том, что она слишком жирная для сампа.
Хотелось бы узнать: Почему надо хукать AddEntry, а не AddChatMessage?
Функция AddEntry добавляет сообщение в чат.
Функции AddChatMessage и AddMessage выполняют дополнительные операции и вызывают AddEntry.
Во первых: стоит использовать нормальную библиотеку для хуков, например: MinHook, Microsoft Detours.
есть ОТЕЧЕСТВЕННЫЕ реализации хуков:
- https://github.com/allwanttokissme/Yet-another-hook-library/ by @BlackKnigga (https://www.blast.hk/members/83040/)
- https://github.com/iammemir/microhooks by @memir (https://www.blast.hk/members/70071/) (недоделаны)
- https://github.com/katursis/urmem by @urShadow (https://www.blast.hk/members/6/)
Dark_Knight
25.11.2020, 21:09
Попробуй на юрмеме так сделать, Код писал по памяти в блокноте++
C++:
#include
#include
#include
using
namespace
urmem
;
hook hookChat
;
void
CALLBACK
hookFuncMessage
(
void
*
t
,
D3DCOLOR color
,
const
char
*
text
)
{
fstream
file
(
"test hook.log"
,
ios
::
binary
|
ios
::
app
/* or ios::ate // Не помню по памяти какой-то второй должен быть флаг, чтобы писало в конец файла*/
)
;
file
(
t
,
color
,
text
)
;
}
void
initFunction
(
)
{
hookChat
.
install
(
GetAddress
(
0x645A0
)
)
,
get_func_addr
(
&
hookFuncMessage
)
)
;
}
void
DeinitFunction
(
)
{
hookChat
.
disable
(
)
;
}
.
Попробуй на юрмеме так сделать, Код писал по памяти в блокноте++
C++:
#include
#include
#include
using
namespace
urmem
;
hook hookChat
;
void
CALLBACK
hookFuncMessage
(
void
*
t
,
D3DCOLOR color
,
const
char
*
text
)
{
fstream
file
(
"test hook.log"
,
ios
::
binary
|
ios
::
app
/* or ios::ate // Не помню по памяти какой-то второй должен быть флаг, чтобы писало в конец файла*/
)
;
file
(
t
,
color
,
text
)
;
}
void
initFunction
(
)
{
hookChat
.
install
(
GetAddress
(
0x645A0
)
)
,
get_func_addr
(
&
hookFuncMessage
)
)
;
}
void
DeinitFunction
(
)
{
hookChat
.
disable
(
)
;
}
.
Да уже все работает на PolyHook
Из-за чего ошибка?
1606331704625.pngкорбус · 25 Ноя 2020 в 22:15' data-fancybox="lb-post-613518" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/77045/" style="cursor: pointer;" title="1606331704625.png">
https://forum.antichat.xyz/attachments/27613518/
Dark_Knight
25.11.2020, 23:29
Компилятор тебе говорит же.
На стороне клиента есть какой-то обработчик команд? Если есть, то какой у него адрес и сигнатура?
kin4stat
25.11.2020, 23:53
На стороне клиента есть какой-то обработчик команд? Если есть, то какой у него адрес и сигнатура?
void __thiscall sub_10069260(CInput *this)
void __thiscall sub_10069260(CInput *this)
Это оно (https://github.com/BlastHackNet/SAMP-API/blob/multiver/sampapi/src/0.3.7-R3-1/CInput.cpp#L70-L72)?
kin4stat
26.11.2020, 00:03
Это оно (https://github.com/BlastHackNet/SAMP-API/blob/multiver/sampapi/src/0.3.7-R3-1/CInput.cpp#L70-L72)?
0x69190 == 0x69260?
0x69190 == 0x69260?
Дак ProcessInput не принимает параметры, как тогда получать команды?
Дак ProcessInput не принимает параметры, как тогда получать команды?
а никак, она сама достает текст из чатбокса.
если тебе надо перехватывать вызов команд хукай CInput::GetCommandProcedure
а никак, она сама достает текст из чатбокса.
если тебе надо перехватывать вызов команд хукай CInput::GetCommandProcedure
Это GetCommandHandler?
Это GetCommandHandler?
да, извини, опечатался.
да, извини, опечатался.
А, как можно параметры с команд выдернуть?
А, как можно параметры с команд выдернуть?
ProcessInput разбивает строку на несколько, просто записывая нуль после команды.
посчитай длину через strlen() и прибавь её + 1 к указателю на команду, получишь строку с аргументами
ProcessInput разбивает строку на несколько, просто записывая нуль после команды.
посчитай длину через strlen() и прибавь её + 1 к указателю на команду, получишь строку с аргументами
спасибо! А полную строку не получить? Чтобы split'ом разбить ее на параметры?
спасибо! А полную строку не получить? Чтобы split'ом разбить ее на параметры?
ты всегда можешь склеить команду и строку с аргументами вручную. Именно оригинал из чатбокса на момент вызова GetCommandHandler не получить
Gunborg Johansson
26.11.2020, 15:44
есть ОТЕЧЕСТВЕННЫЕ реализации хуков:
- https://github.com/allwanttokissme/Yet-another-hook-library/ by @BlackKnigga (https://www.blast.hk/members/83040/)
- https://github.com/iammemir/microhooks by @memir (https://www.blast.hk/members/70071/) (недоделаны)
- https://github.com/katursis/urmem by @urShadow (https://www.blast.hk/members/6/)
SRHook
Daniel_Reker
30.11.2020, 19:07
Как в SF API получить директорию SAMPFUNCS? Для открытия конфига
Dark_Knight
30.11.2020, 23:45
@Daniel_Reker (https://www.blast.hk/members/103491/)
C++:
#include
#include
using
namespace
std
;
namespace
fs
=
filesystem
;
string path
=
(
fs
::
current_path
(
)
/
"SAMPFUNCS"
)
.
string
(
)
;
Можно как-то использовать shared_ptr с sampapi::v037r1::CChat? Пытался вызывать, но ничего не приходит в чат.
C++:
std
::
shared_ptr
m_chat
Можно как-то использовать shared_ptr с sampapi::v037r1::CChat? Пытался вызывать, но ничего не приходит в чат.
C++:
std
::
shared_ptr
m_chat
там не нужен умный указатель, CChat принадлежит игре и если ты его случайно освободишь то всё сломается
Что по-вашему эффективнее и лучше использовать в памяти: std::fill или memset?
loganhackerdff
07.12.2020, 15:32
Что по-вашему эффективнее и лучше использовать в памяти: std::fill или memset?
По моему месет но он небезопасен
И иногда компилятор его опускает
И иногда компилятор его опускает
кого опускает? кто он такой чтобы опускать? какое у него право?
Что по-вашему эффективнее и лучше использовать в памяти: std::fill или memset?
Кто быстрее: memset, bzero или std::fill (https://www.blast.hk/redirect/aHR0cHM6Ly9oYWJyLmNvbS9ydS9wb3N0LzExODcxNi8)
Есть мнение, что алгоритм std::fill() работает столько же эффективно на простых типах, как и старый добрый memset() (так как он его и использует в некоторых специализациях). Но порой не все так...
habr.com
Как можно сделать функцию, которая находится в классе, коллбэком для cmdproc? (samp-api)
kin4stat
08.12.2020, 02:08
Как можно сделать функцию, которая находится в классе, коллбэком для cmdproc? (samp-api)
static
static
Без static'a же тоже можно сделать callback. Получить адрес через union и дописать this на текущий класс (thunk). Например так:
C++:
// union
union
UnionCallbackCommand
{
using
ptr_t
=
void
(
SomeClass
::
*
)
(
const
char
*
)
;
ptr_t ptr
;
uint64_t
addr_as_uint64
;
}
;
// получение адреса
m_union_cmd_callback
.
ptr
=
&
SomeClass
::
Command
;
// в private:
UnionCallbackCommand m_union_cmd_callback
;
// регистрация команды:
m_input
->
AddCommand
(
"somecommand"
,
(
sampapi
::
CMDPROC
)
&
m_union_cmd_callback
.
addr_as_uint64
)
;
// сам callback
void
SomeClass
::
Command
(
const
char
*
cmd
)
{
}
Но так я получаю зависание игры, как можно пофиксить?
kin4stat
08.12.2020, 03:09
Получить адрес через union
Ну получишь ты адрес, че дальше то? Функция коллбэка __cdecl, методы класса __thiscall вот тебе и зависание, потому что стек чистится
Ну получишь ты адрес, че дальше то? Функция коллбэка __cdecl, методы класса __thiscall вот тебе и зависание, потому что стек чистится
ок, какие есть варианты, если не делать метод статичным?
kin4stat
08.12.2020, 03:23
ок, какие есть варианты, если не делать метод статичным?
Никаких.
Без static'a же тоже можно сделать callback. Получить адрес через union и дописать this на текущий класс (thunk). Например так:
C++:
// union
union
UnionCallbackCommand
{
using
ptr_t
=
void
(
SomeClass
::
*
)
(
const
char
*
)
;
ptr_t ptr
;
uint64_t
addr_as_uint64
;
}
;
// получение адреса
m_union_cmd_callback
.
ptr
=
&
SomeClass
::
Command
;
// в private:
UnionCallbackCommand m_union_cmd_callback
;
// регистрация команды:
m_input
->
AddCommand
(
"somecommand"
,
(
sampapi
::
CMDPROC
)
&
m_union_cmd_callback
.
addr_as_uint64
)
;
// сам callback
void
SomeClass
::
Command
(
const
char
*
cmd
)
{
}
Но так я получаю зависание игры, как можно пофиксить?
Действительно, делай static
Ебани __cdecl метод, дальше в тханке пушь указатель на свой объект, делай call на обработчик, затем вытаскивай запушеные четыре байта, ретайся (первым аргументом в обработчике придется сделать адрес возврата).
herumi/xbyak: a JIT assembler for x86(IA-32)/x64(AMD64, x86-64) MMX/SSE/SSE2/SSE3/SSSE3/SSE4/FPU/AVX/AVX2/AVX-512 by C++ header (github.com) (https://github.com/herumi/xbyak)
кого опускает? кто он такой чтобы опускать? какое у него право?
Прямое право он имеет) https://en.wikipedia.org/wiki/As-if_rule (https://www.blast.hk/redirect/aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQXMtaWZfcn VsZQ) https://en.cppreference.com/w/cpp/language/as_if (https://www.blast.hk/redirect/aHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2xhbm d1YWdlL2FzX2lm)
Как простой пример - https://godbolt.org/z/o9vsGr (https://www.blast.hk/redirect/aHR0cHM6Ly9nb2Rib2x0Lm9yZy96L285dnNHcg)
memset растворился даже при минимальной оптимизации (-O(1))
Именно по этой причине в языке c++ существует такое большое количество неопределенных (иногда unspecified, или implementation-defined) поведений по типу порядка вычисления аргументов и множества других, а также есть ключевое слово volatile.
Плюс еще, для таких задач, как, например, эта с memset, есть специальные функции под платформы:
Win - SecureZeroMemory, BSD - explicit_bzero, Linux Kernel - memzero_explicit, OpenSSL - OPENSSL_cleanse и т.д.
Специальная версия функции в стандарте С11 memset_s - https://en.cppreference.com/w/c/string/byte/memset (https://www.blast.hk/redirect/aHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvYy9zdHJpbm cvYnl0ZS9tZW1zZXQ)
И еще и флаги компиляторов по типу -fno-builtin-memset, или #pragma optimize("", off)
Ну и volatile
Что по-вашему эффективнее и лучше использовать в памяти: std::fill или memset?
Посмотрите еще этот ответ, вопрос был похожий - https://www.blast.hk/threads/781/page-294#post-439421
CleanLegend
09.12.2020, 09:49
Как проверить, запущен ли определенный процесс в диспетчере задач?
сканить все процессы через: Process32First и Process32Next.
если нужно именно работать с диспетчером, то инжектишь туда dll и уже хукаешь эти функции в нём.
Действительно, делай static
Ебани __cdecl метод, дальше в тханке пушь указатель на свой объект, делай call на обработчик, затем вытаскивай запушеные четыре байта, ретайся (первым аргументом в обработчике придется сделать адрес возврата).
herumi/xbyak: a JIT assembler for x86(IA-32)/x64(AMD64, x86-64) MMX/SSE/SSE2/SSE3/SSSE3/SSE4/FPU/AVX/AVX2/AVX-512 by C++ header (github.com) (https://github.com/herumi/xbyak)
допустим callback я сделал для команды, но теперь мне нужен обработчик всех команд (detour по адресу base + 0x65A70). Т.е:
C++:
CMDPROC CInput
::
GetCommandHandler
(
const
char
*
pName
)
{
return
(
(
CMDPROC
(
__thiscall
*
)
(
CInput
*
,
const
char
*
)
)
GetAddress
(
0x65A70
)
)
(
this
,
pName
)
;
}
Сделал я так (для регистрации команд):
C++:
std
::
memcpy
(
&
m_thunk
[
12
]
,
"\x55\x89\xe5\xff\x75\x08\xb9????\xb8????\xff\xd0\x c9\xc3"
,
20
)
;
*
(
uintptr_t
*
)
&
m_thunk
[
19
]
=
(
uintptr_t
)
this
;
*
(
uintptr_t
*
)
&
m_thunk
[
24
]
=
m_union_cmd_callback
.
addr_as_uint64
;
m_input
->
AddCommand
(
"somecommand"
,
(
sampapi
::
CMDPROC
)
&
m_thunk
[
12
]
)
;
1.Ваш вопрос : Как можно после загрузки игры отключить raknet или сделать так чтоб не подключался к серверу необходимое количество времени
kin4stat
14.12.2020, 00:04
1.Ваш вопрос : Как можно после загрузки игры отключить raknet или сделать так чтоб не подключался к серверу необходимое количество времени
Можно попробовать хукнуть функцию отправки через сокет(sendto или send), и отклонять отправку, пока не прошло необходимое кол-во времени.
AdCKuY_DpO4uLa
17.12.2020, 22:03
После инициализации имгуи, вечно рисуется курсор (курсор винды)
C++:
ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
Fonts
->
AddFontFromFileTTF
(
"C:\\Windows\\Fonts\\Arial.ttf"
,
16
,
NULL
,
ImGui
::
GetIO
(
)
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
(
void
)
io
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
pDevice
)
;
пробовать отключать через
C++:
ImGui
::
GetIO
(
)
.
MouseDrawCursor
=
0
;
не помогло
После инициализации имгуи, вечно рисуется курсор (курсор винды)
C++:
ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
Fonts
->
AddFontFromFileTTF
(
"C:\\Windows\\Fonts\\Arial.ttf"
,
16
,
NULL
,
ImGui
::
GetIO
(
)
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
(
void
)
io
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
pDevice
)
;
пробовать отключать через
C++:
ImGui
::
GetIO
(
)
.
MouseDrawCursor
=
0
;
не помогло
C++:
io
.
ConfigFlags
|=
ImGuiConfigFlags_NoMouseCursorChange
;
manukhov
23.12.2020, 01:38
Вот если в процессе два .dll модуля с одинаковым названием, как можно получить оба? По хэндлу все время только 1
AdCKuY_DpO4uLa
24.12.2020, 15:09
у меня есть структура PlayerPool для R1
C++:
struct
stPlayerPool
{
uint32_t
MaxPlayerID
;
//???? not tested
uint16_t
sLocalPlayerID
;
void
*
pVTBL_txtHandler
;
union
{
char
szLocalPlayerName
[
16
]
;
char
*
pszLocalPlayerName
;
}
;
int
iLocalPlayerNameLen
;
int
iLocalPlayerNameAllocated
;
struct
stLocalPlayer
*
pLocalPlayer
;
int
iLocalPlayerPing
;
int
iLocalPlayerScore
;
struct
stRemotePlayer
*
pRemotePlayer
[
SAMP_MAX_PLAYERS
]
;
int
iIsListed
[
SAMP_MAX_PLAYERS
]
;
uint32_t
ulUnk1
[
SAMP_MAX_PLAYERS
]
;
}
можете дать такую же структуру, но для R3?
у меня есть структура PlayerPool для R1
C++:
struct
stPlayerPool
{
uint32_t
MaxPlayerID
;
//???? not tested
uint16_t
sLocalPlayerID
;
void
*
pVTBL_txtHandler
;
union
{
char
szLocalPlayerName
[
16
]
;
char
*
pszLocalPlayerName
;
}
;
int
iLocalPlayerNameLen
;
int
iLocalPlayerNameAllocated
;
struct
stLocalPlayer
*
pLocalPlayer
;
int
iLocalPlayerPing
;
int
iLocalPlayerScore
;
struct
stRemotePlayer
*
pRemotePlayer
[
SAMP_MAX_PLAYERS
]
;
int
iIsListed
[
SAMP_MAX_PLAYERS
]
;
uint32_t
ulUnk1
[
SAMP_MAX_PLAYERS
]
;
}
можете дать такую же структуру, но для R3?
C++:
enum
{
MAX_PLAYERS
=
1004
}
;
int
m_nLargestId
;
CPlayerInfo
*
m_pObject
[
MAX_PLAYERS
]
;
BOOL m_bNotEmpty
[
MAX_PLAYERS
]
;
BOOL m_bPrevCollisionFlag
[
MAX_PLAYERS
]
;
struct
SAMPAPI_EXPORT
{
int
m_nPing
;
int
m_nScore
;
ID m_nId
;
std
::
string m_szName
;
CLocalPlayer
*
m_pObject
;
}
m_localInfo
;
kin4stat
24.12.2020, 15:52
C++:
enum
{
MAX_PLAYERS
=
1004
}
;
int
m_nLargestId
;
CPlayerInfo
*
m_pObject
[
MAX_PLAYERS
]
;
BOOL m_bNotEmpty
[
MAX_PLAYERS
]
;
BOOL m_bPrevCollisionFlag
[
MAX_PLAYERS
]
;
struct
SAMPAPI_EXPORT
{
int
m_nPing
;
int
m_nScore
;
ID m_nId
;
std
::
string m_szName
;
CLocalPlayer
*
m_pObject
;
}
m_localInfo
;
C++:
struct
SAMPAPI_EXPORT
{
int
m_nPing
;
int
m_nScore
;
ID m_nId
;
#ifndef _DEBUG
private
:
int
__alignment
;
public
:
#endif
std
::
string m_szName
;
CLocalPlayer
*
m_pObject
;
}
m_localInfo
;
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot