Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 05.07.2024 17:35 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 07.07.2024 04:43 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 09.07.2024 16:42 | 
	
		
	 | 
	
		
		major 
 
 
		
		
		
			
			
			 
			
Posts: 147 
	
		
	 | 
	
		
			
			 
			
				Berserker, а можно попросить немного обновить ELM, если конечно не сильно заморочено? 
Суть вопроса: чтобы изменение цвета {~colour} с каким-нибудь тегом игнорировало другие изменения цвета, пока не встретит свой тег {~}.
 
Пример, есть такая строка:
 
Code: 
 Здесь идет описание предмета с {некоторыми} функциями.
  
И если написать так:
 
Code: 
 {~grey}Здесь идет описание предмета с {некоторыми} функциями.{~}
  
то "некоторыми" все равно будет выделено другим цветом.
 
Хотелось бы добавить какой-нибудь тег, например
 
Code: 
 {~grey!}Здесь идет описание предмета с {некоторыми} функциями.{~}
  
чтобы все слова отображались одним, в данном примере серым, цветом.
			  
			
			
			
		 |  
	 
 | 
	| 14.07.2024 19:57 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 14.07.2024 20:16 | 
	
		
	 | 
	
		
		major 
 
 
		
		
		
			
			
			 
			
Posts: 147 
	
		
	 | 
	
		
			
			 
			
				Ок, если муторно, то конечно не надо. Просто буду держать дубликаты строк для обоих вариантов.
			 
			
			
			
		 |  
	 
 | 
	| 14.07.2024 21:50 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 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 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 ] 
}
  
			 
			
			
			
		 |  
	 
 | 
	| 27.07.2024 17:20 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 27.07.2024 18:43 | 
	
		
	 | 
	
		
		major 
 
 
		
		
		
			
			
			 
			
Posts: 147 
	
		
	 | 
	
		
			
			 
			
				Игра стала крашиться при запуске. Видимо из-за того, что у меня 3.9.4. Подожду последнюю версию, потом проверю.
			 
			
			
			
		 |  
	 
 | 
	| 27.07.2024 20:20 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 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: 16788 
	
		
	 | 
	
		
			
			 
			
				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 | 
	
		
	 |