6.2 KiB
6.2 KiB
Система сохранения инвентаря
Описание
Система автоматического сохранения и загрузки инвентаря игрока, включая экипированные предметы (одежда, оружие).
Функциональность
Автоматическое сохранение
- Инвентарь автоматически сохраняется при любых изменениях:
- Добавление предметов
- Удаление предметов
- Экипировка предметов
- Снятие предметов
Сохранение при выходе из игры
- При отключении от сервера - инвентарь сохраняется автоматически
- При закрытии игры - инвентарь сохраняется при уничтожении объекта игрока
- При разрыве соединения - дополнительное сохранение для защиты от потери данных
Периодическое сохранение
- Каждые 60 секунд - автоматическое сохранение для защиты от сбоев
- Защищает от потери прогресса при неожиданном закрытии игры
Автоматическая загрузка
- При входе в игру система автоматически проверяет наличие сохранения
- Если сохранение найдено, инвентарь загружается автоматически
- Если сохранения нет, начинается с пустым инвентарем
Сохраняемые данные
- Все предметы в инвентаре (название, количество, патроны в магазине)
- Экипированные предметы (одежда, оружие)
- Слоты экипировки
Использование
В игре
- UI панель: В правом верхнем углу экрана отображается панель управления сохранением
- Зеленая индикация = есть сохранение
- Красная индикация = нет сохранения
- Кнопки: Сохранить, Загрузить, Очистить
Автоматическое сохранение
- При изменениях - сохранение происходит автоматически
- При выходе - сохранение при отключении/закрытии игры
- Периодически - каждые 60 секунд для защиты от сбоев
Технические детали
Файл сохранения
- Расположение:
data/inventory_save.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 на пустой инвентарь при ошибках
- Множественные точки сохранения для максимальной защиты данных
Совместимость
- Работает со всеми типами предметов (оружие, одежда, патроны и т.д.)
- Поддерживает все слоты экипировки
- Сохраняет патроны в магазине оружия
- Совместима с существующей системой инвентаря
Устранение неполадок
Проблема: Инвентарь не загружается
- Проверьте консоль на ошибки
- Убедитесь, что файл
data/inventory_save.jsonсуществует - Проверьте права доступа к папке data
Проблема: Предметы не сохраняются
- Убедитесь, что вы владелец игрока (Network.IsOwner)
- Проверьте, что предметы имеют валидные определения
- Проверьте консоль на ошибки сериализации
Проблема: UI не отображается
- Убедитесь, что панель сохранения интегрирована в GUI.razor
- Проверьте, что стили добавлены в GUI.razor
- Перезапустите игру
Проблема: Сохранение не работает при выходе
- Проверьте, что метод
SaveInventoryOnExit()вызывается - Убедитесь, что NetworkManager правильно обрабатывает отключения
- Проверьте логи на наличие ошибок сохранения