1
0
Fork 0

Another big refactoring

This commit is contained in:
Julien Dessaux 2023-06-01 01:11:21 +02:00
parent 61b5c8493e
commit 68c457964a
Signed by: adyxax
GPG key ID: F92E51B86E07177E
10 changed files with 79 additions and 83 deletions

26
automation/automation.js Normal file
View file

@ -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
}

View file

@ -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?`;

20
automation/exploration.js Normal file
View file

@ -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();
}

View file

@ -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