PDA

Просмотр полной версии : С/С++ Вопрос - Ответ


Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [20] 21 22 23 24 25 26 27 28 29 30 31

Cake_
13.08.2020, 01:21
Покажи пожалуйста пример как её использовать в голом проекте? Я пытаюсь сунуть код но выдаёт 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++ тк дальше сложнее будет

bab0n
13.08.2020, 01:24
билди библиотеку 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++ тк дальше сложнее будет


Есть какая нибудь книга/серия видосов которые можешь посоветовать?

imring
13.08.2020, 01:43
Есть какая нибудь книга/серия видосов которые можешь посоветовать?


есть отдельная тема с источниками https://www.blast.hk/threads/23848/

Molchun
13.08.2020, 12:49
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

trefa
13.08.2020, 12:52
Подключил библиотеку, а она вызвала ошибки.












https://i.imgur.com/sAiKVYy.png


Стесняюсь спросить где ты её подключил? Ты её только объявил.

Molchun
13.08.2020, 13:14
Стесняюсь спросить где ты её подключил? Ты её только объявил.


Теперь подключил, вроде как, но все равно выдает ошибки.

https://i.imgur.com/rlASk7G.png

kin4stat
13.08.2020, 14:07
Теперь подключил, вроде как, но все равно выдает ошибки.

https://i.imgur.com/rlASk7G.png


Я кинул чтобы ты класс оттуда взял, а не всю библиотеку

Molchun
13.08.2020, 14:21
Я кинул чтобы ты класс оттуда взял, а не всю библиотеку


Благодарю, теперь ошибок нет, только я не особо понял как реализовать метод проверки.

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 надо патчить функцию работы двигателя.

bab0n
18.08.2020, 13:54
? Я пытался скачать и скомпилировать boost 1_72 но сайт не даёт скачивать

Пробовал компилировать и подключать boost 1_73, пробовал и через менеджер VS

Dark_Knight
18.08.2020, 15:37
Банально, нет либ файла. Плюс флаги компиляции надо изменить. Все это в гугле можно найти.

kin4stat
18.08.2020, 21:31
Как занопить управление игроком? Для Airbrake например. в WndProc просто return true?

bab0n
19.08.2020, 03:16
ЕБАТЬу меня уже руки сами тянутся к полу.

Есть вариант узнать сколько комп операций делает в секунду через .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 хука на одну и ту же функцию в одном проекте? -_-

Делай все в одном хуке что тебе надо.

Cake_
21.08.2020, 20:34
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/

но как?

RazorRw
26.08.2020, 21:32
я хочу сделать что то такое как тут - 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
Никак скорее всего.

p1cador
28.08.2020, 13:59
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 версии всем по***...

RazorRw
29.08.2020, 14:24
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, в чём проблема. переустановить не могу. Это рассширение установлено на всех устройствах.

помогите плз

RazorRw
09.09.2020, 19:21
не удалось найти файл 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 хотя установил всё

tinkoir
11.09.2020, 19:55
акак

https://i.imgur.com/lKQTHu3.png

imring
11.09.2020, 20:03
акак

https://i.imgur.com/lKQTHu3.png



Гайд - Интегрированная отладка asi/sf/dll плагинов в игре с помощью Visual Studio (https://www.blast.hk/threads/20320/)

прив Многие ли из вас знают, что с помощью Visual Studio можно отлаживать плагины прямо в игре и что делается это очень просто? Нет, блять, нихуя вы не знаете! Но я вас научу. Берём студию и проект своего плагина, идём в конфигурацию проекта на страницу "Debugging" (Отладка) и ставим такие...

www.blast.hk

kizn
11.09.2020, 22:32
я не умею правильно пользоваться поиском по проекту, так что помогите, пожалуйста, найти это:



isCharStopped, sampIsLocalPlayerSpawned, есть ли оружие в наличии (не в руках), writeMemory

------

как осуществлять поиск из массива?

есть массив с никами, если ник = массиву тогда что-то

kin4stat
12.09.2020, 01:11
я не умею правильно пользоваться поиском по проекту, так что помогите, пожалуйста, найти это:


isCharStopped, sampIsLocalPlayerSpawned, есть ли оружие в наличии (не в руках), writeMemory

------
как осуществлять поиск из массива?

есть массив с никами, если ник = массиву тогда что-то



C++:





[CODE]
for
(
int
i
=
0
;
i

kizn
12.09.2020, 09:35
нужен аналог 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


Если нет такого метода, ищи в флагах. Если нет в флагах, значит это реализовано через кучи проверок на луа

kizn
12.09.2020, 13:55
как перезаписать самповскую команду? (/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
;
}
;

kizn
12.09.2020, 14:13
Регистрируешь ее еще раз, и все.



как я понял, сф ее не перезаписывает, как это делает луа

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
)
;
}




остальную часть кода нет смысла выкладывать.

kizn
12.09.2020, 17:05
По поводу SF: да, она перезаписывает самповскую команду, ошибка была в другом. Вопрос теперь у меня другой:

- как сделать проверку, остановился ли персонаж? в PEDSELF не нашел

kin4stat
12.09.2020, 17:09
По поводу SF: да, она перезаписывает самповскую команду, ошибка была в другом. Вопрос теперь у меня другой:
- как сделать проверку, остановился ли персонаж? в PEDSELF не нашел


стоит на месте или остановился?

Если стоит на месте - во флагах педа 1 бит. Или проверять скорость на нули.

А если остановился - можно закостылить через ид анимки сампа, если без костылей, то придется мудрить с Tasks

frit
12.09.2020, 18:10
как получить все числа из строки? есть строка "абвгд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

Cake_
12.09.2020, 20:26
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

frit
12.09.2020, 21:54
Как получить текст после :? Пример: "Привет: мир, как дела?", должен получить мир

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

kizn
12.09.2020, 23:41
Как сделать диалог с инпутом, в инпут которого принимается только текст формата 00:00:00 либо 00.00.0000

(где 0 - любое число)

Dark_Knight
13.09.2020, 00:17
Проще будет сделать проверку на то что уже ввел игрок после нажатия чем в момент нажатия.

kizn
13.09.2020, 00:20
Проще будет сделать проверку на то что уже ввел игрок после нажатия чем в момент нажатия.


ну я это и имел ввиду, сверить инпут с форматом как?

kin4stat
13.09.2020, 00:30
ну я это и имел ввиду, сверить инпут с форматом как?


Регулярными выражениями

weq_dev
13.09.2020, 11:27
Помогите решить вот такую ошибку



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/

kizn
13.09.2020, 11:58
как сделать unregister команды, которую я сам создал?

damag
13.09.2020, 12:01
как сделать 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

#Rin
15.09.2020, 21:29
Недавно начал изучать 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

frit
20.09.2020, 18:09
как разделить строку на подстроки по символу '\n' ?

kin4stat
20.09.2020, 18:11
как разделить строку на подстроки по символу '\n' ?



Разделение string на элементы массива через нужный символ (https://www.blast.hk/redirect/aHR0cHM6Ly9ydS5zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbn MvNDk1MjUv0KDQsNC30LTQtdC70LXQvdC40LUtc3RyaW5nLdC9 0LAt0Y3Qu9C10LzQtdC90YLRiy3QvNCw0YHRgdC40LLQsC3Rh9 C10YDQtdC3LdC90YPQttC90YvQuS3RgdC40LzQstC-0Ls)

Подскажите, а способа как использовать для разделения нужной мне строки на подстроки, которые будут заноситься в массив, нет? Нужно из: "Привет; Как; Дела" Получить: str[0]="Приве...

ru.stackoverflow.com

frit
20.09.2020, 22:20
Разделение string на элементы массива через нужный символ (https://www.blast.hk/redirect/aHR0cHM6Ly9ydS5zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbn MvNDk1MjUv0KDQsNC30LTQtdC70LXQvdC40LUtc3RyaW5nLdC9 0LAt0Y3Qu9C10LzQtdC90YLRiy3QvNCw0YHRgdC40LLQsC3Rh9 C10YDQtdC3LdC90YPQttC90YvQuS3RgdC40LzQstC-0Ls)

Подскажите, а способа как использовать для разделения нужной мне строки на подстроки, которые будут заноситься в массив, нет? Нужно из: "Привет; Как; Дела" Получить: str[0]="Приве...

ru.stackoverflow.com



не получается сделать у меня, может поможешь?

Dark_Knight
21.09.2020, 12:27
не получается сделать у меня, может поможешь?


Код не получается скопировать? -_-

frit
21.09.2020, 12:44
Код не получается скопировать? -_-


da

damag
21.09.2020, 20:04
как на плюсах выглядит?

Lua:






name
=
"192.4 192.5 192.6"
x
,
y
,
z
=
name
:
match
(
"(.*) (.*) (.*)"
)

LaRossa
22.09.2020, 03:21
Подскажите пожалуйста как получить версию GTA (R1 - R3) без API

LaRossa
22.09.2020, 03:46
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 влево. Че за приколы понять не могу

frit
28.09.2020, 01:23
каким чудом это происходит?


библиотеки нет

frit
28.09.2020, 01:25
скинь пожалуйста


я не у пк щас, посмотри в Гугле, там куча

lemonager
28.09.2020, 08:52
каким чудом это происходит?


пкм по названию проекта, свойства и тут ставишь все самое последнее, что у тебя есть:





https://forum.antichat.xyz/attachments/27572667/

Жмешь применить, а потом Ок

sᴀxᴏɴ
28.09.2020, 19:39
не помогло, настройки как у тебя


У тебя точно установлен 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

SR_team
02.10.2020, 11:32
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
)
)
;

kizn
04.10.2020, 17:44
Как получить значение текстдрава через id?

- - -

Как изменить значение текстдрава через id?

kin4stat
04.10.2020, 18:02
Как получить значение текстдрава через id?
- - -
Как изменить значение текстдрава через id?


По идее как-то так:







C++:






SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
playerTextdraw
[
id
]

zzzhg
04.10.2020, 18:31
1.Стоит-ли использовать С++ как первый язык программирования? В данный момент, нахожусь на 1 курсе колледжа. Хочу начать изучение программирования уже сейчас.

ImPasha
04.10.2020, 18:36
1.Стоит-ли использовать С++ как первый язык программирования? В данный момент, нахожусь на 1 курсе колледжа. Хочу начать изучение программирования уже сейчас.


Если тебе нужен C++ для каких-то целей, то да - почему бы и нет, а если ты просто ищешь что бы поучить, то лучше выбрать более простой вариант языка для изучения. Можешь попробовать Си-подобные языки, если нравится синтаксис и есть желание в будущем перейти на C / C++, либо что-нибудь другое, если подобие синтаксиса не так важно. Например, если нужно что-то попроще, то можно попробовать скриптовые языки программирования - они легки для изучения.

p1cador
04.10.2020, 18:37
1.Стоит-ли использовать С++ как первый язык программирования?


Смотря в какую сторону хочешь развиваться. Но я бы вместо плюсов сразу начал с C, потом будет проще понять как всё устроено в плюсовом ооп

SR_team
05.10.2020, 07:49
Смотря в какую сторону хочешь развиваться. Но я бы вместо плюсов сразу начал с C, потом будет проще понять как всё устроено в плюсовом ооп


Нет не будет

loganhackerdff
05.10.2020, 22:32
что не так в этом коде? машина 100% существует

C++:






if
(
SF
->
getGame
(
)
->
isKeyPressed
(
VK_F1
)
)
PEDSELF
->
GetVehicle
(
)
->
GetHandlingData
(
)
->
SetEngineAcceleration
(
80.f
)
;




крашит при использовании

Tox777z
06.10.2020, 12:14
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;

SR_team
06.10.2020, 13:33
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);

}

Tox777z
06.10.2020, 14:17
у тебя функция принимает изменяемый аргумент, а ты передаешь не изменяемый.

Делай так:

Код:






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"

SR_team
06.10.2020, 17:07
Код:






Ошибка (активно) E0167 аргумент типа "const char *" несовместим с параметром типа "PCHAR"

Ошибка C2664 "void AddMessageJumpQ(const PCHAR,UINT,USHORT,bool)": невозможно преобразовать аргумент 1 из "const char [15]" в "const PCHAR"





у тебя PCHAR это точно char*? если нет, то замени

Tox777z
06.10.2020, 17:14
у тебя 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#.

Tox777z
10.10.2020, 21:55
Допустим у меня есть 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
)
;

sc6ut
16.10.2020, 09:21
В имгуи при попытке загрузки шрифта из пути имеющего русские символы, не получается загрузить шрифт.




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 отдаешь?

#Northn
16.10.2020, 11:33
делаю вот так, но не уверен, что это правильно

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
;
}

#Northn
22.10.2020, 20:10
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


Сорри, я тупой нихуя не понял. Но, то что ты скинул(ссылку), я сделал уже.

#Northn
22.10.2020, 20:16
Сорри, я тупой нихуя не понял



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.

SR_team
22.10.2020, 20:38
Исключения в c++ чересчур медленные. Для чтения числа можно использовать scanf, либо regex_match.


Добро пожаловать в 2к20. Если исключение не брошено, то оно ничего не стоит

kin4stat
22.10.2020, 20:39
Добро пожаловать в 2к20. Если исключение не брошено, то оно ничего не стоит


Тоже верно. :D

(Оптимизация головного мозга, извините)

SR_team
22.10.2020, 20:45
(Оптимизация головного мозга, извините)


Разве? Тогда как ты объяснишь рекомендацию использовать регулярки вместо stoi? Вот совет тебе по конвертации скроки в число и обратно - используй std::from_chars и std::to_chars

kin4stat
22.10.2020, 20:47
Разве? Тогда как ты объяснишь рекомендацию использовать регулярки вместо stoi? Вот совет тебе по конвертации скроки в число и обратно - используй std::from_chars и std::to_chars


Ну я хотел для валидации написать, но что-то пошло не так. А так да, std и boost рулит плюсами

SR_team
22.10.2020, 20:48
Ну я хотел для валидации написать, но что-то пошло не так. А так да, 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/

#Northn
23.10.2020, 18:00
Сорри я тупой и не понимаю схуяли игра зависает из за этого блока.


Ты в основной поток пихаешь цикл, и игра ждёт, пока этот цикл завершится, чтобы продолжить работу остальных функций

Игра не зависает, а ждёт исполнение этого цикла.

Чтобы не зависало, нужно отдельный поток создавать, детачить и в него уже цикл пихать

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
А это тут при чём, меня интересует как перезаписать входящий пакет, а не как хукнуть его.


Ну так в хуке и перезаписываешь нужную инфу, не?

#Northn
07.11.2020, 17:21
Как можно перезаписать входящий пакет, без использования 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
}
==
"Ник пригласившго бла-бла"
)
{
}

Romelo
08.11.2020, 03:38
Как сделать проверку на этот диалог в RPC который дает мне сервер, код ниже не работает, find не умею пользоваться



C++:






if
(
strstr
(
cInfo
,
"Введите ник игрока, пригласившего вас на сервер или промокод"
)
&&
strstr
(
cCaption
,
"{FFFFFF}Приглашение | {ae433d}Регистрация"
)
)
{
//
}

Vintik
12.11.2020, 21:44
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.

Qsany
13.11.2020, 09:40
Ввести одномерный массив целых чисел размерностью 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. Вопрос такой: как юзать стилизованный шрифт и иконочный одновременно?

Cake_
13.11.2020, 18:57
Ввести одномерный массив целых чисел размерностью 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: не увидел что спрашивал ты утром и что тебе уже ответили

BigIce
13.11.2020, 19:27
Я хочу сделать триггер бот для кс 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
)
)
;
}





костыли наше все

Vintik
16.11.2020, 23:09
Вызываем вот такое:

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?

Vintik
17.11.2020, 11:38
C++:






// samp.dll (r1):
.
text
:
10068E60
fsub ds
:
flt_100D390C




What are you going to call?


This function. It's not R1.

SR_team
17.11.2020, 11:53
This function. It's not R1.


Все верно, он тебе показал, что по твоему адресу лежит инструкция

fsub ds:flt_100D390C

, а не функция отправки в чат

imring
17.11.2020, 11:55
Все верно, он тебе показал, что по твоему адресу лежит инструкция

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/) помогите плиз


Она вроде из класса, поэтому нужно еще передавать указатель, а у тебя идет чисто аргумент в виде указателя на текст

SR_team
17.11.2020, 13:37
но он же говорит, что это смещение не с [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.

Vintik
17.11.2020, 13:41
нужную ему версию SAMP он тоже не написал


Amazing CRMP какую использует? мне она и нужна.

Gunborg Johansson
17.11.2020, 13:42
Amazing CRMP какую использует? мне она и нужна.


Give me samp.dll

Vintik
17.11.2020, 13:42
Give me samp.dll

#Northn
17.11.2020, 13:44
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


изучай

SR_team
17.11.2020, 13:44
Amazing CRMP какую использует? мне она и нужна.


посмотри в свойствах samp.dll

Vintik
17.11.2020, 13:45
Она вроде из класса, поэтому нужно еще передавать указатель, а у тебя идет чисто аргумент в виде указателя на текст



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) темы)

SR_team
17.11.2020, 13:46
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
)
;
}

#Northn
17.11.2020, 13:49
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.

SR_team
17.11.2020, 13:50
дллка р3

калкор лентяй не обновил инфу или забыл


Да, ты прав

Vintik
17.11.2020, 13:54
Да, ты прав


То есть что мне в итоге надо сделать, чтобы не было моей ошибки: 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.

#Northn
17.11.2020, 13:56
То есть что мне в итоге надо сделать, чтобы не было моей ошибки: 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 Отправка обычного текста

Vintik
17.11.2020, 14:01
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

Vintik
17.11.2020, 14:03
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?

Vintik
17.11.2020, 14:13
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
)
;
}

dekname
23.11.2020, 00:32
Как можно рисовать на загрузочном экране SA-MP'a? (черный экран и где логотип nvdia, raknet и т.д)

kin4stat
23.11.2020, 01:02
Как можно рисовать на загрузочном экране SA-MP'a? (черный экран и где логотип nvdia, raknet и т.д)


hook directx после появления окна игры

dekname
23.11.2020, 01:23
hook directx после появления окна игры


Есть ли у тебя адрес это directx device?

CleanLegend
23.11.2020, 09:57
Есть ли у тебя адрес это directx device?



C++:






0xC97C28




гайд - https://www.blast.hk/threads/32712/

dekname
25.11.2020, 01:39
Как с помощью samp api (https://github.com/BlastHackNet/SAMP-API) можно получить сообщения, которые отправляются в чат?

kin4stat
25.11.2020, 01:49
Как с помощью samp api (https://github.com/BlastHackNet/SAMP-API) можно получить сообщения, которые отправляются в чат?


Никак

dekname
25.11.2020, 02:03
Никак


Ок, а без RakNet можно же захукать функцию, которая выводит в чат?

kin4stat
25.11.2020, 02:11
Ок, а без RakNet можно же захукать функцию, которая выводит в чат?


Да

dekname
25.11.2020, 02:17
Да


Какой адрес и сигнатура у этой функции? Я попробовал похукать функции которые в samp api (CChat::AddChatMessage / CChat::AddMessage). Одна скрашила, другая не выводит ничего в лог.

Dark_Knight
25.11.2020, 03:37
Хук как ставишь?

dekname
25.11.2020, 03:50
Хук как ставишь?



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

#Kai-
25.11.2020, 13:45
Есть ли Wiki по функциям для samp api как это для Lua?

dekname
25.11.2020, 16:33
__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.

redcode
25.11.2020, 17:13
Как правильно захучить __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
)
;
}

dekname
25.11.2020, 17:27
Использовать __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
)
;
}

redcode
25.11.2020, 17:41
С таким кодом просто крашит (в логе даже нет сообщения о коннекте):


Во первых: стоит использовать нормальную библиотеку для хуков, например: 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
)
;

dekname
25.11.2020, 18:09
Во первых: стоит использовать нормальную библиотеку для хуков, например: 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?

А, так спасибо, работает)

redcode
25.11.2020, 18:57
Если вы не слышали, что-то о какой либо библиотеке, например в данном случаи PolyHook, то это не значит, что библиотека говно или наоборот. 600 звезд на GitHub и на unknowncheats.me (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudW5rbm93bmNoZWF0cy5tZQ) не считают, что она говно.


Дело не в том, что она плохая, а в том, что она слишком жирная для сампа.



Хотелось бы узнать: Почему надо хукать AddEntry, а не AddChatMessage?


Функция AddEntry добавляет сообщение в чат.

Функции AddChatMessage и AddMessage выполняют дополнительные операции и вызывают AddEntry.

imring
25.11.2020, 19:38
Во первых: стоит использовать нормальную библиотеку для хуков, например: 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
(
)
;
}




.

dekname
25.11.2020, 21:23
Попробуй на юрмеме так сделать, Код писал по памяти в блокноте++

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

корбус
25.11.2020, 23:15
Из-за чего ошибка?




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
Компилятор тебе говорит же.

dekname
25.11.2020, 23:48
На стороне клиента есть какой-то обработчик команд? Если есть, то какой у него адрес и сигнатура?

kin4stat
25.11.2020, 23:53
На стороне клиента есть какой-то обработчик команд? Если есть, то какой у него адрес и сигнатура?


void __thiscall sub_10069260(CInput *this)

dekname
26.11.2020, 00:02
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?

dekname
26.11.2020, 00:18
0x69190 == 0x69260?


Дак ProcessInput не принимает параметры, как тогда получать команды?

memir
26.11.2020, 03:29
Дак ProcessInput не принимает параметры, как тогда получать команды?


а никак, она сама достает текст из чатбокса.

если тебе надо перехватывать вызов команд хукай CInput::GetCommandProcedure

dekname
26.11.2020, 04:22
а никак, она сама достает текст из чатбокса.
если тебе надо перехватывать вызов команд хукай CInput::GetCommandProcedure


Это GetCommandHandler?

memir
26.11.2020, 04:27
Это GetCommandHandler?


да, извини, опечатался.

dekname
26.11.2020, 06:16
да, извини, опечатался.


А, как можно параметры с команд выдернуть?

memir
26.11.2020, 07:02
А, как можно параметры с команд выдернуть?


ProcessInput разбивает строку на несколько, просто записывая нуль после команды.

посчитай длину через strlen() и прибавь её + 1 к указателю на команду, получишь строку с аргументами

dekname
26.11.2020, 07:18
ProcessInput разбивает строку на несколько, просто записывая нуль после команды.
посчитай длину через strlen() и прибавь её + 1 к указателю на команду, получишь строку с аргументами


спасибо! А полную строку не получить? Чтобы split'ом разбить ее на параметры?

memir
26.11.2020, 08:20
спасибо! А полную строку не получить? Чтобы 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
(
)
;

dekname
06.12.2020, 23:43
Можно как-то использовать shared_ptr с sampapi::v037r1::CChat? Пытался вызывать, но ничего не приходит в чат.

C++:






std
::
shared_ptr

m_chat

memir
06.12.2020, 23:47
Можно как-то использовать shared_ptr с sampapi::v037r1::CChat? Пытался вызывать, но ничего не приходит в чат.

C++:






std
::
shared_ptr

m_chat





там не нужен умный указатель, CChat принадлежит игре и если ты его случайно освободишь то всё сломается

LuaQ
07.12.2020, 15:25
Что по-вашему эффективнее и лучше использовать в памяти: std::fill или memset?

loganhackerdff
07.12.2020, 15:32
Что по-вашему эффективнее и лучше использовать в памяти: std::fill или memset?


По моему месет но он небезопасен

И иногда компилятор его опускает

#Northn
07.12.2020, 15:38
И иногда компилятор его опускает


кого опускает? кто он такой чтобы опускать? какое у него право?



Что по-вашему эффективнее и лучше использовать в памяти: std::fill или memset?



Кто быстрее: memset, bzero или std::fill (https://www.blast.hk/redirect/aHR0cHM6Ly9oYWJyLmNvbS9ydS9wb3N0LzExODcxNi8)

Есть мнение, что алгоритм std::fill() работает столько же эффективно на простых типах, как и старый добрый memset() (так как он его и использует в некоторых специализациях). Но порой не все так...

habr.com

dekname
08.12.2020, 02:07
Как можно сделать функцию, которая находится в классе, коллбэком для cmdproc? (samp-api)

kin4stat
08.12.2020, 02:08
Как можно сделать функцию, которая находится в классе, коллбэком для cmdproc? (samp-api)


static

dekname
08.12.2020, 03:07
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 вот тебе и зависание, потому что стек чистится

dekname
08.12.2020, 03:22
Ну получишь ты адрес, че дальше то? Функция коллбэка __cdecl, методы класса __thiscall вот тебе и зависание, потому что стек чистится


ок, какие есть варианты, если не делать метод статичным?

kin4stat
08.12.2020, 03:23
ок, какие есть варианты, если не делать метод статичным?


Никаких.

memir
08.12.2020, 03:35
Без 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)

san0
08.12.2020, 04:38
кого опускает? кто он такой чтобы опускать? какое у него право?


Прямое право он имеет) 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 и уже хукаешь эти функции в нём.

dekname
10.12.2020, 17:36
Действительно, делай 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
]
)
;

Artem90
13.12.2020, 23:23
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
;




не помогло

Romelo
18.12.2020, 02:18
После инициализации имгуи, вечно рисуется курсор (курсор винды)

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?

RazorRw
24.12.2020, 15:28
у меня есть структура 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
;