diff --git a/OpenRA.Mods.RA/AI/HackyAI.cs b/OpenRA.Mods.RA/AI/HackyAI.cs index ec1179c03e..251f25e660 100644 --- a/OpenRA.Mods.RA/AI/HackyAI.cs +++ b/OpenRA.Mods.RA/AI/HackyAI.cs @@ -851,9 +851,11 @@ namespace OpenRA.Mods.RA.AI if (!e.Attacker.HasTrait()) return; - if (Info.ShouldRepairBuildings && self.HasTrait()) + var rb = self.TraitOrDefault(); + + if (Info.ShouldRepairBuildings && rb != null) { - if (e.DamageState > DamageState.Light && e.PreviousDamageState <= DamageState.Light) + if (e.DamageState > DamageState.Light && e.PreviousDamageState <= DamageState.Light && !rb.RepairActive) { BotDebug("Bot noticed damage {0} {1}->{2}, repairing.", self, e.PreviousDamageState, e.DamageState); diff --git a/OpenRA.Mods.RA/Buildings/RepairableBuilding.cs b/OpenRA.Mods.RA/Buildings/RepairableBuilding.cs index 5ef8fd8a79..0fcfdc2c30 100755 --- a/OpenRA.Mods.RA/Buildings/RepairableBuilding.cs +++ b/OpenRA.Mods.RA/Buildings/RepairableBuilding.cs @@ -38,7 +38,7 @@ namespace OpenRA.Mods.RA.Buildings Health Health; RepairableBuildingInfo Info; - public bool RepairActive = true; + public bool RepairActive = false; public RepairableBuilding(Actor self, RepairableBuildingInfo info) { @@ -102,6 +102,7 @@ namespace OpenRA.Mods.RA.Buildings if (Health.DamageState == DamageState.Undamaged) { Repairers.Clear(); + RepairActive = false; return; } diff --git a/mods/common/lua/actor.lua b/mods/common/lua/actor.lua index 607c41d8fe..f9c208a630 100644 --- a/mods/common/lua/actor.lua +++ b/mods/common/lua/actor.lua @@ -152,7 +152,7 @@ end Actor.RepairBuilding = function(actor) local rb = Actor.TraitOrDefault(actor, "RepairableBuilding") - if rb ~= nil and rb.Repairer == nil then + if rb ~= nil and not rb.RepairActive then rb:RepairBuilding(actor, Actor.Owner(actor)) end end