Merge pull request #12292 from pchote/fix-cargo-capture
Prevent mod-code from manpulating actor owners directly.
This commit is contained in:
@@ -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; }
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user