追逐自己的梦想----------辅助制作第十二课:选怪功能封装

这篇博客主要介绍了如何在MFC辅助程序中封装选怪功能,包括定义PLAYER结构体,创建SelectFreak类,提供GetSel方法用于根据下标选择怪物,以及PrintSel调试函数。此外,还提到了GetIsSelOffset方法用于获取是否选中的偏移值,源码可在GitHub上下载。
摘要由CSDN通过智能技术生成

本节课中,我们要对选怪功能进行封装,

具体接口如下:



typedef struct PlAYER{
DWORD IsSel;
}_PLAYER;




class SelectFreak :public BaseData{
public:
SelectFreak();
~SelectFreak();


BOOL GetSel(DWORD index); //根据下标索引选中怪物


void PrintSel();//调试函数
private:
PlAYER *pPlayer;
DWORD GetIsSelOffset();//获取是否选中的偏移
DWORD IsSelOffset = 0x14b8;
};



函数实现如下:

//选怪类构造函数
SelectFreak::SelectFreak(){
	memset(pPlayer, 0, sizeof(PlAYER));
	pPlayer->IsSel = *(DWORD*)(*(DWORD*)this->GetBasePlayerAddr() + GetIsSelOffset());
}
SelectFreak::~SelectFreak(){


}

//获取是否选中的偏移
DWORD SelectFreak::GetIsSelOffset(){
	return IsSelOffset;

}

void SelectFreak::PrintSel(){
	DbgPrint_String("选中的ID为:%X", pPlayer->IsSel);
}


//根据怪物ID选中怪物
BOOL SelectFreak::GetSel(DWORD indexID){

	//mov edi, [0x31e563c]
	//	MOV EAX, DWORD PTR DS : [EDI + 0x14B8]
	//	MOV ECX, DWORD PTR DS : [EAX * 4 + 0x31E5640]
	//	MOV EDX, DWORD PTR DS : [ECX]
	//	MOV EAX, DWORD PTR DS : [EDX + 0x4]
	//	PUSH 0x0
	//	PUSH 0x0
	//	PUSH 0x450
	//	CALL EAX

	DWORD BasePlayAddr = GetBasePlayerAddr();
	DWORD IsSelOffset = GetIsSelOffset();
	DWORD BaseAllAddr = GetBaseAllAddr();
	DWORD ndObj;

	try{
		__asm{
			mov EDI, [BasePlayAddr]
				MOV EAX, DWORD PTR DS : [EDI + IsSelOffset]
				cmp eax, 0xffff
				jz nextlable
				MOV ECX, DWORD PTR DS : [EAX * 4 + BaseAllAddr]
				MOV EDX, DWORD PTR DS : [ECX]
				MOV EAX, DWORD PTR DS : [EDX + 0x4]
				PUSH 0x0
				PUSH 0x0
				PUSH 0x450
				CALL EAX
		}
		nextlable:
		ndObj = *(DWORD*)GetBasePlayerAddr();
		*(DWORD*)(ndObj + IsSelOffset) = indexID;
		//	MOV ECX, DWORD PTR DS : [EAX * 4 + 0x31E5640]
		//	MOV EDX, DWORD PTR DS : [ECX]
		//	MOV EAX, DWORD PTR DS : [EDX + 0x4]
		//	PUSH 0x0
		//	PUSH 0x1
		//	PUSH 0x450
		//	CALL EAX
		__asm{

			mov eax, indexID
			mov ecx, DWORD PTR DS : [eax * 4 + BaseAllAddr]
			mov edx, DWORD PTR DS : [ecx]
			mov eax, DWORD PTR DS : [edx + 4]
			push 0
			push 1 //显示选中状态
			push 0x450
			call eax
		}
	}
	catch (...){
		DbgPrint_String("出现异常");
		return FALSE;
	}


	return TRUE;
}
以上就完成了对选怪功能的封装,下节课我们将准备计算玩家和人物之间的距离,为实现自动打怪做准备。

Gitbub源码下载地址:点击下载



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值