--- id: TASK-0004 title: Спроектировать раздельные сохранения мира и персонажей summary: Зафиксировать и реализовать модель сохранений по аналогии с Terraria: отдельно данные мира, отдельно профиль игрока, с возможностью входить любым персонажем в любой мир. priority: High area: persistence owner: unassigned created: 2026-03-30 updated: 2026-03-30 execution_time: 1d depends_on: - TASK-0001 canonical_docs: - docs/tasks/Index.md related_files: - Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs - Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity --- # TASK-0004 - Спроектировать раздельные сохранения мира и персонажей ## Status Статус задачи ведется в `docs/tasks/Index.md` и является каноническим там. Допустимые значения статуса: - `BackLog` - `ToDo` - `InProgress` - `Review` - `Done` ## Why Пользователь явно хочет модель Terraria-style. Без этого раннее проектирование инвентаря, прогрессии, выбора мира и сетевого join flow будет хрупким. ## Expected Outcome Есть документированная и реализуемая структура world save и player save, описаны поля, границы владения данными и точка их загрузки/сохранения. ## Current Context Системы сохранения мира, игрока и их версионирования пока не оформлены. Эта задача создает основу для enemy bitmask, инвентаря и прогрессии. ## Source Of Truth - `docs/tasks/items/TASK-0001.md` - `docs/tasks/items/TASK-0002.md` - последующая реализация persistence layer ## Read First - `docs/tasks/items/TASK-0001.md` - `docs/tasks/items/TASK-0002.md` - `Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs` ## Scope In - определить world save schema - определить player profile schema - описать lifecycle load/save в singleplayer и multiplayer host flow - определить ownership и conflict rules ## Scope Out - миграции между версиями save format - reconnect/resume после дисконнекта ## Constraints - world save и player save должны быть независимыми файлами/сущностями - world save хранит world-state, player save хранит прогрессию и инвентарь персонажа ## If You Find Drift - если в коде появится смешение player и world state, это нужно фиксировать как архитектурный drift ## Suggested Approach 1. Зафиксировать schema и ownership для мира и персонажа. 2. Описать момент чтения и записи для host/server. 3. Подготовить точку интеграции для inventory, progression и chunk kill state. ## Acceptance Criteria - игрок может существовать отдельно от мира - мир хранит собственное состояние независимо от конкретного персонажа - схема не мешает любому игроку зайти в любой мир ## Verification - вычитка схемы сохранений на отсутствие циклических зависимостей - ручная проверка сценария выбора персонажа и выбора мира как независимых шагов ## Risks / Open Questions - потребуется заранее решить идентификаторы игроков и персонажей для мультиплеерного join flow ## Human Decisions Needed - none currently ## Decision Log - `2026-03-30` - Terraria-style сохранения выделены в отдельную задачу перед инвентарем и enemy save state. ## Handoff Notes Все persistence-задачи ниже должны ссылаться на эту схему как на базовую.