From 84ac56d052bc30306b1f82e88732102c23320033 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sun, 19 Apr 2020 10:38:48 +0300 Subject: [PATCH] Refactor hero resource balance action --- src/Action/ActionController.ts | 6 +-- src/Action/BalanceHeroResourcesAction.ts | 29 ++++++++---- src/Action/BuildBuildingAction.ts | 4 +- .../CheckBuildingRemainingTimeAction.ts | 4 +- src/Action/ClickButtonAction.ts | 4 +- src/Action/CompleteTaskAction.ts | 4 +- src/Action/GoToHeroVillageAction.ts | 4 +- src/Action/GoToPageAction.ts | 4 +- src/Action/GrabHeroAttributesAction.ts | 4 +- src/Action/SendOnAdventureAction.ts | 4 +- src/Action/StoreVillageState.ts | 6 +-- src/Action/TrainTrooperAction.ts | 4 +- .../UpdateBuildingTaskResourcesAction.ts | 4 +- src/Action/UpgradeBuildingAction.ts | 4 +- src/Action/UpgradeResourceToLevel.ts | 4 +- src/{Common.ts => Command.ts} | 2 +- src/ControlPanel.ts | 2 +- src/{Storage => }/DataStorage.ts | 2 +- src/Errors.ts | 2 +- src/Executor.ts | 6 +-- src/Game.ts | 7 +++ src/Grabber/HeroPageGrabber.ts | 44 +++++++++++++++++++ src/{State => Grabber}/ResourceGrabber.ts | 2 +- src/{State => Grabber}/StateGrabber.ts | 0 src/{State => Grabber}/StateGrabberManager.ts | 2 + .../VillageOverviewPageGrabber.ts | 2 +- src/Page/HeroPage.ts | 16 +++++-- src/{Storage => Queue}/ActionQueue.ts | 4 +- src/{Storage => Queue}/TaskQueue.ts | 4 +- src/Scheduler.ts | 6 +-- src/State/HeroState.ts | 30 +++++++++++++ src/State/VillageState.ts | 2 +- src/Task/BalanceHeroResourcesTask.ts | 4 +- src/Task/BuildBuildingTask.ts | 4 +- src/Task/GrabVillageState.ts | 4 +- src/Task/ResourcesToLevel.ts | 4 +- src/Task/SendOnAdventureTask.ts | 4 +- src/Task/TaskController.ts | 2 +- src/Task/TrainTroopTask.ts | 4 +- src/Task/UpdateResourceContracts.ts | 4 +- src/Task/UpgradeBuildingTask.ts | 4 +- src/TaskQueueRenderer.ts | 2 +- 42 files changed, 182 insertions(+), 76 deletions(-) rename src/{Common.ts => Command.ts} (90%) rename src/{Storage => }/DataStorage.ts (95%) create mode 100644 src/Grabber/HeroPageGrabber.ts rename src/{State => Grabber}/ResourceGrabber.ts (89%) rename src/{State => Grabber}/StateGrabber.ts (100%) rename src/{State => Grabber}/StateGrabberManager.ts (83%) rename src/{State => Grabber}/VillageOverviewPageGrabber.ts (94%) rename src/{Storage => Queue}/ActionQueue.ts (94%) rename src/{Storage => Queue}/TaskQueue.ts (97%) create mode 100644 src/State/HeroState.ts diff --git a/src/Action/ActionController.ts b/src/Action/ActionController.ts index 758e1cc..9aca21e 100644 --- a/src/Action/ActionController.ts +++ b/src/Action/ActionController.ts @@ -1,6 +1,6 @@ -import { Args } from '../Common'; -import { Task } from '../Storage/TaskQueue'; -import { DataStorage } from '../Storage/DataStorage'; +import { Args } from '../Command'; +import { Task } from '../Queue/TaskQueue'; +import { DataStorage } from '../DataStorage'; import { Scheduler } from '../Scheduler'; const actionMap: { [name: string]: Function | undefined } = {}; diff --git a/src/Action/BalanceHeroResourcesAction.ts b/src/Action/BalanceHeroResourcesAction.ts index c8fe1b1..5bcecf2 100644 --- a/src/Action/BalanceHeroResourcesAction.ts +++ b/src/Action/BalanceHeroResourcesAction.ts @@ -1,15 +1,24 @@ import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args } from '../Command'; +import { Task } from '../Queue/TaskQueue'; import { grabResources, grabResourceStorage } from '../Page/ResourcesBlock'; import { changeHeroResource, grabCurrentHeroResource } from '../Page/HeroPage'; import { HeroAllResources, Resources } from '../Game'; import { grabActiveVillageId } from '../Page/VillageBlock'; +import { HeroState } from '../State/HeroState'; @registerAction export class BalanceHeroResourcesAction extends ActionController { async run(args: Args, task: Task): Promise { - const resources = this.getRequirements(); + const activeVillageId = grabActiveVillageId(); + const heroVillageId = new HeroState().getVillageId(); + + if (heroVillageId === undefined || activeVillageId !== heroVillageId) { + changeHeroResource(HeroAllResources); + return; + } + + const resources = this.getRequirements(heroVillageId); const resourcesAsList = resources.asList(); const currentType = grabCurrentHeroResource(); @@ -17,8 +26,11 @@ export class BalanceHeroResourcesAction extends ActionController { const sorted = resourcesAsList.sort((x, y) => y.value - x.value); const maxRequirement = sorted[0]; const minRequirement = sorted[sorted.length - 1]; - const delta = maxRequirement.value - minRequirement.value; - const eps = maxRequirement.value / 10; + const delta = Math.abs(maxRequirement.value - minRequirement.value); + const eps = Math.abs(maxRequirement.value / 10); + + console.log('REQUIREMENTS', sorted); + console.log('REQUIREMENTS', maxRequirement, minRequirement, delta, eps); const resType = delta > eps ? maxRequirement.type : HeroAllResources; if (resType !== currentType) { @@ -26,11 +38,12 @@ export class BalanceHeroResourcesAction extends ActionController { } } - private getRequirements() { + private getRequirements(heroVillageId) { const resources = grabResources(); + const requiredResources = this.scheduler.getVillageRequiredResources(heroVillageId); - const villageId = grabActiveVillageId(); - const requiredResources = this.scheduler.getVillageRequiredResources(villageId); + console.log('RESOURCES', resources); + console.log('REQUIRED', requiredResources); if (requiredResources) { return new Resources( diff --git a/src/Action/BuildBuildingAction.ts b/src/Action/BuildBuildingAction.ts index d559b42..4212cd6 100644 --- a/src/Action/BuildBuildingAction.ts +++ b/src/Action/BuildBuildingAction.ts @@ -1,7 +1,7 @@ import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Common'; +import { Args } from '../Command'; import { ActionError, GrabError, TryLaterError } from '../Errors'; -import { Task } from '../Storage/TaskQueue'; +import { Task } from '../Queue/TaskQueue'; import { clickBuildButton } from '../Page/BuildingPage'; @registerAction diff --git a/src/Action/CheckBuildingRemainingTimeAction.ts b/src/Action/CheckBuildingRemainingTimeAction.ts index 415fe83..7059e09 100644 --- a/src/Action/CheckBuildingRemainingTimeAction.ts +++ b/src/Action/CheckBuildingRemainingTimeAction.ts @@ -1,6 +1,6 @@ import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args } from '../Command'; +import { Task } from '../Queue/TaskQueue'; import { PostponeAllBuildingsError, GrabError } from '../Errors'; import { grabActiveVillageId, grabBuildingQueueInfo } from '../Page/VillageBlock'; import { BuildingQueueInfo } from '../Game'; diff --git a/src/Action/ClickButtonAction.ts b/src/Action/ClickButtonAction.ts index 3459a71..0e06ec8 100644 --- a/src/Action/ClickButtonAction.ts +++ b/src/Action/ClickButtonAction.ts @@ -1,6 +1,6 @@ import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args } from '../Command'; +import { Task } from '../Queue/TaskQueue'; @registerAction export class ClickButtonAction extends ActionController { diff --git a/src/Action/CompleteTaskAction.ts b/src/Action/CompleteTaskAction.ts index 06234bf..8bf8b3b 100644 --- a/src/Action/CompleteTaskAction.ts +++ b/src/Action/CompleteTaskAction.ts @@ -1,6 +1,6 @@ import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args } from '../Command'; +import { Task } from '../Queue/TaskQueue'; @registerAction export class CompleteTaskAction extends ActionController { diff --git a/src/Action/GoToHeroVillageAction.ts b/src/Action/GoToHeroVillageAction.ts index 11ccde7..ad2cbf3 100644 --- a/src/Action/GoToHeroVillageAction.ts +++ b/src/Action/GoToHeroVillageAction.ts @@ -1,6 +1,6 @@ import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args } from '../Command'; +import { Task } from '../Queue/TaskQueue'; import { grabVillageList } from '../Page/VillageBlock'; import { grabHeroVillage } from '../Page/HeroPage'; import { path } from '../utils'; diff --git a/src/Action/GoToPageAction.ts b/src/Action/GoToPageAction.ts index f910e86..ef6ded6 100644 --- a/src/Action/GoToPageAction.ts +++ b/src/Action/GoToPageAction.ts @@ -1,6 +1,6 @@ import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args } from '../Command'; +import { Task } from '../Queue/TaskQueue'; @registerAction export class GoToPageAction extends ActionController { diff --git a/src/Action/GrabHeroAttributesAction.ts b/src/Action/GrabHeroAttributesAction.ts index 59736b1..2980062 100644 --- a/src/Action/GrabHeroAttributesAction.ts +++ b/src/Action/GrabHeroAttributesAction.ts @@ -1,6 +1,6 @@ import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args } from '../Command'; +import { Task } from '../Queue/TaskQueue'; import { ActionError } from '../Errors'; import { getNumber } from '../utils'; diff --git a/src/Action/SendOnAdventureAction.ts b/src/Action/SendOnAdventureAction.ts index da3edd3..0e146de 100644 --- a/src/Action/SendOnAdventureAction.ts +++ b/src/Action/SendOnAdventureAction.ts @@ -1,6 +1,6 @@ import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args } from '../Command'; +import { Task } from '../Queue/TaskQueue'; import { trimPrefix } from '../utils'; import { AbortTaskError } from '../Errors'; diff --git a/src/Action/StoreVillageState.ts b/src/Action/StoreVillageState.ts index 207b2e8..9e1a1bf 100644 --- a/src/Action/StoreVillageState.ts +++ b/src/Action/StoreVillageState.ts @@ -1,7 +1,7 @@ import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Common'; -import { Task } from '../Storage/TaskQueue'; -import { StateGrabberManager } from '../State/StateGrabberManager'; +import { Args } from '../Command'; +import { Task } from '../Queue/TaskQueue'; +import { StateGrabberManager } from '../Grabber/StateGrabberManager'; @registerAction export class StoreVillageState extends ActionController { diff --git a/src/Action/TrainTrooperAction.ts b/src/Action/TrainTrooperAction.ts index 49cadc5..04afee7 100644 --- a/src/Action/TrainTrooperAction.ts +++ b/src/Action/TrainTrooperAction.ts @@ -1,7 +1,7 @@ import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Common'; +import { Args } from '../Command'; import { ActionError, TryLaterError } from '../Errors'; -import { Task } from '../Storage/TaskQueue'; +import { Task } from '../Queue/TaskQueue'; import { getNumber, toNumber } from '../utils'; @registerAction diff --git a/src/Action/UpdateBuildingTaskResourcesAction.ts b/src/Action/UpdateBuildingTaskResourcesAction.ts index b21b6d2..5e3a503 100644 --- a/src/Action/UpdateBuildingTaskResourcesAction.ts +++ b/src/Action/UpdateBuildingTaskResourcesAction.ts @@ -1,6 +1,6 @@ import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args } from '../Command'; +import { Task } from '../Queue/TaskQueue'; import { grabContractResources } from '../Page/BuildingPage'; @registerAction diff --git a/src/Action/UpgradeBuildingAction.ts b/src/Action/UpgradeBuildingAction.ts index cf9b8fe..acca62e 100644 --- a/src/Action/UpgradeBuildingAction.ts +++ b/src/Action/UpgradeBuildingAction.ts @@ -1,7 +1,7 @@ import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Common'; +import { Args } from '../Command'; import { ActionError, GrabError, PostponeAllBuildingsError } from '../Errors'; -import { Task } from '../Storage/TaskQueue'; +import { Task } from '../Queue/TaskQueue'; import { clickUpgradeButton } from '../Page/BuildingPage'; @registerAction diff --git a/src/Action/UpgradeResourceToLevel.ts b/src/Action/UpgradeResourceToLevel.ts index 2b93982..0aa68de 100644 --- a/src/Action/UpgradeResourceToLevel.ts +++ b/src/Action/UpgradeResourceToLevel.ts @@ -1,7 +1,7 @@ import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Common'; +import { Args } from '../Command'; import { ActionError, GrabError, TryLaterError } from '../Errors'; -import { Task } from '../Storage/TaskQueue'; +import { Task } from '../Queue/TaskQueue'; import { clickUpgradeButton } from '../Page/BuildingPage'; import { grabResourceDeposits } from '../Page/SlotBlock'; import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; diff --git a/src/Common.ts b/src/Command.ts similarity index 90% rename from src/Common.ts rename to src/Command.ts index 01e0498..86c1084 100644 --- a/src/Common.ts +++ b/src/Command.ts @@ -1,5 +1,5 @@ import { ResourcesInterface } from './Game'; -import { TaskId } from './Storage/TaskQueue'; +import { TaskId } from './Queue/TaskQueue'; export interface Args { villageId?: number; diff --git a/src/ControlPanel.ts b/src/ControlPanel.ts index 24119a9..71682ae 100644 --- a/src/ControlPanel.ts +++ b/src/ControlPanel.ts @@ -14,7 +14,7 @@ import DashboardApp from './DashboardView/Dashboard.vue'; import { ResourcesToLevel } from './Task/ResourcesToLevel'; import { ConsoleLogger, Logger } from './Logger'; import { VillageState } from './State/VillageState'; -import { StateGrabberManager } from './State/StateGrabberManager'; +import { StateGrabberManager } from './Grabber/StateGrabberManager'; interface QuickAction { label: string; diff --git a/src/Storage/DataStorage.ts b/src/DataStorage.ts similarity index 95% rename from src/Storage/DataStorage.ts rename to src/DataStorage.ts index 71aa409..e47bf28 100644 --- a/src/Storage/DataStorage.ts +++ b/src/DataStorage.ts @@ -1,4 +1,4 @@ -import { ConsoleLogger, Logger, NullLogger } from '../Logger'; +import { ConsoleLogger, Logger, NullLogger } from './Logger'; const NAMESPACE = 'travian:v1'; diff --git a/src/Errors.ts b/src/Errors.ts index ecab3e7..0d79334 100644 --- a/src/Errors.ts +++ b/src/Errors.ts @@ -1,4 +1,4 @@ -import { TaskId } from './Storage/TaskQueue'; +import { TaskId } from './Queue/TaskQueue'; export class GrabError extends Error { constructor(msg: string = '') { diff --git a/src/Executor.ts b/src/Executor.ts index e278f66..123a134 100644 --- a/src/Executor.ts +++ b/src/Executor.ts @@ -1,12 +1,12 @@ import { markPage, sleepMicro, timestamp, waitForLoad } from './utils'; import { AbortTaskError, ActionError, PostponeAllBuildingsError, TryLaterError } from './Errors'; -import { Task } from './Storage/TaskQueue'; -import { Command } from './Common'; +import { Task } from './Queue/TaskQueue'; +import { Command } from './Command'; import { TaskQueueRenderer } from './TaskQueueRenderer'; import { createAction } from './Action/ActionController'; import { createTask } from './Task/TaskController'; import { ConsoleLogger, Logger } from './Logger'; -import { StateGrabberManager } from './State/StateGrabberManager'; +import { StateGrabberManager } from './Grabber/StateGrabberManager'; import { Scheduler } from './Scheduler'; export class Executor { diff --git a/src/Game.ts b/src/Game.ts index 207a85d..d14a1f2 100644 --- a/src/Game.ts +++ b/src/Game.ts @@ -108,6 +108,13 @@ export class BuildingQueueInfo { } } +export class HeroAttributes { + readonly health: number; + constructor(health: number) { + this.health = health; + } +} + export type HeroAllResourcesType = 'all'; export const HeroAllResources: HeroAllResourcesType = 'all'; diff --git a/src/Grabber/HeroPageGrabber.ts b/src/Grabber/HeroPageGrabber.ts new file mode 100644 index 0000000..0f8315e --- /dev/null +++ b/src/Grabber/HeroPageGrabber.ts @@ -0,0 +1,44 @@ +import { StateGrabber } from './StateGrabber'; +import { + grabActiveVillageId, + grabBuildingQueueInfo, + grabResourcesPerformance, + grabVillageList, +} from '../Page/VillageBlock'; +import { VillageState } from '../State/VillageState'; +import { parseLocation } from '../utils'; +import { GrabError } from '../Errors'; +import { BuildingQueueInfo } from '../Game'; +import { HeroState } from '../State/HeroState'; +import { grabHeroAttributes, grabHeroVillage } from '../Page/HeroPage'; + +export class HeroPageGrabber extends StateGrabber { + grab(): void { + const p = parseLocation(); + if (p.pathname !== '/hero.php') { + return; + } + + const state = new HeroState(); + + state.storeAttributes(grabHeroAttributes()); + + const villageId = this.getHeroVillageId(); + if (villageId) { + state.storeVillageId(villageId); + } + } + + private getHeroVillageId(): number | undefined { + const villages = grabVillageList(); + const heroVillage = grabHeroVillage(); + + for (let village of villages) { + if (village.name === heroVillage) { + return village.id; + } + } + + return undefined; + } +} diff --git a/src/State/ResourceGrabber.ts b/src/Grabber/ResourceGrabber.ts similarity index 89% rename from src/State/ResourceGrabber.ts rename to src/Grabber/ResourceGrabber.ts index ed9fa03..fe7a428 100644 --- a/src/State/ResourceGrabber.ts +++ b/src/Grabber/ResourceGrabber.ts @@ -1,7 +1,7 @@ import { StateGrabber } from './StateGrabber'; import { grabActiveVillageId } from '../Page/VillageBlock'; import { grabResources, grabResourceStorage } from '../Page/ResourcesBlock'; -import { VillageState } from './VillageState'; +import { VillageState } from '../State/VillageState'; export class ResourceGrabber extends StateGrabber { grab(): void { diff --git a/src/State/StateGrabber.ts b/src/Grabber/StateGrabber.ts similarity index 100% rename from src/State/StateGrabber.ts rename to src/Grabber/StateGrabber.ts diff --git a/src/State/StateGrabberManager.ts b/src/Grabber/StateGrabberManager.ts similarity index 83% rename from src/State/StateGrabberManager.ts rename to src/Grabber/StateGrabberManager.ts index 354da3e..5616aca 100644 --- a/src/State/StateGrabberManager.ts +++ b/src/Grabber/StateGrabberManager.ts @@ -1,6 +1,7 @@ import { StateGrabber } from './StateGrabber'; import { ResourceGrabber } from './ResourceGrabber'; import { VillageOverviewPageGrabber } from './VillageOverviewPageGrabber'; +import { HeroPageGrabber } from './HeroPageGrabber'; export class StateGrabberManager { private readonly grabbers: Array = []; @@ -9,6 +10,7 @@ export class StateGrabberManager { this.grabbers = []; this.grabbers.push(new ResourceGrabber()); this.grabbers.push(new VillageOverviewPageGrabber()); + this.grabbers.push(new HeroPageGrabber()); } grab() { diff --git a/src/State/VillageOverviewPageGrabber.ts b/src/Grabber/VillageOverviewPageGrabber.ts similarity index 94% rename from src/State/VillageOverviewPageGrabber.ts rename to src/Grabber/VillageOverviewPageGrabber.ts index 4439946..54c4ae9 100644 --- a/src/State/VillageOverviewPageGrabber.ts +++ b/src/Grabber/VillageOverviewPageGrabber.ts @@ -1,6 +1,6 @@ import { StateGrabber } from './StateGrabber'; import { grabActiveVillageId, grabBuildingQueueInfo, grabResourcesPerformance } from '../Page/VillageBlock'; -import { VillageState } from './VillageState'; +import { VillageState } from '../State/VillageState'; import { parseLocation } from '../utils'; import { GrabError } from '../Errors'; import { BuildingQueueInfo } from '../Game'; diff --git a/src/Page/HeroPage.ts b/src/Page/HeroPage.ts index 5be6583..f51c0ee 100644 --- a/src/Page/HeroPage.ts +++ b/src/Page/HeroPage.ts @@ -1,5 +1,15 @@ -import { GrabError } from '../Errors'; -import { HeroAllResources, HeroResourceType, ResourceMapping, ResourceType } from '../Game'; +import { ActionError, GrabError } from '../Errors'; +import { HeroAllResources, HeroAttributes, HeroResourceType, ResourceMapping, ResourceType } from '../Game'; +import { getNumber } from '../utils'; + +export function grabHeroAttributes(): HeroAttributes { + const healthElement = jQuery('#attributes .attribute.health .powervalue .value'); + if (healthElement.length !== 1) { + throw new GrabError('Health dom element not found'); + } + + return new HeroAttributes(getNumber(healthElement.text())); +} export function grabCurrentHeroResource(): HeroResourceType { for (let mp of ResourceMapping) { @@ -44,7 +54,7 @@ function heroResourceTypeToNumber(type: HeroResourceType): number { export function grabHeroVillage(): string | undefined { const status = jQuery('.heroStatusMessage').text(); const hrefText = jQuery('.heroStatusMessage a').text(); - if (status.includes('в родной деревне')) { + if (status.toLowerCase().includes('в родной деревне')) { return hrefText || undefined; } else { return undefined; diff --git a/src/Storage/ActionQueue.ts b/src/Queue/ActionQueue.ts similarity index 94% rename from src/Storage/ActionQueue.ts rename to src/Queue/ActionQueue.ts index 9972e5c..19ad68e 100644 --- a/src/Storage/ActionQueue.ts +++ b/src/Queue/ActionQueue.ts @@ -1,6 +1,6 @@ -import { Command } from '../Common'; +import { Command } from '../Command'; import { ConsoleLogger, Logger } from '../Logger'; -import { DataStorage } from './DataStorage'; +import { DataStorage } from '../DataStorage'; const NAMESPACE = 'actions.v1'; const QUEUE_NAME = 'queue'; diff --git a/src/Storage/TaskQueue.ts b/src/Queue/TaskQueue.ts similarity index 97% rename from src/Storage/TaskQueue.ts rename to src/Queue/TaskQueue.ts index 04232b6..61271af 100644 --- a/src/Storage/TaskQueue.ts +++ b/src/Queue/TaskQueue.ts @@ -1,7 +1,7 @@ -import { Args } from '../Common'; +import { Args } from '../Command'; import { uniqId } from '../utils'; import { ConsoleLogger, Logger } from '../Logger'; -import { DataStorage } from './DataStorage'; +import { DataStorage } from '../DataStorage'; const NAMESPACE = 'tasks:v1'; const QUEUE_NAME = 'queue'; diff --git a/src/Scheduler.ts b/src/Scheduler.ts index cd4d54e..e91d5d3 100644 --- a/src/Scheduler.ts +++ b/src/Scheduler.ts @@ -1,13 +1,13 @@ import { timestamp } from './utils'; import { UpgradeBuildingTask } from './Task/UpgradeBuildingTask'; -import { Task, TaskId, TaskList, TaskQueue } from './Storage/TaskQueue'; -import { Args, Command } from './Common'; +import { Task, TaskId, TaskList, TaskQueue } from './Queue/TaskQueue'; +import { Args, Command } from './Command'; import { SendOnAdventureTask } from './Task/SendOnAdventureTask'; import { BalanceHeroResourcesTask } from './Task/BalanceHeroResourcesTask'; import { ConsoleLogger, Logger } from './Logger'; import { BuildBuildingTask } from './Task/BuildBuildingTask'; import { GrabVillageState } from './Task/GrabVillageState'; -import { ActionQueue } from './Storage/ActionQueue'; +import { ActionQueue } from './Queue/ActionQueue'; import { Resources, ResourcesInterface } from './Game'; import { UpdateResourceContracts } from './Task/UpdateResourceContracts'; diff --git a/src/State/HeroState.ts b/src/State/HeroState.ts new file mode 100644 index 0000000..cbc1d8d --- /dev/null +++ b/src/State/HeroState.ts @@ -0,0 +1,30 @@ +import { DataStorage } from '../DataStorage'; +import { HeroAttributes } from '../Game'; + +const VILLAGE_ID_KEY = 'village_id'; +const ATTRIBUTES_KEY = 'attr'; + +export class HeroState { + private storage: DataStorage; + constructor() { + this.storage = new DataStorage('hero.v1'); + } + + storeVillageId(villageId: number) { + this.storage.set(VILLAGE_ID_KEY, villageId); + } + + getVillageId(): number | undefined { + return (this.storage.get(VILLAGE_ID_KEY) as number) || undefined; + } + + storeAttributes(attributes: HeroAttributes) { + this.storage.set(ATTRIBUTES_KEY, attributes); + } + + getAttributes(): HeroAttributes { + let plain = this.storage.get(ATTRIBUTES_KEY); + let res = new HeroAttributes(0); + return Object.assign(res, plain) as HeroAttributes; + } +} diff --git a/src/State/VillageState.ts b/src/State/VillageState.ts index 1bd7f0e..fb5f4fb 100644 --- a/src/State/VillageState.ts +++ b/src/State/VillageState.ts @@ -1,4 +1,4 @@ -import { DataStorage } from '../Storage/DataStorage'; +import { DataStorage } from '../DataStorage'; import { BuildingQueueInfo, Resources, ResourceStorage } from '../Game'; const RESOURCES_KEY = 'res'; diff --git a/src/Task/BalanceHeroResourcesTask.ts b/src/Task/BalanceHeroResourcesTask.ts index 6ccff4e..760c7f4 100644 --- a/src/Task/BalanceHeroResourcesTask.ts +++ b/src/Task/BalanceHeroResourcesTask.ts @@ -1,5 +1,5 @@ -import { Args, Command } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args, Command } from '../Command'; +import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask } from './TaskController'; import { GoToPageAction } from '../Action/GoToPageAction'; import { CompleteTaskAction } from '../Action/CompleteTaskAction'; diff --git a/src/Task/BuildBuildingTask.ts b/src/Task/BuildBuildingTask.ts index 46ad720..37cd5c2 100644 --- a/src/Task/BuildBuildingTask.ts +++ b/src/Task/BuildBuildingTask.ts @@ -1,10 +1,10 @@ -import { Args, Command } from '../Common'; +import { Args, Command } from '../Command'; import { BuildBuildingAction } from '../Action/BuildBuildingAction'; import { CheckBuildingRemainingTimeAction } from '../Action/CheckBuildingRemainingTimeAction'; import { CompleteTaskAction } from '../Action/CompleteTaskAction'; import { GoToPageAction } from '../Action/GoToPageAction'; import { path } from '../utils'; -import { Task } from '../Storage/TaskQueue'; +import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask } from './TaskController'; @registerTask diff --git a/src/Task/GrabVillageState.ts b/src/Task/GrabVillageState.ts index f86709b..9bbfb09 100644 --- a/src/Task/GrabVillageState.ts +++ b/src/Task/GrabVillageState.ts @@ -1,8 +1,8 @@ -import { Args, Command } from '../Common'; +import { Args, Command } from '../Command'; import { CompleteTaskAction } from '../Action/CompleteTaskAction'; import { GoToPageAction } from '../Action/GoToPageAction'; import { path } from '../utils'; -import { Task } from '../Storage/TaskQueue'; +import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask } from './TaskController'; import { grabVillageList } from '../Page/VillageBlock'; import { StoreVillageState } from '../Action/StoreVillageState'; diff --git a/src/Task/ResourcesToLevel.ts b/src/Task/ResourcesToLevel.ts index b324a86..3559b83 100644 --- a/src/Task/ResourcesToLevel.ts +++ b/src/Task/ResourcesToLevel.ts @@ -1,5 +1,5 @@ -import { Args, Command } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args, Command } from '../Command'; +import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask } from './TaskController'; import { GoToPageAction } from '../Action/GoToPageAction'; import { CompleteTaskAction } from '../Action/CompleteTaskAction'; diff --git a/src/Task/SendOnAdventureTask.ts b/src/Task/SendOnAdventureTask.ts index 4f808e0..60ff961 100644 --- a/src/Task/SendOnAdventureTask.ts +++ b/src/Task/SendOnAdventureTask.ts @@ -1,5 +1,5 @@ -import { Args, Command } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args, Command } from '../Command'; +import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask } from './TaskController'; import { GoToPageAction } from '../Action/GoToPageAction'; import { GrabHeroAttributesAction } from '../Action/GrabHeroAttributesAction'; diff --git a/src/Task/TaskController.ts b/src/Task/TaskController.ts index e86a573..fd887a2 100644 --- a/src/Task/TaskController.ts +++ b/src/Task/TaskController.ts @@ -1,4 +1,4 @@ -import { Task } from '../Storage/TaskQueue'; +import { Task } from '../Queue/TaskQueue'; import { Scheduler } from '../Scheduler'; const taskMap: { [name: string]: Function | undefined } = {}; diff --git a/src/Task/TrainTroopTask.ts b/src/Task/TrainTroopTask.ts index e937559..f53f52b 100644 --- a/src/Task/TrainTroopTask.ts +++ b/src/Task/TrainTroopTask.ts @@ -1,5 +1,5 @@ -import { Args, Command } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args, Command } from '../Command'; +import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask } from './TaskController'; import { GoToPageAction } from '../Action/GoToPageAction'; import { CompleteTaskAction } from '../Action/CompleteTaskAction'; diff --git a/src/Task/UpdateResourceContracts.ts b/src/Task/UpdateResourceContracts.ts index 02acaa0..3d40125 100644 --- a/src/Task/UpdateResourceContracts.ts +++ b/src/Task/UpdateResourceContracts.ts @@ -1,5 +1,5 @@ -import { Args, Command } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args, Command } from '../Command'; +import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask } from './TaskController'; import { GoToPageAction } from '../Action/GoToPageAction'; import { path } from '../utils'; diff --git a/src/Task/UpgradeBuildingTask.ts b/src/Task/UpgradeBuildingTask.ts index 0dc4a2b..46a6b67 100644 --- a/src/Task/UpgradeBuildingTask.ts +++ b/src/Task/UpgradeBuildingTask.ts @@ -1,6 +1,6 @@ import { UpgradeBuildingAction } from '../Action/UpgradeBuildingAction'; -import { Args, Command } from '../Common'; -import { Task } from '../Storage/TaskQueue'; +import { Args, Command } from '../Command'; +import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask } from './TaskController'; import { GoToPageAction } from '../Action/GoToPageAction'; import { CheckBuildingRemainingTimeAction } from '../Action/CheckBuildingRemainingTimeAction'; diff --git a/src/TaskQueueRenderer.ts b/src/TaskQueueRenderer.ts index a9af8a7..870a571 100644 --- a/src/TaskQueueRenderer.ts +++ b/src/TaskQueueRenderer.ts @@ -1,4 +1,4 @@ -import { TaskList } from './Storage/TaskQueue'; +import { TaskList } from './Queue/TaskQueue'; import { uniqId } from './utils'; import * as dateFormat from 'dateformat';