Merge pull request #12292 from pchote/fix-cargo-capture

Prevent mod-code from manpulating actor owners directly.
This commit is contained in:
abcdefg30
2016-10-23 18:06:51 +02:00
committed by GitHub
5 changed files with 10 additions and 8 deletions

View File

@@ -38,7 +38,7 @@ namespace OpenRA
public readonly uint ActorID;
public Player Owner { get; set; }
public Player Owner { get; internal set; }
public bool IsInWorld { get; internal set; }
public bool Disposed { get; private set; }

View File

@@ -240,6 +240,11 @@ namespace OpenRA
rc.Metadata = new ReplayMetadata(gameInfo);
}
public void SetWorldOwner(Player p)
{
WorldActor.Owner = p;
}
public Actor CreateActor(string name, TypeDictionary initDict)
{
return CreateActor(true, name, initDict);

View File

@@ -382,11 +382,8 @@ namespace OpenRA.Mods.Common.Traits
if (cargo == null)
return;
self.World.AddFrameEndTask(w =>
{
foreach (var p in Passengers)
p.Owner = newOwner;
});
p.ChangeOwner(newOwner);
}
void INotifyAddedToWorld.AddedToWorld(Actor self)

View File

@@ -32,7 +32,7 @@ namespace OpenRA.Mods.Common.Traits
var player = new Player(w, null, kv.Value);
worldPlayers.Add(player);
if (kv.Value.OwnsWorld)
w.WorldActor.Owner = player;
w.SetWorldOwner(player);
}
Player localPlayer = null;

View File

@@ -53,7 +53,7 @@ namespace OpenRA.Mods.Common.Traits
Players = new MapPlayers(w.Map.PlayerDefinitions);
var worldOwner = Players.Players.Select(kvp => kvp.Value).First(p => !p.Playable && p.OwnsWorld);
w.WorldActor.Owner = new Player(w, null, worldOwner);
w.SetWorldOwner(new Player(w, null, worldOwner));
}
public void WorldLoaded(World world, WorldRenderer wr)