diff --git a/Assets/FarmingIsland/Scripts/Island/IslandManager.cs b/Assets/FarmingIsland/Scripts/Island/IslandManager.cs index 553bcecd6..5c457f0e7 100644 --- a/Assets/FarmingIsland/Scripts/Island/IslandManager.cs +++ b/Assets/FarmingIsland/Scripts/Island/IslandManager.cs @@ -116,7 +116,7 @@ namespace CryingSnow.FarmingIsland } ItemDatabase.Initialize(); - saveFileName = SceneManager.GetActiveScene().name; + saveFileName = WL.Island.WLIslandSave.ResolveSaveName(SceneManager.GetActiveScene().name); // WL-816: 경로마다 세이브가 갈리지 않게 이름 고정(끄면 원래대로) LoadGameData(); } diff --git a/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset b/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset new file mode 100644 index 000000000..3461f52a0 --- /dev/null +++ b/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: WLIslandSaveSettings + m_EditorClassIdentifier: Assembly-CSharp:WL.Island:WLIslandSaveSettings + enabled_: 1 + saveName: WL_Island + verboseLog: 0 diff --git a/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset.meta b/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset.meta new file mode 100644 index 000000000..415cdf82b --- /dev/null +++ b/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1c09323f591e60f468e7943fb8c6bcb5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/WL/Island/WLIslandSave.cs b/Assets/WL/Island/WLIslandSave.cs new file mode 100644 index 000000000..cf1c8135a --- /dev/null +++ b/Assets/WL/Island/WLIslandSave.cs @@ -0,0 +1,54 @@ +// ───────────────────────────────────────────────────────────────────────────── +// WLIslandSave.cs — 섬 세이브 파일 이름을 **경로와 무관하게 하나로** 고정한다. +// +// ■ 왜 필요한가 (Lead 실측 · 2026-09-13 · 816f 가 발견) +// `IslandManager.cs:119` 가 `saveFileName = SceneManager.GetActiveScene().name` 이라 +// 같은 섬인데도 **들어온 경로에 따라 세이브가 갈린다**: +// · 섬 씬만 단독 Play → `Level01.dat` +// · 게임 정식 경로(로그인 → Load_Map → 섬이 Additive) → **`InGame.dat`** +// → 섬을 키워 놔도 다른 경로로 들어가면 초기 상태가 나온다. +// +// ■ PD 결정(2026-09-13): 「세이브가 경로마다 갈리면 안돼. 그냥 기존 세이브를 +// 초기화하고 단일 경로로 맞춰」 → 이름을 하나로 고정한다. +// +// ■ 원본 수정은 `IslandManager.cs` **1줄**(그 대입문)뿐이다 — WL 하우스 규칙의 +// 「1줄 훅 + 새 파일」 그대로. `enabled_ = 0` 이면 원래 동작(씬 이름)으로 돌아간다. +// ───────────────────────────────────────────────────────────────────────────── + +using UnityEngine; + +namespace WL.Island +{ + public sealed class WLIslandSaveSettings : ScriptableObject + { + [Tooltip("0 이면 원본 동작(활성 씬 이름)으로 되돌아간다.")] + public int enabled_ = 1; + + [Tooltip("모든 경로가 공유할 세이브 파일 이름(확장자 제외).")] + public string saveName = "WL_Island"; + + [Tooltip("1 이면 해석 결과를 로그로 남긴다.")] + public int verboseLog = 0; + + static WLIslandSaveSettings s_cache; + + public static WLIslandSaveSettings Get() + { + if (s_cache == null) s_cache = Resources.Load("WL/WLIslandSaveSettings"); + return s_cache; + } + } + + public static class WLIslandSave + { + /// `IslandManager.Awake` 의 1줄 훅이 부른다. 끄면 받은 값을 그대로 돌려준다. + public static string ResolveSaveName(string sceneName) + { + var cfg = WLIslandSaveSettings.Get(); + if (cfg == null || cfg.enabled_ == 0 || string.IsNullOrEmpty(cfg.saveName)) return sceneName; + if (cfg.verboseLog != 0) + Debug.Log("[WL-816] 섬 세이브 이름 '" + sceneName + "' → '" + cfg.saveName + "' (경로 무관 고정)"); + return cfg.saveName; + } + } +} diff --git a/Assets/WL/Island/WLIslandSave.cs.meta b/Assets/WL/Island/WLIslandSave.cs.meta new file mode 100644 index 000000000..31f0b9ec8 --- /dev/null +++ b/Assets/WL/Island/WLIslandSave.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 45775bcbefc66bd43877386c53c1a0ef \ No newline at end of file