From 719a9c1a77733040de8e1c4256b92111dcc53c13 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Fri, 29 Mar 2024 00:24:51 +0100 Subject: [node] fixed mining and selling loop issues --- nodejs/automation/contracting.ts | 8 +++++--- nodejs/automation/mining.ts | 7 ++----- nodejs/automation/selling.ts | 4 ++-- nodejs/lib/ships.ts | 7 ++++++- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/nodejs/automation/contracting.ts b/nodejs/automation/contracting.ts index 344672a..ab3c606 100644 --- a/nodejs/automation/contracting.ts +++ b/nodejs/automation/contracting.ts @@ -58,9 +58,11 @@ async function runProcurement(contract: Contract, ships: Array) { await libShips.navigate(ship, asteroidSymbol); break; default: - // we were either selling or started contracting - await selling.sell(ship, wantedCargo); - await libShips.navigate(ship, asteroidSymbol); + if (libShips.isFull(ship)) { + await selling.sell(ship, wantedCargo); + } else { + await libShips.navigate(ship, asteroidSymbol); + } } } // TODO repurpose the ship diff --git a/nodejs/automation/mining.ts b/nodejs/automation/mining.ts index e1230fd..b9db7d4 100644 --- a/nodejs/automation/mining.ts +++ b/nodejs/automation/mining.ts @@ -20,12 +20,9 @@ export async function mineUntilFullOf(good: string, ship: Ship, asteroidSymbol: } } -// example ctx { symbol: 'ADYXAX-2' } -// extract the ship's cargo contents when more than 80% full then returns the ships cargo object async function mineUntilFull(ship: Ship): Promise { - ship = dbShips.getShip(ship.symbol) as Ship; - while (ship.cargo.units <= ship.cargo.capacity * 0.9) { - ship.cargo = await libShips.extract(ship); + while (!libShips.isFull(ship)) { + await libShips.extract(ship); } } diff --git a/nodejs/automation/selling.ts b/nodejs/automation/selling.ts index 987b8ae..04b0e9d 100644 --- a/nodejs/automation/selling.ts +++ b/nodejs/automation/selling.ts @@ -19,10 +19,10 @@ export async function sell(ship: Ship, good: string): Promise { // can we sell anything here? const goods = whatCanBeTradedAt(cargo.goods, market.imports.concat(market.exchange)); for (let i = 0; i < goods.length; i++) { - const symbol = goods[i].symbol; - await libShips.sell(ship, good); + await libShips.sell(ship, goods[i].symbol); }; // are we done selling everything we can? + ship = dbShips.getShip(ship.symbol); cargo = utils.categorizeCargo(ship.cargo, good); if (Object.keys(cargo.goods).length === 0) { return ship; diff --git a/nodejs/lib/ships.ts b/nodejs/lib/ships.ts index 79b20a6..c673698 100644 --- a/nodejs/lib/ships.ts +++ b/nodejs/lib/ships.ts @@ -28,7 +28,7 @@ export async function dock(ship: Ship): Promise { export async function extract(ship: Ship): Promise { ship = dbShips.getShip(ship.symbol); - if (ship.cargo.units >= ship.cargo.capacity * 0.9) return ship.cargo; + if (isFull(ship)) return ship.cargo; // TODO move to a suitable asteroid? // const asteroidFields = await systems.type({symbol: ship.nav.systemSymbol, type: 'ENGINEERED_ASTEROID'}); // TODO if there are multiple fields, find the closest one? @@ -55,6 +55,11 @@ export async function extract(ship: Ship): Promise { return response.data.cargo } +export function isFull(ship: Ship): boolean { + ship = dbShips.getShip(ship.symbol); + return ship.cargo.units >= ship.cargo.capacity * 0.9; +} + //function hasMount(shipSymbol, mountSymbol) { // const ship = dbShips.getShip(shipSymbol); // return ship.mounts.filter(s => s.symbol === mountSymbol).length > 0; -- cgit v1.2.3