Skip to content

Commit b459ae4

Browse files
committed
Issue bot orders sensitive to delay immediately
1 parent a4bf259 commit b459ae4

File tree

5 files changed

+23
-1
lines changed

5 files changed

+23
-1
lines changed

OpenRA.Mods.Common/Traits/Player/ModularBot.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ public sealed class ModularBotInfo : TraitInfo, IBotInfo
3333
"Excess orders remain queued for subsequent ticks.")]
3434
public readonly int MinOrderQuotientPerTick = 5;
3535

36+
[Desc("Those orders will be issued immediately.", "Used for orders that is very sensitive to delays.")]
37+
public readonly HashSet<string> HighPriorityOrders = [];
38+
3639
string IBotInfo.Type => Type;
3740

3841
string IBotInfo.Name => Name;
@@ -47,6 +50,7 @@ public sealed class ModularBot : ITick, IBot, INotifyDamage
4750
readonly ModularBotInfo info;
4851
readonly World world;
4952
readonly Queue<Order> orders = [];
53+
readonly List<Order> highPriorityOrders = [];
5054

5155
Player player;
5256

@@ -80,7 +84,10 @@ public void Activate(Player p)
8084

8185
void IBot.QueueOrder(Order order)
8286
{
83-
orders.Enqueue(order);
87+
if (info.HighPriorityOrders.Contains(order.OrderString))
88+
highPriorityOrders.Add(order);
89+
else
90+
orders.Enqueue(order);
8491
}
8592

8693
void ITick.Tick(Actor self)
@@ -98,6 +105,10 @@ void ITick.Tick(Actor self)
98105
});
99106
}
100107

108+
foreach (var order in highPriorityOrders)
109+
world.IssueOrder(order);
110+
highPriorityOrders.Clear();
111+
101112
var ordersToIssueThisTick = Math.Min((orders.Count + info.MinOrderQuotientPerTick - 1) / info.MinOrderQuotientPerTick, orders.Count);
102113
for (var i = 0; i < ordersToIssueThisTick; i++)
103114
world.IssueOrder(orders.Dequeue());

mods/cnc/rules/ai.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ Player:
22
ModularBot@Cabal:
33
Name: bot-cabal.name
44
Type: cabal
5+
HighPriorityOrders: PlaceBuilding
56
ModularBot@Watson:
67
Name: bot-watson.name
78
Type: watson
9+
HighPriorityOrders: PlaceBuilding
810
ModularBot@HAL9001:
911
Name: bot-hal9001.name
1012
Type: hal9001
13+
HighPriorityOrders: PlaceBuilding
1114
GrantConditionOnBotOwner@cabal:
1215
Condition: enable-cabal-ai
1316
Bots: cabal

mods/d2k/rules/ai.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ Player:
22
ModularBot@Omnius:
33
Name: bot-omnius.name
44
Type: omnius
5+
HighPriorityOrders: PlaceBuilding
56
ModularBot@Vidius:
67
Name: bot-vidius.name
78
Type: vidious
9+
HighPriorityOrders: PlaceBuilding
810
ModularBot@Gladius:
911
Name: bot-gladius.name
1012
Type: gladius
13+
HighPriorityOrders: PlaceBuilding
1114
GrantConditionOnBotOwner@omnius:
1215
Condition: enable-omnius-ai
1316
Bots: omnius

mods/ra/rules/ai.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,19 @@ Player:
22
ModularBot@RushAI:
33
Name: bot-rush-ai.name
44
Type: rush
5+
HighPriorityOrders: AdvancedChronoshift, Chronoshift, ironcurtain, PlaceBuilding
56
ModularBot@NormalAI:
67
Name: bot-normal-ai.name
78
Type: normal
9+
HighPriorityOrders: AdvancedChronoshift, Chronoshift, ironcurtain, PlaceBuilding
810
ModularBot@TurtleAI:
911
Name: bot-turtle-ai.name
1012
Type: turtle
13+
HighPriorityOrders: AdvancedChronoshift, Chronoshift, ironcurtain, PlaceBuilding
1114
ModularBot@NavalAI:
1215
Name: bot-naval-ai.name
1316
Type: naval
17+
HighPriorityOrders: AdvancedChronoshift, Chronoshift, ironcurtain, PlaceBuilding
1418
GrantConditionOnBotOwner@rush:
1519
Condition: enable-rush-ai
1620
Bots: rush

mods/ts/rules/ai.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ Player:
22
ModularBot@bot-test-ai:
33
Name: bot-test-ai.name
44
Type: test
5+
HighPriorityOrders: PlaceBuilding
56
GrantConditionOnBotOwner@test:
67
Condition: enable-test-ai
78
Bots: test

0 commit comments

Comments
 (0)