Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
			
			 
			
				Algor, спасибо, VR:R, конечно, исправил.  
Да, вместо него выполняется VR:R. Какая обратная совместимость в вопросе ГСЧ? Это был в своё время просто костыль на коленке в ответ на «нам не нравится, как генерирует rand-фуннкция игры». Хороший генератор псевдослучайных чисел и так обладает свойством слабой предсказуемости и равномерности распределения. Вихрь Мерсенна — один из лучших. Алгоритмически же VR:T и VR:V не отличимы. 
 
И да, VR:T — один из источников рассинхронизации в сетевой игре (событие сработает только у одного из игроков) и абсолютно ненадёжен в плане генерации последовательности (выдаёт одинаковые). Если нужно намеренно сбросить значение генератора на число, зависимое от времени, то пример кода я указал. Берём то же время, что и Слава использовал (timeGetTime) и инициализируем генератор. Но такое не нужно почти нигде. 
 
У меня при первом использовании генератор инициализируется от времени. Дальше хоть до конца жизни будет генерироваться неповторяемая последовательность чисел. Разве что можно было бы сделать сохранение его состояния в сейве, но тогда можно было бы в точности воспроизводить ход боя при перезагрузке, чего не было в оригинале. 
 
XEPOMAHT, можно чуть подробнее? У меня не стоит Era Scripts на тестовой сборке.
			 
			
			
  
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов 
Поддержать проект 
			
		 |  
	 
 | 
	| 27.01.2020 16:14 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
			
			 
			
				Algor, да, объясняю, почему остаток от деления даёт неравномерно распределённые результаты. 
Генератор выдаёт двоичное число, скажем 0..15 (16 значений). Мы хотим сгенерировать 0..12 (13 значений). 
Если на генераторе выпало 0..12, они и станут итоговыми значениями. Если 13, 14, 15, они станут 0, 1, 2 соответственно (остаток от деления на 13). Имеем удвоенные шансы выпадения 0, 1, 2. 
Правильный вариант реализован у меня в модуле Mersenne Twister. При выпадении 13, 14, 15 нужно отбросить результат и повторить генерацию. И так, пока не выпадет 0..12. Вот тогда будут одинаковые вероятности на желаемом числовом диапазоне. С VR:T такой финт не проходит, там не генератор, а просто текущий счётчик миллисекунд.
			 
			
			
  
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов 
Поддержать проект 
			
		 |  
	 
 | 
	| 27.01.2020 16:58 | 
	
		
	 | 
	
		
		XEPOMAHT 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 2481 
	
		
	 | 
	
		
			
			 
			
				 (27.01.2020 16:14)Berserker Wrote:  можно чуть подробнее? У меня не стоит Era Scripts на тестовой сборке. 
По версии bug fixes.erm этот код почему-то должен выдавать номер стека, но практически почему-то не выдаёт (вообще не ясно, зачем тут !!SN:X, когда номер можно и нужно получать из батлменеджера):
 
Code: 
 !?FU77007;                            [фаза регенерации (перед получением хода)] 
!!SN:X?y1;                            [y1 - Отряд]
  
Вообще данный костыль на палатку, на которую навешивается паралич на 1 ход, давно пора удалить из Era Scripts.
			  
			
			
			
				
(This post was last modified: 27.01.2020 17:15 by XEPOMAHT.)
 
			 
		 |  
	 
 | 
	| 27.01.2020 17:11 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 27.01.2020 17:32 | 
	
		
	 | 
	
		
		Algor 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 3883 
	
		
	 | 
	
		
			
			 
			
				 (27.01.2020 17:11)XEPOMAHT Wrote:  Вообще данный костыль на палатку, на которую навешивается паралич на 1 ход, давно пора удалить из Era Scripts. 
Если есть более прямой рабочий фикс - я только за, кидай ссылку. 
Просто когда я делал, такого не было. Сейчас даже и не помню, как оно работает.
 Berserker, понятно все, кроме ""but prefer not do to it for multiplayer support". Какие там подводные камни?
			  
			
			
  
			
		 |  
	 
 | 
	| 27.01.2020 17:39 | 
	
		
	 | 
	
		
		XEPOMAHT 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 2481 
	
		
	 | 
	
		
			
			 
			
				 (27.01.2020 17:52)Berserker Wrote:  Что выдаёт у тебя?
  
 
 (27.01.2020 17:39)Algor Wrote:  Если есть более прямой рабочий фикс - я только за, кидай ссылку. 
Из плагина game bug fixes.dll (входит в текущий состав ЭРА):
 
Code: 
 _BattleStack_* mon = (_BattleStack_*)(int)(c->esi -656); 
 
    // если выстрелов у катапульты или балисты больше нет 
    // то делаем пропуски передачи хода этим машинам 
    if (mon->creature_id == 145 || mon->creature_id == 146) { 
        if ( mon->creature.shots < 1 ) { 
            c->return_address = 0x464DAD; 
            return NO_EXEC_DEFAULT; 
        }     
    }
  
и
 
Code: 
 // исправление бага палатки, когда на её ходу невозможно убежать или сделать другие действия 
    _PI->WriteByte(0x75C82C, 0xEB);
  
			 
			
			
			
		 |  
	 
 | 
	| 27.01.2020 18:04 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 27.01.2020 18:10 | 
	
		
	 | 
	
		
		XEPOMAHT 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 2481 
	
		
	 | 
	
		
			
			 
			
				 (27.01.2020 18:10)Berserker Wrote:  XEPOMAHT, я рассчитываю номер стека как адрес структуры отряда из ecx - адрес первой структуры / размер структуры отряда в бою. 
Теоретически, проще и быстрее получать номер стека можно так: mov eax, dword [ecx+F8]
  (27.01.2020 18:10)Berserker Wrote:  вероятно, один из плагинов подменяет у тебя что-то. 
Вроде бы нет. Перехват Тифона идёт позже, а больше и не кому.
  (27.01.2020 18:42)daemon_n Wrote:  bug fixes.erm слегка отличается от того, что в чистой Era Scripts. 
Пробовал - то же самое, что и в чистой ES.
  (27.01.2020 20:21)daemon_n Wrote:  Какой прекрасный интерфейс. Его бы под hd mod и некоторые иные моды доработать.  
Да вроде какие-то энтузиасты делали адаптацию и под HD-мод, и даже кое-кто под MoP:
 
			 
			
			
			
				
(This post was last modified: 27.01.2020 20:44 by XEPOMAHT.)
 
			 
		 |  
	 
 | 
	| 27.01.2020 20:39 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 27.01.2020 22:16 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 27.01.2020 22:53 | 
	
		
	 | 
	
		
		igrik 
 
 
		
		
		
			
			
			
 
 
			
Posts: 2821 
	
		
	 | 
	
		
			
			 
			
				 (27.01.2020 18:04)XEPOMAHT Wrote:  Из плагина game bug fixes.dll (входит в текущий состав ЭРА): 
Не входит. 
Названия у плагинов одинаковые, но тот плагин, который в оригинальном установщике ЭРЫ имеет 10% функционала от моего.
			  
			
			
  
game bug fixes extended.dll  ||  My Plugins  ||  My GitHub
			
		 |  
	 
 | 
	| 27.01.2020 23:27 | 
	
		
	 |