ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   API SF | Урок 5 - Подключение ImGui (https://forum.antichat.xyz/showthread.php?t=1323083)

CleanLegend 27.07.2018 20:58

Для начала нужно скачать пустой проект SF, это можно сделать в этой теме .

Открываем проект и в начало сразу вставляем:

C++:





Код:

#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1


Для подключения ImGui нам понадобиться каллбеки на present, reset, wndproc.

Present:

C++:





Код:

bool
CALLBACK
Present
(
CONST RECT
*
pSourceRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindowOverride
,
CONST RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
{
SF
->
getRender
(
)
->
EndRender
(
)
;
}
return
true
;
}



Reset:

C++:





Код:

HRESULT CALLBACK
Reset
(
D3DPRESENT_PARAMETERS
*
pPresentationParameters
)
{
return
true
;
}



Wndproc:

C++:





Код:

bool
CALLBACK
WndProcHandler
(
HWND hwd
,
UINT msg
,
WPARAM wParam
,
LPARAM lParam
)
{
return
true
;
}



в mainloop регистрируем их:

C++:





Код:

SF
->
getRender
(
)
->
registerD3DCallback
(
eDirect3DDeviceMethods
::
D3DMETHOD_PRESENT
,
Present
)
;
SF
->
getRender
(
)
->
registerD3DCallback
(
eDirect3DDeviceMethods
::
D3DMETHOD_RESET
,
Reset
)
;
SF
->
getGame
(
)
->
registerWndProcCallback
(
SFGame
::
MEDIUM_CB_PRIORITY
,
WndProcHandler
)
;



Теперь можно перейти к подключению ImGui. Скачиваем и распаковываем в папке с проектом эти файлы:

C++:





Код:

imgui
.
cpp
imconfig
.
h
imgui
.
h
imgui_demo
.
cpp
imgui_draw
.
cpp
imgui_internal
.
h
stb_rect_pack
.
h
stb_textedit
.
h
stb_truetype
.
h



Переходим в папку examples и добавляем в проект 4 файла:

C++:





Код:

imgui_impl_dx9
.
cpp
imgui_impl_dx9
.
h
imgui_impl_win32
.
cpp
imgui_impl_win32
.
h



В начало main.cpp добавляем #include:

C++:





Код:

#include "imgui.h"
#include "imgui_impl_dx9.h"
#include "imgui_impl_win32.h"
#include
#define DIRECTINPUT_VERSION 0x0800
#include
#include
extern
LRESULT
ImGui_ImplWin32_WndProcHandler
(
HWND hWnd
,
UINT msg
,
WPARAM wParam
,
LPARAM lParam
)
;



После успешного добавления файлов, можно перейти к инициализации, она будет проходить в mainloop.Для инициализации нам нужен hwnd окна и device.

C++:





Код:

ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
(
void
)
io
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
SF
->
getRender
(
)
->
getD3DDevice
(
)
)
;



Перейдем к презенту:

C++:





Код:

ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
if
(
activew
)
{
ImGui
::
Begin
(
"ImGui меню"
,
&
activew
,
ImVec2
(
305
,
160
)
,
0.8f
,
ImGuiWindowFlags_NoCollapse
|
ImGuiWindowFlags_NoSavedSettings
|
ImGuiWindowFlags_NoResize
)
;
{
ImGui
::
Checkbox
(
"Aimbot"
,
&
bAimbot
)
;
ImGui
::
Checkbox
(
"WH"
,
&
bAimbot
)
;
ImGui
::
Checkbox
(
"SpeedHack"
,
&
bAimbot
)
;
ImGui
::
Checkbox
(
"Что-то крутое"
,
&
bAimbot
)
;
}
ImGui
::
End
(
)
;
}
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;



Добавляем в reset:

C++:





Код:

ImGui_ImplDX9_InvalidateDeviceObjects
(
)
;



В Wndproc:

C++:





Код:

ImGui_ImplWin32_WndProcHandler
(
hwd
,
msg
,
wParam
,
lParam
)
;



Добавляем выгрузку плагина:

C++:





Код:

//Вставляем функцию перед mainloop:
void
CALLBACK
PluginFree
(
)
{
ImGui_ImplDX9_Shutdown
(
)
;
ImGui_ImplWin32_Shutdown
(
)
;
ImGui
::
DestroyContext
(
)
;
}
SF
->
getGame
(
)
->
registerGameDestructorCallback
(
PluginFree
)
;
// в mainloop регистрируем каллбек



В итоге у вас должно получится вот это:

Цитата:

Сообщение от Спойлер

На момент написания гайда использовалась версия: 1.63

Сэнд 27.07.2018 21:25

как такое же сделать с аси подскажите плс

kawa operand 27.07.2018 21:26

прикинь точно так же

imring 27.07.2018 21:29

вроде @mkrn делал проект с подключенным имгуи

Dark_Knight 27.07.2018 21:33

Цитата:

Сообщение от imring

вроде @mkrn делал проект с подключенным имгуи

И без выгрузки Imgui. Кстати, тут тоже самое.

mkrn 28.07.2018 00:56

Цитата:

Сообщение от Dark_Knight

И без выгрузки Imgui. Кстати, тут тоже самое.

это был твой проект с фиксом некоторых багов, соре ;)

Dark_Knight 28.07.2018 01:24

Цитата:

Сообщение от mkrn

это был твой проект с фиксом некоторых багов, соре ;)

Ага. Пофиксил так, что убрал деиницилизацию imgui

mkrn 28.07.2018 03:39

Цитата:

Сообщение от Dark_Knight

Ага. Пофиксил так, что убрал деиницилизацию imgui

ничего не убирал. Быть может вы путаете мой проект с каким-то другим, сударь?

Dark_Knight 28.07.2018 03:55

Цитата:

Сообщение от mkrn

ничего не убирал. Быть может вы путаете мой проект с каким-то другим, сударь?

Человек утверждал, что это твой проект. Никакого в нем декстуктора плагина не увидел даже.

mkrn 28.07.2018 04:13

Цитата:

Сообщение от Dark_Knight

Человек утверждал, что это твой проект. Никакого в нем декстуктора плагина не увидел даже.

Софт - ImGUI(https://blast.hk/threads/12387/)

в моём проекте всё точно так же как и здесь, только исправлены параметры ресета и в imgui.cpp там фикс с разрешением экрана связанный. Вся кривизна, до которой в этом проекте можно доебаться, сделана тобой и ебать себе мозг с ней у меня не было ни малейшего желания. Свой проект я делал бы по-другому, а в этом моей целью было только лишь то, чтобы он нормально работал и не крашил из-за того, что дарк_кнуйт решил из презента параметры в ресет ебануть


Время: 00:36