Valheim
Install

Details

Last Updated
First Uploaded
Downloads
234
Likes
1
Size
277KB
Dependency string
korCaptain-Captain_territorial-1.0.50
Dependants
ADDatHost Valheim hosting
30% off!

Changelog / 변경 로그

[1.0.50] - 2026-08-03

Files Modified / 수정 파일

InteractionBlockPatch.cs

  • ✅fix1 : [InteractionBlockPatch.cs] Fixed the hover text literally showing "<color=gray>" instead of applying the color — Unity's rich-text color-name table only recognizes the British spelling "grey", not "gray", so the tag failed to parse and rendered as raw text. Both <color=gray> occurrences (join-blocked hint, shield-off hint) now use "grey" via a shared Gray constant
  • ✅fix1 : [InteractionBlockPatch.cs] 호버 텍스트에 "<color=gray>" 태그가 색상 적용 없이 글자 그대로 노출되던 버그 수정 — Unity 리치텍스트 색상명 테이블은 "gray"가 아니라 영국식 철자 "grey"만 인식해서 태그 파싱이 실패했었음. <color=gray> 두 곳(가입 차단 힌트, 실드 꺼짐 힌트) 모두 공용 Gray 상수("grey")로 교체

[1.0.49] - 2026-08-03

Files Modified / 수정 파일

Config.cs

  • ✅fix1 : [Config.cs] Synced code-side config defaults with the live server's tuned .cfg (fuel intervals for Lv1–5/7–8, secondary-fuel amounts for Lv2–5/7 now default to 0, Lv5 secondary fuel corrected to Resin, Lv7 primary fuel amount corrected to 1) — new installs now start with the same balance already in production
  • ✅fix1 : [Config.cs] 서버에 실제 적용 중인(튜닝된) .cfg 값에 맞춰 코드 기본값 동기화 (Lv1~5/7~8 연료 소모 간격, Lv2~5/7 보조 연료 소모량 0으로 정정, Lv5 보조 연료를 수지로 정정, Lv7 주 연료 소모량 1로 정정) — 새로 설치하는 서버도 현재 운영 밸런스와 동일하게 시작함

[1.0.48] - 2026-08-03

Files Modified / 수정 파일

TerritoryWardController.cs

  • ✅fix1 : [TerritoryWardController.cs] Fixed a bug where fuel would show "insufficient" forever even after depositing the correct item — if ObjectDB wasn't ready yet when the ward's Start() first resolved fuel item names (prefab name → localized token), the resolution silently fell back to the raw prefab name, which never matches real inventory items (CountItems always returned 0). Extracted RefreshFuelTiers() and made CheckConsumption() retry it automatically once ObjectDB becomes available, instead of permanently caching the failed resolution
  • ✅fix1 : [TerritoryWardController.cs] 올바른 아이템을 넣어도 "연료가 부족합니다"가 계속 뜨던 버그 수정 — 와드 Start() 시점에 ObjectDB가 아직 준비되지 않은 상태로 연료 아이템 이름(프리팹명 → 로컬라이즈 토큰)을 해석하면 원본 프리팹명으로 조용히 폴백되는데, 이 이름은 실제 인벤토리 아이템과 절대 일치하지 않아(CountItems가 항상 0) 영구적으로 연료 부족 판정이 났음. RefreshFuelTiers()로 분리하고 CheckConsumption()ObjectDB 준비 후 자동 재시도하도록 수정 — 실패한 해석 결과를 영구 캐싱하지 않음

[1.0.47] - 2026-08-03

Files Modified / 수정 파일

DoorAutoClosePatch.cs

  • ✅fix1 : [DoorAutoClosePatch.cs] Extended the active-ward guard-stone bypass (previously Interact() only) to Door.GetHoverText() and Door.UseItem() as well — non-members no longer see a misleading "$piece_noaccess" hover tooltip on a door inside an active ward, and directly using a key item on such a door now works consistently with pressing E
  • ✅fix1 : [DoorAutoClosePatch.cs] 활성 와드 가드스톤 우회 범위를 (기존엔 Interact()만 해당) Door.GetHoverText(), Door.UseItem()까지 확장 — 비허용자가 활성 와드 안의 문에 호버링해도 "$piece_noaccess" 오해의 소지가 있는 툴팁이 더 이상 뜨지 않고, 열쇠 아이템을 직접 사용하는 경로도 E키와 동일하게 정상 작동

[1.0.46] - 2026-08-03

Files Modified / 수정 파일

DoorAutoClosePatch.cs · InteractionBlockPatch.cs

  • ✅fix1 : [InteractionBlockPatch.cs] Fixed a bug where the ward's own fuel storage Container was fully accessible to anyone regardless of permission — it shared the ward's root GameObject name and was caught by an early bypass meant only for the ward's own toggle/join interaction. Storage now requires creator/permitted access at all times (on or off), same as before for other structures
  • ✅fix2 : [DoorAutoClosePatch.cs] Doors inside an ACTIVE territory ward could still silently fail to open for non-members — vanilla Door.Interact() re-checks PrivateArea.CheckAccess() internally regardless of the mod's own permission pass-through. Added Patch_Door_GuardStoneBypass to temporarily disable m_checkGuardStone while inside an active ward so the "door is always operable" design actually holds
  • ✅fix1 : [InteractionBlockPatch.cs] 와드 자체의 연료 창고(Container)가 권한과 무관하게 누구에게나 열려있던 버그 수정 — 와드 본체와 같은 GameObject 이름을 공유해, 와드 토글/가입 전용으로 만든 우회 조건에 함께 걸려버렸음. 이제 On/Off 상태와 무관하게 항상 설치자/허용 멤버만 창고에 접근 가능
  • ✅fix2 : [DoorAutoClosePatch.cs] 활성화된 영토 와드 안의 문이 비허용자에게 실제로는 안 열릴 수 있던 문제 수정 — 바닐라 Door.Interact()가 모드의 권한 통과와 별개로 자체 PrivateArea.CheckAccess()를 다시 검사하고 있었음. Patch_Door_GuardStoneBypass를 추가해 활성 와드 범위 안에서는 m_checkGuardStone을 일시적으로 꺼서, "문만은 항상 열림" 설계가 실제로 보장되도록 함

[1.0.45] - 2026-08-02

Files Modified / 수정 파일

BuildRestrictionPatch.cs · InteractionBlockPatch.cs · TerritoryWard.cs

  • ✅new1 : [TerritoryWard.cs] Added IsBasicCampfire() helper to identify the basic campfire (fire_pit) prefab, excluding variants like fire_pit_iron/fire_pit_haldor/fire_pit_hildir
  • ✅new2 : [BuildRestrictionPatch.cs] Basic campfire can now be placed anywhere regardless of Territory Ward state
  • ✅new3 : [InteractionBlockPatch.cs] Basic campfire can now be lit/used regardless of Territory Ward ON/OFF or membership — same exemption as doors
  • ✅new1 : [TerritoryWard.cs] 기본 모닥불(fire_pit) 프리팹을 판별하는 IsBasicCampfire() 헬퍼 추가 — fire_pit_iron/fire_pit_haldor/fire_pit_hildir 등 다른 화로류는 제외
  • ✅new2 : [BuildRestrictionPatch.cs] 기본 모닥불은 영토 와드 상태와 무관하게 어디서나 설치 가능
  • ✅new3 : [InteractionBlockPatch.cs] 기본 모닥불은 영토 와드 ON/OFF·멤버십 여부와 무관하게 사용(점화) 가능 — 문과 동일한 예외 적용

[1.0.44] - 2026-08-02

Files Modified / 수정 파일

InteractionBlockPatch.cs · IntrusionAlertPatch.cs

  • ✅fix1 : [InteractionBlockPatch.cs] Doors can now also be opened by non-permitted players while the Territory Ward is ACTIVE (previously only exempted while the ward was OFF) — everything else (crafting stations, chests, etc.) stays blocked for non-members
  • ✅fix1 : [InteractionBlockPatch.cs] 영토 와드가 활성화(ON) 상태여도 비허용자가 문은 열 수 있도록 예외 추가 (기존엔 비활성화 상태에서만 예외였음) — 제작대·상자 등 나머지 상호작용은 여전히 비허용자에게 차단됨
  • ✅fix2 : [InteractionBlockPatch.cs, IntrusionAlertPatch.cs] Restored the intrusion-alert notification for non-permitted crafting station/container attempts — Patch_Player_Interact now blocks these before Container.Interact/CraftingStation.Interact ever run, which silently skipped IntrusionAlertPatch.cs's own hooks on those methods; CheckAndAlert() is now invoked directly from the blocking prefix
  • ✅fix2 : [InteractionBlockPatch.cs, IntrusionAlertPatch.cs] 비허용자가 제작대/상자를 사용하려 할 때 침입 경고가 안 뜨던 문제 수정 — Patch_Player_Interact가 Container.Interact/CraftingStation.Interact 자체를 호출 전에 막아버려서, 그 메서드들에 붙은 IntrusionAlertPatch.cs의 훅이 실행되지 않고 있었음. 이제 차단 지점에서 CheckAndAlert()를 직접 호출해 경고가 다시 정상적으로 뜸

[1.0.43] - 2026-08-02

Files Modified / 수정 파일

InteractionBlockPatch.cs

  • ✅improve1 : [InteractionBlockPatch.cs] Doors can now always be opened even while the Territory Ward is deactivated — previously the OFF-state block applied to every interactable, which could lock players out of their own base
  • ✅improve1 : [InteractionBlockPatch.cs] 영토 와드가 비활성화 상태여도 문은 항상 열 수 있도록 변경 — 기존엔 OFF 상태에서 모든 상호작용이 막혀 본인 집에서도 문에 갇힐 수 있었음

[1.0.42] - 2026-08-02

Files Modified / 수정 파일

ShieldBlockPatch.cs

  • ✅fix1 : [ShieldBlockPatch.cs] Beds inside a Territory Ward were losing their claimed spawn point whenever the ward turned off — deactivating the ward (or running out of fuel) also paused the Lv5+ shield, and the WearNTear damage block only applied while the shield was active, so monsters could destroy an unprotected bed and WearNTear.Destroy() would clear its owner's registered spawn. Beds inside any ward's radius are now always immune to damage regardless of the ward's on/off or shield state
  • ✅fix1 : [ShieldBlockPatch.cs] 영토 와드 안의 침대가 와드를 끄면 등록된 스폰이 해제되던 문제 수정 — 와드를 비활성화(또는 연료 고갈)하면 Lv5+ 실드도 함께 일시정지되는데, WearNTear 데미지 차단은 실드가 켜져 있을 때만 적용되어 무방비 상태의 침대가 몬스터에게 파괴되면 WearNTear.Destroy()가 소유자의 등록된 스폰을 해제시켰음. 이제 침대는 와드의 On/Off·실드 상태와 무관하게 와드 반경 안에서 항상 파괴 불가

[1.0.41] - 2026-08-02

Files Modified / 수정 파일

InteractionBlockPatch.cs · Localization.cs

  • ✅improve1 : [InteractionBlockPatch.cs] Non-members can now only join a Territory Ward while it is deactivated (OFF) — pressing E on an active ward as an outsider is blocked with a message instead of joining, and the hover hint reflects the same rule
  • ✅improve1 : [InteractionBlockPatch.cs] 영토 와드는 이제 비활성화(OFF) 상태일 때만 비허용자가 가입할 수 있음 — 활성화 중에 E를 눌러도 가입되지 않고 안내 메시지가 뜨며, 호버 힌트도 동일하게 반영

[1.0.40] - 2026-08-02

Files Modified / 수정 파일

BuildRestrictionPatch.cs · InteractionBlockPatch.cs · Localization.cs · TerritoryWard.cs

  • ✅new1 : [BuildRestrictionPatch.cs] Added a Player.RemovePiece patch restricting Territory Ward removal to its original creator only — previously any permitted member could remove someone else's ward via vanilla PrivateArea.CheckAccess
  • ✅new1 : [BuildRestrictionPatch.cs] 영토 와드는 이제 오직 설치자만 제거할 수 있도록 Player.RemovePiece 패치 추가 — 기존엔 바닐라 PrivateArea.CheckAccess 특성상 허용된 멤버도 제거가 가능했음
  • ✅new2 : [InteractionBlockPatch.cs] Player.Interact now blocks all interaction (crafting stations, chests, etc.) for non-permitted players inside an ACTIVE Territory Ward, not just while it's OFF — added TerritoryWard.IsInsideActiveWardWithoutAccess() helper (TerritoryWard.cs) and a new territoryward_not_permitted localization key
  • ✅new2 : [InteractionBlockPatch.cs] 활성화(ON)된 영토 와드 안에서도 설치자/허용 멤버가 아니면 제작대·상자 등 모든 상호작용이 차단되도록 변경 (기존엔 OFF 상태에서만 차단됨) — TerritoryWard.cs에 IsInsideActiveWardWithoutAccess() 헬퍼 추가, territoryward_not_permitted 로컬라이즈 키 신규 추가

[1.0.39] - 2026-08-02

Files Modified / 수정 파일

Config.cs

  • ✅improve1 : [Config.cs] Level 1 ward's secondary fuel (Resin) upkeep cost changed from 1 to 0 per interval — Lv1 wards now only consume Wood
  • ✅improve1 : [Config.cs] 레벨 1 와드의 보조 연료(수지) 소모량을 1에서 0으로 변경 — Lv1 와드는 이제 나무만 소모함

[1.0.37] - 2026-07-25

Files Modified / 수정 파일

TerritoryWard.cs

  • ✅fix1 : [TerritoryWard.cs] Build/interaction range checks used full 3D distance, so placing pieces too high above a ward's center silently failed the range check even though the player was horizontally well within the ward's radius — building height was effectively capped by the ward radius (and thus its level) for no intended reason. Switched to the vanilla PrivateArea.IsInside() horizontal-only (XZ) check, so height is no longer restricted while the horizontal range limit is unchanged
  • ✅fix1 : [TerritoryWard.cs] 건설/상호작용 범위 판정이 3D 거리를 사용해, 수평으로는 와드 반경 안이어도 너무 높이 지으면 범위 밖으로 판정되어 건축이 막히던 문제 수정 — 결과적으로 건물 높이가 의도치 않게 와드 반경(레벨)에 종속되어 있었음. 바닐라 PrivateArea.IsInside()의 수평(XZ) 전용 판정으로 교체해, 너비(반경) 제한은 그대로 두고 높이 제한만 완전히 제거함 (모든 레벨에 동일 적용)

[1.0.36] - 2026-07-18

Files Modified / 수정 파일

KnownPlayersRegistry.cs · KnownPlayersSync.cs(new) · PermittedToggleAlwaysPatch.cs · Plugin.cs · TerritoryWardController.cs

  • ✅fix1 : [KnownPlayersRegistry.cs] Fixed a race condition where a member added and then quickly kicked before the periodic scan recorded them would vanish from the known-characters list entirely (neither in the permitted list nor the registry) — RecordPlayer is now also called at the exact moment of add/kick, not just on the polling tick
  • ✅fix1 : [KnownPlayersRegistry.cs] 추가 직후 곧바로 추방하면(주기 스캔이 기록할 틈이 없었던 경우) 알려진 캐릭터 목록에서 완전히 사라져버리던 경쟁 조건 수정 — 폴링 시점뿐 아니라 추가/추방이 실제로 일어나는 순간에도 즉시 기록하도록 변경
  • ✅new1 : [KnownPlayersSync.cs] Known-characters data is now server-authoritative and synced to clients over the network (ZRoutedRpc), instead of only being saved to a local file — a real dedicated-server setup previously meant clients could never see who the server had recorded, since that file only existed on the server machine. The server now records/persists this data exclusively, pushes updates to all clients when it changes, and responds to a client's request (sent whenever the Shift+E panel opens) with the current list; clients now also persist their own local cache of what the server sent them
  • ✅new1 : [KnownPlayersSync.cs] 알려진 캐릭터 데이터를 서버 권위(authoritative) 구조로 바꾸고 네트워크(ZRoutedRpc)로 클라이언트에 동기화하도록 개선 — 기존엔 로컬 파일에만 저장해서 실제 데디케이티드 서버 환경에서는 그 파일이 서버 기기에만 있어 클라이언트가 절대 볼 수 없었음. 이제 서버만 기록/저장을 전담하고, 변경이 생기면 전체 클라이언트에 즉시 전파하며, Shift+E 패널을 열 때마다 클라이언트가 서버에 최신 목록을 요청함. 클라이언트도 서버가 보내준 목록을 자기 로컬에 캐시로 저장

[1.0.35] - 2026-07-18

Files Modified / 수정 파일

TerritoryWardUI.cs

  • ✅fix1 : [TerritoryWardUI.cs] The ward creator (owner) was showing up in their own whitelist panel as an addable/kickable entry, since the periodic character scan records every player including the owner — but the owner always has access via PrivateArea.IsCreator() regardless of the permitted list, so listing them was confusing and pointless. The creator's PlayerID is now excluded from the merged list
  • ✅fix1 : [TerritoryWardUI.cs] 와드 설치자(관리자) 본인이 자기 화이트리스트 패널에 추가/추방 가능한 항목으로 함께 표시되던 문제 수정 — 주기 스캔이 설치자를 포함한 모든 캐릭터를 기록하다 보니 발생. 설치자는 PrivateArea.IsCreator()로 허용 목록과 무관하게 항상 접근 권한을 가지므로 목록에 표시할 필요가 없음. 설치자의 PlayerID를 통합 리스트에서 제외하도록 수정

[1.0.34] - 2026-07-18

Files Modified / 수정 파일

KnownPlayersRegistry.cs(new) · Localization.cs · PermittedToggleAlwaysPatch.cs(new) · Plugin.cs · TerritoryWardUI.cs

  • ✅fix1 : [PermittedToggleAlwaysPatch.cs] Adding/kicking whitelist members silently failed whenever the ward was turned on (protection active) — vanilla PrivateArea.RPC_TogglePermitted refuses to run while IsEnabled() is true. Added a Harmony patch that bypasses this guard for territory ward instances only, so add/kick now works regardless of the ward's on/off state
  • ✅fix1 : [PermittedToggleAlwaysPatch.cs] 와드가 켜진(보호 활성) 상태에서 화이트리스트 추가/추방이 조용히 실패하던 문제 수정 — 바닐라 PrivateArea.RPC_TogglePermitted가 IsEnabled()==true면 실행을 거부하는 것이 원인이었음. 영토 와드 인스턴스에서만 이 가드를 우회하는 Harmony 패치를 추가해 켜짐/꺼짐 상태와 무관하게 추가/추방이 동작하도록 수정
  • ✅fix2 : [TerritoryWardUI.cs] Found and fixed a pre-existing bug while reworking this code: the old "add online player" button stored the peer's temporary per-session connection ID (ZNet.GetUID(), regenerated every game launch) instead of the character's real PlayerID, so PrivateArea.HaveLocalAccess() could never match it — added players never actually gained access even though the UI showed them as added
  • ✅fix2 : [TerritoryWardUI.cs] 이번 작업 중 기존 버그 발견 및 수정: 예전 "온라인 플레이어 추가" 버튼이 실제 캐릭터 PlayerID 대신 매 실행마다 바뀌는 임시 접속 세션 ID(ZNet.GetUID())를 저장하고 있어, PrivateArea.HaveLocalAccess()가 절대 매칭되지 않았음 — UI에는 추가된 것처럼 보여도 실제 권한은 한 번도 부여되지 않던 문제
  • ✅new1 : [KnownPlayersRegistry.cs] Added a global, disk-persisted registry that records every character (PlayerID + name) seen connecting to this server, so ward owners can whitelist someone even while they're offline
  • ✅new1 : [KnownPlayersRegistry.cs] 이 서버에 접속했던 모든 캐릭터(PlayerID+이름)를 기록해두는 전역 레지스트리를 신규 추가, 디스크에 영속화되어 오프라인인 캐릭터도 화이트리스트 추가 후보로 표시 가능해짐
  • ✅new2 : [TerritoryWardUI.cs] Whitelist panel now shows one unified, clickable list (online + offline) instead of separate "permitted"/"add online" sections — click a character's name to toggle add/kick, with an online tag for currently connected players. Characters that share the same PlayerID history naturally appear as separate rows, so one person's two characters both show up individually
  • ✅new2 : [TerritoryWardUI.cs] 화이트리스트 패널을 기존 "허용된 멤버"/"온라인 추가" 2단 구성에서 온라인·오프라인을 모두 포함한 통합 클릭 리스트로 개편 — 캐릭터 이름을 클릭하면 추가/추방이 토글되고, 온라인이면 태그로 표시됨. PlayerID가 캐릭터 세이브 단위로 별도 발급되므로 같은 사람의 캐릭터 2개도 자연스럽게 별도 항목으로 나열됨

[1.0.33] - 2026-07-18

Files Modified / 수정 파일

InteractionBlockPatch.cs · TerritoryWardController.cs

  • ✅fix5 : [TerritoryWardController.cs] Non-creator self join/leave moved from Shift+E to Shift+(range ring key, default R) — it shared the physical E key with vanilla's own Interact ("Use") input, so pressing Shift+E could also trigger the ward's plain-E On/Off toggle at the same time and the join/leave action would fail to apply. Moving it to Shift+R (not used by vanilla Interact at all) removes the conflict; Shift+E is now exclusively the creator's whitelist panel toggle
  • ✅fix5 : [TerritoryWardController.cs] 비설치자 스스로 가입/탈퇴하는 키를 Shift+E에서 Shift+(범위 링 키, 기본 R)로 이동 — 바닐라 Interact("Use") 입력이 물리적으로 같은 E키를 쓰다 보니 Shift+E를 누르면 와드의 평범한 E On/Off 토글도 같이 발동해서 가입/탈퇴가 제대로 먹히지 않던 문제. 바닐라 Interact와 전혀 무관한 R키로 옮겨서 충돌을 없앴고, Shift+E는 이제 설치자의 화이트리스트 패널 전용으로만 남음
  • ✅new3 : [TerritoryWardController.cs] Permitted (whitelisted) members can now also activate/deactivate the Lv5+ shield with the K key — previously restricted to the ward's creator only
  • ✅new3 : [TerritoryWardController.cs] 허용된(화이트리스트) 멤버도 K키로 Lv5+ 실드를 활성화/비활성화할 수 있도록 변경 — 기존엔 설치자만 가능했음
  • ✅improve3 : [InteractionBlockPatch.cs] Shield activation/deactivation hover hints and the leave-hint key label now reflect the above two changes (shown to permitted members too; leave hint now shows Shift+R instead of Shift+E)
  • ✅improve3 : [InteractionBlockPatch.cs] 실드 활성화/비활성화 호버 힌트가 허용 멤버에게도 표시되도록 하고, 탈퇴 힌트 키 표기를 Shift+E에서 Shift+R로 변경

[1.0.31] - 2026-07-17

Files Modified / 수정 파일

ShieldBlockPatch.cs

  • ✅fix4 : [ShieldBlockPatch.cs] Thrown projectiles (arrows, spears, rocks) from monsters still flew straight through the shield dome — the previous NullReferenceException guard on ShieldGenerator.OnProjectileHit fully skipped the vanilla method for the VFX-only dummy, which also skipped the projectile destroy/impact logic, not just the crashing RPC call. Now performs the destroy + Projectile.OnHit impact handling directly (skipping only the network-dependent RPC/fuel/UpdateShield calls that don't apply to a non-networked cosmetic object), so incoming projectiles are actually stopped at the boundary again
  • ✅fix4 : [ShieldBlockPatch.cs] 몬스터가 던진 투척물(화살/창/돌)이 실드 돔을 그대로 뚫고 들어오던 문제 — 이전에 추가한 ShieldGenerator.OnProjectileHit NullReferenceException 가드가 VFX 전용 더미에 대해 원본 메서드 전체를 건너뛰어서, 크래시 원인이던 RPC 호출뿐 아니라 투사체 파괴/피격 처리까지 함께 사라졌던 것이 원인. 네트워크 의존 로직(RPC/연료/UpdateShield)만 건너뛰고 투사체 파괴 + Projectile.OnHit 피격 처리를 직접 수행하도록 수정해 투사체가 다시 경계에서 막히도록 변경

[1.0.30] - 2026-07-17

Files Modified / 수정 파일

Config.cs

  • ✅improve1 : [Config.cs] Lv5 secondary fuel changed from Feathers x5 to Greydwarf Eye x1
  • ✅improve1 : [Config.cs] 레벨 5 보조 연료를 깃털 5개 → 그레이드워프 눈 1개로 변경

[1.0.29] - 2026-07-17

Files Modified / 수정 파일

ShieldBlockPatch.cs

  • ✅fix3 : [ShieldBlockPatch.cs] Monsters could still slip inside the shielded ward's boundary — Patch_MonsterAI_UpdateAI_ShieldZone only steers AI intent (Flee), so fast monsters could cross the 3m buffer within a single tick, and non-MonsterAI creatures weren't covered at all. Added a Harmony prefix on Character.UpdateMotion (the point where all movement is finally applied to the Rigidbody, for every creature type) that clamps any non-tamed creature found inside the radius to just outside the boundary and applies an outward pushback via the vanilla Character.ApplyPushback API, guaranteeing no penetration regardless of speed or AI type
  • ✅fix3 : [ShieldBlockPatch.cs] 실드가 켜진 와드 경계 안으로 몬스터가 여전히 들어올 수 있던 문제 — Patch_MonsterAI_UpdateAI_ShieldZone은 AI의 이동 의도(Flee)만 바꾸므로 빠른 몬스터는 한 틱 사이에 3m 버퍼를 통과할 수 있었고, MonsterAI가 아닌 AI 타입은 애초에 대상이 아니었음. 모든 생물의 이동이 최종적으로 Rigidbody에 반영되는 지점인 Character.UpdateMotion에 Harmony prefix를 추가해, 반경 안에 있는 길들여지지 않은 생물을 경계 바로 바깥으로 즉시 고정하고 바닐라 Character.ApplyPushback API로 바깥쪽 넉백을 걸어 속도나 AI 종류와 무관하게 진입을 완전히 차단

[1.0.28] - 2026-07-17

Files Modified / 수정 파일

ShieldBlockPatch.cs

  • ✅fix1 : [ShieldBlockPatch.cs] Fixed NullReferenceException in vanilla ShieldGenerator.OnProjectileHit — the VFX-only shield dummy ("TW_ShieldVFX", no ZNetView) was being registered into ShieldGenerator's global instance list and treated as a live gameplay shield by CheckProjectile(), crashing on m_nview.InvokeRPC since m_nview stays null. Added a Harmony prefix that skips vanilla shield logic whenever m_nview is null
  • ✅fix1 : [ShieldBlockPatch.cs] 바닐라 ShieldGenerator.OnProjectileHit의 NullReferenceException 수정 — VFX 전용 실드 더미("TW_ShieldVFX", ZNetView 없음)가 ShieldGenerator 전역 인스턴스 목록에 등록되어 CheckProjectile()에 의해 실제 게임플레이 실드로 취급되고, m_nview가 null인 채로 InvokeRPC를 호출해 크래시가 발생하던 문제. m_nview가 null이면 바닐라 실드 로직을 건너뛰는 Harmony prefix 추가
  • ✅fix2 : [ShieldBlockPatch.cs] Monsters were visibly walking into the shield dome before being repelled — Patch_MonsterAI_UpdateAI_ShieldZone only triggered Flee once a monster had already crossed the boundary (0m buffer). Added a 3m buffer so monsters turn back before touching the dome
  • ✅fix2 : [ShieldBlockPatch.cs] 몬스터가 실드 돔 안으로 들어왔다가 밀려나는 것처럼 보이던 문제 — Patch_MonsterAI_UpdateAI_ShieldZone이 몬스터가 경계를 이미 넘은 뒤(여유 0m)에야 Flee를 발동시키던 것을, 돔에 닿기 전 3m 여유를 두고 미리 방향을 틀도록 수정

[1.0.22] - 2026-07-13

Files Modified / 수정 파일

Config.cs

  • ✅improve1 : [Config.cs] Fuel consumption interval rescaled to start at 3 minutes for Lv1 and increase by 1 minute per level (Lv1=3 → Lv8=10), replacing the previous "interval = level number" (1~8) scale
  • ✅improve1 : [Config.cs] 연료 소모 간격을 Lv1=3분 시작, 레벨업마다 1분씩 증가(Lv1=3 ~ Lv8=10)하도록 재조정 — 기존 "간격=레벨 숫자"(1~8분) 방식에서 변경

[1.0.21] - 2026-07-13

Files Modified / 수정 파일

Config.cs · InteractionBlockPatch.cs · TerritoryWardController.cs

  • ✅improve1 : [Config.cs] Fuel system simplified — secondary fuel is now always Resin at every level, and the varied non-wood secondary items (GreydwarfEye/Entrails/Feathers/Ooze/JotunPuffs/Grausten/FreezeGland) were removed. Primary fuel is now a regional wood per biome (Wood/RoundLog/ElderBark/FineWood/YggdrasilWood); Mountain (no regional wood) uses Obsidian, and Ocean/Ashlands (no regional wood) combine two wood types via a new optional 3rd fuel slot (fuel_tertiary). Amounts follow ceil(level/2) for the wood total
  • ✅improve1 : [Config.cs] 연료 체계 단순화 — 모든 레벨의 보조 연료가 항상 수지로 통일되고, 레벨별로 제각각이던 비목재 보조 아이템(그레이드워프눈/창자/깃털/점액/요툰버섯/그라우스텐/얼음분비선)을 제거. 주 연료는 지역별 나무로 변경(나무/원목/고대나무껍질/경목/이그드라실나무). 산은 지역 나무가 없어 흑요석 사용, 바다/애쉬랜드는 지역 나무가 없어 나무 2종을 신규 3번째 연료 슬롯(fuel_tertiary)으로 합쳐서 요구. 나무 수량은 ceil(레벨/2) 규칙 적용
  • ✅improve2 : [Config.cs] GetFuelTiers() no longer accumulates every tier up to the current level — it now returns only the base Lv1 tier plus the ward's own current-level tier (e.g. a Lv4 ward can only use Lv1 or Lv4 fuel, not Lv2/Lv3)
  • ✅improve2 : [Config.cs] GetFuelTiers()가 더 이상 현재 레벨까지 모든 티어를 누적하지 않고, 기본 Lv1 티어 + 현재 레벨 자신의 티어 딱 2개만 반환하도록 변경 (예: Lv4 와드는 Lv1 또는 Lv4 연료만 사용 가능, Lv2/Lv3 연료는 사용 불가)
  • ✅new1 : [TerritoryWardController.cs] ResolvedTier/consumption/hover-text methods extended to support an optional 3rd fuel item (NameC/AmountC) for the Ocean/Ashlands two-wood tiers
  • ✅new1 : [TerritoryWardController.cs] ResolvedTier와 소모/호버텍스트 관련 메서드들에 선택적 3번째 연료 아이템(NameC/AmountC) 지원 추가 — 바다/애쉬랜드의 나무 2종 조합 티어용
  • ✅fix1 : [InteractionBlockPatch.cs] The "Lv1~N 연료" hover label implied a continuous range, which is no longer accurate now that only 2 discrete tiers are ever selectable — changed to "Lv1/LvN 연료"
  • ✅fix1 : [InteractionBlockPatch.cs] "Lv1~N 연료" 호버 라벨이 연속 범위를 암시했는데 이제 딱 2개 티어만 선택 가능해져 부정확해짐 — "Lv1/LvN 연료"로 변경

[1.0.20] - 2026-07-13

Files Modified / 수정 파일

InteractionBlockPatch.cs

  • ✅fix1 : [InteractionBlockPatch.cs] The shield-active hover line used a raw <color=cyan> tag while every other colored element in the same text used the {Cyan} ("#00FFFF") constant — TMP failed to parse this one and showed the literal tag text instead of coloring it. Now uses the same {Cyan} constant as the rest of the panel
  • ✅fix1 : [InteractionBlockPatch.cs] 실드 활성 중 표시 줄만 다른 곳과 다르게 <color=cyan> 리터럴을 써서 TMP가 파싱하지 못하고 태그 글자가 그대로 노출되던 문제 수정 — 같은 패널 다른 곳에서 이미 정상 동작하는 {Cyan}("#00FFFF") 상수로 통일

[1.0.19] - 2026-07-13

Files Modified / 수정 파일

InteractionBlockPatch.cs · Localization.cs · TerritoryWardController.cs

  • ✅new1 : [TerritoryWardController.cs] Deactivating the Lv5+ shield early now banks the remaining time (tw_shield_remaining) instead of discarding it — reactivating while banked time remains resumes for free (no Surtling Core consumed); RPC_ActivateShield now takes an explicit duration parameter so both a fresh 1-hour activation and a banked-time resume share the same RPC
  • ✅new1 : [TerritoryWardController.cs] Lv5+ 실드를 만료 전에 끄면 남은 시간을 버리지 않고 배너킹(tw_shield_remaining)하도록 변경 — 배너킹된 시간이 있는 동안 재활성화하면 슈르트링 코어 소모 없이 무료로 재개됨. RPC_ActivateShield가 지속시간을 파라미터로 받도록 변경해 신규 1시간 활성화와 배너킹 재개를 같은 RPC로 처리
  • ✅fix1 : [TerritoryWardController.cs] Shield dome VFX and actual protection radius were frozen at whatever level the ward was when the shield was first activated — ApplyLevel() now also updates the live ShieldGenerator's radius fields when the shield is active, so upgrading the ward while shielded grows the dome/protection immediately
  • ✅fix1 : [TerritoryWardController.cs] 실드 돔 VFX와 실제 보호 반경이 최초 활성화 시점의 레벨 크기에 고정되던 문제 수정 — ApplyLevel()에서 실드가 켜져 있으면 ShieldGenerator의 반경 필드도 함께 갱신, 실드 켠 채로 업그레이드해도 즉시 커짐
  • ✅improve1 : [InteractionBlockPatch.cs] Shield hover hint now shows a free "resume" hint (with banked minutes) instead of the item-cost hint when banked time is available
  • ✅improve1 : [InteractionBlockPatch.cs] 배너킹된 잔여시간이 있을 때 호버텍스트가 아이템 요구 힌트 대신 무료 "재개" 힌트(남은 분 표시)를 보여주도록 변경
  • ✅new2 : [Localization.cs] Added territoryward_shield_resumed / territoryward_shield_resume_hint (Korean/English)
  • ✅new2 : [Localization.cs] territoryward_shield_resumed / territoryward_shield_resume_hint 키 추가 (한/영)

[1.0.18] - 2026-07-13

Files Modified / 수정 파일

InteractionBlockPatch.cs

  • ✅fix1 : [InteractionBlockPatch.cs] Found the true root cause of the storage crash: InventoryGrid (a session-wide singleton reused for every container) defaults m_width/m_height to 4 — if the ward's storage happens to also be 4 wide the very first time any container is opened this session, the "size changed" check spuriously passes and the slot list (m_elements) is never built, causing GetElement() to fail (previously masked as a NullReferenceException instead of the crash). Added a Prefix on InventoryGrid.UpdateInventory() that invalidates m_width whenever m_elements.Count doesn't match width*height, forcing vanilla's own rebuild to run correctly
  • ✅fix1 : [InteractionBlockPatch.cs] 창고 크래시의 진짜 원인을 찾음: InventoryGrid(세션 전체에서 재사용되는 싱글톤)의 m_width/m_height 기본값이 4라서, 이번 세션 첫 컨테이너가 마침 폭 4인 와드 창고면 "크기 변경" 감지가 우연히 통과되어 슬롯 리스트(m_elements)가 한 번도 생성되지 않고, 그 결과 GetElement()가 실패(이전엔 NullReferenceException으로 위장되어 나타남)하던 문제. InventoryGrid.UpdateInventory()에 Prefix를 추가해 m_elements 개수가 width*height와 다르면 m_width를 무효화, 바닐라 리빌드 로직이 정상적으로 실행되도록 강제
  • ✅improve1 : [InteractionBlockPatch.cs] GetElement() safety-net patch no longer masks a fully-empty element list with a null fallback (which caused the NullReferenceException) — it now only clamps/falls back when elements exist, and lets the original exception surface otherwise
  • ✅improve1 : [InteractionBlockPatch.cs] GetElement() 안전망이 m_elements가 완전히 비어있을 때 null로 폴백해 NullReferenceException을 유발하던 부분을 수정 — 요소가 있을 때만 clamp 후 폴백하고, 없으면 원본 예외를 그대로 노출

[1.0.17] - 2026-07-13

Files Modified / 수정 파일

InteractionBlockPatch.cs

  • ✅fix1 : [InteractionBlockPatch.cs] Added a Harmony safety-net patch on InventoryGrid.GetElement() that catches any out-of-range gridPos index (root-caused fix in TerritoryWardController.cs may not cover every edge case) and falls back to slot 0 instead of throwing ArgumentOutOfRangeException, logging a warning for diagnosis instead of crashing
  • ✅fix1 : [InteractionBlockPatch.cs] InventoryGrid.GetElement()에 Harmony 안전망 패치 추가 — gridPos 인덱스가 범위를 벗어나면(근본 수정으로 못 잡는 엣지 케이스 대비) ArgumentOutOfRangeException 대신 0번 슬롯으로 안전하게 폴백하고 경고 로그만 남김

[1.0.16] - 2026-07-13

Files Modified / 수정 파일

TerritoryWardController.cs

  • ✅fix1 : [TerritoryWardController.cs] The Mathf.Max growth-only guard alone didn't fully prevent the storage crash — added active repositioning of any item whose saved gridPos falls outside the current width/height (via Inventory.FindEmptySlot) right after resizing, and persist via Container.Save() when this client owns the ward

  • ✅fix1 : [TerritoryWardController.cs] 창고 크기를 줄이지 않는 것만으로는 크래시를 완전히 막지 못해, 리사이즈 직후 현재 width/height를 벗어난 gridPos를 가진 아이템을 Inventory.FindEmptySlot()으로 빈 칸에 재배치하도록 추가. 소유자 클라이언트인 경우 Container.Save()로 즉시 저장

[1.0.15] - 2026-07-13

Files Modified / 수정 파일

TerritoryWardController.cs

  • ✅fix1 : [TerritoryWardController.cs] Fixed ArgumentOutOfRangeException crash when opening the fuel storage (InventoryGrid.GetElement indexing past m_elements when the grid was resized smaller than an item's saved gridPos) — storage resize now only grows (Mathf.Max against the current size), never shrinks
  • ✅fix1 : [TerritoryWardController.cs] 연료 창고를 열 때 발생하던 ArgumentOutOfRangeException 크래시 수정 — 창고가 기존 아이템의 gridPos보다 작게 리사이즈되면서 InventoryGrid.GetElement()가 범위를 벗어난 인덱스에 접근하던 문제. 창고 크기는 이제 현재 크기 대비 Mathf.Max로만 적용되어 절대 줄어들지 않음
  • ✅fix2 : [TerritoryWardController.cs] Shield VFX was looking up ShieldGenerator on the "Haldor" prefab, which doesn't have that component at all (confirmed against Jotunn's prefab list) — always failed and spammed a warning every frame while the shield was active. Now looks up "charred_shieldgenerator" (the vanilla piece that actually has ShieldGenerator), and the failure is now logged only once instead of every frame
  • ✅fix2 : [TerritoryWardController.cs] 실드 VFX가 ShieldGenerator 컴포넌트가 아예 없는 "Haldor" 프리팹에서 찾으려 해서(Jotunn 프리팹 목록으로 확인) 매번 실패하고, 실드가 켜져 있는 동안 매 프레임 경고 로그가 쏟아지던 문제 수정 — 실제로 ShieldGenerator를 가진 바닐라 피스 "charred_shieldgenerator"에서 찾도록 변경하고, 실패해도 1회만 로그 남기도록 수정

[1.0.14] - 2026-07-13

Files Modified / 수정 파일

TerritoryWardController.cs

  • ✅fix1 : [TerritoryWardController.cs] Storage grid not showing/rendering when opening the fuel container — added a defensive re-apply of ApplyLevel() right before opening the storage (Q key), so the resize is guaranteed fresh at open-time regardless of any Start()/RPC timing race
  • ✅fix1 : [TerritoryWardController.cs] 연료 창고를 열었을 때 그리드가 안 보이던 문제 대응 — Q키로 창고를 여는 시점에 ApplyLevel()을 한 번 더 재적용해, Start()/RPC 타이밍과 무관하게 항상 최신 크기가 반영되도록 안전장치 추가
  • ✅improve1 : [TerritoryWardController.cs] Added diagnostic logging in ApplyLevel()'s storage resize block (null container/inventory, and applied vs actual width/height) to pin down the root cause if the issue persists
  • ✅improve1 : [TerritoryWardController.cs] ApplyLevel()의 창고 리사이즈 블록에 진단 로그 추가(컨테이너/인벤토리 null 여부, 적용값 vs 실제값) — 문제가 재현될 경우 원인을 바로 특정할 수 있도록

[1.0.13] - 2026-07-13

Files Modified / 수정 파일

SimpleVFX.cs · TerritoryWardController.cs · VFXManager.cs

  • ✅new1 : [VFXManager.cs] Added PlayUpgradeEffect() — plays vfx_shieldgenerator_refuel + sfx_fader_bell on successful ward upgrade
  • ✅new1 : [VFXManager.cs] PlayUpgradeEffect() 추가 — 와드 업그레이드 성공 시 vfx_shieldgenerator_refuel VFX + sfx_fader_bell 효과음 재생
  • ✅new2 : [SimpleVFX.cs] Added PlayVFX() for playing arbitrary vanilla VFX prefabs by name (mirrors PlaySound's ZNetScene lookup + no-networking instantiate pattern, now shared via PlayZNetScenePrefab)
  • ✅new2 : [SimpleVFX.cs] 임의의 바닐라 VFX 프리팹을 이름으로 재생하는 PlayVFX() 추가 (PlaySound와 동일한 ZNetScene 조회+비네트워킹 인스턴스화 로직을 PlayZNetScenePrefab으로 공유)
  • ✅improve1 : [TerritoryWardController.cs] TryUpgrade() now calls VFXManager.PlayUpgradeEffect() right after a successful upgrade RPC
  • ✅improve1 : [TerritoryWardController.cs] TryUpgrade() 성공 직후 VFXManager.PlayUpgradeEffect() 호출 추가

[1.0.12] - 2026-07-13

Files Modified / 수정 파일

Config.cs · InteractionBlockPatch.cs · Plugin.cs · TerritoryWardController.cs

  • ✅new1 : [Config.cs] Added upgrade_key/shield_key/range_ring_key/fuel_storage_key to the General section (KeyCode entries) — all 4 territory ward keybinds are now rebindable from the F1 config menu; shield key default changed from J to K
  • ✅new1 : [Config.cs] General 섹션에 upgrade_key/shield_key/range_ring_key/fuel_storage_key(KeyCode) 추가 — 영토 와드 키 4종 전부 F1 메뉴에서 재배정 가능. 실드 키 기본값 J→K로 변경
  • ✅improve1 : [Plugin.cs] UpgradeButton/ShieldButton/RangeRingButton now use Jotunn's ButtonConfig.Config (config-backed) instead of a hardcoded Key, so they follow the new F1 keybind settings automatically
  • ✅improve1 : [Plugin.cs] UpgradeButton/ShieldButton/RangeRingButton이 하드코딩된 Key 대신 Jotunn ButtonConfig.Config(설정 연동)를 사용하도록 변경 — F1에서 바꾼 키가 자동으로 반영됨
  • ✅improve2 : [TerritoryWardController.cs] Fuel storage key (Q) is now read from TerritoryConfig.FuelStorageKey instead of a hardcoded KeyCode.Q
  • ✅improve2 : [TerritoryWardController.cs] 연료 창고 키(Q)를 하드코딩 대신 TerritoryConfig.FuelStorageKey에서 읽도록 변경
  • ✅fix1 : [InteractionBlockPatch.cs] Hover text key hints ([Q]/[U]/[J]) were hardcoded letters that would no longer match the actual bound key once rebindable — now display the live configured KeyCode instead
  • ✅fix1 : [InteractionBlockPatch.cs] 호버텍스트의 [Q]/[U]/[J] 힌트가 키를 재배정해도 계속 옛 글자를 보여주던 불일치 수정 — 실제 설정된 KeyCode를 동적으로 표시

[1.0.11] - 2026-07-13

Files Modified / 수정 파일

InteractionBlockPatch.cs · Localization.cs · TerritoryWardController.cs

  • ✅fix1 : [InteractionBlockPatch.cs] Hover text divider no longer overshoots above the text (was center-pivoted at 700px fixed height, overlapping the top HUD) — now top-pivoted and sized dynamically from both columns' preferred height; column width increased another 15% (compounding to ~32% total)
  • ✅fix1 : [InteractionBlockPatch.cs] 호버 텍스트 구분선이 화면 상단 HUD를 침범하던 문제 수정(중앙 pivot + 고정 700px 높이 → 상단 pivot + 두 컬럼의 실제 콘텐츠 높이 기반 동적 계산). 컬럼 폭도 추가 15% 확장(누적 약 32%)
  • ✅new1 : [TerritoryWardController.cs] Added manual shield deactivation — pressing J while the Lv5+ territory shield is active now turns it off immediately via a new RPC_DeactivateShield (no item refund), instead of only auto-expiring after 1 hour
  • ✅new1 : [TerritoryWardController.cs] Lv5+ 영토 보호막 수동 비활성화 기능 추가 — 실드 활성 중 J키를 누르면 신규 RPC_DeactivateShield로 즉시 꺼짐(아이템 환불 없음). 기존엔 1시간 자동 만료만 있었음
  • ✅improve1 : [InteractionBlockPatch.cs] Shield hover hint now also shows "[J] Deactivate" to the creator while the shield is active (previously only remaining time was shown, with no key hint)
  • ✅improve1 : [InteractionBlockPatch.cs] 실드 활성 중 호버텍스트에 설치자 전용 "[J] 비활성화" 힌트 추가 (기존엔 잔여 시간만 표시되고 키 힌트가 없었음)
  • ✅new2 : [Localization.cs] Added territoryward_shield_deactivate_hint_key / territoryward_shield_stopped (Korean/English)
  • ✅new2 : [Localization.cs] territoryward_shield_deactivate_hint_key / territoryward_shield_stopped 키 추가 (한/영)

[1.0.10] - 2026-07-13

Files Modified / 수정 파일

InteractionBlockPatch.cs · Captain_territorial.csproj

  • ✅improve1 : [InteractionBlockPatch.cs] Territory ward hover text is now split into two side-by-side columns (each 15% wider than before) with a vertical divider between them, cutting the previous long single-column wrap height roughly in half; other objects' hover text is unaffected
  • ✅improve1 : [InteractionBlockPatch.cs] 영토 와드 호버 텍스트를 좌우 2단 컬럼(각 폭 15% 증가) + 구분선 레이아웃으로 변경 — 기존 1단 텍스트의 과도한 줄바꿈으로 인한 세로 길이를 절반 가량으로 단축. 다른 오브젝트 호버 텍스트에는 영향 없음
  • ✅new1 : [Captain_territorial.csproj] Added UnityEngine.UI / UnityEngine.UIModule references — required for the divider Image component used by the new hover text layout
  • ✅new1 : [Captain_territorial.csproj] UnityEngine.UI / UnityEngine.UIModule 참조 추가 — 호버 텍스트 구분선(Image) 컴포넌트 사용에 필요

[1.0.9] - 2026-07-13

Files Modified / 수정 파일

TerritoryWardController.cs

  • ✅fix1 : [TerritoryWardController.cs] Fuel storage container size now grows with ward level (Lv1 2x2 → Lv8 5x6) instead of staying fixed at 2x2 — ApplyLevel() now resizes the already-created Inventory instance directly, since Container.m_width/m_height are only read once at Awake()
  • ✅fix1 : [TerritoryWardController.cs] 연료 보관 창고 크기가 2x2로 고정되어 있던 문제 수정 — 와드 레벨에 따라 창고 크기가 증가하도록 변경 (Lv1 2x2 → Lv8 5x6). Container.m_width/m_height는 Awake() 시점에만 참조되므로 ApplyLevel()에서 이미 생성된 Inventory 인스턴스의 크기를 직접 갱신

[1.0.8] - 2026-07-13

Files Modified / 수정 파일

BuildRestrictionPatch.cs · Config.cs · Plugin.cs · TerritoryWard.cs · TerritoryWardController.cs

  • ✅new1 : [Config.cs] Added an admin_bypass toggle at the top of the General section — when enabled, ward placement limit, placement material cost, and upgrade material/coin cost are all bypassed (fuel upkeep is unaffected)
  • ✅new1 : [Config.cs] General 섹션 최상단에 admin_bypass 토글 추가 — 켜면 와드 설치 개수 제한, 설치 재료비, 업그레이드 재료/골드 비용을 모두 무시함 (연료 유지비는 그대로 적용)
  • ✅improve1 : [Config.cs] Merged the "Level N" and "Upgrade Lv N" sections per level into a single "Level N - <biome>" section, moved the fuel consumption interval out of General into each level's own section, and renamed fuel_a/b/item_a/b keys to fuel_primary/secondary/upgrade_item_primary/secondary for clarity (existing custom values under the old keys reset to defaults)
  • ✅improve1 : [Config.cs] 레벨별 "Level N"/"Upgrade Lv N" 섹션을 "Level N - 바이옴명" 하나로 통합하고, General에 흩어져 있던 연료 소모 간격을 각 레벨 섹션으로 이동, fuel_a/b·item_a/b 키를 fuel_primary/secondary·upgrade_item_primary/secondary로 개명해 가독성 개선 (기존 커스텀 값은 새 키 인식으로 기본값 리셋됨)
  • ✅new2 : [TerritoryWard.cs] Ward placement requirement (Wood x10 + Stone x10) is now dynamically cleared while Admin Bypass is enabled and restored when disabled, via a live toggle on Piece.m_resources
  • ✅new2 : [TerritoryWard.cs] Admin Bypass가 켜져 있는 동안 와드 설치 재료 요구사항(나무x10+돌x10)을 Piece.m_resources 실시간 토글로 비우고, 꺼지면 원래대로 복원
  • ✅improve2 : [BuildRestrictionPatch.cs] Ward count limit check is now skipped while Admin Bypass is enabled
  • ✅improve2 : [BuildRestrictionPatch.cs] Admin Bypass가 켜져 있는 동안 와드 설치 개수 제한 체크를 건너뜀
  • ✅improve3 : [TerritoryWardController.cs] TryUpgrade() now skips the material/coin requirement check and inventory consumption while Admin Bypass is enabled
  • ✅improve3 : [TerritoryWardController.cs] Admin Bypass가 켜져 있는 동안 TryUpgrade()에서 재료/골드 요구 체크와 인벤토리 소모를 건너뜀
  • ✅improve4 : [Plugin.cs] Mod load message is now printed to the BepInEx console in cyan (falls back to a normal log line when no console window is available), matching the Captain_audio pattern
  • ✅improve4 : [Plugin.cs] 모드 로드 메시지를 Captain_audio와 동일한 방식으로 BepInEx 콘솔에 청록색으로 출력 (콘솔 창이 없으면 일반 로그로 대체)

[1.0.7] - 2026-07-04

Files Modified / 수정 파일

BuildRestrictionPatch.cs

  • ✅fix1 : [BuildRestrictionPatch.cs] Workbench, portal, boats (Raft/Karve/VikingShip/VikingShip_Ashlands), and cart can now be placed regardless of territory ward status, restoring original vanilla behavior (previously only the workbench was exempt from the ward build restriction)
  • ✅fix1 : [BuildRestrictionPatch.cs] 작업대뿐 아니라 포탈, 배(래프트/카브/롱쉽/드라카르), 수레도 영토와드 상태와 무관하게 설치 가능하도록 수정 — 원래 바닐라 동작 복원 (기존에는 작업대만 와드 건설 제한에서 예외였음)

[1.0.6] - 2026-07-04

Files Modified / 수정 파일

Localization.cs · TerritoryWardController.cs

  • ✅improve1 : [TerritoryWardController.cs] Resolve() now accepts a warnIfMissing flag so callers can opt out of the ObjectDB-not-found warning for known-harmless cases
  • ✅improve1 : [TerritoryWardController.cs] Resolve()에 warnIfMissing 옵션 추가 — 무해한 케이스에서 경고 로그를 선택적으로 끌 수 있도록 함
  • ✅improve2 : [Localization.cs] RefreshWardDescription() no longer logs the 'Wood'/'Resin' not-found warning at main-menu startup (ObjectDB is not fully loaded yet at that point — harmless and already falls back correctly)
  • ✅improve2 : [Localization.cs] RefreshWardDescription()이 메인 메뉴 진입 시점에 뜨던 'Wood'/'Resin' not found 경고를 더 이상 출력하지 않음 (이 시점은 ObjectDB가 아직 완전히 로드되지 않은 정상 과정이며, 이미 폴백 처리되어 있어 무해함)

[1.0.5] - 2026-07-02

Files Modified / 수정 파일

TerritoryWardController.cs

  • ✅improve1 : [TerritoryWardController.cs] Resolve() now logs a warning when prefab name is not found in ObjectDB, making config typos immediately visible in the log
  • ✅improve1 : [TerritoryWardController.cs] Resolve()가 ObjectDB에서 프리팹명을 찾지 못할 때 경고 로그 출력 — Config 오타 즉시 식별 가능

[1.0.4] - 2026-06-27

Files Modified / 수정 파일

Config.cs · Plugin.cs · TerritoryWardController.cs · scripts/auto-version.ps1(new)

  • ✅new1 : [scripts/auto-version.ps1] Auto-version script — increments patch on build when .cs files changed, prepends CHANGELOG entry template, updates csproj + Plugin.cs
  • ✅improve1 : [Config.cs] All ConfigEntries now use ConfigurationManagerAttributes { IsAdminOnly = true } — server config synced to all clients via Jotunn SynchronizationManager
  • ✅improve2 : [Plugin.cs] Subscribed SynchronizationManager.OnConfigurationSynchronized to refresh ward description after initial server sync
  • ✅fix1 : [TerritoryWardController.cs] Shield activation uses RPC_ActivateShield so owner(server) writes tw_shield_end — fixes multiplayer shield time desync
  • ✅new1 : [scripts/auto-version.ps1] 자동 버전 스크립트 — .cs 변경 감지 시 빌드마다 패치 증가, CHANGELOG 헤더 자동 삽입, csproj + Plugin.cs 일괄 업데이트
  • ✅improve1 : [Config.cs] 모든 ConfigEntry에 ConfigurationManagerAttributes { IsAdminOnly = true } 적용 — Jotunn SynchronizationManager로 서버 Config 전 클라이언트 자동 동기화
  • ✅improve2 : [Plugin.cs] SynchronizationManager.OnConfigurationSynchronized 구독 — 서버 Config 최초 수신 시 와드 빌드 메뉴 설명문 자동 갱신
  • ✅fix1 : [TerritoryWardController.cs] 실드 활성화를 RPC_ActivateShield로 변경 — owner(서버)가 tw_shield_end 기록하여 멀티플레이 실드 잔여 시간 동기화 수정

[1.0.1] - 2026-06-27

Files Modified / 수정 파일

TerritoryWard.cs · TerritoryWardController.cs · TerritoryWardUI.cs(new) · InteractionBlockPatch.cs · BuildRestrictionPatch.cs · ShieldBlockPatch.cs · Plugin.cs · Config.cs · Localization.cs

  • ✅new1 : [TerritoryWardUI.cs] Extracted UI logic from TerritoryWardController into a new partial class — whitelist panel, intruder head labels, shield HUD display at screen bottom (82%)
  • ✅new2 : [ShieldBlockPatch.cs] Added player damage protection inside shielded ward zone (Patch_Character_Damage_ShieldZone)
  • ✅new3 : [TerritoryWardController.cs] Added chat notification on intrusion — RPC_ReportIntrusion now broadcasts to Chat.instance for all whitelist members via ZNetView.Everybody
  • ✅fix1 : [InteractionBlockPatch.cs] Shield status (remaining minutes) now shown to ALL players in hover text, not just the creator; J-key hint still shows only to creator
  • ✅improve1 : [TerritoryWard.cs + BuildRestrictionPatch.cs] Replaced FindObjectsOfType<PrivateArea>() with static s_wards cache — eliminates frame drops during construction ghost movement
  • ✅improve2 : [TerritoryWardController.cs] Cached Reflection FieldInfo (s_hoveringField) as static readonly — removes per-frame Reflection overhead in Update loop
  • ✅improve3 : [TerritoryWardController.cs] Cached GetComponent<Piece>() as m_piece field, removed redundant GetComponent<ZNetView>() call in InteractionBlockPatch
  • ✅improve4 : [Plugin.cs] Added OnDestroy() with _harmony.UnpatchSelf() — prevents stale patches on plugin reload
  • ✅improve5 : [TerritoryWardController.cs] Added CancelInvoke() in OnDestroy — prevents dangling InvokeRepeating after ward destruction
  • ✅improve6 : [Config.cs] Fixed List<FuelTier> capacity initialization (new List<>(uptoLevel) instead of default)
  • ✅improve7 : [Localization.cs] Added territoryward_shield_hud and territoryward_intrusion_chat localization keys (Korean/English)
  • ✅new1 : [TerritoryWardUI.cs] 와드 컨트롤러에서 UI 로직을 partial 클래스로 분리 — 화이트리스트 패널, 침입자 머리 위 레이블, 실드 HUD(화면 하단 82% 위치)
  • ✅new2 : [ShieldBlockPatch.cs] 실드 활성 구역 내 플레이어 데미지 차단 추가 (Patch_Character_Damage_ShieldZone)
  • ✅new3 : [TerritoryWardController.cs] 침입 감지 시 채팅 알림 추가 — RPC_ReportIntrusion이 ZNetView.Everybody RPC로 화이트리스트 전원 채팅창에 기록
  • ✅fix1 : [InteractionBlockPatch.cs] 실드 상태(남은 시간) 호버텍스트를 설치자 전용에서 모든 플레이어에게 표시로 변경; J키 힌트는 설치자에게만 유지
  • ✅improve1 : [TerritoryWard.cs + BuildRestrictionPatch.cs] FindObjectsOfType<PrivateArea>() → static s_wards 캐시로 교체 — 건설 고스트 이동 시 프레임 드롭 원인 제거
  • ✅improve2 : [TerritoryWardController.cs] Reflection FieldInfo(s_hoveringField) static readonly 캐싱 — Update 루프 내 반복 Reflection 오버헤드 제거
  • ✅improve3 : [TerritoryWardController.cs] GetComponent<Piece>() → m_piece 필드 캐싱, InteractionBlockPatch 내 중복 GetComponent<ZNetView>() 제거
  • ✅improve4 : [Plugin.cs] OnDestroy() + _harmony.UnpatchSelf() 추가 — 플러그인 리로드 시 패치 잔류 방지
  • ✅improve5 : [TerritoryWardController.cs] OnDestroy에 CancelInvoke() 추가 — 와드 파괴 후 InvokeRepeating 누수 방지
  • ✅improve6 : [Config.cs] List<FuelTier> capacity 초기화 수정 (new List<>(uptoLevel))
  • ✅improve7 : [Localization.cs] territoryward_shield_hud, territoryward_intrusion_chat 로컬라이즈 키 추가 (한국어/영어)

[1.0.0] - 2026-06-26

Files Modified / 수정 파일

Plugin.cs · TerritoryWard.cs · TerritoryWardController.cs · TerritoryWardUI.cs · Config.cs · Localization.cs · BuildRestrictionPatch.cs · InteractionBlockPatch.cs · ShieldBlockPatch.cs · DoorAutoClosePatch.cs · IntrusionAlertPatch.cs

  • ✅new1 : Initial release — Territory Ward mod for Valheim (BepInEx + Harmony + Jotunn)
  • ✅new2 : Lv1~8 level system with ZDO-based state storage (tw_level)
  • ✅new3 : U-key upgrade trigger with Config-based material/gold cost system
  • ✅new4 : Range ring display during construction; R-key manual toggle within 5m of ward
  • ✅new5 : Intrusion alert system — fuel-low warnings + intruder alerts (IntrusionAlertPatch.cs)
  • ✅new6 : Door auto-close — DoorAutoClosePatch.cs (owner only, 5s default delay)
  • ✅new7 : Whitelist UI — creator Shift+E opens IMGUI panel (member list + kick + add online players)
  • ✅new8 : Minimap pin — auto-updated on ward load / level-up / destruction
  • ✅new9 : J-key shield activation at Lv5+ — consumes SurtlingCore x1 → 1h protection zone
  • ✅new10 : Shield VFX — dynamic Haldor ShieldGenerator clone (TW_ShieldVFX)
  • ✅new11 : Shield zone — all structures (WearNTear) + monsters (BaseAI.FindEnemy) blocked inside
  • ✅new12 : Intrusion chat alert, intruder head label (red, 1h), sfx_morgen_alert sound
  • ✅new1 : 초기 릴리스 — Valheim 영토 와드 모드 (BepInEx + Harmony + Jotunn)
  • ✅new2 : ZDO 기반 Lv1~8 레벨 시스템 (tw_level)
  • ✅new3 : U키 업그레이드 트리거, Config 기반 재료/골드 비용 체계
  • ✅new4 : 건설 중 범위 링 표시; R키로 와드 5m 이내에서 수동 토글
  • ✅new5 : 침입 경고 시스템 — 연료 부족 경고 + 침입자 알림 (IntrusionAlertPatch.cs)
  • ✅new6 : 문 자동 닫힘 — DoorAutoClosePatch.cs (설치자 전용, 기본 5초 딜레이)
  • ✅new7 : 화이트리스트 UI — 설치자 Shift+E → IMGUI 패널 (멤버 목록 + 추방 + 온라인 플레이어 추가)
  • ✅new8 : 미니맵 핀 — 와드 로드/레벨업/파괴 시 자동 갱신
  • ✅new9 : Lv5+ k키 실드 활성화 — SurtlingCore 1개 소모 → 1시간 데미지 보호
  • ✅new10 : 실드 VFX — Haldor ShieldGenerator 동적 클론 (TW_ShieldVFX)
  • ✅new11 : 실드 구역 — 모든 건물(WearNTear) + 몬스터(BaseAI.FindEnemy) 차단
  • ✅new12 : 침입 채팅 알림, 침입자 머리 위 빨간 텍스트(1시간), sfx_morgen_alert 사운드
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.