diff --git a/src/core/configuration/Config.ts b/src/core/configuration/Config.ts index aac2822b0..96bf6052f 100644 --- a/src/core/configuration/Config.ts +++ b/src/core/configuration/Config.ts @@ -160,7 +160,7 @@ export interface Config { defaultDonationAmount(sender: Player): number; unitInfo(type: UnitType): UnitInfo; tradeShipGold(dist: number): Gold; - tradeShipSpawnRate(): number; + tradeShipSpawnRate(numberOfPorts: number): number; defensePostRange(): number; defensePostDefenseBonus(): number; falloutDefenseModifier(percentOfFallout: number): number; diff --git a/src/core/configuration/DefaultConfig.ts b/src/core/configuration/DefaultConfig.ts index 741577742..82b11b8f8 100644 --- a/src/core/configuration/DefaultConfig.ts +++ b/src/core/configuration/DefaultConfig.ts @@ -156,7 +156,12 @@ export class DefaultConfig implements Config { tradeShipGold(dist: number): Gold { return 10000 + 150 * Math.pow(dist, 1.1); } - tradeShipSpawnRate(): number { + tradeShipSpawnRate(numberOfPorts: number): number { + if (numberOfPorts <= 3) return 180; + if (numberOfPorts <= 5) return 250; + if (numberOfPorts <= 8) return 350; + if (numberOfPorts <= 10) return 400; + if (numberOfPorts <= 12) return 450; return 500; } diff --git a/src/core/execution/PortExecution.ts b/src/core/execution/PortExecution.ts index a6f85d89f..5aafe9cee 100644 --- a/src/core/execution/PortExecution.ts +++ b/src/core/execution/PortExecution.ts @@ -66,7 +66,10 @@ export class PortExecution implements Execution { return; } - if (!this.random.chance(this.mg.config().tradeShipSpawnRate())) { + const totalNbOfPorts = this.mg.units(UnitType.Port).length; + if ( + !this.random.chance(this.mg.config().tradeShipSpawnRate(totalNbOfPorts)) + ) { return; }