DNF_DLL/test/hook.cpp

2649 lines
72 KiB
C++
Raw Normal View History

2022-03-08 12:57:35 +08:00
#include "pch.h"
#include "hook.h"
2024-04-01 17:25:21 +08:00
#include "inlinehook.h"
2023-04-14 14:56:01 +08:00
extern int LbState;
extern int RbState;
extern int MbState;
2022-03-08 12:57:35 +08:00
2023-11-13 14:00:01 +08:00
static int OtherPlayerInfoType = 0;
static bool HookOtherPlayerInfo = false;
static int OtherPlayerInfoImg = 0;
2024-04-01 17:25:21 +08:00
//<2F><>Ϸ<EFBFBD><CFB7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flag
static bool InitGameFlag = false;
2022-09-06 00:08:26 +08:00
//ע<><D7A2>nut
uint32_t __cdecl hook::H_Register_Nut(uint32_t v, void* f, int freeVarsCnt)
2022-03-08 12:57:35 +08:00
{
2023-11-13 14:00:01 +08:00
//wchar_t* funcName = nullptr;
//SQGetString(v, -1 - freeVarsCnt, &funcName);
//char* OutPutText = DNFTOOL::SquirrelU2W(funcName);
//std::string FuncName = OutPutText;
//delete []OutPutText;
2022-09-06 00:08:26 +08:00
//std::wcout << funcName << std::endl;
2023-11-13 14:00:01 +08:00
//wprintf(L"Function:%s Num:%d Address: 0x%p\n", funcName, freeVarsCnt,f);
2022-03-08 12:57:35 +08:00
static int build = 0;
if (build == 0 && f == (void*)0x005C5980)
{
squirrel::R_Register_Nut();
2022-11-06 23:12:18 +08:00
//squirrel::InitGameScript();//<2F><><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
build = 1;
2023-11-13 14:00:01 +08:00
//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){} ";
2024-03-31 13:23:55 +08:00
std::string Base = R"(
Lenheart_P_Update <- true;
function Sq_L_Medal (x,y) {}
2023-11-13 14:00:01 +08:00
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) {}
2024-03-31 13:23:55 +08:00
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() {}
2024-04-01 17:25:21 +08:00
function L_OpenOldWindowCallBack(WindowIndex) {}
2023-11-13 14:00:01 +08:00
)";
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);
2022-03-08 12:57:35 +08:00
}
2022-11-06 23:12:18 +08:00
#if defined DOFILE_HOOK
if (f == (void*)0x013563C0)
{
return MLnewclosure(v, squirrel::LDofile, freeVarsCnt);
}
#endif
2022-03-08 12:57:35 +08:00
return MLnewclosure(v, f, freeVarsCnt);
}
2023-11-13 14:00:01 +08:00
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)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
if (!wcscmp(s, L"getCurrentModuleDamageRate")) {
return LrealSqPushString(v, L"L_getCurrentModuleDamageRate", l);
}
2024-05-21 12:30:12 +08:00
wprintf(L"<EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD>: %s", s);
2023-11-13 14:00:01 +08:00
return LrealSqPushString(v, s, l);
}
2022-09-06 00:08:26 +08:00
//ע<><D7A2><EFBFBD>հ<EFBFBD>
2022-03-08 12:57:35 +08:00
void hook::H_Register_Pack(void* Ecx)
{
Lpfn_Init(Ecx);
sock::R_Register_Pack();
}
2022-11-29 20:38:55 +08:00
//Hook<6F><6B><EFBFBD><EFBFBD>
#ifdef CODEDRAW
2023-04-14 14:56:01 +08:00
struct CodeDrawObj
2022-11-29 20:38:55 +08:00
{
int Color;
std::string str;
};
extern std::map< std::string, CodeDrawObj>CodeDrawMap;
#endif
2023-04-14 14:56:01 +08:00
typedef DWORD(_fastcall _BFontInitW)(DWORD thisc, DWORD Seat);
static _BFontInitW* Wsub_1206570 = (_BFontInitW*)0x1206570;
2023-11-13 14:00:01 +08:00
typedef int(_fastcall _DrawOtherPlayer_Img)(int thisc, void*, int X, int Y, int Img);
static _DrawOtherPlayer_Img* DrawOtherPlayer_Img = (_DrawOtherPlayer_Img*)0x11A8F60;
2022-09-06 00:08:26 +08:00
//HOOK<4F><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2022-04-24 02:31:42 +08:00
void _fastcall hook::H_Register_DrawCode(DWORD thisc, int Seat, int a3, int a4, int a5, int a6)
2022-04-11 19:44:03 +08:00
{
2023-11-13 14:00:01 +08:00
2022-11-06 23:12:18 +08:00
wchar_t* strbuffer = (wchar_t*)a6;
2023-04-14 14:56:01 +08:00
if (strbuffer == NULL)return;
2023-11-13 14:00:01 +08:00
2023-04-14 14:56:01 +08:00
wchar_t* clone = new wchar_t[wcslen(strbuffer) + 2];
2022-11-06 23:12:18 +08:00
wcscpy(clone, strbuffer);
2023-11-13 14:00:01 +08:00
2022-11-06 23:12:18 +08:00
std::string GameStr;
DNFTOOL::Wchar_tToString(GameStr, clone);
delete[]clone;
2023-11-13 14:00:01 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>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;
}
}
2024-03-31 13:23:55 +08:00
if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 6) {
if (GameStr.find("ch20.<2E><><EFBFBD><E1A1BE><EFBFBD>") != std::string::npos)
{
wchar_t* nclone = L"<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>֮ս-<2D>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>";
return DrawCodeF(thisc, Seat, a3, a4, a5, (int)nclone);
}
}
2023-11-13 14:00:01 +08:00
//if (GameStr.find("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != std::string::npos)
//{
// std::cout << GameStr << std::endl;
//}
2022-11-29 20:38:55 +08:00
//std::cout << GameStr << std::endl;
2023-11-13 14:00:01 +08:00
//if (GameStr.find("<22><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>") != std::string::npos)
//{
// wchar_t* nclone = new wchar_t[wcslen(strbuffer) + 8];
// WReplace(nclone, strbuffer, L"<22><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>", L"VIPװ<50><D7B0>");
// //string_replace(GameStr, "<22><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>", "VIPװ<50><D7B0>");
// //const wchar_t* newstrbuffer = DNFTOOL::GetWC((char*)GameStr.c_str());
// return DrawCodeF(thisc, Seat, a3, a4, a5, (int)nclone);
//}
2022-11-29 20:38:55 +08:00
//Hook<6F><6B><EFBFBD><EFBFBD>
2023-04-14 14:56:01 +08:00
2023-05-12 16:08:39 +08:00
2022-11-29 20:38:55 +08:00
#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
2023-04-14 14:56:01 +08:00
#ifdef MEDAL_SWITCH
if (GameStr.find("<EFBFBD><EFBFBD><EFBFBD>Ắѫ<EFBFBD><EFBFBD>") != std::string::npos || GameStr.find("<EFBFBD>A<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != std::string::npos || GameStr.find("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != 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
2022-11-29 20:38:55 +08:00
2022-11-06 23:12:18 +08:00
//Hook<6F><6B>Ϸ<EFBFBD><CFB7><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>CallBack ui/optionwindow
#ifdef SETTINGWINDOWS
if (GameStr.find("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != 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
2023-04-14 14:56:01 +08:00
//buff<66><66>װ
#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
2023-05-12 16:08:39 +08:00
//ǿ<><C7BF>ϵͳ
2023-04-14 14:56:01 +08:00
#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
2022-11-06 23:12:18 +08:00
//Hook<6F><6B>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB>չ<EFBFBD><D5B9><EFBFBD>CallBack ui/inventory/inventory_bottom.ui
#ifdef RecoverySystem
if (GameStr.find("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != std::string::npos)
{
if (GameStr.find("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD>") != 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("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>") != std::string::npos)Type = 1;
else if (GameStr.find("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ") != std::string::npos)Type = 2;
else if (GameStr.find("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ղ<EFBFBD><EFBFBD><EFBFBD>") != std::string::npos)Type = 3;
else if (GameStr.find("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>ְҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != std::string::npos)Type = 5;
else if (GameStr.find("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != std::string::npos)Type = 4;
else if (GameStr.find("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱװ") != std::string::npos)Type = 6;
else if (GameStr.find("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD>") != std::string::npos)Type = 7;
else if (GameStr.find("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != std::string::npos)Type = 8;
else if (GameStr.find("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>") != std::string::npos)Type = 9;
else if (GameStr.find("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ") != 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);
2023-04-14 14:56:01 +08:00
return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer);
}
}
if (GameStr.find("<EFBFBD>A<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != std::string::npos)
{
if (GameStr.find("<EFBFBD>A<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD>") != 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("<EFBFBD>A<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD><EFBFBD>") != std::string::npos)Type = 1;
else if (GameStr.find("<EFBFBD>A<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ") != std::string::npos)Type = 2;
else if (GameStr.find("<EFBFBD>A<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ղ<EFBFBD><EFBFBD><EFBFBD>") != std::string::npos)Type = 3;
else if (GameStr.find("<EFBFBD>A<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>š<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != std::string::npos)Type = 5;
else if (GameStr.find("<EFBFBD>A<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>΄ղ<EFBFBD><EFBFBD><EFBFBD>") != std::string::npos)Type = 4;
else if (GameStr.find("<EFBFBD>A<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Օr<EFBFBD>b") != std::string::npos)Type = 6;
else if (GameStr.find("<EFBFBD>A<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD>") != std::string::npos)Type = 7;
else if (GameStr.find("<EFBFBD>A<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != std::string::npos)Type = 8;
else if (GameStr.find("<EFBFBD>A<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD><EFBFBD>") != std::string::npos)Type = 9;
else if (GameStr.find("<EFBFBD>A<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ") != 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);
2022-11-06 23:12:18 +08:00
return DrawCodeF(thisc, Seat, a3, a4, 0x00000000, (int)strbuffer);
}
}
#endif
#ifndef SELL
2022-11-10 04:27:41 +08:00
/*
2022-11-06 23:12:18 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (a3 == 15 && a4 == 503)
2022-09-06 00:08:26 +08:00
{
2022-11-06 23:12:18 +08:00
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;
2022-09-06 00:08:26 +08:00
}
2022-11-10 04:27:41 +08:00
*/
2022-09-06 00:08:26 +08:00
2022-11-06 23:12:18 +08:00
//Ver.1180.2.1r
if (GameStr.find("Ver. 1.180.2.1r") != std::string::npos)
{
return;
}
if (GameStr.find("ch11.<2E><><EFBFBD><EFBFBD>֮ɭ") != std::string::npos)
{
a3 += 32;
a4 -= 58;
}
if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 6 && (GameStr.find("˳<EFBFBD><EFBFBD>") != std::string::npos || GameStr.find("ӵ<EFBFBD><EFBFBD>") != std::string::npos || GameStr.find("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != std::string::npos))
{
a3 += 32;
a4 -= 58;
}
2022-09-06 00:08:26 +08:00
// ui/hud/hud.ui <20><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>
2023-11-13 14:00:01 +08:00
//if (a3 == 9999 && a4 == 9999)
//{
// squirrel::SqrCallBackFunc();
// //imguiC::Init();
// return;
//}
2022-11-06 23:12:18 +08:00
#endif // !SELL
2022-09-06 00:08:26 +08:00
// ui/hud/hud.ui <20><><EFBFBD><EFBFBD>
2023-11-13 14:00:01 +08:00
// 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;
// }
2022-09-06 00:08:26 +08:00
// ui/selectcharacter/selectcharacterover.ui ѡ<><D1A1>ɫ
2023-11-13 14:00:01 +08:00
//if (a3 == 9999 && a4 == 9489)
//{
// static bool Init = false;
// if (!Init)
// {
// squirrel::InitGameScript();//<2F><><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 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;
//}
2022-04-24 02:31:42 +08:00
2022-09-06 00:08:26 +08:00
// ui/event/creatednftwevent/creatednftwevent.ui <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2023-11-13 14:00:01 +08:00
//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);
2022-09-06 00:08:26 +08:00
2023-11-13 14:00:01 +08:00
// 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;
//}
2022-09-06 00:08:26 +08:00
2022-06-20 03:10:33 +08:00
2023-04-14 14:56:01 +08:00
return DrawCodeF(thisc, Seat, a3, a4, a5, a6);
2022-04-11 19:44:03 +08:00
}
2022-03-08 12:57:35 +08:00
2022-11-06 23:12:18 +08:00
#ifdef GET_EXE_STR
//Exe<78><65><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>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);
2023-11-13 14:00:01 +08:00
2022-11-06 23:12:18 +08:00
return sub1220590(StrIndex);
}
}
#endif
2022-04-24 02:31:42 +08:00
2022-09-06 00:08:26 +08:00
//HOOK<4F><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
#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);
2022-11-06 23:12:18 +08:00
SQ_Call(v, 2, 0, 1);
2022-09-06 00:08:26 +08:00
SQPop(v, 2);
}
}
return OldCreatChr(thisc, 0, a2);
}
#endif // CREAT_CHR_UI
//HOOK Item<65><6D>ɫ
#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];
}
//<2F><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ɫmap<61><70><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ԭ<EFBFBD><D4AD>ɫ<EFBFBD><C9AB>ȡ
int Rarity = *(int*)(thisc + 0xF4);
int color = HookEquNameColor(Rarity);
return color;
}
#endif
//HOOK <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef SENDPACKHOOK
static SendPacksType _OldSendPackType;
int __fastcall NewSendPacksType(DWORD thisc, int Seat, int Parm)
{
2022-11-06 23:12:18 +08:00
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);
}
2022-09-06 00:08:26 +08:00
}
2023-04-14 14:56:01 +08:00
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();
}
}
2022-09-06 00:08:26 +08:00
#endif
/*
//HOOK <20><>ȡITEM <20><><EFBFBD><EFBFBD>
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;
}
*/
2023-11-13 14:00:01 +08:00
//Img <20><><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
//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);
//}
2022-09-06 00:08:26 +08:00
//HOOK <20><><EFBFBD><EFBFBD>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);
}
2023-11-13 14:00:01 +08:00
2022-09-06 00:08:26 +08:00
//HOOK <20><><EFBFBD><EFBFBD>Item
typedef int(_fastcall _sub11A8F60)(DWORD a1, DWORD Seat, int a2, int a3, int a4);
static _sub11A8F60* sub11A8F60;
2023-11-13 14:00:01 +08:00
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;
2022-09-06 00:08:26 +08:00
int _fastcall newsub11A8F60(DWORD a1, DWORD Seat, int a2, int a3, int a4)
{
2023-11-13 14:00:01 +08:00
//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
// //Ѫ<><D1AA>
// 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
2023-04-14 14:56:01 +08:00
2023-05-12 16:08:39 +08:00
2022-09-06 00:08:26 +08:00
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
{
2023-11-13 14:00:01 +08:00
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);
2022-09-06 00:08:26 +08:00
int ret = sub11A8F60(a1, 0, a2, a3, a4);
2023-11-13 14:00:01 +08:00
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);
2022-09-06 00:08:26 +08:00
return ret;
}
2023-05-12 16:08:39 +08:00
2023-11-13 14:00:01 +08:00
2022-09-06 00:08:26 +08:00
}
2023-11-13 14:00:01 +08:00
2022-11-06 23:12:18 +08:00
2022-09-06 00:08:26 +08:00
/*
//ģ<><C4A3>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);
}
*/
2023-11-13 14:00:01 +08:00
2022-09-06 00:08:26 +08:00
//<2F>󲿷<EFBFBD>IMG<4D><47><EFBFBD>ֵĵ<D6B5><C4B5>ú<EFBFBD><C3BA><EFBFBD>
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;
2023-11-13 14:00:01 +08:00
2022-09-06 00:08:26 +08:00
return sub_11B2390(a1, 0, a2, a3, a4, a5, a6);
}
2023-11-13 14:00:01 +08:00
2022-09-06 00:08:26 +08:00
/*
//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);
}
*/
2022-11-06 23:12:18 +08:00
/*
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 <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>HOOK<4F><4B><EFBFBD><EFBFBD><><CEAA><EFBFBD>õ<EFBFBD>this<69><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ)
#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
2023-04-14 14:56:01 +08:00
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);
}
2023-11-13 14:00:01 +08:00
2023-04-14 14:56:01 +08:00
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)*/)//<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><DEB8>˻ͼ<EEB6AF><CDBC><EFBFBD><EFBFBD>Y<EFBFBD><59> <20>ڽ<EFBFBD><DABD><EFBFBD>HOOK<4F>Ա<EFBFBD><D4B1>޸<EFBFBD>
{
2023-11-13 14:00:01 +08:00
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;
2023-04-14 14:56:01 +08:00
}
2023-05-12 16:08:39 +08:00
2023-04-14 14:56:01 +08:00
return OldEvent(thisc, Seat, a2, a3, a4);
}
2023-11-13 14:00:01 +08:00
//typedef DWORD(_Cutting)(DWORD a1, DWORD a2, DWORD a3, DWORD a4);
//static _Cutting* Old6F4370;
//static _Cutting* Old11AEE50;
////<2F><><EFBFBD>к<EFBFBD><D0BA><EFBFBD>HOOK
//DWORD New6F4370(DWORD a1, DWORD a2, DWORD a3, DWORD a4)
//{
// if (a1 == 0 && a3 == 800)//Ѫ<><D1AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2>в<EFBFBD><D0B2><EFBFBD> <20><>Ҫ+14 <20><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B><>14
// {
// a2 += 14;
// a4 += 14;
// }
// return Old6F4370(a1, a2, a3, a4);
//}
////<2F><><EFBFBD>к<EFBFBD><D0BA><EFBFBD>HOOK
//DWORD New11AEE50(DWORD a1, DWORD a2, DWORD a3, DWORD a4)
//{
// if (a1 == 0 && a2 == 625)//Ѫ<><D1AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2>в<EFBFBD><D0B2><EFBFBD> <20><>Ҫ+14 <20><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B><>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;
//
////<2F><>ͼ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; //Ѫ<><D1AA>X<EFBFBD><58><EFBFBD><EFBFBD>
// a2 = 538; //Ѫ<><D1AA>X<EFBFBD><58><EFBFBD><EFBFBD>
// }
// if (a1 == 732 && a2 == 524)
// {
// a1 = 515; //<2F><><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>
// a2 = 538; //<2F><><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>
// }
//
// 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;
//
////<2F><>ͼHOOK
//DWORD _fastcall New11A8F60(DWORD thisc, DWORD Seat, DWORD a1, DWORD a2, DWORD a3)
//{
//
// if (a1 == 13 && a2 == 524)
// {
// a1 = 224; //Ѫ<><D1AA>X<EFBFBD><58><EFBFBD><EFBFBD>
// a2 = 538; //Ѫ<><D1AA>X<EFBFBD><58><EFBFBD><EFBFBD>
// }
// else if (a1 == 732 && a2 == 524)
// {
// a1 = 515; //<2F><><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>
// a2 = 538; //<2F><><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>
// }
// else if (a1 == 88 && a2 == 591)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X Y
// {
// a1 = 248;
// a2 = 596;
// }
//
// return Old11A8F60(thisc, Seat, a1, a2, a3);
//}
2023-04-14 14:56:01 +08:00
2023-05-12 16:08:39 +08:00
typedef DWORD(_fastcall _11816B0)(DWORD thisc, DWORD Seat, DWORD* a2, int a3);
static _11816B0* Old11816B0;
//<2F><>ͼ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;
2023-11-13 14:00:01 +08:00
if (B.find("prepareDraw_appendage") != std::string::npos) {
std::cout << 111 << std::endl;
}
2023-05-12 16:08:39 +08:00
delete[]OutPutText;
return Old11816B0(thisc, Seat, a2, a3);
}
2023-11-13 14:00:01 +08:00
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);
2023-05-12 16:08:39 +08:00
2023-11-13 14:00:01 +08:00
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)
2022-03-08 12:57:35 +08:00
{
2023-11-13 14:00:01 +08:00
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);
2023-05-12 16:08:39 +08:00
2023-11-13 14:00:01 +08:00
return NutAddValue + Old909020(thisc, Seat, a2, a3);
}
2022-11-06 23:12:18 +08:00
2023-11-13 14:00:01 +08:00
typedef struct LevelDataBuffer
{
DWORD SkillAddresss;
DWORD SkillIdx;
DWORD ObjectAddress;
2023-04-14 14:56:01 +08:00
2023-11-13 14:00:01 +08:00
} RELevelDataBufferG;
LevelDataBuffer _LevelDataBuffer = { 0 };
2022-11-06 23:12:18 +08:00
2023-11-13 14:00:01 +08:00
//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 = <EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
* a2 = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD>λ
* a3 = <EFBFBD><EFBFBD><EFBFBD>ܵȼ<EFBFBD>
* a4 = <EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
*/
_LevelDataBuffer.SkillAddresss = thisc;
_LevelDataBuffer.SkillIdx = a2;
_LevelDataBuffer.ObjectAddress = a3;
int ret = Old908770(thisc, Seat, a2, a3, a4, a5, a6, a7, a8, a9);
return ret;
}
//ԭ<><D4AD><EFBFBD><EFBFBD>ɫ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;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ܶ<EFBFBD><DCB6><EFBFBD>
typedef int __fastcall sub_TTTTTT(int a1, int a2, int a3);
static sub_TTTTTT* TFuncsub_GetSkillAddress = (sub_TTTTTT*)0x8406C0;
//Nut<75><74>ɫ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<75><74>ɫ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;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>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);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>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) {
2024-03-31 13:23:55 +08:00
if (a2 == 239) {
std::cout << 12123123 << std::endl;
2023-11-13 14:00:01 +08:00
}
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);
2024-03-31 13:23:55 +08:00
static std::map<std::string, bool> UNN;
2023-11-13 14:00:01 +08:00
std::string B = OutPutText;
2024-03-31 13:23:55 +08:00
if(B.find(".img") != std::string::npos )
{
if (!UNN[B]) {
UNN[B] = true;
std::cout << B << std::endl;
}
}
2023-11-13 14:00:01 +08:00
//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("<22>ɹ<EFBFBD>\n\n");
// printf("ֵ=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC));
*(DWORD*)(PassObjectPoAsm.ECX + 0xC) = 24000002;
//printf("<22>ɹ<EFBFBD>ֵ=%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("<22>ɹ<EFBFBD>\n\n");
//printf("ֵ=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC));
*(DWORD*)(PassObjectPoAsm.ECX + 0xC) = 24000002;
// printf("<22>ɹ<EFBFBD>ֵ=%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("<22>ɹ<EFBFBD>\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("<22>ɹ<EFBFBD>\n\n");
//printf("ֵ=%d\n", *(DWORD*)(PassObjectPoAsm.ECX + 0xC));
*(DWORD*)(PassObjectPoAsm.ECX + 0xC) = 24000002;
//printf("<22>ɹ<EFBFBD>ֵ=%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
// }
//}
2024-03-31 13:23:55 +08:00
2023-11-13 14:00:01 +08:00
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>
2024-03-31 13:23:55 +08:00
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;
}
}
2023-11-13 14:00:01 +08:00
2024-03-31 13:23:55 +08:00
void Suxn() {
size_t Ds = BaseData.size();
2023-11-13 14:00:01 +08:00
2024-03-31 13:23:55 +08:00
for (size_t i = 0; i < Ds; i++)
{
std::string filename = "BaseData" + std::to_string(i);
std::string str = BaseData[i];
2023-11-13 14:00:01 +08:00
2024-05-21 12:30:12 +08:00
//std::cout << str << std::endl << std::flush;
2024-03-31 13:23:55 +08:00
wchar_t* sfile = DNFTOOL::charTowchar_t((char*)filename.c_str());
wchar_t* ss = DNFTOOL::charTowchar_t((char*)str.c_str());
2023-11-13 14:00:01 +08:00
2024-03-31 13:23:55 +08:00
//outputWcharToFile(ss, sfile);
//wprintf(L"Function:%s \n", ss);
//std::cout << i << std::endl;
uint32_t v = GetSqVm();
squirrel::SQdofileBuffer(v, sfile, ss);
}
2023-11-13 14:00:01 +08:00
2024-03-31 13:23:55 +08:00
BaseData.clear();
jiaoben = false;
}
2023-11-13 14:00:01 +08:00
2024-03-31 13:23:55 +08:00
//DrawMain HOOK
DWORD _fastcall New4C61F0(DWORD thisc, DWORD Seat)
{
static bool Init = false;
2023-11-13 14:00:01 +08:00
2024-03-31 13:23:55 +08:00
if (BaseData.size() > 0 && jiaoben == true && DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 1) {
Suxn();
2023-11-13 14:00:01 +08:00
}
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);
2024-03-31 13:23:55 +08:00
SQPushRootTable(v);
SQPushString(v, L"L_DrawWindow_A", -1);
SQ_Get(v, -2);
SQPushRootTable(v);
SQ_Call(v, 1, 0, 1);
SQPop(v, 2);
2023-11-13 14:00:01 +08:00
}
#ifndef SELL
//ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
squirrel::SqrCallBackFunc();
#endif
static bool mouseInit = false;
//ѡ<><D1A1><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 0) {
if (!Init)
{
//Sleep(1000);
squirrel::InitGameScript();//<2F><><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Init = true;
mouseInit = true;
2024-04-01 17:25:21 +08:00
InitGameFlag = true;
2023-11-13 14:00:01 +08:00
}
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
//<2F><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
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;
//<2F>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD> 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 << "<22>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD> = "<< heart.ECX << std::endl;
//wprintf(L"<22>Լ<EFBFBD><D4BC><EFBFBD>ֵ = %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);
}
//<2F><><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD>
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;
}
2024-03-31 13:23:55 +08:00
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 << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD> " << (int)*(unsigned __int16*)(a2 + 1) << std::endl;
if (a2) {
//std::cout << "<22><>ַΪ<D6B7><CEAA>" << std::hex << a2 << std::endl;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD>
char* address = (char*)a2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>0x1234
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ֽڲ<D6BD>ת<EFBFBD><D7AA>Ϊint
unsigned char byte1 = address[0];
unsigned char byte2 = address[1];
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>int
//std::cout << "ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>int<6E><74>һλΪ<CEBB><CEAA>" << (int)byte1 << std::endl;
//std::cout << "ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>int<6E>ڶ<EFBFBD>λΪ<CEBB><CEAA>" << (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;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
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;
}
2024-04-01 17:25:21 +08:00
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);
}
2024-03-31 13:23:55 +08:00
2024-04-01 17:25:21 +08:00
void __declspec(naked)DrawWindow_B_Hook() {
static int address = 0xFFDA10;
static int address1 = 0x66BEA1;
_asm
{
pushad
pushfd
2024-03-31 13:23:55 +08:00
2024-04-01 17:25:21 +08:00
}
2024-03-31 13:23:55 +08:00
2024-04-01 17:25:21 +08:00
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);
2024-03-31 13:23:55 +08:00
}
2024-04-01 17:25:21 +08:00
_asm {
popfd
popad
mov ecx,eax
call address
jmp address1
2024-03-31 13:23:55 +08:00
}
}
2023-11-13 14:00:01 +08:00
int hook::RegisterHook()
{
//<2F><><EFBFBD>Ҳ˵<D2B2>ѡ<EFBFBD><D1A1>HOOK <20>лص<D0BB>
inlinehook SSS(0x001004B52, (int)&PlayerEach2);
SSS.Motify_address();
//<2F>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>
inlinehook MMM(0x011BDE05, (int)&MouseWheelUp);
MMM.Motify_address();
2024-04-01 17:25:21 +08:00
//<2F><><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD>HOOK
inlinehook WindowDrawHook(0x066BE9A, (int)&DrawWindow_B_Hook);
WindowDrawHook.Motify_address();
2024-03-31 13:23:55 +08:00
2023-11-13 14:00:01 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//inlinehook WWW(0xEDE6C5, (int)&PlayerInfo);
//WWW.Motify_address();
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//inlinehook EEE(0xEDE6DA, (int)&PlayerInfo2);
//EEE.Motify_address();
MH_Initialize();
2024-03-31 13:23:55 +08:00
2024-04-01 17:25:21 +08:00
//<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>¼<EFBFBD>Hook
MH_CreateHook((void*)0xE6E070, &NewOpenWindow, reinterpret_cast<void**>(&OldOpenWindow));
MH_EnableHook((void*)0xE6E070);
2024-03-31 13:23:55 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>HOOK
MH_CreateHook((void*)0x11BDC90, &New11BDC90, reinterpret_cast<void**>(&Old11BDC90));
MH_EnableHook((void*)0x11BDC90);
2023-11-13 14:00:01 +08:00
//N<><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
MH_CreateHook((void*)0x1030C30, &New1030C30, reinterpret_cast<void**>(&Old1030C30));
MH_EnableHook((void*)0x1030C30);
2024-03-31 13:23:55 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HOOK
MH_CreateHook((void*)0x8EE1E0, &New8EE1E0, reinterpret_cast<void**>(&Old8EE1E0));
MH_EnableHook((void*)0x8EE1E0);
//<2F>ٷ<EFBFBD><D9B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NutHook
MH_CreateHook((void*)0x674030, &New674030, reinterpret_cast<void**>(&Old674030));
MH_EnableHook((void*)0x674030);
2023-11-13 14:00:01 +08:00
//MH_CreateHook((void*)0x909D70, &New909D70, reinterpret_cast<void**>(&Old909D70));
//MH_EnableHook((void*)0x909D70);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ֵHook
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>Hook
MH_CreateHook((void*)0xFA42D0, &NewFA42D0, reinterpret_cast<void**>(&OldFA42D0));
MH_EnableHook((void*)0xFA42D0);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ֵ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);
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>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
//<2F>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD> HOOK
MH_CreateHook((void*)0x7EEED0, &New7EEED0, reinterpret_cast<void**>(&Old7EEED0));
MH_EnableHook((void*)0x7EEED0);
#endif
//HOOK<4F><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
#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<4F><4B><EFBFBD><EFBFBD>Ѫ<EFBFBD><D1AA>
#if defined MONSTER_BLOOD_UI
MH_CreateHook((void*)0x43d770, &NewBlood, reinterpret_cast<void**>(&OldBlood));
2022-11-06 23:12:18 +08:00
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
2022-04-24 02:31:42 +08:00
//Hook<6F>հ<EFBFBD>
2022-03-08 12:57:35 +08:00
MH_CreateHook((void*)INIT_PACK_ADDRESS, &H_Register_Pack, reinterpret_cast<void**>(&Lpfn_Init));
2022-09-06 00:08:26 +08:00
MH_EnableHook((void*)INIT_PACK_ADDRESS);
2024-03-31 13:23:55 +08:00
2022-04-24 02:31:42 +08:00
//HookNut<75><74><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>
2022-03-08 12:57:35 +08:00
MH_CreateHook((void*)INIT_NUT_ADDRESS, &H_Register_Nut, reinterpret_cast<void**>(&MLnewclosure));
2022-09-06 00:08:26 +08:00
MH_EnableHook((void*)INIT_NUT_ADDRESS);
2023-05-12 16:08:39 +08:00
2022-04-24 02:31:42 +08:00
//Hook<6F><6B><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
MH_CreateHook((void*)INIT_NUT_DRAWCODE, &H_Register_DrawCode, reinterpret_cast<void**>(&DrawCodeF));
2022-09-06 00:08:26 +08:00
MH_EnableHook((void*)INIT_NUT_DRAWCODE);
2022-03-08 12:57:35 +08:00
2022-09-06 00:08:26 +08:00
#ifdef CREAT_CHR_UI
MH_CreateHook((void*)0x10f3050, &CreatChr, reinterpret_cast<void**>(&OldCreatChr));
MH_EnableHook((void*)0x10f3050);
#endif // CREAT_CHR_UI
2022-04-11 19:44:03 +08:00
2022-09-06 00:08:26 +08:00
#ifdef ITEMRARITY
//HOOK<4F><4B>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
MH_CreateHook((void*)0x7AB080, &HookItemColor, reinterpret_cast<void**>(&OldHookItemColor));
MH_EnableHook((void*)0x7AB080);
2022-05-23 21:37:38 +08:00
2022-09-06 00:08:26 +08:00
//HOOK<4F><4B><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ɫ
MH_CreateHook((void*)0x7AAD00, &HookEquNameColor, reinterpret_cast<void**>(&OldHookEquNameColor));
MH_EnableHook((void*)0x7AAD00);
#endif
2022-03-16 10:03:39 +08:00
2022-09-06 00:08:26 +08:00
#ifdef SENDPACKHOOK
//HOOK<4F><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MH_CreateHook((void*)0x1127D60, &NewSendPacksType, reinterpret_cast<void**>(&_OldSendPackType));
MH_EnableHook((void*)0x1127D60);
2023-04-14 14:56:01 +08:00
#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
2022-05-07 14:31:17 +08:00
#endif
2022-09-06 00:08:26 +08:00
2022-11-06 23:12:18 +08:00
#ifdef DRAWITEM
2022-09-06 00:08:26 +08:00
//HOOK Item<65><6D><EFBFBD><EFBFBD>
2022-11-29 20:38:55 +08:00
//MH_CreateHook((void*)0x7AA800, &newsub7AA800, reinterpret_cast<void**>(&sub7AA800));
//MH_EnableHook((void*)0x7AA800);
2022-11-06 23:12:18 +08:00
#endif
2022-09-06 00:08:26 +08:00
2022-11-06 23:12:18 +08:00
#ifdef GET_EXE_STR
//exe<78>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MH_CreateHook((void*)0x1220590, &Newsub1220590, reinterpret_cast<void**>(&sub1220590));
MH_EnableHook((void*)0x1220590);
#endif
2022-09-06 00:08:26 +08:00
2023-11-13 14:00:01 +08:00
2022-11-29 20:38:55 +08:00
MH_CreateHook((void*)0x11A8F60, &newsub11A8F60, reinterpret_cast<void**>(&sub11A8F60));
MH_EnableHook((void*)0x11A8F60);
2023-11-13 14:00:01 +08:00
FILE* file = fopen("ImagePacks2/!HUD_Yosin<69>ټ<EFBFBD>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);
//<2F><><EFBFBD>ƾ<EFBFBD><C6BE><EFBFBD><EFBFBD><EFBFBD>Hook
MH_CreateHook((void*)0x4B8430, &New4B8430, reinterpret_cast<void**>(&Old4B8430));
MH_EnableHook((void*)0x4B8430);
}
2022-09-06 00:08:26 +08:00
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
//MH_CreateHook((void*)0x48c690, &NewGetItemPos, reinterpret_cast<void**>(&GetItemPos));
//MH_EnableHook((void*)0x48c690);
//nut<75><74><EFBFBD>û<EFBFBD><C3BB>Ƽ<EFBFBD><C6BC>ܵĺ<DCB5><C4BA><EFBFBD>
//MH_CreateHook((void*)0x5DCDA0, &Newsub_5DCDA0, reinterpret_cast<void**>(&sub_5DCDA0));
//MH_EnableHook((void*)0x5DCDA0);
//<2F><><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>
//MH_CreateHook((void*)0x5A4BE0, &Newsub_5A4BE0, reinterpret_cast<void**>(&sub_5A4BE0));
//MH_EnableHook((void*)0x5A4BE0);
//img<6D><67><EFBFBD>Ƶĺ<C6B5><C4BA><EFBFBD>
//MH_CreateHook((void*)0x11A97E0, &Newsub_11A97E0, reinterpret_cast<void**>(&sub_11A97E0));
//MH_EnableHook((void*)0x11A97E0);
//<2F>󲿷<EFBFBD>IMG<4D><47><EFBFBD>ֵĵ<D6B5><C4B5>ú<EFBFBD><C3BA><EFBFBD>
//MH_CreateHook((void*)0x11B2390, &Newsub_11B2390, reinterpret_cast<void**>(&sub_11B2390));
//MH_EnableHook((void*)0x11B2390);
//ģ<><C4A3>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);
2023-11-13 14:00:01 +08:00
//HOOK PushString
MH_CreateHook((void*)0x1358A60, &LMySqPushString, reinterpret_cast<void**>(&LrealSqPushString));
MH_EnableHook((void*)0x1358A60);
2022-09-06 00:08:26 +08:00
2023-05-12 16:08:39 +08:00
//MH_CreateHook((void*)0x11816B0, &New11816B0, reinterpret_cast<void**>(&Old11816B0));
//MH_EnableHook((void*)0x11816B0);
2022-09-06 00:08:26 +08:00
2023-11-13 14:00:01 +08:00
//<2F><>ȡ<EFBFBD><C8A1>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
MH_CreateHook((void*)0x908510, &New908510, reinterpret_cast<void**>(&Old908510));
MH_EnableHook((void*)0x908510);
////<2F><>ȡ<EFBFBD><C8A1>ȴ
MH_CreateHook((void*)0x909020, &New909020, reinterpret_cast<void**>(&Old909020));
MH_EnableHook((void*)0x909020);
////<2F><>ȡ<EFBFBD><C8A1>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
//MH_CreateHook((void*)0x0908770, &New908770, reinterpret_cast<void**>(&Old908770));
//MH_EnableHook((void*)0x0908770);
////<2F><>ȡ<EFBFBD><C8A1>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
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);
2022-09-06 00:08:26 +08:00
2022-11-06 23:12:18 +08:00
// HOOK exe <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//MH_CreateHook((void*)0x135B2C0, &NewSQ_Compilebuffer, reinterpret_cast<void**>(&OldSQ_Compilebuffer));
//MH_EnableHook((void*)0x135B2C0);
2024-03-31 13:23:55 +08:00
//<2F>հ<EFBFBD>HOOK
//MH_CreateHook((void*)0x06FE1D0, &New6FE1D0, reinterpret_cast<void**>(&Old6FE1D0));
//MH_EnableHook((void*)0x06FE1D0);
2022-03-16 10:03:39 +08:00
return 0;
}