前言:制作该程序只是为了给学习C++的朋友进行学习参考使用,不可将其作为其它用途。且该教程只能用于单机游戏,不可用于在线网络游戏,影响竞技游戏的公平。
获取修改器成品点击此处,可将该成品与你制作完成后的修改器进行对比,查看其功能是否已经全部实现。
修改器介绍:
鬼谷八荒逆天改命词条修改器是一款专为“鬼谷八荒”游戏打造的修改器。它可以为玩家自定义修改游戏中的最佳词条、无限灵力 、无限念力、快速移动、一击必杀等数据。适用于当前最新版本,玩家可以通过修改这些功能从而降低游戏的难度,同时可以让玩家享受游戏带来的的乐趣。修改器操作非常简单,上手也很容易,对于喜欢玩鬼谷八荒这款游戏的玩家非常实用。

C++制作修改器教程:
1、利用C++制作该程序,我们需搭建Qt+VS环境,搭建环境可百度。
2、搭建好环境后启动软件,先在模板下创建工程“QT5 Projects”,工程名称和工程路径可自定义,但不要出现中文字符;如图所示:

3、Base class选择QWidget。

4、创建完这个工程后,我们对这个工程进行一个简单的介绍。
一、其实C++和main函数比较相像;

然后再来到窗口类;
    头文件,如图所示:

然后是CPP文件,如图所示:

再看看一些“奇怪”的文件,如图所示:
    下面这两个是Qt的moc文件,是编译时自动生成和更新的,所以不用管

下面第一个是资源文件的代码CPP,自动生成的,不用管
    第二个是UI文件的头文件,自动生成的,不用管

资源文件,用来加载图片等一些资源,这里没用到,不用管

这个就是上面提到的UI文件,相当于可视化界面设计器,用来设计界面的。

双击点开XXXXX.UI文件

二、接下来开始界面设计
    在控件盒子中左键选中一个文件标签,一个文字输入框,一个按钮,然后往界面设计器里面拖。文件标签在左,文字输入框在中,一个按钮在右。

ctrl+鼠标左键点选三个控件,然后在任意一个控件上右键,选择布局->水平布局

开始界面布局

右键大窗口,选择布局->垂直布局

然后鼠标放到界面设计器的边框边缘,按住左键拖动到合适大小

在对象查看器里左键点选大窗口,然后属性窗口往下拖,在WindowTitle里修改窗口标题

双击控件修改控件的文本

记录控件的对应关系,把金钱技能和属性对应的输入框和按钮记录下来

在这里我金钱的输入框是lineEdit,金钱修改按钮是pushButton,技能点则分别是lineEdit_2和pushButton_2,属性点则是lineEdit_3和pushButton_3

然后点保存,注意一定要保存

三:实现前的知识普及
1:游戏内存修改的知识普及
一般游戏数据有一个地址值,但是这个地址值是动态的,每次游戏重启都会发生变化,所以我们要找到不变的一级基址,和两个不变的偏移量,来得到最新的游戏数据地址。
2:Qt信号槽知识普及
①Qt信号
信号是指一种通知,形象地比喻下:比如你带了许多巧克力去公司,然后在群里告诉大家,“我带了很多巧克力,要的来我工位拿”,这里公司群就是你的应用程序,群员就是程序里的实例化对象,你说的话这就是一种信号;可能有些人会无视,有些人根本没看见,有些人会来要,有些人会转告其他人,你只负责发出一个通知,你不关心别人看到你的通知会作何反应。
② Qt槽函数
槽指的是一种行为函数,定义了收到信号通知后,应该做出何种反应,上面巧克力的例子,无视,转告和要巧克力,都是一种对于信号通知的响应行为。
③ Qt的connect函数
就是对信号和槽进行关联,A发的信号通知B做出某种响应行为。
④ Qt的QTimer
定时器,按照你设置的时间间隔,不间断发出timeout()信号通知。
⑤ QMessageBox::information()
显示一个提示窗口
⑥ ui控件的指针怎么找
UI控件的指针和objectname同名,而objectname就是在界面设计器点选对应控件,属性里第一个

使用的时候用ui.objectname或者ui->objectname,用哪种取决于h文件里的ui变量是对象还是指针。这里就是ui.objectname。

四:基址和偏移量查找
①现在我们要用到一个软件,名字叫cheat engine,我的是6.6中文版。游戏以骑马与砍杀为例,首先修改金钱。

②把金钱数据输入ce,点击新的扫描

③想办法改变金钱数,输入CE,点击再次扫描,不断重复这条,直到数据只有一个
(注意:有可能会遇到一直有2个的情况,这样的情况试着改下数据就行了,哪个生效就是哪个)

④这里得到的就是一个游戏数据内存,可以改游戏数据值,但他是动态的,游戏重启就失效了,我们需要找的是基址。

⑤鼠标右键这个游戏数据地址,查找什么改变了这个值。

⑥然后出现这个界面,一开始是没有数据的,需要改变下游戏数据(这里是金钱数)

⑦双击这条数据,这里的5D0就是第一个偏移量,4B4C1024就是下一个要查找的地址。

⑧开启一个新的扫描

⑨选择需要的的地址查找是什么访问了这个地址,有时候有很多个,一般是比较特殊的那个(就是其他地址开头都是一样的,就他不一样),或者一个个看,有数据的就是我们需要的那个地址(注意无需改变游戏数据就有数据)

⑩随便双击一个mov指令数据,这里的140EC就是第二个偏移值,48D2E010就是下一个要查找的地址

①①用新拿到的推荐地址重复第⑧步,查找的绿色地址就是一级基址了

①②开始效验这个基址

①③ 修改这个地址的数值,如果钱发生变化的话就找对了
同理,用这个方法查找技能点

找出来的一级基址是009D5E2C,偏移是5D0 2BC,发现没有,一级基址和第二次偏移是一样的,所以之后查找,找一次偏移就可以了。
五:代码实现部分,教程以注释展现

#ifndef GAMEEDITOR_H
#define GAMEEDITOR_H#include <QtWidgets/QWidget>
#include "ui_gameeditor.h"
//读写游戏内存所必须的头文件
#include <windows.h>class QTimer;
class GameEditor : public QWidget
{Q_OBJECTpublic:GameEditor(QWidget *parent = 0);~GameEditor();//slots就是表示槽函数
protected slots:void connectGame();void updateGameMoney();void updateGamePerks();private:Ui::GameEditorClass ui;//计时器指针,见5-2-4QTimer* timer;//金钱地址DWORD moueyAdress;//技能点地址DWORD perksAdress;//进程PIDDWORD pid;HWND hwnd;//进程句柄HANDLE handle;
};#endif // GAMEEDITOR_H#include "gameeditor.h"
//定时器头文件
#include <QTimer>
//提示框头文件
#include <QMessageBox>GameEditor::GameEditor(QWidget *parent)
: QWidget(parent)
{ui.setupUi(this);pid = 0;hwnd = 0;handle = 0;//金钱一级基址moueyAdress = 0x009D5E2C;//技能点一级基址perksAdress = 0x009D5E2C;//创建一个定时器,见5-2-4timer = new QTimer;//设置时间间隔为1000毫秒timer->setInterval(1000);//timeout为计时器内置信号,时间一到自动发送//connect为关联信号槽,详细见前面的知识普及内容//connect(信号发送者指针,SIGNAL(信号), this, SLOT(槽实现函数));connect(timer, SIGNAL(timeout()), this, SLOT(connectGame()));//clicked为按钮内置信号,点击自动发送//还记得吗,ui.pushButton是金钱修改按钮,ui.pushButton_2是技能点修改按钮connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(updateGameMoney()));connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(updateGamePerks()));ui.label_4->setText(QString::fromLocal8Bit("正在等待游戏程序...."));//计时器开始计时timer->start();
}GameEditor::~GameEditor()
{}void GameEditor::connectGame()
{//查找窗口并返回窗口句柄hwnd = FindWindow(0, L"Mount&Blade Warband");if (!hwnd){return;}//通过窗口句柄获取pidGetWindowThreadProcessId(hwnd, &pid);if (!pid){return;}//通过pid打开一个进程并获取进程句柄handle = OpenProcess(PROCESS_ALL_ACCESS, false, pid);if (!handle){return;}//通过金钱一级基址读取里面的数据DWORD newMoneyAdress = 0;ReadProcessMemory(handle, (LPVOID)moueyAdress, &newMoneyAdress, sizeof(newMoneyAdress), 0);//读取不到说明你开了游戏,但是没有开始if (moueyAdress <= 0){return;}ui.label_4->setText(QString::fromLocal8Bit("游戏程序连接成功!"));//停止计时器timer->stop();//金钱一级基址里的值+第二个偏移量=金钱二级基址moueyAdress = newMoneyAdress;moueyAdress += 0x140EC;//通过金钱二级基址读取里面的数据ReadProcessMemory(handle, (LPVOID)moueyAdress, &newMoneyAdress, sizeof(newMoneyAdress), 0);//金钱二级基址里的值+第一个偏移量=游戏数据地址(动态),游戏数据地址里的值就是游戏数据moueyAdress = newMoneyAdress;moueyAdress += 0x5D0;//同理通过技能点一级基址和偏移量获取游戏数据地址DWORD newPerksAdress = 0;ReadProcessMemory(handle, (LPVOID)perksAdress, &newPerksAdress, sizeof(newPerksAdress), 0);perksAdress = newPerksAdress;perksAdress += 0x140EC;ReadProcessMemory(handle, (LPVOID)perksAdress, &newPerksAdress, sizeof(newPerksAdress), 0);perksAdress = newPerksAdress;perksAdress += 0x2BC;
}//金钱的修改按钮被点击
void GameEditor::updateGameMoney()
{//还记得吗,ui.lineEdit就是金钱的文本输入框,text()表示获取输入框的文本,toInt()表示转化为int数据DWORD money = ui.lineEdit->text().toInt();//修改游戏数据地址里的值DWORD pref=WriteProcessMemory(handle, (LPVOID)moueyAdress, &money, sizeof(money), 0);//QString是Qt里的字符串QString informationStr;if (pref){informationStr = QString::fromLocal8Bit("修改成功");}else{informationStr = QString::fromLocal8Bit("修改失败");}//信息提示框,第一个参数是父窗口,填写this或者0都可以,第二个参数是标题,第三个参数是提示内容QMessageBox::information(this, QString::fromLocal8Bit("提示"), informationStr);
}//技能点的修改按钮被点击
void GameEditor::updateGamePerks()
{DWORD perks = ui.lineEdit_2->text().toInt();DWORD pref = WriteProcessMemory(handle, (LPVOID)perksAdress, &perks, sizeof(perks), 0);QString informationStr;if (pref){informationStr = QString::fromLocal8Bit("修改成功");}else{informationStr = QString::fromLocal8Bit("修改失败");}//信息提示框,第一个参数是父窗口,填写this或者0都可以,第二个参数是标题,第三个参数是提示内容QMessageBox::information(this, QString::fromLocal8Bit("提示"), informationStr);
}

鬼谷八荒逆天改命词条通过C++代码制作相关推荐

  1. 鬼谷八荒逆天改命修改教程(3月亲测有效)

    很简单,小白也能看懂. 教程地址:https://go.ysboke.cn/archives/1024

  2. 鬼谷八荒功法词条修改器

    鬼谷八荒功法词条修改器是一款专为"鬼谷八荒"游戏打造的修改器.它可以为玩家自定义修改游戏中的最佳词条.无限灵力 .无限念力.快速移动.一击必杀等数据.适用于当前最新版本,玩家可以通 ...

  3. 鬼谷八荒存档合集(大全)

    鬼谷八荒是一款国风的开放世界的沙盒修仙游戏,游戏特有硬核的修仙模式,结合了修仙体系与山海经文化背景,让游戏一度登顶steam的畅销榜,游戏加入了山海经超过180种传奇妖兽,玩家可以在游戏中通过故事或触 ...

  4. 鬼谷八荒流派收集(4)核弹指

    贴吧里废话很多,很多小白只是为了看怎么实操的,所以我整理了各大顶级流派的简略版:传送门 1.普通过图: 先天气运:双圣鬼谷(最强开局,都加攻击力) 逆天改命:水力四射+武法入门.武法进阶.武法精通.+ ...

  5. 鬼谷八荒流派收集(2)流水剑

    贴吧里废话很多,很多小白只是为了看怎么实操的,所以我整理了各大顶级流派的精简版:传送门 后期比风剑爆发更高. 两种流水剑系分支: 其一分支名为万神流水剑,顾明思义,使用神通万神剑,该分支特点是高爆发. ...

  6. 鬼谷八荒流派收集(1)流血风剑

    贴吧里废话很多,很多小白只是为了看怎么实操的,所以我整理了各大顶级流派的简略版:传送门 流血风剑技能选择: 武技 1.增加流血伤害 2.增加流血层数 3.武技冷却时间 4.概率流血 5.流血持续时间 ...

  7. 逆天改命,机械飞升:渐冻症科学家拒绝等死,将自己改造成了「半机械人」...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 作为人类的 Scott-Morgan 已经死去,未来的 Scott-M ...

  8. 哪吒之魔童降世 - 逆天改命,若命运不公,就和它斗到底!

    哪吒之魔童降世 昨晚去看了电影<哪吒之魔童降世>,简称 <哪吒>,讲述了哪吒虽"生而为魔"却"逆天而行斗到底"的成长经历的故事. 看完电 ...

  9. 腾讯回应两块八卖《鬼谷八荒》:已下架并退款;iMac Pro 售完即停产;iCloud 识别姓氏闹乌龙 | 极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 丁恩华 出品 | CSDN(ID:CSDNnews ...

  10. 鬼谷八荒仙姿男捏脸数据

    鬼谷八荒是一款国产的修仙大作,一经上线就获得无数玩家的好评,国风的画面风格,水墨画的经典元素,以及超多玩法特色体系,让这个游戏的风评逐步升高,畅销steam游戏榜单.在游戏中玩家可以对自建的任务进行角 ...

最新文章

  1. 【转】android的消息处理机制(图+源码分析)——Looper,Handler,Message
  2. Effective Java之考虑自定义的序列化模式(七十五)
  3. 斜率优化Convex Hull Trick
  4. 最新研究显示人类智力逐渐下降且变得更愚蠢
  5. 【狂神JAVA】MyBatis笔记
  6. shell_script_查询主机名、ip地址 、DNS地址
  7. (Life)质量和服务_由购买联想笔记本想到的
  8. 如何决定何时使用Node.js?
  9. 关于LED 流水灯的软件调试方法(非开发板调试)
  10. 容器技术Docker K8s 47 服务网格(ASM)-阿里云服务网络概述
  11. Python数据结构,线性结构:栈、队列、双端队列、列表
  12. mycat mysql 主从_Mycat实现Mysql主从读写分离
  13. python解码base64_Python Base64转码解码
  14. Linux下双网卡-双外网网关-电信联通双线主机设置
  15. SpringCloud——Eureka服务注册和发现
  16. BlueTooth Android开发基础
  17. 求空间中点到线的最短距离(Revit二次开发)
  18. MTK进入工程模式方法
  19. 任正非:我们国家还是要强调发展实体经济 发挥工匠精神
  20. Python操作Word的入门教程

热门文章

  1. linux就是这个范儿之特种文件系统(1)
  2. Sliver RecyclerView 功能最强大、最好用的适配器
  3. php读取月日,PHP获取当前时间、年份、月份、日期和天数
  4. .net反编译的九款神器
  5. 360度评估前HR必须掌握的优劣势
  6. Adaptive AutoSAR 标准介绍
  7. 考拉兹猜想(Python版)
  8. c语言实现数据写入存储地址,c语言中通过指针将数值赋值到制定内存地址
  9. vue使用markdown
  10. 天天向上答案python_天天向上的力量python(举一反三)