这个模组最初只是一个小的SKSE实验,目的是解决一个简单的问题:药水杂乱和不可靠的热键。我想要一种无需频繁打开物品栏或当某级药水用完时重新绑定按键就能回血的方式。
起初只是一个基于充能的药水瓶,却很快暴露了《天际》药水系统中更深层次的问题。现有模组并不完全契合构想,因此该系统逐步扩展,加入了恢复逻辑、冷却控制、按资源自定义、NPC支持以及可选的HUD组件——所有这些都旨在与原版游戏自然融合。
在这一过程中,该项目从个人游戏体验优化小改动,逐渐发展为一个受现代动作角色扮演游戏启发的完整药剂瓶系统。起初的小小构想,最终演变成了对战斗资源管理方式的全面重塑。
问题
在原生天际中,资源管理既反直觉又杂乱无章。在一次正常的游戏流程中,玩家会积累数十种不同等级的药水:
次要,
光,
充裕,
蓬勃,依此类推,且常因模组变体而进一步翻倍。
由于每种药水等级都被视为独立的实体物品,快捷键和快捷栏管理很快就会变成繁琐的杂务。一旦某个特定等级的药水用完,绑定的快捷键就会直接失效,迫使玩家在战斗中停顿下来,打开背包手动重新绑定下一瓶药水。玩家不去做战术决策,反而陷入对消耗品和界面操作的琐碎管理中。
结果是,该系统不鼓励流畅的战斗,反而奖励囤积而非巧妙的资源管理。
解决方案
真正的药剂瓶附带一个模型
现代烧瓶系统 灵感来自当代动作角色扮演游戏。玩家不再携带大量一次性药瓶,而是获得少量
永续药剂 (生命、耐力和魔法)作为永久工具而非消耗品发挥作用。
- 无限资源物品
药剂在使用后不会从你的背包中移除。只需绑定一次,它们便会永久保留。 - 基于充能的使用
使用烧瓶会消耗一个 充能 而不是销毁物品本身。 - 自动再生
充能随时间恢复,受可配置的冷却时间与规则约束,确保资源流动稳定且可预期。 - 策略导向,而非囤积式玩法
游戏重点从囤积数百瓶药水转向战术决策: 当 为了治愈, 多少次充能 去消费,然后 在充能恢复期间是继续推进还是脱离战斗.
这种方法能打造更整洁的背包、可靠的快捷键,以及更贴近现代动作角色扮演游戏的战斗节奏——同时不破坏《天际》的核心特色。
屏幕上的可选药剂小部件为真药剂系统提供实时视觉反馈,无需打开菜单或查看背包。每个药剂图标代表一种特定资源类型(生命、魔法、耐力或其他),并直接在图标上显示当前可用充能次数。使用药剂时,充能数量会即时更新,恢复过程也会随时间通过视觉呈现。
True Flasks旨在实现高度可配置。药瓶系统的每个方面都可以通过以下方式进行调校
TrueFlasksNG.ini 或通过
游戏内配置菜单,从而让您能够根据不同的游玩风格、难度设置和模组列表来调整系统。
每种药剂类型都可以进行配置
独立地,无论是在玩法行为还是UI呈现方面。以下是主要配置选项的概述。每个设置位于
TrueFlasksNG.ini 附有详细注释,解释其用途和行为。
药水设置 (这些选项会影响整个药剂系统):
- 不可移除关键词
带有此关键词的药水在使用时不会从库存中移除。此效果仅在该药水属于已启用的药剂类型(生命 / 魔法 / 耐力 / 其他)且对应配置部分处于激活状态时生效。这使自定义药水或模组添加的消耗品能够完全集成,而不会破坏药剂系统。
每瓶设置 (生命值/耐力/魔法值/其他)
每种药剂类别可以分别进行配置:
- 启用
切换此特定资源类型的药剂系统。 - 玩家 / NPC
分别启用或禁用玩家和NPC使用药剂的功能。 - 通知
尝试使用没有剩余充能的药剂时显示的自定义消息。 - 平行冷却
控制充能回复方式:
- true — 所有消耗的充能同时恢复
- false ——充能将在队列系统中逐个回复
- 反垃圾
在连续使用药剂之间增加短暂延迟,以防止快速连点。 - 背包模式
为玩家添加可选的基于背包的药水瓶行为:
- 已禁用 — 库存支持被忽略
- 使用 — 仅生命值/耐力/魔法值. 饮用此瓶时,将消耗一个匹配的背包药剂,而非使用虚拟存储的充能次数。瓶中充能数量将等同于背包中有效匹配药剂的数量。
- 存款 — 匹配的背包药水将自动转化为药剂充能。
- 背包选择模式
控制当多个可用药水时,如何选择匹配的库存药水:
- 最弱优先 — 优先使用最低的有效量级
- 最强优先 — 优先使用最高的有效震级
- 首次发现 — 使用背包中找到的第一瓶有效药水
- 背包关键词
库存模式逻辑用于识别该药水瓶类型的有效来源药水的关键词。 使用 该模式用于寻找匹配的背包药水。在 存入 该模式用于查找匹配项 恢复 恢复药剂充能的效果。 - 热键 (仅限生命值/体力/魔法值)
为直接装备和使用该瓶剂类型分配键盘快捷键。 - 热键修饰键 (仅限生命值 / 体力 / 魔法)
药水瓶热键的可选键盘修饰键。若已设置,则在按住主热键的同时按下该修饰键时,药水瓶将被触发。 - 手柄快捷键 (仅限生命值/耐力/魔法值)
为直接装备并使用该瓶剂类型分配一个游戏手柄快捷键。 - 手柄快捷键修饰键 (仅限生命值/体力/魔法值)
药水瓶快捷键的可选游戏手柄修饰键。若已设置,则在按住主手柄快捷键的同时按下此修饰键,即可触发药水瓶。 - 音频失败
当药剂未能激活时,启用音频反馈。 - 专属关键词 (仅限其他药剂)
为药水定义一个关键词 绕过 共享槽位系统,或若启用了“还原独占”,则将视为共享槽位组。 - 还原独占 (仅适用于其他药剂瓶)
反转过滤逻辑。若启用, 仅限 含有独占关键词的药水将共用一个槽位,而其他所有药水则作为标准原版物品使用。
对于每种药剂类型,配置包含FlasksCapKeyword、FlasksCooldownKeyword和FlasksRegenerationMultKeyword参数。通过定义这些参数并通过魔法效果应用,你可以动态调整特定药剂的最大充能次数、回复速度和基础冷却时间。有关关键字使用的更多详情,请参阅下方“模组作者信息”部分。
棱镜设置True Flasks 通过 PrismaWidget 提供可选的 HUD 支持:
- 启用
切换屏幕上的药瓶控件显示。 - 自动隐藏
当药水瓶完全充满、或当前无法再生且没有可显示的活跃状态时,自动隐藏该组件。 - 战斗中始终显示
无论玩家处于何种其他可见性规则下,只要在战斗中,始终显示药水瓶组件。 - 位置与缩放
自定义整个控件或单个烧瓶元素的位置、缩放和不透明度。 - 全部锚定
将所有元素锁定到全局控件位置,或独立移动它们。 - 填充动画
在冷却期间为小部件图标启用视觉填充效果。可配置为始终播放,或仅在药瓶完全为空(0充能)时播放。这些设置对每种药瓶类型独立生效。 - 自定义字体
该组件可以加载第一个 .ttf 字体已找到。 字体 文件夹。如果不存在自定义字体,则回退到默认字体栈。
必需可选推荐安装 下载该模组,并使用模组管理器(例如...)进行安装。
MO2 或
涡流.
安装过程中,FOMOD安装器将引导您选择多个可选组件:
核心插件(必需)- 基地 TrueFlasksNG.DLL 始终会被安装。
- 它包含核心的Flask框架逻辑,是所有配置所必需的。
- 注意:DLL本身不会添加任何新物品。但是, 其他 药水瓶功能(共享槽位及标准药水的冷却时间)仍将生效。
2. ESP插件(可选)您可以根据所需功能选择一个或多个ESP插件:
- TrueFlasks.esp (推荐)
- 向游戏内添加实际药剂物品(生命、魔法、耐力、其他)。
- 药水瓶会在游戏开始或首次加载时自动发放。
- 包含一个极简MCM菜单,仅用于在烧瓶丢失时重新发放。
- TrueFlasks - 可升级药剂瓶.esp (推荐)
- 通过两种新物品引入药剂升级机制: 深渴之石 并且 迅捷重生宝石.
- 以下物品由以下商人出售:
- TrueFlasks – 替换原版药水.esp (可选)
- 重制标准原版 生命值, 魔法值, 以及 体力 不同角色的药水:
- 治疗药水 → 给予 伤害抗性
- 魔力药水 → 授予 移动速度
- 体力药水 → 增加 徒手伤害
兼容性说明: 仅影响非合成的原版药水。为保持NPC平衡,这些药水对NPC保留隐藏恢复效果。若启用此插件,不保证与炼金大修完全兼容。
- TrueFlasks – 持续时间恢复.esp(可选)
- 改变药水的行为,使资源随时间逐渐恢复,而非瞬间生效。
- 恢复效果不会叠加——在该效果生效期间使用另一瓶药剂将刷新持续时间,而非产生多个叠加效果。
例如,当与TrueFlasks – Upgradable Flasks.esp一起使用时,药剂每秒恢复约4点属性,并每秒恢复最大属性的2.5%,持续10秒。
安装后只需启用所选的插件即可。无需额外设置——模组即刻可用。
TrueFlasksNG的核心框架已完全
独立. 烧瓶机制确实如此。
不替换、修改或挂钩 原版治疗、魔法或耐力药水。所有标准药水保持不变,并继续以与基础游戏或其他模组完全相同的方式运作。由于该系统独立运行,True Flasks 通常与以下内容兼容:
可选插件通知 (
TrueFlasks – 替换原版药水.esp)
此可选插件仅修改原版生命、魔法和体力药水。仅影响非制作的原版药水。制作药水、原料及炼金配方均不受影响。由于该插件有意修改原版药水记录,启用时无法保证与炼金系统大修模组完全兼容。为保留原版NPC行为,仅对NPC应用了隐藏的资源恢复效果。核心的True Flasks框架本身不受影响。
不。True Flasks是一个完全独立的系统。原版及模组添加的药水不会以任何方式被修改、移除或覆盖。不过,一个在FOMOD安装期间可选装的附加插件,仅会将原版的治疗、魔法和体力药水重新定义为替代效果。制作出的药水及非原版消耗品不受影响。该插件完全可选,且不影响独立的药剂瓶框架本身。
是的——默认情况下,药剂可以出售或丢弃。这一行为是有意为之。True Flasks不会强制锁定玩家背包中的药剂物品。某些模组会暂时移除或剥离玩家的装备,而硬性锁定药剂可能导致冲突或意外行为。相反,该模组将完全控制权留给玩家。如果你想防止药剂被误售或误丢,可以使用
必备收藏 并将它们标记为收藏。这样,您就可以决定在本周目中治疗药水的持久性程度,而无需施加可能与其它模组冲突的全局限制。
True Flasks 不会以任何方式修改或干扰动画模组所使用的逻辑,因此它们通常完全兼容。请注意,即使没有可用充能,也可能触发饮酒动画。在这种情况下,动画会播放但不会产生任何效果。
打开“True Flasks NG”MCM菜单,并在其中重新发放缺失的药剂瓶。此过程仅恢复药剂瓶物品本身。所有先前配置的机制——如回复量、充能容量、回复速度等——均完全保持不变。
默认值经过调校,在原版难度设置(专家级)下应当感觉舒适——至少基于我们自身的测试和预期。话虽如此,平衡性高度主观,且极大程度上取决于你的模组列表和游玩风格。True Flasks有意开放了大部分参数,让你能微调回复速度、容量和冷却时间,以更好地匹配个人偏好和整体配置。
底部烧瓶代表所有其他不属于生命、魔法或耐力属性的药水效果的共享充能池。而顶部、左侧和右侧的烧瓶控制主要资源的充能,底部烧瓶则用于此用途。
所有剩余的药剂类型, 例如:火焰、冰霜或闪电抗性。换句话说,底部烧瓶上显示的数字表示有多少
非资源类药水 在该充能池耗尽之前仍可使用。这些充能与其他药剂一样独立恢复,并可在设置中单独配置。
那么只需不要将NoRemoveKeyword(在TrueFlasksNG.ini中定义)添加到药水上,或者从药水瓶中移除该关键词即可。
- 如果我希望“其他”类别中的药水在使用时也变为无限(不消耗),该怎么办?
你需要将NoRemoveKeyword(在TrueFlasksNG.ini中定义)添加到药剂本身,或添加到药剂使用的魔法效果上。
药剂在至少回复一层充能前暂时无法使用。尝试使用空药剂时会显示通知。
此选项可为NPC药水使用启用类似瓶剂风格的规则。启用后,
所有标准药水 NPC所使用的逻辑与以下内容相同:
其他 默认使用药剂瓶。实际上,这意味着NPC受到共享充能池的限制,无法在短时间内无限制地消耗药剂——例如,根据配置不同,它们可能一次只能使用约5次。NPC不会被给予实体药剂瓶物品;该系统在内部运作,以控制其药剂使用行为。
- 如果我希望NPC像玩家一样完全使用药剂瓶系统,该怎么办?
在这种情况下,您需要手动将相应的药剂物品分发给NPC。
该模组不会修改原版记录,也不会改动存档关键系统。它包含少量辅助脚本,主要用于可选功能,例如MCM支持和内部状态处理。这些脚本轻量且独立,并不打算永久更改你的存档或核心游戏系统。与任何模组一样,建议在安装前备份存档。
框架方法本质上,True Flasks是一个DLL框架。尽管它附带了一套“开箱即用”的ESP和预配置的瓶剂,但它并未对游戏逻辑进行硬编码。模组作者可以使用所提供的API来定义自己的逻辑、创建自定义瓶剂,或覆盖默认行为,而无需依赖自带的ESP。
玩法转变真灵瓶的模块化特性允许你通过组合来彻底改变游戏的节奏。
.ini 使用简单脚本调整:
- “魂类”游戏:
- 配置: 设置 FlasksRegenerationMultBase = 0.0 禁用自动再生成。
- 逻辑: 创建交互点(篝火/神龛)或触发休息事件 修改冷却时间 触发时完全恢复充能。你也可以在世界各处放置稀有物品,为其附加主动效果, 药水瓶容量关键字,永久提升你的药水充能,并随进度增长。
- “血燃者”:
- 配置: 将恢复速度设为极慢或零。
- 逻辑: 使用Papyrus脚本监控敌人击杀以鼓励进攻。击杀时,调用 ModifyCooldown(Player, Type, -10.0, false) 立即缩短冷却时间,并奖励持续作战的玩家生命值/资源。
- “炼金术士”:
- 配置: 将再生设置为0。
- 逻辑: 玩家不再寻找药水,而是必须在制作站“酿造”补充剂。制作结果可触发脚本恢复充能,模拟旅途中准备物资的过程。
要动态修改药水参数(最大槽位、回复倍率或冷却时间),你必须将相应的关键字应用于一个
魔法效果.
魔法效果需求:正数与负数:该插件尊重
有害的 标志。若选中,则大小将
扣除 从基础值开始。
提示:你可以在可选附加组件中找到最小工作示例。 TrueFlasks - 可升级药剂瓶.esp.示例结构:要创建一个魔法效果,
降低 最大药剂充能次数,请使用以下配置:
- 拥有关键词: 药剂容量关键词
- 标志: 恢复 (已勾选)
- 旗帜: 有害的 (已勾选)
- 原型: 脚本
量级计算:一旦该效果被添加到法术或技能上,插件便会读取该效果。
最终激活强度。这意味着它能正确计入任何增益、药水或其他会缩放效果强度的修饰符。
示例:如果上述效果被添加到一项强度为1的玩家技能上,药剂的最大充能次数将减少1。创建你自己的用户界面虽然该模组自带一个现成的Prisma UI组件,但你并不受其限制。
- 完整数据访问权限: C++与Papyrus两种API均支持实时访问当前充能、最大槽位以及冷却进度。
- 自由: 你可以构建一个完全自定义的挂件(SWF、ImGui),使其契合你特定模组列表的美学风格,或将药瓶状态无缝集成到现有HUD模组中。
Papyrus脚本该模组还为Papyrus脚本提供了全局原生函数,允许你通过脚本(例如通过MCM或任务脚本)操作药瓶。
TrueFlasksNG.psc:- ModifyCooldown(Actor actor, int type, float amount, bool all_slots)
减少或增加某种药剂类型的当前冷却时间。 数量 以秒为单位。如果 全部栏位 属实,则该类型的所有槽位都会受到影响;否则,仅修改最近的激活冷却。 - float GetNextCooldown(Actor actor, int type)
返回下一个可用槽位的剩余冷却时间(秒)。 - int GetMaxSlots(Actor actor, int type)
返回一种药剂类型的最大充能次数。 - int GetCurrentSlots(Actor actor, int type)
返回当前可用充能次数。 - float GetRegenMult(Actor actor, int type)
返回当前的再生速度倍率。 - float GetCooldownPct(角色 actor, 整数类型 type)
返回当前槽位的冷却进度,值为0.0到1.0。 - int[] GetFlaskInfo(Potion potion)
返回一个数组: [药水瓶类型, 是否为药水瓶]. Flask类型:0=生命,1=体力,2=魔力,3=其他,-1=非药剂瓶。 IsFlask: : 1=真,0=假。 - PlayFlaskGlow(Actor actor, int type)
触发指定药剂类型在HUD上的视觉发光效果。 - ConsumeFlaskSlot(Actor actor, int type, int count)
消耗当前可用的此类型药剂充能次数。 - RestoreFlaskSlot(Actor actor, int type, int count)
恢复此类型炼金瓶的指定充能次数。
瓶罐类型(整数):GitHub
- SKSE团队敬献 SKSE.
- 天际RE社区,感谢其无数开源插件 CommonLibSSE.
- 棱镜界面用于制作轻量且灵活的UI集成框架。
- 菲尼克斯 为《上古卷轴5:天际重制版》提供帮助,并解答无数问题。
- 星座用于创建UI资源。
- 马格南为了激励我将私人的游戏调整转化为一个正式的模组并在Nexus上发布,以及感谢对模组页面设计的帮助。
- 用于测试AE版本的UBE Discord服务器上的Acid[nono8630]。
- 狂战士 已用于页眉图形和游戏内元素。
- 艾尔辛用于Nexus页面展示灵感(横幅和分节分隔线),基于 真方向移动
- MJORK4为了 松加德 - 迷雾字体替换器
注意: VR版本未经测试。
此插件由Gemini 3辅助创建。
中文翻译由Gemini 3提供。