| Berserker   
   
   Posts: 16785
 
 |  | 
	| 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: 16785
 
 |  | 
	| 02.12.2019 21:33 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 | 
			| 
 
				Тут дело не в виртуальной файловой системе, скорее всего. Все 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 |  |