Please or Регистрация to create posts and topics.

Система сохранений v1.1 (by SIZZZ)

Система сохранений v1.1 (Разработчик: SIZZZ)

 

Данный модуль позволяет добавить в вашу игру систему сохранений на 6 слотов. Все данные сохраняются в localStorage вашего браузера. Слоты сохранений для каждой игры отдельные, а не совместные, как во встроенной функции сохранения AXMA (которая, к слову, не работает в JS версии). Сохранения привязываются к названию вашей игры (StoryTitle), и если вы его измените, то все сделанные ранее сохранения пропадут.

Чтобы в вашей игре работала система сохранений, все переменные, которые вам нужно сохранить, объявляйте как свойства объекта sv.
Например: sv.Атака = 100, sv.счет = 2, sv.оружие = 'Нож' и так далее.

Новое в версии 1.1
- Добавлена функция автосохранения
- Добавлена возможность сохранения и загрузки игры из файла.
На смартфонах функция сохранения в файл работает не во всех браузерах. Работоспостобность проверена на Google, Opera, Opera Touch, Opera Mini, Yandex Browser. В некоторых браузерах файл может сохраняться под именем из множества символов, например "c8143231c-68a5a546547cd-38", просто переименуйте его по своему усмотрению, расширение файла значения не имеет. Загрузка из файла работает во всех браузерах, которые поддерживают загрузку из файловой системы. На ПК загрузка и сохранение работает без проблем.

Подробную инструкцию к модулю можно прочитать в файле save.sm. Я постарался все подробно описать, чтобы было понятно любому начинающему разработчику.

Загруженные файлы:
  • Вам нужно войти, чтобы просматривать прикрепленные файлы..

Моё почтение. Хорошо написанный модуль, развивающий ту самую концепцию, о которой я говорил в своей статье. Респектую.

Модуль обновлен до версии 1.1

У вас сказано, что все переменные для сохранения следует записывать как свойства обьекта $sv. А можно ли сохранить в этом $sv не переменную или массив, а другой обьект? Ведь обьекты не простые переменные, а "набор переменных в переменной". И как это "писать"?

Цитата: Upasa от 03.07.21, 16:40

У вас сказано, что все переменные для сохранения следует записывать как свойства обьекта $sv. А можно ли сохранить в этом $sv не переменную или массив, а другой обьект? Ведь обьекты не простые переменные, а "набор переменных в переменной". И как это "писать"?

Да, можно. Например, вот так:

sv.игрок = {
максхп: 100,
хп: 100,
атака: 0,
защита: 0,
};

Отлично, спасибо. Хм, надо будет как-то это проверить..

Вопросы прибывают.

Вопрос 1. Как понимаю, ваши сохранения позволяют сохранять в любой нужный момент, так чтобы в остальное время доступ к сохранениям отсутствовал, как в космосиме Х-3 Terran Conflict, где без страховки можно сохраняться только на станциях. Верно я понимаю?

Вопрос 2. Можно ли сделать так, чтобы юзер не мог использовать какой то другой способ/тип сохранения, а мог только лишь созданную мной кнопку в определенном месте?

 

Стоит цель, чтобы юзер не смог изменить сохраненные данные, в связи с чем

вопрос 3. Легко ли изменить данные, сохраняемые "в файл"? И можно ли добраться до данных внутреннего сохранения в localStorage браузера?

 

Предполагается сохранение большого количества данных, а значит

вопрос 4. Вряд ли есть ограничение обьема данных при сохранении в файл, но меня больше интересует способ внутреннего сохранения. Нет ли ограничений по обьему сохраняемых данных в localStorage?

Дорогой друг, сохранения работают именно в тот момент, когда вызывается функция сохранения. Она может вызываться кнопкой либо скриптом в игре. И в ваших силах где-то позволить игроку сохраняться, а где-то нет.

Плюс, внутри кода есть переменная cansave, которая если равна 1, позволяет игроку сделать сейв, или 0 - когда запрещает. Плюс есть функция автосохранения.

Совет, попробуйте пробежаться глазами по коду, почитайте и поймите логику. И будет понятно, как все работает

Цитата: Upasa от 04.07.21, 17:17

Вопросы прибывают.

Вопрос 1. Как понимаю, ваши сохранения позволяют сохранять в любой нужный момент, так чтобы в остальное время доступ к сохранениям отсутствовал, как в космосиме Х-3 Terran Conflict, где без страховки можно сохраняться только на станциях. Верно я понимаю?

Вопрос 2. Можно ли сделать так, чтобы юзер не мог использовать какой то другой способ/тип сохранения, а мог только лишь созданную мной кнопку в определенном месте?

 

Стоит цель, чтобы юзер не смог изменить сохраненные данные, в связи с чем

вопрос 3. Легко ли изменить данные, сохраняемые "в файл"? И можно ли добраться до данных внутреннего сохранения в localStorage браузера?

 

Предполагается сохранение большого количества данных, а значит

вопрос 4. Вряд ли есть ограничение обьема данных при сохранении в файл, но меня больше интересует способ внутреннего сохранения. Нет ли ограничений по обьему сохраняемых данных в localStorage?

Попробую я ответить, раз SIZZ не спешит.
1) Здесь Крис уже дал нормальный ответ. Сохранение происходит в момент вызова функции. А где её вызывать — это уже вы сами решаете.
2) Прямо проистекает из первого. Куда вы функцию сохранения привяжете — там её пользователь и сможет вызывать.
Если вы этот вопрос задаёте в контексте взлома игры — теоретически человек, знающий как пользоваться консолью браузера сможет вызывать функцию в любой момент.
3) Посмотреть содержимое localStorage можно в инспекторе браузера. Все данные там хранятся в формате строк. Доступ туда в пару кликов. Без какого-нибудь шифрования прочитать содержимое не трудно. Изменить данные тоже не трудно. Нужно всего лишь изучить структуру готового сохранения, и через консоль вызвать localStorage.setItem('Переменная', 'значение'); Ну, это грубо говоря. На самом деле самую малость сложнее.
4) Ограничение таки есть. Примерно 5MB данных,  в зависимости от браузера. В целом — это дохрена, но лучше не злоупотреблять. Нагрузка на localStorage может привести к замедлению работы мобильных браузеров. В идеале, нужно ограничиваться ~500kb.

Вроде более—менее ответил. Обращайся, если что.

Большое спасибо, вроде почти все. Да, второй вопрос связан с взломом игры. Как и третий, со взломом и шифрованием. Тут вопрос конечно, стоит ли задумываться об этом в принципе, и он тоже стоит на повестке дня и еще не решен. Для первого проекта все это не нужно, а вот дальше.. Кстати, эта тема вообще интересна, так что хочется поработать с подобными механиками, независимо от того, будут ли они применяться а практике в ближайшее время или нет.

Там во втором вопросе была отсылка к другим видам сохранений, например к встроенным от разработчика. Вдруг он их реализует, они мне не помешают? Конечно этот вопрос скорее к самому разработчику, так что.. Надеюсь, он реализует их с возможностью отключить. Когда начинал работать, не думал, что буду рад возможности отключения сохранений)