# Система сохранения инвентаря ## Описание Система автоматического сохранения и загрузки инвентаря игрока, включая экипированные предметы (одежда, оружие). ## Функциональность ### Автоматическое сохранение - Инвентарь автоматически сохраняется при любых изменениях: - Добавление предметов - Удаление предметов - Экипировка предметов - Снятие предметов ### Сохранение при выходе из игры - **При отключении от сервера** - инвентарь сохраняется автоматически - **При закрытии игры** - инвентарь сохраняется при уничтожении объекта игрока - **При разрыве соединения** - дополнительное сохранение для защиты от потери данных ### Периодическое сохранение - **Каждые 60 секунд** - автоматическое сохранение для защиты от сбоев - Защищает от потери прогресса при неожиданном закрытии игры ### Автоматическая загрузка - При входе в игру система автоматически проверяет наличие сохранения - Если сохранение найдено, инвентарь загружается автоматически - Если сохранения нет, начинается с пустым инвентарем ### Сохраняемые данные - Все предметы в инвентаре (название, количество, патроны в магазине) - Экипированные предметы (одежда, оружие) - Слоты экипировки ## Использование ### В игре 1. **UI панель**: В правом верхнем углу экрана отображается панель управления сохранением - Зеленая индикация = есть сохранение - Красная индикация = нет сохранения - Кнопки: Сохранить, Загрузить, Очистить ### Автоматическое сохранение - **При изменениях** - сохранение происходит автоматически - **При выходе** - сохранение при отключении/закрытии игры - **Периодически** - каждые 60 секунд для защиты от сбоев ## Технические детали ### Файл сохранения - Расположение: `data/inventory_save.json` - Формат: JSON - Структура: ```json { "Items": [ { "ItemDefinitionPath": "path/to/item.resource", "Count": 1, "MagazineAmmo": 0, "Id": "unique-id" } ], "EquippedItems": { "RightHand": "item-id", "Body": "item-id" } } ``` ### Классы системы - `InventorySaveSystem` - статический класс для работы с сохранением - `InventorySaveData` - модель данных для сохранения - `SavedInventoryItem` - модель сохраненного предмета ### Интеграция - `Inventar` - добавлены методы `AutoSave()`, `LoadFromSave()`, `HasSaveFile()`, `DeleteSaveFile()` - `Dedugan.Inventory.cs` - автоматическая загрузка при старте и периодическое сохранение - `Dedugan.cs` - сохранение при выходе из игры (`OnDestroy`, `SaveInventoryOnExit()`) - `NetworkManager.cs` - сохранение при отключении игрока (`OnDisconnected`, `OnBecomeInactive`) - `GUI.razor` - интегрированная панель управления сохранением ## Безопасность - Сохранение происходит только на клиенте (Network.IsOwner) - Проверка валидности данных при загрузке - Обработка ошибок с логированием - Fallback на пустой инвентарь при ошибках - **Множественные точки сохранения** для максимальной защиты данных ## Совместимость - Работает со всеми типами предметов (оружие, одежда, патроны и т.д.) - Поддерживает все слоты экипировки - Сохраняет патроны в магазине оружия - Совместима с существующей системой инвентаря ## Устранение неполадок ### Проблема: Инвентарь не загружается 1. Проверьте консоль на ошибки 2. Убедитесь, что файл `data/inventory_save.json` существует 3. Проверьте права доступа к папке data ### Проблема: Предметы не сохраняются 1. Убедитесь, что вы владелец игрока (Network.IsOwner) 2. Проверьте, что предметы имеют валидные определения 3. Проверьте консоль на ошибки сериализации ### Проблема: UI не отображается 1. Убедитесь, что панель сохранения интегрирована в GUI.razor 2. Проверьте, что стили добавлены в GUI.razor 3. Перезапустите игру ### Проблема: Сохранение не работает при выходе 1. Проверьте, что метод `SaveInventoryOnExit()` вызывается 2. Убедитесь, что NetworkManager правильно обрабатывает отключения 3. Проверьте логи на наличие ошибок сохранения