|
|
本帖最后由 xenoxue 于 2019-5-4 22:36 编辑
请使用最新版本 http://bbs.3dmgame.com/thread-5869739-1-1.html
本帖不再提供下载,仅保留lua mod的写法和思路!
——————————————————————————————————————
之前发布过一个修改Assembly-CSharp.dll版本的快速画符MOD,但是由于游戏更新频繁,每次都要重新修改很麻烦。
终于前几天看到游戏更新了Lua脚本的支持,但是官方的范例过于简陋。 今天抽空看了一下Lua相关的代码,然后把我最喜欢用的快速画符 用Lua脚本重写了一遍。
其实脚本代码就几行。 附上解析Lua脚本功能的简单方法,希望大家可以开发出更多的Mod。
脚本使用方法:
1、下载Mod
2、解压缩到 【你的游戏目录】/mods 文件夹下
3、重启游戏后生效。
Mod功能:
所有符咒都解锁快速画符,不管你有没有画过这个符咒(比dll版方便一些,不用先画一次。)
并且快速画符的品质都锁定在100
自定义品质:
请修改 Scripts/GreatPainter.lua文件
World:SaveFuValue(k,1);
把 "1" 改成你要的品质。
1 = 100%
2 = 200%
以此类推
修改后要重启游戏,或重新载入mod
MOD下载地址:
本mod停止下载,请使用最新版:http://bbs.3dmgame.com/thread-5869739-1-1.html
=================Lua脚本全功能分析方法===============================
注意:这里只是告诉你怎么查询本游戏Lua脚本支持的功能,由于官方并没有放出Api说明,所以都要靠自己找。
我使用的方法很简单,我用dnspy反编译了Assembly-CSharp.dll,然后在Assembly-CSharp\XLua\ObjectTranslator.cs 里面就能看到所有Lua支持的功能了。
我稍微看了一下,基本上游戏内95%的数据都能用Lua修改和访问。
这里用修改快速画符作为例子。
首先要找到快速画符的数据保存在哪里。
经过查询,是保存在一个叫做World.FuSaves的字典里面的。
然后在ObjectTranslator.cs里面搜索FuSaves,就找到了相关的几个方法,其中有 GetFuValue, SaveFuValue. 顾名思义 是获取快速画符,和读取快速画符的数据。
但是这里有个问题,读取和写入数据的术后需要2个参数。 分别是 键值(KeyName)还有 数值(Value)。经过查询代码,应该指的是spell.xml里面的 <Spell Name="Spell_MoveSpeed1"> 中的Name的值。 而不是我们游戏中看到的中文名称。
那我们现在需要找到所有符文的数据。 经过查询是在PracticeMgr.m_mapSpellDefs里面。现在就简单了。历遍m_mapSpellDefs,然后把每个符文都加入到 快速画符的数据。由于加入快速画符数据的时候已经有避免重名的判断了所以我们这里就不用添加了。
完成。
但是由于目前执行入口有限。 只能在载入mod的时候运行代码,或者是在story事件里面调用。 而且没有UI。 所以能玩的东西也相对有限。 只是比story里面的能访问和修改的数据多的多了。
可以查看和修改的数据不限于:
存档
显示灵气
日期
师傅
游戏模式
天气
时间
人物数据
等等。 可以结合 交易所mod,电脑mod的思路利用一个物品做互交,内置story事件的方式做一个内置的修改器。
===========================================================
|
评分
-
2
查看全部评分
-
|