模组文件结构概述
这些页面正在开发中。它们包含的信息可能不完整。
组成模组的 JSON 文件可以有许多不同的字段,由于并非所有字段都在基础游戏中使用,此 wiki 页面将包含每个字段的完整信息。它还将提供 JSON 文件语法的简要说明。
目录
JSON 文件总览
几乎所有 Unciv JSON 文件都以 "[" 开头,以 "]" 结尾。在这两者之间是你正在描述的不同类型的对象,每个对象都包含在 "{" 和 "}" 之间。例如,一个非常简单的 units.json 可能看起来像这样:
[
{
"name": "Warrior",
"cost": 16
},
{
"name": "Spearman",
"cost": 24,
"promotions": ["Shock I", "Drill I"]
}
]此文件包含两个单位对象,一个用于战士,一个用于枪兵。这些对象具有不同的属性,在这种情况下是"name"、"cost"和"promotions"。所有这些属性都有一定的类型,"name"的字符串(文本),"cost"的整数,"promotions"的字符串列表。
有不同类型的属性:
| 类型 | 说明 |
|---|---|
| String | 一个单词或句子。应该在双引号(")之间,并转义作为文本一部分的双引号:\" |
| Integer | 一个数字。可以是正数或负数。应该不在引号之间 |
| Float | 一个可以有小数位的数字。请记住使用 . 作为 JSON 标准需要的,而不是你本地文化的小数符号。科学计数法也可以工作,虽然 |
| Boolean | 可以是'true'或'false'的值。应该不在引号之间 |
| List of [type] | 如果可以应用多个值(如上面的晋升),它们应该放在列表中。列表的每个元素应该像普通属性一样编写,用逗号分隔,并包含在方括号之间。例如:["Shock I", "Shock II"] 或 [1, 2, 3]。 |
| Object | 最复杂的属性类型。对象由多个属性组成,每个属性又有一个类型。这些属性有一个键(":"之前的部分)和一个值(它后面的部分)。有关示例,请参见下文。 |
添加一个新的"Cultural Library"建筑(提供 +50% 科技和 +50% 文化)的 Buildings.json 示例:
[
{
"name": "Cultural Library"
"percentStatBonus" : {"science": 50, "culture": 50}
}
]在此示例中,键是"science"和"culture",两者的值都是"50"。
在某种意义上,你可以从这些类型中看到 JSON 文件本身实际上是一个对象列表,每个对象描述一个建筑、单位或其他东西。
基础规则集要求
基础规则集模组本身必须是"完整的",但这并不意味着它们必须包含所有可能的 JSON 文件或在所有文件中定义内容。这是一个细分(WIP,可能不准确):
| 文件 | 允许为空? | 默认/回退 |
|---|---|---|
| Beliefs | 是 | 无 |
| Buildings | 否 | 无 |
| CityStateTypes | 否 | 原版 |
| Difficulties | 否 | 原版 |
| Eras | 否 | 无 |
| GlobalUniques | 是 | 原版 |
| ModOptions | 是 | 下载时生成 |
| Nations | 否 | 无 |
| Policies | 是 | 无 |
| Quests | 是 | 无 |
| Religions | 是 | 无 |
| Ruins | 是 | 原版 |
| Specialists | 是 | 无 |
| Speeds | 否 | 原版 |
| Techs | 是 | 无 |
| Terrains | 否 | 无 |
| TileImprovements | 是 | 无 |
| TileResources | 是 | 无 |
| Tutorials | 是 | 内置始终显示 |
| UnitPromotions | 是 | 无 |
| Units | 否 | 无 |
| UnitTypes | 否 | 原版 |
| VictoryTypes | 否 | 原版 |
- 模组加载永远不会因缺少文件而失败,它们首先默认为空。然后仅对基础规则集应用上述回退。该步骤之后的不一致性将由模组检查器报告。
- GlobalUniques 有一个在文件缺失时使用的回退。因此,模组可以通过包含空内容(
{})来有意定义没有回退。 - Ruins 有一个在文件缺失时使用的回退。因此,模组可以通过包含空内容(
[])来有意定义没有回退。
Uniques
"Uniques"是 Unciv 用于可扩展和可自定义效果的标签。几乎每个"规则集对象"都允许一组它们,作为名为"uniques"的列表。
每个 Unique 遵循一般结构:Unique 类型定义名称 [占位符] 更多名称 [另一个占位符] <条件或触发器> <条件或触发器>... 整个字符串,排除所有用 <> 分隔的条件或触发器及其分隔空格,以及排除占位符但不排除其 [] 分隔符,用于查找 Unique 的实现。 可选 [占位符] 的内容取决于实现,它们是修改效果的参数,并在 Unique 参数中描述。 所有 <条件或触发器> 都是可选的(但如果使用它们,分隔它们的空格是强制性的),并且每个依次遵循 <> 尖括号之间部分的 Unique 结构规则,包括可能的占位符,但不包括嵌套条件。
示例:建筑上的 "uniques":["[+1 Gold] <with a garrison>"] - 与 "gold":1 属性的作用几乎相同,除了它仅在城市有驻军时适用。在此示例中,[] 和 with a garrison 是 Unciv 用于查找两个 Uniques 的键,一个是效果(类型为 Stats),一个是条件(类型为 ConditionalWhenGarrisoned)。
Unciv 中有实现的所有 Unique"类型"都会自动记录在 Uniques中。请注意,该文件完全是从源代码结构生成的。还要注意 条件和 触发条件 的单独章节。 与这些条目中的任何一个都不对应的 Uniques(逐字包括大小写!)被称为"无类型",将没有直接效果,并可能导致"规则集验证器"显示警告(请参阅选项选项卡"定位模组错误",它在开始新游戏时也会运行)。 "无类型"Uniques 的合法用途是它们作为可以在过滤器中其他地方识别的标记(示例:原版规则集中的"Aircraft"用作单位过滤器)。 此用途被"规则集验证器"识别,并且不会被标记为无效 - 但过滤 Unique 必须也不使用占位符或条件才能通过测试。 如果你收到"未在 Unciv 的 unique 类型中找到"警告,但确定你使用的是正确的过滤 Unique,请在所有地方查找完全相同的拼写,包括大小写。 注意:目前一些模组使用无类型 Uniques 不是为了过滤目的,而是作为纯信息工具。团队将尝试为此用途考虑一种方法,该方法不会在不降低验证质量的情况下触发验证警告,但截至目前,这些是不可避免的。
游戏中使用的 JSON 文件信息
Unciv 的许多部分都是可模组化的,每个部分都有一个单独的 json 文件。有一个建筑的 json 文件,一个单位的 json 文件,一个单位可以拥有的晋升的 json 文件,一个科技的 json 文件等等。你定义的不同新建筑或单位也可以有许多不同的属性,尽管并非所有属性都是必需的。以下是记录所有内容可以拥有的所有不同属性的表格。只有标记为"必需"的属性必须提供。所有其他属性都有一个默认值,在省略时将使用。
各个文件在单独的页面上描述。