92 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
| #pragma once
 | |
| #include "dispatch.h"
 | |
| #include "Assembler.h"
 | |
| #include "l_squirrel.h"
 | |
| 
 | |
| #define MAIN_OFFSET(offset) ((void *)((0x8048000) + (offset)))
 | |
| #define SUBHOOK_INIT(func, addr)    \
 | |
| 	fn##func func = (fn##func)addr; \
 | |
| 	FuncHook h##func
 | |
| 
 | |
| #define SUBHOOK_SETUP(func) h##func.Hook((void **)&func, (void *)_##func)
 | |
| 
 | |
| #define INIT_HOOK(func, addr)                      \
 | |
| 	using Type_##func = decltype(hook_##func);     \
 | |
| 	Type_##func *old_##func = (Type_##func *)addr; \
 | |
| 	FuncHook mhook_##func
 | |
| 
 | |
| #define HOOK_SETUP(func) mhook_##func.Hook((void **)&old_##func, (void *)hook_##func)
 | |
| 
 | |
| class Controller
 | |
| {
 | |
| public:
 | |
| 	SINGLETON_DEFINE_S(Controller);
 | |
| 
 | |
| private:
 | |
| 	Controller();
 | |
| 	~Controller();
 | |
| 
 | |
| public:
 | |
| 	void init();
 | |
| 	void Jinit();
 | |
| 
 | |
| private:
 | |
| 	static int hook_IPacketDispatcher_ParamBase_dispatch_template(int a1, int a2, int a3);
 | |
| 	/**
 | |
| 	 * @brief hook修复镶嵌徽章
 | |
| 	 * @param pDispatcher_UseJewel
 | |
| 	 * @param pUser
 | |
| 	 * @param pBuf
 | |
| 	 * @return
 | |
| 	 */
 | |
| 	static int hook_UseJewel_dispatch_sig(void *pDispatcher_UseJewel, CUser *pUser, PacketBuf *pBuf);
 | |
| 
 | |
| 	// 使用蜜蜡
 | |
| 	static int hook_Dispatcher_ModItemAttr_dispatch_sig(Dispatcher_ModItemAttr *dis_mod, CUser *user, PacketBuf *pBuf);
 | |
| 
 | |
| 	/**
 | |
| 	 * @brief hook收包处理
 | |
| 	 * @param a1
 | |
| 	 * @param a2
 | |
| 	 * @param a3
 | |
| 	 * @param a4
 | |
| 	 * @param src
 | |
| 	 * @param a6
 | |
| 	 * @param a7
 | |
| 	 * @param a8
 | |
| 	 * @return
 | |
| 	 */
 | |
| 	static int hook_PacketDispatcher_doDispatch(PacketDispatcher *a1, CUser *a2, int a3, int packet_id, char *packet_src, int pecakt_len, int a7, int a8);
 | |
| 
 | |
| 	static int hook_LenDispatcher_New_Gmdebug_Command(void *a1, void *pUser, void *pBuf);
 | |
| 
 | |
| 	static int hook_DisPatcher_MoveMap_dispatch_sig(void *a1, CUser *pUser, PacketBuf *pBuf);
 | |
| 
 | |
| 	static int hook_Inter_LoadEtc_dispatch_sig(void *a1, CUser *pUser, char *a3);
 | |
| 
 | |
| 	static int hook_DisPatcher_ReturnToSelectCharacter_dispatch_sig(void *a1, CUser *pUser, char *a3);
 | |
| 
 | |
| 	static void hook_importCashShopItemList(const std::string *str);
 | |
| 
 | |
| 	static void hook_ProcessIPG_ResultOutput(CUser *user, int Goods_No, int item_id, int Cera_Type, InterfacePacketBuf *pbuf);
 | |
| 
 | |
| 	static int hook_Dispatcher_BuyCeraShopItem_dispatch_sig(void *a1, CUser *pUser, PacketBuf *pBuf);
 | |
| 
 | |
| 	static bool hook_Init(int a1, char **a2);
 | |
| 
 | |
| private:
 | |
| 	INIT_HOOK(IPacketDispatcher_ParamBase_dispatch_template, base::IPacketDispatcher::ParamBase::dispatch_template);
 | |
| 	INIT_HOOK(PacketDispatcher_doDispatch, base::PacketDispatcher::doDispatch);
 | |
| 	INIT_HOOK(Dispatcher_ModItemAttr_dispatch_sig, base::Dispatcher_ModItemAttr::dispatch_sig);
 | |
| 	INIT_HOOK(UseJewel_dispatch_sig, base::Dispatcher_UseJewel::dispatch_sig);
 | |
| 	INIT_HOOK(DisPatcher_MoveMap_dispatch_sig, base::DisPatcher_MoveMap::dispatch_sig);
 | |
| 	INIT_HOOK(Inter_LoadEtc_dispatch_sig, base::Inter_LoadEtc::dispatch_sig);
 | |
| 	INIT_HOOK(DisPatcher_ReturnToSelectCharacter_dispatch_sig, base::DisPatcher_ReturnToSelectCharacter::dispatch_sig);
 | |
| 	INIT_HOOK(Init, base::Init);
 | |
| 
 | |
| 	INIT_HOOK(LenDispatcher_New_Gmdebug_Command, 0x820BBDE);
 | |
| 
 | |
| private:
 | |
| 	CAssembler assembler;
 | |
| 	Assembler *Asm;
 | |
| }; |