自学内容网 自学内容网

26.第二阶段x86游戏实战2-C++遍历背包物品

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:25.第二阶段x86游戏实战2-背包属性补充

到这就找到了背包大小、物品名字、物品数量,然后本次就把这些东西全部都使用C++遍历出来

游戏更新了现在的偏移是0x59F490,公式还是原本的公式

[[0x15*4+[[0x83F458]+0x181C4]]+0x14]+0x58是数量

[[0x54+[[0xEDF490]+0x181C4]]+0x2C]+0x54是物品等级

[[0x54+[[0xEDF490]+0x181C4]]+0x2C]+0x20是物品使用等级

[[0x54+[[0xEDF490]+0x181C4]]+0x2C]+0x18是物品名字

效果图

新加按钮

结构.h文件的修改

#pragma once
#include <string>
using namespace std;
struct R_人物属性
{
DWORD 状态;

void 初始化();
};

struct R_背包属性 {
DWORD dwObject;
string pName;
BYTE p数量;
string 简介;
DWORD p使用等级;
};

struct R_背包类
{
BYTE 背包数量 = 0;
};

struct R_遍历背包 {
R_背包类 背包[0x3];
R_背包属性 列表[0x100];
DWORD d数量 = 0;
void 遍历背包();
};

struct 坐标 {
FLOAT x;
FLOAT y;
};


结构.cpp文件的修改:新加 遍历背包函数

#include "pch.h"
#include "结构.h"

void R_人物属性::初始化()
{
__try {
/**
GetModuleHandleA("Game.exe")返回Game.exe模块的模块基址
*/
DWORD 状态基址 = (DWORD)GetModuleHandleA("Game.exe") + 0x59EF6C;
/**
(DWORD*)状态基址 的意思是把 状态基址 的值当成内存地址
*(DWORD*)状态基址 意思把内存地址里的值取出来
*/
DWORD 状态偏移 = *(DWORD*)状态基址 + 0x60;
DWORD 状态偏移1 = *(DWORD*)状态偏移 + 0x14C;
状态 = *(DWORD*)状态偏移1;
}
__except (1) {
Call_输出调式信息("读物人物信息异常\r\n");
}
}

void R_遍历背包::遍历背包()
{
try {
DWORD s = 0;
//DWORD JZ = (DWORD)GetModuleHandleA("Game.exe") + 0x59F458;
DWORD JZ = (DWORD)GetModuleHandleA("Game.exe") + 0x59F490;
DWORD JZpy = ReadDword(ReadDword(JZ) + 0x181C4);
背包[0].背包数量 = ReadDword(ReadDword(JZ) + 0x181C4 + 0x14); // 道具背包数量
背包[1].背包数量 = ReadDword(ReadDword(JZ) + 0x181C4 + 0x15); // 材料背包数量
背包[2].背包数量 = ReadDword(ReadDword(JZ) + 0x181C4 + 0x16);// 任务背包数量
for (int i = 0; i < 3; i++)
{
CString str;
str.Format(L"数量2:%d %d %d", 背包[0].背包数量, 背包[1].背包数量, 背包[2].背包数量);
//AfxMessageBox(str);
for (int  j = 0; j < 背包[i].背包数量; j++)
{
if (i == 0) {
s = j;
}
if (i == 1)
s = j + 背包[0].背包数量;
if (i == 2)
s = j + 背包[0].背包数量 + 背包[1].背包数量;
列表[s].dwObject = ReadDword(JZpy + j * 4);
if (列表[s].dwObject != 0) {
DWORD 值 = ReadDword(列表[s].dwObject + 0x2C);
列表[s].pName = ReadStr((char*)ReadDword(值 + 0x18));
列表[s].p使用等级 = ReadDword(值 + 0x20);
列表[s].简介 = ReadStr((char*)ReadDword(值 + 0x1c));;
列表[s].p数量 = (BYTE)ReadByte(ReadDword(列表[s].dwObject + 0x14) + 0x58);
}
else
{

列表[s].pName = "";
列表[s].p数量 = 0;
列表[s].简介 = "";
列表[s].p使用等级 = 0;
}

d数量++;

}
JZpy = JZpy + 0x80;// 扩展背包大小,写死0x80,扩展背包大小0x80/0x47=十进制的32
}
}
catch (...)
{
Call_输出调式信息("天龙怀旧   返回背包信息异常\r\n");
}

}

CM.cpp文件的修改:新加 OnBnClickedButton3函数(遍历背包按钮的点击事件处理函数)

// CM.cpp: 实现文件
//

#include "pch.h"
#include "tl.h"
#include "CM.h"
#include "afxdialogex.h"


// CM 对话框

IMPLEMENT_DYNAMIC(CM, CDialogEx)

CM::CM(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG1, pParent)
, edi_x(_T(""))
{

}

CM::~CM()
{
}

void CM::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, edi_x);
DDX_Text(pDX, IDC_EDIT2, edi_y);
}


BEGIN_MESSAGE_MAP(CM, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON1, &CM::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CM::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CM::OnBnClickedButton3)
END_MESSAGE_MAP()


// CM 消息处理程序


void CM::OnBnClickedButton1()
{
R_人物属性 a;
a.初始化();
Call_输出调式信息("人物信息:人物状态%d",a.状态);
}


void CM::OnBnClickedButton2()
{
UpdateData(TRUE);
CString str1 = edi_x;
CString str2 = edi_y;
// strtol((const char*)CW2A(str1.GetBuffer(0)), NULL, 10);把字符串转成int数字类型
int x = strtol((const char*)CW2A(str1.GetBuffer(0)), NULL, 10);
int y = strtol((const char*)CW2A(str2.GetBuffer(0)), NULL, 10);
Call_xunlu(x, y);
}


void CM::OnBnClickedButton3()
{
R_遍历背包 a;
a.遍历背包();// 遍历背包
CString str;
str.Format(L"a数量 %d", a.d数量);
AfxMessageBox(str);

for (int i = 0; i < a.d数量; i++)
{
Call_输出调式信息("tl怀旧   背包信息 dwObject -------------%X----------------\r\n", a.列表[i].dwObject);
Call_输出调式信息("tl怀旧   背包信息 名字:%s\r\n", a.列表[i].pName.c_str());
Call_输出调式信息("tl怀旧   背包信息 使用等级:%d\r\n", a.列表[i].p使用等级);
Call_输出调式信息("tl怀旧   背包信息 简介:%s\r\n", a.列表[i].简介.c_str());
Call_输出调式信息("tl怀旧   背包信息 数量:%d\r\n", a.列表[i].p数量);


}

}

上方的代码不全,只有手写的代码

完整代码:

链接:https://pan.baidu.com/s/1W-JpUcGOWbSJmMdmtMzYZg?pwd=q9n5

提取码:q9n5

复制这段内容后打开百度网盘手机App,操作更方便哦


img


原文地址:https://blog.csdn.net/qq_36301061/article/details/142833515

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!