NullReferenceFix

版本 v1.0.26·更新於 2026-10-06

Fixes recurring NullReferenceException/log spam (ZNetScene.RemoveObjects, AzuCraftyBoxes, EnemyHud conflicts, TMP missing glyphs), oversized item tooltip shake/cut-off (two columns), and KeenCombat sk

模組介紹 作者原文

NullReferenceFix

A small collection of independent Harmony patches, each fixing one specific recurring bug —

mostly NullReferenceExceptions that repeat every single frame for the rest of your play

session once triggered (spamming the log and wasting CPU), plus the occasional leaked-resource

bug that quietly accumulates until it causes lag or a freeze. Every patch targets a different

root cause and can trigger (or not) completely independently of the others.

한국어 설명 보기 | English Description

🇰🇷 한국어 (Korean)

개요

NullReferenceFix는 서로 독립적인 여러 개의 작은 Harmony 패치를 모아둔 모드입니다. 대부분은

한 번 터지면 세션이 끝날 때까지 매 프레임 반복해서 터지는 NullReferenceException 버그를

담당하고, 일부는 조용히 누적되다가 렉이나 프리징을 유발하는 리소스 누수를 담당합니다. 패치마다

원인이 다르고, 서로 완전히 독립적으로 발동합니다 — 즉 설치된 다른 모드 구성에 따라 일부 패치는

평생 한 번도 발동하지 않을 수도 있습니다.

현재 7가지 버그를 고칩니다:

  • 바닐라 발헤임 자체 버그 (ZNetScene.RemoveObjects)
  • AzuCraftyBoxes 모드 버그 (제작함 근처 재료 확인)
  • EnemyHud를 건드리는 모드 간 충돌 (EpicMMOSystem 등)
  • 바닐라 발헤임 TMP 폰트의 비라틴 스크립트(한글/일본어/중국어/아랍어 등) 글리프 누락 경고 (닉네임/길드명 등이 공백으로 표시됨)
  • 바닐라 발헤임 아이템 툴팁이 화면보다 클 때 발생하는 화면 흔들림/잘림 (스탯·효과를 많이 추가하는 모드 사용 시)
  • Azumatt AAA_Crafting 제작창(제작/업그레이드 탭) 아이템 호버 툴팁이 화면 오른쪽 끝에서 흔들리고 잘리는 문제 (화면 가운데 고정 + 2열 분할)
  • KeenCombat의 무기 스킬 툴팁("BLINK STRIKE" 등)이 무기가 아닌 아이템에도 표시되는 문제 (비무기 아이템에서만 제거)

📦 필수 모드 (Dependencies)

| 모드 | 버전 | 필수 여부 |

|------|------|----------|

| BepInExPack_Valheim | 5.4.2200+ | 필수 |

| AzuCraftyBoxes | 아무 버전 | 선택 — 설치되어 있을 때만 해당 패치가 활성화됩니다 |

| EpicMMOSystem | 아무 버전 | 선택 — 설치되어 있지 않아도 다른 두 패치는 정상 작동합니다 |

이 모드는 어떤 조합으로 설치해도 안전합니다. 위 모드들이 없어도 해당 패치만 조용히

비활성화될 뿐, 나머지 패치는 그대로 작동합니다.

🐛 버그 1 — ZNetScene.RemoveObjects (바닐라 발헤임)

같은 프레임 안에서 어떤 ZNetView의 GameObject가 다른 경로로 먼저 파괴되면, 바닐라

ZNetScene.RemoveObjects가 그 오브젝트를 내부 추적 딕셔너리(m_instances)에서 제거하기도

전에 NullReferenceException을 던집니다. 이 예외 때문에 문제의 entry가 딕셔너리에서 끝내

제거되지 못하고 남아버리고, 그 결과 다음 프레임에도 똑같은 예외가 또 발생 — 이 과정이

세션이 끝날 때까지 매 프레임 무한 반복됩니다.

이건 특정 모드가 만든 버그가 아니라 발헤임 엔진 자체의 오래된 결함입니다. 모드를 하나도

설치하지 않아도 발생할 수 있으며, 몬스터 스폰/디스폰이 잦은 상황(전투, 대규모 소환 등)일수록

더 쉽게 걸립니다.

이 모드가 하는 일: ZNetScene.RemoveObjects에 Harmony Finalizer 패치를 추가해 해당

예외만 정확히 잡아내고, 이미 파괴된(fake-null) ZNetView entry를 m_instances에서 직접

제거합니다.

🐛 버그 2 — AzuCraftyBoxes 제작함 조건 확인

AzuCraftyBoxes는 근처에서 본 모든 제작함을 HashSet에 정적으로 계속 쌓아둡니다.

상자가 철거될 때는 Container.OnDestroyed 패치로 항목을 지우지만, 일부 파괴 경로(구역/청크

언로드 등)는 이 메서드를 거치지 않고 GameObject를 바로 파괴해버려서, 이미 죽은(fake-null)

Container가 세트에 그대로 남습니다. 이후 제작 메뉴가 열려 있는 동안 매 프레임 실행되는

재료 확인 로직이 이 죽은 항목의 GetPrefabName()을 호출하면서 NullReferenceException이

반복 발생합니다 — 제작 메뉴를 닫기 전까지 계속됩니다.

이 모드가 하는 일: AzuCraftyBoxes가 설치되어 있을 때만 활성화되는 패치로, 해당 예외를

잡아내고 파괴된 Container 항목들을 세트에서 직접 제거합니다.

🐛 버그 3 — EnemyHud를 건드리는 모드 간 충돌 (EpicMMOSystem 등)

일부 팩션/마켓플레이스 계열 모드는 자체 EnemyHud.LateUpdate 패치 안에서 EnemyHud.ShowHud를

직접 강제로 재호출해 HUD를 즉시 새로고침하려 합니다. 그런데 이 재호출이 이미 로그아웃했거나

디스폰된 캐릭터를 대상으로 발생하면, 그 캐릭터의 HUD 항목(m_huds)이 아직 정리되지 않은 채

남아있을 수 있고, 이걸 전제로 동작하는 다른 모드의 ShowHud 패치(예: EpicMMOSystem의 PvP

플레이어 이름 색상 표시 패치 DataMonsters.MonsterColorTexts)가 죽은 참조를 건드리면서

NullReferenceException이 반복 발생합니다.

이 모드가 하는 일: EpicMMOSystem이나 특정 모드를 콕 집어 패치하지 않고, 발헤임 기본

EnemyHud.ShowHud에 Finalizer를 걸어서 어떤 모드의 postfix에서 터지든 잡아내고, 문제의

오래된 m_huds 항목과 남은 HUD GameObject를 직접 정리합니다. 그러면 다음 프레임에 정상적인

새 항목이 만들어집니다.

🐛 버그 4 — TMP 비라틴 스크립트 글리프 누락 경고

발헤임 바닐라·TMP 내장 폰트(예: Valheim-Prstartk, LiberationSans SDF)는 라틴 문자만

커버하고, 한글·일본어·중국어·아랍어·히브리어·태국어 등 비라틴 스크립트 글리프는 자체 글리프

테이블과 폴백 체인에 포함하지 않습니다. 플레이어 닉네임·길드명처럼 사용자가 직접 입력한

비라틴 텍스트가 이런 폰트로 렌더링되는 TMP_Text 오브젝트(예: EpicMMOSystem의 네임플레이트/

길드명/정보 패널)를 통해 표시될 때마다 "The character with Unicode value... was not found

in the [...] font asset..." 경고가 반복 출력되고, 해당 글자는 공백이나 네모(□)로 대체됩니다.

발헤임은 자체 다국어 로컬라이제이션을 위해 스크립트별 Noto 계열 폰트(NotoSansKR,

NotoSansJP, NotoSansSC, NotoSansArabic 등 11개 스크립트 + 이모지)를 이미 게임 파일에

내장하고 있지만, 플레이어가 직접 입력하는 텍스트용 TMP 전역 폴백 목록에는 연결되어 있지

않습니다.

이 모드가 하는 일: 발헤임이 지원하는 각 언어의 폰트를 찾아 세션당 한 번 TMP의 전역 폴백

목록(TMP_Settings.fallbackFontAssets)에 전부 등록합니다. 새 폰트를 번들링하지 않고 발헤임이

이미 갖고 있는 리소스만 사용하며, 어떤 모드가 만든 TMP 텍스트든 상관없이 어떤 언어의 텍스트든

공백/네모 대신 정상적으로 표시되도록 합니다.

🐛 버그 5 — 화면보다 큰 아이템 툴팁 (화면 흔들림 / 잘림)

스탯·효

安裝與使用 安裝:BepInEx 外掛

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

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

前置依賴

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

denikson-BepInExPack_Valheim

檔案與校驗

檔案名稱
NullReferenceFix-1.0.26.zip
檔案大小
168.9 KiB