Fix the handling of maps with invalid rules. Fixes #6787.

This commit is contained in:
Paul Chote
2014-10-19 15:52:04 +13:00
parent 6556cfc667
commit 50643b0cfe
2 changed files with 18 additions and 11 deletions

View File

@@ -76,6 +76,7 @@ namespace OpenRA
public string Tileset;
public bool AllowStartUnitConfig = true;
public Bitmap CustomPreview;
public bool InvalidCustomRules { get; private set; }
public readonly TileShape TileShape;
[FieldLoader.Ignore]
@@ -274,7 +275,21 @@ namespace OpenRA
void PostInit()
{
rules = Exts.Lazy(() => Game.modData.RulesetCache.LoadMapRules(this));
rules = Exts.Lazy(() =>
{
try
{
return Game.modData.RulesetCache.LoadMapRules(this);
}
catch (Exception e)
{
InvalidCustomRules = true;
Log.Write("debug", "Failed to load rules for {0} with error {1}", Title, e.Message);
}
return Game.modData.DefaultRules;
});
cachedTileSet = Exts.Lazy(() => Rules.TileSets[Tileset]);
var tl = Map.MapToCell(TileShape, new CPos(Bounds.Left, Bounds.Top));

View File

@@ -237,16 +237,8 @@ namespace OpenRA
if (RuleStatus != MapRuleStatus.Unknown)
return;
try
{
Map.PreloadRules();
RuleStatus = MapRuleStatus.Cached;
}
catch (Exception e)
{
Log.Write("debug", "Map {0} failed validation with an exception:\n{1}", Uid, e.Message);
RuleStatus = MapRuleStatus.Invalid;
}
RuleStatus = Map.InvalidCustomRules ? MapRuleStatus.Invalid : MapRuleStatus.Cached;
}
}
}