Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 02.12.2019 20:56 | 
	
		
	 | 
	
		
		RDV 
 
 
		
		
		
			
			
			 
			
Posts: 23 
	
		
	 | 
	
		
			
			 
			
			
			
			
				
(This post was last modified: 02.12.2019 21:53 by RDV.)
 
			 
		 |  
	 
 | 
	| 02.12.2019 21:14 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 02.12.2019 21:33 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
			
			 
			
				Тут дело не в виртуальной файловой системе, скорее всего. Все pac-и подгружаются вместе с lod-ми и формируют одну таблицу архивов. Скорее всего GrayFace или авторы оригинального редактора вместо цикла линейного поиска по архивам ищут только в одном конкретном лоде. 
$4DACE6 — здесь лежит указатель на таблицу лодов. 
Нужно прибавить к указателю 99(макс число поддерживаемых архивов - 1) * 400. Получим ссылку на последний lod/pac.
 
Оттуда цикл вызова 4E48F0 (проверка ресурса в архиве) с вычитанием 400 из указателя на каждом шаге. Как только что-то нашлось или достигли конца — выходим.
 
Скорее всего, уже есть готовая функция в редакторе, но в оригинальной игре повторяющиеся циклы в каждой функции загрузки ресурса определённого типа.
 
Code: 
 function FindFileLod (const FileName: string; out LodPath: string): boolean; 
const 
  MAX_LOD_COUNT = 100; 
 
type 
  PLod = ^TLod; 
  TLod = packed record 
    Dummy: array [0..399] of byte; 
  end; 
 
var 
  Lod: PLod; 
  i:   integer; 
 
begin 
  Lod := Ptr(integer(ppointer($4DACE6)^) + sizeof(TLod) * (MAX_LOD_COUNT - 1)); 
  // * * * * * // 
  result := false; 
  i      := MAX_LOD_COUNT - 1; 
 
  while not result and (i >= 0) do begin 
    if ppointer(Lod)^ <> nil then begin 
      result := FileIsInLod(FileName, Lod); 
    end; 
 
    if not result then begin 
      Dec(Lod); 
      Dec(i); 
    end; 
  end; 
 
  if result then begin 
    LodPath := pchar(integer(Lod) + 8); 
  end; 
end; // .function FindFileLod
  
			 
			
			
  
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов 
Поддержать проект 
			
		 |  
	 
 | 
	| 22.11.2021 15:47 | 
	
		
	 | 
	
		
		RoseKavalier 
 
 
		
		
		
			
			
			
 
 
			
Posts: 118 
	
		
	 | 
	
		
			
			 
			
				If you give me an address, I can take a look at what I did. It's been so long that I worked in the editor that I have forgotten much...
			 
			
			
			
		 |  
	 
 | 
	| 22.11.2021 16:28 | 
	
		
	 |