MDT模組科技樹制作

在MDT中,科技樹使得游戲性、目標性更強,在模組中我們也可以自己手動制作一個科技樹

JSON科技樹
下列是ContentParser的一段內容,用于轉換科技樹,JSON不能單獨寫一個文件創(chuàng)建科技樹
屬性提取
若`research`值為string類:寫一個對象游戲內部名稱或模組的內容的`name`值
否則:為一個對象,內可有`parent` `requirements` `objectives` `root` `name` `requiresUnlock`屬性
還可注意到最后兩個屬性需要`root`值為true,且`root`和`parent`只能兼得一個

屬性解析
parent: 同`research`為string類時,值為一個游戲內部名稱或內容文件名
requirements: 研究消耗,不填則自動計算
objectives: 研究前提需要完成的目標(見后)
root: 是否為根節(jié)點
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)
定義了E星的科技樹根節(jié)點
name定義了該科技樹的名稱,根節(jié)點內容和并創(chuàng)建了子節(jié)點歸屬(?
定義了父節(jié)點下的一個子節(jié)點
content定義了該節(jié)點的內容,以及后續(xù)子節(jié)點的歸屬(?
定義了帶前置目標的一個子節(jié)點
objectives定義了研究該節(jié)點的前置目標
定義了一個沒有孩子的節(jié)點
有關requirements只用加一個物品堆就行了,無需過多講解,就是改變研究消耗
經(jīng)過上述描述,則可以寫成如下的js文件:
挺簡單,是吧?

JSON前置目標
先看源代碼,看看是如何轉換的
首先判斷,若為字符串,則查找是否為某個游戲內容,未找到則報錯
否則:前置目標為研究字符串指代內容(就是生產(chǎn)和研究只會顯示為研究xxx,也可能會誤導一部分玩家)
由于沒有分很細的必要,因此寫在下方代碼段里,并且注意Objective[],代表要在一個列表里
所以還是能寫的

JS前置目標
先看源碼,看看原版的前置目標是怎么寫的
找到如下方法
注意到前面科技樹要求傳的是一個Seq,所以這一堆前置目標應放在一個Seq里,不同前置目標應用逗號(,)隔開。
看向最后一行(core/assest/scripts/global.js),由于沒有直接導入到Objectives里,故使用時需要Objectives前置

后言
首次嘗試在一個教程里用兩種語言進行教學。對于十分細致的屬性教程,大概率是不會更新了的,但若是你想知道,可以來 https://github.com/1565619256/Mindustry-zh_CN-modding-guide 這個是我無聊時候會更新的