Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Графика и вывод своей информации
#1
Собственно появилась гигантская мотивация освоить графику и прочие интересности (вывод информации на экран).

Прочитал тему http://coderx.ru/showthread.php?t=1077 и решил попробовать, однако все закончилось печально: крит и GTFO.

Так же видел пример работы в ргварде, но там какой-то ужас и садамия. Вопрос вот в чем: нет ли у кого-нибудь нормального работающего примера с графикой. На том же астериосе выводят онлайн, я вот тоже хочу что-то выводить Smile

Добавлено через 42 секунды
[SRC="c++"]struct TFontDrawInfo
{
int font;
unsigned int color, u1, u2, u3, u4;
};

unsigned int Canvas;
unsigned int mainThread;

typedef void(_fastcall *MasterProcessPreRender) (unsigned int This, unsigned int EDX, unsigned int UCanvas);
MasterProcessPreRender true_MasterProcessPreRender;

typedef int(_fastcall *DrawTextTTFToCanvas) (unsigned int This, unsigned int EDX, int X, int Y, wchar_t *text, TFontDrawInfo *FontDrawInfo, unsigned char, int, int, unsigned int FontDrawInfoSection);
DrawTextTTFToCanvas true_DrawTextTTFToCanvas;

typedef void(_fastcall *Render) (unsigned int This, unsigned int EDX, unsigned int FRenderInterface);
Render true_Render;

void _fastcall new_MasterProcessPreRender(unsigned int This, unsigned int EDX, unsigned int UCanvas)
{
Canvas = UCanvas;
true_MasterProcessPreRender(This, EDX, UCanvas);
}

void _fastcall new_Render(unsigned int This, unsigned int EDX, unsigned int FRenderInterface)
{
mainThread = GetCurrentThreadId();

RECT L2Rect;
auto L2hWND = (HWND*)GetProcAddress(LoadLibraryA("core.dll"), "?GTopWnd@@3PAUHWND__@@A");

true_Render(This, EDX, FRenderInterface);

GetClientRect(*L2hWND, &L2Rect);
time_t rawtime;
struct tm timeinfo;
wchar_t exstr[16], newstr[64];

time(&rawtime);
localtime_s(&timeinfo, &rawtime);
wcsftime(exstr, 15, L"%H:%M", &timeinfo);
wcscpy_s(newstr, L"Test");
wcscat_s(newstr, exstr);

long x = 100;
long y = 100;
auto font = new TFontDrawInfo();
font->color = 0x00FF00;
font->font = 1;
font->u1 = 1;
font->u2 = 2;
font->u3 = 3;
font->u4 = 4;

true_DrawTextTTFToCanvas(Canvas, 0, L2Rect.right - x, L2Rect.top + y, newstr, font, 0xFF, 0, 0, 0);
}

void ExtRender(HMODULE hEngine)
{
true_DrawTextTTFToCanvas = (DrawTextTTFToCanvas)GetProcAddress(hEngine, "?DrawTextTTFToCanvas@UCanvas@@QAEHHHPB_WPBVFontDrawInfo@@EHHPBV?$TArray@PAVFontDrawInfoSection@@@@@Z");
true_MasterProcessPreRender = (MasterProcessPreRender)((int)GetProcAddress(hEngine, "?MasterProcessPreRender@UInteractionMaster@@QAEXPAVUCanvas@@@Z") + 5);
true_Render = (Render)((int)GetProcAddress(hEngine, "?Render@FPlayerSceneNode@@UAEXPAVFRenderInterface@@@Z")+5);
HookHelper::BeginRedirect(GetProcAddress(hEngine, "?MasterProcessPreRender@UInteractionMaster@@QAEXPAVUCanvas@@@Z"), new_MasterProcessPreRender);
HookHelper::BeginRedirect(GetProcAddress(hEngine, "?Render@FPlayerSceneNode@@UAEXPAVFRenderInterface@@@Z"), new_Render);
}[/SRC]

Код, который я переписал выглядит вот так.
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#2
Вообще хотелось бы реализовать что-то типа такого:
[Изображение: 68d02763f5ef1ee59ce4fd9ffedd.png]
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#3
Up!
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#4
Посмотри в исходниках RGuard, правда там тоже не совсем правильно. Там хардкод на некоторые адреса в engine.dll, которые можно получить динамически почти независимо от хроник. Я если доберусь до своего компа, где занимался л2, может зашарю. Там и защита с шифрованием и GUIятинка.
Ответ
#5
ALF. Написал:Посмотри в исходниках RGuard, правда там тоже не совсем правильно. Там хардкод на некоторые адреса в engine.dll, которые можно получить динамически почти независимо от хроник. Я если доберусь до своего компа, где занимался л2, может зашарю. Там и защита с шифрованием и GUIятинка.
Смотрел. Код в первом посте от него же Smile

У тебя GUI с помощью канваса или же через D3D?
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#6
Zubastic Написал:Смотрел. Код в первом посте от него же Smile

У тебя GUI с помощью канваса или же через D3D?

С помошью канваса.

У р-гуарда код на 80% правильный, они правильным путем пошли.
Через Д3Д мне не понравилось, ибо там графика не адаптированная под л2.
Шрифты не л2-шные, теней нету, и вообще как-то не красиво)
А что бы сделать красиво через д3д - надо неплохо заморочится.
Ответ
#7
ALF. Написал:С помошью канваса.

У р-гуарда код на 80% правильный, они правильным путем пошли.
Через Д3Д мне не понравилось, ибо там графика не адаптированная под л2.
Шрифты не л2-шные, теней нету, и вообще как-то не красиво)
А что бы сделать красиво через д3д - надо неплохо заморочится.
Ну я сделал кое что, но всеравно есть косяки Sad.

Например при сворачивании окна, ловлю такие криты:
Цитата:2017.7.3 01:57:50
OS : Windows7(32) 6.1 (Build: 7601)
CPU : GenuineIntel Intel® Core™ i7-3770K CPU @ 3.50GHz @ 3605 MHz 4095MB RAM
Video : NVIDIA GeForce GTX 960 (8253)
PosCode : LS1(273) 0:0:0 8/0 [390]

General protection fault!

History: UD3DRenderDevice::HoldBackBuffer <- UD3DRenderDevice:Tongueresent <- PresentLastFrame <- UGameEngine:Big Grinraw <- UWindowsViewport::Repaint <- UWindowsClient::Tick <- ClientTick <- UGameEngine::Tick <- UpdateWorld <- MainLoop

Цитата:2017.7.3 01:58:44
OS : Windows7(32) 6.1 (Build: 7601)
CPU : GenuineIntel Intel® Core™ i7-3770K CPU @ 3.50GHz @ 3605 MHz 4095MB RAM
Video : NVIDIA GeForce GTX 960 (8253)
PosCode : LS1(273) 0:0:0 8/0 [390]

General protection fault!

History: UD3DRenderDevice::SetRes <- UWindowsViewport::EndFullscreen <- UWindowsViewport::ToggleFullscreen <- WM_KEYUP <- UWindowsViewport::ViewportWndProc <- WWindow::StaticProc <- DispatchMessage <- 006F28D6 261 <- MessagePump <- MainLoop
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#8
Zubastic,
Ну так вы пишете в буффер, дальше когда вы делаете альт+таб, у вас он очищается, и по стеку получается крашь Smile


Present
End

ALF. Написал:Шрифты не л2-шные, теней нету, и вообще как-то не красиво)
А что бы сделать красиво через д3д - надо неплохо заморочится.

Извините, а что там сложного?

Клац
Разработка Emu: PiercingBlow 90%, APB Reloaded 100%.
Самый действенный инструмент для самообучения - грабли.
Ответ
#9
Awiion Написал:Zubastic,
Ну так вы пишете в буффер, дальше когда вы делаете альт+таб, у вас он очищается, и по стеку получается крашь Smile

Да я посмотрел, там вообще выгрузка идет и загрузка обратно. Другое дело, что я понятия не имею как с моим кодом это сделать. Можно в личку кинуть какой-нибудь месседжер? А то уже все работает (почти) кроме 1го но с этой фигней Smile
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#10
Вот пример, накидал на dx9, (dx8, opengl) можно использоватьSmile
Простенький хук, ЕндСцена, Текст и Драв бокс.

[Изображение: Lineage2.png]


Файлы вложений
.rar   DrawWrite.rar (Размер: 5.18 KB / Загрузок: 59)
.rar   SDK(х86).rar (Размер: 1.34 MB / Загрузок: 51)
Разработка Emu: PiercingBlow 90%, APB Reloaded 100%.
Самый действенный инструмент для самообучения - грабли.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  форматный вывод числовых результатов. praetorianec 5 2,252 11-27-2012, 10:39 AM
Последний пост: Evengard
  Корявый вывод PrivetDruK 1 2,027 01-16-2012, 01:22 PM
Последний пост: PrivetDruK
  Вывод из файла. Effas 0 1,734 12-13-2011, 05:20 PM
Последний пост: Effas

Перейти к форуму:


Пользователи, просматривающие эту тему: 8 Гость(ей)