召唤之角

创作者: Mushroom_Vikings
已更新:2026-09-15 16:40:55
315KB

关于此 MOD

在工作台制作一个号角,吹响后最远64米内的其他玩家都能听到。专为无地图服务器设计,在那里找到彼此也是游戏的一部分。

召唤之角

可制作一个 召唤号角 到工作台。装备它并左键点击即可发出爆炸声。它的音量可以在游戏设置菜单的音频选项卡中通过滑块调节。

状态:进行中。 号角外观和声音都对,花费 1 青铜 + 1 鹿皮 在1级工作台上,其他玩家可在64米范围内听到。剩下的是行为:见 还没有完成.

纯净的BepInEx + Harmony,无额外运行时依赖——安装 召唤之角.dll 进入 BepInEx/plugins/ 仅此而已。

该模组添加了一个物品和一个配方,因此需要开启 每个客户端和专用服务器上.

建筑

dotnet build HornOfCalling/HornOfCalling.csproj -c Release

默认为 Linux Steam 安装路径(~/.local/share/Steam/steamapps/common/Valheim),回退到默认的 Windows 路径。可通过创建以下内容来覆盖 目录.生成.用户.属性 在……旁边 Directory.Build.props (已忽略):

<项目> <属性组> <英灵神殿路径>D:\Games\Valheim</英灵神殿路径> </属性组> </项目>

成功生成后会将 DLL 直接复制到 BepInEx/插件/。没有热重载——每次构建后请重启游戏。

如果出现以下情况,构建会提前失败并给出具名错误消息: assembly_valheim.dll 或 BepInEx.dll 找不到,而不是发出一堵 CS0246.

工作原理

三个注册步骤,均为幂等操作,由Harmony后缀驱动,在 src/Patches.cs:

步 哪里 为什么在那里
克隆预制体,添加到 物品数据库.m_items 对象数据库.唤醒, 对象数据库.复制其他数据库 对象数据库被构建了两次——先是用于主菜单的精简副本,然后是实际游戏世界的完整版本
添加 配方 三个补丁中的任意一个 需要工作台,这是一个 碎片 可能一开始并不存在 对象数据库.唤醒
添加到 ZNetScene.m_prefabs / 已命名预制体 ZNetScene.Awake 让物品及其音效作为联网对象存在

该物品是从原版复制而来的 庆祝号角 (预制体 酒馆周年庆),无需资源包即可提供号角模型、图标和握持姿势。

克隆体需要解除三件事。它的 弹药类型 是 蜂蜜酒 ——原版中,你吹响号角时它会从你的物品栏里喝掉一瓶蜜酒,没有蜜酒就完全吹不响——所以这点已经排除了。它继承的武器属性(击退、背刺、格挡、招架)都归零了,所以提示框里只剩风味文本。而它的初始效果,蜜酒飞溅和打嗝,被爆炸替代了。

爆炸音效并非由补丁播放。该音频片段——一个嵌入程序集中的16位PCM WAV文件,解码于 src/HornSound.cs — 挂载在物品的 开始效果,游戏在每次攻击时会在耐力检查后触发一次。这样也会将其通过音效混音组处理,因此玩家的音量滑块会生效。

片段已峰值归一化至−0.3 dBFS,这就是号角在100%音量下的全部响度:Unity会将其钳制 音量 在 1 处,因此一旦模组要求满音量,唯一剩下的余量就在录音内部。

中的音量行 src/VolumeSlider.cs 原版音效行是否已克隆:该 滑块 位于行 GameObject 上,其标题和百分比作为子级,因此一个 实例化 复制整份内容,然后重命名,拼接进标签页的导航链,并指向配置项。

设置

设置 → 音频 → 召唤号角,位于三个原版音量滑块下方。拖动时它会实时移动,并在 好的 并被丢弃于 返回,与上面的滑块相同。

数值存储在 BepInEx/配置/com.greg.hornofcalling.cfg:

[音频] ## 号角声的音量,作为录制电平的比例。 [...] # 设置类型:Single # 默认值:1 # 可接受值范围:从0到1 BlastVolume = 1

编辑该文件,或者如果你有的话,在F1 ConfigurationManager叠加层中编辑,都会立即生效,无需重启——设置行只是该条目的前端界面,而非独立设置。

它是在英灵神殿自身音效音量的基础上进行倍增,而非替换,并且它 每位玩家每次爆炸都会改变 你 听,无论谁发出的声音,每个人听到的都不一样,永远无法共享他人的听觉。正因如此,它不会通过MushroomSync进行同步——详见 文档/上下文.md.

当你停止移动滑块时,号角声会作为预览播放一次——松开滑块手柄时,或在最后一次按方向键或推摇杆后的三分之一秒时——以你刚刚选择的音量,通过与实际鸣响相同的混音器组播放。再次移动滑块会重新开始预览,而不是在其上叠加第二个副本,关闭菜单则会停止预览。

从……打开 主菜单 滑条仍能工作,但没有声音:爆炸预制体是由世界的 对象数据库,所以在加载世界之前没有什么可以预览的。

还没好

根据设计说明,仍待解决:

  • 10 体力 每次使用 — 攻击消耗的耐力,当前 0.
  • 这 咆哮表情 而不是继承的 表情_饮酒.
  • 维京人应该 似乎空无一物.
  • 抵达 超出可听衰减范围的其他玩家 (64米)。其他玩家 做 今天听到爆炸声,范围达64米——看 范围 ——但设计说明要求200米。自《英灵神殿》1.0.7版本起,区域网格将爆炸冲击的传递距离扩展到了超出曲线计算所及范围(默认模拟距离下为128米),因此这部分差距现在属于曲线调参改动,而非网络工作;其余部分仍需要一段 路由远程调用 广播。
  • 按住 左键点击持续发声,松开停止。每次点击仅触发一次。

射程

其他玩家听到了号角声。效果预制体携带了一个 网络视图,因此生成它会创建一个ZDO,并复制到附近的同伴,其 网络场景 通过哈希解析并在本地播放——这就是为什么效果预制体被注册到 网络场景 与物品并排。

两个独立限制同时生效,取较小者为准:

限制 数值 由以下设置
听觉衰减 64米 自定义衰减曲线在 src/HornSound.cs
ZDO复制 64米保证,128米在默认设置下 听者的 模拟距离

衰减是一条平台曲线,调校在 衰减 表格:

距离 音量
0 – 15 米 100%
15 – 25 米 82%
25 – 35 米 64%
35 – 45 米 46%
45 – 64 米 28%

复制是听者自身的 模拟距离 图形设置,受服务器限制,并非固定半径。其最低级别(0) 是 1.0.7 之前的一环正方形,可达到 64 米;默认等级 2 达到 128 米,而它上方的层级则更高。衰减曲线是按 64 米调的,因为那是底线——每个听众都保证能听到的唯一范围。

所以,将可听范围提高到超过收听者的复制半径是毫无作用的:他们永远接收不到该对象,任何音量设置也无法传达到他们。提高它 之内 那个半径应该可行,而且从1.0.7起就有空间——参见 文档/上下文.md 对于该机制以及为什么该常量被保留在底限。

本地设置

在插件加载前,必须将BepInEx安装到游戏文件夹中。在 原生 Linux 建造:

  1. 提取 BepInExPack_瓦尔海姆 (5.4.2333) 放入 Valheim 目录,然后 chmod u+x start_game_bepinex.sh.
  2. Steam → Valheim → 属性 → 兼容性: 取消勾选 强制使用特定的 Steam Play 兼容性工具。Proton 会破坏原生版本上的 doorstop 注入。
  3. Steam → 英灵神殿 → 属性 → 启动选项: ./start_game_bepinex.sh %command%

BepInEx 已启动,如果 BepInEx/LogOutput.log 启动后出现。如果始终未出现,请运行 start_game_bepinex.sh 从终端启动——Steam容器运行时隐藏了错误。

测试

新世界 → F5 → 开发命令 → 生成唤号角 1 1 p然后在工作台前确认配方显示为1个青铜加1张鹿皮。装备号角并左键点击——爆炸时间约为4.9秒。

生成青铜1 和 生成鹿皮 1 把材料放在手边,方便快速查看。

音量滑块: Esc → 设置 → 音频,检查该行显示“呼唤之角”并显示百分比,拖动它,按确定,然后确认 爆破范围 配置文件中的内容已更改。松开手柄时应按新音量鸣笛一次,再次拖动时应切断之前的试听,而不是叠加播放。用方向键或游戏手柄浏览列表时,应在停止拨动三分之一秒后停在当前行并进行试听——如果整行都被跳过,那要检查的就是导航拼接。拖动后按返回键应保持配置不变,下一次鸣笛仍按旧音量。

预制体名称区分大小写,并且是 不 显示名称: 生成“召唤之角” 将无法使用。

日志会按发生顺序记录每个注册步骤,因此部分失败也能看得见:

grep -i hornofcalling "$VALHEIM/BepInEx/LogOutput.log"

Unity 端堆栈跟踪会出现在 ~/.config/unity3d/IronGate/Valheim/Player.log.

笔记

查看 文档/上下文.md 对于上述设计背后的API陷阱。

Valheim: 英灵神殿 的热门 MOD

探索适用于 Valheim: 英灵神殿 的最佳MOD,带来新功能、升级画面,以及令人兴奋的方式来改变您的游戏体验。

使用 Xmod 解锁 Valheim: 英灵神殿 的全部潜力 — 今天就探索这些顶级 MOD!