DNF_DLL/test/hook.cpp

2414 lines
66 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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

#include "pch.h"
#include "hook.h"
extern int LbState;
extern int RbState;
extern int MbState;
static int OtherPlayerInfoType = 0;
static bool HookOtherPlayerInfo = false;
static int OtherPlayerInfoImg = 0;
//×¢²á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"(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) {}
)";
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;
std::string& NReplaceAll(std::string& str, const std::string& src, const std::string& dst) {
std::string::size_type pos(0);
while (true) {
if ((pos = str.find(src)) != std::string::npos) {
str.replace(pos, src.length(), dst);
}
else {
break;
}
}
return str;
}
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);
}
//drawmain drawMainCustomUI_ATFighter(obj)
//if (wcsstr(s, L"drawMainCustomUI_")) {
// return LrealSqPushString(v, L"L_drawMainCustomUI_All", l);
//}
//compilestring
//wprintf(L"Function:%s \n",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;
//if (GameStr.find("¿ì½Ý¼ü") != std::string::npos) {
// std::cout << 121231 << std::endl;
//}
//ËûÈËÐÅÏ¢ÃèÊö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 (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("ƒAœIº®„ìÕÂ") != 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("ƒAœIº®»ØÊÕ") != std::string::npos)
{
if (GameStr.find("ƒAœIº®»ØÊÕ¹¦ÄÜ") != 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("ƒAœIº®»ØÊÕÑbä") != std::string::npos)Type = 1;
else if (GameStr.find("ƒAœIº®»ØÊÕÏûºÄÆ·") != std::string::npos)Type = 2;
else if (GameStr.find("ƒAœIº®»ØÊÕ²ÄÁÏ") != std::string::npos)Type = 3;
else if (GameStr.find("ƒAœIº®»ØÊÕ¸±Âš˜I²ÄÁÏ") != std::string::npos)Type = 5;
else if (GameStr.find("ƒAœIº®»ØÊÕÈ΄ղÄÁÏ") != std::string::npos)Type = 4;
else if (GameStr.find("ƒAœIº®»ØÊÕ•rÑb") != std::string::npos)Type = 6;
else if (GameStr.find("ƒAœIº®»ØÊÕ»ÕÕÂ") != std::string::npos)Type = 7;
else if (GameStr.find("ƒAœIº®»ØÊÕŒ™ÎÎï") != std::string::npos)Type = 8;
else if (GameStr.find("ƒAœIº®»ØÊÕŒ™ÎïÑbä") != std::string::npos)Type = 9;
else if (GameStr.find("ƒAœIº®»ØÊÕŒ™ÎïÏûºÄÆ·") != 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 == 6) {
//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);
std::string B = OutPutText;
//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>
//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) {
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];
str = str.substr(str.find("[") + 1, str.length() - 2);
std::vector<std::string> Data;
DNFTOOL::Split(str, Data, ", ");
size_t Ds = Data.size();
char* nutstr = new char[Ds + 1];
for (size_t s = 0; s < Ds; s++)
{
nutstr[s] = char(atoi(Data[s].c_str()));
}
nutstr[Ds] = '\0';
int skey[] = Skey;//¶¨Òå½âÃÜÊý×é
Cutecode(nutstr, skey);//½âÃÜ
//std::cout << nutstr << std::endl;
wchar_t* sfile = DNFTOOL::charTowchar_t((char*)filename.c_str());
wchar_t* ss = DNFTOOL::charTowchar_t((char*)nutstr);
//wprintf(L"Function:%s \n", sfile);
//std::cout << i << std::endl;
uint32_t v = GetSqVm();
squirrel::SQdofileBuffer(v, sfile, ss);
}
BaseData.clear();
jiaoben = false;
}
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);
}
#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;
}
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;
}
#include "inlinehook.h"
int hook::RegisterHook()
{
//Íæ¼Ò²Ëµ¥Ñ¡ÏîHOOK Óлص÷
inlinehook SSS(0x001004B52, (int)&PlayerEach2);
SSS.Motify_address();
//ÐÞ¸´¹öÂÖ
inlinehook MMM(0x011BDE05, (int)&MouseWheelUp);
MMM.Motify_address();
//¸öÈËÐÅÏ¢
//inlinehook WWW(0xEDE6C5, (int)&PlayerInfo);
//WWW.Motify_address();
////¸öÈËÐÅÏ¢
//inlinehook EEE(0xEDE6DA, (int)&PlayerInfo2);
//EEE.Motify_address();
MH_Initialize();
//N¼ü´óµØÍ¼
MH_CreateHook((void*)0x1030C30, &New1030C30, reinterpret_cast<void**>(&Old1030C30));
MH_EnableHook((void*)0x1030C30);
//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);
return 0;
}