summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Dessaux2024-03-29 00:24:51 +0100
committerJulien Dessaux2024-03-29 00:24:51 +0100
commit719a9c1a77733040de8e1c4256b92111dcc53c13 (patch)
tree4cc20d3a386507085840b8880ad4350754fbecf2
parent[node] stop trying to optimize useless things like local database calls (diff)
downloadspacetraders-719a9c1a77733040de8e1c4256b92111dcc53c13.tar.gz
spacetraders-719a9c1a77733040de8e1c4256b92111dcc53c13.tar.bz2
spacetraders-719a9c1a77733040de8e1c4256b92111dcc53c13.zip
[node] fixed mining and selling loop issues
-rw-r--r--nodejs/automation/contracting.ts8
-rw-r--r--nodejs/automation/mining.ts7
-rw-r--r--nodejs/automation/selling.ts4
-rw-r--r--nodejs/lib/ships.ts7
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<Ship>) {
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<void> {
- 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<Ship> {
// 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<void> {
export async function extract(ship: Ship): Promise<Cargo> {
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<Cargo> {
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;