Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
EasyHUD
[AI-generated] Network quality HUD: ping, connection quality, up/down bandwidth, player count, styled to match the Day & Time panel. Client-only, no server sync.
By s6652289
| Last updated | a week ago |
| Total downloads | 76 |
| Total rating | 0 |
| Categories | Mods AI Generated |
| Dependency string | s6652289-EasyHUD-1.0.0 |
| Dependants | 0 other packages depend on this package |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.
Preferred version: 5.4.2350README
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 后端有效,
做成正式功能太脆弱,本模组没有采用。)
位置与"风格统一"是怎么做到的
不是硬编码坐标,也不要求你去抄一遍配置:
- 进游戏后,本模组会去找另一个模组创建的
DayTimePanel(挂在Hud.m_rootObject下)。 - 找到后直接继承它的 UI 组件:字体、字号、字色、描边颜色与偏移、背景 sprite / 颜色、面板高度。
- 位置按它的左边缘计算:
本面板右边缘 = 它的左边缘 − Gap,y与它完全相同。
所以:
- 你改那个模组的字号 / 颜色 / 背景,本 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 |