From 3d7e49655d0028136ab8ab74852a41bfcd7b280a Mon Sep 17 00:00:00 2001 From: Taryn Hill Date: Sun, 27 Sep 2015 08:25:09 -0500 Subject: [PATCH] Fix NullReferenceException in HackyAI.BuildUnit HackyAIInfo grew a UnitLimits Dictionary that was not null-checked. Also null-check UnitsToBuild. --- OpenRA.Mods.Common/AI/HackyAI.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/OpenRA.Mods.Common/AI/HackyAI.cs b/OpenRA.Mods.Common/AI/HackyAI.cs index 7d06ecf5b2..b099ca6b62 100644 --- a/OpenRA.Mods.Common/AI/HackyAI.cs +++ b/OpenRA.Mods.Common/AI/HackyAI.cs @@ -1036,12 +1036,20 @@ namespace OpenRA.Mods.Common.AI ChooseRandomUnitToBuild(queue) : ChooseUnitToBuild(queue); - if (unit != null - && Info.UnitsToBuild.ContainsKey(unit.Name) - && (!Info.UnitLimits.ContainsKey(unit.Name) - || World.Actors.Count(a => a.Info.Name == unit.Name && a.Owner == Player) < Info.UnitLimits[unit.Name])) + if (unit == null) + return; - QueueOrder(Order.StartProduction(queue.Actor, unit.Name, 1)); + var name = unit.Name; + + if (Info.UnitsToBuild != null && !Info.UnitsToBuild.ContainsKey(name)) + return; + + if (Info.UnitLimits != null && + Info.UnitLimits.ContainsKey(name) && + World.Actors.Count(a => a.Owner == Player && a.Info.Name == name) >= Info.UnitLimits[name]) + return; + + QueueOrder(Order.StartProduction(queue.Actor, name, 1)); } void BuildUnit(string category, string name)