追逐自己的梦想----------辅助制作第十七课:实现技能列表的遍历及判断技能是否可用

typedef struct TSkillObj{
	DWORD ndBaseObj;//返回对象基址
	DWORD ndType; //分类  1B技能书分类  1C 才是使用技能分类
	DWORD ndIndexForSkill; //技能列表里面的下表分类
	char* szpName;
	DWORD ndIndexForAll; //+0c 所有对象ID
	BOOL IsUseable;//+1f6 

}_TSkillObj;


#define Skill_ListSize 32
typedef struct TSkillList
{
	TSkillObj t_list[Skill_ListSize];
	TSkillList* GetData();
	void DbgPrintMsg();
}_TSkillList;




TSkillList* TSkillList::GetData(){

	DWORD *ndpSkillList = nullptr;
	int j = 0;
	memset(this, 0, sizeof(TSkillList));
	__try{
		ndpSkillList = (DWORD*)(*(DWORD*)Base_SkillAddr + 0x410);
		for (int i = 0; i < Skill_ListSize; i++){
			if (ndpSkillList[i] == NULL){
				continue;
			}
			if (*(DWORD*)(ndpSkillList[i] + 0x08) == 0x1b){
				continue;
			}

			t_list[j].ndBaseObj = ndpSkillList[i];
			t_list[j].ndIndexForSkill = i;
			t_list[j].ndType = *(DWORD*)(ndpSkillList[i] + 0x08);
			t_list[j].ndIndexForAll = *(DWORD*)(ndpSkillList[i] + 0x0c);
			t_list[j].szpName = (char*)(ndpSkillList[i] + 0x5c);
			t_list[j].IsUseable = *(WORD*)(ndpSkillList[i] + 0x1f6);

			j++;
		}
	}
	__except (1){
		DbgPrintf_Mine("TSkillList* TSkillList::GetData()出现异常");
	}
	return this;
}
void TSkillList::DbgPrintMsg(){
	GetData();

	for (int i = 0; i < Skill_ListSize; i++){
		if (t_list[i].ndType == NULL){
			continue;
		}

		DbgPrintf_Mine("%s %d %2X %4X 是否可用(%d)\r\n", t_list[i].szpName,
			t_list[i].ndIndexForSkill, t_list[i].ndType,
			t_list[i].ndIndexForAll,
			t_list[i].IsUseable);
	}
}

以上代码就完成了对技能的遍历,以后加上拖拽技能到快捷栏中,就可以使用技能了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值