Ignore nonexistent actors in D2k importer code instead of crashing.

This commit is contained in:
Mustafa Alperen Seki
2022-06-24 21:22:26 +01:00
committed by Paul Chote
parent 6083eb4ac8
commit c15af9f68a

View File

@@ -371,34 +371,36 @@ namespace OpenRA.Mods.D2k.UtilityCommands
{ {
var kvp = ActorDataByActorCode[tileSpecialInfo]; var kvp = ActorDataByActorCode[tileSpecialInfo];
if (!rules.Actors.ContainsKey(kvp.Actor.ToLowerInvariant())) if (!rules.Actors.ContainsKey(kvp.Actor.ToLowerInvariant()))
throw new InvalidOperationException($"Actor with name {kvp.Actor} could not be found in the rules YAML file!"); Console.WriteLine($"Ignoring unknown actor type: `{kvp.Actor.ToLowerInvariant()}`");
else
var a = new ActorReference(kvp.Actor)
{ {
new LocationInit(locationOnMap), var a = new ActorReference(kvp.Actor)
new OwnerInit(kvp.Owner)
};
map.ActorDefinitions.Add(new MiniYamlNode("Actor" + map.ActorDefinitions.Count, a.Save()));
if (map.PlayerDefinitions.All(x => x.Value.Nodes.Single(y => y.Key == "Name").Value.Value != kvp.Owner))
{
var playerInfo = PlayerReferenceDataByPlayerName[kvp.Owner];
var playerReference = new PlayerReference
{ {
Name = kvp.Owner, new LocationInit(locationOnMap),
OwnsWorld = kvp.Owner == "Neutral", new OwnerInit(kvp.Owner)
NonCombatant = kvp.Owner == "Neutral",
Faction = playerInfo.Faction,
Color = playerInfo.Color
}; };
var node = new MiniYamlNode($"{nameof(PlayerReference)}@{kvp.Owner}", FieldSaver.SaveDifferences(playerReference, new PlayerReference())); map.ActorDefinitions.Add(new MiniYamlNode("Actor" + map.ActorDefinitions.Count, a.Save()));
map.PlayerDefinitions.Add(node);
}
if (kvp.Actor == "mpspawn") if (map.PlayerDefinitions.All(x => x.Value.Nodes.Single(y => y.Key == "Name").Value.Value != kvp.Owner))
playerCount++; {
var playerInfo = PlayerReferenceDataByPlayerName[kvp.Owner];
var playerReference = new PlayerReference
{
Name = kvp.Owner,
OwnsWorld = kvp.Owner == "Neutral",
NonCombatant = kvp.Owner == "Neutral",
Faction = playerInfo.Faction,
Color = playerInfo.Color
};
var node = new MiniYamlNode($"{nameof(PlayerReference)}@{kvp.Owner}", FieldSaver.SaveDifferences(playerReference, new PlayerReference()));
map.PlayerDefinitions.Add(node);
}
if (kvp.Actor == "mpspawn")
playerCount++;
}
} }
} }
} }