Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 08.02.2021 19:33 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 08.02.2021 20:14 | 
	
		
	 | 
	
		
		daemon_n 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 4366 
	
		
	 | 
	
		
			
			 
			
				Berserker, тогда просто вернуть "повторяемость".
 
И не только в бою, если возможно - хотя остальные объекты можно защитить "грамотным скриптингом" в начале карты. Та же "книга заклинаний", которая генерирует совершенно рандомныые заклинания каждый раз, когда ты её поднимаешь.
 
И всё же. Смотрю на пример Хота и переигровка битвы. 
Там мы получаем всегда один результат в точном повторении действий в битве.
 
Но вопрос мой такой:
 
Почему ты отменил внесённое ранее сохранение ГСЧ? Было ведь даже особо объявлено, а лично мной принято с восторгом. Каковы же причины возврата?  
			 
			
			
  
  
 
Новейший Heroes Launcher
			
		 |  
	 
 | 
	| 08.02.2021 20:23 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
			
			 
			
				Дима, ну где сохранять состояние ГСЧ? В воздухе? В Хоте используется корявый родной генератор на простой хэш функции от текущего времени в миллисекундах. Состояние генератора — 4 байта простив 1000+ у Вихря Мерсенна. Его инициализация происходит до боя и при переигровке в фиксированное значение, которое получается из набора параметров, вроде координат боя. Ровно так, как сейчас работает генерация препятствий в бою. В сохранённой игре состояние генератора не запоминается. Потому, если хочется детерминированности, то делается это скриптом ровно схожим макаром: принудительная инициализация ГСЧ хэшем от набора фиксированных параметров. 
 
У меня в моде Смешанные Нейтралы схожим образом реализована случайная расстановка отрядов. 
 
Подсказываю как сделать: 
Получаешь фикс. параметры x, y, z, leftHero, rightHero, day. Можешь взять другие. 
Получаешь первый хэш = x OR (y SHL 8) OR (z SHL 16) 
Получаешь второй хэш = (leftHero SHL 4) OR (rightHero SHL 12) OR (day SHL 20). 
Получаешь комбинированный хэш = первый_хэш XOR второй_хэш XOR случайное_число_карты 
Вызываешь Tm32Encode из Era Erm Framework для получения конечного хэша от комбинированного 
Вызываешь VR:R0/хэш T0/хэш для установки ГСЧ в фиксированное значение. 
 
Хэш можешь рассчитать в OnBattlefieldVisible с приоритетом 999 у скрипта. Его же использовать в OnBeforeBattleReplay, например. Нужно тестировать и смотреть очерёдность событий. 
 
Случайное число карты генерируешь при старте игры.
			 
			
			
  
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов 
Поддержать проект 
			
		 |  
	 
 | 
	| 08.02.2021 21:09 | 
	
		
	 | 
	
		
		daemon_n 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 4366 
	
		
	 | 
	
		
 | 
	| 08.02.2021 21:43 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 08.02.2021 22:04 | 
	
		
	 | 
	
		
		daemon_n 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 4366 
	
		
	 | 
	
		
			
			 
			
				Для бинарников не работает проверка через !!SN:L;  - так понимаю, и не должна? 
Однако-таки есть возможность их определить:
 
			 
			
			
  
  
 
Новейший Heroes Launcher
			
		 |  
	 
 | 
	| 09.02.2021 14:22 | 
	
		
	 | 
	
		
		daemon_n 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 4366 
	
		
	 | 
	
		
 | 
	| 09.02.2021 16:31 | 
	
		
	 | 
	
		
		Raistlin 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 1344 
	
		
	 | 
	
		
			
			 
			
				XEPOMAHT, хорошо, я понял. Единственное, в новый ехе придется ведь подгрузить era.dll и еще пару библиотек? Если да, то как это сделать? Вот так получится?
 
Code: 
 call loadlib 
db "mydll.dll", 0
  
Code: 
 loadlib: 
call LoadLibraryA 
jmp OriginalEntryPoint
  
daemon_n, возможно. Меня просто на эксперименты тянет, да и делать прямо сейчас это необязательно - не получится, так не получится. Зато мы все потом будем это знать ))
			  
			
			
  
Создал новый глобальный мод: WoG Ultra Edition
			
				
(This post was last modified: 12.02.2021 14:31 by Raistlin.)
 
			 
		 |  
	 
 | 
	| 12.02.2021 14:28 | 
	
		
	 |