From ccbfd9deb947c776782b80229be4513485321a88 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Fri, 17 May 2024 22:01:29 +0200 Subject: [node] fixed and optimized contracting --- nodejs/automation/contracting.ts | 58 +++++++++++++++++++++------------------- nodejs/automation/init.ts | 4 ++- nodejs/lib/contracts.ts | 8 +++--- nodejs/lib/ships.ts | 24 ++++++++++------- nodejs/main.ts | 11 ++++++-- 5 files changed, 61 insertions(+), 44 deletions(-) (limited to 'nodejs') diff --git a/nodejs/automation/contracting.ts b/nodejs/automation/contracting.ts index 4648b0d..2215b2c 100644 --- a/nodejs/automation/contracting.ts +++ b/nodejs/automation/contracting.ts @@ -76,43 +76,45 @@ async function runTradeProcurement(contract: Contract, ship: Ship): Promise i.symbol === wantedCargo)[0] // make sure we are not carrying useless stuff await selling.sell(ship, wantedCargo); - // go buy what we need - const markets = sortByDistanceFrom(ship.nav.route.destination, await libSystems.trait(ship.nav.systemSymbol, 'MARKETPLACE')); - // check from the closest one that exports what we need - let buyingPoint: string = ""; - outer: for (let i = 0; i < markets.length; i++) { - const waypoint = await libSystems.waypoint(markets[i].data.symbol); - const market = await libSystems.market(waypoint); - for (let j = 0; j < market.exports.length; j++) { - if (market.exports[j].symbol === wantedCargo) { - buyingPoint = market.symbol; - break outer; - } - } - } - // if we did not find an exporting market we look for an exchange - if (buyingPoint === "") { + if (ship.cargo.units < ship.cargo.capacity) { + // go buy what we need + const markets = sortByDistanceFrom(ship.nav.route.destination, await libSystems.trait(ship.nav.systemSymbol, 'MARKETPLACE')); + // check from the closest one that exports what we need + let buyingPoint: string = ""; outer: for (let i = 0; i < markets.length; i++) { const waypoint = await libSystems.waypoint(markets[i].data.symbol); const market = await libSystems.market(waypoint); - for (let j = 0; j < market.exchange.length; j++) { - if (market.exchange[j].symbol === wantedCargo) { + for (let j = 0; j < market.exports.length; j++) { + if (market.exports[j].symbol === wantedCargo) { buyingPoint = market.symbol; break outer; } } } + // if we did not find an exporting market we look for an exchange + if (buyingPoint === "") { + outer: for (let i = 0; i < markets.length; i++) { + const waypoint = await libSystems.waypoint(markets[i].data.symbol); + const market = await libSystems.market(waypoint); + for (let j = 0; j < market.exchange.length; j++) { + if (market.exchange[j].symbol === wantedCargo) { + buyingPoint = market.symbol; + break outer; + } + } + } + } + if (buyingPoint === "") { + throw `runTradeProcurement failed, no market exports or exchanges ${wantedCargo}`; + } + // go buy what we need + await ship.navigate(await libSystems.waypoint(buyingPoint)); + const units = Math.min( + deliver.unitsRequired - deliver.unitsFulfilled, + ship.cargo.capacity - ship.cargo.units, + ); + await ship.purchase(wantedCargo, units); } - if (buyingPoint === "") { - throw `runTradeProcurement failed, no market exports or exchanges ${wantedCargo}`; - } - // go buy what we need - await ship.navigate(await libSystems.waypoint(buyingPoint)); - const units = Math.min( - deliver.unitsRequired - deliver.unitsFulfilled, - ship.cargo.capacity - ship.cargo.units, - ); - await ship.purchase(wantedCargo, units); // then make a delivery await ship.navigate(deliveryPoint); await contract.deliver(ship); diff --git a/nodejs/automation/init.ts b/nodejs/automation/init.ts index 7ec1252..1fa9949 100644 --- a/nodejs/automation/init.ts +++ b/nodejs/automation/init.ts @@ -5,7 +5,7 @@ import { } from '../lib/api.ts'; import { Agent, initAgent, setAgent } from '../lib/agent.ts'; import { Contract } from '../lib/contracts.ts'; -import { Ship } from '../lib/ships.ts'; +import { initShips, Ship } from '../lib/ships.ts'; import * as libContracts from '../lib/contracts.ts'; const symbol = process.env.NODE_ENV === 'test' ? 'ADYXAX-0' : 'ADYXAX-JS'; @@ -28,6 +28,7 @@ export async function init(): Promise { case 4111: // 4111 means the agent symbol has already been claimed so no server reset happened // TODO await agents.agents(); await initAgent(); + await initShips(); return; default: throw json; @@ -36,4 +37,5 @@ export async function init(): Promise { db.reset(); dbTokens.addToken(json.data.token); setAgent(json.data.agent); + await initShips(); } diff --git a/nodejs/lib/contracts.ts b/nodejs/lib/contracts.ts index 009c853..f9ba212 100644 --- a/nodejs/lib/contracts.ts +++ b/nodejs/lib/contracts.ts @@ -53,8 +53,8 @@ export class Contract { debugLog(response); throw response; } - this.accepted = contract.accepted; - this.terms = contract.terms; + this.accepted = response.data.contract.accepted; + this.terms = response.data.contract.terms; setAgent(response.data.agent); } async deliver(ship: Ship): Promise { @@ -84,7 +84,7 @@ export class Contract { throw response; } } - this.terms = contract.terms; + this.terms = response.data.contract.terms; ship.cargo = response.data.cargo; if(response.data.contract.terms.deliver[0].unitsRequired <= response.data.contract.terms.deliver[0].unitsFulfilled) { return await this.fulfill(); @@ -100,6 +100,6 @@ export class Contract { } setAgent(response.data.agent); this.fulfilled = true; - this.terms = contract.terms; + this.terms = response.data.contract.terms; } }; diff --git a/nodejs/lib/ships.ts b/nodejs/lib/ships.ts index 920cc21..e4875f8 100644 --- a/nodejs/lib/ships.ts +++ b/nodejs/lib/ships.ts @@ -25,15 +25,6 @@ import { shortestPath, } from './utils.ts'; -export async function getShips(): Promise> { - const response = await send>({endpoint: `/my/ships`, page: 1}); - if (response.error) { - debugLog(response); - throw response; - } - return response.data.map(ship => new Ship(ship)); -} - export class Ship { cargo: Cargo; cooldown: Cooldown; @@ -228,3 +219,18 @@ export class Ship { return this.cargo; } } + +let myShips: Array = []; + +export function getShips(): Array { + return myShips; +} + +export async function initShips(): Promise { + const response = await send>({endpoint: `/my/ships`, page: 1}); + if (response.error) { + debugLog(response); + throw response; + } + myShips = response.data.map(ship => new Ship(ship)); +} diff --git a/nodejs/main.ts b/nodejs/main.ts index 2d15c60..c4f205d 100755 --- a/nodejs/main.ts +++ b/nodejs/main.ts @@ -1,10 +1,17 @@ import * as autoContracting from './automation/contracting.ts'; //import * as autoExploring from './automation/exploration.ts'; import * as autoInit from './automation/init.ts'; +import { getAgent } from './lib/agent.ts'; import { getShips } from './lib/ships.ts'; +import { debugLog, send } from './lib/api.ts'; + +//debugLog(await send({endpoint: '/'})); await autoInit.init(); -const ships = await getShips(); +debugLog(getAgent()); + +debugLog(await getAgent().purchaseShip()); -await autoContracting.run(ships[0]); // dedicate the command ship to running contracts +//const ships = getShips(); +//await autoContracting.run(ships[0]); // dedicate the command ship to running contracts //autoExploring.init(); -- cgit v1.2.3