diff options
author | Julien Dessaux | 2023-06-01 01:11:21 +0200 |
---|---|---|
committer | Julien Dessaux | 2023-06-01 01:11:21 +0200 |
commit | 68c457964a02d290f3fe225b090c549d664bb836 (patch) | |
tree | 4b63ee97f5439621536594c59f25b1c35c353b37 /automation | |
parent | Reworked the systems handling and caching with sqlite (diff) | |
download | spacetraders-68c457964a02d290f3fe225b090c549d664bb836.tar.gz spacetraders-68c457964a02d290f3fe225b090c549d664bb836.tar.bz2 spacetraders-68c457964a02d290f3fe225b090c549d664bb836.zip |
Another big refactoring
Diffstat (limited to 'automation')
-rw-r--r-- | automation/automation.js | 26 | ||||
-rw-r--r-- | automation/contracting.js | 6 | ||||
-rw-r--r-- | automation/exploration.js | 20 | ||||
-rw-r--r-- | automation/mining.js | 7 |
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 |