泰拉瑞亚修改教程 — 上
一个关于泰拉瑞亚的简单修改教程,因为视频教程说有看不懂的地方,这里再做一个文字版本。
环境及版本
第一章 — Player地址的获取方法
第一步,删掉同志短剑,#滑稽第一步,进入游戏,打开CE,进程选择附加到Terraria,搜索血值和魔法值的组合地址:
注:Value Type选择Grouped,然后在上面输入框内输入
4:100 4:100 4:100 4:20 4:20
,此处的100和20分别代表你的血值和魔法值,如你不是新角色,请自行更改为你当前的血值和魔法值,譬如你当前的角色血量为500,魔法值为200那就更改为4:500 4:500 4:500 4:200 4:200
注意每组值之间有空格,然后点击First Scan。第二步,开始搜索内存地址:
注:图上的内存地址每个人都不相同,因为它是动态变化的,不必因为和我的不同而产生自己错了的错觉。
第三步,选中第三个血值地址,右键查看是什么访问了它:
第四步,返回游戏,触发一下内存地址的刷新,再返回CE,选择最后一个地址:
注:务必先返回游戏触发一下,否则不会出现这个地址。地址不一定在最后一个,只要寄存器是
ebx
就行,选中该地址,然后点击右边的Show disassembler。第五步,在弹出的页面复制动态地址的模块地址:
第六步,点击Tools,选择:Auto Assemble:
第七步,选择Template,选择Full Injection:
第八步,粘贴刚才复制的模块地址,然后点击OK进入编辑界面:
第九步,添加人造指针,此处直接贴出代码,自己按需修改:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34define(address,Terraria.Player::UpdateLifeRegen+BE9) // 这里如果不同请替换为你的地址
define(bytes,8B 83 D8 03 00 00) // 同上
[ENABLE]
assert(address,bytes)
alloc(newmem,$1000)
alloc(syn,4) // 为syn分配内存,syn可换为任意你喜欢的,下同
registersymbol(syn) // 注册全局名称syn
label(code)
label(return)
newmem:
code:
mov [syn],ebx // 移动寄存器ebx里的地址到syn里
mov eax,[ebx+000003D8]
jmp return
address:
jmp newmem
nop
return:
[DISABLE]
address:
db bytes
// mov eax,[ebx+000003D8]
dealloc(newmem)
dealloc(syn) // 释放syn的内存
unregistersymbol(syn) // 取消syn的注册注:有添加代码的地方都做了注释,你可以手动在编辑框内输入在对应的位置,也可直接复制粘贴到你的编辑框,注意如果地址不同请以你自己的地址为准,不要覆盖了。编辑完成后点击左上角的File,然后点击Assign to current cheat table,这样就把脚本添加到了CE的主界面。
第十步,回到CE主界面,其他多余的窗口都可关掉,点击右边的Add Address Manually添加地址,在框内输入
syn
,并勾选下面的Hexadecimal,最后点击OK保存。第十一步,勾选Auto Assemble script,并复制刚才添加的syn的地址,然后点击Memory View:
注:如果此步你的地址为000000,那返回游戏随便动一下就会有地址了。
第十二步,点击Memory View后来到这个页面,点击Tools,再点击Dissect data/structures:
第十三步,在输入框内粘贴刚才复制的地址,点击Structures,点击Define new structure:
并在弹出的窗口点击OK:
注:此处输入框内自动显示的应是
Terraria.Player
才为正确,显示其他皆为错。第十四步,根据英文描述修改自己想修改的东西即可:
下面贴出一些常用修改项:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27statLifeMax--生命值上限
statLife--当前生命值
statManaMax--魔法值上限
statMana--当前魔法值
breath--当前氧气值(配合锁定可达到无限氧气)
buffType--buff类型(需配合buff时间使用)
buffTime--buff持续时间
inventory--Array[0]--物品栏第一个格子
下面的项目都是在物品栏第一个格子下:
fishingPole--渔力
bait--鱼饵力
useAnimation--挥动速度
stack--数量
maxStack--最大数量
pick--镐力
axe--斧力
hammer--锤力
damage--伤害
knockBack--击退力
healLife--回复生命
healMana--回复魔法
scale--大小
defense--防御力
shoot--弹幕
useTime--弹幕数量(值越小越多)
shootSpeed--弹幕飞行速度
netID--物品ID(修改后需返回到主菜单重进可生效)到这里你基本能做到游戏内的大部分修改,但是某些特殊的功能无法做到(如无限召唤,一击必杀,地图高亮,物品全制作,时间加速等等),这些后续会慢慢讲到。现在的问题是你的修改目前是一次性的,如果退出了游戏就会导致无法再修改,因为目前的地址都是动态地址,重启游戏就会变动,所以我们需要把这些地址改为syn+偏移的形式,这样就算重启也不会失效。
第十五步,把动态地址改为指针地址,比如我想修改当前生命值:
然后回到CE地址列表:
注:你可能会想问为什么偏移是3d8,因为,仔细看英文描述前面的对应的就是这个地址的偏移。
再比如我想修改镐子的攻击力,那就把镐子放到物品栏第一个格子:
然后在CE里定位到, 同样选中damage,按A键添加到地址列表,双击后把它修改为指针地址:
注:此处可看到damage的偏移为三级偏移,分别为D0,8,D4,那改为指针地址的时候就不能只添加D4,需要三个偏移都添加进去,如上图所示,需要注意的是多级指针的添加顺序是由下至上的。
最后,总结一下,看似步骤很多,其实也就两三分钟的事情,某些步骤完全就是一个操作拆分为几个步骤来讲,可谓真·保姆教程。简单来说就是搜索血值动态地址,根据动态地址的模块地址来编写脚本,实时获取到player动态地址,再根据player地址+偏移得到自己想修改的项。哦对了,最后一定别忘记保存你的地址列表为CT文件,别辛苦一番忘记保存了下次重新修改又得重新找地址。到这里第一章关于player地址的获取教程就结束了,下一章应该会写一些关于某些无法直接修改的项如何用脚本达到修改的目的,或者写如何用CE直接生成可直接运行的exe程序,再说吧。