1
0
Fork 0

[node] fixed mining and selling loop issues

This commit is contained in:
Julien Dessaux 2024-03-29 00:24:51 +01:00
parent 3cb4f4df51
commit 719a9c1a77
Signed by: adyxax
GPG key ID: F92E51B86E07177E
4 changed files with 15 additions and 11 deletions

View file

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

View file

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

View file

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

View file

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