Prevent incompatible maps from being displayed in the map chooser.
This commit is contained in:
@@ -233,7 +233,7 @@ namespace OpenRA
|
|||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
foreach (var uid in queryUids)
|
foreach (var uid in queryUids)
|
||||||
previews[uid].UpdateRemoteSearch(MapStatus.Searching, null);
|
previews[uid].UpdateRemoteSearch(MapStatus.Searching, null, null);
|
||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
@@ -251,13 +251,13 @@ namespace OpenRA
|
|||||||
|
|
||||||
var yaml = MiniYaml.FromStream(result);
|
var yaml = MiniYaml.FromStream(result);
|
||||||
foreach (var kv in yaml)
|
foreach (var kv in yaml)
|
||||||
previews[kv.Key].UpdateRemoteSearch(MapStatus.DownloadAvailable, kv.Value, mapDetailsReceived);
|
previews[kv.Key].UpdateRemoteSearch(MapStatus.DownloadAvailable, kv.Value, modData.Manifest.MapCompatibility, mapDetailsReceived);
|
||||||
|
|
||||||
foreach (var uid in batchUids)
|
foreach (var uid in batchUids)
|
||||||
{
|
{
|
||||||
var p = previews[uid];
|
var p = previews[uid];
|
||||||
if (p.Status != MapStatus.DownloadAvailable)
|
if (p.Status != MapStatus.DownloadAvailable)
|
||||||
p.UpdateRemoteSearch(MapStatus.Unavailable, null);
|
p.UpdateRemoteSearch(MapStatus.Unavailable, null, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@@ -269,7 +269,7 @@ namespace OpenRA
|
|||||||
foreach (var uid in batchUids)
|
foreach (var uid in batchUids)
|
||||||
{
|
{
|
||||||
var p = previews[uid];
|
var p = previews[uid];
|
||||||
p.UpdateRemoteSearch(MapStatus.Unavailable, null);
|
p.UpdateRemoteSearch(MapStatus.Unavailable, null, null);
|
||||||
mapQueryFailed?.Invoke(p);
|
mapQueryFailed?.Invoke(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ namespace OpenRA
|
|||||||
public readonly string rules;
|
public readonly string rules;
|
||||||
public readonly string players_block;
|
public readonly string players_block;
|
||||||
public readonly int mapformat;
|
public readonly int mapformat;
|
||||||
|
public readonly string game_mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class MapPreview : IDisposable, IReadOnlyFileSystem
|
public sealed class MapPreview : IDisposable, IReadOnlyFileSystem
|
||||||
@@ -427,7 +428,7 @@ namespace OpenRA
|
|||||||
innerData = newData;
|
innerData = newData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateRemoteSearch(MapStatus status, MiniYaml yaml, Action<MapPreview> parseMetadata = null)
|
public void UpdateRemoteSearch(MapStatus status, MiniYaml yaml, string[] mapCompatibility, Action<MapPreview> parseMetadata = null)
|
||||||
{
|
{
|
||||||
var newData = innerData.Clone();
|
var newData = innerData.Clone();
|
||||||
newData.Status = status;
|
newData.Status = status;
|
||||||
@@ -479,6 +480,12 @@ namespace OpenRA
|
|||||||
var rulesString = Encoding.UTF8.GetString(Convert.FromBase64String(r.rules));
|
var rulesString = Encoding.UTF8.GetString(Convert.FromBase64String(r.rules));
|
||||||
var rulesYaml = new MiniYaml("", MiniYaml.FromString(rulesString)).ToDictionary();
|
var rulesYaml = new MiniYaml("", MiniYaml.FromString(rulesString)).ToDictionary();
|
||||||
newData.SetCustomRules(modData, this, rulesYaml, null);
|
newData.SetCustomRules(modData, this, rulesYaml, null);
|
||||||
|
|
||||||
|
// Map is for a different mod: update its information so it can be displayed
|
||||||
|
// in the cross-mod server browser UI, but mark it as unavailable so it can't
|
||||||
|
// be selected in a server for the current mod.
|
||||||
|
if (!mapCompatibility.Contains(r.game_mod))
|
||||||
|
newData.Status = MapStatus.Unavailable;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user