From f2492f41554284ca4c95a6ddb713be4225f2e2b7 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Tue, 7 Oct 2014 18:19:55 +1300 Subject: [PATCH] LevelUpCrateAction: fix loop variable in closure bug This was a real bug -- if there were multiple recipients, we'd apply the levels N times to the last recipient rather than once to each. --- OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs b/OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs index 50d03a2e74..5212e408d2 100644 --- a/OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs +++ b/OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs @@ -68,9 +68,10 @@ namespace OpenRA.Mods.RA foreach (var actor in inRange.Append(collector)) { - actor.World.AddFrameEndTask(w => + var recipient = actor; // loop variable in closure hazard + recipient.World.AddFrameEndTask(w => { - var gainsExperience = actor.TraitOrDefault(); + var gainsExperience = recipient.TraitOrDefault(); if (gainsExperience != null) gainsExperience.GiveLevels(((LevelUpCrateActionInfo)info).Levels); });