追逐自己的梦想----------辅助制作第四课:将游戏人物数据进行测试
2015-01-07 15:31
731 查看
本节课中,我们要做的就是调试第一节课中分析的数据。
首先我们需要打开新建项目->win32控制台程序->静态库;添加一个静态库,然后在库中添加一个基类来保存数据基址,然后创建一个派生类来保存人物角色属性。
在派生类中添加数据偏移管理单元
具体代码如下:
以上代码就完成了对游戏数据的封装,然后在对话框中添加一起test按钮来测试数据 ,具体代码如下:
以上代码就完成了对所有数据的测试,还有就是测试要用到的工具是DEBUGVIEW,百度云盘下载地址:第四课的源码:调试获取到的人物数据及工具
首先我们需要打开新建项目->win32控制台程序->静态库;添加一个静态库,然后在库中添加一个基类来保存数据基址,然后创建一个派生类来保存人物角色属性。
在派生类中添加数据偏移管理单元
具体代码如下:
#include<Windows.h> class BaseData { public: BaseData(); ~BaseData(); DWORD GetBaseRoleAddr(); private: const DWORD BaseRoleAddr = 0x2F9D4D0; }; class RoleData :public BaseData { public: RoleData(); ~RoleData(); char *GetRoleName(); //获取人物名字 char *GetRoleFame(); //获取人物名声 int GetHp(); //获取HP int GetMp(); //获取内功 int GetAngry();//获取愤怒值 int GetMaxHp();//获取最大HP int GetMaxMp();//获取最大内功 int GetMaxAngry();//获取最大愤怒值 int GetExp(); //获取经验值 int GetMaxExp();//获取最大经验值 int GetHeart(); //获取心 int GetBody();//获取体 int GetAir();//获取气 int GetSoul();//获取魂 int GetAttack();//获取攻击力 int GetDefense();//获取防御力 int GetHit();//获取命中 int GetAvoid();//获取回避 private: DWORD NameOffset = 0x0;//名字偏移 DWORD fameOffset = 0x36; //名声偏移 DWORD HPOffset = 0x80;//hp偏移 DWORD MPOffset = 0x84; //内功偏移 DWORD AngryOffset = 0x88; //当前愤怒值偏移 DWORD MaxHpOffset = 0x8c; //最大HP DWORD MaxMpOffset = 0x90; //最大内功值 DWORD MaxAngryOffset = 0x94; //最大愤怒值 DWORD ExpOffset = 0x98;//当前经验值 DWORD MaxExpOffset = 0xa0; //最大经验值 DWORD HeartOffset = 0xb0; //心 DWORD BodyOffset = 0xb4; //体 DWORD AirOffset = 0xb8; //气 DWORD SoulOffset = 0xbc; //魂 DWORD AttackOffset = 0xc8; //攻击 DWORD DefenseOffset = 0xcc;//防御 DWORD HitOffset = 0xd0; //命中 DWORD AvoidOffset = 0xd4; //回避 };
#include"BaseGameData.h" BaseData::BaseData() { } BaseData::~BaseData() { } RoleData::RoleData(){ } RoleData::~RoleData(){ } DWORD BaseData::GetBaseRoleAddr(){ return BaseRoleAddr; } //获取人物名字 char* RoleData::GetRoleName(){ return (char*)(this->GetBaseRoleAddr() + NameOffset); } //获取人物名声 char *RoleData::GetRoleFame(){ return (char*)(this->GetBaseRoleAddr() + fameOffset); } //获取HP int RoleData::GetHp(){ return *(DWORD*)(this->GetBaseRoleAddr() + HPOffset); } //获取内功 int RoleData::GetMp(){ return *(DWORD*)(this->GetBaseRoleAddr() + MPOffset); } //获取愤怒值 int RoleData::GetAngry(){ return *(DWORD*)(this->GetBaseRoleAddr() + AngryOffset); } //获取最大HP int RoleData::GetMaxHp(){ return *(DWORD*)(this->GetBaseRoleAddr() + MaxHpOffset); } //获取最大内功 int RoleData::GetMaxMp(){ return *(DWORD*)(this->GetBaseRoleAddr() + MaxMpOffset); } //获取最大愤怒值 int RoleData::GetMaxAngry(){ return *(DWORD*)(this->GetBaseRoleAddr() + MaxAngryOffset); } //获取经验值 int RoleData::GetExp(){ return *(DWORD*)(this->GetBaseRoleAddr() + ExpOffset); } //获取最大经验值 int RoleData::GetMaxExp(){ return *(DWORD*)(this->GetBaseRoleAddr() + MaxExpOffset); } //获取心 int RoleData::GetHeart(){ return *(DWORD*)(this->GetBaseRoleAddr() + HeartOffset); } //获取体 int RoleData::GetBody(){ return *(DWORD*)(this->GetBaseRoleAddr() + BodyOffset); } //获取气 int RoleData::GetAir(){ return *(DWORD*)(this->GetBaseRoleAddr() + AirOffset); } //获取魂 int RoleData::GetSoul(){ return *(DWORD*)(this->GetBaseRoleAddr() + SoulOffset); } //获取攻击力 int RoleData::GetAttack(){ return *(DWORD*)(this->GetBaseRoleAddr() + AttackOffset); } //获取防御力 int RoleData::GetDefense(){ return *(DWORD*)(this->GetBaseRoleAddr() + DefenseOffset); } //获取命中 int RoleData::GetHit(){ return *(DWORD*)(this->GetBaseRoleAddr() + HitOffset); } //获取回避 int RoleData::GetAvoid(){ return *(DWORD*)(this->GetBaseRoleAddr() + AvoidOffset); }
以上代码就完成了对游戏数据的封装,然后在对话框中添加一起test按钮来测试数据 ,具体代码如下:
void CMainDialog::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 pRoleData = new RoleData(); TRACE("Game:人物名称:%s\r\n", BaseRoleAddr); TRACE("Game:人物名称:%s\r\n", pRoleData->GetRoleName()); TRACE("Game:人物名声:%s\r\n", pRoleData->GetRoleFame()); TRACE("Game:HP/MAXHP = %d / %d\r\n", pRoleData->GetHp(), pRoleData->GetMaxHp()); TRACE("Game:MP/MAXMP = %d / %d\r\n", pRoleData->GetMp(), pRoleData->GetMp()); TRACE("Game:愤怒值:%f \r\n", pRoleData->GetAngry()/pRoleData->GetMaxAngry()); TRACE("Game:经验值:%f \r\n", pRoleData->GetExp() / pRoleData->GetMaxExp()); TRACE("Game:心:%d\r\n", pRoleData->GetHeart()); TRACE("Game:体:%d\r\n", pRoleData->GetBody()); TRACE("Game:气:%d\r\n", pRoleData->GetAir()); TRACE("Game:魂:%d\r\n", pRoleData->GetSoul()); TRACE("Game:攻击:%d\r\n", pRoleData->GetAttack()); TRACE("Game:防御:%d\r\n", pRoleData->GetDefense()); TRACE("Game:命中:%d\r\n", pRoleData->GetHit()); TRACE("Game:闪避:%d\r\n", pRoleData->GetAvoid()); }
以上代码就完成了对所有数据的测试,还有就是测试要用到的工具是DEBUGVIEW,百度云盘下载地址:第四课的源码:调试获取到的人物数据及工具
相关文章推荐
- 追逐自己的梦想----------辅助制作第一课:人物属性分析
- 追逐自己的梦想----------辅助制作第三课:注入辅助窗口到游戏进程中
- 追逐自己的梦想----------辅助制作第五课:分析并测试物品使用CALL
- 追逐自己的梦想----------辅助制作第八课:利用SetWindowsHook将进程注入游戏主线程来解决资源冲突的问题
- 追逐自己的梦想----------辅助制作第二课:人物气功加点分析
- 追逐自己的梦想----------辅助制作第二十七课:身上装备更换的分析与实现
- 追逐自己的梦想----------辅助制作第二十二课:分析修炼条件的判断
- 追逐自己的梦想----------辅助制作第十一课:选怪功能分析
- 追逐自己的梦想----------辅助制作第十五课:实现动态更新基址
- 追逐自己的梦想----------辅助制作第二十九课:分析打开NPC后功能打开
- 追逐自己的梦想----------辅助制作第十九课:快捷栏使用物品或者技能
- 追逐自己的梦想----------辅助制作第十六课:分析技能列表
- 追逐自己的梦想----------辅助制作第十七课:实现技能列表的遍历及判断技能是否可用
- 追逐自己的梦想----------辅助制作第二十六课:存仓库call实现
- 追逐自己的梦想----------辅助制作第三十课:NPC对话更正以及封装查找NPC对象函数
- 追逐自己的梦想----------辅助制作第二十三课:挂机选项卡的实现
- 追逐自己的梦想----------辅助制作第七课:封装调试函数OutputDebugString(),使其可调试任意参数个数
- 追逐自己的梦想----------辅助制作第十三课:快速查找基址
- 追逐自己的梦想----------辅助制作第二十课:完善自动技能打怪
- 追逐自己的梦想----------辅助制作第十四课:给出自动打怪和技能打怪的源码