本指南将介绍如何为《Planet S》创建模组。 技术概述 首先我们来讨论技术背景,以便了解模组制作时游戏后台的运行机制。 资源文件夹 游戏会追踪所谓的“资源文件夹”,这些文件夹是游戏所有资源的存放位置。因此,资源本质上就是资源文件夹内的文件。这些资源可以是纹理、模型、声音或lua脚本。启动游戏时,它会扫描当前目录以查找资源文件夹。若查看游戏安装目录下的“assets.aexassets”文件或“customFlagPresets”文件夹,你可以看到相关示例。资源文件经过打包处理以加快加载速度,因此我们将转而查看“customFlagIcons”文件夹。 一个资源文件夹需要一个“assets.”在根目录下有一个“json”文件。该文件会告知游戏此文件夹为资源文件夹,并包含优先级等信息。当某个文件存在于多个资源文件夹中时,优先级就变得至关重要。这种情况下,游戏会从优先级较高的资源文件夹加载资源。 是的,你可以利用此功能来替换资源。但请注意,这样做可能会导致难以调试的异常情况。因此,我们**不正式支持此功能**。你可以尝试使用它,甚至替换整个菜单,但如果因此产生错误,我们将不提供支持。 回到资源文件夹的话题。每个资源都有一个“唯一”的资源ID。它由资源文件夹内文件的相对路径加上文件名构成。如果文件“fi_research.png”位于“textures/flagIcons”子目录下的“customFlagIcons”资源文件夹中,其资源ID为“textures/flagIcons/fi_research.png”。“唯一”之所以加引号,是因为不同资源文件夹中可能存在资源ID完全相同的资源。但只要你不尝试替换现有资源,并为新资源选择有意义的名称,这一点就无需担心。 模组文件 为什么要介绍资源文件夹?因为从技术层面而言,模组也是以资源文件夹的形式实现的! 我们通过lua脚本注册模组。该脚本可包含不同的函数。“registerMod”函数是必须的,它必须返回标题、描述和优先级。如果此函数运行失败,模组将无法注册。强制模组脚本必须位于其模组目录下的“scripts/mods/”路径中。当你通过编辑器创建新模组时(下一节将详细说明),它会自动保存在该位置。除了模组脚本外,模组引入的所有其他资源也必须放在其资源文件夹中。我们建议的良好做法是创建“textures”“models”“scripts”“sounds”等独立文件夹。 启用终端:为了帮助你在创建模组时调试问题,我们提供了显示游戏终端的功能。你可以通过向游戏传递“-console”作为启动参数来实现。游戏启动时终端会显示。关闭终端将立即终止游戏!编辑器:Planet S-Tools 启动编辑器 编辑器可在基础游戏Planet S之外使用。你可以在通过Steam启动游戏时选择它,或者如果已将基础游戏设为默认启动选项,也可以手动选择Planet S-Tools。 显然,编辑器需要互联网连接才能创建和更新模组。 创建新模组 启动编辑器时会显示一个“欢迎!”弹窗,其中有三个选项,从名称即可了解其用途。要创建新模组,点击“Create a new mod”即可。

随后会弹出一个新窗口,要求你输入模组名称、简短描述文本以及优先级。 模组名称将作为游戏内的模组名称,同时也会作为Steam创意工坊中的标题。如果之后想要更改,你需要在模组脚本中编辑游戏内名称,并在Steam中修改创意工坊项目标题。 描述文本仅在游戏内使用。优先级将作为模组资源文件夹的优先级,你可以将其保留为默认值0。这两个数值之后都可以在生成的文件中进行编辑。

填写文本字段并点击“创建新模组”后,模组将被创建。生成的文件会位于游戏安装目录的mods文件夹中,其中会有一个与你为模组输入的名称相同的子文件夹。在该子文件夹内,你会找到“assets.json”以及模组脚本,如第1章“模组文件”中所述。模组脚本也会以模组名称命名,且是一个“.lua”文件。打开该文件,你会看到预生成的“registerMod”函数。我们使用“Visual Studio Code”来编辑lua文件,该软件可免费获取。 需要注意的是,你可以查看编辑器当前“附加”的是哪个模组。点击顶部的“模组”选项卡,即可显示当前状态。如果设置了模组,你将看到其标题和唯一的创意工坊项目ID。创建(或打开)模组后,界面应如下所示:

如果你点击了“仅编辑资源”,或者与Steam后端通信时出现问题,“模组”标签页就会显示成这样。

编辑现有模组 要编辑现有模组,首先需确保你拥有模组文件。作为模组的创建者,你的电脑上通常会有这些文件。如果不慎丢失,你需要在Steam创意工坊订阅该模组,并将文件复制到游戏安装目录中它们最初创建的位置。 如果你已拥有文件,启动编辑器并在欢迎弹窗中点击【打开现有模组】。在此步骤中,你需要选择要编辑的模组的模组脚本。在【Steam创意工坊项目】下拉框中,选择正确的工坊项目。该下拉框包含你所有拥有的Planet S创意工坊项目,你可以通过名称或唯一的工坊项目ID来识别它们。你可以将其与相应创意工坊项目的Steam页面网址中的数字进行比较。

如果一切顺利,你将能再次在【模组】标签页中查看模组详情! 设置缩略图 要在创意工坊中设置缩略图,你需在模组文件夹内放置一个名为【thumbnail】的PNG文件。更新模组时,该文件将自动上传。

更新你的模组 每次修改模组后,你都需要将其上传至Steam。编辑器会通过上传模组目录内的所有文件来帮你完成这一操作。你可以通过之前提到的【模组】选项卡中的【更新模组...】按钮来更新模组。点击该按钮后会打开另一个弹窗。

在其中你可以编辑Steam创意工坊中显示的模组标题,并输入更新说明。这里也是你设置模组标签的地方。这些标签与我们为【Planet S】创意工坊配置的分类相对应。理想情况下,它们应能说明你的模组添加了哪些内容类型。 点击【更新模组】会开始向Steam后台上传。上传时间可能需要几秒钟,具体取决于你的网络连接速度。上传完成后,编辑器右下角会显示成功通知。在此之前不要关闭编辑器,以防止出现问题! 编辑资源 除了创建和更新创意工坊项目外,编辑器的主要用途是创建和编辑【Planet S】的资源。虽然纹理、模型和声音需要在其他地方创建,但编辑器是用于创建【Planet S】资源的工具。这些资源包括: 环境物体(星球装饰) 资源(如黏土或铁矿等资源矿床) 建筑 宇宙飞船 粒子类型 纹理包 你可以同时打开多个不同的资源。要创建资源,请点击“文件...”,然后点击“新建...”。此时会弹出“新建资源”窗口。

在其中你可以选择名称和类型。资源位置将自动确定。点击“创建”会生成一个空的资源文件并打开你的新资源,以便你开始编辑。 你也可以编辑现有资源。为此,你需要点击“打开...”并选择资源文件。 注意:要能够选择任何类型的文件,请在文件对话框右下角的组合框中选择“所有文件”。 测试你的模组 为避免每次修改后都要将模组更新到Steam创意工坊,你可以让基础游戏将你的模组作为本地模组加载。 为此,你需要将模组复制到游戏安装目录下的“mods”文件夹中。要找到游戏安装目录,你可以在Steam库中右键点击【Planet S】,然后依次选择“管理”→“本地文件”。在那里你会找到【editor】和【mods】文件夹。 在【editor】文件夹中也有一个mods文件夹,里面包含你通过Planet S Tools创建的模组。你只需将模组文件夹(例如名为【Cryptoworld】或【你的模组名称】)复制到【editor】文件夹旁边的mods文件夹中。游戏在启动时会扫描该文件夹并加载你的模组。 如果你对模组进行了修改,请确保重新复制模组。Planet S Tools会从【editor/mods】文件夹上传你的模组文件。 提醒:通过Steam为游戏添加启动选项【-console】以打开游戏控制台。这能帮助你更轻松地发现问题! 在模组脚本中注册内容 在新创建的模组脚本中,你会看到一些预生成的函数。名称 类型 效果 1 ID 字符串 唯一环境物体标识符 2 环境物体资源ID 字符串 环境物体资源文件(.pao)的资源ID 注册资源 ContentRegistry.registerResource(<字符串>, <表格>) 序号 名称 类型 效果 1 ID 字符串 唯一环境物体标识符 2 参数 表格 包含其余参数的Lua表格 表格参数: 名称 类型 效果 resourceTypeID 字符串 资源资产文件(.prs") 语言键 字符串 显示名称 图标纹理ID 字符串 图标纹理文件的资源ID。 快速建造建筑ID 字符串 升级资源矿床("U"键)时要建造的建筑的buildingID 每单位补充价格 数字 用于可补充资源玩法 最小数量 数字 用于可补充资源玩法时的最小数量 最大数量 数字 用于可补充资源玩法时的最大数量 注册星球类型 ContentRegistry.registerPlanetType(<字符串>, <表格>) 编号名称 类型 效果 1 ID 字符串 独特的星球类型标识符 2 参数 表格 包含其余参数的Lua表格 表格参数: 名称 类型 效果 iconID 字符串 地图上使用的星球图标的资源ID farmProductivity 数字 农场的基础生产力(1.0=100%) enableWater 布尔值 星球是否有水。默认值:true enableClouds 布尔值 星球是否有云。默认值:true enableAtmosphere 布尔值 星球是否有大气层。默认值:true大气散射系数 向量3f 影响大气颜色。默认值:(0.1066222407, 0.3244415644, 0.6830134553) 大气散射强度 数值 以不同方式影响大气。默认值:0.8 大气透明度系数 数值 大气的透明程度。默认值:0.48 表层水颜色 向量3f 默认值:(0.1, 0.5427927, 0.45935) 深层水颜色 向量3f 默认值:(0.0, 0.1862, 0.3362) 水波强度 数值 默认值:0.8 水面反射率 数值 默认值:0.8 水面高光强度 数值 默认值:1.5 水速 数字 默认值:2.5 不透明水体 布尔值 默认值:false 自发光水体 布尔值 默认值:false 噪波尖刺度 数字 默认值:1.35 噪波高度差 数字 默认值:0.58 噪波丘陵度 数字 默认值:4.4 噪波扭曲强度 数字 默认值:0.035 噪波锐度 数字 默认值:0.075 噪波频率 数字 默认值:0.005 气态行星 布尔值 该行星类型是否为气态行星。默认值:false。强制将启用水体和启用云层设为false。太空港ID 字符串 对应的太空港建筑ID,默认值为“b_spaceport” 仓库ID 字符串 对应的仓库建筑ID,默认值为“b_warehouse” 沙地颜色 三维向量 沙地颜色的RGB值 山脉纹理ID 字符串 山脉纹理资源的资源ID 高度过渡 二维向量 保持默认值即可,默认值:(-0.15, 0.15) 解锁条件 表格 用于定义能够殖民该类型星球的条件的Lua表格。详见示例。 它们对环境物体和资源的生成至关重要 环境物体 表格 Lua表格,用于定义环境物体的生成。详见示例。 资源 表格 Lua表格,用于定义资源的生成。详见示例。 种植模式 表格 Lua表格,列出该星球上可能的种植模式。详见示例。 确定地块种植模式回调 函数 Lua函数,用于自定义地块种植模式。若为nil,则使用标准生成方式。详见示例。 注册火箭 ContentRegistry.registerRocket(字符串, 表格) 编号名称 类型 效果 1 ID 字符串 独特的火箭标识符 2 参数 表格 包含剩余参数的Lua表格 表格参数: 名称 类型 效果 iconID 字符串 纹理资源文件的资源ID langKey 字符串 显示名称 constructionTime 数字 建造时间(秒) constructionCostMoney 数字 建造费用(信用点) constructionCostItems 表格 建造火箭所需物品的Lua表格。参见示例。速度 数字 火箭的飞行速度 加速时间 数字 加速所需的时间(秒) 爆炸持续时间 数字 撞击的持续时长 爆炸半径 数字 伤害区域的半径。伤害区域在撞击期间(即“爆炸持续时间”内)会逐渐扩大至爆炸半径 每秒伤害 数字 伤害区域内每游戏刻(每秒20次)造成的伤害 震中半径 数字 震中的半径。震中是一个额外的伤害区域,用于在撞击点周围造成更高伤害震中伤害倍率 数字 应用于震中伤害区域内建筑的倍率 注册炮塔 ContentRegistry.registerTurrets(<字符串>,<表格>) 编号 名称 类型 效果 1 ID 字符串 唯一火箭标识符 2 参数 表格 包含其余参数的Lua表格 炮塔可以有TURRET_TYPE_PROJECTILE(抛射物型炮塔)或TURRET_TYPE_LASER(激光型炮塔)类型。由于它们的参数存在根本差异,我们将在单独的表格中展示。如果模组处于激活状态,游戏会在特定节点调用这些函数来获取模组注册的内容。通常情况下,你无需修改“registerMod”函数,保持其生成时的状态即可。其他函数如果不需要,可以将其删除,因为它们是可选的。这些函数是否存在不会影响Steam创意工坊中的模组标签。 游戏会按特定顺序注册内容,具体如下: 世界类型 物品 地块种植模式 人口类型 资源 环境物体 星球类型 火箭 炮塔 建筑 建筑菜单条目 宇宙飞船 科技 注册函数不必按此顺序排列。按顺序排列只是有助于理解不同内容类型之间的一些依赖关系。类型=TURRET_TYPE_PROJECTILE: 名称 类型 效果 类型 枚举 TURRET_TYPE_PROJECTILE 齐射数量 数字 一次齐射包含的独立射击次数 齐射速度 数字 射击间隔时间(秒) 齐射冷却 数字 齐射之间的间隔时间(秒) projectileSpeed 数字 炮弹速度 spaceships伤害 数字 对飞船的每发炮弹伤害 buildings伤害 数字 对建筑的每发炮弹伤害 散射半径 数字 范围伤害半径 类型=TURRET_TYPE_LASER: 名称 类型 效果 类型 枚举 TURRET_TYPE_LASER 充能时间 数字 达到最大伤害所需时间(秒) 最小伤害 数字 每段时间最小伤害 最大伤害 数字 每段时间最大伤害 激光颜色 三维向量 激光束颜色 建筑注册 ContentRegistry.registerBuilding(<字符串>, <表格>) Nr名称 类型 作用 1 ID("buildingID") 字符串 唯一建筑标识符 2 参数 表格 包含其余参数的Lua表格 表格参数: 名称 类型 作用 langKey 字符串 显示名称 buildingTypeID 字符串 建筑资源文件的资源ID("."placingMode 字符串 此建筑可放置的种植模式ID resourceID 字符串 此建筑必须放置的资源ID iconID 字符串 图标纹理文件的资源ID upkeep 数字 每分钟维护费用 constructionCostMoney 数字 以信用点计算的建造费用 constructionCostItems 表格 建造该建筑所需物品的Lua表格。参见示例。 productionTime 数字 用于生产或消耗物品时。持续时间(秒)。powerConsumption 数字 激活状态下的功耗 powerProduction 数字 激活状态下的发电量 numOfFields 数字 最大场地数量(例如农场或太阳能发电厂) rotateToParent 布尔值 用于场地与农场的关联(例如太阳能收集器)。默认值为“false”。 generatesMoney 布尔值 该建筑是否产生金钱而非消耗金钱。默认值为“false”。 residentsCount 数字 该建筑生成的居民数量。仅为视觉效果。等级 数字 生产物品ID 字符串 生产物品的ID 最大生命值 数字 最大生命值上限 军事分数 数字 拥有该建筑获得的军事分数 抑制粒子效果 布尔值 允许粒子效果,即使玩家不在同一星球(例如火箭发射井) 模块 表格 Lua表格,定义建筑的模块。模块赋予建筑功能。 建筑模块1 存在多种类型的建筑模块。有些可以相互组合,有些则不能。一般来说,不能/不应组合会生成用户界面的建筑模块。 模块ID 是否生成用户界面?描述 【库存】否:为建筑配备库存,使其能够存储物品。 【物流】仅适用于仓库、太空港或 depot:该建筑会被纳入星球物流系统。 【耗电】(pwr_consuming 的缩写)否:建筑消耗星球的电力。 【发电】是:产生电力,发电方式可能有所不同。 【农业】是:拥有田地时会生产某种物品,会考虑星球的肥力。 【开采】是:与农业类似,但忽略星球肥力,且每隔几个周期会额外消耗一种物品。采矿 是 生产物品。通常放置在资源矿床上。 装配 是 通过消耗最多三种物品来生产一种物品类型。 建造 是 具备建造宇宙飞船的能力。 居住 是 可容纳居民,可作为城市中心或公共建筑。 军事 是 经过一定时间后可向敌方宇宙飞船开火。同时也是星球防御的一部分。 护盾投射器 是 向附近建筑投射护盾,为它们提供护盾值。 激光 是 可以是星际激光主体或升级建筑。火箭发射井 是 具备建造和发射火箭的能力。 地形改造 是 具备放置地形改造站点以改变地块种植模式的能力。不支持模组化种植模式。 每种模块类型需要不同的参数。下表对其进行说明: 模块ID【inventory】: 参数名称 参数类型 描述 物品 表格 Lua表格,列出建筑库存中可能存储的物品类型。 模块ID【logistic】: 参数名称 参数类型 描述 仓库 布尔值 建筑是否作为无人机仓库。默认值为“false”。太空港 布尔值 该建筑是否作为宇宙飞船的太空港。默认值为“false”。 仓库 布尔值 该建筑是否算作仓库,以增加星球的库存容量。默认值为“false”。 囤积物品 表格 Lua表格,列出后勤系统应运送至该建筑的物品类型。该建筑应为每种物品类型配备一个库存槽位。 模块类型“pwr_consuming”无任何参数。 模块ID“pwr_producing”: 参数名称 参数类型 描述 消耗物品类型 字符串 用于发电的消耗物品类型ID,例如“i_coal”。模块类型ID 字符串 作为“类似场地”建筑的建筑ID,例如“b_solarCollector”。 消耗物品类型2 字符串 每隔几个生产周期消耗的物品ID。参见参数“cyclerPerInput”。 输入周期数 数字 每隔多少个周期消耗“消耗物品类型2”中指定的物品。 产出物品类型 字符串 每隔几个生产周期产出的物品ID。参见参数“cyclerPerOutput”。 输出周期数 字符串 每隔多少个周期产出“产出物品类型”中指定的物品。假设你正尝试注册一种新的资源类型,并在自定义星球类型中提及它。现在出现了问题,你的资源类型无法正确注册并被丢弃。当游戏注册你的星球类型时,它找不到你的资源类型,因此也会将其从星球类型中丢弃。最终注册的星球将不包含你的资源。 我们为你介绍:内容注册表!它的作用是注册和管理所有类型的游戏内容。每种类型都有一个需要特定参数的函数。 下面我们将描述所有注册函数及其参数。建议你从Steam创意工坊下载我们的示例模组【Cryptoworld】。在模组脚本中,你可以看到所有函数的示例,它是一个很有帮助的参考。模块ID【farming】: 参数名称 参数类型 描述 fieldTypeID String 作为田地的建筑ID。 itemTypeProduced String 生产的物品ID。 模块ID【extracting】: 参数名称 参数类型 描述 fieldTypeID String 作为田地的建筑ID。 itemTypeProduced String 生产的物品ID。 itemTypeConsumed String 每隔几个生产周期消耗的物品ID。参见参数【cyclerPerInput】。 cyclerPerInput Number 消耗由【itemTypeConsumed】指定的物品的周期数。模块ID【mining】: 参数名称 参数类型 描述 itemTypeProduced 字符串 产出物品的ID 模块ID【assembling】: 参数名称 参数类型 描述 inputs 表格 列出消耗物品类型的Lua表格 outputs 表格 列出产出物品类型的Lua表格 模块类型【constructing】无任何参数。 模块ID【residential】: 参数名称 参数类型 描述 type 数字 指定住宅建筑的类型。0=住宅,1=市中心,2=公共建筑。人口类型ID 字符串 此住宅中居住人口的ID。 城市中心等级 数字 城市中心建筑的等级,从1开始。 显示人口类型ID 表格 Lua表格,列出要显示的人口数量。 建筑模块2 模块ID【military】: 参数名称 参数类型 描述 准备时间 数字 建筑可射击前的秒数。 炮塔ID 字符串 该建筑使用的炮塔类型ID。 模块ID【shieldProjector】: 参数名称 参数类型 描述 准备时间 数字 建筑可射击前的秒数。模块ID【laser】: 参数名称 参数类型 描述 type 数字 0=主建筑,1=冷却单元,2=冷凝器,3=变压器 shieldpointsProjected 数字 为范围内附近建筑提供的护盾值数量 cooldown 数字 冷却持续时间(秒) chargeCapacity 数字 射击前所需的能量点数fireDuration 数字 开火时间(秒)。 damageBuildings 数字 每次攻击对建筑物造成的伤害。 damageSpaceships 数字 每次攻击对宇宙飞船造成的伤害。 impactRadius 数字 冲击伤害区域半径。 laserIndex 数字 用作激光的建筑部件索引。 bonus 数字 取决于“type”参数的值。若为1=冷却时间减少,2=开火持续时间增加,3=伤害增加。 模块ID“rocketSilo”: Parameter name 参数类型 描述 rocketIDsConstructable 表格 Lua表格,列出此发射井可建造的火箭类型。最多三种。launchTime 数字 发射序列持续时间(秒)。 doorIndex1 数字 用作第一道门的建筑部件索引。 doorIndex2 数字 用作第二道门的建筑部件索引。 doorOpenTime 数字 门打开所需时间(秒)。 doorCloseTime 数字 发射序列接近结束时门关闭所需时间(秒)。 maxDoorRotation 数字 角度(度)。 rocketSpawnDepth 数字 从建筑中心向行星中心的偏移量。提示值【9.0】。模块ID“terraforming”: 参数名称 参数类型 描述 isModule 布尔值 此建筑是否为地形改造尺寸而非主地形改造建筑。 moduleBuildingID 字符串 用作地形改造场所的建筑ID。 注册建筑菜单条目 这里实际上有两个需要了解的函数。你可以创建一个新的文明标签页,或者将建筑菜单项添加到现有标签页中。建筑菜单中的“科学”标签页就是文明标签页的一个示例,它包含“开发者”“研究员”和“空想家”子标签页。要创建新标签页,请使用以下函数: ContentRegistry.registerBuildingMenuCivilizationTab(<字符串>, <表格>) 编号 名称 类型 效果 1 ID 字符串 独特的文明标签标识符 2 参数 表格 包含其余参数的Lua表格 表格参数: 名称 类型 效果 langKey 字符串 显示名称 iconStyleUnchecked 表格 定义未悬停和未选中时的图标样式。参见示例。 iconStyleChecked 表格 定义悬停或选中时的图标样式。参见示例。 unlockCondition 表格 定义解锁条件以使其可见。参见示例。层级 表格 Lua 表,用于定义该文明标签页的子标签。详见示例。 接下来,我们希望将建筑菜单条目添加到文明子标签页中。这可以通过以下函数实现: ContentRegistry.registerBuildingMenuEntry(<字符串>, <字符串>, <表格>) 编号名称 类型 作用 1 文明标签ID 字符串 建筑菜单条目应位于的唯一文明标签标识符 2 子标签ID 字符串 建筑菜单条目应位于的唯一子标签标识符 3 参数 表格 包含剩余参数的Lua表格 表格参数: 名称 类型 作用 entries 表格 定义实际条目的Lua表格。参见示例。注册物品 注册物品 为了让大家轻松理解,我们先从物品类型而非世界类型开始介绍。下面来看一个注册物品的示例: ContentRegistry.registerItem("i_coins", "i_coins.png", 100, ITEM_CATEGORY_CONSUMABLES, 1, 5, false, "Coins") 因此,该函数的格式如下: ContentRegistry.registerItem(<字符串>, <字符串>, <数字>, <枚举>, <数字>, <数字>, <布尔值>, <字符串>) 编号注册宇宙飞船 ContentRegistry.registerSpaceship(<字符串>, <表格>) 序号 名称 类型 作用 1 ID 字符串 宇宙飞船的唯一标识符 2 参数 表格 包含其余参数的Lua表格 表格参数: 名称 类型 作用 spaceshipTypeID 字符串 宇宙飞船资源文件的资源ID("."langKey 字符串 显示名称 iconID 字符串 图标纹理资源的资源ID speed 数字 飞船速度 accellerationTime 数字 加速至最高速度所需的时间(秒) rotationSpeed 数字 旋转速度 itemSlots 数字 物品槽数量 upkeep 数字 每分钟维护费用 spaceshipYard 字符串 能够建造此飞船的飞船建造厂的buildingID constructionTime 数字 建造时间(秒) constructionCostMoney 数字 建造费用(信用点) constructionCostItems 表格 建造飞船所需物品的Lua表格。参见示例。 possibleUnlockConditions 表格 解锁条件的Lua表格。满足其中一项即可解锁飞船。参见示例。maxHitpoints 数字 最大生命值 baseShieldpoints 数字 最大护盾值 militaryScore 数字 拥有该飞船可获得的军事评分 turretID 字符串 所使用的炮塔类型ID maxTurretsActive 数字 激活炮塔数量上限 estimatedTurretsBuildings 数字 预估同时攻击目标建筑的炮塔数量,用于DPS计算 estimatedTurretsSpaceships 数字 预估同时攻击目标飞船的炮塔数量,用于DPS计算 usedByPirates 布尔值 海盗是否可选择生成该类型飞船默认值为“false”。 disguiseEnabled 布尔值 此飞船是否能在同阵营飞船附近伪装 disguiseRange 数字 飞船可进行伪装的范围 disguiseCap 数字 可伪装飞船的最大数量 revealRange 数字 敌方飞船可揭露所有伪装飞船的范围 victorySpaceship 布尔值 此飞船是否作为胜利飞船。会阻止其正常使用。默认值为“false”。 注册科技 ContentRegistry.registerTechnology(<字符串>, <枚举>, <表格>) 编号名称 类型 效果 1 ID 字符串 独特的科技标识符 2 研究方向 枚举 研究方向_科学或研究方向_军事 3 参数 表格 包含其余参数的Lua表格 表格参数: 名称 类型 效果 requiredPoints 数字 完成该科技所需的研究点数 linkID 字符串 允许科技与另一科技关联的标识符(例如:在科学树中研究仓库,会自动在军事树中研究该仓库) groupID 字符串 用于对多个科技进行分组的标识符在同一组中,只能研究一项科技。 解锁条件 表格 Lua 表格,用于定义解锁条件。详见示例。 所需科技 表格 Lua 表格,列出解锁本科技所需的前置科技。只需研究给定科技中的一项即可。若已定义解锁条件,则以此为准。 解锁建筑 表格 Lua 表格,列出解锁的建筑。 解锁飞船 表格 Lua 表格,列出解锁的飞船。 解锁火箭 表格 Lua 表格,列出解锁的火箭。 效果 表格 Lua 表格,定义研究该科技后的效果。详见示例。注意:要研究一项科技,必须满足其解锁条件,并且如果定义了所需科技,则其中一项必须已被研究。 共有三种不同的效果类型: 效果类型 描述 模块效果类型 影响特定的建筑模块。效果表需要一个名为“moduleTypes”的表格,列出受影响的模块类型。详见“注册建筑”章节中的建筑模块列表。 建筑效果类型 影响特定的建筑类型。效果表需要一个名为“buildingIDs”的表格,列出受影响的建筑类型。 飞船效果类型 影响特定的飞船类型。效果表需要一个名为【spaceshipIDs】的表格,用于列出受影响的飞船类型。 根据所选效果类型的不同,效果表中需要提供不同的值: 字段名称 | 适用效果类型 | 描述 ---|---|--- moduleTypes | MODULE_EFFECT_TYPE | planetTypeIDs | MODULE_EFFECT_TYPE | 星球ID populationEffect | MODULE_EFFECT_TYPE | buildingIDs | BUILDING_EFFECT_TYPE | 受影响建筑 spaceshipIDs | SPACESHIP_EFFECT_TYPE | 受影响飞船 productivityBonus | MODULE_EFFECT_TYPE | 生产速度提升(1.0 = 100%) itemLimitBonus【模块效果类型】每个仓库额外提供的存储容量 upkeepBonus【建筑效果类型】维护费用降低 energyConsumptionBonus【建筑效果类型】电力消耗降低 energyProductionBonus【建筑效果类型】电力产量提升 speedBonus【飞船效果类型】速度提升 hitpointsBonus【建筑效果类型】和【飞船效果类型】最大生命值提升 damageBonus【建筑效果类型】和【飞船效果类型】伤害提升 readySpeedBonus【建筑效果类型】军事建筑启动所需时间减少 repairSpeedBonus【飞船效果类型】修复速度提升 shieldStrengthBonus【建筑效果类型】和【飞船效果类型】投射护盾点数提升 shieldRegenerationSpeedBonus建筑效果类型和飞船效果类型 护盾再生率提升 攻击范围加成 飞船效果类型 攻击范围增加 建造速度加成 飞船效果类型 建造时间减少 护盾投射器激活 飞船效果类型 激活此飞船的护盾投射(例如名称 类型 效果 1 ID 字符串 物品唯一标识符 2 图标纹理ID 字符串 物品纹理的资源ID,以“textures/items/”开头 3 GUI序号 数字 物品在用户界面中的排序索引 4 类别 枚举 选项:物品类别_建筑材料、物品类别_消耗品、物品类别_中间品、物品类别_原材料、物品类别_农产品 5 等级 数字 物品首次使用时的人口等级 6 参考价格 数字 创建交易条目时使用 7 建筑材料组件 布尔值 物品是否用于生产建筑材料。机器人需要此属性 8 语言键 字符串 物品的显示名称 注册世界类型 内容注册表保护器与守护者) shieldProjectorRange 飞船效果类型 护盾投射范围 shieldProjectorPoints 飞船效果类型 投射护盾点数 disguiseCapPlus 飞船效果类型 伪装上限提升 cooldownBonus 建筑效果类型 火箭发射井冷却时间减少 覆盖内容 要覆盖或扩展现有内容对象,只需再次调用“register<X>”函数(例如“registerPlanetType”)。调用中包含的每个元素都将替换先前的元素,例如建筑中的“modules”。仅有少数例外情况: - 世界类型中的行星环只能添加,不能替换 - 生成的资源和环境物体只能添加(因此,可以通过传入新的最小/最大数值来间接覆盖生成资源的数量) - 【overrideItem】可用于覆盖特定元素,无需再次传入所有参数 - 文明标签中的等级只能添加,不能替换 结语 我们希望本指南能帮助你了解《Planet S》的模组制作方式。如前所述,查看示例模组【Cryptoworld】的文件会对你有很大帮助,因为本指南的理论性和抽象性较强。 如果你对本指南有任何补充建议,欢迎在评论区告诉我们。我们也想向你推荐我们的Discord服务器,你可以在那里与我们和其他玩家讨论模组相关内容。registerWorldType(<字符串>, <表格>) 序号 名称 类型 效果 1 ID 字符串 唯一的世界类型标识符 2 参数 表格 包含其余参数的Lua表格 第二个参数,即Lua表格,难以描述。最好参考示例。不过我们还是在此说明可能的参数及其效果: 名称 类型 效果 startSpaceshipID 字符串 玩家初始获得的飞船类型ID startItems 表格 描述初始飞船中物品的表格。详见示例。tinyPlanets 布尔值 生成的是普通大小行星还是微型行星 sunSoundID 字符串 太阳音效的资源ID planetRings 表格 描述生成行星环的表格。详见示例。 注意:lua表格内的参数名称区分大小写! 注册人口类型 ContentRegistry.registerPopulationType(<字符串>, <表格>) 序号 名称 类型 作用 1 ID 字符串 唯一的人口类型标识符 2 Parameters 表格 包含其余参数的Lua表格 表格参数: 名称 类型 作用 tier 数字 等级示例:工人为1级,开发者为2级。 civilizationType:枚举类型 选项: iconID:字符串,图标纹理的资源ID langKey:字符串,显示名称 minResidents:数字,居住在住宅中的最低居民数量 maxResidents:数字,居住在住宅中的最高居民数量 economicScore:数字,每位居民带来的经济分数 needs:表格,定义此类人口需求的Lua表格。详见示例。 subsequentBuildingIDs:表格,列出可升级建筑的buildingID的Lua表格。大多数情况下仅一个。详见示例。注册地块种植模式 ContentRegistry.registerCultivationMode(<字符串>, <表格>) 编号 名称 类型 作用 1 ID 字符串 地块种植模式的唯一标识符 2 参数 表格 包含其余参数的Lua表格 表格参数: 名称 类型 作用 langKey 字符串 显示名称 iconStyle 表格 定义地块种植模式图标的Lua表格。详见示例。 注册环境物体 注册环境物体 ContentRegistry.registerAmbientObjects(<字符串>, <字符串>) 编号




换一换 













