@supalosa/chronodivide-bot 0.4.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/.env.template +5 -0
  2. package/README.md +54 -47
  3. package/dist/bot/bot.js +14 -35
  4. package/dist/bot/bot.js.map +1 -1
  5. package/dist/bot/logic/awareness.js +13 -8
  6. package/dist/bot/logic/awareness.js.map +1 -1
  7. package/dist/bot/logic/building/ArtilleryUnit.js +2 -29
  8. package/dist/bot/logic/building/antiAirStaticDefence.js +43 -0
  9. package/dist/bot/logic/building/antiAirStaticDefence.js.map +1 -0
  10. package/dist/bot/logic/building/antiGroundStaticDefence.js +10 -20
  11. package/dist/bot/logic/building/antiGroundStaticDefence.js.map +1 -1
  12. package/dist/bot/logic/building/artilleryUnit.js.map +1 -1
  13. package/dist/bot/logic/building/basicAirUnit.js +2 -23
  14. package/dist/bot/logic/building/basicAirUnit.js.map +1 -1
  15. package/dist/bot/logic/building/basicBuilding.js +3 -2
  16. package/dist/bot/logic/building/basicBuilding.js.map +1 -1
  17. package/dist/bot/logic/building/basicGroundUnit.js +2 -43
  18. package/dist/bot/logic/building/basicGroundUnit.js.map +1 -1
  19. package/dist/bot/logic/building/buildingRules.js +15 -9
  20. package/dist/bot/logic/building/buildingRules.js.map +1 -1
  21. package/dist/bot/logic/building/common.js +19 -0
  22. package/dist/bot/logic/building/common.js.map +1 -0
  23. package/dist/bot/logic/building/harvester.js +2 -1
  24. package/dist/bot/logic/building/harvester.js.map +1 -1
  25. package/dist/bot/logic/building/queueController.js +69 -42
  26. package/dist/bot/logic/building/queueController.js.map +1 -1
  27. package/dist/bot/logic/common/utils.js +21 -0
  28. package/dist/bot/logic/common/utils.js.map +1 -1
  29. package/dist/bot/logic/composition/alliedCompositions.js +13 -0
  30. package/dist/bot/logic/composition/alliedCompositions.js.map +1 -0
  31. package/dist/bot/logic/composition/common.js +2 -0
  32. package/dist/bot/logic/composition/common.js.map +1 -0
  33. package/dist/bot/logic/composition/sovietCompositions.js +13 -0
  34. package/dist/bot/logic/composition/sovietCompositions.js.map +1 -0
  35. package/dist/bot/logic/mission/actionBatcher.js +92 -0
  36. package/dist/bot/logic/mission/actionBatcher.js.map +1 -0
  37. package/dist/bot/logic/mission/behaviours/combatSquad.js +124 -0
  38. package/dist/bot/logic/mission/behaviours/combatSquad.js.map +1 -0
  39. package/dist/bot/logic/mission/behaviours/common.js +56 -0
  40. package/dist/bot/logic/mission/behaviours/common.js.map +1 -0
  41. package/dist/bot/logic/mission/behaviours/engineerSquad.js +39 -0
  42. package/dist/bot/logic/mission/behaviours/engineerSquad.js.map +1 -0
  43. package/dist/bot/logic/mission/behaviours/expansionSquad.js +46 -0
  44. package/dist/bot/logic/mission/behaviours/expansionSquad.js.map +1 -0
  45. package/dist/bot/logic/mission/behaviours/retreatSquad.js +31 -0
  46. package/dist/bot/logic/mission/behaviours/retreatSquad.js.map +1 -0
  47. package/{src/bot/logic/squad/behaviours/scoutingSquad.ts → dist/bot/logic/mission/behaviours/scoutingSquad.js} +27 -51
  48. package/dist/bot/logic/mission/behaviours/scoutingSquad.js.map +1 -0
  49. package/dist/bot/logic/mission/mission.js +91 -19
  50. package/dist/bot/logic/mission/mission.js.map +1 -1
  51. package/dist/bot/logic/mission/missionController.js +262 -21
  52. package/dist/bot/logic/mission/missionController.js.map +1 -1
  53. package/dist/bot/logic/mission/missions/attackMission.js +113 -39
  54. package/dist/bot/logic/mission/missions/attackMission.js.map +1 -1
  55. package/dist/bot/logic/mission/missions/basicMission.js +13 -0
  56. package/dist/bot/logic/mission/missions/basicMission.js.map +1 -0
  57. package/dist/bot/logic/mission/missions/defenceMission.js +43 -28
  58. package/dist/bot/logic/mission/missions/defenceMission.js.map +1 -1
  59. package/dist/bot/logic/mission/missions/engineerMission.js +37 -7
  60. package/dist/bot/logic/mission/missions/engineerMission.js.map +1 -1
  61. package/dist/bot/logic/mission/missions/expansionMission.js +42 -6
  62. package/dist/bot/logic/mission/missions/expansionMission.js.map +1 -1
  63. package/dist/bot/logic/mission/missions/missionBehaviour.js +2 -0
  64. package/dist/bot/logic/mission/missions/missionBehaviour.js.map +1 -0
  65. package/dist/bot/logic/mission/missions/retreatMission.js +31 -5
  66. package/dist/bot/logic/mission/missions/retreatMission.js.map +1 -1
  67. package/dist/bot/logic/mission/missions/scoutingMission.js +103 -6
  68. package/dist/bot/logic/mission/missions/scoutingMission.js.map +1 -1
  69. package/dist/bot/logic/mission/missions/squads/combatSquad.js +116 -0
  70. package/dist/bot/logic/mission/missions/squads/combatSquad.js.map +1 -0
  71. package/dist/bot/logic/mission/missions/squads/common.js +58 -0
  72. package/dist/bot/logic/mission/missions/squads/common.js.map +1 -0
  73. package/dist/bot/logic/mission/missions/squads/squad.js +2 -0
  74. package/dist/bot/logic/mission/missions/squads/squad.js.map +1 -0
  75. package/dist/bot/logic/squad/squadController.js +6 -2
  76. package/dist/bot/logic/squad/squadController.js.map +1 -1
  77. package/dist/bot/logic/threat/threatCalculator.js +9 -9
  78. package/dist/bot/logic/threat/threatCalculator.js.map +1 -1
  79. package/dist/exampleBot.js +50 -18
  80. package/dist/exampleBot.js.map +1 -1
  81. package/package.json +5 -4
  82. package/src/bot/bot.ts +19 -51
  83. package/src/bot/logic/awareness.ts +34 -22
  84. package/src/bot/logic/building/antiAirStaticDefence.ts +64 -0
  85. package/src/bot/logic/building/antiGroundStaticDefence.ts +7 -20
  86. package/src/bot/logic/building/artilleryUnit.ts +2 -28
  87. package/src/bot/logic/building/basicAirUnit.ts +2 -33
  88. package/src/bot/logic/building/basicBuilding.ts +8 -6
  89. package/src/bot/logic/building/basicGroundUnit.ts +2 -46
  90. package/src/bot/logic/building/buildingRules.ts +15 -9
  91. package/src/bot/logic/building/common.ts +23 -0
  92. package/src/bot/logic/building/harvester.ts +2 -1
  93. package/src/bot/logic/building/queueController.ts +98 -43
  94. package/src/bot/logic/common/utils.ts +28 -0
  95. package/src/bot/logic/composition/alliedCompositions.ts +22 -0
  96. package/src/bot/logic/composition/common.ts +3 -0
  97. package/src/bot/logic/composition/sovietCompositions.ts +21 -0
  98. package/src/bot/logic/{squad/behaviours → mission}/actionBatcher.ts +66 -7
  99. package/src/bot/logic/mission/mission.ts +186 -37
  100. package/src/bot/logic/mission/missionController.ts +340 -31
  101. package/src/bot/logic/mission/missionFactories.ts +3 -3
  102. package/src/bot/logic/mission/missions/attackMission.ts +181 -44
  103. package/src/bot/logic/mission/missions/defenceMission.ts +72 -45
  104. package/src/bot/logic/mission/missions/engineerMission.ts +67 -15
  105. package/src/bot/logic/mission/missions/expansionMission.ts +67 -14
  106. package/src/bot/logic/mission/missions/retreatMission.ts +50 -6
  107. package/src/bot/logic/mission/missions/scoutingMission.ts +138 -14
  108. package/src/bot/logic/{squad/behaviours → mission/missions/squads}/combatSquad.ts +56 -33
  109. package/src/bot/logic/{squad/behaviours → mission/missions/squads}/common.ts +11 -17
  110. package/src/bot/logic/mission/missions/squads/squad.ts +19 -0
  111. package/src/bot/logic/threat/threatCalculator.ts +10 -10
  112. package/src/exampleBot.ts +56 -24
  113. package/.prettierrc +0 -5
  114. package/TODO.md +0 -15
  115. package/rules.ini +0 -23126
  116. package/src/bot/logic/mission/missions/oneTimeMission.ts +0 -33
  117. package/src/bot/logic/squad/behaviours/engineerSquad.ts +0 -58
  118. package/src/bot/logic/squad/behaviours/expansionSquad.ts +0 -64
  119. package/src/bot/logic/squad/behaviours/retreatSquad.ts +0 -50
  120. package/src/bot/logic/squad/squad.ts +0 -165
  121. package/src/bot/logic/squad/squadBehaviour.ts +0 -66
  122. package/src/bot/logic/squad/squadBehaviours.ts +0 -8
  123. package/src/bot/logic/squad/squadController.ts +0 -271
@@ -1,5 +1,3 @@
1
- import { GameMath } from "@chronodivide/game-api";
2
- import { numBuildingsOwnedOfType } from "./buildingRules.js";
3
1
  export class BasicGroundUnit {
4
2
  constructor(basePriority, baseAmount, antiGroundPower = 1, // boolean for now, but will eventually be used in weighting.
5
3
  antiAirPower = 0) {
@@ -12,47 +10,8 @@ export class BasicGroundUnit {
12
10
  return undefined;
13
11
  }
14
12
  getPriority(game, playerData, technoRules, threatCache) {
15
- const numOwned = numBuildingsOwnedOfType(game, playerData, technoRules);
16
- if (threatCache) {
17
- let priority = this.basePriority;
18
- if (this.antiGroundPower > 0) {
19
- // If the enemy's power is increasing we should try to keep up.
20
- if (threatCache.totalOffensiveLandThreat > threatCache.totalAvailableAntiGroundFirepower) {
21
- priority +=
22
- this.antiGroundPower *
23
- this.basePriority *
24
- (threatCache.totalOffensiveLandThreat /
25
- Math.max(1, threatCache.totalAvailableAntiGroundFirepower));
26
- }
27
- else {
28
- // But also, if our power dwarfs the enemy, keep pressing the advantage.
29
- priority +=
30
- (this.antiGroundPower *
31
- this.basePriority *
32
- GameMath.sqrt(threatCache.totalAvailableAntiGroundFirepower /
33
- Math.max(1, threatCache.totalOffensiveLandThreat + threatCache.totalDefensiveThreat))) /
34
- (numOwned + 1);
35
- }
36
- }
37
- if (this.antiAirPower > 0) {
38
- if (threatCache.totalOffensiveAirThreat > threatCache.totalAvailableAntiAirFirepower) {
39
- priority +=
40
- this.antiAirPower *
41
- this.basePriority *
42
- (threatCache.totalOffensiveAirThreat / Math.max(1, threatCache.totalAvailableAntiAirFirepower));
43
- }
44
- else {
45
- priority +=
46
- (this.antiAirPower *
47
- this.basePriority *
48
- GameMath.sqrt(threatCache.totalAvailableAntiAirFirepower /
49
- Math.max(1, threatCache.totalOffensiveAirThreat + threatCache.totalDefensiveThreat))) /
50
- (numOwned + 1);
51
- }
52
- }
53
- return priority;
54
- }
55
- return this.basePriority * (1.0 - numOwned / this.baseAmount);
13
+ // Units aren't built automatically, but are instead requested by missions.
14
+ return 0;
56
15
  }
57
16
  getMaxCount(game, playerData, technoRules, threatCache) {
58
17
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"basicGroundUnit.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/basicGroundUnit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,QAAQ,EAA2B,MAAM,wBAAwB,CAAC;AAEpF,OAAO,EAAgD,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE3G,MAAM,OAAO,eAAe;IACxB,YACc,YAAoB,EACpB,UAAkB,EAClB,kBAA0B,CAAC,EAAE,6DAA6D;IAC1F,eAAuB,CAAC;QAHxB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,eAAU,GAAV,UAAU,CAAQ;QAClB,oBAAe,GAAf,eAAe,CAAY;QAC3B,iBAAY,GAAZ,YAAY,CAAY;IACnC,CAAC;IAEJ,oBAAoB,CAChB,IAAa,EACb,UAAsB,EACtB,WAAwB;QAExB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACxE,IAAI,WAAW,EAAE;YACb,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;YACjC,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE;gBAC1B,+DAA+D;gBAC/D,IAAI,WAAW,CAAC,wBAAwB,GAAG,WAAW,CAAC,iCAAiC,EAAE;oBACtF,QAAQ;wBACJ,IAAI,CAAC,eAAe;4BACpB,IAAI,CAAC,YAAY;4BACjB,CAAC,WAAW,CAAC,wBAAwB;gCACjC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,iCAAiC,CAAC,CAAC,CAAC;iBACvE;qBAAM;oBACH,wEAAwE;oBACxE,QAAQ;wBACJ,CAAC,IAAI,CAAC,eAAe;4BACjB,IAAI,CAAC,YAAY;4BACjB,QAAQ,CAAC,IAAI,CACT,WAAW,CAAC,iCAAiC;gCACzC,IAAI,CAAC,GAAG,CACJ,CAAC,EACD,WAAW,CAAC,wBAAwB,GAAG,WAAW,CAAC,oBAAoB,CAC1E,CACR,CAAC;4BACN,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;iBACtB;aACJ;YACD,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;gBACvB,IAAI,WAAW,CAAC,uBAAuB,GAAG,WAAW,CAAC,8BAA8B,EAAE;oBAClF,QAAQ;wBACJ,IAAI,CAAC,YAAY;4BACjB,IAAI,CAAC,YAAY;4BACjB,CAAC,WAAW,CAAC,uBAAuB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,8BAA8B,CAAC,CAAC,CAAC;iBACvG;qBAAM;oBACH,QAAQ;wBACJ,CAAC,IAAI,CAAC,YAAY;4BACd,IAAI,CAAC,YAAY;4BACjB,QAAQ,CAAC,IAAI,CACT,WAAW,CAAC,8BAA8B;gCACtC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,uBAAuB,GAAG,WAAW,CAAC,oBAAoB,CAAC,CAC1F,CAAC;4BACN,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;iBACtB;aACJ;YACD,OAAO,QAAQ,CAAC;SACnB;QACD,OAAO,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAClE,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
1
+ {"version":3,"file":"basicGroundUnit.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/basicGroundUnit.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,eAAe;IACxB,YACc,YAAoB,EACpB,UAAkB,EAClB,kBAA0B,CAAC,EAAE,6DAA6D;IAC1F,eAAuB,CAAC;QAHxB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,eAAU,GAAV,UAAU,CAAQ;QAClB,oBAAe,GAAf,eAAe,CAAY;QAC3B,iBAAY,GAAZ,YAAY,CAAY;IACnC,CAAC;IAEJ,oBAAoB,CAChB,IAAa,EACb,UAAsB,EACtB,WAAwB;QAExB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,2EAA2E;QAC3E,OAAO,CAAC,CAAC;IACb,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
@@ -8,6 +8,7 @@ import { PowerPlant } from "./powerPlant.js";
8
8
  import { ResourceCollectionBuilding } from "./resourceCollectionBuilding.js";
9
9
  import { Harvester } from "./harvester.js";
10
10
  import { uniqBy } from "../common/utils.js";
11
+ import { AntiAirStaticDefence } from "./antiAirStaticDefence.js";
11
12
  export function numBuildingsOwnedOfType(game, playerData, technoRules) {
12
13
  return game.getVisibleUnits(playerData.name, "self", (r) => r == technoRules).length;
13
14
  }
@@ -118,7 +119,7 @@ export function getDefaultPlacementLocation(game, playerData, idealPoint, techno
118
119
  }
119
120
  return undefined;
120
121
  }
121
- export const DEFAULT_BUILDING_PRIORITY = 1;
122
+ export const DEFAULT_BUILDING_PRIORITY = 0;
122
123
  export const BUILDING_NAME_TO_RULES = new Map([
123
124
  // Allied
124
125
  ["GAPOWR", new PowerPlant()],
@@ -126,16 +127,17 @@ export const BUILDING_NAME_TO_RULES = new Map([
126
127
  ["GAWEAP", new BasicBuilding(15, 1)],
127
128
  ["GAPILE", new BasicBuilding(12, 1)],
128
129
  ["CMIN", new Harvester(15, 4, 2)],
129
- ["ENGINEER", new BasicBuilding(10, 1, 1000)],
130
130
  ["GADEPT", new BasicBuilding(1, 1, 10000)],
131
131
  ["GAAIRC", new BasicBuilding(10, 1, 500)],
132
132
  ["AMRADR", new BasicBuilding(10, 1, 500)],
133
133
  ["GATECH", new BasicBuilding(20, 1, 4000)],
134
134
  ["GAYARD", new BasicBuilding(0, 0, 0)],
135
- ["GAPILL", new AntiGroundStaticDefence(5, 1, 5)],
136
- ["ATESLA", new AntiGroundStaticDefence(5, 1, 10)],
135
+ ["GAPILL", new AntiGroundStaticDefence(2, 1, 5)],
136
+ ["ATESLA", new AntiGroundStaticDefence(2, 1, 10)],
137
+ ["NASAM", new AntiAirStaticDefence(2, 1, 5)],
137
138
  ["GAWALL", new AntiGroundStaticDefence(0, 0, 0)],
138
- ["E1", new BasicGroundUnit(2, 3, 0.25, 0)],
139
+ ["E1", new BasicGroundUnit(2, 2, 0.2, 0)],
140
+ ["ENGINEER", new BasicGroundUnit(1, 0, 0)],
139
141
  ["MTNK", new BasicGroundUnit(10, 3, 2, 0)],
140
142
  ["MGTK", new BasicGroundUnit(10, 1, 2.5, 0)],
141
143
  ["FV", new BasicGroundUnit(5, 2, 0.5, 1)],
@@ -150,16 +152,20 @@ export const BUILDING_NAME_TO_RULES = new Map([
150
152
  ["NAWEAP", new BasicBuilding(15, 1)],
151
153
  ["NAHAND", new BasicBuilding(12, 1)],
152
154
  ["HARV", new Harvester(15, 4, 2)],
153
- ["SENGINEER", new BasicBuilding(10, 1, 1000)],
154
155
  ["NADEPT", new BasicBuilding(1, 1, 10000)],
155
156
  ["NARADR", new BasicBuilding(10, 1, 500)],
156
157
  ["NANRCT", new PowerPlant()],
157
158
  ["NAYARD", new BasicBuilding(0, 0, 0)],
158
159
  ["NATECH", new BasicBuilding(20, 1, 4000)],
159
- ["NALASR", new AntiGroundStaticDefence(5, 1, 5)],
160
- ["TESLA", new AntiGroundStaticDefence(5, 1, 10)],
160
+ ["NALASR", new AntiGroundStaticDefence(2, 1, 5)],
161
+ ["NAFLAK", new AntiAirStaticDefence(2, 1, 5)],
162
+ ["TESLA", new AntiGroundStaticDefence(2, 1, 10)],
161
163
  ["NAWALL", new AntiGroundStaticDefence(0, 0, 0)],
162
- ["E2", new BasicGroundUnit(2, 3, 0.25, 0)],
164
+ ["E2", new BasicGroundUnit(2, 2, 0.2, 0)],
165
+ ["SENGINEER", new BasicGroundUnit(1, 0, 0)],
166
+ ["FLAKT", new BasicGroundUnit(2, 2, 0.1, 0.3)],
167
+ ["YURI", new BasicGroundUnit(1, 1, 1, 0)],
168
+ ["DOG", new BasicGroundUnit(1, 1, 0, 0)],
163
169
  ["HTNK", new BasicGroundUnit(10, 3, 3, 0)],
164
170
  ["APOC", new BasicGroundUnit(6, 1, 5, 0)],
165
171
  ["HTK", new BasicGroundUnit(5, 2, 0.33, 1.5)],
@@ -1 +1 @@
1
- {"version":3,"file":"buildingRules.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/buildingRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,QAAQ,EACR,QAAQ,EACR,UAAU,EAKV,OAAO,GACV,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAwB5C,MAAM,UAAU,uBAAuB,CAAC,IAAa,EAAE,UAAsB,EAAE,WAAwB;IACnG,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,MAAM,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAa,EAAE,UAAsB,EAAE,IAAY;IACvF,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;AACxF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,mBAAmB,CAAC,KAAc,EAAE,CAAO,EAAE,QAAgB,EAAE,eAAsB;IAC1F,OAAO;QACH,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,CAAC;QACrD,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,CAAC;QACtD,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,CAAC;QAC7D,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,CAAC;KACnE,CAAC;AACN,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC7B,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,OAAgB,EAChB,YAAoB;IAEpB,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,cAAc,CAAC,UAAU,CAAC;IACzF,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpH,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,IAAI,UAAU,IAAI,SAAS,EAAE;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE;YAC9B,wDAAwD;YACxD,SAAS;SACZ;QACD,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACtC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG;YACjB,KAAK,EAAE,UAAU,EAAE,KAAK;YACxB,MAAM,EAAE,UAAU,EAAE,MAAM;SAC7B,CAAC;QACF,MAAM,KAAK,GAAG,mBAAmB,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;QAC/G,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,EAAE;YACX,SAAS;SACZ;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM;aAC5B,cAAc,CAAC,QAAQ,EAAE;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;SACvB,CAAC;aACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAE7B,+FAA+F;QAC/F,MAAM,YAAY,GAAG,IAAI,OAAO,CAC5B,YAAY,CAAC,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC,EACvC,YAAY,CAAC,CAAC,GAAG,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAC3C,CAAC;QACF,MAAM,YAAY,GAAG;YACjB,KAAK,EAAE,YAAY,CAAC,KAAK,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC;YAClD,MAAM,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,iBAAiB,GAAG,CAAC,CAAC;SACxD,CAAC;QACF,MAAM,WAAW,GAAG,mBAAmB,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QAClF,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAChD,OAAO,CACH,IAAI,CAAC,EAAE,IAAI,WAAW,CAAC,CAAC;gBACxB,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK;gBAC3C,IAAI,CAAC,EAAE,IAAI,WAAW,CAAC,CAAC;gBACxB,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAC/C,CAAC;QACN,CAAC,CAAC,CAAC;QACH,aAAa,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;KAC9E;IACD,0BAA0B;IAC1B,MAAM,qBAAqB,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,sFAAsF;IACtF,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAmB,EAAE,KAAa;IACxD,OAAO,KAAK;SACP,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACZ,IAAI;QACJ,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;KACnE,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACX,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IACnC,CAAC,CAAC,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;IAC5D,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACjB,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC5B,IAAI,CAAC,KAAK,GAAG,EAAE;QACX,OAAO,CAAC,CAAC;KACZ;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,2BAA2B,CACvC,IAAa,EACb,UAAsB,EACtB,UAAmB,EACnB,WAAwB,EACxB,UAAmB,KAAK,EACxB,WAAmB,CAAC;IAEpB,+CAA+C;IAC/C,MAAM,IAAI,GAA0B,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACpF,IAAI,CAAC,IAAI,EAAE;QACP,OAAO,SAAS,CAAC;KACpB;IACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClF,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAE1D,KAAK,IAAI,YAAY,IAAI,aAAa,EAAE;QACpC,IAAI,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE;YAClG,OAAO,YAAY,CAAC,IAAI,CAAC;SAC5B;KACJ;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAKD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAA0B;IACnE,SAAS;IACT,CAAC,QAAQ,EAAE,IAAI,UAAU,EAAE,CAAC;IAC5B,CAAC,QAAQ,EAAE,IAAI,0BAA0B,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC,MAAM,EAAE,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC,UAAU,EAAE,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAEzC,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtC,CAAC,QAAQ,EAAE,IAAI,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,QAAQ,EAAE,IAAI,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC,QAAQ,EAAE,IAAI,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEhD,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC,MAAM,EAAE,IAAI,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC,MAAM,EAAE,IAAI,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC,SAAS,EAAE,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC,MAAM,EAAE,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC,MAAM,EAAE,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC,MAAM,EAAE,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC,MAAM,EAAE,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnC,SAAS;IACT,CAAC,QAAQ,EAAE,IAAI,UAAU,EAAE,CAAC;IAC5B,CAAC,QAAQ,EAAE,IAAI,0BAA0B,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC,MAAM,EAAE,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC,WAAW,EAAE,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC,QAAQ,EAAE,IAAI,UAAU,EAAE,CAAC;IAC5B,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtC,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAE1C,CAAC,QAAQ,EAAE,IAAI,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,OAAO,EAAE,IAAI,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC,QAAQ,EAAE,IAAI,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEhD,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC,MAAM,EAAE,IAAI,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC,MAAM,EAAE,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC,KAAK,EAAE,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,KAAK,EAAE,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC,IAAI,EAAE,IAAI,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB;CAChE,CAAC,CAAC"}
1
+ {"version":3,"file":"buildingRules.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/buildingRules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { getPointTowardsOtherPoint } from "../map/map.js";
2
+ import { getDefaultPlacementLocation } from "./buildingRules.js";
3
+ export const getStaticDefencePlacement = (game, playerData, technoRules) => {
4
+ // Prefer front towards enemy.
5
+ let startLocation = playerData.startLocation;
6
+ let players = game.getPlayers();
7
+ let enemyFacingLocationCandidates = [];
8
+ for (let i = 0; i < players.length; ++i) {
9
+ let playerName = players[i];
10
+ if (playerName == playerData.name) {
11
+ continue;
12
+ }
13
+ let enemyPlayer = game.getPlayerData(playerName);
14
+ enemyFacingLocationCandidates.push(getPointTowardsOtherPoint(game, startLocation, enemyPlayer.startLocation, 4, 16, 1.5));
15
+ }
16
+ let selectedLocation = enemyFacingLocationCandidates[Math.floor(game.generateRandom() * enemyFacingLocationCandidates.length)];
17
+ return getDefaultPlacementLocation(game, playerData, selectedLocation, technoRules, false, 0);
18
+ };
19
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/common.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,IAAa,EAAE,UAAsB,EAAE,WAAwB,EAAE,EAAE;IACzG,8BAA8B;IAC9B,IAAI,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;IAC7C,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC,IAAI,6BAA6B,GAAc,EAAE,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QACrC,IAAI,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE;YAC/B,SAAS;SACZ;QACD,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACjD,6BAA6B,CAAC,IAAI,CAC9B,yBAAyB,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CACxF,CAAC;KACL;IACD,IAAI,gBAAgB,GAChB,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5G,OAAO,2BAA2B,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAClG,CAAC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { BasicGroundUnit } from "./basicGroundUnit.js";
2
2
  const IDEAL_HARVESTERS_PER_REFINERY = 2;
3
+ const MAX_HARVESTERS_PER_REFINERY = 4;
3
4
  export class Harvester extends BasicGroundUnit {
4
5
  constructor(basePriority, baseAmount, minNeeded) {
5
6
  super(basePriority, baseAmount, 0, 0);
@@ -9,7 +10,7 @@ export class Harvester extends BasicGroundUnit {
9
10
  getPriority(game, playerData, technoRules, threatCache) {
10
11
  const refineries = game.getVisibleUnits(playerData.name, "self", (r) => r.refinery).length;
11
12
  const harvesters = game.getVisibleUnits(playerData.name, "self", (r) => r.harvester).length;
12
- const boost = harvesters < this.minNeeded ? 3 : 1;
13
+ const boost = harvesters < this.minNeeded ? 3 : harvesters > refineries * MAX_HARVESTERS_PER_REFINERY ? 0 : 1;
13
14
  return this.basePriority * (refineries / Math.max(harvesters / IDEAL_HARVESTERS_PER_REFINERY, 1)) * boost;
14
15
  }
15
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"harvester.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/harvester.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAExC,MAAM,OAAO,SAAU,SAAQ,eAAe;IAC1C,YACI,YAAoB,EACpB,UAAkB,EACV,SAAiB;QAEzB,KAAK,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAF9B,cAAS,GAAT,SAAS,CAAQ;IAG7B,CAAC;IAED,iEAAiE;IACjE,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QAC3F,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QAE5F,MAAM,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElD,OAAO,IAAI,CAAC,YAAY,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,6BAA6B,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAC9G,CAAC;CACJ"}
1
+ {"version":3,"file":"harvester.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/harvester.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,6BAA6B,GAAG,CAAC,CAAC;AACxC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAEtC,MAAM,OAAO,SAAU,SAAQ,eAAe;IAC1C,YACI,YAAoB,EACpB,UAAkB,EACV,SAAiB;QAEzB,KAAK,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAF9B,cAAS,GAAT,SAAS,CAAQ;IAG7B,CAAC;IAED,iEAAiE;IACjE,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QAC3F,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QAE5F,MAAM,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9G,OAAO,IAAI,CAAC,YAAY,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,6BAA6B,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAC9G,CAAC;CACJ"}
@@ -26,36 +26,43 @@ export const queueTypeToName = (queue) => {
26
26
  return "Unknown";
27
27
  }
28
28
  };
29
- const DEBUG_BUILD_QUEUES = true;
30
29
  export class QueueController {
31
- constructor() { }
32
- onAiUpdate(game, productionApi, actionsApi, playerData, threatCache, logger) {
33
- const decisions = QUEUES.map((queueType) => {
30
+ constructor() {
31
+ this.queueStates = [];
32
+ }
33
+ onAiUpdate(game, productionApi, actionsApi, playerData, threatCache, unitTypeRequests, logger) {
34
+ this.queueStates = QUEUES.map((queueType) => {
34
35
  const options = productionApi.getAvailableObjects(queueType);
36
+ const items = this.getPrioritiesForBuildingOptions(game, options, threatCache, playerData, unitTypeRequests, logger);
37
+ const topItem = items.length > 0 ? items[items.length - 1] : undefined;
35
38
  return {
36
39
  queue: queueType,
37
- decision: this.getBestOptionForBuilding(game, options, threatCache, playerData, logger),
40
+ items,
41
+ // only if the top item has a priority above zero
42
+ topItem: topItem && topItem.priority > 0 ? topItem : undefined,
38
43
  };
39
- }).filter((decision) => decision.decision != null);
40
- let totalWeightAcrossQueues = decisions
41
- .map((decision) => decision.decision?.priority)
44
+ });
45
+ const totalWeightAcrossQueues = this.queueStates
46
+ .map((decision) => decision.topItem?.priority)
42
47
  .reduce((pV, cV) => pV + cV, 0);
43
- let totalCostAcrossQueues = decisions
44
- .map((decision) => decision.decision?.unit.cost)
48
+ const totalCostAcrossQueues = this.queueStates
49
+ .map((decision) => decision.topItem?.unit.cost)
45
50
  .reduce((pV, cV) => pV + cV, 0);
46
- decisions.forEach((decision) => {
47
- this.updateBuildQueue(game, productionApi, actionsApi, playerData, threatCache, decision.queue, decision.decision, totalWeightAcrossQueues, totalCostAcrossQueues, logger);
51
+ this.queueStates.forEach((decision) => {
52
+ this.updateBuildQueue(game, productionApi, actionsApi, playerData, threatCache, decision.queue, decision.topItem, totalWeightAcrossQueues, totalCostAcrossQueues, logger);
48
53
  });
49
54
  // Repair is simple - just repair everything that's damaged.
50
- game.getVisibleUnits(playerData.name, "self", (r) => r.repairable).forEach((unitId) => {
51
- const unit = game.getUnitData(unitId);
52
- if (!unit || !unit.hitPoints || !unit.maxHitPoints || unit.hasWrenchRepair) {
53
- return;
54
- }
55
- if (unit.hitPoints < unit.maxHitPoints) {
56
- actionsApi.toggleRepairWrench(unitId);
57
- }
58
- });
55
+ if (playerData.credits > 0) {
56
+ game.getVisibleUnits(playerData.name, "self", (r) => r.repairable).forEach((unitId) => {
57
+ const unit = game.getUnitData(unitId);
58
+ if (!unit || !unit.hitPoints || !unit.maxHitPoints || unit.hasWrenchRepair) {
59
+ return;
60
+ }
61
+ if (unit.hitPoints < unit.maxHitPoints) {
62
+ actionsApi.toggleRepairWrench(unitId);
63
+ }
64
+ });
65
+ }
59
66
  }
60
67
  updateBuildQueue(game, productionApi, actionsApi, playerData, threatCache, queueType, decision, totalWeightAcrossQueues, totalCostAcrossQueues, logger) {
61
68
  const myCredits = playerData.credits;
@@ -82,16 +89,15 @@ export class QueueController {
82
89
  }
83
90
  }
84
91
  else if (queueData.status == QueueStatus.Active && queueData.items.length > 0 && decision != null) {
85
- // Consider cancelling if something else is significantly higher priority.
86
- const current = queueData.items[0].rules;
87
- const options = productionApi.getAvailableObjects(queueType);
88
- if (decision.unit != current) {
92
+ // Consider cancelling if something else is significantly higher priority than what is currently being produced.
93
+ const currentProduction = queueData.items[0].rules;
94
+ if (decision.unit != currentProduction) {
89
95
  // Changing our mind.
90
- let currentItemPriority = this.getPriorityForBuildingOption(current, game, playerData, threatCache);
96
+ let currentItemPriority = this.getPriorityForBuildingOption(currentProduction, game, playerData, threatCache);
91
97
  let newItemPriority = decision.priority;
92
98
  if (newItemPriority > currentItemPriority * 2) {
93
- logger(`Dequeueing queue ${queueTypeToName(queueData.type)} unit ${current.name} because ${decision.unit.name} has 2x higher priority.`);
94
- actionsApi.unqueueFromProduction(queueData.type, current.name, current.type, 1);
99
+ logger(`Dequeueing queue ${queueTypeToName(queueData.type)} unit ${currentProduction.name} because ${decision.unit.name} has 2x higher priority.`);
100
+ actionsApi.unqueueFromProduction(queueData.type, currentProduction.name, currentProduction.type, 1);
95
101
  }
96
102
  }
97
103
  else {
@@ -114,24 +120,18 @@ export class QueueController {
114
120
  }
115
121
  }
116
122
  }
117
- getBestOptionForBuilding(game, options, threatCache, playerData, logger) {
123
+ getPrioritiesForBuildingOptions(game, options, threatCache, playerData, unitTypeRequests, logger) {
118
124
  let priorityQueue = [];
119
125
  options.forEach((option) => {
120
- let priority = this.getPriorityForBuildingOption(option, game, playerData, threatCache);
121
- if (priority > 0) {
122
- priorityQueue.push({ unit: option, priority: priority });
126
+ const calculatedPriority = this.getPriorityForBuildingOption(option, game, playerData, threatCache);
127
+ // Get the higher of the dynamic and the mission priority for the unit.
128
+ const actualPriority = Math.max(calculatedPriority, unitTypeRequests.get(option.name) ?? calculatedPriority);
129
+ if (actualPriority > 0) {
130
+ priorityQueue.push({ unit: option, priority: actualPriority });
123
131
  }
124
132
  });
125
- priorityQueue = priorityQueue.sort((a, b) => {
126
- return a.priority - b.priority;
127
- });
128
- if (priorityQueue.length > 0) {
129
- if (DEBUG_BUILD_QUEUES && game.getCurrentTick() % 100 === 0) {
130
- let queueString = priorityQueue.map((item) => item.unit.name + "(" + item.priority + ")").join(", ");
131
- logger(`Build priority currently: ${queueString}`);
132
- }
133
- }
134
- return priorityQueue.pop();
133
+ priorityQueue = priorityQueue.sort((a, b) => a.priority - b.priority);
134
+ return priorityQueue;
135
135
  }
136
136
  getPriorityForBuildingOption(option, game, playerStatus, threatCache) {
137
137
  if (BUILDING_NAME_TO_RULES.has(option.name)) {
@@ -153,5 +153,32 @@ export class QueueController {
153
153
  return getDefaultPlacementLocation(game, playerData, playerData.startLocation, objectReady);
154
154
  }
155
155
  }
156
+ getGlobalDebugText(gameApi, productionApi) {
157
+ const productionState = QUEUES.reduce((prev, queueType) => {
158
+ if (productionApi.getQueueData(queueType).size === 0) {
159
+ return prev;
160
+ }
161
+ const paused = productionApi.getQueueData(queueType).status === QueueStatus.OnHold;
162
+ return (prev +
163
+ " [" +
164
+ queueTypeToName(queueType) +
165
+ (paused ? " PAUSED" : "") +
166
+ ": " +
167
+ productionApi
168
+ .getQueueData(queueType)
169
+ .items.map((item) => item.rules.name + (item.quantity > 1 ? "x" + item.quantity : "")) +
170
+ "]");
171
+ }, "");
172
+ const queueStates = this.queueStates
173
+ .filter((queueState) => queueState.items.length > 0)
174
+ .map((queueState) => {
175
+ const queueString = queueState.items
176
+ .map((item) => item.unit.name + "(" + Math.round(item.priority * 10) / 10 + ")")
177
+ .join(", ");
178
+ return `${queueTypeToName(queueState.queue)} Prios: ${queueString}\n`;
179
+ })
180
+ .join("");
181
+ return `Production: ${productionState}\n${queueStates}`;
182
+ }
156
183
  }
157
184
  //# sourceMappingURL=queueController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queueController.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/queueController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queueController.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/queueController.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,9 @@
1
+ const SOVIET_COUNTRY_NAMES = ["Africans", "Arabs", "Confederation", "Russians"];
2
+ export const isSoviet = (countryName) => SOVIET_COUNTRY_NAMES.includes(countryName);
3
+ export const isOwnedByNeutral = (unitData) => unitData?.owner === "@@NEUTRAL@@";
4
+ // Return if the given unit would have .isSelectableCombatant = true.
5
+ // Usable on GameObjectData (which is faster to get than TechnoRules)
6
+ export const isSelectableCombatant = (rules) => !!rules?.rules?.isSelectableCombatant;
1
7
  // Thanks use-strict!
2
8
  export function formatTimeDuration(timeSeconds, skipZeroHours = false) {
3
9
  let h = Math.floor(timeSeconds / 3600);
@@ -12,6 +18,21 @@ export function pad(n, format = "0000") {
12
18
  return format.substring(0, format.length - str.length) + str;
13
19
  }
14
20
  // So we don't need lodash
21
+ export function minBy(array, predicate) {
22
+ if (array.length === 0) {
23
+ return null;
24
+ }
25
+ let minIdx = 0;
26
+ let minVal = predicate(array[0]);
27
+ for (let i = 1; i < array.length; ++i) {
28
+ const newVal = predicate(array[i]);
29
+ if (minVal === null || (newVal !== null && newVal < minVal)) {
30
+ minIdx = i;
31
+ minVal = newVal;
32
+ }
33
+ }
34
+ return array[minIdx];
35
+ }
15
36
  export function maxBy(array, predicate) {
16
37
  if (array.length === 0) {
17
38
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/bot/logic/common/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/bot/logic/common/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export const getAlliedCompositions = (gameApi, playerData, matchAwareness) => {
2
+ const hasWarFactory = gameApi.getVisibleUnits(playerData.name, "self", (r) => r.name === "GAWEAP").length > 0;
3
+ const hasAirforce = gameApi.getVisibleUnits(playerData.name, "self", (r) => r.name === "GAAIRC" || r.name === "AMRADR").length > 0;
4
+ const hasBattleLab = gameApi.getVisibleUnits(playerData.name, "self", (r) => r.name === "GATECH").length > 0;
5
+ const includeInfantry = !hasAirforce && !hasBattleLab;
6
+ return {
7
+ ...(includeInfantry && { E1: 5 }),
8
+ ...(hasWarFactory && { MTNK: 3, FV: 2 }),
9
+ ...(hasAirforce && { JUMPJET: 6 }),
10
+ ...(hasBattleLab && { SREF: 2, MGTK: 3 }),
11
+ };
12
+ };
13
+ //# sourceMappingURL=alliedCompositions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alliedCompositions.js","sourceRoot":"","sources":["../../../../src/bot/logic/composition/alliedCompositions.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACjC,OAAgB,EAChB,UAAsB,EACtB,cAA8B,EACf,EAAE;IACjB,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9G,MAAM,WAAW,GACb,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACnH,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAE7G,MAAM,eAAe,GAAG,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC;IACtD,OAAO;QACH,GAAG,CAAC,eAAe,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,aAAa,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACxC,GAAG,CAAC,WAAW,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAClC,GAAG,CAAC,YAAY,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;KAC5C,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/bot/logic/composition/common.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ export const getSovietComposition = (gameApi, playerData, matchAwareness) => {
2
+ const hasWarFactory = gameApi.getVisibleUnits(playerData.name, "self", (r) => r.name === "NAWEAP").length > 0;
3
+ const hasRadar = gameApi.getVisibleUnits(playerData.name, "self", (r) => r.name === "NARADR").length > 0;
4
+ const hasBattleLab = gameApi.getVisibleUnits(playerData.name, "self", (r) => r.name === "NATECH").length > 0;
5
+ const includeInfantry = !hasBattleLab;
6
+ return {
7
+ ...(includeInfantry && { E2: 10 }),
8
+ ...(hasWarFactory && { HTNK: 3, HTK: 2 }),
9
+ ...(hasRadar && { V3: 1 }),
10
+ ...(hasBattleLab && { APOC: 2 }),
11
+ };
12
+ };
13
+ //# sourceMappingURL=sovietCompositions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sovietCompositions.js","sourceRoot":"","sources":["../../../../src/bot/logic/composition/sovietCompositions.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,OAAgB,EAChB,UAAsB,EACtB,cAA8B,EACf,EAAE;IACjB,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9G,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACzG,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAE7G,MAAM,eAAe,GAAG,CAAC,YAAY,CAAC;IACtC,OAAO;QACH,GAAG,CAAC,eAAe,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAClC,GAAG,CAAC,aAAa,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,YAAY,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;KACnC,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,92 @@
1
+ // Used to group related actions together to minimise actionApi calls. For example, if multiple units
2
+ import { Vector2 } from "@chronodivide/game-api";
3
+ import { groupBy } from "../common/utils.js";
4
+ // are ordered to move to the same location, all of them will be ordered to move in a single action.
5
+ export class BatchableAction {
6
+ constructor(_unitId, _orderType, _point, _targetId,
7
+ // If you don't want this action to be swallowed by dedupe, provide a unique nonce
8
+ _nonce = 0) {
9
+ this._unitId = _unitId;
10
+ this._orderType = _orderType;
11
+ this._point = _point;
12
+ this._targetId = _targetId;
13
+ this._nonce = _nonce;
14
+ }
15
+ static noTarget(unitId, orderType, nonce = 0) {
16
+ return new BatchableAction(unitId, orderType, undefined, undefined, nonce);
17
+ }
18
+ static toPoint(unitId, orderType, point, nonce = 0) {
19
+ return new BatchableAction(unitId, orderType, point, undefined);
20
+ }
21
+ static toTargetId(unitId, orderType, targetId, nonce = 0) {
22
+ return new BatchableAction(unitId, orderType, undefined, targetId, nonce);
23
+ }
24
+ get unitId() {
25
+ return this._unitId;
26
+ }
27
+ get orderType() {
28
+ return this._orderType;
29
+ }
30
+ get point() {
31
+ return this._point;
32
+ }
33
+ get targetId() {
34
+ return this._targetId;
35
+ }
36
+ isSameAs(other) {
37
+ if (this._unitId !== other._unitId) {
38
+ return false;
39
+ }
40
+ if (this._orderType !== other._orderType) {
41
+ return false;
42
+ }
43
+ if (this._point !== other._point) {
44
+ return false;
45
+ }
46
+ if (this._targetId !== other._targetId) {
47
+ return false;
48
+ }
49
+ if (this._nonce !== other._nonce) {
50
+ return false;
51
+ }
52
+ return true;
53
+ }
54
+ }
55
+ export class ActionBatcher {
56
+ constructor() {
57
+ this.actions = [];
58
+ }
59
+ push(action) {
60
+ this.actions.push(action);
61
+ }
62
+ resolve(actionsApi) {
63
+ const groupedCommands = groupBy(this.actions, (action) => action.orderType.valueOf().toString());
64
+ const vectorToStr = (v) => v.x + "," + v.y;
65
+ const strToVector = (str) => {
66
+ const [x, y] = str.split(",");
67
+ return new Vector2(parseInt(x), parseInt(y));
68
+ };
69
+ // Group by command type.
70
+ Object.entries(groupedCommands).forEach(([commandValue, commands]) => {
71
+ // i hate this
72
+ const commandType = parseInt(commandValue);
73
+ // Group by command target ID.
74
+ const byTarget = groupBy(commands.filter((command) => !!command.targetId), (command) => command.targetId?.toString());
75
+ Object.entries(byTarget).forEach(([targetId, unitCommands]) => {
76
+ actionsApi.orderUnits(unitCommands.map((command) => command.unitId), commandType, parseInt(targetId));
77
+ });
78
+ // Group by position (the vector is encoded as a string of the form "x,y")
79
+ const byPosition = groupBy(commands.filter((command) => !!command.point), (command) => vectorToStr(command.point));
80
+ Object.entries(byPosition).forEach(([point, unitCommands]) => {
81
+ const vector = strToVector(point);
82
+ actionsApi.orderUnits(unitCommands.map((command) => command.unitId), commandType, vector.x, vector.y);
83
+ });
84
+ // Actions with no targets
85
+ const noTargets = commands.filter((command) => !command.targetId && !command.point);
86
+ if (noTargets.length > 0) {
87
+ actionsApi.orderUnits(noTargets.map((action) => action.unitId), commandType);
88
+ }
89
+ });
90
+ }
91
+ }
92
+ //# sourceMappingURL=actionBatcher.js.map