| Berserker   
   
   Posts: 16785
 
 |  | 
	| 05.07.2024 17:35 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 07.07.2024 04:43 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 09.07.2024 16:42 |  | 
	
		| major   
 Posts: 147
 
 | 
			| 
 
				Berserker, а можно попросить немного обновить ELM, если конечно не сильно заморочено? 
Суть вопроса: чтобы изменение цвета {~colour} с каким-нибудь тегом игнорировало другие изменения цвета, пока не встретит свой тег {~}.
 
Пример, есть такая строка:
 
Code:
 Здесь идет описание предмета с {некоторыми} функциями.
 
И если написать так:
 
Code:
 {~grey}Здесь идет описание предмета с {некоторыми} функциями.{~}
 
то "некоторыми" все равно будет выделено другим цветом.
 
Хотелось бы добавить какой-нибудь тег, например
 
Code:
 {~grey!}Здесь идет описание предмета с {некоторыми} функциями.{~}
 
чтобы все слова отображались одним, в данном примере серым, цветом.
			 |  | 
	| 14.07.2024 19:57 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 14.07.2024 20:16 |  | 
	
		| major   
 Posts: 147
 
 | 
			| 
 
				Ок, если муторно, то конечно не надо. Просто буду держать дубликаты строк для обоих вариантов.
			 |  | 
	| 14.07.2024 21:50 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 15.07.2024 01:36 |  | 
	
		| major   
 Posts: 147
 
 | 
			| 
 
				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 R87Time {   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 ]
 }
 |  | 
	| 27.07.2024 17:20 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 27.07.2024 18:43 |  | 
	
		| major   
 Posts: 147
 
 | 
			| 
 
				Игра стала крашиться при запуске. Видимо из-за того, что у меня 3.9.4. Подожду последнюю версию, потом проверю.
			 |  | 
	| 27.07.2024 20:20 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 27.07.2024 23:40 |  | 
	
		| XEPOMAHT   
   
   Posts: 2481
 
 | 
			| 
 
				 (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" - только одному Берсеркеру известно.
			 
				
(This post was last modified: 28.07.2024 02:14 by XEPOMAHT.)
 |  | 
	| 28.07.2024 02:11 |  | 
	
		| major   
 Posts: 147
 
 | 
			| 
 
				 (27.07.2024 23:40)Berserker Wrote:  Да, 3.9.4 уже давно была. А с этим обновлением?https://dropmefiles.com/An8ut
 
Тоже крашится.
 
Там же ничего менять не надо? Подключить era.cpp вместо era.h и все?
			 |  | 
	| 28.07.2024 09:57 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 | 
			| 
 
				Quote:Запись в файл перед запаковкой в воговский участок сохранения - вызов функции 704062hЧтение из файла после распаковки воговского участка сохранения - вызов функции 7040A7h
 
 Естественно, очень важна последовательность чтения и записи, иначе прочитаются чужие данные либо игра вылетит при попытке прочитать молоко (или другой плагин воспримет твои записи за свои и сохранение будет испорчено), поэтому с установкой хуков на чтение и запись сохранений нужно быть крайне осторожным. Например ВоГ страхуется с помощью ключевых слов, в MoP и ERA+ подстраховки нет, т.к. авторы этих модов положили болт, а как защищены данные в событиях "OnSavegameWrite" и "OnSavegameRead" - только одному Берсеркеру известно.
 
Всё уже гораздо прогрессивнее лет 15. Можно писать в именованные секции по частям. Данные объединяются автоматически. Количество прочитанных байт в секции возвращается. Никакого молока и костылей. Тут скорее вопрос в API/заголовчниках.
major , era.cpp подключить к проекту как отдельно компилирующий модуль. era.h include в файле, где будешь использовать. 
Вызвать Era::ConnectEra().
 
Скинь, если что плагин сюда.
			 
 Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
 Поддержать проект
 
 |  | 
	| 28.07.2024 12:23 |  |