Prevent mod code from changing Actor.Owner directly.

This commit is contained in:
Paul Chote
2016-10-23 12:21:03 +01:00
parent 8d688ab5f3
commit 635fc9e1e2
4 changed files with 8 additions and 3 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

@@ -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)