Improve resources to level task
This commit is contained in:
		@@ -1,10 +1,14 @@
 | 
			
		||||
import { ActionController, registerAction } from './ActionController';
 | 
			
		||||
import { Args } from '../Command';
 | 
			
		||||
import { Task } from '../Queue/TaskQueue';
 | 
			
		||||
import { AbortTaskError } from '../Errors';
 | 
			
		||||
 | 
			
		||||
@registerAction
 | 
			
		||||
export class ClickButtonAction extends ActionController {
 | 
			
		||||
    async run(args: Args, task: Task): Promise<any> {
 | 
			
		||||
        if (!args.selector) {
 | 
			
		||||
            throw new AbortTaskError('No selector');
 | 
			
		||||
        }
 | 
			
		||||
        const el = jQuery(args.selector);
 | 
			
		||||
        if (el.length === 1) {
 | 
			
		||||
            console.log('CLICK BUTTON', el);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,14 @@
 | 
			
		||||
import { ActionController, registerAction } from './ActionController';
 | 
			
		||||
import { Args } from '../Command';
 | 
			
		||||
import { Task } from '../Queue/TaskQueue';
 | 
			
		||||
import { AbortTaskError } from '../Errors';
 | 
			
		||||
 | 
			
		||||
@registerAction
 | 
			
		||||
export class GoToPageAction extends ActionController {
 | 
			
		||||
    async run(args: Args, task: Task): Promise<any> {
 | 
			
		||||
        if (!args.path) {
 | 
			
		||||
            throw new AbortTaskError('No path');
 | 
			
		||||
        }
 | 
			
		||||
        window.location.assign(args.path);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
import { ActionController, registerAction } from './ActionController';
 | 
			
		||||
import { Args } from '../Command';
 | 
			
		||||
import { ActionError, TryLaterError } from '../Errors';
 | 
			
		||||
import { AbortTaskError, ActionError, TryLaterError } from '../Errors';
 | 
			
		||||
import { Task } from '../Queue/TaskQueue';
 | 
			
		||||
import { grabResourceDeposits } from '../Page/SlotBlock';
 | 
			
		||||
import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask';
 | 
			
		||||
import { ResourceDeposit } from '../Game';
 | 
			
		||||
import { aroundMinutes } from '../utils';
 | 
			
		||||
import { aroundMinutes, getNumber } from '../utils';
 | 
			
		||||
 | 
			
		||||
@registerAction
 | 
			
		||||
export class UpgradeResourceToLevel extends ActionController {
 | 
			
		||||
@@ -16,35 +16,38 @@ export class UpgradeResourceToLevel extends ActionController {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const villageId = args.villageId;
 | 
			
		||||
        const requiredLevel = args.level;
 | 
			
		||||
        const tasks = this.scheduler.getTaskItems();
 | 
			
		||||
        if (villageId === undefined) {
 | 
			
		||||
            throw new AbortTaskError('No village id');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const allUpgraded = deposits.reduce((memo, dep) => memo && dep.level >= requiredLevel, true);
 | 
			
		||||
        const requiredLevel = getNumber(args.level);
 | 
			
		||||
 | 
			
		||||
        if (allUpgraded) {
 | 
			
		||||
        const notUpgraded = deposits.filter(dep => requiredLevel > dep.level);
 | 
			
		||||
 | 
			
		||||
        if (notUpgraded.length === 0) {
 | 
			
		||||
            this.scheduler.removeTask(task.id);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const isDepositTaskNotInQueue = (dep: ResourceDeposit) =>
 | 
			
		||||
        const firstNotUpgraded = notUpgraded.sort((x, y) => x.level - y.level).shift();
 | 
			
		||||
 | 
			
		||||
        if (firstNotUpgraded && this.isTaskNotInQueue(villageId, firstNotUpgraded)) {
 | 
			
		||||
            this.scheduler.scheduleTask(UpgradeBuildingTask.name, { villageId, buildId: firstNotUpgraded.buildId });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        throw new TryLaterError(aroundMinutes(10), 'Sleep for next round');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private isTaskNotInQueue(villageId: number, dep: ResourceDeposit): boolean {
 | 
			
		||||
        const tasks = this.scheduler.getTaskItems();
 | 
			
		||||
        return (
 | 
			
		||||
            undefined ===
 | 
			
		||||
            tasks.find(
 | 
			
		||||
                task =>
 | 
			
		||||
                    task.name === UpgradeBuildingTask.name &&
 | 
			
		||||
                    task.args.villageId === villageId &&
 | 
			
		||||
                    task.args.buildId === dep.buildId
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
        const notUpgraded = deposits.sort((x, y) => x.level - y.level).filter(isDepositTaskNotInQueue);
 | 
			
		||||
 | 
			
		||||
        if (notUpgraded.length === 0) {
 | 
			
		||||
            throw new TryLaterError(aroundMinutes(10), 'No available deposits');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (let dep of notUpgraded) {
 | 
			
		||||
            this.scheduler.scheduleTask(UpgradeBuildingTask.name, { villageId, buildId: dep.buildId });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        throw new TryLaterError(aroundMinutes(10), 'Sleep for next round');
 | 
			
		||||
            )
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user