diff --git a/OpenRA.Mods.RA/Activities/CaptureBuilding.cs b/OpenRA.Mods.RA/Activities/CaptureBuilding.cs index 5884b3b1e2..088459b93c 100644 --- a/OpenRA.Mods.RA/Activities/CaptureBuilding.cs +++ b/OpenRA.Mods.RA/Activities/CaptureBuilding.cs @@ -23,25 +23,17 @@ namespace OpenRA.Mods.RA.Activities public IActivity Tick(Actor self) { if (target == null || target.IsDead) return NextActivity; - var damage = self.Info.Traits.Get().EngineerDamage; - if (target.Health - damage <= 0) + target.World.AddFrameEndTask(w => { - target.World.AddFrameEndTask(w => - { - // momentarily remove from world so the ownership queries don't get confused - w.Remove(target); - target.Owner = self.Owner; - w.Add(target); - - foreach (var t in target.traits.WithInterface()) - t.OnCapture(target, self); - }); - - target.InflictDamage(self, target.Health - damage, null); - } - else - target.InflictDamage(self, damage, null); + // momentarily remove from world so the ownership queries don't get confused + w.Remove(target); + target.Owner = self.Owner; + w.Add(target); + + foreach (var t in target.traits.WithInterface()) + t.OnCapture(target, self); + }); // the engineer is sacrificed. self.World.AddFrameEndTask(w => w.Remove(self)); diff --git a/OpenRA.Mods.RA/EngineerCapture.cs b/OpenRA.Mods.RA/EngineerCapture.cs index 32a6437caa..947726219a 100644 --- a/OpenRA.Mods.RA/EngineerCapture.cs +++ b/OpenRA.Mods.RA/EngineerCapture.cs @@ -9,43 +9,44 @@ #endregion using OpenRA.Mods.RA.Activities; +using OpenRA.Effects; using OpenRA.Traits; using OpenRA.Traits.Activities; namespace OpenRA.Mods.RA { - class EngineerCaptureInfo : TraitInfo + class EngineerCaptureInfo : TraitInfo {} + class EngineerCapture : IIssueOrder, IResolveOrder, IOrderCursor, IOrderVoice { - public readonly int EngineerDamage = 300; - } - - class EngineerCapture : IIssueOrder, IResolveOrder, IOrderCursor - { - public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor) { if (mi.Button != MouseButton.Right) return null; if (underCursor == null) return null; if (self.Owner.Stances[underCursor.Owner] != Stance.Enemy) return null; if (!underCursor.traits.Contains()) return null; - var isCapture = underCursor.Health <= self.Info.Traits.Get().EngineerDamage; - return new Order(isCapture ? "Capture" : "Infiltrate", - self, underCursor); + return new Order("CaptureBuilding", self, underCursor); } public string CursorForOrder(Actor self, Order order) { - return (order.OrderString == "Infiltrate") ? "enter" : - (order.OrderString == "Capture") ? "capture" : null; + return (order.OrderString == "CaptureBuilding") ? "capture" : null; + } + + public string VoicePhraseForOrder(Actor self, Order order) + { + return (order.OrderString == "CaptureBuilding") ? "Attack" : null; } public void ResolveOrder(Actor self, Order order) { - if (order.OrderString == "Infiltrate" || order.OrderString == "Capture") + if (order.OrderString == "CaptureBuilding") { + if (self.Owner == self.World.LocalPlayer) + self.World.AddFrameEndTask(w => w.Add(new FlashTarget(order.TargetActor))); + self.CancelActivity(); - self.QueueActivity(new Move(order.TargetActor, 1)); + self.QueueActivity(new Move(order.TargetActor.Location, order.TargetActor)); self.QueueActivity(new CaptureBuilding(order.TargetActor)); } } diff --git a/mods/cnc/infantry.yaml b/mods/cnc/infantry.yaml index 88c2ee01f7..1ea2f0c777 100644 --- a/mods/cnc/infantry.yaml +++ b/mods/cnc/infantry.yaml @@ -125,7 +125,6 @@ E6: ColorOfCargoPip: Yellow EngineerRepair: EngineerCapture: - EngineerDamage: 9999999 -AutoTarget: RMBO: