diff --git a/OpenRA.Game/Traits/World/ActorMap.cs b/OpenRA.Game/Traits/World/ActorMap.cs index 022f9341d0..7bb3911ecf 100644 --- a/OpenRA.Game/Traits/World/ActorMap.cs +++ b/OpenRA.Game/Traits/World/ActorMap.cs @@ -154,13 +154,17 @@ namespace OpenRA.Traits public void AddInfluence(Actor self, IOccupySpace ios) { foreach (var c in ios.OccupiedCells()) - influence[c.First] = new InfluenceNode { Next = influence[c.First], SubCell = c.Second, Actor = self }; + if (map.Contains(c.First)) + influence[c.First] = new InfluenceNode { Next = influence[c.First], SubCell = c.Second, Actor = self }; } public void RemoveInfluence(Actor self, IOccupySpace ios) { foreach (var c in ios.OccupiedCells()) { + if (!map.Contains(c.First)) + continue; + var temp = influence[c.First]; RemoveInfluenceInner(ref temp, self); influence[c.First] = temp; diff --git a/OpenRA.Mods.RA/EjectOnDeath.cs b/OpenRA.Mods.RA/EjectOnDeath.cs index 1dc3417550..f2132669be 100644 --- a/OpenRA.Mods.RA/EjectOnDeath.cs +++ b/OpenRA.Mods.RA/EjectOnDeath.cs @@ -33,7 +33,7 @@ namespace OpenRA.Mods.RA { public void Killed(Actor self, AttackInfo e) { - if (self.Owner.WinState == WinState.Lost) + if (self.Owner.WinState == WinState.Lost || !self.World.Map.Contains(self.Location)) return; var r = self.World.SharedRandom.Next(1, 100); diff --git a/OpenRA.Mods.RA/ParaDrop.cs b/OpenRA.Mods.RA/ParaDrop.cs index 1cadb153c3..80888a3c61 100644 --- a/OpenRA.Mods.RA/ParaDrop.cs +++ b/OpenRA.Mods.RA/ParaDrop.cs @@ -77,6 +77,9 @@ namespace OpenRA.Mods.RA if (droppedAt.Contains(self.Location) || checkForSuitableCell && !IsSuitableCell(cargo.Peek(self), self.Location)) return; + if (!self.World.Map.Contains(self.Location)) + return; + // unload a dude here droppedAt.Add(self.Location);