fixes bug in prev.

This commit is contained in:
Bob
2010-01-20 14:25:51 +13:00
parent 645760a60b
commit 6d6a435b2d
2 changed files with 27 additions and 6 deletions

View File

@@ -86,7 +86,11 @@ namespace OpenRa
if (r.ReadBoolean())
targetString = r.ReadString();
return new Order( order, ActorFromUInt( subjectId ), ActorFromUInt( targetActorId ), targetLocation, targetString);
Actor subject, targetActor;
if( !TryGetActorFromUInt( subjectId, out subject ) || !TryGetActorFromUInt( targetActorId, out targetActor ) )
return null;
return new Order( order, subject, targetActor, targetLocation, targetString);
}
case 0xfe:
@@ -109,10 +113,23 @@ namespace OpenRa
return a.ActorID;
}
static Actor ActorFromUInt(uint aID)
static bool TryGetActorFromUInt(uint aID, out Actor ret )
{
if (aID == 0xFFFFFFFF) return null;
return Game.world.Actors.SingleOrDefault(x => x.ActorID == aID);
if( aID == 0xFFFFFFFF )
{
ret = null;
return true;
}
else
{
foreach( var a in Game.world.Actors.Where( x => x.ActorID == aID ) )
{
ret = a;
return true;
}
ret = null;
return false;
}
}
// Named constructors for Orders.

View File

@@ -27,8 +27,12 @@ namespace OpenRa.Orders
var ms = new MemoryStream(bytes);
var reader = new BinaryReader(ms);
var ret = new List<Order>();
while (ms.Position < ms.Length)
ret.Add(Order.Deserialize(reader));
while( ms.Position < ms.Length )
{
var o = Order.Deserialize( reader );
if( o != null )
ret.Add( o );
}
return ret;
}
}