2649 lines
		
	
	
		
			72 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			2649 lines
		
	
	
		
			72 KiB
		
	
	
	
		
			C++
		
	
	
	
| #include "pch.h"
 | ||
| #include "hook.h"
 | ||
| #include "inlinehook.h"
 | ||
| extern int LbState;
 | ||
| extern int RbState;
 | ||
| extern int MbState;
 | ||
| 
 | ||
| 
 | ||
| static int OtherPlayerInfoType = 0;
 | ||
| static bool HookOtherPlayerInfo = false;
 | ||
| static int OtherPlayerInfoImg = 0;
 | ||
| 
 | ||
| //游戏初始化完毕Flag
 | ||
| static bool InitGameFlag = false;
 | ||
| //注册nut
 | ||
| uint32_t __cdecl hook::H_Register_Nut(uint32_t v, void* f, int freeVarsCnt)
 | ||
| {
 | ||
|     
 | ||
|     //wchar_t* funcName = nullptr; 
 | ||
|     //SQGetString(v, -1 - freeVarsCnt, &funcName);
 | ||
|     //char* OutPutText = DNFTOOL::SquirrelU2W(funcName);
 | ||
|     //std::string FuncName = OutPutText;
 | ||
|     //delete []OutPutText;
 | ||
| 
 | ||
|     //std::wcout << funcName << std::endl;
 | ||
|     //wprintf(L"Function:%s Num:%d Address: 0x%p\n", funcName, freeVarsCnt,f);
 | ||
|     
 | ||
|     static int build = 0;
 | ||
|     if (build == 0 && f == (void*)0x005C5980)
 | ||
|     {
 | ||
|         squirrel::R_Register_Nut();
 | ||
|         //squirrel::InitGameScript();//调用初始化程序
 | ||
|         build = 1;
 | ||
| 
 | ||
|         //Quick_SQdofileBuffer("BaseC_Tool", BaseC_Tool);
 | ||
|         //Quick_SQdofileBuffer("BaseC_Tool1", BaseC_Tool1);
 | ||
|         //Quick_SQdofileBuffer("BaseC_Tool2", BaseC_Tool2);
 | ||
|         //Quick_SQdofileBuffer("BaseC_Tool3", BaseC_Tool3);
 | ||
| 
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         std::string BaseFile = "YosinBaseC";
 | ||
|         //std::string Base = "function Sq_Get_Ex_LevelData(a,b,c) {return 0;} function Sq_Get_Ex_IntData(a,b,c) {return 0;} function Sq_Get_Ex_SkillCoolTime(a,b,c) {return 0;} function Lenheart(pack) {} function Sq_DrawMainMaxLayerCustomUI(pack) { } function Sq_DrawMainTopLayerCustomUI(pack) {} function Sq_SelectCharacter(Chunk){} function Sq_SendPackType_Event(Chunk){} function Sq_SendPackByte_Event(Chunk){} function Sq_SendPackWord_Event(Chunk){} function Sq_SendPackDWord_Event(Chunk){} function Sq_SendPackChar_Event(Chunk){}  function Sq_SendPack_Event(Chunk){}  function Sq_Pack_Control(Chunk){} ";
 | ||
|         std::string Base = R"(
 | ||
| Lenheart_P_Update <- true;
 | ||
| function     Sq_L_Medal    (x,y)    {}
 | ||
| function     Sq_SettingWindowCallBack    (x,y)    {}
 | ||
| function     Sq_BuffSwitchingCallBack    (x,y)    {}
 | ||
| function     Sq_SwitchingCallBack    (x,y)    {}
 | ||
| function     Sq_UpgradeCallBack    (x,y)    {}
 | ||
| function     Sq_RecoveryCallBack    (x,y)    {}
 | ||
| function     Sq_RecoveryTypeSetCallBack    (Type)    {}
 | ||
| function     Sq_DrawMainMaxLayerCustomUI    (pack)    {}
 | ||
| function     Lenheart    (VmTop)    {}
 | ||
| function     Sq_MouseEventCallBack    (Lb, Rb, Mb)    {}
 | ||
| function     Sq_SelectCharacter    (Chunk)    {}
 | ||
| function     Sq_DrawMainTopLayerCustomUI    (pack)    {}
 | ||
| function     Sq_GetExeStr_Event    (StrIndex)    {return StrIndex;}
 | ||
| function     Sq_CreatChr    (chunk)    {}
 | ||
| function     Sq_SendPackType_Event    (Type)    {}
 | ||
| function     Sq_SendPackByte_Event    (Parm)    {}
 | ||
| function     Sq_SendPackWord_Event    (Parm)    {}
 | ||
| function     Sq_SendPackDWord_Event    (Parm)    {}
 | ||
| function     Sq_SendPackChar_Event    (Parm)    {}
 | ||
| function     Sq_SendPack_Event    ()    {}
 | ||
| function     Sq_DrawItemBack    (Xpos, Ypos, Image)    {}
 | ||
| function     Sq_DrawItemFront    (Xpos, Ypos, Image)    {}
 | ||
| function     Sq_GetDrawMonBloodSw    ()    {return false;}
 | ||
| function     Sq_DrawMonsterBlood    (Object, X, Y)    {}
 | ||
| function     Sq_Set_Inventory_M_Pos    (This)    {}
 | ||
| function     Sq_Get_Ex_IntData    (SkillAddress, Idx, objAddress)    {return 0;}
 | ||
| function     Sq_Get_Ex_SkillCoolTime    (SkillAddress, Idx, objAddress)    {return 0;}
 | ||
| function     Sq_Get_Ex_LevelData    (SkillAddress, Idx, objAddress)    {return 0;}
 | ||
| function     Sq_PlayerEachPos    (x, y)    {}
 | ||
| function     Sq_DrawMainMaxLayerCustomUI    (pack)    {}
 | ||
| function     Sq_PushDamageFontData    (ObjAddress, X, Y, Z, Value, Type)    { return 0;}
 | ||
| function     Sq_Pack_Control    (chunk)    {}
 | ||
| function     Sq_MessageWindowDraw    (a,c)    {}
 | ||
| function     Sq_Get_Event_Pos    (a)    {return 1;}
 | ||
| function     Sq_L_OtherPlayerInfo    (x, y, Type, Value, ImgBuf)    {local str = Value.tostring(); local lenght = LenheartTextClass.GetStringLength(str); L_sq_DrawImg(ImgBuf, x + 70 - lenght, y + 5);  return Value;}
 | ||
| function     Sq_DrawMiniMapUI (a)    {}
 | ||
| function     Sq_CompleteTask(a1,a2,a3){}
 | ||
| function     L_drawMainCustomUI_All(){}
 | ||
| function L_MouseCallBack(a, b, c,d) {}
 | ||
| function L_DrawWindow_A() {}
 | ||
| function L_DrawWindow_B() {}
 | ||
| function L_OpenOldWindowCallBack(WindowIndex) {}
 | ||
| )";
 | ||
|         wchar_t* sfile = DNFTOOL::charTowchar_t((char*)BaseFile.c_str());
 | ||
|         wchar_t* ss = DNFTOOL::charTowchar_t((char*)Base.c_str());
 | ||
|         squirrel::SQdofileBuffer(v, sfile, ss);
 | ||
|     }
 | ||
| #if defined DOFILE_HOOK
 | ||
|     if (f == (void*)0x013563C0)
 | ||
|     {
 | ||
|         return MLnewclosure(v, squirrel::LDofile, freeVarsCnt);
 | ||
|     }
 | ||
| #endif
 | ||
|     return MLnewclosure(v, f, freeVarsCnt);
 | ||
| }
 | ||
| 
 | ||
| typedef uint32_t(__cdecl* LSqPushStringFunc)(uint32_t v, const wchar_t* s, uint32_t l);
 | ||
| LSqPushStringFunc LrealSqPushString;
 | ||
| uint32_t __cdecl LMySqPushString(uint32_t v, const wchar_t* s, uint32_t l)
 | ||
| {
 | ||
|     //获取技能攻击力
 | ||
|     if (!wcscmp(s, L"getCurrentModuleDamageRate")) {
 | ||
|         return LrealSqPushString(v, L"L_getCurrentModuleDamageRate", l);
 | ||
|     }
 | ||
| 
 | ||
|     wprintf(L"调用函数: %s", s);
 | ||
| 
 | ||
|     return LrealSqPushString(v, s, l);
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| //注册收包
 | ||
| void hook::H_Register_Pack(void* Ecx)
 | ||
| {
 | ||
|     Lpfn_Init(Ecx);
 | ||
|     sock::R_Register_Pack();
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| //Hook文字
 | ||
| #ifdef CODEDRAW
 | ||
|     struct CodeDrawObj
 | ||
|     {
 | ||
|         int Color;
 | ||
|         std::string str;
 | ||
|     };
 | ||
|     extern  std::map< std::string, CodeDrawObj>CodeDrawMap;
 | ||
| #endif
 | ||
| 
 | ||
|  typedef DWORD(_fastcall _BFontInitW)(DWORD thisc, DWORD Seat);
 | ||
|  static _BFontInitW* Wsub_1206570 = (_BFontInitW*)0x1206570;
 | ||
| 
 | ||
| 
 | ||
| typedef int(_fastcall _DrawOtherPlayer_Img)(int thisc, void*, int X, int Y, int Img);
 | ||
| static _DrawOtherPlayer_Img* DrawOtherPlayer_Img = (_DrawOtherPlayer_Img*)0x11A8F60;
 | ||
| //HOOK绘制字体
 | ||
| void _fastcall hook::H_Register_DrawCode(DWORD thisc, int Seat, int a3, int a4, int a5, int a6)
 | ||
| {
 | ||
| 
 | ||
| 
 | ||
|     wchar_t* strbuffer = (wchar_t*)a6;
 | ||
|     if (strbuffer == NULL)return;
 | ||
| 
 | ||
|     wchar_t* clone = new wchar_t[wcslen(strbuffer) + 2];
 | ||
|     wcscpy(clone, strbuffer);
 | ||
| 
 | ||
|     std::string GameStr;
 | ||
|     DNFTOOL::Wchar_tToString(GameStr, clone);
 | ||
|     delete[]clone;
 | ||
| 
 | ||
| 
 | ||
|     //他人信息描述HOOK
 | ||
|     if (OtherPlayerInfoType != 0) {
 | ||
|         if (!HookOtherPlayerInfo) {
 | ||
|             HookOtherPlayerInfo = true;
 | ||
|         }
 | ||
|         else {
 | ||
|             HookOtherPlayerInfo = false;
 | ||
| 
 | ||
| 
 | ||
|             int Value = atoi(GameStr.c_str());
 | ||
| 
 | ||
|             uint32_t v = GetSqVm();
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushString(v, L"Sq_L_OtherPlayerInfo", -1);
 | ||
|             SQ_Get(v, -2);
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushInt(v, a3);
 | ||
|             SQPushInt(v, a4);
 | ||
|             SQPushInt(v, OtherPlayerInfoType - 1);
 | ||
|             SQPushInt(v, Value);
 | ||
|             if (OtherPlayerInfoImg) {
 | ||
|                 SQPushInt(v, OtherPlayerInfoImg);
 | ||
|                 //DrawOtherPlayer_Img(*(int*)0x1B45B94, 0, a3, a4 + 3, OtherPlayerInfoImg);
 | ||
|             }
 | ||
|             else {
 | ||
|                 SQPushInt(v, 0);
 | ||
|             }
 | ||
| 
 | ||
|             SQ_Call(v, 6, 1, 1);
 | ||
|             SQGetInt(v, -1, &Value);
 | ||
|             SQPop(v, 3);
 | ||
| 
 | ||
|             wchar_t wcs[128];
 | ||
|             int Type = OtherPlayerInfoType - 1;
 | ||
|             if ((Type >= 12 && Type <= 16) || Type == 18 || Type == 19) {
 | ||
|                 wsprintf(wcs, L"+%d%S", Value, ".0%");
 | ||
|             }
 | ||
|             else {
 | ||
|                 wsprintf(wcs, L"%d", Value);
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             DrawCodeF(thisc, Seat, a3, a4, a5, (int)wcs);
 | ||
| 
 | ||
|             OtherPlayerInfoType = 0;
 | ||
|             //DrawCodeF(thisc, Seat, a3, a4, a5, a6);
 | ||
|             return;
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|     if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 6) {
 | ||
|         if (GameStr.find("ch20.天帷巨兽") != std::string::npos)
 | ||
|         {
 | ||
|             wchar_t* nclone = L"超时空之战-团本区域";
 | ||
|             return DrawCodeF(thisc, Seat, a3, a4, a5, (int)nclone);
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     //if (GameStr.find("天界地区") != std::string::npos)
 | ||
|     //{
 | ||
|     //    std::cout << GameStr << std::endl;
 | ||
|     //}
 | ||
| 
 | ||
|     //std::cout << GameStr << std::endl;
 | ||
|     //if (GameStr.find("辅助装备") != std::string::npos)
 | ||
|     //{
 | ||
|     //    wchar_t* nclone = new wchar_t[wcslen(strbuffer) + 8];
 | ||
|     //    WReplace(nclone, strbuffer, L"辅助装备", L"VIP装备");
 | ||
|     //    //string_replace(GameStr, "辅助装备", "VIP装备");
 | ||
|     //    //const wchar_t* newstrbuffer = DNFTOOL::GetWC((char*)GameStr.c_str());
 | ||
|     //    return DrawCodeF(thisc, Seat, a3, a4, a5, (int)nclone);
 | ||
|     //}
 | ||
|     //Hook文字
 | ||
| 
 | ||
| 
 | ||
| #ifdef CODEDRAW
 | ||
|         if (CodeDrawMap.count(GameStr) == 1)
 | ||
|         {
 | ||
|             wchar_t* str = DNFTOOL::char2wchar(CodeDrawMap[GameStr].str.c_str());
 | ||
|             DrawCodeF(thisc, Seat, a3, a4, CodeDrawMap[GameStr].Color, (int)str);
 | ||
|             delete[]str;
 | ||
|             return;
 | ||
|         }
 | ||
| #endif
 | ||
| 
 | ||
| #ifdef MEDAL_SWITCH
 | ||
|         if (GameStr.find("倾泪寒勋章") != std::string::npos || GameStr.find("傾淚寒勳章") != std::string::npos || GameStr.find("倾泪寒勳章") != std::string::npos || GameStr.find("yosin_medal") != std::string::npos)
 | ||
|         {
 | ||
|             Wsub_1206570(thisc, 0);
 | ||
|             uint32_t v = GetSqVm();
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushString(v, L"Sq_L_Medal", -1);
 | ||
|             SQ_Get(v, -2);
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushInt(v, a3);
 | ||
|             SQPushInt(v, a4);
 | ||
|             SQ_Call(v, 3, 0, 1);
 | ||
|             SQPop(v, 2);
 | ||
|             return;
 | ||
|         }
 | ||
| #endif
 | ||
| 
 | ||
|     //Hook游戏设置窗口CallBack  ui/optionwindow
 | ||
| #ifdef SETTINGWINDOWS
 | ||
|     if (GameStr.find("倾泪寒自定义设置") != std::string::npos)
 | ||
|     {
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_SettingWindowCallBack", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, a3);
 | ||
|         SQPushInt(v, a4);
 | ||
|         SQ_Call(v, 3, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
| 
 | ||
|         return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer);
 | ||
|     }
 | ||
| #endif 
 | ||
| 
 | ||
|     //buff换装
 | ||
| #ifdef BUFFSWITCHING_SWITCH
 | ||
|     if (GameStr.find("LenheartBUFFSwitching") != std::string::npos)
 | ||
|     {
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_BuffSwitchingCallBack", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, a3);
 | ||
|         SQPushInt(v, a4);
 | ||
|         SQ_Call(v, 3, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
| 
 | ||
|         return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer);
 | ||
|     }
 | ||
|     if (GameStr.find("LenheartSwitching") != std::string::npos)
 | ||
|     {
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_SwitchingCallBack", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, a3);
 | ||
|         SQPushInt(v, a4);
 | ||
|         SQ_Call(v, 3, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
| 
 | ||
|         return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer);
 | ||
|     }
 | ||
| #endif 
 | ||
| 
 | ||
| 
 | ||
|     //强化系统
 | ||
| #ifdef NEWUPGRADE_SWITCH
 | ||
|     if (GameStr.find("LenheartUpgrade") != std::string::npos)
 | ||
|     {
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_UpgradeCallBack", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, a3);
 | ||
|         SQPushInt(v, a4);
 | ||
|         SQ_Call(v, 3, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
| 
 | ||
|         return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer);
 | ||
|     }
 | ||
| #endif 
 | ||
| 
 | ||
|     //Hook游戏背包窗口回收功能CallBack  ui/inventory/inventory_bottom.ui
 | ||
| #ifdef RecoverySystem
 | ||
|     if (GameStr.find("倾泪寒回收") != std::string::npos)
 | ||
|     {
 | ||
|         if (GameStr.find("倾泪寒回收功能") != std::string::npos)
 | ||
|         {
 | ||
|             uint32_t v = GetSqVm();
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushString(v, L"Sq_RecoveryCallBack", -1);
 | ||
|             SQ_Get(v, -2);
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushInt(v, a3 - 800);
 | ||
|             SQPushInt(v, a4);
 | ||
|             SQ_Call(v, 3, 0, 1);
 | ||
|             SQPop(v, 2);
 | ||
| 
 | ||
|             return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer);
 | ||
|         }
 | ||
|         int Type = 0;
 | ||
|         if (GameStr.find("倾泪寒回收装备") != std::string::npos)Type = 1;
 | ||
|         else if (GameStr.find("倾泪寒回收消耗品") != std::string::npos)Type = 2;
 | ||
|         else if (GameStr.find("倾泪寒回收材料") != std::string::npos)Type = 3;
 | ||
|         else if (GameStr.find("倾泪寒回收副职业材料") != std::string::npos)Type = 5;
 | ||
|         else if (GameStr.find("倾泪寒回收任务材料") != std::string::npos)Type = 4;
 | ||
|         else if (GameStr.find("倾泪寒回收时装") != std::string::npos)Type = 6;
 | ||
|         else if (GameStr.find("倾泪寒回收徽章") != std::string::npos)Type = 7;
 | ||
|         else if (GameStr.find("倾泪寒回收宠物宠物") != std::string::npos)Type = 8;
 | ||
|         else if (GameStr.find("倾泪寒回收宠物装备") != std::string::npos)Type = 9;
 | ||
|         else if (GameStr.find("倾泪寒回收宠物消耗品") != std::string::npos)Type = 10;
 | ||
|         if (Type > 0)
 | ||
|         {
 | ||
|             uint32_t v = GetSqVm();
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushString(v, L"Sq_RecoveryTypeSetCallBack", -1);
 | ||
|             SQ_Get(v, -2);
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushInt(v, Type);
 | ||
|             SQ_Call(v, 2, 0, 1);
 | ||
|             SQPop(v, 2);
 | ||
| 
 | ||
|             return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer);
 | ||
|         }
 | ||
|     }
 | ||
|     if (GameStr.find("傾淚寒回收") != std::string::npos)
 | ||
|     {
 | ||
|         if (GameStr.find("傾淚寒回收功能") != std::string::npos)
 | ||
|         {
 | ||
|             uint32_t v = GetSqVm();
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushString(v, L"Sq_RecoveryCallBack", -1);
 | ||
|             SQ_Get(v, -2);
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushInt(v, a3 - 800);
 | ||
|             SQPushInt(v, a4);
 | ||
|             SQ_Call(v, 3, 0, 1);
 | ||
|             SQPop(v, 2);
 | ||
| 
 | ||
|             return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer);
 | ||
|         }
 | ||
|         int Type = 0;
 | ||
|         if (GameStr.find("傾淚寒回收裝備") != std::string::npos)Type = 1;
 | ||
|         else if (GameStr.find("傾淚寒回收消耗品") != std::string::npos)Type = 2;
 | ||
|         else if (GameStr.find("傾淚寒回收材料") != std::string::npos)Type = 3;
 | ||
|         else if (GameStr.find("傾淚寒回收副職業材料") != std::string::npos)Type = 5;
 | ||
|         else if (GameStr.find("傾淚寒回收任務材料") != std::string::npos)Type = 4;
 | ||
|         else if (GameStr.find("傾淚寒回收時裝") != std::string::npos)Type = 6;
 | ||
|         else if (GameStr.find("傾淚寒回收徽章") != std::string::npos)Type = 7;
 | ||
|         else if (GameStr.find("傾淚寒回收寵物寵物") != std::string::npos)Type = 8;
 | ||
|         else if (GameStr.find("傾淚寒回收寵物裝備") != std::string::npos)Type = 9;
 | ||
|         else if (GameStr.find("傾淚寒回收寵物消耗品") != std::string::npos)Type = 10;
 | ||
|         if (Type > 0)
 | ||
|         {
 | ||
|             uint32_t v = GetSqVm();
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushString(v, L"Sq_RecoveryTypeSetCallBack", -1);
 | ||
|             SQ_Get(v, -2);
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushInt(v, Type);
 | ||
|             SQ_Call(v, 2, 0, 1);
 | ||
|             SQPop(v, 2);
 | ||
| 
 | ||
|             return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer);
 | ||
|         }
 | ||
|     }
 | ||
| #endif 
 | ||
| 
 | ||
| #ifndef SELL
 | ||
|     /*
 | ||
|     //副屏绘制文字
 | ||
|     if (a3 == 15 && a4 == 503)
 | ||
|     {
 | ||
|         for (DrawCodestruct iter : DrawCodeT3_STL)
 | ||
|         {
 | ||
|             wchar_t* str = DNFTOOL::char2wchar(iter.str.c_str());
 | ||
|             DrawCodeF(thisc, Seat, iter.Xpos, iter.Ypos, iter.Color, (int)str);
 | ||
|             delete[]str;
 | ||
|         }
 | ||
|         DrawCodeT3_STL.clear();
 | ||
|         return;
 | ||
|     }
 | ||
|     */
 | ||
| 
 | ||
|     //Ver.1180.2.1r
 | ||
|     if (GameStr.find("Ver. 1.180.2.1r") != std::string::npos)
 | ||
|     {
 | ||
|         return;
 | ||
|     }    
 | ||
|     if (GameStr.find("ch11.格兰之森") != std::string::npos)
 | ||
|     {
 | ||
|         a3 += 32;
 | ||
|         a4 -= 58;
 | ||
|     }
 | ||
|     if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 6 && (GameStr.find("顺畅") != std::string::npos || GameStr.find("拥挤") != std::string::npos || GameStr.find("爆满") != std::string::npos))
 | ||
|     {
 | ||
|         a3 += 32;
 | ||
|         a4 -= 58;
 | ||
|     }
 | ||
|     //   ui/hud/hud.ui  请勿删除
 | ||
|     //if (a3 == 9999 && a4 == 9999)
 | ||
|     //{
 | ||
|     //    squirrel::SqrCallBackFunc();
 | ||
|     //    //imguiC::Init();
 | ||
|     //    return;
 | ||
|     //}
 | ||
| #endif // !SELL
 | ||
| 
 | ||
| 
 | ||
|     //   ui/hud/hud.ui  特殊
 | ||
| //    if (a3 == 9999 && a4 == 9998)
 | ||
| //    {
 | ||
| //        Wsub_1206570(thisc, 0);
 | ||
| //        uint32_t v = GetSqVm();
 | ||
| //        //SQPushRootTable(v);
 | ||
| //        //SQPushString(v, L"Sq_DrawMainMaxLayerCustomUI", -1);
 | ||
| //        //SQ_Get(v, -2);
 | ||
| //        //SQPushRootTable(v);
 | ||
| //        //SQPushString(v, L"Lenheart", -1);
 | ||
| //        //SQ_Call(v, 2, 0, 1);
 | ||
| //        //SQPop(v, 2);
 | ||
| //
 | ||
| //#ifdef MOUSE_SWITCH
 | ||
| //        SQPushRootTable(v);
 | ||
| //        SQPushString(v, L"Sq_MouseEventCallBack", -1);
 | ||
| //        SQ_Get(v, -2);
 | ||
| //        SQPushRootTable(v);
 | ||
| //        SQPushInt(v, LbState);
 | ||
| //        SQPushInt(v, RbState);
 | ||
| //        SQPushInt(v, MbState);
 | ||
| //        SQ_Call(v, 4, 0, 1);
 | ||
| //        SQPop(v, 2);
 | ||
| //#endif // MOUSE_SWITCH
 | ||
| //
 | ||
| //
 | ||
| //        for (DrawCodestruct iter : DrawCodeT1_STL)
 | ||
| //        {
 | ||
| //            wchar_t* str = DNFTOOL::char2wchar(iter.str.c_str());
 | ||
| //            DrawCodeF(thisc, Seat, iter.Xpos, iter.Ypos, iter.Color, (int)str);
 | ||
| //            delete[]str;
 | ||
| //        }
 | ||
| //        DrawCodeT1_STL.clear();
 | ||
| //        return;
 | ||
| //    }
 | ||
| 
 | ||
| 
 | ||
|     //   ui/selectcharacter/selectcharacterover.ui  选角色
 | ||
|     //if (a3 == 9999 && a4 == 9489)
 | ||
|     //{
 | ||
|     //    static bool Init = false;
 | ||
|     //    if (!Init)
 | ||
|     //    {
 | ||
|     //        squirrel::InitGameScript();//调用初始化程序
 | ||
|     //        Init = true;
 | ||
|     //    }
 | ||
| 
 | ||
|     //    uint32_t v = GetSqVm();
 | ||
|     //    SQPushRootTable(v);
 | ||
|     //    SQPushString(v, L"Sq_SelectCharacter", -1);
 | ||
|     //    SQ_Get(v, -2);
 | ||
|     //    SQPushRootTable(v);
 | ||
|     //    SQPushString(v, L"Lenheart", -1);
 | ||
|     //    SQ_Call(v, 2, 0, 1);
 | ||
|     //    SQPop(v, 2);
 | ||
|     //    return;
 | ||
|     //}
 | ||
|     
 | ||
|     //   ui/event/creatednftwevent/creatednftwevent.ui   顶层绘制
 | ||
|     //if (a3 == 8888 && a4 == 8884)
 | ||
|     //{
 | ||
|     //    uint32_t v = GetSqVm();
 | ||
|     //    SQPushRootTable(v);
 | ||
|     //    SQPushString(v, L"Sq_DrawMainTopLayerCustomUI", -1);
 | ||
|     //    SQ_Get(v, -2);
 | ||
|     //    SQPushRootTable(v);
 | ||
|     //    SQPushString(v, L"Lenheart", -1);
 | ||
|     //    SQ_Call(v, 2, 0, 1);
 | ||
|     //    SQPop(v, 2);
 | ||
| 
 | ||
|     //    for (DrawCodestruct iter : DrawCodeT2_STL)
 | ||
|     //    {
 | ||
|     //        wchar_t* str = DNFTOOL::char2wchar(iter.str.c_str());
 | ||
|     //        DrawCodeF(thisc, Seat, iter.Xpos, iter.Ypos, iter.Color, (int)str);
 | ||
|     //        delete[]str;
 | ||
|     //    }
 | ||
|     //    DrawCodeT2_STL.clear();
 | ||
|     //    return;
 | ||
|     //}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     return DrawCodeF(thisc, Seat, a3, a4, a5, a6);
 | ||
| }
 | ||
| 
 | ||
| #ifdef GET_EXE_STR
 | ||
| //Exe索引字符串函数Hook
 | ||
| typedef int(_cdecl _sub1220590)(int a1);
 | ||
| static _sub1220590* sub1220590 = (_sub1220590*)0x1220590;
 | ||
| int _cdecl Newsub1220590(int a1)
 | ||
| {
 | ||
|     static bool OpenSw = false;
 | ||
|     if (!OpenSw)
 | ||
|     {
 | ||
|         if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1)
 | ||
|         {
 | ||
|             OpenSw = true;
 | ||
|         }
 | ||
|         return sub1220590(a1);
 | ||
|     }
 | ||
|     else
 | ||
|     {
 | ||
|         int StrIndex;
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_GetExeStr_Event", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, a1);
 | ||
|         SQ_Call(v, 2, 1, 1);
 | ||
|         SQGetInt(v, -1, &StrIndex);
 | ||
|         SQPop(v, 3);
 | ||
| 
 | ||
|         return sub1220590(StrIndex);
 | ||
|     }
 | ||
| }
 | ||
| #endif
 | ||
| 
 | ||
| //HOOK创建角色
 | ||
| #ifdef CREAT_CHR_UI
 | ||
| typedef DWORD(_fastcall _OldCreatChr)(DWORD thisc, DWORD Seat, DWORD a3);
 | ||
| static _OldCreatChr* OldCreatChr;
 | ||
| DWORD _fastcall CreatChr(DWORD thisc, DWORD Seat, DWORD a2)
 | ||
| {
 | ||
|     //std::cout << "a2:" << a2 << std::endl;
 | ||
|     if (*(int*)0x1A5FE1C == 1)
 | ||
|     {
 | ||
|         if (*(int*)a2 == 25481068)
 | ||
|         {
 | ||
|             uint32_t v = GetSqVm();
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushString(v, L"Sq_CreatChr", -1);
 | ||
|             SQ_Get(v, -2);
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushString(v, L"Lenheart", -1);
 | ||
|             SQ_Call(v, 2, 0, 1);
 | ||
|             SQPop(v, 2);
 | ||
|         }
 | ||
|     }
 | ||
|     return OldCreatChr(thisc, 0, a2);
 | ||
| }
 | ||
| #endif // CREAT_CHR_UI
 | ||
| 
 | ||
| 
 | ||
| //HOOK Item颜色
 | ||
| #ifdef ITEMRARITY
 | ||
| extern  std::map< int,int>ItemColorMap;
 | ||
| 
 | ||
| typedef DWORD(_cdecl _OldHookEquNameColor)(int rarity);
 | ||
| static _OldHookEquNameColor* OldHookEquNameColor;
 | ||
| 
 | ||
| DWORD _cdecl HookEquNameColor(int rarity)
 | ||
| {
 | ||
|     DWORD OldColor = OldHookEquNameColor(rarity);
 | ||
|     switch (rarity)
 | ||
|     {
 | ||
|     case 6:
 | ||
|         return 0xFF0055FF;
 | ||
|     case 7:
 | ||
|         return 0xFF9314FF;
 | ||
|     case 8:
 | ||
|         return 0xFF1CBC0C;
 | ||
|     case 9:
 | ||
|         return 0xFFACFF08;
 | ||
|     }
 | ||
|     return OldColor;
 | ||
| }
 | ||
| 
 | ||
| typedef DWORD(_fastcall _OldHookItemColor)(DWORD thisc, DWORD Seat);
 | ||
| static _OldHookItemColor* OldHookItemColor;
 | ||
| 
 | ||
| DWORD _fastcall HookItemColor(DWORD thisc, DWORD Seat)
 | ||
| {
 | ||
|     int ItemCode = *(int*)(thisc + 0x1C);
 | ||
|     if (ItemColorMap.count(ItemCode) == 1)
 | ||
|     {
 | ||
|         return ItemColorMap[ItemCode];
 | ||
|     }
 | ||
| 
 | ||
|     //不在注册项目颜色map里就执行原颜色获取
 | ||
|     int Rarity = *(int*)(thisc + 0xF4);
 | ||
|     int color = HookEquNameColor(Rarity);
 | ||
| 
 | ||
|     return color;
 | ||
| }
 | ||
| #endif
 | ||
| 
 | ||
| //HOOK 发包类型
 | ||
| #ifdef SENDPACKHOOK
 | ||
| static SendPacksType _OldSendPackType;
 | ||
| int __fastcall NewSendPacksType(DWORD thisc, int Seat, int Parm)
 | ||
| {
 | ||
|     static bool OpenSw = false;
 | ||
|     if (!OpenSw)
 | ||
|     {
 | ||
|         if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1)
 | ||
|         {
 | ||
|             OpenSw = true;
 | ||
|         }
 | ||
|         return _OldSendPackType(thisc, 0, Parm);
 | ||
|     }
 | ||
|     else
 | ||
|     {
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_SendPackType_Event", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, Parm);
 | ||
|         SQ_Call(v, 2, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
|         return _OldSendPackType(thisc, 0, Parm);
 | ||
|     }
 | ||
| }
 | ||
| static SendPacksByte _OldSendPackByte;
 | ||
| int __fastcall NewSendPacksByte(DWORD thisc, int Seat, int Parm)
 | ||
| {
 | ||
|     static bool OpenSw = false;
 | ||
|     if (!OpenSw)
 | ||
|     {
 | ||
|         if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1)
 | ||
|         {
 | ||
|             OpenSw = true;
 | ||
|         }
 | ||
|         return _OldSendPackByte(thisc, 0, Parm);
 | ||
|     }
 | ||
|     else
 | ||
|     {
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_SendPackByte_Event", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, Parm);
 | ||
|         SQ_Call(v, 2, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
|         return _OldSendPackByte(thisc, 0, Parm);
 | ||
|     }
 | ||
| }
 | ||
| static SendPacksWORD _OldSendPackWord;
 | ||
| int __fastcall NewSendPacksWord(DWORD thisc, int Seat, int Parm)
 | ||
| {
 | ||
|     static bool OpenSw = false;
 | ||
|     if (!OpenSw)
 | ||
|     {
 | ||
|         if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1)
 | ||
|         {
 | ||
|             OpenSw = true;
 | ||
|         }
 | ||
|         return _OldSendPackWord(thisc, 0, Parm);
 | ||
|     }
 | ||
|     else
 | ||
|     {
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_SendPackWord_Event", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, Parm);
 | ||
|         SQ_Call(v, 2, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
|         return _OldSendPackWord(thisc, 0, Parm);
 | ||
|     }
 | ||
| }
 | ||
| static SendPacksDWORD _OldSendPackDWord;
 | ||
| int __fastcall NewSendPacksDWord(DWORD thisc, int Seat, int Parm)
 | ||
| {
 | ||
|     static bool OpenSw = false;
 | ||
|     if (!OpenSw)
 | ||
|     {
 | ||
|         if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1)
 | ||
|         {
 | ||
|             OpenSw = true;
 | ||
|         }
 | ||
|         return _OldSendPackDWord(thisc, 0, Parm);
 | ||
|     }
 | ||
|     else
 | ||
|     {
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_SendPackDWord_Event", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, Parm);
 | ||
|         SQ_Call(v, 2, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
|         return _OldSendPackDWord(thisc, 0, Parm);
 | ||
|     }
 | ||
| }
 | ||
| static SendPacksChar _OldSendPackChar;
 | ||
| int __fastcall NewSendPacksChar(DWORD thisc, int Seat, char* Parm,int Size)
 | ||
| {
 | ||
|     static bool OpenSw = false;
 | ||
|     if (!OpenSw)
 | ||
|     {
 | ||
|         if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1)
 | ||
|         {
 | ||
|             OpenSw = true;
 | ||
|         }
 | ||
|         return _OldSendPackChar(thisc, 0, Parm,Size);
 | ||
|     }
 | ||
|     else
 | ||
|     {
 | ||
|         wchar_t* buffer = DNFTOOL::charTowchar_t(Parm);
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_SendPackChar_Event", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, buffer,Size);
 | ||
|         SQ_Call(v, 2, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
|         delete[] buffer;
 | ||
|         return _OldSendPackChar(thisc, 0, Parm,Size);
 | ||
|     }
 | ||
| }
 | ||
| static SendPacks* _OldSend;
 | ||
| int NewSend()
 | ||
| {
 | ||
|     static bool OpenSw = false;
 | ||
|     if (!OpenSw)
 | ||
|     {
 | ||
|         if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1)
 | ||
|         {
 | ||
|             OpenSw = true;
 | ||
|         }
 | ||
|         return _OldSend();
 | ||
|     }
 | ||
|     else
 | ||
|     {
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_SendPack_Event", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQ_Call(v, 1, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
|         return _OldSend();
 | ||
|     }
 | ||
| }
 | ||
| #endif
 | ||
| 
 | ||
| /*
 | ||
| //HOOK 获取ITEM 坐标
 | ||
| typedef int(_fastcall __GetItemPos)(DWORD thisc, DWORD Seat);
 | ||
| static __GetItemPos* GetItemPos;
 | ||
| int __fastcall NewGetItemPos(DWORD thisc, int Seat)
 | ||
| {
 | ||
|     int PosX = *(int*)(thisc + 0x14);
 | ||
|     int PosY = *(int*)(thisc + 0x18);
 | ||
| 
 | ||
|     return PosX;
 | ||
| }
 | ||
| */
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|  //Img 绘制函数
 | ||
| //typedef int(_fastcall __sub_11A97E0)(DWORD a1, DWORD Seat, int a2, int a3,DWORD a4, int a5,int a6,int a7 ,int a8,float a9, float a10);
 | ||
| //static __sub_11A97E0* sub_11A97E0;
 | ||
| //int _fastcall Newsub_11A97E0(DWORD a1, DWORD Seat, int a2, int a3, DWORD a4, int a5, int a6, int a7, int a8, float a9, float a10)
 | ||
| //{
 | ||
| //    if (a7 != 0)std::cout << a7 << std::endl;;
 | ||
| //    static DWORD st = a4;
 | ||
| //    return sub_11A97E0(a1, 0, a2, a3, st, a5, a6, a7, a8, a9, a10);
 | ||
| //}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| //HOOK 绘制stackable
 | ||
| typedef int(_cdecl _sub7AA800)(int a1, int a2, int a3 , int a4, int a5 , int a6,char a7);
 | ||
| static _sub7AA800* sub7AA800;
 | ||
| int _cdecl newsub7AA800(int a1, int a2, int a3, int a4, int a5, int a6, char a7)
 | ||
| {
 | ||
|     return sub7AA800(a1, a2, a3, a4, a5, a6, a7);
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| //HOOK 绘制Item
 | ||
| typedef int(_fastcall _sub11A8F60)(DWORD a1, DWORD Seat, int a2, int a3, int a4);
 | ||
| static _sub11A8F60* sub11A8F60;
 | ||
| 
 | ||
| 
 | ||
| typedef int(_fastcall _Load_Npk)(int thisc, void*, int a2, wchar_t* a3);
 | ||
| typedef int(_fastcall _Get_Img)(int thisc, void*, int a2);
 | ||
| static _Load_Npk* Load_Npk = (_Load_Npk*)0x11C0410;
 | ||
| static _Get_Img* Get_Img = (_Get_Img*)0x11AA190;
 | ||
| 
 | ||
| 
 | ||
| int _fastcall newsub11A8F60(DWORD a1, DWORD Seat, int a2, int a3, int a4)
 | ||
| {
 | ||
|     
 | ||
|     //int n = Load_Npk(*(int*)0x1B4684C, 0, 0, L"character/swordman/effect/skillicon.img");
 | ||
|     //int imgbuf = Get_Img(n,0,70);
 | ||
| 
 | ||
|     //if (a4 == imgbuf) {
 | ||
|     //    std::cout << "sadsasd" << std::endl;
 | ||
|     //}
 | ||
| 
 | ||
| //#if defined HUDUI_100
 | ||
| //    //血槽
 | ||
| //    if (a2 == 0 && a3 == 508) {
 | ||
| //        static int hudimg = Load_Npk(*(int*)0x1B4684C, 0, 0, L"interface2/hud/hud.img");
 | ||
| //        if (Get_Img(hudimg, 0, 0) == a4) {
 | ||
| //            return 0;
 | ||
| //        }
 | ||
| //    }
 | ||
| //#endif
 | ||
| 
 | ||
| 
 | ||
|     
 | ||
|     static bool OpenSw = false;
 | ||
|     if (!OpenSw)
 | ||
|     {
 | ||
|         //std::cout << DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") << std::endl;
 | ||
|         if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1)
 | ||
|         {
 | ||
|             OpenSw = true;
 | ||
|         }
 | ||
|         return sub11A8F60(a1, 0, a2, a3, a4);
 | ||
|     }
 | ||
|     else
 | ||
|     {
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_DrawItemBack", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, a2);
 | ||
|         SQPushInt(v, a3);
 | ||
|         SQPushInt(v, a4);
 | ||
|         SQ_Call(v, 4, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
| 
 | ||
|         int ret = sub11A8F60(a1, 0, a2, a3, a4);
 | ||
| 
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_DrawItemFront", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, a2);
 | ||
|         SQPushInt(v, a3);
 | ||
|         SQPushInt(v, a4);
 | ||
|         SQ_Call(v, 4, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
| 
 | ||
|         return ret;
 | ||
|     }
 | ||
|     
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| /*
 | ||
| //模拟SQRCAll
 | ||
| typedef int(__sub_5AADF0)(void(__cdecl* a1)(int, int, int, int), int a2, int a3);
 | ||
| static __sub_5AADF0* sub_5AADF0;
 | ||
| int Newsub_5AADF0(void(__cdecl* a1)(int, int, int, int), int a2, int a3)
 | ||
| {
 | ||
|     std::cout << "drawani: " << a1 << std::endl;
 | ||
|     //std::cout << "TestDrawSkill" << std::endl;
 | ||
|     //std::cout << "DrawSkillAddr:" << a1 << std::endl;
 | ||
|     return sub_5AADF0(a1, a2, a3);
 | ||
| }
 | ||
| */
 | ||
| 
 | ||
| 
 | ||
| //大部分IMG数字的调用函数
 | ||
| typedef int(_fastcall __sub_11B2390)(DWORD a1, DWORD Seat, int a2, int a3, int a4, int a5, DWORD* a6);
 | ||
| static __sub_11B2390* sub_11B2390;
 | ||
| int _fastcall Newsub_11B2390(DWORD a1, DWORD Seat, int a2, int a3, int a4, int a5, DWORD* a6)
 | ||
| {
 | ||
|     //std::cout << "a2: " << a2 << std::endl;
 | ||
|     //std::cout << "a3: " << a3 << std::endl;
 | ||
|     //std::cout << "a4: " << a4 << std::endl;
 | ||
|     //std::cout << "a5: " << a5 << std::endl;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     return sub_11B2390(a1, 0, a2, a3, a4, a5, a6);
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| /*
 | ||
| //push string
 | ||
| std::map< std::wstring, int>BQS;
 | ||
| static SqPushStringFunc* OldSQPushString;
 | ||
| int NewSqPushStringFunc(uint32_t v, const wchar_t* s, int len) 
 | ||
| {
 | ||
|     std::wstring a = s;
 | ||
|     if (BQS.count(a) != 1)
 | ||
|     {
 | ||
|         wprintf(L"Name:%s Len:%d\n", s, len);
 | ||
|         BQS[a] = 1;
 | ||
|     }
 | ||
|     //std::wcout << funcName << std::endl;
 | ||
| 
 | ||
|     return OldSQPushString(v, s, len);
 | ||
| }
 | ||
| */
 | ||
| 
 | ||
| 
 | ||
| /*
 | ||
| typedef int(SQ_CompilebufferFunc)(uint32_t v, const wchar_t* s,int size, wchar_t* filename, BOOL printerror);
 | ||
| static SQ_CompilebufferFunc* SQ_Compilebuffer = (SQ_CompilebufferFunc*)0x135B2C0;
 | ||
| */
 | ||
| 
 | ||
| 
 | ||
| /*
 | ||
| // HOOK exe 调用文本进 松鼠虚拟机
 | ||
| static SQ_CompilebufferFunc* OldSQ_Compilebuffer;
 | ||
| int NewSQ_Compilebuffer(uint32_t v, const wchar_t* s, int size, wchar_t* filename, BOOL printerror)
 | ||
| {
 | ||
|     wprintf(L"File--%s:   \n str--\n%s \n \n", filename, s);
 | ||
| 
 | ||
|     return OldSQ_Compilebuffer(v, s, size, filename, printerror);
 | ||
| }
 | ||
| */
 | ||
| 
 | ||
| 
 | ||
| #if defined MONSTER_BLOOD_UI
 | ||
| typedef int(_fastcall _Blood)(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2);
 | ||
| typedef int(_fastcall _DrawMonFace)(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2);
 | ||
| 
 | ||
| static _Blood* OldBlood;
 | ||
| static _Blood* OldBlood1;
 | ||
| static _Blood* OldBlood2;
 | ||
| static _DrawMonFace* DrawMonFace = (_DrawMonFace*)0x43a1b0;
 | ||
| int _fastcall NewBlood(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2)
 | ||
| {
 | ||
|     BOOL DrawSw;
 | ||
|     uint32_t v = GetSqVm();
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushString(v, L"Sq_GetDrawMonBloodSw", -1);
 | ||
|     SQ_Get(v, -2);
 | ||
|     SQPushRootTable(v);
 | ||
|     SQ_Call(v, 1, 1, 1);
 | ||
|     SQGetBool(v, -1, &DrawSw);
 | ||
|     SQPop(v, 3);
 | ||
| 
 | ||
|     if (DrawSw == TRUE)
 | ||
|     {
 | ||
| 
 | ||
|         return 0;
 | ||
|     }
 | ||
|     else
 | ||
|     {
 | ||
|         int ret = OldBlood(thisc, 0, a1, a2);
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_DrawMonsterBlood", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, *(DWORD*)(thisc + 8));
 | ||
|         SQPushInt(v, a1);
 | ||
|         SQPushInt(v, a2);
 | ||
|         SQ_Call(v, 4, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
| 
 | ||
|         return ret;
 | ||
|     }
 | ||
| 
 | ||
| }
 | ||
| int _fastcall NewBlood1(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2)
 | ||
| {
 | ||
|     BOOL DrawSw;
 | ||
|     uint32_t v = GetSqVm();
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushString(v, L"Sq_GetDrawMonBloodSw", -1);
 | ||
|     SQ_Get(v, -2);
 | ||
|     SQPushRootTable(v);
 | ||
|     SQ_Call(v, 1, 1, 1);
 | ||
|     SQGetBool(v, -1, &DrawSw);
 | ||
|     SQPop(v, 3);
 | ||
| 
 | ||
|     if (DrawSw == TRUE)
 | ||
|     {
 | ||
| 
 | ||
|         return 0;
 | ||
|     }
 | ||
|     else
 | ||
|     {
 | ||
|         int ret = OldBlood1(thisc, 0, a1, a2);
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_DrawMonsterBlood", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, *(DWORD*)(thisc + 8));
 | ||
|         SQPushInt(v, a1);
 | ||
|         SQPushInt(v, a2);
 | ||
|         SQ_Call(v, 4, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
| 
 | ||
|         return ret;
 | ||
|     }
 | ||
| }
 | ||
| int _fastcall NewBlood2(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2)
 | ||
| {
 | ||
|     int ret = OldBlood2(thisc, 0, a1, a2);
 | ||
|     uint32_t v = GetSqVm();
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushString(v, L"Sq_DrawMonsterBlood", -1);
 | ||
|     SQ_Get(v, -2);
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushInt(v, *(DWORD*)(thisc + 8));
 | ||
|     SQPushInt(v, a1);
 | ||
|     SQPushInt(v, a2);
 | ||
|     SQ_Call(v, 4, 0, 1);
 | ||
|     SQPop(v, 2);
 | ||
| 
 | ||
|     return ret;
 | ||
| }
 | ||
| #endif
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| //背包鼠标位置HOOK开启 (为了拿到this对象地址)
 | ||
| #ifdef Inventory_M_Pos
 | ||
| typedef int(_fastcall _inventory_M_Pos)(DWORD thisc, DWORD Seat);
 | ||
| static _inventory_M_Pos* Old_inventory_M_Pos;
 | ||
| int _fastcall New_inventory_M_Pos(DWORD thisc, DWORD Seat)
 | ||
| {
 | ||
| 
 | ||
|     uint32_t v = GetSqVm();
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushString(v, L"Sq_Set_Inventory_M_Pos", -1);
 | ||
|     SQ_Get(v, -2);
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushInt(v, thisc);
 | ||
|     SQ_Call(v, 2, 0, 1);
 | ||
|     SQPop(v, 2);
 | ||
| 
 | ||
|     return Old_inventory_M_Pos(thisc, Seat);
 | ||
| }
 | ||
| #endif 
 | ||
| 
 | ||
| 
 | ||
| typedef int(_cdecl _9D2300)(DWORD a1, DWORD a2,DWORD a3,char a4 , DWORD a5,char a6);
 | ||
| static _9D2300* Old_9D2300;
 | ||
| int _cdecl New_9D2300(DWORD a1, DWORD a2, DWORD a3, char a4, DWORD a5, char a6)
 | ||
| {
 | ||
|     std::cout << a5 << std::endl;
 | ||
|     return Old_9D2300(a1, a2,a3,a4,a5,a6);
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| typedef DWORD** (_fastcall _Event)(DWORD thisc, DWORD Seat, DWORD a2, DWORD** a3, char a4);
 | ||
| static _Event* OldEvent;
 | ||
| DWORD** _fastcall NewEvent(DWORD thisc, DWORD Seat, DWORD a2, DWORD** a3, char a4)
 | ||
| {
 | ||
| 
 | ||
|     if ((int)a4 == 1 && (int)a3 == 96527 /*&& a2 <= 536 && ((a2 - 456)%20 == 0)*/)//事先修改了活动图标的Y轴 在进行HOOK以便修改
 | ||
|     {
 | ||
|         int StrIndex;
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_Get_Event_Pos", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, 1);
 | ||
|         SQ_Call(v, 2, 1, 1);
 | ||
|         SQGetInt(v, -1, &StrIndex);
 | ||
|         SQPop(v, 3);
 | ||
| 
 | ||
|         a2 += 144;
 | ||
|         a3 = (DWORD**)StrIndex;
 | ||
|     }
 | ||
|     
 | ||
|     return OldEvent(thisc, Seat, a2, a3, a4);
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| //typedef DWORD(_Cutting)(DWORD a1, DWORD a2, DWORD a3, DWORD a4);
 | ||
| //static _Cutting* Old6F4370;
 | ||
| //static _Cutting* Old11AEE50;
 | ||
| ////裁切函数HOOK
 | ||
| //DWORD New6F4370(DWORD a1, DWORD a2, DWORD a3, DWORD a4)
 | ||
| //{
 | ||
| //    if (a1 == 0 && a3 == 800)//血球篮球的裁切策略 需要+14  因为球的坐标+了14
 | ||
| //    {
 | ||
| //        a2 += 14;
 | ||
| //        a4 += 14;
 | ||
| //    }
 | ||
| //    return Old6F4370(a1, a2, a3, a4);
 | ||
| //}
 | ||
| ////裁切函数HOOK
 | ||
| //DWORD New11AEE50(DWORD a1, DWORD a2, DWORD a3, DWORD a4)
 | ||
| //{
 | ||
| //    if (a1 == 0 && a2 == 625)//血球篮球的裁切策略 需要+14  因为球的坐标+了14
 | ||
| //    {
 | ||
| //        a1 = 170;
 | ||
| //        a2 = 548;
 | ||
| //    }
 | ||
| //    return Old11AEE50(a1, a2, a3, a4);
 | ||
| //}
 | ||
| 
 | ||
| //typedef DWORD(_fastcall _11A97E0)(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2, WORD* a3, DWORD a4, DWORD a5, DWORD a6, DWORD a7, FLOAT a8, FLOAT a9);
 | ||
| //static _11A97E0* Old11A97E0;
 | ||
| //
 | ||
| ////绘图HOOK
 | ||
| //DWORD _fastcall New11A97E0(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2, WORD* a3, DWORD a4, DWORD a5, DWORD a6, DWORD a7, FLOAT a8, FLOAT a9)
 | ||
| //{
 | ||
| //    if (a1 == 371 && a2 == 461) {
 | ||
| //
 | ||
| //    }
 | ||
| //    if (a1 == 13 && a2 == 524)
 | ||
| //    {
 | ||
| //        a1 = 224; //血球X坐标
 | ||
| //        a2 = 538; //血球X坐标
 | ||
| //    }
 | ||
| //    if (a1 == 732 && a2 == 524)
 | ||
| //    {
 | ||
| //        a1 = 515; //蓝球X坐标
 | ||
| //        a2 = 538; //蓝球X坐标
 | ||
| //    }
 | ||
| //
 | ||
| //    return Old11A97E0(thisc, Seat, a1, a2, a3, a4, a5, a6, a7, a8, a9);
 | ||
| //}
 | ||
| 
 | ||
| //typedef DWORD(_fastcall _11A8F60)(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2, DWORD a3);
 | ||
| //static _11A8F60* Old11A8F60;
 | ||
| //
 | ||
| ////绘图HOOK
 | ||
| //DWORD _fastcall New11A8F60(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2, DWORD a3)
 | ||
| //{
 | ||
| //
 | ||
| //    if (a1 == 13 && a2 == 524)
 | ||
| //    {
 | ||
| //        a1 = 224; //血球X坐标
 | ||
| //        a2 = 538; //血球X坐标
 | ||
| //    }
 | ||
| //    else if (a1 == 732 && a2 == 524)
 | ||
| //    {
 | ||
| //        a1 = 515; //蓝球X坐标
 | ||
| //        a2 = 538; //蓝球X坐标
 | ||
| //    }
 | ||
| //    else if (a1 == 88 && a2 == 591)//经验条X Y
 | ||
| //    {
 | ||
| //        a1 = 248;
 | ||
| //        a2 = 596;
 | ||
| //    }
 | ||
| //
 | ||
| //    return Old11A8F60(thisc, Seat, a1, a2, a3);
 | ||
| //}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| typedef DWORD(_fastcall _11816B0)(DWORD thisc, DWORD Seat, DWORD* a2, int a3);
 | ||
| static _11816B0* Old11816B0;
 | ||
| 
 | ||
| //绘图HOOK
 | ||
| DWORD _fastcall New11816B0(DWORD thisc, DWORD Seat, DWORD* a2, int a3)
 | ||
| {
 | ||
|     wchar_t* str = (wchar_t*)a3;
 | ||
|     char* OutPutText = DNFTOOL::SquirrelU2W(str);
 | ||
|     std::string B = OutPutText;
 | ||
|     if (B.find("prepareDraw_appendage") != std::string::npos) {
 | ||
|         std::cout << 111 << std::endl;
 | ||
|     }
 | ||
|     delete[]OutPutText;
 | ||
| 
 | ||
|     return Old11816B0(thisc, Seat, a2, a3);
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| typedef struct REG
 | ||
| {
 | ||
|     DWORD EAX;
 | ||
|     DWORD EBX;
 | ||
|     DWORD ECX;
 | ||
|     DWORD EDX;
 | ||
|     DWORD ESI;
 | ||
|     DWORD EDI;
 | ||
|     DWORD ESP;
 | ||
|     DWORD EBP;
 | ||
| 
 | ||
| } REG;
 | ||
| REG heart = { 0 };
 | ||
| 
 | ||
| 
 | ||
| //GetIntData
 | ||
| typedef DWORD(_fastcall _908510)(DWORD thisc, DWORD Seat, DWORD a2, int a3);
 | ||
| static _908510* Old908510;
 | ||
| DWORD _fastcall New908510(DWORD thisc, DWORD Seat, DWORD a2, int a3)
 | ||
| {
 | ||
|     if(a3 != *(int*)0x1AB7CDC)return Old908510(thisc, Seat, a2, a3);
 | ||
|     int NutAddValue;
 | ||
|     uint32_t v = GetSqVm();
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushString(v, L"Sq_Get_Ex_IntData", -1);
 | ||
|     SQ_Get(v, -2);
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushInt(v, thisc);
 | ||
|     SQPushInt(v, a2);
 | ||
|     SQPushInt(v, a3);
 | ||
|     SQ_Call(v, 4, 1, 1);
 | ||
|     SQGetInt(v, -1, &NutAddValue);
 | ||
|     SQPop(v, 3);
 | ||
| 
 | ||
|     return NutAddValue + Old908510(thisc, Seat, a2, a3);
 | ||
| }
 | ||
| 
 | ||
| typedef DWORD(_fastcall _909020)(DWORD thisc, DWORD Seat, DWORD a2, int a3);
 | ||
| static _908510* Old909020;
 | ||
| DWORD _fastcall New909020(DWORD thisc, DWORD Seat, DWORD a2, int a3)
 | ||
| {
 | ||
|     if (a3 != *(int*)0x1AB7CDC)return Old909020(thisc, Seat, a2, a3);
 | ||
|     int NutAddValue;
 | ||
|     uint32_t v = GetSqVm();
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushString(v, L"Sq_Get_Ex_SkillCoolTime", -1);
 | ||
|     SQ_Get(v, -2);
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushInt(v, thisc);
 | ||
|     SQPushInt(v, a2);
 | ||
|     SQPushInt(v, a3);
 | ||
|     SQ_Call(v, 4, 1, 1);
 | ||
|     SQGetInt(v, -1, &NutAddValue);
 | ||
|     SQPop(v, 3);
 | ||
| 
 | ||
|     return  NutAddValue + Old909020(thisc, Seat, a2, a3);
 | ||
| }
 | ||
| 
 | ||
| typedef struct LevelDataBuffer
 | ||
| {
 | ||
|     DWORD SkillAddresss;
 | ||
|     DWORD SkillIdx;
 | ||
|     DWORD ObjectAddress;
 | ||
| 
 | ||
| } RELevelDataBufferG;
 | ||
| LevelDataBuffer _LevelDataBuffer = { 0 };
 | ||
| 
 | ||
| //GetLevelData
 | ||
| typedef DWORD(_fastcall _908770)(DWORD thisc, DWORD Seat, DWORD a2, int a3,int a4,int a5,int a6,int a7,int a8,int a9);
 | ||
| static _908770* Old908770;
 | ||
| DWORD _fastcall New908770(DWORD thisc, DWORD Seat, DWORD a2, int a3, int a4, int a5, int a6, int a7, int a8,int a9)
 | ||
| {
 | ||
|     if (a3 != *(int*)0x1AB7CDC)return Old908770(thisc, Seat, a2, a3, a4, a5, a6, a7, a8, a9);
 | ||
|     /*
 | ||
|     * thisc = 技能对象地址
 | ||
|     * a2 = 技能数据号位
 | ||
|     * a3 = 技能等级
 | ||
|     * a4 = 角色对象地址
 | ||
|     */
 | ||
|     _LevelDataBuffer.SkillAddresss = thisc;
 | ||
|     _LevelDataBuffer.SkillIdx = a2;
 | ||
|     _LevelDataBuffer.ObjectAddress = a3;
 | ||
| 
 | ||
|     int ret = Old908770(thisc, Seat, a2, a3, a4, a5, a6, a7, a8, a9);
 | ||
|     return ret;
 | ||
| }
 | ||
| 
 | ||
| //原生角色Get
 | ||
| typedef DWORD(_fastcall _90A4A0)(DWORD thisc, DWORD Seat, DWORD a2, int a3);
 | ||
| static  _90A4A0* Old90A4A0;
 | ||
| DWORD _fastcall New90A4A0(DWORD thisc, DWORD Seat, DWORD a2, int a3) {
 | ||
|     static bool OpenSw = false;
 | ||
|     if (!OpenSw)
 | ||
|     {
 | ||
|         if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1)
 | ||
|         {
 | ||
|             OpenSw = true;
 | ||
|         }
 | ||
|         return Old90A4A0(thisc, Seat, a2, a3);
 | ||
|     }
 | ||
|     if (a3 != *(int*)0x1AB7CDC)return Old90A4A0(thisc, Seat, a2, a3);
 | ||
|     int NutAddValue;
 | ||
|     uint32_t v = GetSqVm();
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushString(v, L"Sq_Get_Ex_LevelData", -1);
 | ||
|     SQ_Get(v, -2);
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushInt(v, thisc);
 | ||
|     SQPushInt(v, a2);
 | ||
|     SQPushInt(v, a3);
 | ||
|     SQ_Call(v, 4, 1, 1);
 | ||
|     SQGetInt(v, -1, &NutAddValue);
 | ||
|     SQPop(v, 3);
 | ||
|     int ret = NutAddValue + Old90A4A0(thisc, Seat, a2, a3);
 | ||
|     return ret;
 | ||
| }
 | ||
| 
 | ||
| //获取技能对象
 | ||
| typedef int __fastcall sub_TTTTTT(int a1, int a2, int a3);
 | ||
| static sub_TTTTTT* TFuncsub_GetSkillAddress = (sub_TTTTTT*)0x8406C0;
 | ||
| 
 | ||
| 
 | ||
| //Nut角色Get1
 | ||
| typedef DWORD(_fastcall _BA89D0)(DWORD thisc, DWORD Seat, DWORD a2, DWORD a3, DWORD a4);
 | ||
| static  _BA89D0* OldBA89D0;
 | ||
| DWORD _fastcall NewBA89D0(DWORD thisc, DWORD Seat, DWORD a2, DWORD a3, DWORD a4) {
 | ||
|     static bool OpenSw = false;
 | ||
|     if (!OpenSw)
 | ||
|     {
 | ||
|         if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1)
 | ||
|         {
 | ||
|             OpenSw = true;
 | ||
|         }
 | ||
|         return OldBA89D0(thisc, Seat, a2, a3, a4);
 | ||
|     }
 | ||
|     if (a3 != *(int*)0x1AB7CDC)return OldBA89D0(thisc, Seat, a2, a3, a4);
 | ||
|     DWORD ADDRESS = TFuncsub_GetSkillAddress(thisc, 0, a3);
 | ||
|     
 | ||
|     int NutAddValue;
 | ||
|     uint32_t v = GetSqVm();
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushString(v, L"Sq_Get_Ex_LevelData", -1);
 | ||
|     SQ_Get(v, -2);
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushInt(v, ADDRESS);
 | ||
|     SQPushInt(v, a2);
 | ||
|     SQPushInt(v, thisc);
 | ||
|     SQ_Call(v, 4, 1, 1);
 | ||
|     SQGetInt(v, -1, &NutAddValue);
 | ||
|     SQPop(v, 3);
 | ||
|     
 | ||
|     int ret = NutAddValue + OldBA89D0(thisc, Seat, a2, a3,a4);
 | ||
|     return ret;
 | ||
| }
 | ||
| 
 | ||
| //Nut角色Get2
 | ||
| typedef DWORD( _5A40E0)(DWORD a1, DWORD a2, DWORD a3, DWORD a4);
 | ||
| static  _5A40E0* Old5A40E0;
 | ||
| DWORD  New5A40E0( DWORD a1, DWORD a2, DWORD a3, DWORD a4) {
 | ||
|     static bool OpenSw = false;
 | ||
|     if (!OpenSw)
 | ||
|     {
 | ||
|         if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1)
 | ||
|         {
 | ||
|             OpenSw = true;
 | ||
|         }
 | ||
|         return  Old5A40E0(a1, a2, a3, a4);
 | ||
|     }
 | ||
|     if (a3 != *(int*)0x1AB7CDC)return Old5A40E0(a1, a2, a3, a4);
 | ||
|     DWORD ADDRESS = TFuncsub_GetSkillAddress(a1, 0, a2);
 | ||
|     int NutAddValue;
 | ||
|     uint32_t v = GetSqVm();
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushString(v, L"Sq_Get_Ex_LevelData", -1);
 | ||
|     SQ_Get(v, -2);
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushInt(v, ADDRESS);
 | ||
|     SQPushInt(v, a3);
 | ||
|     SQPushInt(v, a1);
 | ||
|     SQ_Call(v, 4, 1, 1);
 | ||
|     SQGetInt(v, -1, &NutAddValue);
 | ||
|     SQPop(v, 3);
 | ||
|     int ret = NutAddValue + Old5A40E0(a1, a2, a3, a4);
 | ||
|     return ret;
 | ||
| }
 | ||
| 
 | ||
| //描述对象前置HOOK
 | ||
| typedef DWORD(_fastcall _90FB30)(DWORD thisc, DWORD Seat, DWORD a2, int a3);
 | ||
| static  _90FB30* Old90FB30;
 | ||
| DWORD _fastcall New90FB30(DWORD thisc, DWORD Seat, DWORD a2, int a3) {
 | ||
| 
 | ||
|     if (a3 != *(int*)0x1AB7CDC)return Old90FB30(thisc, 0, a2, a3);
 | ||
|     _LevelDataBuffer.SkillAddresss = thisc;
 | ||
|     _LevelDataBuffer.SkillIdx = a2;
 | ||
|     _LevelDataBuffer.ObjectAddress = a3;
 | ||
|     return Old90FB30(thisc, 0, a2, a3);
 | ||
| }
 | ||
| 
 | ||
| //描述对象HOOK
 | ||
| typedef DWORD( _75D1F0)(DWORD thisc);
 | ||
| static  _75D1F0* Old75D1F0;
 | ||
| DWORD  New75D1F0(DWORD thisc) {
 | ||
| 
 | ||
|     static bool OpenSw = false;
 | ||
|     if (!OpenSw)
 | ||
|     {
 | ||
|         if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1)
 | ||
|         {
 | ||
|             OpenSw = true;
 | ||
|         }
 | ||
|         return Old75D1F0(thisc);
 | ||
|     }
 | ||
| 
 | ||
|     if (_LevelDataBuffer.ObjectAddress != *(int*)0x1AB7CDC)return Old75D1F0(thisc);
 | ||
|         int NutAddValue;
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_Get_Ex_LevelData", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, _LevelDataBuffer.SkillAddresss);
 | ||
|         SQPushInt(v, _LevelDataBuffer.SkillIdx);
 | ||
|         SQPushInt(v, _LevelDataBuffer.ObjectAddress);
 | ||
|         SQ_Call(v, 4, 1, 1);
 | ||
|         SQGetInt(v, -1, &NutAddValue);
 | ||
|         SQPop(v, 3);
 | ||
|         if (NutAddValue != 0) {
 | ||
|             int ret = NutAddValue + Old75D1F0(thisc);
 | ||
|             _LevelDataBuffer.SkillAddresss = 0;
 | ||
|             _LevelDataBuffer.SkillIdx = 0;
 | ||
|             _LevelDataBuffer.ObjectAddress = 0;
 | ||
|             return ret;
 | ||
|         }
 | ||
|     return Old75D1F0(thisc);
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| typedef int(_fastcall _Get_Img)(int thisc, void*, int a2);
 | ||
| static _Get_Img* OldGet_Img;
 | ||
| int _fastcall NewGet_Img(int thisc, void*, int a2) {
 | ||
| 
 | ||
|     if (a2 == 239) {
 | ||
|         std::cout << 12123123 << std::endl;
 | ||
|     }
 | ||
|     return OldGet_Img(thisc, 0, a2);
 | ||
| }
 | ||
| 
 | ||
| typedef int(_fastcall _11C0410)(int* thisc,void*, int a2, wchar_t* a3);
 | ||
| static _11C0410* Old11C0410;
 | ||
| 
 | ||
| int _fastcall New11C0410(int* thisc, void*, int a2, wchar_t* a3)
 | ||
| {
 | ||
| 
 | ||
|     wchar_t* str = (wchar_t*)a3;
 | ||
|     //if (!wcscmp(str, L"character/swordman/effect/frenzy/blood-spirits.img")) {
 | ||
|     //    std::cout << 111 << std::endl;
 | ||
|     //}
 | ||
| 
 | ||
|     char* OutPutText = DNFTOOL::wchar_tTochar(str);
 | ||
|     static std::map<std::string, bool> UNN;
 | ||
|     std::string B = OutPutText;
 | ||
|     if(B.find(".img") != std::string::npos )
 | ||
|     {
 | ||
|         if (!UNN[B]) {
 | ||
|             UNN[B] = true;
 | ||
|             std::cout << B << std::endl;
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     
 | ||
|     //if (B.find("extrafeature") != std::string::npos) {
 | ||
|     //    std::cout << B << std::endl;
 | ||
|     //}
 | ||
|     
 | ||
|     delete[]OutPutText;
 | ||
|     
 | ||
|     return Old11C0410(thisc,0,a2,a3);
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| void __declspec(naked)PlayerEach2() {
 | ||
|     static int address = 0x11B34E0;
 | ||
|     static int address1 = 0x001004B59;
 | ||
|     _asm
 | ||
|     {
 | ||
|         pushad
 | ||
|         pushfd
 | ||
| 
 | ||
|         mov heart.ECX , ecx
 | ||
|         mov heart.EDI, edi
 | ||
|     }
 | ||
| 
 | ||
|     if (heart.EDI == 2) {
 | ||
|         SQPushRootTable(*(uint32_t*)0x1AF3544);
 | ||
|         SQPushString(*(uint32_t*)0x1AF3544, L"Sq_PlayerEachPos", -1);
 | ||
|         SQ_Get(*(uint32_t*)0x1AF3544, -2);
 | ||
|         SQPushRootTable(*(uint32_t*)0x1AF3544);
 | ||
|         SQPushInt(*(uint32_t*)0x1AF3544, *(int*)(heart.ECX + 0x14));
 | ||
|         SQPushInt(*(uint32_t*)0x1AF3544, *(int*)(heart.ECX + 0x18));
 | ||
|         SQ_Call(*(uint32_t*)0x1AF3544, 3, 0, 1);
 | ||
|         SQPop(*(uint32_t*)0x1AF3544, 2);
 | ||
|     }
 | ||
| 
 | ||
|     _asm {
 | ||
|         popfd
 | ||
|         popad
 | ||
|         call address
 | ||
|         test al,al
 | ||
|         jmp address1
 | ||
|     }
 | ||
| 
 | ||
| }
 | ||
| REG MouseAsm = { 0 };
 | ||
| void __declspec(naked)MouseWheelUp() {
 | ||
|     static int address = 0x11BDE12;
 | ||
|     static int address1 = 0x0011BDEEE;
 | ||
|     static int address2 = 0x0011BDEDF;
 | ||
|     static int address3 = 0x0011BDECE;
 | ||
|     _asm
 | ||
|     {
 | ||
|         pushad
 | ||
|         pushfd
 | ||
|         mov MouseAsm.EDI,edi
 | ||
|         mov MouseAsm.ECX, ecx
 | ||
|     }
 | ||
| 
 | ||
|     if ((int)*(BYTE*)0x1B46886 == 0) {
 | ||
|         _asm {
 | ||
|             popfd
 | ||
|             popad
 | ||
|             jmp address
 | ||
|         }
 | ||
|     }
 | ||
|     else {
 | ||
|         if (MouseAsm.EDI == 0x20A) {
 | ||
|             if (MouseAsm.ECX == 0x780000) {
 | ||
|                 _asm {
 | ||
|                     popfd
 | ||
|                     popad
 | ||
|                     jmp address3
 | ||
|                 }
 | ||
|             }
 | ||
|             else {
 | ||
|                 _asm {
 | ||
|                     popfd
 | ||
|                     popad
 | ||
|                     jmp address2
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
|         else {
 | ||
|             _asm {
 | ||
|                 popfd
 | ||
|                 popad
 | ||
|                 jmp address1
 | ||
|             }
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| }
 | ||
| REG PassObjectPoAsm = { 0 };
 | ||
| typedef DWORD(_fastcall _6A4630)(DWORD thisc, DWORD Seat, DWORD a2, DWORD a3);
 | ||
| static _6A4630* Old6A4630 = (_6A4630*)0x6A4630;
 | ||
| static wchar_t* str = L"TETETETE";
 | ||
| void __declspec(naked)PassObjectPoJmp() {
 | ||
| 
 | ||
|     static int address = 0xE5AE58;
 | ||
|     static int address1 = 0xE5AE68;
 | ||
|     _asm
 | ||
|     {
 | ||
|         pushad
 | ||
|         pushfd
 | ||
|         mov PassObjectPoAsm.EDI,edi
 | ||
|         mov PassObjectPoAsm.EAX, eax
 | ||
|     }
 | ||
| 
 | ||
|     //printf("=%2x\n", *(DWORD*)(PassObjectPoAsm.EDI + 0xEE8));
 | ||
|    // printf("=%2x\n", *(DWORD*)(PassObjectPoAsm.EDI + 0xEFC));
 | ||
|     if (*(DWORD*)(PassObjectPoAsm.EDI + 0xEE8) == 0 && *(DWORD*)(PassObjectPoAsm.EDI + 0xEFC) == 0) {
 | ||
|         *(DWORD*)(PassObjectPoAsm.EDI + 0xEE8) = (DWORD)str;
 | ||
|         *(DWORD*)(PassObjectPoAsm.EDI + 0xEFC) = 0XF;
 | ||
|         Old6A4630(PassObjectPoAsm.EDI, 0, (DWORD)0x1ACDD80, PassObjectPoAsm.EAX);
 | ||
|         *(DWORD*)(PassObjectPoAsm.EDI + 0xEE8) = 0;
 | ||
|         *(DWORD*)(PassObjectPoAsm.EDI + 0xEFC) = 0;
 | ||
|         _asm {
 | ||
|             popfd
 | ||
|             popad
 | ||
|             jmp address1
 | ||
|         }
 | ||
|     }
 | ||
|     
 | ||
|     _asm {
 | ||
|         popfd
 | ||
|         popad
 | ||
|         mov     edx, [edi]
 | ||
|         jmp address
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| void __declspec(naked)TestJmp() {
 | ||
| 
 | ||
|     static int address = 0X04627A7;
 | ||
|     static int address1 = 0x04627EB;
 | ||
|     _asm
 | ||
|     {
 | ||
|         pushad
 | ||
|         pushfd
 | ||
|         mov PassObjectPoAsm.ECX, ecx
 | ||
|     }
 | ||
| 
 | ||
|    
 | ||
|     if (*(DWORD*)(PassObjectPoAsm.ECX + 0xC) == 24000001)
 | ||
|     {
 | ||
|         //printf("成功\n\n");
 | ||
|        // printf("值=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC));
 | ||
|         *(DWORD*)(PassObjectPoAsm.ECX + 0xC) = 24000002;
 | ||
|         //printf("成功值=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC));
 | ||
|     }
 | ||
|     
 | ||
|     
 | ||
|     
 | ||
|     _asm {
 | ||
|         popfd
 | ||
|         popad
 | ||
|         mov edx,dword ptr ds:[ebx]                                   
 | ||
|         cmp edx,dword ptr ds:[ecx+0xC]                                 
 | ||
|         jge dnf4627EB                                               
 | ||
|         jmp address
 | ||
|         dnf4627EB:
 | ||
|         jmp address1
 | ||
|     }
 | ||
| }
 | ||
| void __declspec(naked)TestJmp1() {
 | ||
| 
 | ||
|     static int address = 0X04627A7;
 | ||
|     static int address1 = 0x04627EB;
 | ||
|     _asm
 | ||
|     {
 | ||
|         pushad
 | ||
|         pushfd
 | ||
|         mov PassObjectPoAsm.ECX, ecx
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|     
 | ||
|     if (*(DWORD*)(PassObjectPoAsm.ECX + 0xC) == 24000001)
 | ||
|     {
 | ||
|         //printf("成功\n\n");
 | ||
|         //printf("值=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC));
 | ||
|         *(DWORD*)(PassObjectPoAsm.ECX + 0xC) = 24000002;
 | ||
|        // printf("成功值=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC));
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     _asm {
 | ||
|         popfd
 | ||
|         popad
 | ||
|         mov eax,dword ptr ds:[edi]                                   
 | ||
|         cmp eax,dword ptr ds:[ecx+0xC]                                 
 | ||
|         jl dnf46259B                                                
 | ||
|         jmp address
 | ||
|         dnf46259B :
 | ||
|         jmp address1
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| void __declspec(naked)TestJmp2() {
 | ||
| 
 | ||
|     static int address = 0X04627A7;
 | ||
|     static int address1 = 0x46259B;
 | ||
|     _asm
 | ||
|     {
 | ||
|         pushad
 | ||
|         pushfd
 | ||
|         mov PassObjectPoAsm.ECX, ecx
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|     //printf("值=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC));
 | ||
|     if (*(DWORD*)(PassObjectPoAsm.ECX + 0xC) == 24000001)
 | ||
|     {
 | ||
|        // printf("成功\n\n");
 | ||
|         *(DWORD*)(PassObjectPoAsm.ECX + 0xC) = 24000002;
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     _asm {
 | ||
|         popfd
 | ||
|         popad
 | ||
|         mov edx, dword ptr ds : [ebx]
 | ||
|         cmp edx, dword ptr ds : [ecx + 0xC]
 | ||
|         jge dnf4627EB
 | ||
|         jmp address
 | ||
|         dnf4627EB :
 | ||
|         jmp address1
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| void __declspec(naked)TestJmp3() {
 | ||
| 
 | ||
|     static int address = 0x0462584;
 | ||
|     static int address1 = 0x0046259B;
 | ||
|     _asm
 | ||
|     {
 | ||
|         pushad
 | ||
|         pushfd
 | ||
|         mov PassObjectPoAsm.ECX, ecx
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|     if (*(DWORD*)(PassObjectPoAsm.ECX + 0xC) == 24000001)
 | ||
|     {
 | ||
|         //printf("成功\n\n");
 | ||
|         //printf("值=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC));
 | ||
|         *(DWORD*)(PassObjectPoAsm.ECX + 0xC) = 24000002;
 | ||
|         //printf("成功值=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC));
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     _asm {
 | ||
|         popfd
 | ||
|         popad
 | ||
|         mov eax, dword ptr ds : [edi]
 | ||
|         cmp eax, dword ptr ds : [ecx + 0xC]
 | ||
|         jl dnf4627EB
 | ||
|         jmp address
 | ||
|         dnf4627EB :
 | ||
|         jmp address1
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| //void __declspec(naked)DrawMainCallBack() {
 | ||
| //
 | ||
| //    static int address = 0x1A5FB20;
 | ||
| //    static int address3 = 0xE6DF4B;
 | ||
| //    static int address1 = 0xE6D9AE;
 | ||
| //    _asm
 | ||
| //    {
 | ||
| //        pushad
 | ||
| //        pushfd
 | ||
| //    }
 | ||
| //
 | ||
| //        SQPushRootTable(*(uint32_t*)0x1AF3544);
 | ||
| //        SQPushString(*(uint32_t*)0x1AF3544, L"Sq_DrawMainMaxLayerCustomUI", -1);
 | ||
| //        SQ_Get(*(uint32_t*)0x1AF3544, -2);
 | ||
| //        SQPushRootTable(*(uint32_t*)0x1AF3544);
 | ||
| //        SQPushInt(*(uint32_t*)0x1AF3544, 111);
 | ||
| //        SQ_Call(*(uint32_t*)0x1AF3544, 2, 0, 1);
 | ||
| //        SQPop(*(uint32_t*)0x1AF3544, 2);
 | ||
| //
 | ||
| //
 | ||
| //    _asm {
 | ||
| //        popfd
 | ||
| //        popad
 | ||
| //        mov     ecx, address
 | ||
| //        test    ecx, ecx
 | ||
| //        jmp address1
 | ||
| //    }
 | ||
| //}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| typedef DWORD(_fastcall _4C61F0)(DWORD thisc, DWORD Seat);
 | ||
| static _4C61F0* Old4C61F0;
 | ||
| 
 | ||
| #include "json.hpp"
 | ||
| using json = nlohmann::json;
 | ||
| extern bool jiaoben;
 | ||
| extern std::vector<std::string> BaseData;
 | ||
| 
 | ||
| #include<fstream>
 | ||
| #include <dinput.h>
 | ||
| 
 | ||
| void outputWcharToFile(const wchar_t* str, const wchar_t* filename) {
 | ||
|     std::wofstream file(filename);
 | ||
|     if (file.is_open()) {
 | ||
|         file << str;
 | ||
|         file.close();
 | ||
|     }
 | ||
|     else {
 | ||
|         std::wcerr << L"Error: Unable to open file " << filename << std::endl;
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| void Suxn() {
 | ||
|     size_t Ds = BaseData.size();
 | ||
| 
 | ||
|     for (size_t i = 0; i < Ds; i++)
 | ||
|     {
 | ||
|         std::string filename = "BaseData" + std::to_string(i);
 | ||
|         std::string str = BaseData[i];
 | ||
| 
 | ||
| 
 | ||
|         //std::cout << str << std::endl << std::flush;
 | ||
|         wchar_t* sfile = DNFTOOL::charTowchar_t((char*)filename.c_str());
 | ||
|         wchar_t* ss = DNFTOOL::charTowchar_t((char*)str.c_str());
 | ||
| 
 | ||
|         //outputWcharToFile(ss, sfile);
 | ||
|         //wprintf(L"Function:%s \n", ss);
 | ||
|         //std::cout << i << std::endl;
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         squirrel::SQdofileBuffer(v, sfile, ss);
 | ||
|     }
 | ||
| 
 | ||
|     BaseData.clear();
 | ||
|     jiaoben = false;
 | ||
| }
 | ||
| 
 | ||
| //DrawMain HOOK
 | ||
| DWORD _fastcall New4C61F0(DWORD thisc, DWORD Seat)
 | ||
| {
 | ||
|     static bool Init = false;
 | ||
| 
 | ||
|     if (BaseData.size() > 0 && jiaoben == true && DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) {
 | ||
|         Suxn();
 | ||
|     }
 | ||
| 
 | ||
|     
 | ||
|     
 | ||
|     if (Init) {
 | ||
|         //DrawMain
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_DrawMainMaxLayerCustomUI", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, 111);
 | ||
|         SQ_Call(v, 2, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
| 
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"L_DrawWindow_A", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQ_Call(v, 1, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| #ifndef SELL
 | ||
|     //循环调用
 | ||
|     squirrel::SqrCallBackFunc();
 | ||
| #endif
 | ||
|     static bool mouseInit = false;
 | ||
| 
 | ||
| 
 | ||
|     //选择角色调用
 | ||
|     if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 0) {
 | ||
|         if (!Init)
 | ||
|         {
 | ||
|             //Sleep(1000);
 | ||
|             squirrel::InitGameScript();//调用初始化程序
 | ||
|             Init = true;
 | ||
|             mouseInit = true;
 | ||
|             InitGameFlag = true;
 | ||
|         }
 | ||
| 
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_SelectCharacter", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Lenheart", -1);
 | ||
|         SQ_Call(v, 2, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
|     }
 | ||
| 
 | ||
| #ifdef MOUSE_SWITCH
 | ||
|     //鼠标回调
 | ||
|     if (mouseInit) {
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"Sq_MouseEventCallBack", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, LbState);
 | ||
|         SQPushInt(v, RbState);
 | ||
|         SQPushInt(v, MbState);
 | ||
|         SQ_Call(v, 4, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
|     }
 | ||
| #endif // MOUSE_SWITCH
 | ||
| 
 | ||
| 
 | ||
|     return Old4C61F0(thisc, Seat);
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| typedef DWORD(_cdecl _7EEED0)(DWORD a1 , DWORD a2 , DWORD a3, DWORD a4, DWORD a5, DWORD a6);
 | ||
| static _7EEED0* Old7EEED0;
 | ||
| 
 | ||
| //伤害字体 HOOK
 | ||
| DWORD _cdecl New7EEED0(DWORD a1, DWORD a2, DWORD a3, DWORD a4, DWORD a5, DWORD a6)
 | ||
| {
 | ||
|     int StrIndex;
 | ||
| 
 | ||
|     uint32_t v = GetSqVm();
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushString(v, L"Sq_PushDamageFontData", -1);
 | ||
|     SQ_Get(v, -2);
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushInt(v, a1);
 | ||
|     SQPushInt(v, a2);
 | ||
|     SQPushInt(v, a3);
 | ||
|     SQPushInt(v, a4);
 | ||
|     SQPushInt(v, a5);
 | ||
|     SQPushInt(v, a6);
 | ||
|     SQ_Call(v, 7, 0, 1);
 | ||
|     SQPop(v, 2);
 | ||
| 
 | ||
|     SQGetInt(v, -1, &StrIndex);
 | ||
|     if (StrIndex == 1) {
 | ||
|         return 0;
 | ||
|     }
 | ||
|     else {
 | ||
|         DWORD ret = Old7EEED0(a1, a2, a3, a4, a5, a6);
 | ||
|         return ret;
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| typedef DWORD(_fastcall _F542F0)(DWORD a1, DWORD a2, DWORD a3, DWORD a4, DWORD a5, DWORD a6);
 | ||
| static _F542F0* OldF542F0;
 | ||
| 
 | ||
| //
 | ||
| DWORD _cdecl NewF542F0(DWORD a1, DWORD a2, DWORD a3, DWORD a4, DWORD a5, DWORD a6)
 | ||
| {
 | ||
|     std::cout << a1 << std::endl;
 | ||
|     std::cout << a2 << std::endl;
 | ||
|     std::cout << a3 << std::endl;
 | ||
|     std::cout << a4 << std::endl;
 | ||
|     std::cout << a5 << std::endl;
 | ||
|     std::cout << a6 << std::endl;
 | ||
| 
 | ||
|     DWORD ret = OldF542F0(a1, a2, a3, a4, a5, a6);
 | ||
|     return ret;
 | ||
| }
 | ||
| 
 | ||
| typedef DWORD(_499160)(DWORD a1);
 | ||
| static _499160* Old499160;
 | ||
| DWORD _cdecl New499160(DWORD a1)
 | ||
| {
 | ||
|     uint32_t v = GetSqVm();
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushString(v, L"Sq_MessageWindowDraw", -1);
 | ||
|     SQ_Get(v, -2);
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushInt(v, 1);
 | ||
|     SQPushInt(v, 1);
 | ||
|     SQ_Call(v, 3, 0, 1);
 | ||
|     SQPop(v, 2);
 | ||
| 
 | ||
|     DWORD ret = Old499160(a1);
 | ||
|     return ret;
 | ||
| }
 | ||
| 
 | ||
| int HookPlayerInfoString(wchar_t* str) {
 | ||
|     if (str != NULL) {
 | ||
|         wchar_t* clone = new wchar_t[wcslen(str) + 2];
 | ||
|         wcscpy(clone, str);
 | ||
| 
 | ||
|         std::string GameStr;
 | ||
|         DNFTOOL::Wchar_tToString(GameStr, clone);
 | ||
|         delete[]clone;
 | ||
| 
 | ||
|         int Value = atoi(GameStr.c_str());
 | ||
|         Value = 9999999;
 | ||
| 
 | ||
|         wchar_t wcs[128];
 | ||
|         wsprintf(wcs, L"%d", Value);
 | ||
|         return (int) & wcs;
 | ||
|     }
 | ||
| }
 | ||
| wchar_t PlayerInfowcs[128];
 | ||
| static int NewStrPlayerInfo;
 | ||
| void __declspec(naked)PlayerInfo() {
 | ||
|     static int address = 0XEDE480;
 | ||
|     static int address1 = 0X0EDE6CD;
 | ||
|     _asm
 | ||
|     {
 | ||
|         pushad
 | ||
|         pushfd
 | ||
| 
 | ||
|         mov heart.ECX, ecx
 | ||
|         mov heart.ESI, esi
 | ||
|     }
 | ||
| 
 | ||
|     //std::cout << "自己类型 = "<< heart.ECX << std::endl;
 | ||
| 
 | ||
|     //wprintf(L"自己数值 = %s\n\n", heart.ESI + 0x18);
 | ||
|     NewStrPlayerInfo = 9999999;
 | ||
|     wsprintf((wchar_t*)(heart.ESI + 0x18), L"%d", NewStrPlayerInfo);
 | ||
|     
 | ||
|    
 | ||
|     /*wchar_t* strbuffer = (wchar_t*)(heart.ESI + 0x18);
 | ||
|     if (strbuffer != NULL) {
 | ||
|         wchar_t* clone = new wchar_t[wcslen(strbuffer) + 2];
 | ||
|         wcscpy(clone, strbuffer);
 | ||
| 
 | ||
|         std::string GameStr;
 | ||
|         DNFTOOL::Wchar_tToString(GameStr, clone);
 | ||
|         delete[]clone;
 | ||
| 
 | ||
|         int Value = atoi(GameStr.c_str());
 | ||
|         Value = 9999999;
 | ||
| 
 | ||
|         wchar_t wcs[128];
 | ||
|         wsprintf(wcs, L"%d", Value);
 | ||
|         
 | ||
|     }*/
 | ||
| 
 | ||
| 
 | ||
|     //std::wcout << "Esi" << *(wchar_t*)(heart.ESI + 0x18) << std::endl;
 | ||
|     //if (heart.EDI == 2) {
 | ||
|     //    SQPushRootTable(*(uint32_t*)0x1AF3544);
 | ||
|     //    SQPushString(*(uint32_t*)0x1AF3544, L"Sq_PlayerEachPos", -1);
 | ||
|     //    SQ_Get(*(uint32_t*)0x1AF3544, -2);
 | ||
|     //    SQPushRootTable(*(uint32_t*)0x1AF3544);
 | ||
|     //    SQPushInt(*(uint32_t*)0x1AF3544, *(int*)(heart.ECX + 0x14));
 | ||
|     //    SQPushInt(*(uint32_t*)0x1AF3544, *(int*)(heart.ECX + 0x18));
 | ||
|     //    SQ_Call(*(uint32_t*)0x1AF3544, 3, 0, 1);
 | ||
|     //    SQPop(*(uint32_t*)0x1AF3544, 2);
 | ||
|     //}
 | ||
| 
 | ||
|     _asm {
 | ||
|         popfd
 | ||
|         popad
 | ||
|         push    ecx
 | ||
|         mov     ecx, ebx
 | ||
|         call address
 | ||
|         jmp address1
 | ||
|     }
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| void __declspec(naked)PlayerInfo2() {
 | ||
|     static int address = 0XEDE480;
 | ||
|     static int address1 = 0x0EDE6E3;
 | ||
|     _asm
 | ||
|     {
 | ||
|         pushad
 | ||
|         pushfd
 | ||
| 
 | ||
|         mov heart.ECX, ecx
 | ||
|         mov heart.ESI, esi
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|         NewStrPlayerInfo = 9999999;
 | ||
|     wsprintf((wchar_t*)(heart.ESI + 0x18), L"%d", NewStrPlayerInfo);
 | ||
|     //std::wcout << "Esi" << *(wchar_t*)(heart.ESI + 0x18) << std::endl;
 | ||
|     //if (heart.EDI == 2) {
 | ||
|     //    SQPushRootTable(*(uint32_t*)0x1AF3544);
 | ||
|     //    SQPushString(*(uint32_t*)0x1AF3544, L"Sq_PlayerEachPos", -1);
 | ||
|     //    SQ_Get(*(uint32_t*)0x1AF3544, -2);
 | ||
|     //    SQPushRootTable(*(uint32_t*)0x1AF3544);
 | ||
|     //    SQPushInt(*(uint32_t*)0x1AF3544, *(int*)(heart.ECX + 0x14));
 | ||
|     //    SQPushInt(*(uint32_t*)0x1AF3544, *(int*)(heart.ECX + 0x18));
 | ||
|     //    SQ_Call(*(uint32_t*)0x1AF3544, 3, 0, 1);
 | ||
|     //    SQPop(*(uint32_t*)0x1AF3544, 2);
 | ||
|     //}
 | ||
| 
 | ||
|     _asm {
 | ||
|         popfd
 | ||
|         popad
 | ||
|         push    ecx
 | ||
|         lea     ecx, [ebx + 0x7E]
 | ||
|         call address
 | ||
|         jmp address1
 | ||
|     }
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| typedef  int(_fastcall _FA42D0)(int a1, int seat, int a2, int a3);
 | ||
| static _FA42D0* OldFA42D0;
 | ||
| int _fastcall NewFA42D0(int a1, int seat, int a2, int a3)
 | ||
| {
 | ||
|     OtherPlayerInfoType = a2 + 1;
 | ||
|     return OldFA42D0(a1, seat, a2, a3);
 | ||
| }
 | ||
| 
 | ||
| typedef  int(_FA3570)(DWORD* a1, int a2, int a3);
 | ||
| static _FA3570* OldFA3570;
 | ||
| int NewFA3570(DWORD* a1,int a2, int a3)
 | ||
| {
 | ||
|     int ret = OldFA3570(a1, a2, a3);
 | ||
|     OtherPlayerInfoImg = ret;
 | ||
|     return 0;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| typedef  void(_fastcall _4B8430)(int a1, int seat, int a2);
 | ||
| static _4B8430* Old4B8430;
 | ||
| void _fastcall New4B8430(int a1, int seat, int a2)
 | ||
| {
 | ||
| 
 | ||
|     //return Old4B8430(a1, seat, a2);
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| //绘制技能
 | ||
| typedef  void(_fastcall _909D70)(int a1, int seat, int a2,int a3,int a4,int a5,int a6, int a7,int a8,int a9,int a10,int a11);
 | ||
| static _909D70* Old909D70;
 | ||
| void _fastcall New909D70(int a1, int seat, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11)
 | ||
| {
 | ||
|     
 | ||
| 
 | ||
|     return Old909D70(a1,seat,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);
 | ||
|     //return Old4B8430(a1, seat, a2);
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| typedef  int(_fastcall _1030C30)(int a1, int a2 ,BYTE* a3);
 | ||
| static _1030C30* Old1030C30;
 | ||
| int _fastcall New1030C30(int a1, int a2, BYTE* a3)
 | ||
| {
 | ||
|     int ret = Old1030C30(a1,  a2, a3);
 | ||
| 
 | ||
|     uint32_t v = GetSqVm();
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushString(v, L"Sq_DrawMiniMapUI", -1);
 | ||
|     SQ_Get(v, -2);
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushInt(v, 111);
 | ||
|     SQ_Call(v, 2, 0, 1);
 | ||
|     SQPop(v, 2);
 | ||
| 
 | ||
|     return ret;
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| typedef  int(_fastcall _8EE1E0)(DWORD thisc,DWORD Seat, int a2, char a3,char a4);
 | ||
| static _8EE1E0* Old8EE1E0;
 | ||
| int _fastcall New8EE1E0(DWORD thisc, DWORD Seat, int a2, char a3, char a4)
 | ||
| {
 | ||
|     int ret = Old8EE1E0(thisc, Seat,a2, a3,a4);
 | ||
| 
 | ||
|     uint32_t v = GetSqVm();
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushString(v, L"Sq_CompleteTask", -1);
 | ||
|     SQ_Get(v, -2);
 | ||
|     SQPushRootTable(v);
 | ||
|     SQPushInt(v, a2);
 | ||
|     SQPushInt(v, a3);
 | ||
|     SQPushInt(v, a4);
 | ||
|     SQ_Call(v, 4, 0, 1);
 | ||
|     SQPop(v, 2);
 | ||
| 
 | ||
|     return ret;
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| typedef  int(_fastcall _674030)(wchar_t* thisc, DWORD Seat, int a2, int a3);
 | ||
| static _674030* Old674030;
 | ||
| int _fastcall New674030(wchar_t* thisc, DWORD Seat, int a2, int a3)
 | ||
| {
 | ||
| 
 | ||
| 
 | ||
|     wchar_t* strbuffer = (wchar_t*)a2;
 | ||
|     wchar_t* clone = new wchar_t[wcslen(strbuffer) + 2];
 | ||
|     wcscpy(clone, strbuffer);
 | ||
| 
 | ||
|     std::string GameStr;
 | ||
|     DNFTOOL::Wchar_tToString(GameStr, clone);
 | ||
|     delete[]clone;
 | ||
| 
 | ||
| 
 | ||
|     int ret = Old674030(thisc, Seat, a2, a3);
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     if (GameStr.find("drawMainCustomUI_") != std::string::npos) {
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"L_drawMainCustomUI_All", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQ_Call(v, 1, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|     return ret;
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| int AByteLittleToInt(unsigned char* Count)
 | ||
| {
 | ||
|     int int1 = Count[0] & 0xff;
 | ||
|     int int2 = (Count[1] & 0xff) << 8;
 | ||
|     int int3 = (Count[2] & 0xff) << 16;
 | ||
|     int int4 = (Count[3] & 0xff) << 24;
 | ||
| 
 | ||
|     return int1 | int2 | int3 | int4;
 | ||
| }
 | ||
| 
 | ||
| typedef  int(_fastcall _6FE1D0)(DWORD* thisc, DWORD Seat, int a2, int a3);
 | ||
| static _6FE1D0* Old6FE1D0;
 | ||
| int _fastcall New6FE1D0(DWORD* thisc, DWORD Seat, int a2, int a3)
 | ||
| {
 | ||
| 
 | ||
|     std::cout << "类型为: " << (int)*(unsigned __int16*)(a2 + 1) << std::endl;
 | ||
|     if (a2) {
 | ||
| 
 | ||
| 
 | ||
|         //std::cout << "地址为:" << std::hex << a2 << std::endl;
 | ||
| 
 | ||
|         // 假设你有一个地址的指针,比如:
 | ||
|         char* address = (char*)a2;  // 假设地址是0x1234
 | ||
| 
 | ||
|         // 读取两个字节并转换为int
 | ||
|         unsigned char byte1 = address[0];
 | ||
|         unsigned char byte2 = address[1];
 | ||
| 
 | ||
|         // 输出转换后的小端序int
 | ||
|         //std::cout << "转换后的小端序int第一位为:" << (int)byte1 << std::endl;
 | ||
|         //std::cout << "转换后的小端序int第二位为:" << (int)byte2 << std::endl << std::endl << std::endl;
 | ||
| 
 | ||
|         if ((int)byte2 == 23) {
 | ||
|             for (size_t i = 0; i < 0x1f; i++)
 | ||
|             {
 | ||
|                 std::cout << (int)address[i] << "  ";
 | ||
|             }
 | ||
| 
 | ||
|             std::cout << std::endl;
 | ||
|             return 0;
 | ||
|         }
 | ||
|     }
 | ||
|         //std::cout << (*(BYTE*)(a2)) << std::endl;
 | ||
|         //std::cout << (*(BYTE*)(a2+1)) << std::endl;
 | ||
|         //std::cout << (*(BYTE*)(a2+2)) << std::endl;
 | ||
|         //std::cout << (*(BYTE*)(a2+3)) << std::endl;
 | ||
| 
 | ||
|     int ret = Old6FE1D0(thisc, 0, a2, a3);
 | ||
| 
 | ||
|     return ret;
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| //鼠标事件
 | ||
| typedef  void( _11BDC90)(int a1, unsigned int a2, int a3);
 | ||
| static _11BDC90* Old11BDC90;
 | ||
| void New11BDC90(int a1, unsigned int a2, int a3) {
 | ||
| 
 | ||
|     static bool Init = false;
 | ||
|     if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 0) {
 | ||
|         if (!Init)
 | ||
|         {
 | ||
|             Init = true;
 | ||
|         }
 | ||
|     }
 | ||
|     if (Init) {
 | ||
|         int X = *(int*)0x1B4686C;
 | ||
|         int Y = *(int*)0x1B46870;
 | ||
|         if ((X | Y) >= 0) {
 | ||
|             uint32_t v = GetSqVm();
 | ||
|             DWORD VmTop = SQGetTop(v);
 | ||
| 
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushString(v, L"L_MouseCallBack", -1);
 | ||
|             SQ_Get(v, -2);
 | ||
|             SQPushRootTable(v);
 | ||
|             SQPushInt(v, a1);
 | ||
|             SQPushInt(v, a2);
 | ||
|             sq_pushinteger((HSQUIRRELVM)v, X);
 | ||
|             sq_pushinteger((HSQUIRRELVM)v, Y);
 | ||
|             SQ_Call(v, 5, 0, 1);
 | ||
|             SQPop(v, 2);
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     Old11BDC90(a1, a2, a3);
 | ||
|     return;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| typedef void (__fastcall _OpenWindow)(DWORD thisc, DWORD Seat, DWORD a1, char* a2, DWORD a3);
 | ||
| static _OpenWindow* OldOpenWindow;
 | ||
| void __fastcall NewOpenWindow(DWORD thisc, DWORD Seat, DWORD a1, char* a2, DWORD a3) {
 | ||
|     if (*(DWORD*)0x1A5FB20 == thisc) {
 | ||
|         uint32_t v = GetSqVm();
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushString(v, L"L_OpenOldWindowCallBack", -1);
 | ||
|         SQ_Get(v, -2);
 | ||
|         SQPushRootTable(v);
 | ||
|         SQPushInt(v, a1);
 | ||
|         SQ_Call(v, 2, 0, 1);
 | ||
|         SQPop(v, 2);
 | ||
|     }
 | ||
|     OldOpenWindow(thisc, 0, a1, a2, a3);
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| void __declspec(naked)DrawWindow_B_Hook() {
 | ||
|     static int address = 0xFFDA10;
 | ||
|     static int address1 = 0x66BEA1;
 | ||
|     _asm
 | ||
|     {
 | ||
|         pushad
 | ||
|         pushfd
 | ||
| 
 | ||
|     }
 | ||
| 
 | ||
|     if (InitGameFlag)
 | ||
|     {
 | ||
|         SQPushRootTable(*(uint32_t*)0x1AF3544);
 | ||
|         SQPushString(*(uint32_t*)0x1AF3544, L"L_DrawWindow_B", -1);
 | ||
|         SQ_Get(*(uint32_t*)0x1AF3544, -2);
 | ||
|         SQPushRootTable(*(uint32_t*)0x1AF3544);
 | ||
|         SQ_Call(*(uint32_t*)0x1AF3544, 1, 0, 1);
 | ||
|         SQPop(*(uint32_t*)0x1AF3544, 2);
 | ||
|     }
 | ||
| 
 | ||
|     _asm {
 | ||
|         popfd
 | ||
|         popad
 | ||
|         mov ecx,eax
 | ||
|         call address
 | ||
|         jmp address1
 | ||
|     }
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| int hook::RegisterHook()
 | ||
| {
 | ||
|     //玩家菜单选项HOOK 有回调
 | ||
|     inlinehook SSS(0x001004B52, (int)&PlayerEach2);
 | ||
|     SSS.Motify_address();
 | ||
|     //修复滚轮
 | ||
|     inlinehook MMM(0x011BDE05, (int)&MouseWheelUp);
 | ||
|     MMM.Motify_address();
 | ||
|     //窗口绘制HOOK
 | ||
|     inlinehook WindowDrawHook(0x066BE9A, (int)&DrawWindow_B_Hook);
 | ||
|     WindowDrawHook.Motify_address();
 | ||
| 
 | ||
| 
 | ||
|     //个人信息
 | ||
|     //inlinehook WWW(0xEDE6C5, (int)&PlayerInfo);
 | ||
|     //WWW.Motify_address();
 | ||
| 
 | ||
|     ////个人信息
 | ||
|     //inlinehook EEE(0xEDE6DA, (int)&PlayerInfo2);
 | ||
|     //EEE.Motify_address();
 | ||
| 
 | ||
| 
 | ||
|     MH_Initialize();
 | ||
| 
 | ||
| 
 | ||
|     //窗口打开事件Hook
 | ||
|     MH_CreateHook((void*)0xE6E070, &NewOpenWindow, reinterpret_cast<void**>(&OldOpenWindow));
 | ||
|     MH_EnableHook((void*)0xE6E070);
 | ||
| 
 | ||
|     //鼠标事件HOOK
 | ||
|     MH_CreateHook((void*)0x11BDC90, &New11BDC90, reinterpret_cast<void**>(&Old11BDC90));
 | ||
|     MH_EnableHook((void*)0x11BDC90);
 | ||
| 
 | ||
| 
 | ||
|     //N键大地图
 | ||
|     MH_CreateHook((void*)0x1030C30, &New1030C30, reinterpret_cast<void**>(&Old1030C30));
 | ||
|     MH_EnableHook((void*)0x1030C30);
 | ||
| 
 | ||
|     //完成任务HOOK
 | ||
|     MH_CreateHook((void*)0x8EE1E0, &New8EE1E0, reinterpret_cast<void**>(&Old8EE1E0));
 | ||
|     MH_EnableHook((void*)0x8EE1E0);
 | ||
| 
 | ||
|     //官方的组合NutHook
 | ||
|     MH_CreateHook((void*)0x674030, &New674030, reinterpret_cast<void**>(&Old674030));
 | ||
|     MH_EnableHook((void*)0x674030);
 | ||
| 
 | ||
|     //MH_CreateHook((void*)0x909D70, &New909D70, reinterpret_cast<void**>(&Old909D70));
 | ||
|     //MH_EnableHook((void*)0x909D70);
 | ||
| 
 | ||
|     //他人信息数值Hook
 | ||
| 
 | ||
| 
 | ||
|     //他人信息类型Hook
 | ||
|     MH_CreateHook((void*)0xFA42D0, &NewFA42D0, reinterpret_cast<void**>(&OldFA42D0));
 | ||
|     MH_EnableHook((void*)0xFA42D0);
 | ||
|     //他人信息数值Hook
 | ||
|     MH_CreateHook((void*)0xFA3570, &NewFA3570, reinterpret_cast<void**>(&OldFA3570));
 | ||
|     MH_EnableHook((void*)0xFA3570);
 | ||
| 
 | ||
|     //MH_CreateHook((void*)0xEDE480, &NewEDE480, reinterpret_cast<void**>(&OldEDE480));
 | ||
|     //MH_EnableHook((void*)0xEDE480);
 | ||
| 
 | ||
|     //MH_CreateHook((void*)0xF542F0, &NewF542F0, reinterpret_cast<void**>(&OldF542F0));
 | ||
|     //MH_EnableHook((void*)0xF542F0);
 | ||
| 
 | ||
| 
 | ||
|     //MH_CreateHook((void*)0x9D2300, &New_9D2300, reinterpret_cast<void**>(&Old_9D2300));
 | ||
|     //MH_EnableHook((void*)0x9D2300);
 | ||
| 
 | ||
|     //消息框绘制HOOK
 | ||
|     MH_CreateHook((void*)0x499160, &New499160, reinterpret_cast<void**>(&Old499160));
 | ||
|     MH_EnableHook((void*)0x499160);
 | ||
| 
 | ||
| 
 | ||
|     //DrawMain HOOK
 | ||
|     MH_CreateHook((void*)0x4C61F0, &New4C61F0, reinterpret_cast<void**>(&Old4C61F0));
 | ||
|     MH_EnableHook((void*)0x4C61F0);
 | ||
| 
 | ||
| #ifdef FONT_BANK_SYSTEM
 | ||
|     //伤害字体 HOOK
 | ||
|     MH_CreateHook((void*)0x7EEED0, &New7EEED0, reinterpret_cast<void**>(&Old7EEED0));
 | ||
|     MH_EnableHook((void*)0x7EEED0);
 | ||
| #endif
 | ||
| 
 | ||
| 
 | ||
|     //HOOK背包鼠标位置
 | ||
| #ifdef Inventory_M_Pos
 | ||
|     MH_CreateHook((void*)0x11D24F0, &New_inventory_M_Pos, reinterpret_cast<void**>(&Old_inventory_M_Pos));
 | ||
|     MH_EnableHook((void*)0x11D24F0);
 | ||
| #endif
 | ||
| 
 | ||
|     //HOOK怪物血条
 | ||
| #if defined MONSTER_BLOOD_UI
 | ||
|     MH_CreateHook((void*)0x43d770, &NewBlood, reinterpret_cast<void**>(&OldBlood));
 | ||
|     MH_EnableHook((void*)0x43d770);    
 | ||
|     MH_CreateHook((void*)0x43d620, &NewBlood1, reinterpret_cast<void**>(&OldBlood1));
 | ||
|     MH_EnableHook((void*)0x43d620);
 | ||
|     MH_CreateHook((void*)0x43d4d0, &NewBlood2, reinterpret_cast<void**>(&OldBlood2));
 | ||
|     MH_EnableHook((void*)0x43d4d0);
 | ||
| #endif
 | ||
| 
 | ||
|     //Hook收包
 | ||
|     MH_CreateHook((void*)INIT_PACK_ADDRESS, &H_Register_Pack, reinterpret_cast<void**>(&Lpfn_Init));
 | ||
|     MH_EnableHook((void*)INIT_PACK_ADDRESS);
 | ||
| 
 | ||
| 
 | ||
|     //HookNut函数注册
 | ||
|     MH_CreateHook((void*)INIT_NUT_ADDRESS, &H_Register_Nut, reinterpret_cast<void**>(&MLnewclosure));
 | ||
|     MH_EnableHook((void*)INIT_NUT_ADDRESS);
 | ||
|     
 | ||
|     //Hook绘制字符
 | ||
|     MH_CreateHook((void*)INIT_NUT_DRAWCODE, &H_Register_DrawCode, reinterpret_cast<void**>(&DrawCodeF));
 | ||
|     MH_EnableHook((void*)INIT_NUT_DRAWCODE);
 | ||
| 
 | ||
| #ifdef CREAT_CHR_UI
 | ||
|     MH_CreateHook((void*)0x10f3050, &CreatChr, reinterpret_cast<void**>(&OldCreatChr));
 | ||
|     MH_EnableHook((void*)0x10f3050);
 | ||
| #endif // CREAT_CHR_UI
 | ||
| 
 | ||
| #ifdef ITEMRARITY
 | ||
|     //HOOK获取绘制颜色
 | ||
|     MH_CreateHook((void*)0x7AB080, &HookItemColor, reinterpret_cast<void**>(&OldHookItemColor));
 | ||
|     MH_EnableHook((void*)0x7AB080);
 | ||
| 
 | ||
|     //HOOK根据品级得到颜色
 | ||
|     MH_CreateHook((void*)0x7AAD00, &HookEquNameColor, reinterpret_cast<void**>(&OldHookEquNameColor));
 | ||
|     MH_EnableHook((void*)0x7AAD00);
 | ||
| #endif
 | ||
| 
 | ||
| 
 | ||
| #ifdef SENDPACKHOOK
 | ||
|     //HOOK发包类型
 | ||
|     MH_CreateHook((void*)0x1127D60, &NewSendPacksType, reinterpret_cast<void**>(&_OldSendPackType));
 | ||
|     MH_EnableHook((void*)0x1127D60);
 | ||
| 
 | ||
| #ifdef SENDPACKHOOK_EX
 | ||
|     MH_CreateHook((void*)0x1128550, &NewSendPacksByte, reinterpret_cast<void**>(&_OldSendPackByte));
 | ||
|     MH_EnableHook((void*)0x1128550);
 | ||
|     MH_CreateHook((void*)0x1128580, &NewSendPacksWord, reinterpret_cast<void**>(&_OldSendPackWord));
 | ||
|     MH_EnableHook((void*)0x1128580);
 | ||
|     MH_CreateHook((void*)0x11285B0, &NewSendPacksDWord, reinterpret_cast<void**>(&_OldSendPackDWord));
 | ||
|     MH_EnableHook((void*)0x11285B0);
 | ||
|     MH_CreateHook((void*)0x11285E0, &NewSendPacksChar, reinterpret_cast<void**>(&_OldSendPackChar));
 | ||
|     MH_EnableHook((void*)0x11285E0);
 | ||
|     MH_CreateHook((void*)0x1127EC0, &NewSend, reinterpret_cast<void**>(&_OldSend));
 | ||
|     MH_EnableHook((void*)0x1127EC0);
 | ||
| #endif // !SENDPACKHOOK_EX
 | ||
| #endif
 | ||
| 
 | ||
| #ifdef DRAWITEM
 | ||
|     //HOOK Item绘制
 | ||
|     //MH_CreateHook((void*)0x7AA800, &newsub7AA800, reinterpret_cast<void**>(&sub7AA800));
 | ||
|     //MH_EnableHook((void*)0x7AA800);
 | ||
| #endif
 | ||
| 
 | ||
| #ifdef GET_EXE_STR
 | ||
|     //exe字符串索引
 | ||
|     MH_CreateHook((void*)0x1220590, &Newsub1220590, reinterpret_cast<void**>(&sub1220590));
 | ||
|     MH_EnableHook((void*)0x1220590);
 | ||
| #endif
 | ||
| 
 | ||
| 
 | ||
|     MH_CreateHook((void*)0x11A8F60, &newsub11A8F60, reinterpret_cast<void**>(&sub11A8F60));
 | ||
|     MH_EnableHook((void*)0x11A8F60);
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     FILE* file = fopen("ImagePacks2/!HUD_Yosin百级UI.NPK", "rb");
 | ||
|     if (file) {
 | ||
|         //MH_CreateHook((void*)0x11A97E0, &New11A97E0, reinterpret_cast<void**>(&Old11A97E0));
 | ||
|         //MH_EnableHook((void*)0x11A97E0);
 | ||
|         //MH_CreateHook((void*)0x6F4370, &New6F4370, reinterpret_cast<void**>(&Old6F4370));
 | ||
|         //MH_EnableHook((void*)0x6F4370);
 | ||
|         //MH_CreateHook((void*)0x11AEE50, &New11AEE50, reinterpret_cast<void**>(&Old11AEE50));
 | ||
|         //MH_EnableHook((void*)0x11AEE50);
 | ||
|         MH_CreateHook((void*)0x11B4030, &NewEvent, reinterpret_cast<void**>(&OldEvent));
 | ||
|         MH_EnableHook((void*)0x11B4030);
 | ||
| 
 | ||
|         //绘制经验条Hook
 | ||
|         MH_CreateHook((void*)0x4B8430, &New4B8430, reinterpret_cast<void**>(&Old4B8430));
 | ||
|         MH_EnableHook((void*)0x4B8430);
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|     //获取坐标
 | ||
|     //MH_CreateHook((void*)0x48c690, &NewGetItemPos, reinterpret_cast<void**>(&GetItemPos));
 | ||
|     //MH_EnableHook((void*)0x48c690);
 | ||
| 
 | ||
|     //nut调用绘制技能的函数
 | ||
|     //MH_CreateHook((void*)0x5DCDA0, &Newsub_5DCDA0, reinterpret_cast<void**>(&sub_5DCDA0));
 | ||
|     //MH_EnableHook((void*)0x5DCDA0);
 | ||
| 
 | ||
|     //绘制技能图标的函数
 | ||
|     //MH_CreateHook((void*)0x5A4BE0, &Newsub_5A4BE0, reinterpret_cast<void**>(&sub_5A4BE0));
 | ||
|     //MH_EnableHook((void*)0x5A4BE0);
 | ||
| 
 | ||
|     //img绘制的函数
 | ||
|     //MH_CreateHook((void*)0x11A97E0, &Newsub_11A97E0, reinterpret_cast<void**>(&sub_11A97E0));
 | ||
|     //MH_EnableHook((void*)0x11A97E0);
 | ||
| 
 | ||
| 
 | ||
|     //大部分IMG数字的调用函数
 | ||
|     //MH_CreateHook((void*)0x11B2390, &Newsub_11B2390, reinterpret_cast<void**>(&sub_11B2390));
 | ||
|     //MH_EnableHook((void*)0x11B2390);
 | ||
| 
 | ||
|     //模拟Sqrcall
 | ||
|     //MH_CreateHook((void*)0x5AACB0, &Newsub_5AADF0, reinterpret_cast<void**>(&sub_5AADF0));
 | ||
|     //MH_EnableHook((void*)0x5AACB0);
 | ||
| 
 | ||
| 
 | ||
|     //MH_CreateHook((void*)0x5A4BE0, &Newsub_5A4BE0, reinterpret_cast<void**>(&sub_5A4BE0));
 | ||
|     //MH_EnableHook((void*)0x5A4BE0);
 | ||
| 
 | ||
|     //HOOK PushString
 | ||
|     MH_CreateHook((void*)0x1358A60, &LMySqPushString, reinterpret_cast<void**>(&LrealSqPushString));
 | ||
|     MH_EnableHook((void*)0x1358A60);
 | ||
| 
 | ||
| 
 | ||
|     //MH_CreateHook((void*)0x11816B0, &New11816B0, reinterpret_cast<void**>(&Old11816B0));
 | ||
|     //MH_EnableHook((void*)0x11816B0);
 | ||
| 
 | ||
|     //读取静态数据
 | ||
|     MH_CreateHook((void*)0x908510, &New908510, reinterpret_cast<void**>(&Old908510));
 | ||
|     MH_EnableHook((void*)0x908510);
 | ||
|     ////读取冷却
 | ||
|     MH_CreateHook((void*)0x909020, &New909020, reinterpret_cast<void**>(&Old909020));
 | ||
|     MH_EnableHook((void*)0x909020);
 | ||
|     ////读取动态数据
 | ||
|     //MH_CreateHook((void*)0x0908770, &New908770, reinterpret_cast<void**>(&Old908770));
 | ||
|     //MH_EnableHook((void*)0x0908770);
 | ||
| 
 | ||
| 
 | ||
|     ////读取动态数据
 | ||
|     MH_CreateHook((void*)0x090A4A0, &New90A4A0, reinterpret_cast<void**>(&Old90A4A0));
 | ||
|     MH_EnableHook((void*)0x090A4A0);
 | ||
|     MH_CreateHook((void*)0x0BA89D0, &NewBA89D0, reinterpret_cast<void**>(&OldBA89D0));
 | ||
|     MH_EnableHook((void*)0x0BA89D0);
 | ||
|     MH_CreateHook((void*)0x05A40E0, &New5A40E0, reinterpret_cast<void**>(&Old5A40E0));
 | ||
|     MH_EnableHook((void*)0x05A40E0);
 | ||
| 
 | ||
|     //MH_CreateHook((void*)0x90FB30, &New90FB30, reinterpret_cast<void**>(&Old90FB30));
 | ||
|     //MH_EnableHook((void*)0x90FB30);
 | ||
| 
 | ||
|     MH_CreateHook((void*)0x075D1F0, &New75D1F0, reinterpret_cast<void**>(&Old75D1F0));
 | ||
|     MH_EnableHook((void*)0x075D1F0);
 | ||
|     //MH_CreateHook((void*)0x11C0410, &New11C0410, reinterpret_cast<void**>(&Old11C0410));
 | ||
|     //MH_EnableHook((void*)0x11C0410);
 | ||
|     //MH_CreateHook((void*)0x11AA190, &NewGet_Img, reinterpret_cast<void**>(&OldGet_Img));
 | ||
|     //MH_EnableHook((void*)0x11AA190);
 | ||
| 
 | ||
| 
 | ||
|     //MH_CreateHook((void*)0x10041D0, &New10041D0, reinterpret_cast<void**>(&Old10041D0));
 | ||
|     //MH_EnableHook((void*)0x10041D0);
 | ||
| 
 | ||
|     // HOOK exe 调用文本进 松鼠虚拟机
 | ||
|     //MH_CreateHook((void*)0x135B2C0, &NewSQ_Compilebuffer, reinterpret_cast<void**>(&OldSQ_Compilebuffer));
 | ||
|     //MH_EnableHook((void*)0x135B2C0);
 | ||
| 
 | ||
|     //收包HOOK
 | ||
|     //MH_CreateHook((void*)0x06FE1D0, &New6FE1D0, reinterpret_cast<void**>(&Old6FE1D0));
 | ||
|     //MH_EnableHook((void*)0x06FE1D0);
 | ||
| 
 | ||
| 
 | ||
|     return 0;
 | ||
| }
 |