From 2ac855488ba8cc3a0ef7f7f00635d19c39641f2d Mon Sep 17 00:00:00 2001 From: RoosterDragon Date: Thu, 20 Jul 2023 18:36:40 +0100 Subject: [PATCH] Validate order targets when resolving orders. --- OpenRA.Mods.Common/Traits/Air/Aircraft.cs | 6 ++++++ OpenRA.Mods.Common/Traits/AttackMove.cs | 3 +++ OpenRA.Mods.Common/Traits/Buildings/RallyPoint.cs | 3 +++ .../Traits/Buildings/TransformsIntoAircraft.cs | 3 +++ OpenRA.Mods.Common/Traits/Buildings/TransformsIntoMobile.cs | 3 +++ OpenRA.Mods.Common/Traits/Carryall.cs | 3 +++ OpenRA.Mods.Common/Traits/Minelayer.cs | 3 +++ OpenRA.Mods.Common/Traits/Mobile.cs | 3 +++ 8 files changed, 27 insertions(+) diff --git a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs index 780d08dda8..5d13d93dc9 100644 --- a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs +++ b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs @@ -1065,6 +1065,9 @@ namespace OpenRA.Mods.Common.Traits var orderString = order.OrderString; if (orderString == "Move") { + if (!order.Target.IsValidFor(self)) + return; + var cell = self.World.Map.Clamp(self.World.Map.CellContaining(order.Target.CenterPosition)); if (!Info.MoveIntoShroud && !self.Owner.Shroud.IsExplored(cell)) return; @@ -1080,6 +1083,9 @@ namespace OpenRA.Mods.Common.Traits } else if (orderString == "Land") { + if (!order.Target.IsValidFor(self)) + return; + var cell = self.World.Map.Clamp(self.World.Map.CellContaining(order.Target.CenterPosition)); if (!Info.MoveIntoShroud && !self.Owner.Shroud.IsExplored(cell)) return; diff --git a/OpenRA.Mods.Common/Traits/AttackMove.cs b/OpenRA.Mods.Common/Traits/AttackMove.cs index cfac34de50..8088170e99 100644 --- a/OpenRA.Mods.Common/Traits/AttackMove.cs +++ b/OpenRA.Mods.Common/Traits/AttackMove.cs @@ -83,6 +83,9 @@ namespace OpenRA.Mods.Common.Traits { if (order.OrderString == "AttackMove" || order.OrderString == "AssaultMove") { + if (!order.Target.IsValidFor(self)) + return; + var cell = self.World.Map.Clamp(self.World.Map.CellContaining(order.Target.CenterPosition)); if (!Info.MoveIntoShroud && !self.Owner.Shroud.IsExplored(cell)) return; diff --git a/OpenRA.Mods.Common/Traits/Buildings/RallyPoint.cs b/OpenRA.Mods.Common/Traits/Buildings/RallyPoint.cs index 2d41cce552..1a8dd6f5a4 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/RallyPoint.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/RallyPoint.cs @@ -128,6 +128,9 @@ namespace OpenRA.Mods.Common.Traits if (order.OrderString != OrderID) return; + if (!order.Target.IsValidFor(self)) + return; + if (!order.Queued) Path.Clear(); diff --git a/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoAircraft.cs b/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoAircraft.cs index 77ccc847b3..031e37808d 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoAircraft.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoAircraft.cs @@ -121,6 +121,9 @@ namespace OpenRA.Mods.Common.Traits if (order.OrderString == "Move") { + if (!order.Target.IsValidFor(self)) + return; + var cell = self.World.Map.Clamp(self.World.Map.CellContaining(order.Target.CenterPosition)); if (!Info.MoveIntoShroud && !self.Owner.Shroud.IsExplored(cell)) return; diff --git a/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoMobile.cs b/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoMobile.cs index 8599e0950f..7979a76dc5 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoMobile.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoMobile.cs @@ -112,6 +112,9 @@ namespace OpenRA.Mods.Common.Traits if (order.OrderString == "Move") { + if (!order.Target.IsValidFor(self)) + return; + var cell = self.World.Map.Clamp(this.self.World.Map.CellContaining(order.Target.CenterPosition)); if (!Info.LocomotorInfo.MoveIntoShroud && !self.Owner.Shroud.IsExplored(cell)) return; diff --git a/OpenRA.Mods.Common/Traits/Carryall.cs b/OpenRA.Mods.Common/Traits/Carryall.cs index e2b228f62d..bf40c67e9f 100644 --- a/OpenRA.Mods.Common/Traits/Carryall.cs +++ b/OpenRA.Mods.Common/Traits/Carryall.cs @@ -348,6 +348,9 @@ namespace OpenRA.Mods.Common.Traits { if (order.OrderString == "DeliverUnit") { + if (!order.Target.IsValidFor(self)) + return; + var cell = self.World.Map.Clamp(self.World.Map.CellContaining(order.Target.CenterPosition)); if (!aircraftInfo.MoveIntoShroud && !self.Owner.Shroud.IsExplored(cell)) return; diff --git a/OpenRA.Mods.Common/Traits/Minelayer.cs b/OpenRA.Mods.Common/Traits/Minelayer.cs index e4f5287ac8..324e10d8b8 100644 --- a/OpenRA.Mods.Common/Traits/Minelayer.cs +++ b/OpenRA.Mods.Common/Traits/Minelayer.cs @@ -143,6 +143,9 @@ namespace OpenRA.Mods.Common.Traits if (order.OrderString != "BeginMinefield" && order.OrderString != "PlaceMinefield" && order.OrderString != "PlaceMine") return; + if (!order.Target.IsValidFor(self)) + return; + var cell = self.World.Map.CellContaining(order.Target.CenterPosition); if (order.OrderString == "BeginMinefield") minefieldStart = cell; diff --git a/OpenRA.Mods.Common/Traits/Mobile.cs b/OpenRA.Mods.Common/Traits/Mobile.cs index 94cf8e5af8..abbc81fe4d 100644 --- a/OpenRA.Mods.Common/Traits/Mobile.cs +++ b/OpenRA.Mods.Common/Traits/Mobile.cs @@ -922,6 +922,9 @@ namespace OpenRA.Mods.Common.Traits if (order.OrderString == "Move") { + if (!order.Target.IsValidFor(self)) + return; + var cell = self.World.Map.Clamp(this.self.World.Map.CellContaining(order.Target.CenterPosition)); if (!Info.LocomotorInfo.MoveIntoShroud && !self.Owner.Shroud.IsExplored(cell)) return;