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