1 #include <metahook.h>
2
3 struct event_hook_t
4 {
5 event_hook_t *next;
6 char *name;
7 void (*pfnEvent)(event_args_s *args);
8 };
9
10 #define HOOKEVENT_SIG "\x8D\x44\x24\x08\x56\x8D\x4C\x24\x08\x50\x51\xFF\x15\x2A\x2A\x2A\x2A\x8B\x44\x24\x10\x83\xC4\x08\x85\xC0\x74\x2A\x80\x38\x00"
11
12 event_hook_t *g_pEventHooks = NULL;
13
14 void EV_Init(void)
15 {
16 DWORD base = (DWORD)g_pMetaHookAPI->SearchPattern((void *)g_dwEngineBase, g_dwEngineSize, HOOKEVENT_SIG, sizeof(HOOKEVENT_SIG) - 1);
17
18 if (base)
19 {
20 g_pEventHooks = (event_hook_t *)(*(DWORD *)(base + 0x72));
21 }
22 }
23
24 event_hook_t *EV_FindHook(const char *name)
25 {
26 if (!g_pEventHooks)
27 {
28 return NULL;
29 }
30
31 event_hook_t *ev = g_pEventHooks;
32
33 while (ev)
34 {
35 if (ev->name && !stricmp(name, ev->name))
36 {
37 return ev;
38 }
39
40 ev = ev->next;
41 }
42
43 return NULL;
44 }