bugfix: transport ship was using start troops, not ship troops to determine attack (#1576)

## Description:

This caused an issue when getting nuked, the transport ships were not
decreasing

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [x] I have added relevant tests to the test directory
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I have read and accepted the CLA agreement (only required once).

## Please put your Discord username so you can be contacted if a bug or
regression is found:

evan
This commit is contained in:
evanpelle
2025-07-25 20:40:55 -07:00
committed by GitHub
parent 58fa523c52
commit 19274ac10a
+12 -10
View File
@@ -37,7 +37,7 @@ export class TransportShipExecution implements Execution {
private attacker: Player, private attacker: Player,
private targetID: PlayerID | null, private targetID: PlayerID | null,
private ref: TileRef, private ref: TileRef,
private troops: number, private startTroops: number,
private src: TileRef | null, private src: TileRef | null,
) {} ) {}
@@ -88,11 +88,11 @@ export class TransportShipExecution implements Execution {
this.target = mg.player(this.targetID); this.target = mg.player(this.targetID);
} }
this.troops ??= this.mg this.startTroops ??= this.mg
.config() .config()
.boatAttackAmount(this.attacker, this.target); .boatAttackAmount(this.attacker, this.target);
this.troops = Math.min(this.troops, this.attacker.troops()); this.startTroops = Math.min(this.startTroops, this.attacker.troops());
this.dst = targetTransportTile(this.mg, this.ref); this.dst = targetTransportTile(this.mg, this.ref);
if (this.dst === null) { if (this.dst === null) {
@@ -130,7 +130,7 @@ export class TransportShipExecution implements Execution {
} }
this.boat = this.attacker.buildUnit(UnitType.TransportShip, this.src, { this.boat = this.attacker.buildUnit(UnitType.TransportShip, this.src, {
troops: this.troops, troops: this.startTroops,
}); });
// Notify the target player about the incoming naval invasion // Notify the target player about the incoming naval invasion
@@ -145,7 +145,9 @@ export class TransportShipExecution implements Execution {
} }
// Record stats // Record stats
this.mg.stats().boatSendTroops(this.attacker, this.target, this.troops); this.mg
.stats()
.boatSendTroops(this.attacker, this.target, this.boat.troops());
} }
tick(ticks: number) { tick(ticks: number) {
@@ -180,16 +182,16 @@ export class TransportShipExecution implements Execution {
// Record stats // Record stats
this.mg this.mg
.stats() .stats()
.boatArriveTroops(this.attacker, this.target, this.troops); .boatArriveTroops(this.attacker, this.target, this.boat.troops());
return; return;
} }
this.attacker.conquer(this.dst); this.attacker.conquer(this.dst);
if (this.target.isPlayer() && this.attacker.isFriendly(this.target)) { if (this.target.isPlayer() && this.attacker.isFriendly(this.target)) {
this.attacker.addTroops(this.troops); this.attacker.addTroops(this.boat.troops());
} else { } else {
this.mg.addExecution( this.mg.addExecution(
new AttackExecution( new AttackExecution(
this.troops, this.boat.troops(),
this.attacker, this.attacker,
this.targetID, this.targetID,
this.dst, this.dst,
@@ -203,7 +205,7 @@ export class TransportShipExecution implements Execution {
// Record stats // Record stats
this.mg this.mg
.stats() .stats()
.boatArriveTroops(this.attacker, this.target, this.troops); .boatArriveTroops(this.attacker, this.target, this.boat.troops());
return; return;
case PathFindResultType.NextTile: case PathFindResultType.NextTile:
this.boat.move(result.node); this.boat.move(result.node);
@@ -213,7 +215,7 @@ export class TransportShipExecution implements Execution {
case PathFindResultType.PathNotFound: case PathFindResultType.PathNotFound:
// TODO: add to poisoned port list // TODO: add to poisoned port list
console.warn(`path not found to dst`); console.warn(`path not found to dst`);
this.attacker.addTroops(this.troops); this.attacker.addTroops(this.boat.troops());
this.boat.delete(false); this.boat.delete(false);
this.active = false; this.active = false;
return; return;