Rewrite hero resource action
try to detect hero village before balancing
This commit is contained in:
@ -1,71 +1,30 @@
|
||||
import { ActionController, registerAction } from './ActionController';
|
||||
import { Args } from '../Common';
|
||||
import { Task } from '../Storage/TaskQueue';
|
||||
import { getNumber, trimPrefix } from '../utils';
|
||||
import { AbortTaskError, ActionError } from '../Errors';
|
||||
|
||||
interface Resource {
|
||||
type: number;
|
||||
value: number;
|
||||
}
|
||||
|
||||
const ALL = 0;
|
||||
import { grabResources } from '../Page/ResourcesBlock';
|
||||
import { changeHeroResource, grabCurrentHeroResource } from '../Page/HeroPage';
|
||||
import { HeroAllResources } from '../Game';
|
||||
|
||||
@registerAction
|
||||
export class BalanceHeroResourcesAction extends ActionController {
|
||||
async run(args: Args, task: Task): Promise<any> {
|
||||
const res = this.getResources();
|
||||
const currentType = this.getCurrentHeroResource(task);
|
||||
console.log('RESOURCES', res);
|
||||
const resources = grabResources().asList();
|
||||
const currentType = grabCurrentHeroResource();
|
||||
|
||||
console.log('RESOURCES', resources);
|
||||
console.log('CURRENT TYPE', currentType);
|
||||
const sorted = res.sort((x, y) => x.value - y.value);
|
||||
|
||||
const sorted = resources.sort((x, y) => x.value - y.value);
|
||||
const min = sorted[0];
|
||||
const max = sorted[sorted.length - 1];
|
||||
const delta = max.value - min.value;
|
||||
const eps = max.value / 10;
|
||||
|
||||
console.log('MIN', min, 'MAX', max, 'DELTA', delta, 'EPS', eps);
|
||||
const resType = delta > eps ? min.type : ALL;
|
||||
|
||||
const resType = delta > eps ? min.type : HeroAllResources;
|
||||
if (resType !== currentType) {
|
||||
this.changeToHeroResource(task, resType);
|
||||
changeHeroResource(resType);
|
||||
}
|
||||
}
|
||||
|
||||
private getResources(): Array<Resource> {
|
||||
const res = this.state.get('resources');
|
||||
const resList: Array<Resource> = [];
|
||||
for (let r in res) {
|
||||
const type = getNumber(r);
|
||||
const value = getNumber(res[r]);
|
||||
resList.push({ type, value });
|
||||
}
|
||||
return resList;
|
||||
}
|
||||
|
||||
private getCurrentHeroResource(task: Task): number {
|
||||
for (let type of [0, 1, 2, 3, 4]) {
|
||||
const input = jQuery(`#resourceHero${type}`);
|
||||
if (input.length !== 1) {
|
||||
throw new ActionError(task.id, `Hero resource ${type} not found`);
|
||||
}
|
||||
if (input.prop('checked')) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private changeToHeroResource(task: Task, type: number) {
|
||||
const input = jQuery(`#resourceHero${type}`);
|
||||
if (input.length !== 1) {
|
||||
throw new ActionError(task.id, `Hero resource ${type} not found`);
|
||||
}
|
||||
|
||||
const btn = jQuery('#saveHeroAttributes');
|
||||
if (btn.length !== 1) {
|
||||
throw new ActionError(task.id, `Hero resource button not found`);
|
||||
}
|
||||
|
||||
input.trigger('click');
|
||||
btn.trigger('click');
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ import { ActionController, registerAction } from './ActionController';
|
||||
import { Args } from '../Common';
|
||||
import { Task } from '../Storage/TaskQueue';
|
||||
import { BuildingQueueFullError } from '../Errors';
|
||||
import { grabActiveVillageId } from '../Page/EveryPage';
|
||||
import { grabActiveVillageId } from '../Page/VillageBlock';
|
||||
|
||||
@registerAction
|
||||
export class CheckBuildingRemainingTimeAction extends ActionController {
|
||||
|
32
src/Action/GoToHeroVillageAction.ts
Normal file
32
src/Action/GoToHeroVillageAction.ts
Normal file
@ -0,0 +1,32 @@
|
||||
import { ActionController, registerAction } from './ActionController';
|
||||
import { Args } from '../Common';
|
||||
import { Task } from '../Storage/TaskQueue';
|
||||
import { grabVillageList } from '../Page/VillageBlock';
|
||||
import { grabHeroVillage } from '../Page/HeroPage';
|
||||
import { path } from '../utils';
|
||||
|
||||
@registerAction
|
||||
export class GoToHeroVillageAction extends ActionController {
|
||||
async run(args: Args, task: Task): Promise<any> {
|
||||
const heroVillageId = this.getHeroVillageId();
|
||||
if (heroVillageId) {
|
||||
window.location.assign(path('/hero.php', { newdid: heroVillageId }));
|
||||
}
|
||||
}
|
||||
|
||||
private getHeroVillageId(): number | undefined {
|
||||
const villages = grabVillageList();
|
||||
const heroVillage = grabHeroVillage();
|
||||
|
||||
console.log('VILLAGES', villages);
|
||||
console.log('HERO VILLAGE', heroVillage);
|
||||
|
||||
for (let village of villages) {
|
||||
if (village.name === heroVillage) {
|
||||
return village.id;
|
||||
}
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user