From 33b916a713334c48ce2006273085f058d217a452 Mon Sep 17 00:00:00 2001 From: Oliver Brakmann Date: Mon, 7 Jul 2014 19:08:25 +0200 Subject: [PATCH] Fix RepairBuilding not working for AI and Lua scripts Fixes #5861 --- OpenRA.Mods.RA/AI/HackyAI.cs | 6 ++++-- OpenRA.Mods.RA/Buildings/RepairableBuilding.cs | 3 ++- mods/common/lua/actor.lua | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) 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