NS版暗黑破坏神3金手指开发教程(10)

article/2025/10/5 4:39:04

上一节,我们讲解了一击必杀,技能冷却无CD等人物战斗时用到的金手指制作,这一节,将会讲解人物升级相关的功能以及宝石和打孔器等材料数量的锁定功能制作

1. 在游戏中特别是在游戏后期,我们会发现人物随着等级的提高,升级所需的经验值也越来越高,呈现指数级增长,每升一级越来越困难,再加上练小号升级到70的漫长过程也是令人烦恼的,为了能够快速升级,我们考虑去修改经验值的获取量,首先,在原始版本中搜索经验获取英文experiencegrant,找到了sExperienceGrantToACD函数,继而找到了要hack的地方,转到汇编代码,再找到2.6.6的地址,hack掉这条指令,做成金手指代码即可

2. 进游戏测试一下经验值金手指,果然人物升级变快了,基本上杀几个怪升一级,不过,我们还是觉得有些慢,有没有一种方法可以直接升到满级呢?答案是肯定的,我们开始寻找这种办法,搜索levelup,发现函数sExperienceLevelUp,点进去找到了要hack的地方,然后找到2.6.6对应的地址进行hack,写成金手指代码即可

3. 进游戏测试一下,升一级直接70级,再升级直接20000级,完成。接下来我们要做的另一个功能就是宝石等材料的数量修改,我们在原始版本里搜减的英文subtract,发现了函数SubtractFromStackCount,字面意思是从堆中减去,可以理解为玩家消耗或者丢弃背包和仓库的堆类物品时会调用此函数,那么继续往下看,就找到了我们要hack的地方,也就是减少的指令,找到2.6.6对应的地址,hack掉即可,改为mov X19, 9999,那么扔掉一部分数量的材料,剩余的就会变成9999啦

4. 我们进游戏测试,从背包里扔掉1颗宝石,或者从仓库里物品堆中取出一部分,比如萨玛兰迪的礼物(打孔器),剩余的数量果然变成了9999,开心吧

5. 接下来,我们讲解如何在通过一次大秘境后直接解锁最高层150层,大秘境又称奈非天裂隙,因此搜索riftlevel,发现函数ACDTrySetHighestUnlockedRiftLevel,点进去,找到要hack的地方,转到汇编,然后找到2.6.6的地址,做hack即可,我们把原指令改为mov w21,w0,就把最大层数(150)赋值给了w21,这样当我们通过任意一层大秘境时,最大层也被设置为了上限150

6. 当我们在游戏里获取的装备和物品过多时,仓库数量上限350明显不够用,于是我们有了修改仓库上限的想法,想要修改上限,首先要找出上限值,因为在物品移动到仓库时会判断是否达到上限,因此我们搜索movetostash,发现了ItemMoveToStash,然后打开伪代码,往下又发现了ACDInventoryCanHold,双击打开,又发现了sACDInventoryFindBestLocation,继续打开,往下看,分析代码找到了上限840,然后根据附近代码相似找到2.6.6版本的上限,发现2.6.6版本的上限是910,因此仓库上限就是910

7. 知道了储藏箱上限,接下来就简单了,我们搜索maxstash,发现函数ACDInventoryGetMaxStashSlots,双击打开,发现默认上限是350,找到2.6.6的地方,Hack掉

8. 接下来我们hack购买储藏箱仓位的函数,搜索buyslots, 发现了SACDInventoryBuyStashSlots,打开,找到要hack的地方,一共有三处,我们最后找到2.6.6对应的三处地址修改之

9. 至此,我们已经改好了大部分上限判断,还有一处升级仓位所需金币需要改一下,我们搜索GetStashUpgradeCost,发现函数ACDInventoryGetStashUpgradeCost,打开后找到要hack的位置,然后去找2.6.6对应的地址,hack之后,和之前的hack指令一起写成金手指代码

10. 进入游戏测试金手指,去储藏箱看看,是不是可以突破350的仓位上限啦!

好了,本节到此结束,在本节中,我们学会了怎么制作经验值翻倍,人物满级,堆类型材料数量锁定,以及储藏箱容量上限提升的功能,分析和hack程序的功力又上了一层楼,下一节将会讲解关于传奇宝石相关的一系列金手指制作,相信读者会体验到终极逆向和hack技术的魅力!

 


http://chatgpt.dhexx.cn/article/sZ7Tnsfn.shtml

相关文章

Unity脚本复习

1.在Project面板中显示和创建的每一个脚本其实都是一个类,当我们把脚本挂载到Hierarchy层级中的游戏物体时,其实我们就实现了将脚本类实例化为一个脚本组件(对象)的过程 2.在游戏运行时,场景加载,游戏对象…

零基础游戏开发笔记11——Unity脚本介绍、脚本初始阶段

1.语法结构: 2.编译过程: CLS->Mono RunTime->机器码 3.关于修改和创建脚本: 创建脚本: 一般我们会在项目中添加scripts文件夹,并在此文件夹中编写脚本,当然这些脚本可以根据个人喜好分配到不同类…

NS版暗黑破坏神3金手指开发教程(4)

上一节,我们讲了基于公式明文的金手指制作方法,这一节,我们将进阶到更高级的基于程序修改的金手指制作方法,从现在开始,对读者的技术水平有了一个更高的要求,读者最好有汇编和C/C高级语言的一些基础&#x…

NS版暗黑破坏神3金手指开发教程(17)

终于到最后一节了,在这一节中我们将讲解如何利用hack制作出丰富多彩的世界,开个玩笑,其实是因为由于暗黑三的AMIIBO功能很有意思,不但可以用普通手办在城外召唤出一组精英怪,而且在城内用专用哥布林手办还能开启宝藏秘…

NS版暗黑破坏神3金手指开发教程(5)

上一节,我们学会了通过修改程序指令的方式制作金手指,这一节,将引出真正的高手级金手指开发方法 除了必掉太古这个极其护肝和有用的金手指外,我们能想到的另一个金手指就是人物背包里的素材,包括金钱,宝石…

暗黑破坏神2 符文自动合成--按键精灵源码

最近玩了一个暗黑破坏神mod服 发现2个符文可以合成一个大号符文.不过手动合成实在太费劲了.于是乎我就写了一个自动合成的脚本. 需要用到图灵插件,不知道的自己百度一下. 还是挺有意思的这类脚本.还需要有一个自己的算法. 源码如下. Function 移动鼠标点左键(x1, y1)MoveT…

Unity脚本(二)

视频教程:https://www.bilibili.com/video/BV12s411g7gU?p122 目录 Transform GameObject Object GetComponentInParent LookAt GetSiblingIndex、SetSiblingIndex Instantiate Transform 对象的位置、旋转和缩放 场景中的每个对象都有一个Transform&…

Unity 剧情类游戏基础脚本

本文主要用于给新人提供实现剧情类游戏的基本思路。 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; 然后是一个很重要的 [System.Serializable] 它的作用是使得在检查器窗口来看到我i们自己创建的类从而实现在检…

Unity脚本(三)

视频教程:https://www.bilibili.com/video/BV12s411g7gU?p128 目录 Time Prefab Animation Time Time.time:自应用程序启动以来,每帧的开始时间(只读) Time.deltaTime:每帧间隔,或说完…

NS版暗黑破坏神3金手指开发教程(1)

最近重温了NS版的暗黑三,因为空闲时间实在有限,面对这样一款刷刷刷的经典作品,为了护肝以及更爽快的游玩,同时为了弥补自己丢失已久的汇编技能,加上NS版暗黑三最初版本里有带完整调试信息的elf文件,于是有了…

NS版暗黑破坏神3金手指开发教程(3)

上一节,我们初步介绍了修改人物力量的方法,也大致说了一下hexworkshop和IDA的简单操作,这一节,我们将进阶到复杂度高一些的人物全属性修改,搜索方法基本跟上一节的力量公式一样,需要一定的耐心和细心&#…

Unity入门3——脚本基础

一、生命周期函数 ​ 所有继承 MonoBehavior 的脚本,最终都会挂载到 GameObject 游戏对象上 ​ 生命周期函数就是该脚本对象依附的 GameObject 对象从出生到消亡整个生命周期中 ​ 会通过反射自动调用的一些特殊函数 ​ Unity 帮助我们记录了一个 GameObject 对象依…

4.实现csdn暗黑模式-油猴脚本实战1

4.实现csdn暗黑模式-油猴脚本实战1 Start 前面的文章,对油猴脚本做了基础的介绍。今天来我们来实战一下,编写一个有实际作用的油猴脚本。 如果我希望我的csdn是暗黑模式,怎么办? 看我表演? 注意!本文仅用…

6. unity之脚本

1. 说明 当整个游戏运行起来之后,我们无法再借助鼠标来控制物体,此时可以使用脚本来更改物体的各种姿态,驱动游戏的整体运动逻辑。 2. 脚本添加 首先在Assets目录中,新创建一个Scripts文件夹,在该文件内右键鼠标选择创建脚本选项,即可创建一个脚本文件,可命名为Sampl…

Unity入门03——Unity脚本

1.脚本基本规则 1.设置编程用工具 2.基本规则 1.创建规则 不在VS中创建脚本了可以放在Assets文件夹下的任何位置(建议同一文件夹管理)类名和文件名必须一致,不然不能挂载(因为反射机制创建对象,会通过文件名去找Type)建议不要使用中文名命名没有特殊…

你可能还不知道的暗黑3常用小技巧

以下是上次活动热心坛友发来的游戏小技巧,经过我的搜集和加入一些自己和朋友们分享的经验整合编辑而成。再次感谢大家的热心参与。都非常实用哟!!! 操作篇 1,如果你不希望朋友进入你的游戏时,按ESC&#xf…

jq linux获取数组长度,数组长度用size还是length

数组长度用length属性。length是js的原生方法,可获取元素的个数和对象的长度;而size()函数是jQuery方法,只能作用于对象上,用于返回当前jQuery对象封装的元素个数。获取一个数组的长度或者参数的长度,只能用lenth。 本…

delphi 获取数组长度_数组的介绍及使用

JavaScript 中的数组常用于在单个变量中存储多个值。数组就是一组数据的集合,在内存中表现为一段连续的内存地址(保存在堆内存)。创建数组的目的就是为了保存更多的数据。 数组概念和语法 概念:数组是一个特殊变量,一次可以容纳多个值。 特点…

js 填充数组长度

js 填充的方法有以下三种 const array new Array(100).fill()Array.from(new Array(100).keys())let arr Array.from({length:100}, (_v,k) > k);如果下面有这么一个场景,你在接口中获取了一个数组对象,如下: [{id:1},{id:2},{id:3},{…

c语言中文网 数组的长度,数组的长度如何获取?

获取数组长度的方法: 1、在java与JavaScript中可以使用“数组名.length”方法获取数组长度 javaScriptvar arrnew Array(); arr[0] "a"; arr[1] "b"; var lenarr.length; java 2、c语言中可以使用关键字 sizeof获取数组长度 用 sizeof 可以获…