SirenHytale
本节页面
  1. 修真
  2. 开服指南
  3. 模组兼容

模组兼容

修真模组的设计是与其他模组并肩而立,而非叠加其上。以下三个模组会在服务器启动时自动检测,各自改变修真模组的行为,无需任何配置。

三者皆非必需。未安装时,相应功能只是不存在:不会报错,不会警告,也无需手动关闭任何设置。

模组启用的功能是否必需
Endless Leveling修真将属性加成交由其统一结算,使两套成长体系相加而非相乘否
PlaceholderAPI约 60 个 %cultivation_...% 占位符,可用于聊天、计分板、玩家列表与告示牌否
Marriage双修 —— 道侣同修否

三者均在启动时检测一次并记入服务器日志,因此你随时可以确认修真模组认为装了什么:

[Cultivation] Endless Leveling found - handing over max health and outgoing damage so the two do not stack.
[Cultivation] PlaceholderAPI found - %cultivation_...% placeholders are available.
[Cultivation] Marriage 2.0.0 found - Partnered Cultivation is available.

Endless Leveling

两个模组都会提升同样的两项数值:生命上限与输出伤害。(第三项,炼体的减伤,处理方式相同,见下文。)若各行其是,二者便相乘 —— 修真的境界加成叠在 Endless Leveling 的等级加成之上,兼修二者的玩家便携带着两套完整成长曲线的乘积。这不是任何一方的平衡所预期的。

安装 Endless Leveling 后,修真模组不再自行施加这两项,转而将其发布到 Endless Leveling 自己的加成通道中。由 Endless Leveling 作一次已经包含修真那一份的统一结算。

要点在于:你的修真数值本身毫无变化。 生命仍来自境界,伤害仍随等级增长,种族、天赋树与功法的倍率照旧作用其上。改变的只是叠加方式 —— 两套成长体系现在相加,而非相乘。

修真模组的其余一切均不受影响。灵气、境界、仪式、宗门、道、功法、灵兽、洞府与阵法,仍完全归修真模组所有。

调整交接

设置位于 Compatibility/EndlessLevelingConfig.json,并在管理菜单中自成一节 —— 未安装 Endless Leveling 时该节完全隐藏。游戏内的这一节涵盖下列除 Handoff-Protection 之外的所有设置,后者须在文件中编辑。该文件亦在核心配置中有完整说明。

设置默认值作用
Handoff-Healthtrue将生命上限交予 Endless Leveling
Handoff-Damagetrue将输出伤害交予 Endless Leveling
Handoff-Protectiontrue将炼体的减伤交予 Endless Leveling 的 DEFENSE 属性,使两个模组不会各自独立地削减受到的伤害
Handoff-Health-Scale1.0交出修真生命加成的比例
Handoff-Damage-Scale1.0交出修真伤害加成的比例

两个比例值的存在,是为了让同时运行两个模组的服务器可以重新平衡,而不必改动仅装修真模组的服务器同样读取的配置。将 Handoff-Health-Scale 设为 0.5,即交出修真本应施加的一半。

将某项交接关闭,该属性便交还修真模组自行施加 —— 单独运行时正确,两个模组同装时则会叠加在 Endless Leveling 之上。开关在该修士下一次境界变动时生效,已发布的加成也在同一刻撤回,因此二者绝无同时生效之虞。

PlaceholderAPI

修真模组会注册一个 cultivation 扩展,因此凡是经 PlaceholderAPI 处理文本之处 —— 聊天格式、计分板、玩家列表、悬浮字、告示牌 —— 皆可显示修士的境况。

无需任何配置:安装 PlaceholderAPI 本身即是全部设置。完整清单见占位符页,或在游戏中执行 /papi info cultivation。

Marriage

Marriage 模组定义了谁与谁结为道侣,双修完全以此为前提。没有 Marriage,便无从定义道侣,故无论 Society/PartnerConfig.json 如何设置,该功能始终关闭。

Hytale 服务器版本

v0.11.2 Cultivation v0.11.2 针对 Hytale 0.7.2(Update 7 正式版线)构建,清单声明 ServerVersion: >=0.7.2 <0.8.0,与 v0.11.1(它把目标从 0.7.0 预发布版移了过来)相同。道印、道域与罗盘提示用到了该服务器的新特性,因此 0.7.0 预发布服务器不再是目标;当模组声明的服务器范围与实际运行的服务器不符时,Hytale 会在启动时发出警告。v0.11.0 则是针对 0.7.0-pre.5.1 构建的(ServerVersion: >=0.7.0-pre.0 <0.8.0)。

Cultivation 依旧无法在 Update 6 服务器上运行 —— 在 Update 6 上请继续使用 v0.10.3。官方扩展出于同样的原因都要求 Update 7;自 v0.11.1 起,它们也都声明了 ServerVersion: >=0.7.2 <0.8.0,各自的版本号不变。

升级前请备份世界。 世界一旦被 Update 7 服务器打开,Update 6 服务器就再也无法打开它。

版本兼容

v0.7.4 新增。扩展可以公布自己适用于哪些 Cultivation 版本,这样一对被发现有问题的搭配,在两个 jar 都已发布之后仍能得到纠正。

这刻意设为第二层。第一层是扩展自己的 manifest.json,其 Dependencies 条目接受完整的 semver 区间,而不只是一个下限:

"Dependencies": { "Siren:Cultivation": ">=0.7.4 <0.8.0" }

这一层是绝对的、离线的 —— 引擎在扩展的任何一行代码运行之前,就会拒绝在区间之外加载它。已发布的清单做不到的,是描述一个当时无人知晓有问题的搭配。而公布的兼容清单可以,因为它是一个无需发版即可更改的文件。

一旦某个搭配被列为有问题,守规矩的扩展会自行退场,并在控制台说明原因,而不是悄悄地出错。什么都不会被删除,待版本重新匹配,下次启动时一切自会恢复。

它在各个方向上都是失败即放行。站点不可达、清单格式有误,或某个无人写过条目的版本,都会让模组原样运行,因此离线的服务器绝不会被告知它的模组彼此相左。如何注册一条,见注册表。

当前的扩展版本

v0.11.0 下列每个扩展都已为 Hytale Update 7 重新构建,并要求 Cultivation v0.11.0 或更高版本;v0.11.1 现在它们都针对 0.7.2 服务器构建并声明 ServerVersion: >=0.7.2 <0.8.0,版本号与所要求的 Cultivation 版本均未变化。它们都无法在 Update 6 服务器上运行;在 Update 6 上请保留各自的上一版本(SoulRings 没有更早的发布)。

扩展版本所需 Cultivation备注
修真:玉简v0.4.0v0.11.0 或更高版本Update 7 版本。无玩法变化。
修真:圣体v0.4.0v0.11.0 或更高版本Update 7 版本。无玩法变化。v0.3.0 新增了天命所钟。
修真:天火v0.3.0v0.11.0 或更高版本Update 7 版本。天火的元素免疫如今也涵盖 Update 7 原版的土、水、风与雷电伤害。
修真:逆行v0.2.0v0.11.0 或更高版本Update 7 版本。修复了 /reverse concede 对一场尚未结束的斗法提前结算赔付的问题。
修真:房东v0.2.0v0.11.0 或更高版本Update 7 版本。无玩法变化。
修真:职业v0.2.0v0.11.0 或更高版本Update 7 版本。无玩法变化。
修真:九死一生v0.2.0v0.11.0 或更高版本Update 7 版本。其称号已迁移到 Update 7 支持的称号调用;外观不变。
修真:橡皮鸭v0.2.0v0.11.0 或更高版本Update 7 版本。无玩法变化。
修真:蜗族秘境v0.2.0v0.11.0 或更高版本Update 7 版本。无玩法变化。
修真:渡劫天问v0.2.0v0.11.0 或更高版本Update 7 版本。其称号已迁移到 Update 7 支持的称号调用;外观不变。
SoulRings · 斗罗大陆v0.1.0v0.11.0 或更高版本开发中,尚未发布。其清单下限为 Cultivation v0.11.0。

编写你自己的兼容

修真模组的接口正是为此而设。扩展可以读取每一个配置文件、驱动修为进程、将自己的设置注册进管理菜单,并监听分布于 53 个类的 377 个事件。

自 v0.7.0 起,替换 Cultivation 进阶阶梯的模组(即 ProgressionProvider)多了一项职责 —— 玩家如今可保留多份存档,切换存档会连带换掉你的模组底下所修的那名修士。在你的 provider 声明 supportsProfiles()、并通过 ProfileEvents 让自己的记录与之同步之前,切换会被直接拒绝,而非做一半 —— 见编写扩展。

若你的模组也施加属性,以下两个调用值得一记:

// 在运行 Endless Leveling 的服务器上,属性加成理应归它结算 ——
// 修真模组已然让路,若扩展再叠加其上,便前功尽弃。
if (CultivationAPI.isEndlessLevelingInstalled()) { ... }

// 仅当 PlaceholderAPI 存在且接受了我们的扩展时为真。
if (CultivationAPI.isPlaceholderApiRegistered()) { ... }

其余细节见编写扩展与接口参考。