mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 17:00:16 +00:00
Have trains produce more gold (#1759)
During the play test, trains did not produce enough gold. So increase gold, and give 4x bonus for allies. - [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). regression is found: evan
This commit is contained in:
committed by
Scott Anderson
parent
70b7464a4b
commit
0e0ec67dcd
@@ -133,7 +133,7 @@ export type Config = {
|
||||
unitInfo(type: UnitType): UnitInfo;
|
||||
tradeShipGold(dist: number, numPorts: number): Gold;
|
||||
tradeShipSpawnRate(numberOfPorts: number): number;
|
||||
trainGold(): Gold;
|
||||
trainGold(isFriendly: boolean): Gold;
|
||||
trainSpawnRate(numberOfStations: number): number;
|
||||
trainStationMinRange(): number;
|
||||
trainStationMaxRange(): number;
|
||||
|
||||
@@ -336,9 +336,10 @@ export class DefaultConfig implements Config {
|
||||
trainSpawnRate(numberOfStations: number): number {
|
||||
return Math.min(1400, Math.round(40 * Math.pow(numberOfStations, 0.5)));
|
||||
}
|
||||
trainGold(): Gold {
|
||||
return BigInt(4_000);
|
||||
trainGold(isFriendly: boolean): Gold {
|
||||
return isFriendly ? 100_000n : 25_000n;
|
||||
}
|
||||
|
||||
trainStationMinRange(): number {
|
||||
return 15;
|
||||
}
|
||||
|
||||
@@ -18,19 +18,18 @@ type TrainStopHandler = {
|
||||
* Behavior to be defined
|
||||
*/
|
||||
class CityStopHandler implements TrainStopHandler {
|
||||
private factor = BigInt(2);
|
||||
onStop(
|
||||
mg: Game,
|
||||
station: TrainStation,
|
||||
trainExecution: TrainExecution,
|
||||
): void {
|
||||
const level = BigInt(station.unit.level() + 1);
|
||||
let goldBonus = (mg.config().trainGold() * level) / this.factor;
|
||||
const stationOwner = station.unit.owner();
|
||||
const trainOwner = trainExecution.owner();
|
||||
const isFriendly = stationOwner.isFriendly(trainOwner);
|
||||
const goldBonus = mg.config().trainGold(isFriendly) * level;
|
||||
// Share revenue with the station owner if it's not the current player
|
||||
if (stationOwner.isFriendly(trainOwner)) {
|
||||
goldBonus += BigInt(1_000); // Bonus for everybody when trading with an ally!
|
||||
if (isFriendly) {
|
||||
stationOwner.addGold(goldBonus, station.tile());
|
||||
}
|
||||
trainOwner.addGold(goldBonus, station.tile());
|
||||
@@ -38,7 +37,6 @@ class CityStopHandler implements TrainStopHandler {
|
||||
}
|
||||
|
||||
class PortStopHandler implements TrainStopHandler {
|
||||
private factor = BigInt(2);
|
||||
constructor(private random: PseudoRandom) {}
|
||||
onStop(
|
||||
mg: Game,
|
||||
@@ -46,12 +44,12 @@ class PortStopHandler implements TrainStopHandler {
|
||||
trainExecution: TrainExecution,
|
||||
): void {
|
||||
const level = BigInt(station.unit.level() + 1);
|
||||
let goldBonus = (mg.config().trainGold() * level) / this.factor;
|
||||
const stationOwner = station.unit.owner();
|
||||
const trainOwner = trainExecution.owner();
|
||||
// Share revenue with the station owner if it's not the current player
|
||||
if (stationOwner.isFriendly(trainOwner)) {
|
||||
goldBonus += BigInt(1_000); // Bonus for everybody when trading with an ally!
|
||||
const isFriendly = stationOwner.isFriendly(trainOwner);
|
||||
const goldBonus = mg.config().trainGold(isFriendly) * level;
|
||||
|
||||
if (isFriendly) {
|
||||
stationOwner.addGold(goldBonus, station.tile());
|
||||
}
|
||||
trainOwner.addGold(goldBonus, station.tile());
|
||||
@@ -59,18 +57,17 @@ class PortStopHandler implements TrainStopHandler {
|
||||
}
|
||||
|
||||
class FactoryStopHandler implements TrainStopHandler {
|
||||
private factor = BigInt(2);
|
||||
onStop(
|
||||
mg: Game,
|
||||
station: TrainStation,
|
||||
trainExecution: TrainExecution,
|
||||
): void {
|
||||
let goldBonus = mg.config().trainGold();
|
||||
const stationOwner = station.unit.owner();
|
||||
const trainOwner = trainExecution.owner();
|
||||
const isFriendly = stationOwner.isFriendly(trainOwner);
|
||||
const goldBonus = mg.config().trainGold(isFriendly);
|
||||
// Share revenue with the station owner if it's not the current player
|
||||
if (stationOwner.isFriendly(trainOwner)) {
|
||||
goldBonus += BigInt(1_000); // Bonus for everybody when trading with an ally!
|
||||
if (isFriendly) {
|
||||
stationOwner.addGold(goldBonus, station.tile());
|
||||
}
|
||||
trainOwner.addGold(goldBonus, station.tile());
|
||||
|
||||
@@ -16,7 +16,8 @@ describe("TrainStation", () => {
|
||||
game = {
|
||||
ticks: jest.fn().mockReturnValue(123),
|
||||
config: jest.fn().mockReturnValue({
|
||||
trainGold: () => BigInt(4000),
|
||||
trainGold: (isFriendly: boolean) =>
|
||||
isFriendly ? BigInt(1000) : BigInt(500),
|
||||
}),
|
||||
addUpdate: jest.fn(),
|
||||
addExecution: jest.fn(),
|
||||
@@ -50,7 +51,7 @@ describe("TrainStation", () => {
|
||||
|
||||
station.onTrainStop(trainExecution);
|
||||
|
||||
expect(unit.owner().addGold).toHaveBeenCalledWith(4000n, unit.tile());
|
||||
expect(unit.owner().addGold).toHaveBeenCalledWith(1000n, unit.tile());
|
||||
});
|
||||
|
||||
it("handles allied trade", () => {
|
||||
@@ -60,9 +61,9 @@ describe("TrainStation", () => {
|
||||
|
||||
station.onTrainStop(trainExecution);
|
||||
|
||||
expect(unit.owner().addGold).toHaveBeenCalledWith(5000n, unit.tile());
|
||||
expect(unit.owner().addGold).toHaveBeenCalledWith(2000n, unit.tile());
|
||||
expect(trainExecution.owner().addGold).toHaveBeenCalledWith(
|
||||
5000n,
|
||||
2000n,
|
||||
unit.tile(),
|
||||
);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user