#include "pch.h" #include "hook.h" extern std::vectorDrawCodeT1_STL; extern std::vectorDrawCodeT2_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)iter.str); } DrawCodeT1_STL.clear(); } //特殊 if (a3 == 9999 && a4 == 9998) { uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"DrawMainMaxLayerCustomUI", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushString(v, L"Lenheart", -1); SQ_Call(v, 2, 0, 0); SQPop(v, 2); //int num = SQGetTop(v); //std::cout << num << std::endl; 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)iter.str); } DrawCodeT2_STL.clear(); } //选角色 if (a3 == 9999 && a4 == 9489) { static bool Init = false; if (!Init) { InitGameScript();//调用初始化程序 Init = true; } uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"InitLenheartClass", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushString(v, L"Lenheart", -1); SQ_Call(v, 2, 0, 0); SQPop(v, 2); } #if defined MONSTER_BLOOD_UI if (a4 == 100 || a4 == 107 || a4 == 99) { //if (a3 == 37 || a3 == 100 || a3 == 74 || a3 == 70) //{ a3 = 5000; a4 = 5000; //} } #endif //std::cout << "xPos:" << a3 << "yPos:" << a4 <(&Lpfn_Init)); //HookNut函数注册 MH_CreateHook((void*)INIT_NUT_ADDRESS, &H_Register_Nut, reinterpret_cast(&MLnewclosure)); //Hook绘制字符 MH_CreateHook((void*)INIT_NUT_DRAWCODE, &H_Register_DrawCode, reinterpret_cast(&DrawCodeF)); MH_EnableHook((void*)INIT_PACK_ADDRESS); MH_EnableHook((void*)INIT_NUT_ADDRESS); MH_EnableHook((void*)INIT_NUT_DRAWCODE); return 0; } int hook::InitGameScript() { #if defined LOCALHOSTS_SWITCH 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); #else uint32_t v = GetSqVm(); SQPushRootTable(v); SQPushString(v, L"L_sq_Dofile", -1); SQ_Get(v, -2); SQPushRootTable(v); SQPushString(v, L"licbylist.dll", -1); SQ_Call(v, 2, 0, 0); SQPop(v, 2); #endif return 0; }