您的位置:首页 > 编程语言 > C语言/C++

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

2015-03-15 10:46 405 查看
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);
}
}


以上代码就完成了对技能的遍历,以后加上拖拽技能到快捷栏中,就可以使用技能了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++
相关文章推荐