Add auto training

This commit is contained in:
2020-04-04 12:13:28 +03:00
parent 7f5cdf2cc3
commit 4bf8161b70
9 changed files with 242 additions and 53 deletions

View File

@ -4,8 +4,14 @@ import { Task } from '../Storage/TaskQueue';
import { trimPrefix } from '../utils';
import { AbortTaskError } from '../Errors';
const HARD = 0;
const NORMAL = 3;
const CONFIG = [
{ level: 0, health: 60 },
{ level: 1, health: 50 },
{ level: 2, health: 40 },
{ level: 3, health: 30 },
{ level: 4, health: 30 },
{ level: 5, health: 30 },
];
interface Adventure {
el: HTMLElement;
@ -28,19 +34,20 @@ export class SendOnAdventureAction extends ActionController {
console.log('HERO', hero);
if (easiest && hero.health) {
if (easiest.level === NORMAL && hero.health >= 30) {
return jQuery(easiest.el)
.find('td.goTo .gotoAdventure')
.trigger('click');
}
if (easiest.level === HARD && hero.health >= 50) {
return jQuery(easiest.el)
this.checkConfig(easiest, Number(hero.health));
}
throw new AbortTaskError(task.id, 'No suitable adventure');
}
private checkConfig(adventure: Adventure, health: number) {
for (let conf of CONFIG) {
if (adventure.level === conf.level && health >= conf.health) {
return jQuery(adventure.el)
.find('td.goTo .gotoAdventure')
.trigger('click');
}
}
throw new AbortTaskError(task.id, 'No suitable adventure');
}
private findAdventures(): Array<Adventure> {

View File

@ -0,0 +1,57 @@
import { ActionController, registerAction } from './ActionController';
import { Args } from '../Common';
import { ActionError, TryLaterError } from '../Errors';
import { Task } from '../Storage/TaskQueue';
import { getNumber, toNumber } from '../utils';
@registerAction
export class TrainTrooperAction extends ActionController {
async run(args: Args, task: Task): Promise<any> {
const troopId = this.getTroopId(args, task);
const trainCount = this.getTrainCount(args, task);
const block = jQuery(`#nonFavouriteTroops .innerTroopWrapper.troop${troopId}`);
if (block.length !== 1) {
throw new ActionError(task.id, `Troop block not found`);
}
const countLink = block.find('.cta a');
if (countLink.length !== 1) {
throw new ActionError(task.id, `Link with max count not found`);
}
const maxCount = getNumber(countLink.text());
if (maxCount < trainCount) {
throw new TryLaterError(task.id, 10 * 60, `Max count ${maxCount} less then need ${trainCount}`);
}
const input = block.find(`input[name="t${troopId}"]`);
if (input.length !== 1) {
throw new ActionError(task.id, `Input element not found`);
}
const trainButton = jQuery('.startTraining.green').first();
if (trainButton.length !== 1) {
throw new ActionError(task.id, 'Train button not found');
}
input.val(trainCount);
trainButton.trigger('click');
}
private getTroopId(args: Args, task: Task): number {
const troopId = toNumber(args.troopId);
if (troopId === undefined) {
throw new ActionError(task.id, `Troop id must be a number, given "${args.troopId}"`);
}
return troopId;
}
private getTrainCount(args: Args, task: Task): number {
const trainCount = toNumber(args.trainCount);
if (trainCount === undefined) {
throw new ActionError(task.id, `Train count must be a number, given "${args.trainCount}"`);
}
return trainCount;
}
}