add graceful handling of bogus actor types in import
This commit is contained in:
@@ -364,55 +364,66 @@ namespace OpenRA.Editor
|
|||||||
{
|
{
|
||||||
//Structures: num=owner,type,health,location,turret-facing,trigger
|
//Structures: num=owner,type,health,location,turret-facing,trigger
|
||||||
//Units: num=owner,type,health,location,facing,action,trigger
|
//Units: num=owner,type,health,location,facing,action,trigger
|
||||||
//Infantry: num=owner,type,health,location,subcell,action,facing,trigger
|
//Infantry: num=owner,type,health,location,subcell,action,facing,trigger
|
||||||
var parts = s.Value.Split(',');
|
|
||||||
var loc = int.Parse(parts[3]);
|
try
|
||||||
if (parts[0] == "")
|
{
|
||||||
parts[0] = "Neutral";
|
|
||||||
|
var parts = s.Value.Split(',');
|
||||||
|
var loc = int.Parse(parts[3]);
|
||||||
if (!Players.Contains(parts[0]))
|
if (parts[0] == "")
|
||||||
Players.Add(parts[0]);
|
parts[0] = "Neutral";
|
||||||
|
|
||||||
var stance = ActorStance.Stance.None;
|
|
||||||
switch(parts[5])
|
if (!Players.Contains(parts[0]))
|
||||||
{
|
Players.Add(parts[0]);
|
||||||
case "Area Guard":
|
|
||||||
case "Guard":
|
var stance = ActorStance.Stance.None;
|
||||||
stance = ActorStance.Stance.Guard;
|
switch (parts[5])
|
||||||
break;
|
{
|
||||||
case "Defend Base":
|
case "Area Guard":
|
||||||
stance = ActorStance.Stance.Defend;
|
case "Guard":
|
||||||
break;
|
stance = ActorStance.Stance.Guard;
|
||||||
case "Hunt":
|
break;
|
||||||
case "Rampage":
|
case "Defend Base":
|
||||||
case "Attack Base":
|
stance = ActorStance.Stance.Defend;
|
||||||
case "Attack Units":
|
break;
|
||||||
case "Attack Civil.":
|
case "Hunt":
|
||||||
case "Attack Tarcom":
|
case "Rampage":
|
||||||
stance = ActorStance.Stance.Hunt;
|
case "Attack Base":
|
||||||
break;
|
case "Attack Units":
|
||||||
case "Retreat":
|
case "Attack Civil.":
|
||||||
case "Return":
|
case "Attack Tarcom":
|
||||||
stance = ActorStance.Stance.Retreat;
|
stance = ActorStance.Stance.Hunt;
|
||||||
break;
|
break;
|
||||||
// do we care about `Harvest' and `Sticky'?
|
case "Retreat":
|
||||||
|
case "Return":
|
||||||
|
stance = ActorStance.Stance.Retreat;
|
||||||
|
break;
|
||||||
|
// do we care about `Harvest' and `Sticky'?
|
||||||
|
}
|
||||||
|
|
||||||
|
var actor = new ActorReference(parts[1].ToLowerInvariant())
|
||||||
|
{
|
||||||
|
new LocationInit(new int2(loc % MapSize, loc / MapSize)),
|
||||||
|
new OwnerInit(parts[0]),
|
||||||
|
new HealthInit(float.Parse(parts[2], NumberFormatInfo.InvariantInfo)/256),
|
||||||
|
new FacingInit((section == "INFANTRY") ? int.Parse(parts[6]) : int.Parse(parts[4])),
|
||||||
|
new ActorStanceInit(stance),
|
||||||
|
};
|
||||||
|
|
||||||
|
if (section == "INFANTRY")
|
||||||
|
actor.Add(new SubCellInit(int.Parse(parts[4])));
|
||||||
|
|
||||||
|
if (!Rules.Info.ContainsKey(parts[1].ToLowerInvariant()))
|
||||||
|
errorHandler("Ignoring unknown actor type: `{0}`".F(parts[1].ToLowerInvariant()));
|
||||||
|
else
|
||||||
|
Map.Actors.Value.Add("Actor" + ActorCount++, actor);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
errorHandler("Malformed actor definition: `{0}`".F(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
var actor = new ActorReference(parts[1].ToLowerInvariant())
|
|
||||||
{
|
|
||||||
new LocationInit(new int2(loc % MapSize, loc / MapSize)),
|
|
||||||
new OwnerInit(parts[0]),
|
|
||||||
new HealthInit(float.Parse(parts[2], NumberFormatInfo.InvariantInfo)/256),
|
|
||||||
new FacingInit((section == "INFANTRY") ? int.Parse(parts[6]) : int.Parse(parts[4])),
|
|
||||||
new ActorStanceInit(stance),
|
|
||||||
};
|
|
||||||
|
|
||||||
if (section == "INFANTRY")
|
|
||||||
actor.Add(new SubCellInit(int.Parse(parts[4])));
|
|
||||||
|
|
||||||
Map.Actors.Value.Add("Actor" + ActorCount++,actor);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user