欢迎光临散文网 会员登陆 & 注册

MDT模组科技树制作

2022-09-10 12:14 作者:NullPointerErr  | 我要投稿

在MDT中,科技树使得游戏性、目标性更强,在模组中我们也可以自己手动制作一个科技树

JSON科技树

下列是ContentParser的一段内容,用于转换科技树,JSON不能单独写一个文件创建科技树

属性提取

  • 若`research`值为string类:写一个对象游戏内部名称或模组的内容的`name`值

  • 否则:为一个对象,内可有`parent` `requirements` `objectives` `root` `name` `requiresUnlock`属性

还可注意到最后两个属性需要`root`值为true,且`root`和`parent`只能兼得一个

属性解析

  • parent: 同`research`为string类时,值为一个游戏内部名称或内容文件名

  • requirements: 研究消耗,不填则自动计算

  • objectives: 研究前提需要完成的目标(见后)

  • root: 是否为根节点

  • name: 当前模组的科技树名称

  • requiresUnlock: 是否要先前解锁(但为true就不会显示了,或许是我没找到方法?建议将该值为true的内容的alwaysUnlocked为true)

属性解释

  • string: parent, name

  • boolean: root, requiresUnlock

  • ItemStack[]: requirements

  • Seq<Objective>: objectives

JS科技树

在学习js模组时,可以尝试模仿游戏源码的方式进行,下方是E星的部分代码(mindustry/content/ErekirTechTree.java),标号对应下方序号

查找`nodeRoot`和`node`,得到如下几些方法(mindustry/content/TechTree.java)

  1. 定义了E星的科技树根节点

    name定义了该科技树的名称,根节点内容和并创建了子节点归属(?

  2. 定义了父节点下的一个子节点

    content定义了该节点的内容,以及后续子节点的归属(?

  3. 定义了带前置目标的一个子节点

    objectives定义了研究该节点的前置目标

  4. 定义了一个没有孩子的节点

有关requirements只用加一个物品堆就行了,无需过多讲解,就是改变研究消耗

经过上述描述,则可以写成如下的js文件:

挺简单,是吧?

JSON前置目标

先看源代码,看看是如何转换的

  • 首先判断,若为字符串,则查找是否为某个游戏内容,未找到则报错

  • 否则:前置目标为研究字符串指代内容(就是生产和研究只会显示为研究xxx,也可能会误导一部分玩家)

由于没有分很细的必要,因此写在下方代码段里,并且注意Objective[],代表要在一个列表里

所以还是能写的

JS前置目标

先看源码,看看原版的前置目标是怎么写的

找到如下方法

注意到前面科技树要求传的是一个Seq,所以这一堆前置目标应放在一个Seq里,不同前置目标应用逗号(,)隔开。

看向最后一行(core/assest/scripts/global.js),由于没有直接导入到Objectives里,故使用时需要Objectives前置

后言

首次尝试在一个教程里用两种语言进行教学。对于十分细致的属性教程,大概率是不会更新了的,但若是你想知道,可以来 https://github.com/1565619256/Mindustry-zh_CN-modding-guide 这个是我无聊时候会更新的


MDT模组科技树制作的评论 (共 条)

分享到微博请遵守国家法律