Hi, I mean the "latest loaded save game" should be saved in debug folder.
When the game crashes, the latest loaded save game filename can be 2 types of values:
- Null, if there was no save game loaded in the current game, the game was started fresh.
- Latest loaded save game. This is unique to the current game. I don't see a way of false positives.
We don't need the latest save game in date.
At the moment I suffer from players being too passive on feedback. I asked them to provide 3 things when they report:
- debug folder (after crash or manually generated by F11)
- Save game to reproduce the issue
- Info on how to reproduce the issue with the given save game
If the first and second can be merged, it can potentially reduce the amount of work for players, making them more actively reporting issues.
______
Btw, there is another thing to improve the debug system.
Could you export the text "game crashes, info in debug\era" to json so it can be localised?
Archer30, ok, I'll try to include all the changes in the next release. For new map we should save at least map name, perhaps or even map file. I'll see what can be done.
Ввод текста в чате генерирует событие щелчка левой кнопкой мыши на карте приключений с ИД = 38. Кто-нибудь знает причину и источник этой генерации?
Готовится к выходу версия 3.9.15 и мод на удобные читы и работу с ЕРМ в консоли.
Berserker, а можно попросить немного обновить ELM, если конечно не сильно заморочено?
Суть вопроса: чтобы изменение цвета {~colour} с каким-нибудь тегом игнорировало другие изменения цвета, пока не встретит свой тег {~}.
Пример, есть такая строка:
Code:
Здесь идет описание предмета с {некоторыми} функциями.
И если написать так:
Code:
{~grey}Здесь идет описание предмета с {некоторыми} функциями.{~}
то "некоторыми" все равно будет выделено другим цветом.
Хотелось бы добавить какой-нибудь тег, например
Code:
{~grey!}Здесь идет описание предмета с {некоторыми} функциями.{~}
чтобы все слова отображались одним, в данном примере серым, цветом.
major, быстро и просто, думается, не сделать. Пользоваться тоже будут единицы. По сути, здесь нужно тебе самому написать функцию, вырезающую все теги внутри определённой строки.
Ок, если муторно, то конечно не надо. Просто буду держать дубликаты строк для обоих вариантов.
По сути это аналог !important в css, и есть, где применить, просто сейчас ресурсы идут на другие задачи. 3.9.15 на подходе.
Berserker, как сохранить нужные данные в сейв?
Как я понял, нужны две процедуры для сохранения и чтения.
Code:
Era::RegisterHandler(Global_Vars_Save, "OnSavegameWrite"); // запись в сохранение
Era::RegisterHandler(Global_Vars_Load, "OnSavegameRead"); // чтение из сохранения
И нужно в событии записать и прочитать данные в/из секции.
Code:
_word_ town_vars[48] = { 0 };
// Запись глобальных переменных в сохранение.
void __stdcall Global_Vars_Save(Era::TEvent* e)
{
Era::WriteSavegameSection(96, town_vars, "town_vars");
}
// Чтение глобальных переменных из сохранения.
void __stdcall Global_Vars_Load(Era::TEvent* e)
{
Era::ReadSavegameSection(96, town_vars, "town_vars");
}
Только у меня при сохранении игра крашится. Где-то что-то не так делаю?
Code:
HOMM3 HD version: 5.4 R87
Time { 27.07.2024 17:17:25 }
GUN: [ZZ79779073039T645247MVGZX HHW 039TY]
Exception
{
Module:
Adress: [ 0x00000000 ]
Code: EXCEPTION_ACCESS_VIOLATION
Flags: 0x00000000
Information: read of address: 0x00000000
}
Context { EAX: 0x6D3E15B0, ECX: 0x02D37428, EDX: 0x00000000, EBX: 0x0AF551A0, ESP: 0x02D3741C, EBP: 0x02D37474, ESI: 0x00000001, EDI: 0x00000004 }
Call stack
{
? called from before [ 0x00000030 ]
? called from before [ 0xCCCCCCCC ]
}
Привет. Внешне код выглядит корректно. Тут скорее API Эры не доподключилось.
https://dropmefiles.com/NZU0r
Обязательно добавь era.cpp в проект как компилируемый модуль.
Игра стала крашиться при запуске. Видимо из-за того, что у меня 3.9.4. Подожду последнюю версию, потом проверю.
(27.07.2024 17:20)major Wrote: [ -> ]Как я понял, нужны две процедуры для сохранения и чтения.
Code:
Era::RegisterHandler(Global_Vars_Save, "OnSavegameWrite"); // запись в сохранение
Era::RegisterHandler(Global_Vars_Load, "OnSavegameRead"); // чтение из сохранения
Запись в файл перед запаковкой в воговский участок сохранения - вызов функции 704062h
Чтение из файла после распаковки воговского участка сохранения - вызов функции 7040A7h
Естественно, очень важна последовательность чтения и записи, иначе прочитаются чужие данные либо игра вылетит при попытке прочитать молоко (или другой плагин воспримет твои записи за свои и сохранение будет испорчено), поэтому с установкой хуков на чтение и запись сохранений нужно быть крайне осторожным. Например ВоГ страхуется с помощью ключевых слов, в MoP и ERA+ подстраховки нет, т.к. авторы этих модов положили болт, а как защищены данные в событиях "OnSavegameWrite" и "OnSavegameRead" - только одному Берсеркеру известно.
(27.07.2024 23:40)Berserker Wrote: [ -> ]Да, 3.9.4 уже давно была. А с этим обновлением?
https://dropmefiles.com/An8ut
Тоже крашится.
Там же ничего менять не надо? Подключить era.cpp вместо era.h и все?
Quote:Запись в файл перед запаковкой в воговский участок сохранения - вызов функции 704062h
Чтение из файла после распаковки воговского участка сохранения - вызов функции 7040A7h
Естественно, очень важна последовательность чтения и записи, иначе прочитаются чужие данные либо игра вылетит при попытке прочитать молоко (или другой плагин воспримет твои записи за свои и сохранение будет испорчено), поэтому с установкой хуков на чтение и запись сохранений нужно быть крайне осторожным. Например ВоГ страхуется с помощью ключевых слов, в MoP и ERA+ подстраховки нет, т.к. авторы этих модов положили болт, а как защищены данные в событиях "OnSavegameWrite" и "OnSavegameRead" - только одному Берсеркеру известно.
Всё уже гораздо прогрессивнее лет 15. Можно писать в именованные секции по частям. Данные объединяются автоматически. Количество прочитанных байт в секции возвращается. Никакого молока и костылей. Тут скорее вопрос в API/заголовчниках.
major, era.cpp подключить к проекту как отдельно компилирующий модуль. era.h include в файле, где будешь использовать.
Вызвать Era::ConnectEra().
Скинь, если что плагин сюда.