diff --git a/OpenRA.Game/Traits/Repairable.cs b/OpenRA.Game/Traits/Repairable.cs index aaaa78a18f..ea13e56b58 100644 --- a/OpenRA.Game/Traits/Repairable.cs +++ b/OpenRA.Game/Traits/Repairable.cs @@ -32,7 +32,6 @@ namespace OpenRA.Traits class Repairable : IIssueOrder, IResolveOrder { - IDisposable reservation; public Repairable(Actor self) { } public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor) @@ -41,8 +40,7 @@ namespace OpenRA.Traits if (underCursor == null) return null; if (self.Info.Traits.Get().RepairBuildings.Contains(underCursor.Info.Name) - && underCursor.Owner == self.Owner - && !Reservable.IsReserved(underCursor)) + && underCursor.Owner == self.Owner) return new Order("Enter", self, underCursor); return null; @@ -50,24 +48,21 @@ namespace OpenRA.Traits public void ResolveOrder(Actor self, Order order) { - if (reservation != null) - { - reservation.Dispose(); - reservation = null; - } if (order.OrderString == "Enter") { - if (Reservable.IsReserved(order.TargetActor)) - return; var res = order.TargetActor.traits.GetOrDefault(); - if (res != null) reservation = res.Reserve(self); + var wp = order.TargetActor.traits.GetOrDefault().rallyPoint; self.CancelActivity(); self.QueueActivity(new Move(((1 / 24f) * order.TargetActor.CenterLocation).ToInt2(), order.TargetActor)); self.QueueActivity(new Rearm()); self.QueueActivity(new Repair()); + if (order.TargetActor.traits.Contains()) + self.QueueActivity(new CallFunc( + () => self.QueueActivity(new Move(order.TargetActor.traits.Get().rallyPoint, + order.TargetActor)))); } } } diff --git a/mods/ra/structures.yaml b/mods/ra/structures.yaml index b10e751b5d..e350927316 100644 --- a/mods/ra/structures.yaml +++ b/mods/ra/structures.yaml @@ -717,6 +717,7 @@ FIX: Sight: 5 BelowUnits: Reservable: + RallyPoint: IronCurtainable: RepairsUnits: