sasalka/Code/Inventory/README_SaveSystem.md
2025-06-29 12:39:23 +03:00

6.2 KiB
Raw Blame History

Система сохранения инвентаря

Описание

Система автоматического сохранения и загрузки инвентаря игрока, включая экипированные предметы (одежда, оружие).

Функциональность

Автоматическое сохранение

  • Инвентарь автоматически сохраняется при любых изменениях:
    • Добавление предметов
    • Удаление предметов
    • Экипировка предметов
    • Снятие предметов

Сохранение при выходе из игры

  • При отключении от сервера - инвентарь сохраняется автоматически
  • При закрытии игры - инвентарь сохраняется при уничтожении объекта игрока
  • При разрыве соединения - дополнительное сохранение для защиты от потери данных

Периодическое сохранение

  • Каждые 60 секунд - автоматическое сохранение для защиты от сбоев
  • Защищает от потери прогресса при неожиданном закрытии игры

Автоматическая загрузка

  • При входе в игру система автоматически проверяет наличие сохранения
  • Если сохранение найдено, инвентарь загружается автоматически
  • Если сохранения нет, начинается с пустым инвентарем

Сохраняемые данные

  • Все предметы в инвентаре (название, количество, патроны в магазине)
  • Экипированные предметы (одежда, оружие)
  • Слоты экипировки

Использование

В игре

  1. 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 на пустой инвентарь при ошибках
  • Множественные точки сохранения для максимальной защиты данных

Совместимость

  • Работает со всеми типами предметов (оружие, одежда, патроны и т.д.)
  • Поддерживает все слоты экипировки
  • Сохраняет патроны в магазине оружия
  • Совместима с существующей системой инвентаря

Устранение неполадок

Проблема: Инвентарь не загружается

  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. Проверьте логи на наличие ошибок сохранения