Ignore nonexistent actors in D2k importer code instead of crashing.
This commit is contained in:
committed by
Paul Chote
parent
6083eb4ac8
commit
c15af9f68a
@@ -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++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user