Valheim
Install with App

Details

Latest version
1.0.0
Last Updated
First Uploaded
Downloads
74
Likes
0
Size
17KB
Dependants
ADDatHost Valheim hosting
€1

EasyHUD

AI 生成声明:本模组由 AI 智能体(WorkBuddy)在用户的明确需求与逐项验收下编写; 功能设计、真机测试与发布决定均由用户主导。

在 HUD 上实时显示网络质量的纯客户端模组 —— 不用再按 F2 去看那一大堆调试信息。

面板贴在「Display Day & Time in HUD」面板的正左侧, 同一水平线、同一高度、同字体同字号同颜色同背景,看起来就像同一套 UI 的一部分。

                              ┌──────────────────────────┬──────────────────────────┐
                              │ Ping 42ms  99%  ↓3.4 ↑0.8 KB/s  P 3 │  第 128 天  14:32   │
                              └──────────────────────────┴──────────────────────────┘
                                        ↑ 本模组(EasyHUD)              ↑ 天数/时间面板

功能

默认 说明
Ping 格式 Ping 42ms
连接质量 格式 99%,原版 F2 里 99% / 98% 的那一项
上下行带宽 格式 ↓3.4 ↑0.8 KB/s
在线玩家数 格式 P 3(含主机)
低质量变色 正常时与天数面板同色;Ping>120ms 或质量<80% 变黄;Ping>250ms 或质量<50% 变红
单人自动隐藏 自己开主机且只有自己时不显示(没有网络流量,显示 0 没意义)

每一项都能在配置里单独关掉。刷新间隔默认 0.5 秒(网络统计本身是低频采样的,刷太快只会让数字乱跳)。

⚠️ 关于「丢包率」—— 请先看这一段

Valheim 和 Steam 都没有暴露"丢包率"这个数字。 我把链路挖到了底:

ConnectPanel.Update                                  ← 原版 F2 面板
  → ZNet.GetNetStats(out localQuality, out remoteQuality, out ping, out outByteSec, out inByteSec)
      → ZSteamSocket.GetConnectionQuality(...)
          → Steamworks.SteamNetworkingSockets.GetConnectionRealTimeStatus(...)
              → SteamNetConnectionRealTimeStatus_t { m_nPing, m_flConnectionQualityLocal,
                                                     m_flConnectionQualityRemote,
                                                     m_flOut|InPacketsPerSec,
                                                     m_flOut|InBytesPerSec, ... }

这个结构体里只有"包速率",没有"丢包率"。Steam 给出的最接近的指标就是 m_flConnectionQualityLocal / Remote(0~1 的连接质量,已经综合了丢包、延迟、抖动)。

所以本 HUD 用 连接质量 % 来反映网络好坏:丢包或延迟一恶化,它就会明显掉下来, 这也是原版 F2 面板显示的那两个百分比。若你更希望看到数字化的延迟波动, 可以关注 Ping 与带宽两项的变化。

(理论上还有一条路:Steamworks.NET 的 GetDetailedConnectionStatus 会返回一段人类可读的文本, 里面带 dropped 计数 —— 但它是给人看的字符串、格式随 Steam 版本变、且只在 Steam 后端有效, 做成正式功能太脆弱,本模组没有采用。)

位置与"风格统一"是怎么做到的

不是硬编码坐标,也不要求你去抄一遍配置:

  1. 进游戏后,本模组会去找另一个模组创建的 DayTimePanel(挂在 Hud.m_rootObject 下)。
  2. 找到后直接继承它的 UI 组件:字体、字号、字色、描边颜色与偏移、背景 sprite / 颜色、面板高度。
  3. 位置按它的左边缘计算:本面板右边缘 = 它的左边缘 − Gapy 与它完全相同。

所以:

  • 你改那个模组的字号 / 颜色 / 背景,本 HUD 会自动跟着变(改完重启游戏)。
  • 你把那个模组的「Display under minimap」打开(面板挪到小地图下方),本 HUD 也跟着挪到同一行。
  • 卸载那个模组也没关系:本 HUD 会退回 [4 - Fallback Style] 里的内置样式, 默认值就是那个模组的默认外观(AveriaSansLibre-Bold / 16 / FFFFFFCA / 背景 00000064 / 高 30)。

面板宽度默认按文字自动收缩;想让两个面板一样宽,把 PanelWidth 填成 200 即可。

配置

BepInEx/config/easyhud.client.only.cfg

分区 默认 说明
1 - General Enabled true 总开关
1 - General HideWhenSingleplayer true 单人时隐藏整个面板
1 - General UpdateInterval 0.5 刷新间隔(秒),推荐 0.25~1.0
1 - General MatchDayTimeStyle true 自动继承天数面板的样式
1 - General PanelWidth 0 0 = 按文字自动;填 200 = 与天数面板同宽
1 - General Gap 0 与天数面板的间距(像素)
1 - General NormalizeOnHost true 自己当主机时显示平均值(见下)
2 - Content ShowPing / ShowQuality / ShowBandwidth / ShowPlayers true 逐项开关
2 - Content ArrowDown / ArrowUp ↓ / ↑ 上下行箭头;若字体显示成方块就改成 v / ^
3 - Warning Colors Enabled true 低质量变色
3 - Warning Colors WarnPingMs / BadPingMs 120 / 250 Ping 阈值
3 - Warning Colors WarnQualityPct / BadQualityPct 80 / 50 质量阈值
3 - Warning Colors WarnColor / BadColor FFFFA0FF / FF6B6BFF 黄 / 红
4 - Fallback Style FontSize / FontName / FontColor 16 / AveriaSansLibre-Bold / FFFFFFCA 找不到天数面板时用
4 - Fallback Style OutlineEnabled / OutlineColor / BackgroundColor true / 000000FF / 00000064 同上

关于 NormalizeOnHost

游戏底层的 ZNet.GetNetStats主机模式下是把所有客户端的值累加的 (原版 F2 也这样,所以主机开 3 人时 F2 会显示 300% / 1500ms 这种数字,其实每个人都不差)。

  • true(默认):除以有效连接数,显示平均值,更容易看懂。
  • false:和 F2 面板完全一致的累加值。

自己是客户端连别人时,这个开关没有任何影响。

为什么联机安全

  • 只 patch 了 Hud.Awake(只是为了挂 UI),不碰任何网络/游戏逻辑
  • 无 Jotunn 依赖、无 NetworkCompatibility 声明、无内嵌 ServerSync / ConditionalConfigSync。
  • 依赖只有:mscorlib / assembly_valheim / BepInEx / 0Harmony / UnityEngine.CoreModule / UnityEngine.UI / UnityEngine.TextRenderingModule。
  • 纯读统计 + 本地画 UI,主机和队友不装也照样玩,不会让你连不上任何主机

安装

  • r2modman:Online → Install from file → 选 EasyHUD-1.0.0.zip
  • 手动:把 EasyHUD.dll 放进 BepInEx/plugins/

排错

进游戏后看 BepInEx/LogOutput.log,应出现:

[Info : EasyHUD]  已挂载补丁类:HudAwakePatch
[Info : EasyHUD]   Hud.Awake()  prefix=0 postfix=1  OK
[Info : EasyHUD] Harmony 补丁挂载完成:1/1 成功。
[Info : EasyHUD] 网络面板已创建:父节点 Hud.m_rootObject,初始位置 (…),字体 AveriaSansLibre-Bold。
[Info : EasyHUD] 已找到「DayTimePanel」面板并贴到其左侧:它的位置 (…) / 尺寸 (…) → 本面板 y=-25,样式来源=继承它的 UI 组件
现象 原因 / 处理
完全看不到面板 单人游戏时默认隐藏 → 进多人或把 HideWhenSingleplayer 改成 false
面板位置不对 / 没贴在一起 日志里搜「已找到「DayTimePanel」」;若没有这行,说明没找到那个面板(它没装或被改名),此时本 HUD 用回退坐标
文字显示成方块 FontName[4 - Fallback Style]),或把 ArrowDown / ArrowUp 换成 v / ^
Ping 一直是 0 该数据来自 Steam 的实时连接状态,只在真正联机时才有值;另外主机模式请见 NormalizeOnHost
DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro