From 18f43c393190c96a6570a41f30fffec075f4efbd Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sat, 9 May 2020 21:06:08 +0300 Subject: [PATCH] Fix trooper training --- src/Action/TrainTrooperAction.ts | 13 ++++++++++--- src/Page/BuildingPageController.ts | 1 + src/Queue/Args.ts | 1 + src/utils.ts | 4 ++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/Action/TrainTrooperAction.ts b/src/Action/TrainTrooperAction.ts index 4668452..2a436a9 100644 --- a/src/Action/TrainTrooperAction.ts +++ b/src/Action/TrainTrooperAction.ts @@ -1,20 +1,23 @@ import { ActionController, err, registerAction } from './ActionController'; import { TryLaterError } from '../Errors'; -import { aroundMinutes } from '../utils'; +import { aroundMinutes, randomInRange } from '../utils'; import { Args } from '../Queue/Args'; import { Task } from '../Queue/TaskProvider'; import { clickTrainButton, fillTrainCount, getAvailableCount } from '../Page/BuildingPage/TrooperPage'; import { TrainTroopTask } from '../Task/TrainTroopTask'; +import { Resources } from '../Core/Resources'; @registerAction export class TrainTrooperAction extends ActionController { async run(args: Args, task: Task): Promise { const troopId = args.troopId || err('No troop id'); const trainCount = args.trainCount || err('No troop train count'); + const troopResources = args.troopResources || err('No troop resources'); const availableCount = getAvailableCount(troopId); + const desiredCount = randomInRange(3, 12); - const readyToTrainCount = Math.min(availableCount, trainCount); + const readyToTrainCount = Math.min(availableCount, trainCount, desiredCount); const nextToTrainCount = trainCount - readyToTrainCount; if (readyToTrainCount <= 0) { @@ -22,7 +25,11 @@ export class TrainTrooperAction extends ActionController { } if (nextToTrainCount > 0) { - this.scheduler.scheduleTask(TrainTroopTask.name, { ...task.args, trainCount: nextToTrainCount }); + this.scheduler.scheduleTask(TrainTroopTask.name, { + ...task.args, + trainCount: nextToTrainCount, + resources: Resources.fromObject(troopResources).scale(nextToTrainCount), + }); } fillTrainCount(troopId, readyToTrainCount); diff --git a/src/Page/BuildingPageController.ts b/src/Page/BuildingPageController.ts index 6e7147a..b9c84ca 100644 --- a/src/Page/BuildingPageController.ts +++ b/src/Page/BuildingPageController.ts @@ -91,6 +91,7 @@ export class BuildingPageController { sheetId: this.attributes.sheetId, troopId, trainCount, + troopResources: resources, resources: resources.scale(trainCount), }; this.scheduler.scheduleTask(TrainTroopTask.name, args); diff --git a/src/Queue/Args.ts b/src/Queue/Args.ts index f4a089e..d9da128 100644 --- a/src/Queue/Args.ts +++ b/src/Queue/Args.ts @@ -13,6 +13,7 @@ export interface Args { tabId?: number; buildTypeId?: number; troopId?: number; + troopResources?: ResourcesInterface; trainCount?: number; resources?: ResourcesInterface; coordinates?: CoordinatesInterface; diff --git a/src/utils.ts b/src/utils.ts index df55519..08cb2cd 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -4,10 +4,10 @@ export function sleep(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); } -function randomInRange(from: number, to: number): number { +export function randomInRange(from: number, to: number): number { const delta = to - from; const variation = Math.random() * delta; - return from + variation; + return Math.floor(from + variation); } export async function sleepMicro() {