From 1e23c0a7b7bd08ca25a51637a3b442d36070beb2 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Thu, 20 Jun 2019 16:48:34 +0000 Subject: [PATCH] Fix bot PlaceBuilding orders. --- OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs | 7 +++++-- OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs | 6 +++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs b/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs index c857b96263..5a9ae4b591 100644 --- a/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs +++ b/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs @@ -201,8 +201,11 @@ namespace OpenRA.Mods.Common.Orders // Building to place TargetString = variants[0].ActorInfo.Name, - // Pack the actor to associate the placement with and the alternate actor flag together - ExtraLocation = new CPos((int)queue.Actor.ActorID, variant), + // Actor ID to associate with placement may be quite large, so it gets its own uint + ExtraData = queue.Actor.ActorID, + + // Actor variant will always be small enough to safely pack in a CPos + ExtraLocation = new CPos(variant, 0), SuppressVisualFeedback = true }; diff --git a/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs b/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs index 412aa1e627..2b67a0f9fe 100644 --- a/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs +++ b/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs @@ -59,7 +59,7 @@ namespace OpenRA.Mods.Common.Traits self.World.AddFrameEndTask(w => { var prevItems = GetNumBuildables(self.Owner); - var targetActor = w.GetActorById((uint)order.ExtraLocation.X); + var targetActor = w.GetActorById(order.ExtraData); var targetLocation = w.Map.CellContaining(order.Target.CenterPosition); if (targetActor == null || targetActor.IsDead) @@ -79,11 +79,11 @@ namespace OpenRA.Mods.Common.Traits return; // Override with the alternate actor - if (order.ExtraLocation.Y > 0) + if (order.ExtraLocation.X > 0) { var variant = actorInfo.TraitInfos() .SelectMany(p => p.Actors) - .Skip(order.ExtraLocation.Y - 1) + .Skip(order.ExtraLocation.X - 1) .FirstOrDefault(); if (variant != null)