EasyHUD

版本 v1.0.0·更新於 2026-09-17

[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.

模組介紹 作者原文

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 或質量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-Bo

安裝與使用 安裝:BepInEx 外掛

  1. 本站下載的壓縮包就是模組本體,通常是 BepInEx 外掛(解壓後得到 .dll 或外掛資料夾)。
  2. 建議流程:用社群模組管理器(如 r2modman)選中本遊戲後匯入該模組,管理器會自動裝好 BepInEx 前置並處理依賴。
  3. 手動流程:先在遊戲目錄裝好 BepInEx 載入器,再把解壓出的 .dll 或外掛資料夾放進 BepInEx/plugins/。
  4. 啟動遊戲,BepInEx 控制台會列印載入日誌;確認這個模組出現在日誌裡即為安裝成功。

帶「前置依賴」的模組需要一併安裝,否則不會載入。功能開關通常在遊戲內或外掛自帶的設定檔裡調整。 多人連線時,主機與所有用戶端需要安裝一致的模組。

前置依賴

下面這些內容需要先安裝,否則該模組不會生效:

denikson-BepInExPack_Valheim

檔案與校驗

檔案名稱
EasyHUD-1.0.0.zip
檔案大小
16.9 KiB