From 33971c06a68f5ad285e5ec30687f8b0084f472e5 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Wed, 16 Jun 2010 22:42:22 +1200 Subject: [PATCH] fix crash in Activities.Repair --- OpenRA.Mods.RA/Activities/LayMines.cs | 2 +- OpenRA.Mods.RA/Activities/Repair.cs | 16 ++++++++-------- OpenRA.Mods.RA/Helicopter.cs | 2 +- OpenRA.Mods.RA/Plane.cs | 2 +- OpenRA.Mods.RA/Repairable.cs | 2 +- OpenRA.Mods.RA/RepairableNear.cs | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/OpenRA.Mods.RA/Activities/LayMines.cs b/OpenRA.Mods.RA/Activities/LayMines.cs index cdff03ed64..3ac573caf0 100644 --- a/OpenRA.Mods.RA/Activities/LayMines.cs +++ b/OpenRA.Mods.RA/Activities/LayMines.cs @@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA.Activities return new Wait(20); return new Move(((1 / 24f) * rearmTarget.CenterLocation).ToInt2(), rearmTarget) - { NextActivity = new Rearm() { NextActivity = new Repair() { NextActivity = this } } }; + { NextActivity = new Rearm() { NextActivity = new Repair(rearmTarget) { NextActivity = this } } }; } var ml = self.traits.Get(); diff --git a/OpenRA.Mods.RA/Activities/Repair.cs b/OpenRA.Mods.RA/Activities/Repair.cs index 7e1b1f7a58..51316c7dae 100644 --- a/OpenRA.Mods.RA/Activities/Repair.cs +++ b/OpenRA.Mods.RA/Activities/Repair.cs @@ -29,20 +29,20 @@ namespace OpenRA.Mods.RA.Activities public IActivity NextActivity { get; set; } bool isCanceled; int remainingTicks; + Actor host; + + public Repair(Actor host) { this.host = host; } public IActivity Tick(Actor self) { if (isCanceled) return NextActivity; if (remainingTicks == 0) { - var hostBuilding = self.World.FindUnits(self.CenterLocation, self.CenterLocation) - .FirstOrDefault(a => a.traits.Contains()); - var unitCost = self.Info.Traits.Get().Cost; var hp = self.Info.Traits.Get().HP; - var costPerHp = (hostBuilding.Info.Traits.Get().URepairPercent * unitCost) / hp; - var hpToRepair = Math.Min(hostBuilding.Info.Traits.Get().URepairStep, hp - self.Health); + var costPerHp = (host.Info.Traits.Get().URepairPercent * unitCost) / hp; + var hpToRepair = Math.Min(host.Info.Traits.Get().URepairStep, hp - self.Health); var cost = (int)Math.Ceiling(costPerHp * hpToRepair); if (!self.Owner.PlayerActor.traits.Get().TakeCash(cost)) { @@ -54,9 +54,9 @@ namespace OpenRA.Mods.RA.Activities if (self.Health == hp) return NextActivity; - if (hostBuilding != null) - hostBuilding.traits.Get() - .PlayCustomAnim(hostBuilding, "active"); + if (host != null) + host.traits.Get() + .PlayCustomAnim(host, "active"); remainingTicks = (int)(self.World.Defaults.RepairRate * 60 * 25); } diff --git a/OpenRA.Mods.RA/Helicopter.cs b/OpenRA.Mods.RA/Helicopter.cs index a6160413f8..82fdcf1f54 100644 --- a/OpenRA.Mods.RA/Helicopter.cs +++ b/OpenRA.Mods.RA/Helicopter.cs @@ -103,7 +103,7 @@ namespace OpenRA.Mods.RA self.QueueActivity(new Turn(self.Info.Traits.GetOrDefault().InitialFacing)); self.QueueActivity(new HeliLand(false)); self.QueueActivity(self.Info.Traits.Get().RearmBuildings.Contains(order.TargetActor.Info.Name) - ? (IActivity)new Rearm() : new Repair()); + ? (IActivity)new Rearm() : new Repair(order.TargetActor)); } } diff --git a/OpenRA.Mods.RA/Plane.cs b/OpenRA.Mods.RA/Plane.cs index 5c5d3d30cc..379bd9a470 100644 --- a/OpenRA.Mods.RA/Plane.cs +++ b/OpenRA.Mods.RA/Plane.cs @@ -91,7 +91,7 @@ namespace OpenRA.Mods.RA self.QueueActivity(new ReturnToBase(self, order.TargetActor)); self.QueueActivity( info.RearmBuildings.Contains(order.TargetActor.Info.Name) - ? (IActivity)new Rearm() : new Repair()); + ? (IActivity)new Rearm() : new Repair(order.TargetActor)); } } diff --git a/OpenRA.Mods.RA/Repairable.cs b/OpenRA.Mods.RA/Repairable.cs index 1b7a08fe6c..5baedce4aa 100644 --- a/OpenRA.Mods.RA/Repairable.cs +++ b/OpenRA.Mods.RA/Repairable.cs @@ -51,7 +51,7 @@ namespace OpenRA.Mods.RA self.CancelActivity(); self.QueueActivity(new Move(((1 / 24f) * order.TargetActor.CenterLocation).ToInt2(), order.TargetActor)); self.QueueActivity(new Rearm()); - self.QueueActivity(new Repair()); + self.QueueActivity(new Repair(order.TargetActor)); if (rp != null) self.QueueActivity(new CallFunc( diff --git a/OpenRA.Mods.RA/RepairableNear.cs b/OpenRA.Mods.RA/RepairableNear.cs index 6236fa8f5d..64a099345d 100644 --- a/OpenRA.Mods.RA/RepairableNear.cs +++ b/OpenRA.Mods.RA/RepairableNear.cs @@ -51,7 +51,7 @@ namespace OpenRA.Mods.RA { self.CancelActivity(); self.QueueActivity(new Move(order.TargetActor, 1)); - self.QueueActivity(new Repair()); + self.QueueActivity(new Repair(order.TargetActor)); } } }