From b70c56927fadc150d8236f9f3184b5202095d58a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 22 Jun 2014 13:30:04 +0200 Subject: [PATCH] add a new Lint check for map players --- OpenRA.Mods.RA/Lint/CheckPlayers.cs | 39 ++++++++++++++++++++++++++++ OpenRA.Mods.RA/OpenRA.Mods.RA.csproj | 1 + 2 files changed, 40 insertions(+) create mode 100644 OpenRA.Mods.RA/Lint/CheckPlayers.cs diff --git a/OpenRA.Mods.RA/Lint/CheckPlayers.cs b/OpenRA.Mods.RA/Lint/CheckPlayers.cs new file mode 100644 index 0000000000..5c5bacd985 --- /dev/null +++ b/OpenRA.Mods.RA/Lint/CheckPlayers.cs @@ -0,0 +1,39 @@ +#region Copyright & License Information +/* + * Copyright 2007-2014 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using System; +using System.Linq; +using OpenRA.Traits; + +namespace OpenRA.Mods.RA +{ + public class CheckPlayers : ILintPass + { + public void Run(Action emitError, Action emitWarning, Map map) + { + var playerNames = map.Players.Values.Select(p => p.Name); + foreach (var player in map.Players) + foreach (var ally in player.Value.Allies) + if (!playerNames.Contains(ally)) + emitError("Allies contains player {0} that is not in list.".F(ally)); + + foreach (var player in map.Players) + foreach (var enemy in player.Value.Enemies) + if (!playerNames.Contains(enemy)) + emitError("Enemies contains player {0} that is not in list.".F(enemy)); + + var races = map.Rules.Actors["world"].Traits.WithInterface().Select(c => c.Race); + foreach (var player in map.Players) + if (!string.IsNullOrWhiteSpace(player.Value.Race) && player.Value.Race != "Random" && !races.Contains(player.Value.Race)) + emitError("Invalid race {0} chosen for player {1}.".F(player.Value.Race, player.Value.Name)); + } + } +} + diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 57b9325943..ee29ef2a2c 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -516,6 +516,7 @@ +