@supalosa/chronodivide-bot 0.2.2 → 0.3.1
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.
- package/.prettierrc +5 -5
- package/TODO.md +18 -0
- package/dist/bot/bot.js +4 -4
- package/dist/bot/bot.js.map +1 -1
- package/dist/bot/logic/awareness.js +8 -8
- package/dist/bot/logic/awareness.js.map +1 -1
- package/dist/bot/logic/building/ArtilleryUnit.js +30 -9
- package/dist/bot/logic/building/antiGroundStaticDefence.js +2 -2
- package/dist/bot/logic/building/antiGroundStaticDefence.js.map +1 -1
- package/dist/bot/logic/building/artilleryUnit.js.map +1 -0
- package/dist/bot/logic/building/basicAirUnit.js +3 -2
- package/dist/bot/logic/building/basicAirUnit.js.map +1 -1
- package/dist/bot/logic/building/basicBuilding.js +1 -1
- package/dist/bot/logic/building/basicBuilding.js.map +1 -1
- package/dist/bot/logic/building/basicGroundUnit.js +4 -3
- package/dist/bot/logic/building/basicGroundUnit.js.map +1 -1
- package/dist/bot/logic/building/building.js +11 -55
- package/dist/bot/logic/building/buildingRules.js +162 -0
- package/dist/bot/logic/building/buildingRules.js.map +1 -0
- package/dist/bot/logic/building/harvester.js.map +1 -1
- package/dist/bot/logic/building/massedAntiGroundUnit.js +20 -0
- package/dist/bot/logic/building/powerPlant.js +1 -1
- package/dist/bot/logic/building/powerPlant.js.map +1 -1
- package/dist/bot/logic/building/queueController.js +1 -1
- package/dist/bot/logic/building/queueController.js.map +1 -1
- package/dist/bot/logic/building/queues.js +19 -0
- package/dist/bot/logic/building/resourceCollectionBuilding.js +5 -3
- package/dist/bot/logic/building/resourceCollectionBuilding.js.map +1 -1
- package/dist/bot/logic/common/scout.js +49 -32
- package/dist/bot/logic/common/scout.js.map +1 -1
- package/dist/bot/logic/common/utils.js +50 -1
- package/dist/bot/logic/common/utils.js.map +1 -1
- package/dist/bot/logic/knowledge.js +1 -0
- package/dist/bot/logic/map/map.js +17 -19
- package/dist/bot/logic/map/map.js.map +1 -1
- package/dist/bot/logic/map/sector.js +10 -13
- package/dist/bot/logic/map/sector.js.map +1 -1
- package/dist/bot/logic/mission/basicMission.js +26 -0
- package/dist/bot/logic/mission/expansionMission.js +32 -0
- package/dist/bot/logic/mission/missionFactories.js +2 -0
- package/dist/bot/logic/mission/missionFactories.js.map +1 -1
- package/dist/bot/logic/mission/missions/attackMission.js +4 -4
- package/dist/bot/logic/mission/missions/attackMission.js.map +1 -1
- package/dist/bot/logic/mission/missions/defenceMission.js +2 -1
- package/dist/bot/logic/mission/missions/defenceMission.js.map +1 -1
- package/dist/bot/logic/mission/missions/engineerMission.js +34 -0
- package/dist/bot/logic/mission/missions/engineerMission.js.map +1 -0
- package/dist/bot/logic/mission/missions/retreatMission.js.map +1 -1
- package/dist/bot/logic/squad/behaviours/attackSquad.js +56 -63
- package/dist/bot/logic/squad/behaviours/combatSquad.js +18 -19
- package/dist/bot/logic/squad/behaviours/combatSquad.js.map +1 -1
- package/dist/bot/logic/squad/behaviours/common.js +19 -2
- package/dist/bot/logic/squad/behaviours/common.js.map +1 -1
- package/dist/bot/logic/squad/behaviours/defenceSquad.js +2 -15
- package/dist/bot/logic/squad/behaviours/engineerSquad.js +36 -0
- package/dist/bot/logic/squad/behaviours/engineerSquad.js.map +1 -0
- package/dist/bot/logic/squad/behaviours/retreatSquad.js.map +1 -1
- package/dist/bot/logic/squad/behaviours/scoutingSquad.js +21 -17
- package/dist/bot/logic/squad/behaviours/scoutingSquad.js.map +1 -1
- package/dist/bot/logic/squad/behaviours/squadExpansion.js +31 -0
- package/dist/bot/logic/squad/behaviours/squadScouters.js +8 -0
- package/dist/bot/logic/squad/squad.js +5 -8
- package/dist/bot/logic/squad/squad.js.map +1 -1
- package/dist/bot/logic/squad/squadBehaviour.js.map +1 -1
- package/dist/bot/logic/squad/squadController.js +2 -3
- package/dist/bot/logic/squad/squadController.js.map +1 -1
- package/dist/bot/logic/threat/threatCalculator.js +4 -3
- package/dist/bot/logic/threat/threatCalculator.js.map +1 -1
- package/dist/exampleBot.js +6 -6
- package/dist/exampleBot.js.map +1 -1
- package/package.json +5 -9
- package/src/bot/bot.ts +8 -10
- package/src/bot/logic/awareness.ts +13 -17
- package/src/bot/logic/building/antiGroundStaticDefence.ts +13 -9
- package/src/bot/logic/building/artilleryUnit.ts +65 -0
- package/src/bot/logic/building/basicAirUnit.ts +10 -8
- package/src/bot/logic/building/basicBuilding.ts +1 -1
- package/src/bot/logic/building/basicGroundUnit.ts +4 -4
- package/src/bot/logic/building/{building.ts → buildingRules.ts} +94 -48
- package/src/bot/logic/building/harvester.ts +7 -4
- package/src/bot/logic/building/powerPlant.ts +1 -1
- package/src/bot/logic/building/queueController.ts +1 -1
- package/src/bot/logic/building/resourceCollectionBuilding.ts +8 -12
- package/src/bot/logic/common/scout.ts +83 -38
- package/src/bot/logic/common/utils.ts +65 -1
- package/src/bot/logic/map/map.ts +27 -31
- package/src/bot/logic/map/sector.ts +17 -21
- package/src/bot/logic/mission/missionFactories.ts +2 -0
- package/src/bot/logic/mission/missions/attackMission.ts +27 -27
- package/src/bot/logic/mission/missions/defenceMission.ts +3 -3
- package/src/bot/logic/mission/missions/engineerMission.ts +61 -0
- package/src/bot/logic/mission/missions/retreatMission.ts +2 -2
- package/src/bot/logic/squad/behaviours/combatSquad.ts +24 -26
- package/src/bot/logic/squad/behaviours/common.ts +33 -3
- package/src/bot/logic/squad/behaviours/engineerSquad.ts +53 -0
- package/src/bot/logic/squad/behaviours/retreatSquad.ts +2 -2
- package/src/bot/logic/squad/behaviours/scoutingSquad.ts +26 -28
- package/src/bot/logic/squad/squad.ts +8 -13
- package/src/bot/logic/squad/squadBehaviour.ts +9 -10
- package/src/bot/logic/squad/squadController.ts +2 -5
- package/src/bot/logic/threat/threat.ts +15 -15
- package/src/bot/logic/threat/threatCalculator.ts +4 -3
- package/src/exampleBot.ts +6 -6
- package/dist/bot/logic/awarenessImpl.js +0 -132
- package/dist/bot/logic/awarenessImpl.js.map +0 -1
- package/dist/bot/logic/building/ArtilleryUnit.js.map +0 -1
- package/dist/bot/logic/building/building.js.map +0 -1
- package/src/bot/logic/building/ArtilleryUnit.ts +0 -43
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Mission, disbandMission, noop } from "./mission.js";
|
|
2
|
+
import { SquadExpansion } from "../squad/behaviours/expansionSquad.js";
|
|
3
|
+
import { Squad } from "../squad/squad.js";
|
|
4
|
+
/**
|
|
5
|
+
* A mission that tries to create an MCV (if it doesn't exist) and deploy it somewhere it can be deployed.
|
|
6
|
+
*/
|
|
7
|
+
export class ExpansionMission extends Mission {
|
|
8
|
+
constructor(uniqueName, priority) {
|
|
9
|
+
super(uniqueName, priority);
|
|
10
|
+
this.hadSquad = false;
|
|
11
|
+
}
|
|
12
|
+
onAiUpdate(gameApi, playerData, threatData) {
|
|
13
|
+
if (this.getSquad() === null) {
|
|
14
|
+
if (!this.hadSquad) {
|
|
15
|
+
this.hadSquad = true;
|
|
16
|
+
return this.setSquad(new Squad(this.getUniqueName(), new SquadExpansion(), this));
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
return disbandMission();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
return noop();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class ExpansionMissionFactory {
|
|
28
|
+
maybeCreateMission(gameApi, playerData, threatData, existingMissions) {
|
|
29
|
+
// No auto-expansion missions.
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -2,10 +2,12 @@ import { ExpansionMissionFactory } from "./missions/expansionMission.js";
|
|
|
2
2
|
import { ScoutingMissionFactory } from "./missions/scoutingMission.js";
|
|
3
3
|
import { AttackMissionFactory } from "./missions/attackMission.js";
|
|
4
4
|
import { DefenceMissionFactory } from "./missions/defenceMission.js";
|
|
5
|
+
import { EngineerMissionFactory } from "./missions/engineerMission.js";
|
|
5
6
|
export const createMissionFactories = () => [
|
|
6
7
|
new ExpansionMissionFactory(),
|
|
7
8
|
new ScoutingMissionFactory(),
|
|
8
9
|
new AttackMissionFactory(),
|
|
9
10
|
new DefenceMissionFactory(),
|
|
11
|
+
new EngineerMissionFactory(),
|
|
10
12
|
];
|
|
11
13
|
//# sourceMappingURL=missionFactories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"missionFactories.js","sourceRoot":"","sources":["../../../../src/bot/logic/mission/missionFactories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"missionFactories.js","sourceRoot":"","sources":["../../../../src/bot/logic/mission/missionFactories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAmCvE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC;IACxC,IAAI,uBAAuB,EAAE;IAC7B,IAAI,sBAAsB,EAAE;IAC5B,IAAI,oBAAoB,EAAE;IAC1B,IAAI,qBAAqB,EAAE;IAC3B,IAAI,sBAAsB,EAAE;CAC/B,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { ObjectType } from "@chronodivide/game-api";
|
|
1
|
+
import { ObjectType, Vector2 } from "@chronodivide/game-api";
|
|
2
2
|
import { CombatSquad } from "../../squad/behaviours/combatSquad.js";
|
|
3
3
|
import { Mission, disbandMission, noop } from "../mission.js";
|
|
4
4
|
import { Squad } from "../../squad/squad.js";
|
|
5
5
|
import { RetreatMission } from "./retreatMission.js";
|
|
6
|
-
import
|
|
6
|
+
import { maxBy } from "../../common/utils.js";
|
|
7
7
|
export var AttackFailReason;
|
|
8
8
|
(function (AttackFailReason) {
|
|
9
9
|
AttackFailReason[AttackFailReason["NoTargets"] = 0] = "NoTargets";
|
|
@@ -70,9 +70,9 @@ export class AttackMissionFactory {
|
|
|
70
70
|
.getVisibleUnits(playerData.name, "hostile")
|
|
71
71
|
.map((unitId) => gameApi.getUnitData(unitId))
|
|
72
72
|
.filter((u) => !!u && gameApi.getPlayerData(u.owner).isCombatant);
|
|
73
|
-
const maxUnit =
|
|
73
|
+
const maxUnit = maxBy(enemyUnits, (u) => getTargetWeight(u, tryFocusHarvester));
|
|
74
74
|
if (maxUnit) {
|
|
75
|
-
return
|
|
75
|
+
return new Vector2(maxUnit.tile.rx, maxUnit.tile.ry);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attackMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/attackMission.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"attackMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/attackMission.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Vector2 } from "@chronodivide/game-api";
|
|
1
2
|
import { Mission, disbandMission, noop } from "../mission.js";
|
|
2
3
|
import { Squad } from "../../squad/squad.js";
|
|
3
4
|
import { CombatSquad } from "../../squad/behaviours/combatSquad.js";
|
|
@@ -30,7 +31,7 @@ export class DefenceMission extends Mission {
|
|
|
30
31
|
else {
|
|
31
32
|
const targetUnit = gameApi.getUnitData(foundTargets[0].unitId);
|
|
32
33
|
this.logger(`(Defence Mission ${this.getUniqueName()}): Focused on target ${targetUnit?.name} (${foundTargets.length} found in area ${this.radius})`);
|
|
33
|
-
this.combatSquad?.setAttackArea(
|
|
34
|
+
this.combatSquad?.setAttackArea(new Vector2(foundTargets[0].x, foundTargets[0].y));
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
return noop();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defenceMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/defenceMission.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defenceMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/defenceMission.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { OneTimeMission } from "./oneTimeMission.js";
|
|
2
|
+
import { EngineerSquad } from "../../squad/behaviours/engineerSquad.js";
|
|
3
|
+
/**
|
|
4
|
+
* A mission that tries to send an engineer into a building (e.g. to capture tech building or repair bridge)
|
|
5
|
+
*/
|
|
6
|
+
export class EngineerMission extends OneTimeMission {
|
|
7
|
+
constructor(uniqueName, priority, selectedTechBuilding, logger) {
|
|
8
|
+
super(uniqueName, priority, () => new EngineerSquad(selectedTechBuilding), logger);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
// Only try to capture tech buildings within this radius of the starting point.
|
|
12
|
+
const MAX_TECH_CAPTURE_RADIUS = 50;
|
|
13
|
+
const TECH_CHECK_INTERVAL_TICKS = 300;
|
|
14
|
+
export class EngineerMissionFactory {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.lastCheckAt = 0;
|
|
17
|
+
}
|
|
18
|
+
getName() {
|
|
19
|
+
return "EngineerMissionFactory";
|
|
20
|
+
}
|
|
21
|
+
maybeCreateMissions(gameApi, playerData, matchAwareness, missionController, logger) {
|
|
22
|
+
if (!(gameApi.getCurrentTick() > this.lastCheckAt + TECH_CHECK_INTERVAL_TICKS)) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
this.lastCheckAt = gameApi.getCurrentTick();
|
|
26
|
+
const eligibleTechBuildings = gameApi.getVisibleUnits(playerData.name, "hostile", (r) => r.capturable && r.produceCashAmount > 0);
|
|
27
|
+
eligibleTechBuildings.forEach((techBuildingId) => {
|
|
28
|
+
missionController.addMission(new EngineerMission("capture-" + techBuildingId, 100, techBuildingId, logger));
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
onMissionFailed(gameApi, playerData, matchAwareness, failedMission, failureReason, missionController) {
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=engineerMission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engineerMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/engineerMission.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,cAAc;IAC/C,YAAY,UAAkB,EAAE,QAAgB,EAAE,oBAA4B,EAC1E,MAAmB;QACnB,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC,CAAC;IACvF,CAAC;CACJ;AAED,+EAA+E;AAC/E,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAEtC,MAAM,OAAO,sBAAsB;IAAnC;QACY,gBAAW,GAAG,CAAC,CAAC;IAiC5B,CAAC;IA/BG,OAAO;QACH,OAAO,wBAAwB,CAAC;IACpC,CAAC;IAED,mBAAmB,CACf,OAAgB,EAChB,UAAsB,EACtB,cAA8B,EAC9B,iBAAoC,EACpC,MAAmB;QAEnB,IAAI,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,yBAAyB,CAAC,EAAE;YAC5E,OAAO;SACV;QACD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAElI,qBAAqB,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;YAC7C,iBAAiB,CAAC,UAAU,CAAC,IAAI,eAAe,CAAC,UAAU,GAAG,cAAc,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC;IACP,CAAC;IAED,eAAe,CACX,OAAgB,EAChB,UAAsB,EACtB,cAA8B,EAC9B,aAAsB,EACtB,aAAwB,EACxB,iBAAoC;IAExC,CAAC;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retreatMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/retreatMission.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"retreatMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/retreatMission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAItE,MAAM,OAAO,cAAe,SAAQ,cAAc;IAC9C,YAAY,UAAkB,EAAE,QAAgB,EAAE,cAAuB,EAAE,OAAiB,EAAE,MAAmB;QAC7G,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;IACzF,CAAC;CACJ"}
|
|
@@ -1,45 +1,75 @@
|
|
|
1
1
|
import _ from "lodash";
|
|
2
|
-
import {
|
|
2
|
+
import { MovementZone } from "@chronodivide/game-api";
|
|
3
3
|
import { grabCombatants, noop } from "../squadBehaviour.js";
|
|
4
|
-
import { getDistanceBetweenPoints
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const IDLE_COOLDOWN_TICKS = 15 * 30;
|
|
8
|
-
const TARGET_UPDATE_INTERVAL_TICKS = 4;
|
|
4
|
+
import { getDistanceBetweenPoints } from "../../map/map.js";
|
|
5
|
+
import { manageAttackMicro, manageMoveMicro } from "./common.js";
|
|
6
|
+
const TARGET_UPDATE_INTERVAL_TICKS = 10;
|
|
9
7
|
const GRAB_INTERVAL_TICKS = 10;
|
|
10
8
|
const GRAB_RADIUS = 30;
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
// Units must be in a certain radius of the center of mass before attacking.
|
|
10
|
+
// This scales for number of units in the squad though.
|
|
11
|
+
const MIN_GATHER_RADIUS = 5;
|
|
12
|
+
const GATHER_RATIO = 10;
|
|
13
|
+
var SquadState;
|
|
14
|
+
(function (SquadState) {
|
|
15
|
+
SquadState[SquadState["Gathering"] = 0] = "Gathering";
|
|
16
|
+
SquadState[SquadState["Attacking"] = 1] = "Attacking";
|
|
17
|
+
})(SquadState || (SquadState = {}));
|
|
18
|
+
export class AttackOrDefenceSquad {
|
|
19
|
+
constructor(rallyArea, targetArea, radius) {
|
|
13
20
|
this.rallyArea = rallyArea;
|
|
14
|
-
this.
|
|
21
|
+
this.targetArea = targetArea;
|
|
15
22
|
this.radius = radius;
|
|
16
|
-
this.lastIdleCheck = null;
|
|
17
23
|
this.lastGrab = null;
|
|
18
24
|
this.lastCommand = null;
|
|
25
|
+
this.state = SquadState.Gathering;
|
|
19
26
|
}
|
|
20
|
-
setAttackArea(
|
|
21
|
-
this.
|
|
27
|
+
setAttackArea(targetArea) {
|
|
28
|
+
this.targetArea = targetArea;
|
|
22
29
|
}
|
|
23
30
|
onAiUpdate(gameApi, actionsApi, playerData, squad, matchAwareness) {
|
|
24
31
|
if (!this.lastCommand || gameApi.getCurrentTick() > this.lastCommand + TARGET_UPDATE_INTERVAL_TICKS) {
|
|
32
|
+
this.lastCommand = gameApi.getCurrentTick();
|
|
33
|
+
const centerOfMass = squad.getCenterOfMass();
|
|
34
|
+
const maxDistance = squad.getMaxDistanceToCenterOfMass();
|
|
25
35
|
const units = squad.getUnitsMatching(gameApi, (r) => r.rules.isSelectableCombatant);
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
if (this.state === SquadState.Gathering) {
|
|
37
|
+
// Only use ground units for center of mass.
|
|
38
|
+
const groundUnits = squad.getUnitsMatching(gameApi, (r) => r.rules.isSelectableCombatant &&
|
|
39
|
+
(r.rules.movementZone === MovementZone.Infantry ||
|
|
40
|
+
r.rules.movementZone === MovementZone.Normal ||
|
|
41
|
+
r.rules.movementZone === MovementZone.InfantryDestroyer));
|
|
42
|
+
const requiredGatherRadius = Math.sqrt(groundUnits.length) * GATHER_RATIO + MIN_GATHER_RADIUS;
|
|
43
|
+
if (centerOfMass &&
|
|
44
|
+
maxDistance &&
|
|
45
|
+
gameApi.mapApi.getTile(centerOfMass.x, centerOfMass.y) !== undefined &&
|
|
46
|
+
maxDistance > requiredGatherRadius) {
|
|
47
|
+
units.forEach((unit) => {
|
|
48
|
+
manageMoveMicro(actionsApi, unit, centerOfMass);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this.state = SquadState.Attacking;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const targetPoint = this.targetArea || playerData.startLocation;
|
|
57
|
+
for (const unit of units) {
|
|
58
|
+
if (unit.isIdle) {
|
|
59
|
+
const { rx: x, ry: y } = unit.tile;
|
|
60
|
+
const range = unit.primaryWeapon?.maxRange ?? unit.secondaryWeapon?.maxRange ?? 5;
|
|
61
|
+
const nearbyHostiles = matchAwareness.getHostilesNearPoint(x, y, range * 2);
|
|
62
|
+
const closest = _.minBy(nearbyHostiles, ({ x: hX, y: hY }) => getDistanceBetweenPoints({ x, y }, { x: hX, y: hY }));
|
|
63
|
+
const closestUnit = closest ? gameApi.getUnitData(closest.unitId) ?? null : null;
|
|
64
|
+
if (closestUnit) {
|
|
65
|
+
manageAttackMicro(actionsApi, unit, closestUnit);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
manageMoveMicro(actionsApi, unit, targetPoint);
|
|
69
|
+
}
|
|
39
70
|
}
|
|
40
71
|
}
|
|
41
72
|
}
|
|
42
|
-
this.lastCommand = gameApi.getCurrentTick();
|
|
43
73
|
}
|
|
44
74
|
if (!this.lastGrab || gameApi.getCurrentTick() > this.lastGrab + GRAB_INTERVAL_TICKS) {
|
|
45
75
|
this.lastGrab = gameApi.getCurrentTick();
|
|
@@ -49,41 +79,4 @@ export class AttackSquad {
|
|
|
49
79
|
return noop();
|
|
50
80
|
}
|
|
51
81
|
}
|
|
52
|
-
// Micro methods
|
|
53
|
-
manageMoveMicro(actionsApi, attacker, attackPoint) {
|
|
54
|
-
if (attacker.name === "E1") {
|
|
55
|
-
if (attacker.canMove === false) {
|
|
56
|
-
actionsApi.orderUnits([attacker.id], OrderType.DeploySelected);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
actionsApi.orderUnits([attacker.id], OrderType.AttackMove, attackPoint.x, attackPoint.y);
|
|
60
|
-
}
|
|
61
|
-
manageAttackMicro(actionsApi, attacker, target) {
|
|
62
|
-
const distance = getDistanceBetweenUnits(attacker, target);
|
|
63
|
-
if (attacker.name === "E1") {
|
|
64
|
-
// Para (deployed weapon) range is 5.
|
|
65
|
-
const deployedWeaponRange = attacker.secondaryWeapon?.maxRange || 5;
|
|
66
|
-
actionsApi.orderUnits([attacker.id], OrderType.DeploySelected);
|
|
67
|
-
//console.dir({distance, attacker: attacker.name, canMove: attacker.canMove, primaryMaxRange: attacker.primaryWeapon?.maxRange, secondaryMaxRange: attacker.secondaryWeapon?.maxRange})
|
|
68
|
-
if (attacker.canMove && distance <= deployedWeaponRange * 0.8) {
|
|
69
|
-
actionsApi.orderUnits([attacker.id], OrderType.DeploySelected);
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
else if (!attacker.canMove && distance > deployedWeaponRange) {
|
|
73
|
-
actionsApi.orderUnits([attacker.id], OrderType.DeploySelected);
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
let targetData = target;
|
|
78
|
-
let orderType = OrderType.AttackMove;
|
|
79
|
-
const primaryWeaponRange = attacker.primaryWeapon?.maxRange || 5;
|
|
80
|
-
if (targetData?.type == ObjectType.Building && distance < primaryWeaponRange * 0.8) {
|
|
81
|
-
orderType = OrderType.Attack;
|
|
82
|
-
}
|
|
83
|
-
else if (targetData?.rules.canDisguise) {
|
|
84
|
-
// Special case for mirage tank/spy as otherwise they just sit next to it.
|
|
85
|
-
orderType = OrderType.Attack;
|
|
86
|
-
}
|
|
87
|
-
actionsApi.orderUnits([attacker.id], orderType, target.id);
|
|
88
|
-
}
|
|
89
82
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { MovementZone } from "@chronodivide/game-api";
|
|
1
|
+
import { GameMath, MovementZone } from "@chronodivide/game-api";
|
|
3
2
|
import { grabCombatants, noop } from "../squadBehaviour.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { getAttackWeight, manageAttackMicro, manageMoveMicro } from "./common.js";
|
|
4
|
+
import { maxBy } from "../../common/utils.js";
|
|
6
5
|
const TARGET_UPDATE_INTERVAL_TICKS = 10;
|
|
7
6
|
const GRAB_INTERVAL_TICKS = 10;
|
|
8
7
|
const GRAB_RADIUS = 20;
|
|
@@ -36,7 +35,8 @@ export class CombatSquad {
|
|
|
36
35
|
this.targetArea = targetArea;
|
|
37
36
|
}
|
|
38
37
|
onAiUpdate(gameApi, actionsApi, playerData, squad, matchAwareness, logger) {
|
|
39
|
-
if (squad.getUnitIds().length > 0 &&
|
|
38
|
+
if (squad.getUnitIds().length > 0 &&
|
|
39
|
+
(!this.lastCommand || gameApi.getCurrentTick() > this.lastCommand + TARGET_UPDATE_INTERVAL_TICKS)) {
|
|
40
40
|
this.lastCommand = gameApi.getCurrentTick();
|
|
41
41
|
const centerOfMass = squad.getCenterOfMass();
|
|
42
42
|
const maxDistance = squad.getMaxDistanceToCenterOfMass();
|
|
@@ -47,7 +47,7 @@ export class CombatSquad {
|
|
|
47
47
|
r.rules.movementZone === MovementZone.Normal ||
|
|
48
48
|
r.rules.movementZone === MovementZone.InfantryDestroyer));
|
|
49
49
|
if (this.state === SquadState.Gathering) {
|
|
50
|
-
const requiredGatherRadius =
|
|
50
|
+
const requiredGatherRadius = GameMath.sqrt(groundUnits.length) * GATHER_RATIO + MIN_GATHER_RADIUS;
|
|
51
51
|
if (centerOfMass &&
|
|
52
52
|
maxDistance &&
|
|
53
53
|
gameApi.mapApi.getTile(centerOfMass.x, centerOfMass.y) !== undefined &&
|
|
@@ -63,7 +63,7 @@ export class CombatSquad {
|
|
|
63
63
|
}
|
|
64
64
|
else {
|
|
65
65
|
const targetPoint = this.targetArea || playerData.startLocation;
|
|
66
|
-
const requiredGatherRadius =
|
|
66
|
+
const requiredGatherRadius = GameMath.sqrt(groundUnits.length) * GATHER_RATIO + MAX_GATHER_RADIUS;
|
|
67
67
|
if (centerOfMass &&
|
|
68
68
|
maxDistance &&
|
|
69
69
|
gameApi.mapApi.getTile(centerOfMass.x, centerOfMass.y) !== undefined &&
|
|
@@ -74,18 +74,17 @@ export class CombatSquad {
|
|
|
74
74
|
return noop();
|
|
75
75
|
}
|
|
76
76
|
for (const unit of units) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
77
|
+
const { rx: x, ry: y } = unit.tile;
|
|
78
|
+
const range = unit.primaryWeapon?.maxRange ?? unit.secondaryWeapon?.maxRange ?? 5;
|
|
79
|
+
const nearbyHostiles = matchAwareness
|
|
80
|
+
.getHostilesNearPoint(x, y, range * 2)
|
|
81
|
+
.map(({ unitId }) => gameApi.getUnitData(unitId));
|
|
82
|
+
const bestUnit = maxBy(nearbyHostiles, (target) => getAttackWeight(unit, target));
|
|
83
|
+
if (bestUnit) {
|
|
84
|
+
manageAttackMicro(actionsApi, unit, bestUnit);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
manageMoveMicro(actionsApi, unit, targetPoint);
|
|
89
88
|
}
|
|
90
89
|
}
|
|
91
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combatSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/combatSquad.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"combatSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/combatSquad.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AttackState, ObjectType, OrderType, StanceType } from "@chronodivide/game-api";
|
|
2
|
-
import { getDistanceBetweenUnits } from "../../map/map.js";
|
|
1
|
+
import { AttackState, ObjectType, OrderType, StanceType, Vector2, ZoneType, } from "@chronodivide/game-api";
|
|
2
|
+
import { getDistanceBetweenPoints, getDistanceBetweenUnits } from "../../map/map.js";
|
|
3
3
|
// Micro methods
|
|
4
4
|
export function manageMoveMicro(actionsApi, attacker, attackPoint) {
|
|
5
5
|
if (attacker.name === "E1") {
|
|
@@ -37,4 +37,21 @@ export function manageAttackMicro(actionsApi, attacker, target) {
|
|
|
37
37
|
}
|
|
38
38
|
actionsApi.orderUnits([attacker.id], orderType, target.id);
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
*
|
|
42
|
+
* @param attacker
|
|
43
|
+
* @param target
|
|
44
|
+
* @returns A number describing the weight of the given target for the attacker, or null if it should not attack it.
|
|
45
|
+
*/
|
|
46
|
+
export function getAttackWeight(attacker, target) {
|
|
47
|
+
const { rx: x, ry: y } = attacker.tile;
|
|
48
|
+
const { rx: hX, ry: hY } = target.tile;
|
|
49
|
+
if (!attacker.primaryWeapon?.projectileRules.isAntiAir && target.zone === ZoneType.Air) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
if (!attacker.primaryWeapon?.projectileRules.isAntiGround && target.zone === ZoneType.Ground) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
return 1000000 - getDistanceBetweenPoints(new Vector2(x, y), new Vector2(hX, hY));
|
|
56
|
+
}
|
|
40
57
|
//# sourceMappingURL=common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/common.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,WAAW,EACX,UAAU,EACV,SAAS,EACT,UAAU,EAEV,OAAO,EACP,QAAQ,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAErF,gBAAgB;AAChB,MAAM,UAAU,eAAe,CAAC,UAAsB,EAAE,QAAkB,EAAE,WAAoB;IAC5F,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE;QACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC;QAC3D,IAAI,UAAU,EAAE;YACZ,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;SAClE;KACJ;IACD,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAsB,EAAE,QAAkB,EAAE,MAAgB;IAC1F,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE;QACxB,qCAAqC;QACrC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,eAAe,EAAE,QAAQ,IAAI,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC;QAC3D,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,IAAI,mBAAmB,IAAI,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,SAAS,CAAC,EAAE;YACpG,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;YAC/D,OAAO;SACV;aAAM,IAAI,UAAU,IAAI,QAAQ,GAAG,mBAAmB,EAAE;YACrD,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;YAC/D,OAAO;SACV;KACJ;IACD,IAAI,UAAU,GAAG,MAAM,CAAC;IACxB,IAAI,SAAS,GAAc,SAAS,CAAC,MAAM,CAAC;IAC5C,MAAM,kBAAkB,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,IAAI,CAAC,CAAC;IACjE,IAAI,UAAU,EAAE,IAAI,IAAI,UAAU,CAAC,QAAQ,IAAI,QAAQ,GAAG,kBAAkB,GAAG,GAAG,EAAE;QAChF,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;KAChC;SAAM,IAAI,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE;QACtC,0EAA0E;QAC1E,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;KAChC;IACD,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB,EAAE,MAAgB;IAChE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;IACvC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAEvC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,GAAG,EAAE;QACpF,OAAO,IAAI,CAAC;KACf;IAED,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,EAAE;QAC1F,OAAO,IAAI,CAAC;KACf;IAED,OAAO,OAAO,GAAG,wBAAwB,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACtF,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _ from "lodash";
|
|
2
|
-
import { OrderType, } from "@chronodivide/game-api";
|
|
3
2
|
import { disband, grabCombatants } from "../squadBehaviour.js";
|
|
4
3
|
import { getDistanceBetween, getDistanceBetweenUnits } from "../../map/map.js";
|
|
4
|
+
import { manageAttackMicro } from "./common.js";
|
|
5
5
|
// If no enemies are seen in a circle IDLE_CHECK_RADIUS*radius for IDLE_COOLDOWN_TICKS ticks, the mission is disbanded.
|
|
6
6
|
const IDLE_CHECK_RADIUS_RATIO = 2;
|
|
7
7
|
const IDLE_COOLDOWN_TICKS = 15 * 30;
|
|
@@ -39,23 +39,10 @@ export class DefenceSquad {
|
|
|
39
39
|
distance: getDistanceBetweenUnits(defender, enemy),
|
|
40
40
|
})), "distance");
|
|
41
41
|
if (closestEnemy) {
|
|
42
|
-
|
|
42
|
+
manageAttackMicro(actionsApi, defender, closestEnemy.enemy);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
});
|
|
46
46
|
return grabCombatants(this.defenceArea, this.radius * GRAB_RADIUS);
|
|
47
47
|
}
|
|
48
|
-
// Micro methods
|
|
49
|
-
manageMicro(actionsApi, defender, closestEnemy, distance) {
|
|
50
|
-
if (defender.name === "E1") {
|
|
51
|
-
// Para (deployed weapon) range is 5.
|
|
52
|
-
if (defender.canMove && distance <= 4) {
|
|
53
|
-
actionsApi.orderUnits([defender.id], OrderType.DeploySelected);
|
|
54
|
-
}
|
|
55
|
-
else if (!defender.canMove && distance >= 5) {
|
|
56
|
-
actionsApi.orderUnits([defender.id], OrderType.DeploySelected);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
actionsApi.orderUnits([defender.id], OrderType.AttackMove, closestEnemy.tile.rx, closestEnemy.tile.ry);
|
|
60
|
-
}
|
|
61
48
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { OrderType } from "@chronodivide/game-api";
|
|
2
|
+
import { disband, noop, requestUnits } from "../squadBehaviour.js";
|
|
3
|
+
const CAPTURE_COOLDOWN_TICKS = 30;
|
|
4
|
+
// Capture squad
|
|
5
|
+
export class EngineerSquad {
|
|
6
|
+
/**
|
|
7
|
+
* @param captureTarget ID of the target to try and capture/send engineer into.
|
|
8
|
+
*/
|
|
9
|
+
constructor(captureTarget) {
|
|
10
|
+
this.captureTarget = captureTarget;
|
|
11
|
+
this.hasAttemptedCaptureWith = null;
|
|
12
|
+
}
|
|
13
|
+
;
|
|
14
|
+
onAiUpdate(gameApi, actionsApi, playerData, squad, matchAwareness) {
|
|
15
|
+
const engineerTypes = ["ENGINEER", "SENGINEER"];
|
|
16
|
+
const engineers = squad.getUnitsOfTypes(gameApi, ...engineerTypes);
|
|
17
|
+
if (engineers.length === 0) {
|
|
18
|
+
// Perhaps we deployed already (or the unit was destroyed), end the mission.
|
|
19
|
+
if (this.hasAttemptedCaptureWith !== null) {
|
|
20
|
+
return disband();
|
|
21
|
+
}
|
|
22
|
+
return requestUnits(engineerTypes, 100);
|
|
23
|
+
}
|
|
24
|
+
else if (!this.hasAttemptedCaptureWith ||
|
|
25
|
+
gameApi.getCurrentTick() > this.hasAttemptedCaptureWith.gameTick + CAPTURE_COOLDOWN_TICKS) {
|
|
26
|
+
actionsApi.orderUnits(engineers.map((engineer) => engineer.id), OrderType.Capture, this.captureTarget);
|
|
27
|
+
// Add a cooldown to deploy attempts.
|
|
28
|
+
this.hasAttemptedCaptureWith = {
|
|
29
|
+
unitId: engineers[0].id,
|
|
30
|
+
gameTick: gameApi.getCurrentTick(),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return noop();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=engineerSquad.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engineerSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/engineerSquad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAwB,MAAM,wBAAwB,CAAC;AAE9F,OAAO,EAA+B,OAAO,EAAE,IAAI,EAAwB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGtH,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,gBAAgB;AAChB,MAAM,OAAO,aAAa;IAMtB;;OAEG;IACH,YAAoB,aAAqB;QAArB,kBAAa,GAAb,aAAa,CAAQ;QARjC,4BAAuB,GAGpB,IAAI,CAAC;IAMhB,CAAC;IAAA,CAAC;IAEK,UAAU,CACb,OAAgB,EAChB,UAAsB,EACtB,UAAsB,EACtB,KAAY,EACZ,cAA8B;QAE9B,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC;QACnE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,4EAA4E;YAC5E,IAAI,IAAI,CAAC,uBAAuB,KAAK,IAAI,EAAE;gBACvC,OAAO,OAAO,EAAE,CAAC;aACpB;YACD,OAAO,YAAY,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;SAC3C;aAAM,IACH,CAAC,IAAI,CAAC,uBAAuB;YAC7B,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,GAAG,sBAAsB,EAC3F;YACE,UAAU,CAAC,UAAU,CACjB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EACxC,SAAS,CAAC,OAAO,EACjB,IAAI,CAAC,aAAa,CACrB,CAAC;YACF,qCAAqC;YACrC,IAAI,CAAC,uBAAuB,GAAG;gBAC3B,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;gBACvB,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE;aACrC,CAAC;SACL;QACD,OAAO,IAAI,EAAE,CAAC;IAClB,CAAC;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retreatSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/retreatSquad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,
|
|
1
|
+
{"version":3,"file":"retreatSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/retreatSquad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAuB,MAAM,wBAAwB,CAAC;AAG7F,OAAO,EAA+B,OAAO,EAAQ,oBAAoB,EAAgB,MAAM,sBAAsB,CAAC;AAGtH,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC,MAAM,OAAO,YAAY;IAGrB,YACY,OAAiB,EACjB,cAAuB;QADvB,YAAO,GAAP,OAAO,CAAU;QACjB,mBAAc,GAAd,cAAc,CAAS;QAJ3B,cAAS,GAAkB,IAAI,CAAC;IAKrC,CAAC;IAEG,UAAU,CACb,OAAgB,EAChB,UAAsB,EACtB,UAAsB,EACtB,KAAY,EACZ,cAA8B;QAE9B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;SAC7C;QACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,gEAAgE;YAChE,UAAU,CAAC,UAAU,CACjB,KAAK,CAAC,UAAU,EAAE,EAClB,SAAS,CAAC,UAAU,EACpB,IAAI,CAAC,cAAc,CAAC,CAAC,EACrB,IAAI,CAAC,cAAc,CAAC,CAAC,CACxB,CAAC;YACF,OAAO,OAAO,EAAE,CAAC;SACpB;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE;YACnE,sFAAsF;YACtF,OAAO,OAAO,EAAE,CAAC;SACpB;aAAM;YACH,OAAO,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SACnD;IACL,CAAC;CACJ"}
|