diff --git a/OpenRA.Mods.Common/Traits/BotModules/BaseBuilderBotModule.cs b/OpenRA.Mods.Common/Traits/BotModules/BaseBuilderBotModule.cs index 32b5a685da..63eb815d25 100644 --- a/OpenRA.Mods.Common/Traits/BotModules/BaseBuilderBotModule.cs +++ b/OpenRA.Mods.Common/Traits/BotModules/BaseBuilderBotModule.cs @@ -162,6 +162,9 @@ namespace OpenRA.Mods.Common.Traits [Desc($"AI will move the only mcv when those numbers of refinery <= productions + tech - {nameof(ForceExpansionTolerate)}.")] public readonly ImmutableArray ForceExpansionTolerate = [2, 3]; + [Desc("Decrease the expansion tolerate by Cash / this. Used to prevent AI from expanding when it has enough cash.")] + public readonly int PerExpansionTolerateOnCash = 12000; + public override object Create(ActorInitializer init) { return new BaseBuilderBotModule(init.Self, this); } } diff --git a/OpenRA.Mods.Common/Traits/BotModules/BotModuleLogic/BaseBuilderQueueManager.cs b/OpenRA.Mods.Common/Traits/BotModules/BotModuleLogic/BaseBuilderQueueManager.cs index d3848a54d1..bae466b925 100644 --- a/OpenRA.Mods.Common/Traits/BotModules/BotModuleLogic/BaseBuilderQueueManager.cs +++ b/OpenRA.Mods.Common/Traits/BotModules/BotModuleLogic/BaseBuilderQueueManager.cs @@ -245,10 +245,12 @@ namespace OpenRA.Mods.Common.Traits var numTech = playerBuildings.Count(a => baseBuilder.Info.TechTypes.Contains(a.Info.Name)) + (baseBuilder.Info.TechTypes.Contains(currentBuilding.Item) ? 1 : 0); + var tolerateOnCash = playerResources.GetCashAndResources() / Math.Max(baseBuilder.Info.PerExpansionTolerateOnCash, 1); + if (numRef >= baseBuilder.Info.InititalMinimumRefineryCount + baseBuilder.Info.AdditionalMinimumRefineryCount - && numProd > 0 && numProd - baseBuilder.Info.ExpansionTolerate.Random(world.LocalRandom) + numTech >= numRef) + && numProd > 0 && numProd + numTech - baseBuilder.Info.ExpansionTolerate.Random(world.LocalRandom) - tolerateOnCash >= numRef) { - var undeployEvenNoBase = numProd - baseBuilder.Info.ForceExpansionTolerate.Random(world.LocalRandom) + numTech >= numRef; + var undeployEvenNoBase = numProd + numTech - baseBuilder.Info.ForceExpansionTolerate.Random(world.LocalRandom) - tolerateOnCash >= numRef; foreach (var be in baseBuilder.BaseExpansionModules) be.UpdateExpansionParams(bot, true, undeployEvenNoBase, null); diff --git a/OpenRA.Mods.Common/Traits/BotModules/McvExpansionManagerBotModule.cs b/OpenRA.Mods.Common/Traits/BotModules/McvExpansionManagerBotModule.cs index b9ba2fd2a5..031d27c60a 100644 --- a/OpenRA.Mods.Common/Traits/BotModules/McvExpansionManagerBotModule.cs +++ b/OpenRA.Mods.Common/Traits/BotModules/McvExpansionManagerBotModule.cs @@ -48,7 +48,7 @@ namespace OpenRA.Mods.Common.Traits public readonly int BuildMcvInterval = 101; [Desc("Delay (in ticks) for moving a conyard to better expansion. Only work with more than 1 conyard.")] - public readonly int MoveConyardTick = 4000; + public readonly int MoveConyardTick = 5700; [Desc("Should moving the oldest or newest conyard be preferred? Random ordering if unset.")] public readonly bool? MoveOldConyardFirst = null;