From 8d688ab5f36e65b2c35ece9d126c75fcf4a3e2d9 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 23 Oct 2016 12:20:25 +0100 Subject: [PATCH 1/2] Use ChangeOwner on captured cargo. --- OpenRA.Mods.Common/Traits/Cargo.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Cargo.cs b/OpenRA.Mods.Common/Traits/Cargo.cs index 29dc1c135c..fab07541e9 100644 --- a/OpenRA.Mods.Common/Traits/Cargo.cs +++ b/OpenRA.Mods.Common/Traits/Cargo.cs @@ -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; - }); + foreach (var p in Passengers) + p.ChangeOwner(newOwner); } public void AddedToWorld(Actor self) From 635fc9e1e2db17b87ab5dd1929578db1ef50abf4 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 23 Oct 2016 12:21:03 +0100 Subject: [PATCH 2/2] Prevent mod code from changing Actor.Owner directly. --- OpenRA.Game/Actor.cs | 2 +- OpenRA.Game/World.cs | 5 +++++ OpenRA.Mods.Common/Traits/World/CreateMPPlayers.cs | 2 +- OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/OpenRA.Game/Actor.cs b/OpenRA.Game/Actor.cs index 26f53aac3a..ef5a6e6d7f 100644 --- a/OpenRA.Game/Actor.cs +++ b/OpenRA.Game/Actor.cs @@ -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; } diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index e83c9d4027..f9608dfd77 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -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); diff --git a/OpenRA.Mods.Common/Traits/World/CreateMPPlayers.cs b/OpenRA.Mods.Common/Traits/World/CreateMPPlayers.cs index 5842aa14ba..0150892904 100644 --- a/OpenRA.Mods.Common/Traits/World/CreateMPPlayers.cs +++ b/OpenRA.Mods.Common/Traits/World/CreateMPPlayers.cs @@ -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; diff --git a/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs b/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs index 563ae72598..63ec4dad20 100644 --- a/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs +++ b/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs @@ -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)