3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 12403|回复: 12
打印 上一主题 下一主题

[分享] 《失落城堡》物品掉落修改教程

[复制链接]

17

主题

224

帖子

807

积分

超级玩家

Rank: 5Rank: 5

贡献度
43
金元
6346
积分
807
精华
0
注册时间
2015-8-31
跳转到指定楼层
主题
发表于 2021-8-25 23:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 心愿兰影 于 2021-8-25 23:50 编辑

最近《失落城堡》更新了2.1补丁,然后就发现CE不能使用,在网上找了一圈也没有合适的修改器,可能是我太菜了……
于是乎就想着分析一下游戏文件,看看能不能通过简单的逆向修改,在打开游戏目录后发现是Unity引擎的游戏(玩的时候没注意是什么引擎开发的)。
我玩的游戏不说太多但也经常在网上逛论坛,尤其是和游戏相关的,也就是这时候知道Unity引擎开发的游戏如果没有加密dll文件的话,就可以被工具给逆向出来。(这里我不推荐大家在未经允许的情况下随便逆向其他人的文件)
我非常不推荐大家在未经允许的情况下随便逆向其他人的文件,我这也没有经过允许,所以仅提供我自己在娱乐时的思路,不提供工具。
正文开始
在玩的过程中我是想修改金币和灵魂,在使用工具逆向“Assembly-CSharp.dll”文件后,我就去找了金币和灵魂的单词以及拼音(毕竟是国内开发的不排除懒省事的用拼音,这里不是在抱怨拼音不好)发现金币有脚本“Coin”,灵魂“Soul”,宝箱“Chest”。
在金币脚本中没有找到我想要的,却发现有个“CoinDropSys”脚本,这脚本中通过分析发现“EnemyKilled”方法执行了“怪物被杀死”的掉落处理

红框圈起来的部分就是随机掉落,删掉后就成了必掉,这时候保存文件进游戏后发现,杀死怪物后必然会掉下三枚金币,我的目的达成了一部分,因为金币掉的太少了,通过方法查找引用,发现“EnemyKilled”这个方法是在“ItemDropSys”脚本中被调用的,进入“ItemDropSys”脚本查看



这个方法画红框部分执行金币的掉落,三个金币,也发现是一个for循环在控制,简单的通过修改数值可以发现游戏中掉落的金币数量也修改了,至此我想要的金币修改已经达成了。
而我准备用同样方式去修改怪物死亡时灵魂掉落数量时,发现这个物品掉落中没有包含灵魂数据也就是不存在“SoulDropSys”脚本。有点难受,因为不存在就相当于我要重新分析灵魂掉落的操作。
不过,没怎么犯难,我发现了这个物品掉落的“MonsterKilled”怪物死亡方法中,参数是一个“MonsterValue”怪物数值类,通过这个类名或者通过查找死亡“Die”方法可以找到怪物“Monster”类。
在“Monster”类中搜索灵魂“Soul”,很快发现有个方法“SoulDrop”灵魂掉落


其中获取当前怪物掉落的灵魂值
this.GetDiscountDropSoulNum(this.m_dropSoulNum);
this.GetDiscountDropSoulNum(this.m_dropBigSoulNum);
以及 if ((float)num < this.m_dropSoulProb) 来控制是否掉落
通过简单修改比如:
int discountDropSoulNum = this.GetDiscountDropSoulNum(this.m_dropSoulNum);
改为:int discountDropSoulNum =(this.GetDiscountDropSoulNum(this.m_dropSoulNum) + 1) * 2 ;
这样子灵魂数值永远不会等于零
以及 if ((float)num < this.m_dropSoulProb) 中的条件直接改为  if (true) 或者删除if条件,只保留if条件满足下的结果代码块
这样修改后,保存运行,发现目的达成。杀死怪物必然掉落可观的金币和灵魂。
本来这样子就没了,但每次通关时会掉落宝箱,心想要不试试看能不能让宝箱中的金币翻倍。
通过搜索箱子“Chest”找到开箱方法“OpenChest”


发现画红框这两个地方做了金币数量的修改,果断的将if删除,保存运行测试,发现金币翻倍。
准备关闭工具时注意到了有个方法“dropThings”,进来发现方法中有个“ChangeItemNum”改变物品数量方法???这说啥,再找找看吧!
进入“ChangeItemNum”方法后发现


金币数量又在这里被改了一次,那我肯定也要再改一下
通过查看,得出 金币数量 = Mathf.Ceil(金币数量 * 0.33f) * (当前难度 - 1)
修改公式:金币数量 = Mathf.Ceil(金币数量 * 1.33f) * (当前难度 * 2 - 1)
保存,运行游戏,发现金币数量达到预期,本次修改结束。
教程说明结束,查找金币,灵魂和宝箱浪费了不少时间。简单赶了一下教程,继续肝我的城堡了……
拜拜~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

1

查看全部评分

回复

使用道具 举报

2

主题

125

帖子

204

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
2039
积分
204
精华
0
注册时间
2021-2-6
舒服的沙发
发表于 2021-8-26 20:17 | 只看该作者
大佬牛逼!!!
回复 支持 反对

使用道具 举报

0

主题

128

帖子

193

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1928
积分
193
精华
0
注册时间
2013-1-23
硬硬的板凳
发表于 2021-9-14 14:12 | 只看该作者
大佬能解决下成就修改吗,全成就
回复 支持 反对

使用道具 举报

0

主题

83

帖子

825

积分

超级玩家

Rank: 5Rank: 5

贡献度
0
金元
8246
积分
825
精华
0
注册时间
2012-12-23
冰凉的地板
发表于 2021-10-22 18:29 | 只看该作者
请问是用什么软件
回复 支持 反对

使用道具 举报

17

主题

224

帖子

807

积分

超级玩家

Rank: 5Rank: 5

贡献度
43
金元
6346
积分
807
精华
0
注册时间
2015-8-31
5#
 楼主| 发表于 2021-10-23 14:51 | 只看该作者
豬仔東 发表于 2021-10-22 18:29
请问是用什么软件

GitHub开源软件:dnspy
回复 支持 反对

使用道具 举报

0

主题

23

帖子

91

积分

初级玩家

Rank: 2

贡献度
0
金元
906
积分
91
精华
0
注册时间
2016-6-24
6#
发表于 2021-11-20 16:12 | 只看该作者
感谢大佬,受益匪浅!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

1

积分

游戏菜鸟

Rank: 1

贡献度
0
金元
10
积分
1
精华
0
注册时间
2021-12-14
7#
发表于 2022-1-4 15:53 | 只看该作者
楼主,coin脚本在哪里啊
回复 支持 反对

使用道具 举报

3

主题

385

帖子

480

积分

高级玩家

Rank: 4

贡献度
0
金元
4802
积分
480
精华
0
注册时间
2017-1-28
8#
发表于 2022-7-19 19:58 | 只看该作者
牛逼,感谢
回复 支持 反对

使用道具 举报

0

主题

28

帖子

37

积分

初级玩家

Rank: 2

贡献度
0
金元
370
积分
37
精华
0
注册时间
2020-12-21
9#
发表于 2024-2-12 20:40 | 只看该作者
大佬,金币成功了,但是在处理soul时,修改这段红框代码后,编译就报错了,请问怎么解决。。。(哪怕我编辑方法打开后,啥也不动,编译也是报错)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

0

主题

14

帖子

79

积分

初级玩家

Rank: 2

贡献度
0
金元
790
积分
79
精华
0
注册时间
2011-6-19
10#
发表于 2024-2-13 16:18 | 只看该作者
f81570083 发表于 2024-2-12 20:40
大佬,金币成功了,但是在处理soul时,修改这段红框代码后,编译就报错了,请问怎么解决。。。(哪怕我编辑 ...

这个报错的含义是:“不知道Random函数是使用UnityEngine.Random 还是 System.Random”你看这个第26行、32行、...都有Random.Range(xxx) 这样的使用方式,所以修改让编译器明确使用的是那个类的Random就可以;
修改方法,将Random.Range(xxx) 修改成 UnityEngine.Random.Range(xxx) , 就是前面加上"UnityEngine."

将所有报错的行数都明确了就可以了
回复 支持 反对

使用道具 举报

0

主题

28

帖子

37

积分

初级玩家

Rank: 2

贡献度
0
金元
370
积分
37
精华
0
注册时间
2020-12-21
11#
发表于 2024-2-14 19:51 | 只看该作者
outo 发表于 2024-2-13 16:18
这个报错的含义是:“不知道Random函数是使用UnityEngine.Random 还是 System.Random”你看这个第26行、3 ...

感谢大佬。
回复 支持 反对

使用道具 举报

0

主题

596

帖子

602

积分

超级玩家

Rank: 5Rank: 5

贡献度
0
金元
6015
积分
602
精华
0
注册时间
2020-3-18
12#
发表于 2024-9-27 16:26 | 只看该作者
6666666666
回复 支持 反对

使用道具 举报

1

主题

1799

帖子

2240

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
49
金元
20439
积分
2240
精华
0
注册时间
2007-12-8
13#
发表于 2024-10-21 06:24 | 只看该作者
感谢分享这些信息,看起来对游戏玩法有很大帮助。逆向工程需要谨慎,希望大家遵守规则和道德。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2025-3-13 16:55 , Processed in 0.177604 second(s), 16 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表