From b72d4ab7c6a82a0c45fa55d3146e24fff626bdb0 Mon Sep 17 00:00:00 2001 From: Gustas <37534529+PunkPun@users.noreply.github.com> Date: Sun, 15 Sep 2024 00:04:24 +0300 Subject: [PATCH] Fix clients acquiring hosts on order creations --- OpenRA.Mods.Common/Activities/MoveToDock.cs | 23 ++++++++++++++++++- .../Traits/DockClientManager.cs | 15 +++++------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/OpenRA.Mods.Common/Activities/MoveToDock.cs b/OpenRA.Mods.Common/Activities/MoveToDock.cs index db7b684502..ecbe8e402a 100644 --- a/OpenRA.Mods.Common/Activities/MoveToDock.cs +++ b/OpenRA.Mods.Common/Activities/MoveToDock.cs @@ -24,16 +24,37 @@ namespace OpenRA.Mods.Common.Activities IDockHost dockHost; readonly INotifyDockClientMoving[] notifyDockClientMoving; readonly MoveCooldownHelper moveCooldownHelper; + readonly bool forceEnter; + readonly bool ignoreOccupancy; - public MoveToDock(Actor self, Actor dockHostActor = null, IDockHost dockHost = null) + public MoveToDock(Actor self, Actor dockHostActor = null, IDockHost dockHost = null, + bool forceEnter = false, bool ignoreOccupancy = false) { dockClient = self.Trait(); this.dockHostActor = dockHostActor; this.dockHost = dockHost; + this.forceEnter = forceEnter; + this.ignoreOccupancy = ignoreOccupancy; notifyDockClientMoving = self.TraitsImplementing().ToArray(); moveCooldownHelper = new MoveCooldownHelper(self.World, self.Trait() as Mobile) { RetryIfDestinationBlocked = true }; } + protected override void OnFirstRun(Actor self) + { + if (IsCanceling || dockClient.IsTraitDisabled) + return; + + // We were ordered to dock to an actor but host was unspecified. + if (dockHostActor != null && dockHost == null) + { + var link = dockClient.AvailableDockHosts(dockHostActor, default, forceEnter, ignoreOccupancy) + .ClosestDock(self, dockClient); + + if (link.HasValue) + dockHost = link.Value.Trait; + } + } + public override bool Tick(Actor self) { if (IsCanceling) diff --git a/OpenRA.Mods.Common/Traits/DockClientManager.cs b/OpenRA.Mods.Common/Traits/DockClientManager.cs index 7db9f94f02..01c316d09a 100644 --- a/OpenRA.Mods.Common/Traits/DockClientManager.cs +++ b/OpenRA.Mods.Common/Traits/DockClientManager.cs @@ -177,16 +177,13 @@ namespace OpenRA.Mods.Common.Traits if (target.Type != TargetType.Actor) return; - if (IsTraitDisabled) - return; + self.QueueActivity(order.Queued, new MoveToDock( + self, + target.Actor, + null, + order.OrderString == "ForceDock", + true)); - var dock = AvailableDockHosts(target.Actor, default, order.OrderString == "ForceDock", true) - .ClosestDock(self, this); - - if (!dock.HasValue) - return; - - self.QueueActivity(order.Queued, new MoveToDock(self, dock.Value.Actor, dock.Value.Trait)); self.ShowTargetLines(); } }