Skip to content

event save/load implementation#3

Open
IgorStepanov wants to merge 3 commits intoKonstrush:Recon_release_1.4.3from
IgorStepanov:event-save-load
Open

event save/load implementation#3
IgorStepanov wants to merge 3 commits intoKonstrush:Recon_release_1.4.3from
IgorStepanov:event-save-load

Conversation

@IgorStepanov
Copy link
Copy Markdown

@IgorStepanov IgorStepanov commented Jul 26, 2025

Переработка системы эвентов/сохранений.
Что добавлено:

  • Сохранение/загрузка событий и пост-эвентов.
  • Возможность назначать обработчики и отправлять события отдельным объектам (глобальным объектам из скриптов).
  • При удалении обработчика события убран сброс всех пост-эвентов этого события. Так как обработчиков может быть несколько, терять пост-эвент нельзя.
  • Если функция-обработчик имеет аргументы, параметры сообщения эвента передаются через них. Параметры сообщения, которым не хватило аргументов доступны через GetEventData, как и раньше.
  • Возможность задать формат эвента посредством новой функции SetEventFormat. Если у события задан формат, то генерируется ошибка, как при попытке передать, в качестве обработчика, функции с неподходящим числом аргументов (в этом случае все параметры будут переданы через аргументы функции), так и при попытке создать эвент/пост-эвент с неподходящим форматом.
  • Сохранение названия переменной вместо ее номера для глобальных ссылок. Благодаря этому, при добавлении новых глобальных переменных не ломается загрузка. Поддержка старых сохранений, при этом остается. (Важно: для того чтобы можно было добавлять глобальные переменные - необходимо чтобы сохранение с этими изменениями произошло до добавления новых переменных. Если добавить новую переменную и загрузить сохранение в старом формате - проблема останется. Для ее решения необходим файл восстановления (см. след пункт).
  • Создание файла восстановления для предыдущего пункта. Чтобы создать файл восстановления, нужно взять версию скриптов без добавления новых переменных (то есть с тем набором переменных, который ожидается у пользователей - обладателей старых сохранений), после чего вызвать в скриптах встроенную функцию __CreateRecoveryFile() без аргументов и возвращаемых значений, например через дебаг-консоль. После ее вызова в директории с engine.exe сгенерируется файл recovery.bin. Этот файл необходимо доставить пользователям. Если при запуске сохранения в старом формате в директории с engine.exe будет находиться файл recovery.bin, то с помощью этого файла по номеру переменной будет восстанавливаться ее название, после чего будет получаться и использоваться новый номер переменной. Благодаря этому, если recovery.bin будет находиться в директории с engine.exe, то старые сохранения будут корректно загружаться, даже при добавлении новых глобальных переменных (при условии что новые глобальные переменные были добавлены после генерации recovery.bin.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant