Skip to content

模组文件结构概述

这些页面正在开发中。它们包含的信息可能不完整。

组成模组的 JSON 文件可以有许多不同的字段,由于并非所有字段都在基础游戏中使用,此 wiki 页面将包含每个字段的完整信息。它还将提供 JSON 文件语法的简要说明。

目录

JSON 文件总览

推荐阅读json.orgISO 标准

几乎所有 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 文件等等。你定义的不同新建筑或单位也可以有许多不同的属性,尽管并非所有属性都是必需的。以下是记录所有内容可以拥有的所有不同属性的表格。只有标记为"必需"的属性必须提供。所有其他属性都有一个默认值,在省略时将使用。

各个文件在单独的页面上描述。