Курилка Флудим и шутим тут!
21.07.2019, 00:24
#1
Новичок
Регистрация: 25.08.2016
Сообщений: 21
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Lineage2 Interlude Draw text to canvas (c++)
Hello,
Maybe someone try to find parameters for this function?
from Engine.dll
Код:
?DrawTextToCanvas@UCanvas@@UAEKHHKPBGKKKMHW4L2FontType@@HHKHHHPAV?$TArray@PAVFL2ColorFontInfo@@@@GW4EFontExceptionType@@H@Z
Код:
public: virtual unsigned long __thiscall UCanvas::DrawTextToCanvas(int,int,unsigned long,unsigned short const *,unsigned long,unsigned long,unsigned long,float,int,enum L2FontType,int,int,unsigned long,int,int,int,class TArray<class FL2ColorFontInfo *> *,unsigned short,enum EFontExceptionType,int)
What each parameter mean, maybe someone was facing with it? : confused:
most interesting for me is
enum L2FontType ,
class TArray<class FL2ColorFontInfo *> * ,
enum EFontExceptionType
all other parameters i think possible to guess.
Thanks for any information.
24.07.2019, 10:21
#2
Местный
Регистрация: 24.10.2014
Сообщений: 190
Сказал Спасибо: 4
Имеет 42 спасибок в 40 сообщенях
Перехватывай эту функцию и смотри, что в нее передается.
Либо используй перехват функций DirectX (Direct3DCreate9), в интернете есть примеры, как с помощью DirectX рисовать что-либо в окне La2
26.07.2019, 12:23
#3
Новичок
Регистрация: 25.08.2016
Сообщений: 21
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Цитата:
Сообщение от
ScythLab
Перехватывай эту функцию и смотри, что в нее передается.
Либо используй перехват функций DirectX (Direct3DCreate9), в интернете есть примеры, как с помощью DirectX рисовать что-либо в окне La2
finally i do it
http://prntscr.com/ok1yqe
Код:
void DrawTextX(int x, int y, const char *text,LPDIRECT3DDEVICE9 pDevice) {
RECT rct = {x,y,0,0};
LPD3DXFONT pFont = NULL;
D3DXCreateFont(pDevice, 32, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TEXT("Arial"), &pFont);
if (pFont) {
pFont->DrawText( NULL, text, -1, &rct, DT_CALCRECT, 0 );
pFont->DrawText( NULL, text, -1, &rct, DT_LEFT, D3DCOLOR_XRGB(0,255,0) );
pFont->Release();
}
}
HRESULT APIENTRY myEndScene( LPDIRECT3DDEVICE9 pDevice )
{
while(!pDevice) {pDevice = pDevice;}
DrawTextX(100,100,"coderx.ru",pDevice);
return pEndScene( pDevice );
}
PBYTE HookVTable( PDWORD* dwVTable, PBYTE dwHook, INT Index )
{
DWORD dwOld = 0;
VirtualProtect((void*)((*dwVTable) + (Index*4) ), 4, PAGE_EXECUTE_READWRITE, &dwOld);
PBYTE pOrig = ((PBYTE)(*dwVTable)[Index]);
(*dwVTable)[Index] = (DWORD)dwHook;
VirtualProtect((void*)((*dwVTable) + (Index*4)), 4, dwOld, &dwOld);
return pOrig;
}
LRESULT CALLBACK MsgProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam){return DefWindowProc(hwnd, uMsg, wParam, lParam);}
void DX_Init(DWORD* table)
{
WNDCLASSEXA wc = {sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0L,0L,GetModuleHandleA(NULL),NULL,NULL,NULL,NULL,"DX",NULL};
RegisterClassExA(&wc);
HWND hWnd = CreateWindowA("DX",NULL,WS_OVERLAPPEDWINDOW,100,100,300,300,GetDesktopWindow(),NULL,wc.hInstance,NULL);
LPDIRECT3D9 pD3D = Direct3DCreate9( D3D_SDK_VERSION );
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
LPDIRECT3DDEVICE9 pd3dDevice;
pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&pd3dDevice);
DWORD* pVTable = (DWORD*)pd3dDevice;
pVTable = (DWORD*)pVTable[0];
table[0] = pVTable[42];
DestroyWindow(hWnd);
}
DWORD WINAPI VMT_Patching( LPVOID Param )
{
while(1)
{
Sleep(100);
HookVTable((PDWORD*)nm_pD3Ddev, (PBYTE)myEndScene,42);
}
return 1;
}
void D3D9_Interface_Hook()
{
if(hooked==false)
{
DWORD VTable[3] = {0};
while(GetModuleHandleA("d3d9.dll")==NULL)
{
Sleep(250);
}
DX_Init(VTable);
pEndScene = (oEndScene)DetourFunction((PBYTE)VTable[0],(PBYTE)myEndScene);
while(!nm_pD3Ddev)
{
Sleep(50);
}
pEndScene = (oEndScene)DetourFunction((PBYTE)VTable[0],(PBYTE)pEndScene);
*(PDWORD)&pEndScene = VTable[0];
CreateThread(NULL,0,&VMT_Patching,NULL,0,NULL);
hooked = true;
}
}
Добавлено через 13 часов 10 минут
L2 Create new dx device when window resize? because when i resize window me draws stop working. how to fix it?
Последний раз редактировалось wongerlt, 26.07.2019 в 12:23 .
Причина: Добавлено сообщение
27.07.2019, 09:44
#4
Местный
Регистрация: 24.10.2014
Сообщений: 190
Сказал Спасибо: 4
Имеет 42 спасибок в 40 сообщенях
Цитата:
Сообщение от
wongerlt
L2 Create new dx device when window resize? because when i resize window me draws stop working. how to fix it?
не знаю, не работал с dx, но повторное создание контекста должно отловиться с помощью перехваченной функции Direct3DCreate9.
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 03:28 .
vBulletin style designed by
MSC Team .
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод:
zCarot
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!