NullReferenceFix

v1.0.26·Updated 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

About this mod Author’s original text

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 — 화면보다 큰 아이템 툴팁 (화면 흔들림 / 잘림)

스탯·효

Install & use Install: BepInEx plugin

  1. The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
  2. Recommended: use a community mod manager (such as r2modman) — pick this game, import the mod, and the manager sets up BepInEx and its dependencies for you.
  3. Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
  4. Launch the game — the BepInEx console logs every plugin it loads; seeing this mod in the log means it is installed.

Mods with listed dependencies need those installed too, or they will not load. Options are usually changed in-game or in the plugin's config file. In multiplayer, the host and every client need the same mods installed.

Dependencies

Install these first, or the mod will not work:

denikson-BepInExPack_Valheim

File & checksum

Filename
NullReferenceFix-1.0.26.zip
File size
168.9 KiB