另一个巫术魔法系统

另一个巫术魔法系统

将Electroblob's Wizardry法杖魔力替换为深度可配置的玩家魔力系统

JAWMS 为 Electroblob 的 Wizardry 模组赋予了每位玩家一个持久的法力池。施法时消耗的是玩家自身的法力,而非每根法杖各自存储的法力。法力会随时间自然恢复,Wizardry 装备可以提升玩家的法力能力,并且一个可配置的法力条会显示当前法力值。

目前已有一些优秀的模组为 Wizardry 增加了玩家法力系统,例如 Wizardry Player Mana 和 Wizardry Player Mana Tweaked。这些解决方案在其设计范围内运作良好。而 JAWMS 则侧重于为玩家、整合包作者和附属模组开发者提供一个更全面的系统,以便对完整的法力经济进行精细控制。

测试版发布: JAWMS API 仍在测试和完善中,同时相关的附属模组也在开发中。

AI 使用声明: 本模组在开发过程中使用了 AI 代理辅助,基于此代理工作流。项目所有者在开发期间对工作进行了审查。

玩家指南

游戏内变化

  • 法力归属于玩家,因此更换法杖不会提供独立的法力池。
  • 法术会消耗玩家法力。若法力不足,则无法施放法术。
  • 法力会自然恢复,但恢复过程通常会在施法后以及引导持续性法术时短暂暂停。
  • Wizardry 护甲和法袍会增加最大法力值和法力恢复速度。
  • 法力药水瓶可恢复玩家法力,任何配置的剩余恢复量会转给符合条件的 Wizardry 护甲。
  • Wizardry 升级、法器、恶魔封印和法力之泉已适配为与玩家法力交互。
  • 法杖中存储的法力为兼容性而保留,但施法时会被忽略,其过时的显示界面也已隐藏。

Wizardry 的法术选择、等级、冷却、进阶、蓄力行为和法术效果均保持不变。JAWMS 替代的是法力资源本身,而非 Wizardry 的整个施法系统。

法力条与附属模组

内置显示是一个简洁的蓝色法力条。它可以设置为满法力时隐藏、显示不同的数值、使用不同的屏幕锚点和偏移、调整大小,并支持四种填充方向。也可以完全禁用。

喜欢不同显示风格的玩家可以使用附属模组:

前置要求

必需:

  • Electroblob's Wizardry 4.3.19
  • MixinBooter 11.8 或更高版本

可选:

  • Baubles 1.5.2+ 用于启用饰品栏效果

整合包作者指南

JAWMS 的设计使其默认平衡性能够在无需编写额外模组的情况下被替换。整合包可以配置:

  • 基础最大法力值、法力恢复速度以及恢复开始前的延迟时间。
  • 每件 Wizardry 护甲提供的法力值。
  • 基于原版 Wizardry 法力消耗和法术等级的通用法术消耗公式。
  • 针对单个法术的精确法力消耗覆盖值。
  • 法术效率的递减收益强度。
  • 法力药水瓶的恢复量以及 Wizardry 护甲溢出处理行为。
  • 任何已注册物品在穿戴、作为饰品装备或持于任一手中时提供的法力属性。
  • Wizardry 升级、法器、恶魔封印和法力之泉的玩家法力行为。
  • 内置法力条的本地外观和可见性。
  • 服务器允许哪些已注册的附属模组修饰符提供器。

配置文件与重载

JAWMS 会生成三个文件:

  • config/jawms/jawms.cfg 控制共享法力经济、法术消耗、法力药水瓶、Wizardry 护甲默认值、法术效率、配置的物品修饰符以及附属模组提供器控制。
  • config/jawms/integrations/ebwizardry.cfg 控制 Wizardry 升级、法器、恶魔封印和法力之泉。
  • config/jawms/jawms-client.cfg 控制本地 HUD。

有效的服务器端更改可通过 /jawms reload 命令应用。如果集成文件包含无效值,JAWMS 会保留先前有效的集成规则,而不是部分应用损坏的修订。下面的详细参考说明了默认值、公式和配置物品规则格式。

模组开发者指南

JAWMS 包含一个文档化的 Java 8 API。附属模组可以:

  • 通过受支持的操作读取、增加、消耗或设置权威的玩家法力值。
  • 为护甲、饰品栏和任一手中的物品提供装备物品修饰符。
  • 修改最大法力值、法力恢复、恢复延迟、法术效率、法术消耗倍率和恢复权限。
  • 观察法力状态转换并提供同步的工具提示文本。
  • 读取同步的客户端法力状态,并在不依赖内部实现类的情况下替换内置 HUD。

JAWMS 0.3.0 提供增量 API 1.3,同时保留文档化的 API 1.2 二进制接口。已发布的 JAWMS 0.2.0 文件 8621418 为直接通过 CurseMaven 开发提供了相同的 API 1.3 接口。JAWMS Hud Styles 和 JAWMS Classic Bar Integration 均使用公开的 HUD API。

权威的 附属模组开发指南 包含依赖配方、版本与 API 矩阵、服务器端操作、修饰符算法、同步规则、HUD 生命周期和渲染状态职责。受支持的包路径为 com.mahghuuuls.jawms.api 和 com.mahghuuuls.jawms.api.client。

详细系统参考

法力属性与修饰符算法

JAWMS 使用以下不同的概念:

  • 法力: 玩家当前可用的施法资源。
  • 最大法力: 玩家法力池的上限。
  • 法力恢复: 允许恢复时每秒恢复的法力值。
  • 法力恢复延迟: 施法后法力恢复被阻止的持续时间。
  • 法术效率: 减少法术消耗的递减收益点数。
  • 法术消耗倍率: 一个独立的全局或元素特定因子,可提高或降低法术消耗。

最大法力、法力恢复和恢复延迟均使用相同的计算顺序:

max(0, 配置基础值 + 总和(固定加成))
    × (1 + 总和(百分比增加) / 100)
    × 乘积(1 - 每个百分比减少 / 100)

百分比增加会加在一起。每个百分比减少都是一个独立的剩余值乘数。在这些因子计算之后,最大法力值向下取整并限制为至少 1。法力恢复保持非负,并且可以在内部累积小数法力。恢复延迟保持非负,仅在转换为游戏刻时向上取整。

诸如在施法后延迟期间或持续施法期间恢复的权限,与数值恢复速率是分开的。

默认法力与 Wizardry 护甲

config/jawms/jawms.cfg 中的默认值为:

mana {
    S:baseMaximum=60
    S:baseRegeneration=2.4
    S:regenerationLockoutSeconds=2.0
}

wizardry_armor_defaults { B:enabled=true S:helmetMaximum=10 S:helmetFlatRegeneration=0.4 S:chestMaximum=10 S:chestFlatRegeneration=0.4 S:legsMaximum=10 S:legsFlatRegeneration=0.4 S:bootsMaximum=10 S:bootsFlatRegeneration=0.4 }

因此,未穿戴装备的玩家拥有 60 点最大法力值和 2.4 点法力恢复。每穿戴一件 Wizardry 护甲或法袍,都会增加 10 点最大法力值和 0.4 点法力恢复。全套装备可提供 100 点最大法力值和 4 点法力恢复。

为现有物品添加法力属性

item_modifiers.rules 列表可以为任何已注册物品分配法力属性,而无需编写附属模组。规则使用以下格式:

命名空间:物品[@元数据或-*]=字段:值;字段:值

该物品仅在作为护甲或饰品装备,或持于主手或副手时贡献属性。物品栏其他位置的物品无效。不同的已激活槽位会分别贡献效果。 @* 匹配所有元数据值;使用数字(如 @3)可针对特定变体。不支持 NBT 匹配。

例如:

item_modifiers {
    S:rules <
        minecraft:diamond_chestplate@*=flat_maximum:20;flat_regeneration:0.5
        minecraft:blaze_rod@*=maximum_increase:25;regeneration_increase:50;global_efficiency:20;cost_multiplier_fire:0.75
     >
}

穿戴钻石胸甲时提供 +20 法力上限 和 +0.5 法力恢复。手持烈焰棒时提供 +25% 法力上限、+50% 法力恢复、+20 法术效率 和 -25% 火焰法术法力消耗。

JAWMS 会自动为匹配的物品添加同步的工具提示值。有益变化显示为蓝色;惩罚性变化(如降低法力上限、降低恢复速度、延长恢复延迟或提高法术消耗)显示为红色。编辑规则并运行 /jawms reload 会同时更新服务器行为和已连接客户端的工具提示。

可用字段包括:

  • flat_maximum、maximum_increase 和 maximum_reduction
  • flat_regeneration、regeneration_increase 和 regeneration_reduction
  • flat_lockout、lockout_increase 和 lockout_reduction
  • global_efficiency 以及元素特定值,如 efficiency_fire
  • global_cost_multiplier 以及元素特定值,如 cost_multiplier_fire
  • regenerate_during_lockout 和 regenerate_during_continuous

配置的物品规则对该物品具有权威性:它会完全替换内置的 Wizardry 护甲或附属模组提供的物品贡献,而不是与之静默叠加。

法术消耗

通用法术消耗公式使用每个法术的原始 Wizardry 法力消耗和等级。当原始平衡不适合玩家法力经济时,单个法术覆盖会优先生效。

默认配置为:

spells {
    S:formula=min(original_cost, tier * 25)
S:overrides &lt;
 &gt;

}

original_cost 是 Wizardry 在 JAWMS 修改前注册的消耗。 tier 对于新手为 1,学徒为 2,高级为 3,大师为 4。默认公式将廉价法术保持在原始消耗,同时根据等级将配置的基础消耗上限设为 25、50、75 或 100 法力。

表达式语言支持数字、两个变量、括号以及以下操作:

  • 加法和乘法: original_cost + tier * 5
  • 减法和除法: (original_cost - 2) / tier
  • 取余和幂运算: (tier ^ 2) % 5
  • 最小值和最大值: min(original_cost, tier * 25) 和 max(1, original_cost)
  • 绝对值: abs(original_cost - 50)
  • 向下或向上取整: floor(original_cost / 3) 和 ceil(original_cost / 3)
  • 四舍五入: round(original_cost / 3)

覆盖使用完整的法术注册 ID 和一个非负整数消耗:

spells {
    S:formula=min(original_cost, tier * 25)
S:overrides &lt;
    ebwizardry:black_hole=120
    ebwizardry:magic_missile=4
 &gt;

}

覆盖始终优先于公式。无效的公式或结果会安全地回退到受影响法术的原始消耗,而未知的覆盖则会被忽略并发出警告。

法术效率并非百分比。使用配置的缩放系数 K,其消耗因子为:

K / (K + 适用效率)

使用默认缩放系数 100 时,100 点效率使法术消耗减半,200 点消耗变为三分之一,300 点则变为四分之一。全局和匹配元素消耗倍率随后会独立地与效率因子以及 Wizardry 保留的上下文消耗因子相乘,最后将最终消耗向上取整。

持续法术会以半秒为部分消耗其配置的每秒消耗量。如果无法支付下一个部分,施法将停止,且不会使法力变为负值。

Electroblob's Wizardry 集成

Wizardry 护甲和法袍默认提供固定最大法力值和法力恢复,因此准备充分的巫师能更好地受益于后续的百分比加成。其原有的法术消耗减免特性被替换为学派匹配的法术效率。

JAWMS 为之前依赖法杖法力的 Wizardry 机制提供了可配置的玩家法力行为:

  • 存储升级: 手持升级后的法杖时增加最大法力值。
  • 冷凝升级: 手持升级后的法杖时增加法力恢复。
  • 虹吸升级: 在符合条件的击杀后恢复法力。
  • 近战升级: 消耗玩家法力来增强成功的法杖近战攻击。
  • 冷凝之戒: 增加法力恢复,多个戒指同时装备效果可叠加。
  • 虹吸之戒: 增强虹吸升级的法力恢复效果。
  • 萃取之戒: 在可归因的 Wizardry 巫术击杀后恢复法力。
  • 完美主义者: 当发出的奥术飞箭未命中时,退还玩家为此支付的法力。
  • 恶魔封印: 可以用饥饿值来弥补法力缺口,同时保留一个可配置的最低饥饿值。
  • 法力之泉: 提供法力恢复,并可能允许在施法后延迟期间恢复法力。

每个替换功能都可以独立启用、禁用和调整。禁用其中一个功能绝不会恢复过时的法杖法力行为。不相关的 Wizardry 行为,例如法力之泉的冷却缩减和巫师护甲独立的防御法力,保持完整。

法力药水瓶会先恢复玩家法力,然后将任何剩余的、可配置的恢复量转给符合条件的 Wizardry 护甲。它们永远不会补充法杖法力,其工具提示会显示配置的恢复量和行为。

内置 HUD 参考

内置 HUD 可以:

  • 启用或禁用。
  • 法力全满时隐藏。
  • 不显示数字、显示当前法力、最大法力或两者兼有。
  • 更改文本缩放、法力条长度和粗细。
  • 使用九个屏幕锚点中的任意一个,并支持正负偏移。
  • 从左到右、从右到左、从下到上或从上到下填充。

更改无需重启 Minecraft 即可生效。法力条渲染在聊天栏下方,确保消息可读。附属模组可以声明内置渲染回调,并在继续接收同步法力数据的同时绘制完全不同的 HUD。

源代码: github.com/mahghuuuls/jawms