| Berserker   
   
   Posts: 16786
 
 |  | 
	| 08.02.2021 19:33 |  | 
	
		| Berserker   
   
   Posts: 16786
 
 |  | 
	| 08.02.2021 20:14 |  | 
	
		| daemon_n   
   
   Posts: 4366
 
 | 
			| 
 
				Berserker, тогда просто вернуть "повторяемость".
 
И не только в бою, если возможно - хотя остальные объекты можно защитить "грамотным скриптингом" в начале карты. Та же "книга заклинаний", которая генерирует совершенно рандомныые заклинания каждый раз, когда ты её поднимаешь.
 
И всё же. Смотрю на пример Хота и переигровка битвы. 
Там мы получаем всегда один результат в точном повторении действий в битве.
 
Но вопрос мой такой:
 
Почему ты отменил внесённое ранее сохранение ГСЧ? Было ведь даже особо объявлено, а лично мной принято с восторгом. Каковы же причины возврата?   
 
  
 Новейший Heroes Launcher
 |  | 
	| 08.02.2021 20:23 |  | 
	
		| Berserker   
   
   Posts: 16786
 
 | 
			| 
 
				Дима, ну где сохранять состояние ГСЧ? В воздухе? В Хоте используется корявый родной генератор на простой хэш функции от текущего времени в миллисекундах. Состояние генератора — 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: 16786
 
 |  | 
	| 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 loadlibdb "mydll.dll", 0
 
daemon_nCode:
 loadlib:call LoadLibraryA
 jmp OriginalEntryPoint
 , возможно. Меня просто на эксперименты тянет, да и делать прямо сейчас это необязательно - не получится, так не получится. Зато мы все потом будем это знать ))
			 
 Создал новый глобальный мод: WoG Ultra Edition
 
				
(This post was last modified: 12.02.2021 14:31 by Raistlin.)
 |  | 
	| 12.02.2021 14:28 |  |