02.12.2019, 20:56
02.12.2019, 21:14
2.75 не нашел
играю 2.75 т.к 2.88 вылетает стабильно каждый новый месяц на 1 день
Тесты на Win 10 64 EN 1703
https://ibb.co/Y864xwt
https://ibb.co/WvZDYkP
играю 2.75 т.к 2.88 вылетает стабильно каждый новый месяц на 1 день
Тесты на Win 10 64 EN 1703
https://ibb.co/Y864xwt
https://ibb.co/WvZDYkP
02.12.2019, 21:33
https://dropmefiles.com/ljEXh
Да, всё верно, тесты у тебя проходят.
Да, всё верно, тесты у тебя проходят.
22.11.2021, 13:57
Как с помощью новой виртуальной системы заставить редактор карт читать *.msk из *.paс любых модов? Перенаправления на чтение def из *.pac, как я понял, реализовано в eramap.dll, но по *.msk для Дельфы никаких готовых решений для патча к редактору карт похоже нет и для новых объектов происходит порча масок объеков карты при загрузке def-а (т.е. def редактор карт находит в любом *.paс, а аналогичный *.msk ищется редактором исключительно только в H3sprite.lod, полностью игнорируя *.pac). Данный недостаток каким-то образом устранял Кавалерист у себя в патче к редактору, но вот как он это сделал - не ясно. 

22.11.2021, 15:47
Тут дело не в виртуальной файловой системе, скорее всего. Все pac-и подгружаются вместе с lod-ми и формируют одну таблицу архивов. Скорее всего GrayFace или авторы оригинального редактора вместо цикла линейного поиска по архивам ищут только в одном конкретном лоде.
$4DACE6 — здесь лежит указатель на таблицу лодов.
Нужно прибавить к указателю 99(макс число поддерживаемых архивов - 1) * 400. Получим ссылку на последний lod/pac.
Оттуда цикл вызова 4E48F0 (проверка ресурса в архиве) с вычитанием 400 из указателя на каждом шаге. Как только что-то нашлось или достигли конца — выходим.
Скорее всего, уже есть готовая функция в редакторе, но в оригинальной игре повторяющиеся циклы в каждой функции загрузки ресурса определённого типа.
$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
22.11.2021, 16:28
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...