Confirm with your password

Captain territorial

Valheim Territory Ward Mod - Zone-based building, interaction, and intrusion control

Client & Server
Changelog & versions

· Website

Stars
2
Downloads
6
Version
1.0.87
Updated
Author
KorCaptain
Virus scan
✓ Scan successful
Runs on
Client & Server

Compatibility

Required 1

Install these too — Gale pulls them in for you.
  • Jotunn ValheimModding ·2.29.1

Description

Captain Territorial - Valheim Territory Ward Mod

Ko-fi Discord

한국어 설명 보기 | English Description


📸 ScreenShot~!

🏰 Territory Ward Overview

(스크린샷 준비 중 / Screenshots coming soon)


🇰🇷 한국어 (Korean)

개요

Captain Territorial은 발헤임에 영토 관리 시스템을 추가하는 모드입니다.
와드를 설치하고 연료를 공급해 영토를 활성화하면, 구역 내 건설·상호작용·침입자 제어를 모두 관리할 수 있습니다.
Lv1~8 전 레벨이 완전히 구현되어 있으며, 레벨이 오를수록 반경·연료·연료 창고 크기가 함께 커집니다.
Lv5 이상에서는 실드로 구역 내 모든 건물과 플레이어를 완전히 보호하세요!


📦 필수 모드 (Dependencies)
모드 버전 필수 여부
BepInExPack_Valheim 5.4.2200+ 필수
Jotunn 2.20.0+ 필수
ConfigurationManager 최신 권장 (GUI 설정용)

✨ 주요 특징

영토 와드 시스템

  • 와드를 설치해 반경 내 영토를 정의 (Lv1 10m ~ Lv8 30m)
  • 연료를 소모해 와드를 ON 상태 유지
  • ON 상태에서만 구역 내 건설 및 상호작용 가능
  • OFF 시 구역 내 모든 건설/사용 차단
  • 레벨이 오를수록 연료 창고 크기도 자동으로 커짐 (Lv1 2x2 → Lv8 5x6)

연료 시스템 (지역별 나무 + 수지)

  • 보조 연료는 Lv5(그레이드워프 눈)를 제외한 모든 레벨에서 수지(Resin) 1개로 통일
  • 주 연료는 바이옴에 맞는 지역별 나무(나무/원목/고대나무껍질/경목/이그드라실 나무). 나무가 없는 산/바다/애쉬랜드는 흑요석 또는 나무 2종 조합으로 대체
  • 와드는 기본(Lv1) 연료 또는 현재 레벨 자신의 연료, 이 두 가지 중 재고가 있는 쪽으로 자동 소모 (중간 레벨의 연료는 사용 불가)
  • 연료 소모 시 와드 위에 오라 VFX + 완료 효과음 재생

화이트리스트 & 침입자 경고

  • Shift+E (설치자): 멤버 관리 UI 열기 — 서버에 한 번이라도 접속했던 모든 캐릭터가 온라인/오프라인 상관없이 한 목록에 표시되며(허용됨 ✔ / 미허용 ☐), 이름을 클릭하면 즉시 허용·추방이 토글됨. 현재 접속 중이면 이름 옆에 "(온라인)" 표시
  • Shift+R (비설치자): 와드 스스로 가입/탈퇴 (예전엔 Shift+E였으나, 바닐라 E(사용) 입력과 겹쳐 오작동하는 문제로 Shift+R로 변경됨)
  • 승인되지 않은 플레이어가 구역 내 상자 또는 작업대를 사용하려 시도하면 (단순히 구역 안으로 걸어 들어오는 것만으로는 발동하지 않음, 10초 쿨다운):
    • 경고음(sfx_morgen_alert) 재생
    • 화이트리스트 전원(설치자+허용된 멤버)에게 화면 중앙 경고 메시지
    • 침입자 머리 위 빨간 "침입자" 레이블 (1시간 유지)
    • 화이트리스트 전원 채팅창 알림 전송

범위 링 & 미니맵 핀

  • 건설(피스 배치) 중 와드 근처에 있으면 범위 링 자동 표시
  • R키: 와드 5m 이내에서 범위 링 수동 ON/OFF 토글
  • 와드 로드 / 레벨업 / 파괴 시 미니맵 핀 자동 갱신

문 자동 닫힘

  • 구역 내 문을 열면 5초 후 자동으로 닫힘 (설치자 전용)
  • Config에서 딜레이 시간 조정 가능

Lv5+ 영토 실드

  • K키(기본값): SurtlingCore 1개 소모 → 1시간 보호 시작
  • 실드 활성 중 다시 K키를 누르면 즉시 비활성화 — 이때 남은 시간은 사라지지 않고 저장됨(배너킹)
  • 저장된 시간이 남아있는 동안 재활성화하면 아이템 소모 없이 그 시간부터 재개
  • 실드 반경은 와드의 현재 레벨 반경과 항상 동기화 — 실드를 켠 채로 업그레이드해도 즉시 커짐
  • 실드 활성 중:
    • 구역 내 모든 건물(WearNTear) 데미지 차단
    • 구역 내 플레이어 데미지 차단
    • 구역 내 몬스터 타겟 획득 불가
    • 투사체(화살 등) 돔 경계에서 차단
    • 몬스터가 경계에 가까워지면 미리 방향을 돌려 도망치고, 그래도 안으로 들어오면 즉시 경계 밖으로 밀려남 — 실질적으로 몬스터가 구역 안에 존재할 수 없음
    • 화려한 실드 VFX 돔 표시
  • 실드 남은 시간: 와드 호버 텍스트에 모든 플레이어에게 표시
  • 구역 안에 있을 때 화면 하단에 HUD로 잔여 시간 표시

업그레이드 VFX/SFX

  • 와드 업그레이드 성공 시 이펙트 + 효과음 재생

관리자 바이패스 (Admin Bypass)

  • F1 Config에서 켜면 설치 개수 제한·설치 재료비·업그레이드 재료/골드 비용을 전부 무시하고 즉시 설치·업그레이드 가능
  • 연료 유지비는 그대로 적용됨 — 테스트/운영 목적의 관리자 전용 스위치

⌨️ 키 바인딩 (F1 Config에서 재배정 가능)
키 (기본값) 대상 설명
U 설치자 영토 와드 업그레이드 (재료 소모)
K 설치자 (Lv5+) 영토 실드 활성화/비활성화
R 누구나 범위 링 수동 ON/OFF (와드 5m 이내에서만)
Shift+R 비설치자 와드 가입 / 탈퇴
Q 누구나 (와드 호버 중) 연료 창고 열기
Shift+E 설치자 화이트리스트 멤버 관리 UI 열기

U/K/R/Q 4개 키 모두 F1 ConfigurationManager의 General 섹션에서 자유롭게 재배정할 수 있습니다.


🏰 레벨 시스템 (Lv1~8, 전 레벨 완전 구현)

와드를 업그레이드하면 반경·연료·연료 창고 크기가 함께 커집니다.
모든 수치는 F1 Config에서 서버 관리자가 조정 가능합니다.

레벨 바이옴 기본 반경 주 연료 소모 간격
Lv1 초원 10m 나무 3분
Lv2 검은숲 13m 원목 4분
Lv3 늪지 16m 고대나무껍질 5분
Lv4 산 19m 흑요석 6분
Lv5 평원 — 실드 해금 22m 경목 7분
Lv6 바다 25m 나무 + 원목 8분
Lv7 미스트랜드 28m 이그드라실 나무 9분
Lv8 애쉬랜드 30m 나무 + 이그드라실 나무 10분

보조 연료는 Lv5(그레이드워프 눈 1개)를 제외한 모든 레벨에서 수지(Resin) 1개로 공통. 와드는 Lv1 연료 또는 자신의 레벨 연료, 두 가지만 선택해 쓸 수 있습니다.


👥 화이트리스트 UI 사용법
  1. 설치한 와드에 가까이 접근 (설치자만 가능)
  2. Shift+E 키로 멤버 관리 패널 열기
  3. 알려진 캐릭터 목록에 서버에 한 번이라도 접속했던 모든 캐릭터가 표시됨 — 허용된 멤버는 ✔, 아직 허용 안 된 캐릭터는 **☐**로 표시되고, 현재 접속 중이면 이름 옆에 "(온라인)"이 붙음
  4. 이름을 클릭하면 즉시 허용/추방이 토글됨 (오프라인 캐릭터도 클릭해서 미리 추가 가능)
  5. 닫기 버튼으로 패널 종료

비설치자는 Shift+E 대신 Shift+R을 눌러 스스로 가입/탈퇴할 수 있습니다.


🛡️ 영토 실드 사용법
  1. 와드를 Lv5 이상으로 업그레이드
  2. 와드 연료 창고에 SurtlingCore 1개 보관
  3. 와드 근처에서 K키(기본값) 클릭 → SurtlingCore 1개 소모, 1시간 보호 시작
  4. 실드 돔 VFX 생성 + 화면에 활성 메시지 표시 (반경은 와드 레벨에 자동으로 맞춰짐)
  5. 호버 텍스트에 남은 시간 실시간 표시 (모든 플레이어)
  6. 구역 안에 있으면 화면 하단에 잔여 시간 HUD 표시
  7. 다시 K키를 누르면 즉시 비활성화 — 남은 시간은 버려지지 않고 저장됨
  8. 저장된 시간이 남아있는 동안 재활성화하면 아이템 소모 없이 재개, 다 쓰면 다시 SurtlingCore 필요

⚙️ 설정 관리 (Configuration)

ConfigurationManager (F1 키)를 사용하면 게임 내에서 GUI로 모든 설정을 조정할 수 있습니다.

Config 파일 위치

BepInEx/config/KorCaptain_territorial_ward.cfg
카테고리 설명
General 시스템 ON/OFF, 와드 최대 설치 수, 문 자동 닫힘 딜레이, 보호막 아이템, 키 바인딩(U/K/R/Q), 관리자 바이패스
Level 1 ~ Level 8 반경, 연료(주/보조/추가) 종류·수량, 소모 간격, 업그레이드 재료·골드

⚠️ 서버 동기화(Server Sync): 모든 설정 항목은 서버 어드민 전용입니다. 서버 관리자(발헤임 adminlist에 등록된 계정)가 F1에서 값을 바꾸면 그 값이 접속 중인 모든 클라이언트에 즉시 강제 적용됩니다. 비관리자 클라이언트는 F1에서 이 항목들을 수정할 수 없으며(잠김), 자신의 로컬 .cfg 파일에 다른 값을 저장해뒀더라도 서버 접속 시 서버의 값으로 무시되고 덮어써집니다.


📥 설치 방법
  1. 권장: r2modman / Thunderstore에서 자동 설치
  2. 수동: BepInEx/plugins/Captain_territorial/ 폴더에 DLL 복사

⚠️ 서버와 클라이언트(플레이어) 양쪽 모두 이 모드를 설치해야 합니다. 한쪽만 설치하면 접속이 거부되거나 정상 동작하지 않습니다 (NetworkCompatibility: EveryoneMustHaveMod).


🌐 English

Overview

Captain Territorial is a territory management mod for Valheim.
Place a Territory Ward, supply fuel to keep it active, and control who can build, interact, and enter your zone.
All levels (Lv1–8) are fully implemented — radius, fuel, and storage size all scale up as the ward levels up.
At Lv5+, activate the Shield to fully protect all structures and players inside!


📦 Dependencies
Mod Version Required
BepInExPack_Valheim 5.4.2200+ Required
Jotunn 2.20.0+ Required
ConfigurationManager Latest Recommended (GUI settings)

✨ Key Features

Territory Ward System

  • Place a ward to define a radius-based territory (10m at Lv1 up to 30m at Lv8)
  • Consume fuel to keep the ward ON
  • Building and interaction only allowed inside an active ward zone
  • Ward OFF = all construction and item use blocked
  • Fuel storage size grows automatically with level (2x2 at Lv1 → 5x6 at Lv8)

Fuel System (Regional Wood + Resin)

  • Secondary fuel is 1x Resin at every level except Lv5, which uses GreydwarfEye instead
  • Primary fuel is a biome-appropriate regional wood (Wood / RoundLog / ElderBark / FineWood / YggdrasilWood). Biomes without a natural wood (Mountain / Ocean / Ashlands) use Obsidian or a combination of two wood types instead
  • A ward can consume either its base (Lv1) fuel or its own current-level fuel, whichever is in stock (intermediate levels' fuel cannot be used)
  • Consuming fuel plays an aura VFX and completion sound above the ward

Whitelist & Intrusion Alerts

  • Shift+E (creator): Open member management UI — shows every character that has ever connected to the server, online or offline, in a single list (allowed = ✔, not allowed = ☐). Click a name to instantly toggle allow/kick; an "(Online)" tag appears next to currently connected players
  • Shift+R (non-creator): Join/leave the ward yourself (moved from Shift+E, which conflicted with vanilla E/Use input and misfired)
  • When an unauthorized player attempts to use a chest or crafting station inside the zone (simply walking into the zone does NOT trigger this; 10s cooldown per alert):
    • Alert sound (sfx_morgen_alert)
    • Center-screen warning message for every whitelist member (owner + permitted members)
    • Red "침입자 / Intruder" label above their head (lasts 1 hour)
    • Chat notification broadcast to all whitelist members

Range Ring & Minimap Pin

  • Ward radius ring auto-displays during construction near the ward
  • R key: Manually toggle range ring within 5m of the ward
  • Minimap pin auto-updated on ward load / level-up / destruction

Door Auto-Close

  • Doors inside the ward zone automatically close after 5 seconds (owner only)
  • Delay configurable via Config

Lv5+ Territory Shield

  • K key (default): Consume 1x SurtlingCore → starts 1 hour of protection
  • Pressing K again while active deactivates immediately — the remaining time is banked, not lost
  • Reactivating while banked time remains resumes for free (no item consumed)
  • Shield radius always stays in sync with the ward's current level radius — upgrading while shielded grows it instantly
  • While shield is active:
    • All structures (WearNTear) in zone: damage blocked
    • All players in zone: damage blocked
    • Monsters inside zone: cannot acquire targets
    • Projectiles (arrows, etc.) are blocked at the dome boundary
    • Monsters near the boundary turn and flee in advance, and any that still get inside are immediately pushed back outside — monsters effectively cannot exist inside the zone
    • Shield VFX dome displayed
  • Shield remaining time shown in hover text to all players
  • HUD displayed at screen bottom when inside the zone

Upgrade VFX/SFX

  • Plays a visual effect and sound cue when the ward upgrade succeeds

Admin Bypass

  • Toggle in F1 Config to ignore the placement limit, placement material cost, and upgrade material/gold cost entirely — instant placement/upgrade
  • Fuel upkeep still applies as normal — an admin-only switch for testing/operations

⌨️ Key Bindings (rebindable in F1 Config)
Key (default) Target Description
U Creator Upgrade Territory Ward (consumes materials)
K Creator (Lv5+) Activate/deactivate Territory Shield
R Anyone Toggle range ring ON/OFF (within 5m of ward)
Shift+R Non-creator Join / leave ward
Q Anyone (hovering the ward) Open fuel storage
Shift+E Creator Open whitelist member management UI

All 4 keys (U/K/R/Q) can be freely rebound in the General section of the F1 ConfigurationManager.


🏰 Level System (Lv1~8, fully implemented)

Upgrading the ward grows its radius, fuel requirement, and storage size together.
All values are adjustable by server admins via F1 Config.

Level Biome Default Radius Primary Fuel Interval
Lv1 Meadows 10m Wood 3 min
Lv2 Black Forest 13m RoundLog 4 min
Lv3 Swamp 16m ElderBark 5 min
Lv4 Mountain 19m Obsidian 6 min
Lv5 Plains — Shield unlocked 22m FineWood 7 min
Lv6 Ocean 25m Wood + RoundLog 8 min
Lv7 Mistlands 28m YggdrasilWood 9 min
Lv8 Ashlands 30m Wood + YggdrasilWood 10 min

Secondary fuel is always 1x Resin, except Lv5 which uses 1x GreydwarfEye instead. A ward can only use its Lv1 fuel or its own level's fuel.


🛡️ How to Use the Shield
  1. Upgrade the ward to Lv5 or higher
  2. Place 1x SurtlingCore in the ward's fuel storage
  3. Stand near the ward and press K (default) → consumes 1x SurtlingCore, starts 1 hour of protection
  4. Shield dome VFX appears + activation message displayed (radius automatically matches the ward's level)
  5. Remaining time shown in hover text for all players
  6. HUD at screen bottom shows remaining time while inside the zone
  7. Press K again to deactivate immediately — the remaining time is banked, not discarded
  8. Reactivating while banked time remains resumes for free; once it runs out, SurtlingCore is required again

⚙️ Configuration

Use ConfigurationManager (F1 key) to adjust all settings in-game via GUI.

Config file location

BepInEx/config/KorCaptain_territorial_ward.cfg
Category Description
General System on/off, max ward count, door auto-close delay, shield item, key bindings (U/K/R/Q), Admin Bypass
Level 1 ~ Level 8 Radius, fuel (primary/secondary/tertiary) type & amount, consumption interval, upgrade materials & gold

⚠️ Server Sync: Every setting is server-admin-only. When the server admin (an account listed in Valheim's adminlist) changes a value in F1, it is immediately force-applied to all connected clients. Non-admin clients cannot edit these settings in F1 (locked), and even if a client has a different value saved in their own local .cfg file, it is ignored and overwritten by the server's value upon connecting.


📥 Installation
  1. Recommended: Install via r2modman / Thunderstore
  2. Manual: Copy DLL to BepInEx/plugins/Captain_territorial/

⚠️ Both the server and every client (player) must install this mod. If only one side has it, connections will be rejected or the mod won't function correctly (NetworkCompatibility: EveryoneMustHaveMod).


🎮 My Other Mods / 함께 즐기면 더 좋은 모드

🌳 CaptainSkillTree

스킬트리·직업·액티브 스킬·길드/파티 시스템을 추가하는 모드입니다. 함께 플레이하는 동료와 거점을 꾸릴 때 어울립니다.

Adds a skill tree, job classes, active skills and a guild/party system. A good fit when building a base together with friends.

👹 MonsterModifiers

몬스터에게 랜덤 속성을 부여해 난이도를 넓혀 주는 모드입니다.

Gives monsters random modifiers to widen the difficulty.

🗺️ PotalMap

지도에서 포탈을 클릭해 이동하고, 공개/개인/길드 접근 모드로 거점 포탈 사용자를 제한할 수 있습니다.

Teleport by clicking portals on the map, and limit who can use your base portals with Public/Private/Guild modes.

🪦 FindTomb

사망 후 무덤 위치를 지도 핀과 방향 안내로 알려 줍니다.

Shows where your grave is with map pins and a direction guide after you die.

🎵 CaptainAudio

음악·환경음·효과음을 원하는 파일로 교체하는 모드입니다.

Replaces music, ambient sounds and sound effects with your own audio files.

🛠️ NullReferenceFix

여러 모드를 함께 쓸 때 생기는 NullReferenceException과 로그 스팸을 줄여 줍니다.

Reduces NullReferenceException crashes and log spam when running many mods together.

Changelog

Changelog / 변경 로그

2026-09-10 (v1.0.87)

  • Fixed the mod failing to load entirely (Harmony patch crash) after the latest Valheim update added a skipValidPositionCheck parameter to Inventory.AddItem and renamed InventoryGrid.Element to the top-level InventoryElement type (the latter was also a compile error, not just a runtime one).
  • 발헤임 최신 업데이트로 Inventory.AddItem에 skipValidPositionCheck 파라미터가 추가되고 InventoryGrid.Element가 최상위 InventoryElement 타입으로 이름이 바뀌어(후자는 런타임이 아니라 컴파일 에러였음) 모드 전체가 로드되지 않던 문제 수정.

2026-08-22 (v1.0.86)

  • Added a passive_shield_enabled config toggle (General, default off) for the Lv1+ always-on passive HP shield — turning it off disables damage absorption, physical monster blocking, the shield dome visual, and the hover/HUD numeric display all at once (gated through the existing single HasPassiveShield() check plus the two UI spots that read the HP value directly). The Lv5+ full-invincibility shield (K key) is unrelated and always works regardless of this setting
  • 레벨1+ 항상 켜져 있던 패시브 체력형 보호막을 컨피그에서 켜고 끌 수 있는 passive_shield_enabled 설정 추가(General, 기본값 꺼짐) — 끄면 데미지 흡수, 몬스터 물리 차단, 보호막 돔 시각효과, 호버/HUD 수치 표시가 한 번에 전부 꺼진다(기존 단일 게이트 HasPassiveShield()와, 수치를 직접 읽던 UI 2곳을 함께 게이팅). 레벨5+ K키 완전무적 실드는 이 설정과 무관하게 그대로 작동함

2026-08-21 (v1.0.85)

  • Fixed the ward's shield still blocking hover tooltips and the "E" interact prompt for nearby objects (e.g. a chest) whenever the camera's raycast crossed the ward boundary, even while invisible — the passive shield's monster-block trigger box (TW_ShieldTrigger) had been moved to the piece_nonsolid layer to fix an earlier camera-clipping bug, but that layer is still included in Player.m_interactMask, so the invisible box (which has no Hoverable/Interactable) absorbed the player's hover raycast and stopped it from reaching anything behind it. Moved to the character_trigger layer instead — the same layer vanilla already uses for CraftingStation/EffectArea proximity detection — which is excluded from both the interact and remove-ray raycast masks while still triggering normally against character colliders, so monster push-back is unaffected
  • 카메라 시야가 와드 경계를 가로지르면(투명 상태여도) 상자 등 주변 오브젝트의 툴팁과 E 상호작용 프롬프트가 안 뜨던 문제 수정 — 패시브 보호막의 몬스터 물리 차단용 트리거 박스(TW_ShieldTrigger)가 과거 카메라 클리핑 버그 수정을 위해 piece_nonsolid 레이어로 옮겨졌었는데, 이 레이어가 여전히 Player.m_interactMask에 포함돼 있어 Hoverable/Interactable이 없는 이 투명 박스가 플레이어의 호버 레이캐스트를 그대로 가로채 뒤쪽 오브젝트에 닿지 못하게 막고 있었다. 바닐라가 CraftingStation/EffectArea 근접 감지에 이미 쓰는 character_trigger 레이어로 옮겨 해결 — 상호작용/제거 레이캐스트 마스크 어디에도 없으면서 캐릭터 콜라이더와의 트리거 충돌은 정상 동작하므로 몬스터 밀어내기 기능은 그대로 유지됨

2026-08-20 (v1.0.84)

  • Fixed the ward's hover info panel popping up even while not looking at it — the passive shield's monster-block trigger box (TW_ShieldTrigger, covering the whole ward footprint) was parented under the ward's own Hoverable object, so a camera raycast hitting this invisible box anywhere inside/near the ward area (e.g. just looking up at the sky while standing in the zone) got resolved to the ward's hover text via GetComponentInParent<Hoverable>(). The trigger object is now placed independently (matching the existing shield-dome VFX object's no-parent pattern) with its position/rotation copied explicitly, so it no longer leaks into hover detection while the physical monster-block behavior stays identical
  • 와드를 보고 있지 않아도 정보창이 뜨던 문제 수정 — 패시브 보호막의 몬스터 물리 차단용 트리거 박스(TW_ShieldTrigger, 와드 전체 범위를 덮음)가 와드 자신의 Hoverable 오브젝트의 자식으로 붙어있어, 와드 구역 안/근처 어디를 보든(예: 구역 안에서 하늘만 봐도) 카메라 레이가 이 투명 박스에 맞으면 GetComponentInParent<Hoverable>()이 와드 정보창으로 잘못 인식하고 있었다. 트리거 오브젝트를 기존 실드 돔 VFX 오브젝트와 동일한 무부모 방식으로 독립 배치(위치/회전만 명시적으로 복사)해 더 이상 호버 판정에 새지 않도록 수정 — 물리적 몬스터 차단 동작 자체는 그대로 유지됨
  • Fixed the camera still snapping into a near-first-person view near a ward's boundary even after the shield-dome VFX collider fix — the passive shield's monster-block trigger box (TW_ShieldTrigger) was on the same "piece" layer as the ward itself, which is included in every solid/camera-blocking raycast mask in vanilla Valheim. Moved it to the "piece_nonsolid" layer, which vanilla already uses specifically to mean "piece-related but excluded from solid/camera-block checks" while still fully participating in physical trigger overlap with characters, so the monster push-back behavior is unaffected
  • 실드 돔 VFX 콜라이더 수정 이후에도 와드 경계 근처에서 카메라가 여전히 1인칭처럼 당겨지던 문제 수정 — 패시브 보호막의 몬스터 물리 차단용 트리거 박스(TW_ShieldTrigger)가 와드 자신과 같은 "piece" 레이어를 쓰고 있었는데, 이 레이어는 바닐라 발헤임의 모든 고체/카메라 차단 레이캐스트 마스크에 포함되어 있었다. 발헤임이 이미 "피스 계열이지만 고체/카메라 차단 판정에서는 제외"용으로 쓰는 "piece_nonsolid" 레이어로 옮겨 해결 — 이 레이어에서도 캐릭터와의 물리 트리거 오버랩은 정상 동작하므로 몬스터 밀어내기 기능은 그대로 유지됨
  • Fixed the bottom-of-screen shield status text overlapping into an unreadable jumble when standing inside multiple overlapping wards (common when players deliberately stack 3-4 wards to extend territory) — every ward controller drew its own status text at the exact same fixed screen position. Overlapping wards now stack vertically in a stable order (based on ward registration order, so it doesn't flicker/reorder frame to frame) instead of drawing on top of each other
  • 와드를 여러 개 겹쳐 설치한 구역(영토 확장을 위해 3~4개씩 겹쳐 쓰는 경우가 흔함) 안에 있으면 화면 하단 보호 상태 텍스트가 전부 같은 좌표에 겹쳐 찍혀 읽을 수 없던 문제 수정 — 겹친 와드마다 자기 텍스트를 항상 같은 고정 좌표에 그리고 있었다. 이제 겹친 와드들이 안정적인 순서(와드 등록 순서 기준이라 프레임마다 순서가 바뀌지 않음)로 세로로 나란히 쌓여 표시됨

2026-08-19 (v1.0.81)

  • Fixed the camera snapping into a near-first-person view whenever the player got close to or stood inside a ward's shield dome. The dome's visual mesh is cloned from the vanilla Ashlands charred_shieldgenerator piece, which carries its own Collider(s); left in place, Valheim's camera-clipping raycast (which checks for solid geometry between the player and camera) treated the dome as a wall and pulled the camera in tight. The dome is purely a visual effect (rendered via the shield's screen-space image effect), so all colliders on the cloned dome are now stripped immediately after it's created
  • 와드 보호막 돔 근처/안쪽에 있을 때 카메라가 거의 1인칭처럼 바짝 당겨지던 문제 수정 — 돔 시각 효과는 바닐라 애쉬랜드 charred_shieldgenerator 피스에서 복제해오는데, 이 피스에 딸려있던 Collider가 그대로 남아있어 발헤임의 카메라 클리핑 레이캐스트(플레이어-카메라 사이 벽이 있는지 검사)가 돔을 벽으로 인식해 카메라를 당기고 있었다. 돔은 화면 이펙트로만 그려지는 순수 시각 요소이므로, 생성 직후 복제된 돔의 모든 Collider를 제거하도록 수정
  • Added a shield_dome_visible config toggle (General, default on) to hide the shield dome's screen visual entirely — the underlying shield gameplay (Lv5+ full invincibility, Lv1+ passive HP shield, monster physical block) is unaffected either way, only the on-screen dome rendering is gated
  • 보호막 돔 화면 표시를 완전히 끌 수 있는 shield_dome_visible 설정 추가(General, 기본 켜짐) — 꺼도 실드 게임플레이(레벨5+ 완전무적, 레벨1+ 패시브 HP 보호막, 몬스터 물리 차단)는 그대로 작동하고 화면 상 돔 표시만 사라짐

2026-08-17 (v1.0.79)

  • Fixed the passive shield's dome visual not showing (or barely showing) at Lv2+ wards, especially noticeable right after loading a save where the ward was already Lv2+ — the dome's actual on-screen size (localScale) is smoothed toward the target radius frame by frame in vanilla's ShieldGenerator.Update() rather than snapping instantly, and it was never set explicitly on creation, so it started from the source Ashlands prefab's own (much smaller) default scale. The gap was small enough to go unnoticed at Lv1 but grew with each level. Now snapped to the correct scale immediately both when the dome is first created and whenever the ward's level changes
  • 레벨2+ 와드에서 보호막 돔 그래픽이 안 보이거나 거의 안 보이던 문제 수정 — 특히 이미 레벨2+ 상태인 와드가 있는 세이브를 불러온 직후 두드러짐. 돔의 실제 화면 크기(localScale)는 바닐라 ShieldGenerator.Update()에서 목표 반경을 향해 매 프레임 서서히 보간될 뿐 즉시 스냅되지 않는데, 생성 시점에 한 번도 직접 설정한 적이 없어 원본 애쉬랜드 프리팹의 (훨씬 작은) 기본 스케일에서 시작하고 있었다. 레벨1은 격차가 작아 눈에 덜 띄었지만 레벨이 오를수록 격차가 커짐. 돔을 처음 만들 때와 와드 레벨이 바뀔 때 모두 즉시 정확한 크기로 스냅하도록 수정
  • Fixed the passive shield taking contact/attack drain damage from non-hostile wildlife (deer, boar, chicken, etc.) and any non-monster damage source (fall damage, fire, decay, friendly fire) as if it were a real monster attack, which could burn through a Lv1 shield's 200 HP in well under a minute with no actual monster present. All shield-drain paths (LateUpdate() contact drain, WearNTear/Character ApplyDamage absorption, and the Humanoid.StartAttack siege drain) now require the damage source to actually be a hostile monster faction (Character.IsMonsterFaction) — wildlife is still physically pushed back at the boundary as before, it just no longer costs shield HP
  • 사슴/멧돼지/닭 같은 비적대 야생동물과 낙사/화상/부식/PvP 등 몬스터가 아닌 피해까지 실제 몬스터 공격처럼 패시브 보호막을 깎던 문제 수정 — 몬스터가 전혀 없어도 야생동물이 경계에 닿기만 하면 레벨1 기준 200 HP 보호막이 1분도 안 돼 파괴될 수 있었다. 보호막을 깎는 모든 경로(LateUpdate() 접촉 드레인, WearNTear/Character ApplyDamage 흡수, Humanoid.StartAttack 공성 드레인)가 이제 실제 적대 몬스터(Character.IsMonsterFaction)의 피해일 때만 작동한다 — 야생동물은 기존처럼 경계에서 밀려나기만 하고 더 이상 보호막 체력을 소모하지 않는다
  • Fixed the passive shield still repeatedly dropping to 0 and slowly regenerating with no monster in sight even after the previous fix — the two projectile/object-hit drain paths (Projectile.FixedUpdate's boundary check and ShieldGenerator.OnProjectileHit, the latter also triggered by non-projectile hazard objects like Ashlands' Cinder ash/embers) never verified the source was actually a hostile monster, so a player's own arrow crossing the boundary or ambient Ashlands ash could drain the shield repeatedly faster than the default 1 HP/min regen could keep up. Both paths now require the projectile's owner to be a genuine monster faction (Character.IsMonsterFaction) before draining; the existing block/destroy behavior for those objects is unchanged
  • 이전 수정 이후에도 몬스터가 전혀 안 보이는데 보호막이 반복적으로 0이 됐다가 서서히 회복되던 문제 수정 — 발사체/오브젝트 피격 드레인 경로 2곳(Projectile.FixedUpdate 경계 검사와, 애쉬랜드 화산재/불씨 같은 비발사체 위험 오브젝트에도 호출되는 ShieldGenerator.OnProjectileHit)이 실제 공격 주체가 적대 몬스터인지 전혀 검증하지 않아, 플레이어 자신이 경계 너머로 쏜 화살이나 애쉬랜드 주변 환경 위험 요소만으로도 기본 회복량(1 HP/분)을 따라잡지 못할 만큼 빠르게 반복 드레인될 수 있었다. 두 경로 모두 이제 발사체 소유자가 실제 몬스터(Character.IsMonsterFaction)일 때만 보호막을 깎으며, 기존 차단/파괴 동작은 그대로 유지된다

2026-08-16 (v1.0.76)

  • Fixed monsters still briefly slipping a step or two inside the shield boundary before being pushed back, and fixed body-checking the boundary (without swinging a weapon) not costing any shield energy at all. OnTriggerStay reacts to Unity's physics trigger pass, but if Valheim's own character movement (CustomFixedUpdate, invoked manually from within some other script's FixedUpdate) runs after that pass completes for the same tick, our correction ends up chasing one tick behind. Added a LateUpdate() correction — guaranteed by Unity to run after every Update()/FixedUpdate() for that frame has finished — that re-confirms the final position every rendered frame and, whenever it actually had to push a hostile back, drains the shield by a new passive_shield_contact_damage_per_second amount (scaled by Time.deltaTime), independent of the existing exact-weapon-damage drain on actual attack swings
  • 몬스터가 경계를 살짝 넘어 한두 걸음 들어왔다가 밀쳐지던 문제와, 무기를 휘두르지 않고 몸으로만 부딪힐 때는 보호막 에너지가 전혀 깎이지 않던 문제 수정. OnTriggerStay는 Unity 물리 트리거 판정 시점에 반응하는데, Valheim 자체 캐릭터 이동(CustomFixedUpdate, 다른 스크립트의 FixedUpdate 안에서 수동 호출됨)이 같은 틱에서 그 판정 이후에 실행되면 우리 보정이 한 틱씩 늦게 쫓아가게 된다. 그 프레임의 모든 Update()/FixedUpdate() 처리가 끝난 뒤 Unity가 보장적으로 마지막에 호출해주는 LateUpdate()에서 매 렌더 프레임마다 최종 위치를 재확정하고, 실제로 밀어낸 경우(=몸으로 부딪힘)에는 새 passive_shield_contact_damage_per_second 설정값(Time.deltaTime로 스케일링)만큼 보호막을 깎도록 추가 — 실제 무기 스윙 시의 정확한 데미지 드레인과는 별개로 동작함
  • Fixed the physical block still not reliably stopping monsters from entering — repeatedly chasing Valheim's internal method call order (UpdateMotion → CustomFixedUpdate) to find the "last" point in the tick kept getting outraced by some other internal step that moves the character afterward. Replaced with a Unity trigger collider (OnTriggerStay) covering the ward's full rectangle, which is driven by the physics engine itself rather than by guessing Valheim's custom update order — non-player, non-tamed characters inside get clamped back out and pushed every physics step regardless of what else is going on internally. Being a trigger (not solid), the owner and tamed animals can still walk in and out of their own base freely
  • 몬스터가 여전히 안정적으로 막히지 않던 물리 차단 문제 수정 — Valheim 내부 메서드 호출 순서(UpdateMotion → CustomFixedUpdate)를 따라가며 "그 틱의 마지막 지점"을 계속 찾는 방식은, 그 이후에 캐릭터 위치를 바꾸는 또 다른 내부 처리에 매번 따라잡혀 뚫릴 수 있었다. 대신 와드 사각형 전체를 덮는 Unity 트리거 콜라이더(OnTriggerStay)로 교체 — Valheim의 커스텀 업데이트 순서를 추측하는 대신 물리 엔진 자체가 매 물리틱 신뢰성 있게 호출해준다. 비플레이어·비길들여진 캐릭터만 안에 있으면 매 틱 바깥으로 되밀어내며, 트리거(솔리드 아님)이므로 소유자와 길들인 동물은 평소처럼 자기 기지를 자유롭게 드나들 수 있음
  • Added a Lv1+ passive HP-based territory shield (200/400/600/800/1000/1200/1500/2000 by level) that always absorbs incoming damage while up, shows current/max on the ward hover text and HUD (e.g. 240 / 400), physically blocks monsters from entering while it holds, drains as monsters get stuck sieging the boundary, regenerates 1 HP per real-time minute once broken, and pauses while the existing Lv5+ full invincibility (K key) is active — reverting to the HP display once that ends
  • 레벨1부터 항상 켜져 있는 체력형 영토 보호막 추가(레벨별 200/400/600/800/1000/1200/1500/2000) — 데미지를 받으면 수치가 깎이고, 와드 호버 텍스트/HUD에 현재·최대 수치가 240 / 400 형식으로 표시되며, 살아있는 동안 몬스터가 물리적으로 안으로 들어오지 못하고 경계에서 막혀 보호막을 깎아나간다. 0이 되면 사라지고 실제 시간 1분당 1씩 자동 회복. 레벨5+ 기존 K키 완전무적이 켜져 있는 동안은 수치가 깎이지 않고 표시가 "완전무적"으로 전환되며, 종료 시 다시 수치 표시로 돌아옴
  • Fixed monsters still being able to walk fully inside the passive shield (the position-clamp ran as a Prefix on Character.UpdateMotion, so the AI's own UpdateWalking step — called from inside that same method — could re-advance the monster past the boundary on the same frame; moved to a Postfix and now also cancels the inward velocity component), fixed monster projectiles passing straight through instead of being blocked (vanilla ShieldGenerator.CheckProjectile's global-instance heuristic wasn't reliable with multiple simultaneous ward domes; added an independent per-ward rectangle check on Projectile.FixedUpdate), switched the passive shield's damage absorption from blocking WearNTear.Damage/Character.Damage outright (which skipped vanilla's hit spark/sound and the "base under attack" ward alert entirely, since those actually live inside the RPC-only RPC_Damage → ApplyDamage chain that never got invoked) to intercepting ApplyDamage's health-loss step instead, so the vanilla hit effects/alert still play in full while only the actual HP loss gets redirected into the shield, and added natural-spawn suppression inside active wards regardless of level/size via SpawnSystem.IsSpawnPointGood
  • 몬스터가 패시브 보호막 안으로 완전히 걸어 들어올 수 있던 문제 수정(위치 클램프가 Character.UpdateMotion의 Prefix로 걸려 있어, 같은 메서드 내부에서 호출되는 AI의 UpdateWalking 단계가 같은 프레임에 다시 경계 안쪽으로 밀고 들어올 수 있었음 — Postfix로 전환하고 안쪽 방향 속도 성분도 함께 제거), 몬스터 투사체가 그대로 뚫고 들어오던 문제 수정(바닐라 ShieldGenerator.CheckProjectile의 전역 인스턴스 기반 판정이 와드 여러 개가 동시에 돔을 등록하는 상황에서 신뢰할 수 없었음 — Projectile.FixedUpdate에 와드별 독립적인 사각형 경계 판정 추가), 보호막이 데미지를 흡수할 때 바닐라 피격 스파크/사운드와 "기지 공격받음" 와드 경고가 전혀 재생되지 않던 문제 수정(WearNTear.Damage/Character.Damage 자체를 막아 그 이펙트/알림이 들어있는 RPC_Damage→ApplyDamage 체인이 아예 호출되지 않았음 — 대신 ApplyDamage의 체력 차감 단계만 가로채도록 변경해 이펙트/알림은 그대로 재생하고 실제 피해만 보호막으로 돌림), 영토 와드 범위가 넓어져도 그 안에서 몬스터가 자연 스폰되지 않도록 SpawnSystem.IsSpawnPointGood에 레벨 무관 차단 추가
  • Fixed blocked monster projectiles not draining the passive shield's HP — the actual block was happening through vanilla's ShieldGenerator.OnProjectileHit (reached via the existing VfxGuard prefix), not the new independent Projectile.FixedUpdate check, so the drain call there was never reached; added a companion prefix on OnProjectileHit that identifies which ward's dummy shield generator got hit and drains it by that exact projectile's damage before it gets destroyed
  • 막힌 몬스터 투사체가 보호막 수치를 깎지 못하던 문제 수정 — 실제 차단은 (기존 VfxGuard prefix를 거쳐) 바닐라 ShieldGenerator.OnProjectileHit이 처리하고 있어서, 새로 추가했던 독립적인 Projectile.FixedUpdate 검사의 드레인 호출까지 도달하지 못했음 — OnProjectileHit에 이 히트가 어느 와드의 더미 실드 제너레이터인지 식별해 파괴되기 전에 정확한 투사체 데미지만큼 깎는 동반 prefix 추가
  • Fixed the physical block still letting monsters creep fully inside (the clamp patched Character.UpdateMotion, but Character.CustomFixedUpdate calls SyncVelocity() right after UpdateMotion returns, re-overwriting our velocity cancellation with the cached inward velocity every tick — moved the patch to CustomFixedUpdate itself, the true end-of-tick point, with an explicit owner check to match the original's gating) and fixed melee attacks against the boundary not draining the shield at all (replaced the 1Hz IsAlerted() + flat-rate siege tick, which wasn't reliably triggering and used an arbitrary damage number instead of the attacker's real damage, with an event-driven Humanoid.StartAttack postfix that drains the shield by that exact monster's current weapon damage whenever it swings while blocked at the boundary — PassiveShieldSiegeDamagePerSecond config removed as it's no longer used)
  • 몬스터가 여전히 보호막 안쪽으로 서서히 파고들던 문제 수정(클램프가 Character.UpdateMotion을 패치하고 있었는데, Character.CustomFixedUpdate가 UpdateMotion 직후 SyncVelocity()를 호출해 우리가 상쇄한 속도를 매 틱 캐시된 안쪽 방향 속도로 다시 덮어쓰고 있었음 — 패치 대상을 그 틱의 진짜 마지막 지점인 CustomFixedUpdate 자체로 옮기고 원본과 동일하게 소유자 체크를 명시적으로 추가), 경계에서 근접 공격을 해도 보호막이 전혀 깎이지 않던 문제 수정(신뢰도 낮게 발동하던 IsAlerted() + 고정 배율 기반 1초 주기 공성 틱을, 몬스터가 경계에 막힌 채 스윙할 때마다 그 몬스터의 실제 장착 무기 데미지만큼 정확히 깎는 이벤트 기반 Humanoid.StartAttack postfix로 교체 — 더 이상 쓰지 않는 PassiveShieldSiegeDamagePerSecond 설정 제거)

2026-08-12 (v1.0.70)

  • Sap Collector still could not be placed anywhere, even with zero Territory Wards on the map, despite the 1.0.65 changelog claiming it was already exempted — the always-allowed list had "SapCollector" (PascalCase, no prefix) while the real vanilla prefab name is piece_sapcollector, so the case-sensitive match never fired and placement always fell through to the ward-required block. Fixed the entry to piece_sapcollector
  • 와드가 전혀 없는 장소에서도 수액 채취기가 계속 설치되지 않던 문제 수정 — 1.0.65 changelog에는 이미 예외 처리됐다고 기록되어 있었지만, 항상 허용 목록에 "SapCollector"(PascalCase, 접두사 없음)로 등록되어 있었고 실제 바닐라 프리팹 이름은 piece_sapcollector라 대소문자 불일치로 매칭이 한 번도 성공하지 못해 계속 와드 필요 블록으로 떨어졌다. piece_sapcollector로 수정
1.0.69
  • ✅fix1 : Tree sapling placement was still blocked outside an active Territory Ward despite the 1.0.58 changelog claiming an exception — IsTreeSapling() matched a "sapling_" prefix, but real vanilla tree prefabs (Beech_Sapling, Birch_Sapling, FirTree_Sapling, Oak_Sapling, PineTree_Sapling) use a "_Sapling" suffix; the prefix form actually belongs to crop plants (sapling_carrot, sapling_onion, etc.), so the exception matched the exact opposite of what it was meant to and never fired for real trees. Switched the check to match the _Sapling suffix instead
  • ✅fix1 : 1.0.58 changelog에는 나무 묘목이 와드 상태와 무관하게 심어진다고 기록되어 있었지만, 실제로는 활성 와드 밖에서 계속 막혀 있던 버그 수정 — IsTreeSapling()이 "sapling_" 접두사로 매칭했는데, 실제 바닐라 나무 프리팹(Beech_Sapling, Birch_Sapling, FirTree_Sapling, Oak_Sapling, PineTree_Sapling)은 _Sapling 접미사 형식이고, 접두사 형식은 오히려 작물류(sapling_carrot, sapling_onion 등)에 해당해 정확히 반대로 매칭하고 있어 실제 나무는 한 번도 걸리지 않았다. 접미사 검사로 교체
  • ✅new1 : Territory Ward is no longer destructible by monster attacks at any level — the ward object itself is now always immune to WearNTear damage regardless of level or whether the Lv5+ shield is active. Previously the ward had no damage protection at all unless a Lv5+ owner manually activated the shield; other buildings inside the zone are unaffected and still only protected while that shield is on
  • ✅new1 : 영토 와드가 어떤 레벨에서도 몬스터 공격으로 파괴되지 않도록 수정 — 레벨이나 Lv5+ 실드 활성 여부와 무관하게 와드 오브젝트 자신은 항상 WearNTear 데미지에 면역이 된다. 이전에는 Lv5+ 설치자가 실드를 수동으로 켜지 않는 한 와드 자체에 아무 보호도 없었다. 구역 내 다른 건물은 영향받지 않으며 여전히 실드가 켜져 있을 때만 보호된다
1.0.68
  • ✅fix1 : The Harmony prefix added in 1.0.58 only guarded the name-based Inventory.RemoveItem(string, int, int, bool) overload against external "pull fuel from nearby containers" style access. It missed the ItemData-reference overloads (RemoveItem(ItemDrop.ItemData), RemoveItem(ItemDrop.ItemData, int), RemoveOneItem(ItemDrop.ItemData)), which is what let materials still get silently drained from ward storage when crafting elsewhere. All three are now guarded the same way, but withdrawal is still allowed when the ward's own fuel/shield consumption is in progress, or when a permitted player has the storage genuinely open in the container UI (manual drag/quick-move) — only access through a raw Inventory reference held by outside code is blocked
  • ✅fix1 : 1.0.58에서 추가한 Harmony prefix는 이름 기반 Inventory.RemoveItem(string, int, int, bool) 오버로드만 막고 있어, 다른 곳에서 제작할 때 이 오버로드가 아닌 ItemData 참조 기반 오버로드(RemoveItem(ItemDrop.ItemData), RemoveItem(ItemDrop.ItemData, int), RemoveOneItem(ItemDrop.ItemData))로 연료 창고 재료가 몰래 빠져나가는 경로는 막지 못했다. 세 오버로드 모두 같은 방식으로 차단하도록 추가했으며, 이 모드 자신의 연료/실드 소모나 허용된 플레이어가 실제로 창고 UI를 열어 직접 드래그/퀵무브하는 정당한 조작(InventoryGui.m_currentContainer가 이 저장고를 가리킬 때)은 그대로 허용된다 — 외부 코드가 Inventory 참조를 직접 들고 조작하는 경우만 차단된다
  • ✅fix2 : Fixed the Q-key fuel storage shortcut opening the ward's storage for any player hovering the ward, regardless of permission — it called Container.Interact() directly, bypassing the Player.Interact access gate that the vanilla E-key path goes through. Now checks PrivateArea.HaveLocalAccess() first and reports an intrusion alert + denial message instead of opening the UI for non-members
  • ✅fix2 : Q키로 연료 창고를 여는 단축키가 권한과 무관하게 와드를 호버 중인 아무 플레이어에게나 창고를 열어주던 문제 수정 — Container.Interact()를 직접 호출해 바닐라 E키 경로가 거치는 Player.Interact 접근 검사를 건너뛰고 있었다. 이제 먼저 PrivateArea.HaveLocalAccess()를 확인하고, 권한이 없으면 창고를 열지 않고 침입 경고와 거부 메시지만 표시한다
  • ✅improve1 : Territory Ward removal (hammer remove tool) was already restricted to the creator only; extended it so a server admin or host can also remove it, matching the same ZNet.LocalPlayerIsAdminOrHost() check already used elsewhere in this mod for admin bypass
  • ✅improve1 : 영토 와드 제거(망치 제거 도구)는 기존에도 설치자만 가능하도록 막혀 있었는데, 이 모드의 다른 관리자 우회 검사에서 이미 쓰던 ZNet.LocalPlayerIsAdminOrHost()를 그대로 사용해 서버 관리자/호스트도 제거할 수 있도록 확장했다
1.0.67
  • ✅new1 : Territory Shield (Lv5+) no longer ends after a single fixed 1-hour timer — it now auto-renews every hour by consuming 1x Surtling Core from ward storage as long as stock remains. Manual pause/resume (banked remaining time) is unchanged; when Surtling Core runs out the shield ends naturally with a one-time warning, and auto-renewal resumes automatically once more Surtling Core is stored
  • ✅new1 : Lv5+ 영토 보호(실드)가 더 이상 고정된 1시간 타이머로 끝나지 않습니다 — 연료 창고에 슈르트링 코어가 남아있는 한 매시간 1개씩 자동으로 소모하며 계속 갱신됩니다. 수동 정지/재개(잔여시간 보관) 동작은 그대로이며, 슈르트링 코어가 떨어지면 실드가 자연 종료되며 1회만 경고 메시지가 뜨고 코어를 다시 채우면 다음 체크에서 자동으로 갱신이 재개됩니다

63 older entries, full version history & downloads →

Manual download
Just this mod One .zip — Captain territorial 1.0.87
Files you'll get 2
  • Captain territorial 1.0.87 KorCaptain this mod Get
  • Jotunn 2.29.1 ValheimModding Get

Your browser may ask permission to download several files at once. How to install these manually

Manual installation instructions
1

Install BepInExPack Valheim

BepInExPack Valheim is required to run mods in Valheim.

Download BepInExPack Valheim 5.4.2351 · View mod page

Check out the mod page for detailed installation instructions.

2

Install Captain territorial

This mod must be installed on both the client and the server.

Download Captain territorial 1.0.87

Extract the ZIP and place the file(s) into the BepInEx/plugins/ folder inside your Valheim game folder.