index ed1ea3bdf3feb7c77de12529d99b0b146c67d94b..72717573b0b9b39303a0d8f4d707891ac350c5b1 100644 (file)
uses sysutils, Classes, md5, g_net, g_netmsg, g_console, g_main, e_log;
function g_Res_SearchSameWAD(const path, filename: AnsiString; const resMd5: TMD5Digest): AnsiString;
-function g_Res_SearchResWad (asMap: Boolean; const resMd5: TMD5Digest): AnsiString;
// download map wad from server (if necessary)
// download all required map resource wads too
procedure g_Res_PutReplacementWad (oldname: AnsiString; newDiskName: AnsiString);
begin
e_LogWritefln('adding replacement wad: oldname=%s; newname=%s', [oldname, newDiskName]);
+ if not assigned(replacements) then replacements := THashStrStr.Create();
replacements.put(toLowerCase1251(oldname), newDiskName);
end;
end;
-function g_Res_SearchResWad (asMap: Boolean; const resMd5: TMD5Digest): AnsiString;
+function g_Res_SearchResWad (asMap: Boolean; fname: AnsiString; const resMd5: TMD5Digest): AnsiString;
var
f: Integer;
begin
//if not assigned(scannedDirs) then scannedDirs := THashStrInt.Create();
if (asMap) then
begin
+ if CheckFileHash(GameDir+'/maps', fname, resMd5) then
+ begin
+ result := findDiskWad(GameDir+'/maps/'+fname);
+ if (length(result) <> 0) then exit;
+ end;
scanDir(GameDir+'/maps/downloads', true);
end
else
begin
+ if CheckFileHash(GameDir+'/wads', fname, resMd5) then
+ begin
+ result := findDiskWad(GameDir+'/wads/'+fname);
+ if (length(result) <> 0) then exit;
+ end;
scanDir(GameDir+'/wads/downloads', true);
end;
for f := Low(knownFiles) to High(knownFiles) do
wadname: AnsiString;
begin
//SetLength(mapData.ExternalResources, 0);
- //result := g_Res_SearchResWad(true{asMap}, mapHash);
result := '';
g_Res_ClearReplacementWads();
g_Res_received_map_start := false;
if (res <> 0) then exit;
// find or download a map
- result := g_Res_SearchResWad(true{asMap}, mapHash);
+ result := g_Res_SearchResWad(true{asMap}, tf.diskName, mapHash);
if (length(result) = 0) then
begin
// download map
result := '';
exit;
end;
+ tf.diskName := fname;
try
res := g_Net_ReceiveResourceFile(-1{map}, tf, strm);
except
begin
res := g_Net_RequestResFileInfo(f, tf);
if (res <> 0) then begin result := ''; exit; end;
- wadname := g_Res_SearchResWad(false{asMap}, tf.hash);
+ wadname := g_Res_SearchResWad(false{asMap}, tf.diskName, tf.hash);
if (length(wadname) <> 0) then
begin
// already here