DNF_DLL/test/hook.cpp

91 lines
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "pch.h"
#include "hook.h"
extern std::vector<DrawCodestruct>DrawCodeT1_STL;
extern std::vector<DrawCodestruct>DrawCodeT2_STL;
uint32_t hook::H_Register_Nut(uint32_t v, void* f, int freeVarsCnt)
{
static int build = 0;
if (build == 0 && f == (void*)0x005C5980)
{
squirrel::R_Register_Nut();
}
return MLnewclosure(v, f, freeVarsCnt);
}
void hook::H_Register_Pack(void* Ecx)
{
Lpfn_Init(Ecx);
sock::R_Register_Pack();
}
void _fastcall hook::H_Register_DrawCode(DWORD thisc, int Seat, int a3, int a4, int a5, int a6)
{
if (a3 == 9999 && a4 == 9999)
{
for (DrawCodestruct iter : DrawCodeT1_STL)
{
wchar_t* str = DNFTOOL::charTowchar_t((char*)iter.str.c_str());
DrawCodeF(thisc, Seat, iter.Xpos, iter.Ypos, iter.Color, (int)str);
}
DrawCodeT1_STL.clear();
}
if (a3 == 9999 && a4 == 9998)
{
for (DrawCodestruct iter : DrawCodeT2_STL)
{
wchar_t* str = DNFTOOL::charTowchar_t((char*)iter.str.c_str());
DrawCodeF(thisc, Seat, iter.Xpos, iter.Ypos, iter.Color, (int)str);
}
DrawCodeT2_STL.clear();
}
return DrawCodeF(thisc, Seat, a3, a4, a5, a6);
}
int hook::RegisterHook()
{
MH_Initialize();
//HookÊÕ°ü
MH_CreateHook((void*)INIT_PACK_ADDRESS, &H_Register_Pack, reinterpret_cast<void**>(&Lpfn_Init));
//HookNutº¯Êý×¢²á
MH_CreateHook((void*)INIT_NUT_ADDRESS, &H_Register_Nut, reinterpret_cast<void**>(&MLnewclosure));
//Hook»æÖÆ×Ö·û
MH_CreateHook((void*)INIT_NUT_DRAWCODE, &H_Register_DrawCode, reinterpret_cast<void**>(&DrawCodeF));
MH_EnableHook((void*)INIT_PACK_ADDRESS);
MH_EnableHook((void*)INIT_NUT_ADDRESS);
MH_EnableHook((void*)INIT_NUT_DRAWCODE);
return 0;
}
int hook::InitGameScript()
{
uint32_t v = GetSqVm();
SQPushRootTable(v);
SQPushString(v, L"SetHudUI", -1);
SQ_Get(v, -2);
SQPushRootTable(v);
SQPushString(v, L"1.cpp", -1);
SQ_Call(v, 2, 1, 0);
SQPop(v, 2);
std::cout << u8"µ÷Óóɹ¦" << std::endl;
return 0;
}