void L2Ex::HookEnterWorld() { WriteServerHook(CALL,(BYTE *)0x84D222, (DWORD *)EWHandler, 0); } void EWHandler(CCreature *pUser) { pUser->UValidateHenna(); pUser->ShowHTML(L"", L"hello:
", 0); } void L2Ex::WriteServerHook(BYTE bType, BYTE *pAddress, DWORD *pFunction, BYTE bNops) { int iSizeBuffer = 5 + bNops; BYTE *bBuffer = new BYTE(iSizeBuffer); bBuffer[0] = bType; *(DWORD *)(bBuffer + 1) = (DWORD)pFunction - (DWORD)(pAddress+5); int i = 5; while (bNops > 0) { bBuffer[i] = NOP; ++i; --bNops; } WriteServerMemory((BYTE *)pAddress, (LPCVOID)&bBuffer, iSizeBuffer); delete[] bBuffer; } CCreature.h #ifndef _CCREATURE_ #define _CCREATURE_ #ifndef _USER_ #include "User.h" #endif class CCreature { public: CCreature(); void ShowHTML(wchar_t *filename, wchar_t *buffer, int classID) { typedef void (__thiscall *_SHOW_HTML)(CCreature *, wchar_t *, wchar_t *, int); _SHOW_HTML _ShowHTML = (_SHOW_HTML)0x80A060; _ShowHTML(this, filename, buffer, classID); } void UValidateHenna() { typedef void (__thiscall *_SHOW_HTML)(CCreature *); _SHOW_HTML _ShowHTML = (_SHOW_HTML)0x809550; _ShowHTML(this); } ~CCreature(); }; #endif