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);
}
}
以上代码就完成了对技能的遍历,以后加上拖拽技能到快捷栏中,就可以使用技能了