summaryrefslogtreecommitdiff
path: root/automation
diff options
context:
space:
mode:
authorJulien Dessaux2023-06-01 01:11:21 +0200
committerJulien Dessaux2023-06-01 01:11:21 +0200
commit68c457964a02d290f3fe225b090c549d664bb836 (patch)
tree4b63ee97f5439621536594c59f25b1c35c353b37 /automation
parentReworked the systems handling and caching with sqlite (diff)
downloadspacetraders-68c457964a02d290f3fe225b090c549d664bb836.tar.gz
spacetraders-68c457964a02d290f3fe225b090c549d664bb836.tar.bz2
spacetraders-68c457964a02d290f3fe225b090c549d664bb836.zip
Another big refactoring
Diffstat (limited to 'automation')
-rw-r--r--automation/automation.js26
-rw-r--r--automation/contracting.js6
-rw-r--r--automation/exploration.js20
-rw-r--r--automation/mining.js7
4 files changed, 53 insertions, 6 deletions
diff --git a/automation/automation.js b/automation/automation.js
new file mode 100644
index 0000000..c7fa6f7
--- /dev/null
+++ b/automation/automation.js
@@ -0,0 +1,26 @@
+import * as dbConfig from '../database/config.js';
+import * as dbShips from '../database/ships.js';
+import * as exploration from './exploration.js';
+
+// This function registers then inits the database
+export async function register(symbol, faction) {
+ const response = await fetch('https://api.spacetraders.io/v2/register', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ symbol: symbol,
+ faction: faction,
+ }),
+ });
+ const json = await response.json();
+ console.log(JSON.stringify(response, null, 2));
+ if (response.error !== undefined) {
+ throw response;
+ }
+ dbConfig.registerAgent(json.data);
+ exploration.init();
+ // TODO ship
+ // TODO contract
+}
diff --git a/automation/contracting.js b/automation/contracting.js
index aebb265..b5c7292 100644
--- a/automation/contracting.js
+++ b/automation/contracting.js
@@ -34,14 +34,14 @@ export async function auto(ctx) {
await ships.navigate({ship: ctx.ship, waypoint: deliveryPoint});
break;
case deliveryPoint:
- await ships.dock({ship: ctx.ship});
+ await ships.dock({symbol: ctx.ship});
await ships.refuel({ship: ctx.ship});
console.log(`delivering ${goodCargo.units} of ${good}`);
await contracts.deliver({contract: contract.id, ship: ctx.ship, good: good, units: goodCargo.units });
await ships.navigate({ship: ctx.ship, waypoint: asteroidField});
- await ships.dock({ship: ctx.ship});
+ await ships.dock({symbol: ctx.ship});
await ships.refuel({ship: ctx.ship});
- await ships.orbit({ship: ctx.ship});
+ await ships.orbit({symbol: ctx.ship});
break;
default:
throw `where is the ship?`;
diff --git a/automation/exploration.js b/automation/exploration.js
new file mode 100644
index 0000000..9ea5bf8
--- /dev/null
+++ b/automation/exploration.js
@@ -0,0 +1,20 @@
+import * as db from '../database/systems.js';
+
+// Retrieves all systems information, should be called only once after registering
+export async function init() {
+ if (db.isInit()) {
+ return;
+ }
+ for (let page=1; true; ++page) {
+ const response = await api.send({endpoint: `/systems?limit=20&page=${page}`, priority:100});
+ if (response.error !== undefined) {
+ throw response;
+ }
+ response.data.forEach(system => db.setSystem(system));
+ if (response.meta.total <= response.meta.limit * page) {
+ break;
+ }
+ }
+ console.log('Finished retrieving all systems information');
+ db.init();
+}
diff --git a/automation/mining.js b/automation/mining.js
index bdd89ac..a719bff 100644
--- a/automation/mining.js
+++ b/automation/mining.js
@@ -13,13 +13,13 @@ export async function mineUntilFullOf(ctx) {
if (good?.units + (antimatter?.units ?? 0) >= response.data.cargo.capacity * 0.9) { // > 90% full of the valuable goods
return good.units;
} else { // we are full but need to sell junk
- await ships.dock({ship: ctx.ship});
+ await ships.dock({symbol: ctx.ship});
for (let i=0; i<inventory.length; ++i) {
if (inventory[i].symbol === 'ANTIMATTER') continue;
//console.log(`selling ${inventory[i].units} of ${inventory[i].symbol}`);
await ships.sell({ship: ctx.ship, good: inventory[i].symbol, units: inventory[i].units});
}
- await ships.orbit({ship: ctx.ship});
+ await ships.orbit({symbol: ctx.ship});
}
}
}
@@ -31,7 +31,8 @@ async function mineUntilFull(ctx) {
const response = await ships.extract(ctx);
if (response === null) return null;
//console.log(`${ctx.ship}: extracted ${response.data.extraction.yield.units} of ${response.data.extraction.yield.symbol}`);
- await api.sleep(response.data.cooldown.remainingSeconds*1000);
if (response.data.cargo.units >= response.data.cargo.capacity * 0.9) return response;
}
}
+
+// TODO surveying the asteroid field