diff --git a/OpenRA.Mods.Common/UtilityCommands/Extensions.cs b/OpenRA.Mods.Common/UtilityCommands/Extensions.cs index f8e3a48b26..af74146459 100644 --- a/OpenRA.Mods.Common/UtilityCommands/Extensions.cs +++ b/OpenRA.Mods.Common/UtilityCommands/Extensions.cs @@ -9,6 +9,8 @@ */ #endregion +using System; +using System.Collections.Generic; using System.Data; using System.Text; @@ -50,5 +52,15 @@ namespace OpenRA.Mods.Common.UtilityCommands return result.ToString(); } + + public static IEnumerable DistinctBy(this IEnumerable source, Func keySelector) + { + var knownKeys = new HashSet(); + foreach (TSource element in source) + { + if (knownKeys.Add(keySelector(element))) + yield return element; + } + } } } \ No newline at end of file diff --git a/OpenRA.Mods.Common/UtilityCommands/ImportLegacyMapCommand.cs b/OpenRA.Mods.Common/UtilityCommands/ImportLegacyMapCommand.cs index 87bb41bf72..322b5ed2a6 100644 --- a/OpenRA.Mods.Common/UtilityCommands/ImportLegacyMapCommand.cs +++ b/OpenRA.Mods.Common/UtilityCommands/ImportLegacyMapCommand.cs @@ -255,8 +255,8 @@ namespace OpenRA.Mods.Common.UtilityCommands .Select(kv => Pair.New(Exts.ParseIntegerInvariant(kv.Key), LocationFromMapOffset(Exts.ParseIntegerInvariant(kv.Value), MapSize))); - // Add waypoint actors - foreach (var kv in wps) + // Add waypoint actors skipping duplicate entries + foreach (var kv in wps.DistinctBy(location => location.Second)) { if (!singlePlayer && kv.First <= 7) {