Add resource performance values
This commit is contained in:
parent
1ce79092bd
commit
8ef3c60d46
@ -16,7 +16,7 @@ export default {
|
|||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
villageName() {
|
villageName() {
|
||||||
let village = this.shared.village;
|
let village = this.shared.activeVillage;
|
||||||
return village ? village.name : 'Unknown';
|
return village ? village.name : 'Unknown';
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -24,9 +24,9 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
shared: this.$root.$data,
|
shared: this.$root.$data,
|
||||||
|
activeVillage: this.$root.$data.activeVillage,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {},
|
|
||||||
methods: {
|
methods: {
|
||||||
formatDate(ts) {
|
formatDate(ts) {
|
||||||
const d = new Date(ts * 1000);
|
const d = new Date(ts * 1000);
|
||||||
@ -34,7 +34,7 @@ export default {
|
|||||||
},
|
},
|
||||||
isThisVillageTask(task) {
|
isThisVillageTask(task) {
|
||||||
const taskVillageId = (task.args || {}).villageId;
|
const taskVillageId = (task.args || {}).villageId;
|
||||||
const currentVillageId = (this.shared.village || {}).id;
|
const currentVillageId = this.activeVillage.id;
|
||||||
return taskVillageId !== undefined && taskVillageId === currentVillageId;
|
return taskVillageId !== undefined && taskVillageId === currentVillageId;
|
||||||
},
|
},
|
||||||
onRemove(taskId) {
|
onRemove(taskId) {
|
||||||
|
@ -1,21 +1,55 @@
|
|||||||
<template>
|
<template>
|
||||||
<section>
|
<section>
|
||||||
<table class="village-table">
|
<table class="village-table">
|
||||||
<tr v-for="village in shared.villages" :key="village.id">
|
<thead>
|
||||||
<td :class="{ active: village.active }">{{ village.id }} - {{ village.name }}</td>
|
<tr>
|
||||||
<td>Д: {{ resources(village.id).lumber }}</td>
|
<th></th>
|
||||||
<td>Г: {{ resources(village.id).clay }}</td>
|
<th class="right">Дерево</th>
|
||||||
<td>Ж: {{ resources(village.id).iron }}</td>
|
<th class="right">Глина</th>
|
||||||
<td>З: {{ resources(village.id).crop }}</td>
|
<th class="right">Железо</th>
|
||||||
<td>
|
<th class="right">Зерно</th>
|
||||||
<a
|
<th class="right">Склад</th>
|
||||||
v-if="village.id !== activeVillageId"
|
<th class="right">Амбар</th>
|
||||||
:href="path('/build.php', { newdid: activeVillageId, gid: 17, t: 5, x: village.crd.x, y: village.crd.y })"
|
</tr>
|
||||||
:title="'Отправить ресурсы в ' + village.name"
|
</thead>
|
||||||
>РЕС</a
|
<tbody>
|
||||||
>
|
<template v-for="village in shared.villages">
|
||||||
</td>
|
<tr class="top-line">
|
||||||
</tr>
|
<td :class="{ active: village.active }" :title="village.id">{{ village.name }}</td>
|
||||||
|
<td class="right" v-text="village.lumber"></td>
|
||||||
|
<td class="right" v-text="village.clay"></td>
|
||||||
|
<td class="right" v-text="village.iron"></td>
|
||||||
|
<td class="right" v-text="village.crop"></td>
|
||||||
|
<td class="right">
|
||||||
|
<a :href="warehousePath(village)" v-text="village.warehouse"></a>
|
||||||
|
</td>
|
||||||
|
<td class="right" v-text="village.granary"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td class="right small">+{{ village.lumber_hour }}</td>
|
||||||
|
<td class="right small">+{{ village.clay_hour }}</td>
|
||||||
|
<td class="right small">+{{ village.iron_hour }}</td>
|
||||||
|
<td class="right small">+{{ village.crop_hour }}</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td class="right" colspan="6">
|
||||||
|
<a
|
||||||
|
class="village-quick-link"
|
||||||
|
v-for="v in shared.villages"
|
||||||
|
v-if="v.id !== village.id"
|
||||||
|
:href="marketPath(village, v)"
|
||||||
|
:title="'Отправить ресурсы из ' + village.name + ' в ' + v.name"
|
||||||
|
>->{{ v.name }}</a
|
||||||
|
>
|
||||||
|
<a class="village-quick-link" :href="quartersPath(village)">Казармы</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</template>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
@ -27,20 +61,22 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
shared: this.$root.$data,
|
shared: this.$root.$data,
|
||||||
|
activeVillage: this.$root.$data.activeVillage,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
|
||||||
activeVillageId() {
|
|
||||||
return this.shared.village.id;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
resources(id) {
|
|
||||||
return this.shared.getVillageResources(id);
|
|
||||||
},
|
|
||||||
path(name, args) {
|
path(name, args) {
|
||||||
return path(name, args);
|
return path(name, args);
|
||||||
},
|
},
|
||||||
|
marketPath(fromVillage, toVillage) {
|
||||||
|
return path('/build.php', { newdid: fromVillage.id, gid: 17, t: 5, x: toVillage.crd.x, y: toVillage.crd.y });
|
||||||
|
},
|
||||||
|
warehousePath(village) {
|
||||||
|
return path('/build.php', { newdid: village.id, gid: 10 });
|
||||||
|
},
|
||||||
|
quartersPath(village) {
|
||||||
|
return path('/build.php', { newdid: village.id, gid: 19 });
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
@ -52,11 +88,30 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.village-table td {
|
.village-table td {
|
||||||
border-top: 1px solid #ddd;
|
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.village-table td.active {
|
.village-table td.active {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.top-line td {
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.small {
|
||||||
|
font-size: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.village-quick-link {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.village-quick-link + .village-quick-link {
|
||||||
|
margin-left: 0.4em;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -3,7 +3,7 @@ import { getNumber, uniqId, waitForLoad } from '../utils';
|
|||||||
import { Scheduler } from '../Scheduler';
|
import { Scheduler } from '../Scheduler';
|
||||||
import { BuildPage } from '../Page/BuildPage';
|
import { BuildPage } from '../Page/BuildPage';
|
||||||
import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask';
|
import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask';
|
||||||
import { grabActiveVillage, grabActiveVillageId, grabVillageList } from '../Page/VillageBlock';
|
import { grabActiveVillageId, grabVillageList } from '../Page/VillageBlock';
|
||||||
import {
|
import {
|
||||||
grabResourceDeposits,
|
grabResourceDeposits,
|
||||||
onResourceSlotCtrlClick,
|
onResourceSlotCtrlClick,
|
||||||
@ -14,7 +14,6 @@ import Vue from 'vue';
|
|||||||
import DashboardApp from './Components/DashboardApp.vue';
|
import DashboardApp from './Components/DashboardApp.vue';
|
||||||
import { ResourcesToLevel } from '../Task/ResourcesToLevel';
|
import { ResourcesToLevel } from '../Task/ResourcesToLevel';
|
||||||
import { Logger } from '../Logger';
|
import { Logger } from '../Logger';
|
||||||
import { Resources } from '../Game';
|
|
||||||
import { VillageState } from '../State/VillageState';
|
import { VillageState } from '../State/VillageState';
|
||||||
import { StateGrabberManager } from '../State/StateGrabberManager';
|
import { StateGrabberManager } from '../State/StateGrabberManager';
|
||||||
|
|
||||||
@ -51,10 +50,10 @@ export class Dashboard {
|
|||||||
|
|
||||||
const state = {
|
const state = {
|
||||||
name: 'Dashboard',
|
name: 'Dashboard',
|
||||||
village: grabActiveVillage(),
|
|
||||||
villages: grabVillageList(),
|
|
||||||
version: this.version,
|
version: this.version,
|
||||||
taskList: this.scheduler.getTaskItems(),
|
activeVillage: {},
|
||||||
|
villages: [],
|
||||||
|
taskList: [],
|
||||||
quickActions: quickActions,
|
quickActions: quickActions,
|
||||||
|
|
||||||
refreshTasks() {
|
refreshTasks() {
|
||||||
@ -66,13 +65,42 @@ export class Dashboard {
|
|||||||
this.taskList = scheduler.getTaskItems();
|
this.taskList = scheduler.getTaskItems();
|
||||||
},
|
},
|
||||||
|
|
||||||
getVillageResources(villageId): Resources {
|
refreshVillages() {
|
||||||
const state = new VillageState(villageId);
|
this.villages = grabVillageList().map(village => {
|
||||||
return state.getResources();
|
const state = new VillageState(village.id);
|
||||||
|
const resources = state.getResources();
|
||||||
|
const storage = state.getResourceStorage();
|
||||||
|
const performance = state.getResourcesPerformance();
|
||||||
|
return {
|
||||||
|
id: village.id,
|
||||||
|
name: village.name,
|
||||||
|
crd: village.crd,
|
||||||
|
active: village.active,
|
||||||
|
lumber: resources.lumber,
|
||||||
|
clay: resources.clay,
|
||||||
|
iron: resources.iron,
|
||||||
|
crop: resources.crop,
|
||||||
|
lumber_hour: performance.lumber,
|
||||||
|
clay_hour: performance.clay,
|
||||||
|
iron_hour: performance.iron,
|
||||||
|
crop_hour: performance.crop,
|
||||||
|
warehouse: storage.warehouse,
|
||||||
|
granary: storage.granary,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
for (let village of this.villages) {
|
||||||
|
if (village.active) {
|
||||||
|
this.activeVillage = village;
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
setInterval(() => state.refreshTasks(), 1000);
|
state.refreshTasks();
|
||||||
|
setInterval(() => state.refreshTasks(), 2000);
|
||||||
|
|
||||||
|
state.refreshVillages();
|
||||||
|
setInterval(() => state.refreshVillages(), 5000);
|
||||||
|
|
||||||
const tasks = this.scheduler.getTaskItems();
|
const tasks = this.scheduler.getTaskItems();
|
||||||
const buildingsInQueue = tasks
|
const buildingsInQueue = tasks
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Coordinates, Village, VillageList } from '../Game';
|
import { Coordinates, Resources, Village, VillageList } from '../Game';
|
||||||
import { GrabError } from '../Errors';
|
import { GrabError } from '../Errors';
|
||||||
import * as URLParse from 'url-parse';
|
import * as URLParse from 'url-parse';
|
||||||
import { getNumber } from '../utils';
|
import { getNumber } from '../utils';
|
||||||
@ -56,3 +56,19 @@ function grabVillageInfo($el): Village {
|
|||||||
);
|
);
|
||||||
return new Village(id, name, active, new Coordinates(x, y));
|
return new Village(id, name, active, new Coordinates(x, y));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function grabResourcesPerformance(): Resources {
|
||||||
|
const $el = jQuery('#production');
|
||||||
|
if ($el.length !== 1) {
|
||||||
|
throw new GrabError();
|
||||||
|
}
|
||||||
|
|
||||||
|
const $nums = $el.find('td.num');
|
||||||
|
|
||||||
|
return new Resources(
|
||||||
|
getNumber($nums.get(0).innerText),
|
||||||
|
getNumber($nums.get(1).innerText),
|
||||||
|
getNumber($nums.get(2).innerText),
|
||||||
|
getNumber($nums.get(3).innerText)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
17
src/State/ResourcePerformanceGrabber.ts
Normal file
17
src/State/ResourcePerformanceGrabber.ts
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import * as URLParse from 'url-parse';
|
||||||
|
import { StateGrabber } from './StateGrabber';
|
||||||
|
import { grabActiveVillageId, grabResourcesPerformance } from '../Page/VillageBlock';
|
||||||
|
import { VillageState } from './VillageState';
|
||||||
|
|
||||||
|
export class ResourcePerformanceGrabber extends StateGrabber {
|
||||||
|
grab(): void {
|
||||||
|
const p = new URLParse(window.location.href, true);
|
||||||
|
if (p.pathname !== '/dorf1.php') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const villageId = grabActiveVillageId();
|
||||||
|
const state = new VillageState(villageId);
|
||||||
|
state.storeResourcesPerformance(grabResourcesPerformance());
|
||||||
|
}
|
||||||
|
}
|
@ -1,12 +1,14 @@
|
|||||||
import { StateGrabber } from './StateGrabber';
|
import { StateGrabber } from './StateGrabber';
|
||||||
import { ResourceGrabber } from './ResourceGrabber';
|
import { ResourceGrabber } from './ResourceGrabber';
|
||||||
|
import { ResourcePerformanceGrabber } from './ResourcePerformanceGrabber';
|
||||||
|
|
||||||
export class StateGrabberManager {
|
export class StateGrabberManager {
|
||||||
private grabbers: Array<StateGrabber> = [];
|
private readonly grabbers: Array<StateGrabber> = [];
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.grabbers = [];
|
this.grabbers = [];
|
||||||
this.grabbers.push(new ResourceGrabber());
|
this.grabbers.push(new ResourceGrabber());
|
||||||
|
this.grabbers.push(new ResourcePerformanceGrabber());
|
||||||
}
|
}
|
||||||
|
|
||||||
grab() {
|
grab() {
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
import { DataStorage } from '../Storage/DataStorage';
|
import { DataStorage } from '../Storage/DataStorage';
|
||||||
import { Resources, ResourceStorage } from '../Game';
|
import { Resources, ResourceStorage } from '../Game';
|
||||||
|
|
||||||
|
const RESOURCES_KEY = 'res';
|
||||||
|
const CAPACITY_KEY = 'cap';
|
||||||
|
const PERFORMANCE_KEY = 'perf';
|
||||||
|
|
||||||
export class VillageState {
|
export class VillageState {
|
||||||
private storage: DataStorage;
|
private storage: DataStorage;
|
||||||
constructor(villageId: number) {
|
constructor(villageId: number) {
|
||||||
@ -8,22 +12,32 @@ export class VillageState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
storeResources(resources: Resources) {
|
storeResources(resources: Resources) {
|
||||||
this.storage.set('res', resources);
|
this.storage.set(RESOURCES_KEY, resources);
|
||||||
}
|
}
|
||||||
|
|
||||||
getResources(): Resources {
|
getResources(): Resources {
|
||||||
let plain = this.storage.get('res');
|
let plain = this.storage.get(RESOURCES_KEY);
|
||||||
let res = new Resources(0, 0, 0, 0);
|
let res = new Resources(0, 0, 0, 0);
|
||||||
return Object.assign(res, plain) as Resources;
|
return Object.assign(res, plain) as Resources;
|
||||||
}
|
}
|
||||||
|
|
||||||
storeResourceStorage(storage: ResourceStorage) {
|
storeResourceStorage(storage: ResourceStorage) {
|
||||||
this.storage.set('cap', storage);
|
this.storage.set(CAPACITY_KEY, storage);
|
||||||
}
|
}
|
||||||
|
|
||||||
getResourceStorage(): ResourceStorage {
|
getResourceStorage(): ResourceStorage {
|
||||||
let plain = this.storage.get('res');
|
let plain = this.storage.get(CAPACITY_KEY);
|
||||||
let res = new ResourceStorage(0, 0);
|
let res = new ResourceStorage(0, 0);
|
||||||
return Object.assign(res, plain) as ResourceStorage;
|
return Object.assign(res, plain) as ResourceStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
storeResourcesPerformance(resources: Resources) {
|
||||||
|
this.storage.set(PERFORMANCE_KEY, resources);
|
||||||
|
}
|
||||||
|
|
||||||
|
getResourcesPerformance(): Resources {
|
||||||
|
let plain = this.storage.get(PERFORMANCE_KEY);
|
||||||
|
let res = new Resources(0, 0, 0, 0);
|
||||||
|
return Object.assign(res, plain) as Resources;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user