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 readonly uint ActorID;
public Player Owner { get; set; } public Player Owner { get; internal set; }
public bool IsInWorld { get; internal set; } public bool IsInWorld { get; internal set; }
public bool Disposed { get; private set; } public bool Disposed { get; private set; }

View File

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

View File

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

View File

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

View File

@@ -53,7 +53,7 @@ namespace OpenRA.Mods.Common.Traits
Players = new MapPlayers(w.Map.PlayerDefinitions); Players = new MapPlayers(w.Map.PlayerDefinitions);
var worldOwner = Players.Players.Select(kvp => kvp.Value).First(p => !p.Playable && p.OwnsWorld); 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) public void WorldLoaded(World world, WorldRenderer wr)