To sort:
- Record requests per-ship? Calculate number of requests used per cycle?
- Confirm survey sizes have consistent extraction rates across trade symbols.
- Make shipInfo include an emoji for the behavior.
Earning:
- Keep per-ship logs, so can calculate per-ship efficiency.
- Use recent earnings-per-second in ship behavior planning.
- Be able to buy miners outside of the main system.
- Try changing deal finding heuristic to only consider buy price.
- Spread out traders across the galaxy better.
- Record which ship generated a survey and with what mounts?
- Allow ships to buy from the same location at high trade volumes?
- Make Survey selection find a value point and then look back further than the last 100 surveys for surveys above that value.
- Do we correctly navigate right away after the last jump?
- Use the closest ship to a shipyard when buying a ship.
Exploring:
- Explorers should explore an entire system and then go to the jump gate and then from the jump gate plan their next system.
- Probes should go sit at shipyards and marketplaces when there is nothing to explore.
- Buy an Explorer and teach it how to warp to other systems and other jump gate clusters.
Tech Debt:
- Write a test suite for routing.
Efficiency:
- Make the script robust to network failures.
- Teach route planner how to warp.
Automation:
- Need to store handle and email somewhere.
- Need logic for planning which faction to be (random)?
- Logic for planning what to do with money (e.g. buy ships, by mods) Should disable buying behavior for less time early on?
Thoughts
- Miners are just the "find me where to sell this" problem
- Contracts are just the "find me where to buy this" problem
- Arbitrage is both of those problems, should be able to share code.
ApiException 401: {"error":{"message":"Failed to parse token. Token reset_date does not match the server. Server resets happen on a weekly to bi-weekly frequency during alpha. After a reset, you should re-register your agent. Expected: 2023-07-08, Actual: 2023-06-24","code":401,"data":{"expected":"2023-07-08","actual":"2023-06-24"}}}
[WARN] Failed to parse exception json: FormatException: Unexpected character (at character 1) HTTP connection failed: POST /my/ships/ESEIDEL-15/navigate ^
Unhandled exception: ApiException 400: HTTP connection failed: POST /my/ships/ESEIDEL-15/navigate (Inner exception: Connection reset by peer)
#0 IOClient.send (package:http/src/io_client.dart:96:7) #1 BaseClient._sendUnstreamed (package:http/src/base_client.dart:93:32) #2 ApiClient.invokeAPI (package:openapi/api_client.dart:101:18) #3 RateLimitedApiClient.handleUnexpectedRateLimit (package:cli/net/rate_limit.dart:63:24) #4 RateLimitedApiClient.invokeAPI (package:cli/net/rate_limit.dart:101:22) #5 FleetApi.navigateShip (package:openapi/api/fleet_api.dart:1189:22) #6 navigateShip (package:cli/net/direct.dart:53:7)
[WARN] πΈ#C took 1s (2 requests) expected 0.7s [WARN] πΈ#C (miner) took 1s (2 requests) expected 0.7s Unhandled exception: ApiException 500: {"error":{"code":500,"message":"Something unexpected went wrong! If you want to help you can file an issue here: https://github.com/SpaceTradersAPI/api-docs"}} #0 FleetApi.sellCargo (package:openapi/api/fleet_api.dart:1762:7) #1 sellCargo (package:cli/net/direct.dart:121:7) #2 sellAllCargo (package:cli/net/actions.dart:79:24) #3 sellAllCargoAndLog (package:cli/net/actions.dart:110:3) #4 advanceMiner (package:cli/behavior/miner.dart:215:7) #5 advanceShipBehavior (package:cli/behavior/advance.dart:83:23) #6 advanceShips (package:cli/logic.dart:51:25) #7 logic (package:cli/logic.dart:150:7) #8 cliMain (file:///root/space_traders/packages/cli/bin/cli.dart:101:3) #9 main. (file:///root/space_traders/packages/cli/bin/cli.dart:107:7) #10 main (file:///root/space_traders/packages/cli/bin/cli.dart:105:3)
Ship list differs at index 2: [differs at offset 3046:, ... "symbol":"ALUMINUM_O ..., ... "symbol":"PRECIOUS_S ..., ^] [WARN] Ship list changed, updating cache.
[WARN] πΈ#A Jump X1-U93 to X1-KV19 (1759) expected 176, got 175. [WARN] πΈ#4C Jump X1-UM11 to X1-SY37 (2000) expected 200, got 199.
πΈ#1A
πΈ#4A βοΈ market data @ X1-AF63-69302X [WARN] πΈ#4A No profitable deals within 10 jumps of X1-AF63. [WARN] planning X1-QC19-44545C to X1-FK85-17613A took 3s [WARN] Costed 15 deals in 3s [WARN] planning X1-ZK61-40889A to X1-FK85-17613A took 2s [WARN] Costed 5 deals in 2s [WARN] planning X1-HA27-82906A to X1-FK85-17613A took 3s [WARN] Costed 2 deals in 3s [WARN] planning X1-VP50-40413C to X1-FK85-17613A took 6s [WARN] planning X1-RQ52-75611B to X1-FK85-17613A took 8s [WARN] Costed 5 deals in 15s [WARN] planning X1-NK41-26588X to X1-FK85-17613A took 8s [WARN] Costed 8 deals in 8s [WARN] planning X1-BS76-95937C to X1-FK85-17613A took 3s [WARN] Costed 10 deals in 3s [WARN] planning X1-Y3-22546F to X1-FK85-17613A took 4s [WARN] Costed 2 deals in 4s [WARN] planning X1-JX18-24605A to X1-FK85-17613A took 5s [WARN] Costed 6 deals in 5s [WARN] planning X1-CX61-59010D to X1-FK85-17613A took 3s [WARN] Costed 5 deals in 3s [WARN] Costed 2 deals in 1s [WARN] planning X1-MA9-83012X to X1-FK85-17613A took 5s [WARN] Costed 12 deals in 5s [WARN] Costed 57 deals in 1s [WARN] Costed 4 deals in 1s [WARN] planning X1-VF21-68037Z to X1-FK85-17613A took 4s [WARN] Costed 6 deals in 4s [WARN] planning X1-YA66-57211X to X1-FK85-17613A took 2s [WARN] Costed 4 deals in 2s [WARN] Costed 18 deals in 1s [WARN] planning X1-NS34-07355A to X1-FK85-17613A took 10s [WARN] Costed 39 deals in 11s [WARN] Costed 64 deals in 1s [WARN] planning X1-UB97-84299A to X1-FK85-17613A took 2s [WARN] Costed 12 deals in 3s [WARN] Costed 4 deals in 1s [WARN] planning X1-VF43-91464B to X1-FK85-17613A took 2s [WARN] Costed 8 deals in 2s [WARN] Costed 10 deals in 1s [WARN] Costed 81 deals in 1s πΈ#4A Found placement: 7c/s 9820 35449 X1-UZ93-16812Z πΈ#4A Potential: COPPER_ORE X1-YP31-30465Z 35c -> X1-YP31-21892B 55c +20c (57%) 314s 7c/s 4,322c πΈ#4A Beginning route to X1-UZ93-16812Z πΈ#4A π« to X1-AF63-64525B JUMP_GATE (2m) spent 104 fuel [WARN] πΈ#4A (trader) took 124s (3 requests) expected 1.0s
ApiException 400: {"error":{"message":"Failed to execute jump. Ship cannot execute jump to the system it is currently located in.","code":4208}} #0 FleetApi.jumpShip (package:openapi/api/fleet_api.dart:1118:7)
<title>500 Server Error</title> , retrying after 1 seconds Unhandled exception: ApiException 400: {"error":{"message":"Failed to execute jump. Ship cannot execute jump to the system it is currently located in.","code":4208}} #0 FleetApi.jumpShip (package:openapi/api/fleet_api.dart:1118:7)deliver 1210 COPPER_ORE to X1-FA31-74322Z in 6d for 161,510c with 32,985c upfront Expected profit: 125,525c
πΈ#61 Purchased 10 of MODULE_CREW_QUARTERS_I, still have 10 units we would like to buy, looping. πΈ#61 Purchased 10 of MODULE_CREW_QUARTERS_I, still have 10 units we would like to buy, looping. πΈ#61 Purchased 10 of MODULE_CREW_QUARTERS_I, still have 10 units we would like to buy, looping. πΈ#61 Purchased 10 of MODULE_CREW_QUARTERS_I, still have 10 units we would like to buy, looping.
deliver 96000 (95640 remaining) ALUMINUM_ORE to X1-ST5-23902F in 6d for 6,182,400c with 2,649,600c upfront Expected profit: 3,840,000c
Maybe show the list of ships on it in the output?
πΈ#2B
πΈ#27
πΈ#27
πΈ#42
e.g. did the price change since when the trade was scoped vs. when it was executed?
πΈ#54 π« to X1-UC71-90215B JUMP_GATE (39s) spent 49 fuel
πΈ#6F
Miners will likely fight over surveys, probably all grabbing the "best" survey and possibly exhausting it at the same time and having to restart the mining operation?
πΈ#54 βοΈ market data @ X1-TM41-05300A Unhandled exception: Bad state: No element #0 Stream.firstWhere. (dart:async/stream.dart:1703:9) #1 _rootRun (dart:async/zone.dart:1391:47) #2 _CustomZone.run (dart:async/zone.dart:1301:19) #3 _CustomZone.runGuarded (dart:async/zone.dart:1209:7) #4 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13) #5 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7) #6 _DelayedDone.perform (dart:async/stream_impl.dart:534:14) #7 _PendingEvents.handleNext (dart:async/stream_impl.dart:620:11) #8 _PendingEvents.schedule. (dart:async/stream_impl.dart:591:7) #9 _rootRun (dart:async/zone.dart:1399:13) #10 _CustomZone.run (dart:async/zone.dart:1301:19) #11 _CustomZone.bindCallback. (dart:async/zone.dart:1233:23) #12 _microtaskLoop (dart:async/schedule_microtask.dart:40:21) #13 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5) #14 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:123:13) #15 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:190:5)
On both:
Unhandled exception: Bad state: No element #0 Stream.firstWhere. (dart:async/stream.dart:1703:9) #1 _rootRun (dart:async/zone.dart:1391:47) #2 _CustomZone.run (dart:async/zone.dart:1301:19) #3 _CustomZone.runGuarded (dart:async/zone.dart:1209:7) #4 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13) #5 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7) #6 _DelayedDone.perform (dart:async/stream_impl.dart:534:14) #7 _PendingEvents.handleNext (dart:async/stream_impl.dart:620:11) #8 _PendingEvents.schedule. (dart:async/stream_impl.dart:591:7) #9 _rootRun (dart:async/zone.dart:1399:13) #10 _CustomZone.run (dart:async/zone.dart:1301:19) #11 _CustomZone.bindCallback. (dart:async/zone.dart:1233:23) #12 _microtaskLoop (dart:async/schedule_microtask.dart:40:21) #13 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5) #14 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:123:13)
ApiException 400: {"error":{"message":"Ship is currently in-transit from X1-MU55-23072X to X1-MU55-79315D and arrives in 19 seconds.","code":4214,"data":{"departureSymbol ":"X1-MU55-23072X","destinationSymbol":"X1-MU55-79315D","arrival":"2023-08-22T05:14:17.353Z","departureTime":"2023-08-22T05:13:49.353Z","secondsToArrival":19}}} #0 FleetApi.navigateShip (package:openapi/api/fleet_api.dart:1194:7) #1 navigateShip (package:cli/net/direct.dart:58:7) #2 navigateToLocalWaypoint (package:cli/net/actions.dart:35:23) #3 navigateToLocalWaypointAndLog (package:cli/net/actions.dart:333:18) #4 continueNavigationIfNeeded (package:cli/nav/navigation.dart:219:11) #5 beingRouteAndLog (package:cli/nav/navigation.dart:76:21) #6 beingNewRouteAndLog (package:cli/nav/navigation.dart:44:20) #7 advanceTrader (package:cli/behavior/trader.dart:787:21) #8 advanceShipBehavior (package:cli/behavior/advance.dart:89:23) #9 advanceShips (package:cli/logic.dart:52:25) #10 logic (package:cli/logic.dart:152:7) #11 cliMain (file:///root/space_traders/packages/cli/bin/cli.dart:137:3) #12 main. (file:///root/space_traders/packages/cli/bin/cli.dart:143:7) #13 main (file:///root/space_traders/packages/cli/bin/cli.dart:141:3)
Write a tool to list how many surveys deep we have?
"At the start of a reset my miners sell themselves and only locally, after that I add haulers to which the miners transfers the cargo and they sell locally or nearby. currently running 20 surveyors, 50 extractors, 20 or so heavy freighter haulers 30 backup light haulers and an army of probes trying to update markets around the primary partition if there are requests left to spend." https://discord.com/channels/792864705139048469/792864705139048472/1160644392185503774
X1-DK86-91295E-BA7460 SMALL SILICON_CRYSTALS, IRON_ORE, ICE_WATER, ICE_WATER, ICE_WATER, PRECIOUS_STONES, ICE_WATER ev 0c β±οΈ 1m until 2023-10-14 16:50:26.838 πΈ#1 π 1x at X1-DK86-91295E X1-DK86-91295E-78D652 SMALL PRECIOUS_STONES, ALUMINUM_ORE, ALUMINUM_ORE, COPPER_ORE ev 0c β±οΈ 1m until 2023-10-14 16:51:36.927 πΈ#1 π 1x at X1-DK86-91295E X1-DK86-91295E-DC6E8D SMALL ICE_WATER, QUARTZ_SAND, AMMONIA_ICE, ICE_WATER ev 0c β±οΈ 1m until 2023-10-14 16:52:47.013 πΈ#1 π 1x at X1-DK86-91295E X1-DK86-91295E-D0E02B SMALL ICE_WATER, ICE_WATER, SILICON_CRYSTALS, SILICON_CRYSTALS, SILICON_CRYSTALS ev 0c
πΈ#6 Starting buy mount MOUNT_MINING_LASER_II
πΈ#6 Beginning route to X1-DK86-32917D (1m)
πΈ#6 π« to X1-DK86-32917D ORBITAL_STATION (1m) spent 68 fuel
πΈ#2
Unhandled exception: HandshakeException: Connection terminated during handshake
[WARN] Failed to parse exception json: FormatException: Unexpected character (at character 1) Exception occurred: POST /my/ships/ESEIDEL-7/jump ^
Unhandled exception: ApiException 400: Exception occurred: POST /my/ships/ESEIDEL-7/jump (Inner exception: TimeoutException after 0:00:30.000000: Future not completed)
#0 ApiClient.invokeAPI (package:openapi/api_client.dart:164:7) #1 FleetApi.jumpShip (package:openapi/api/fleet_api.dart:1187:22) #2 _useJumpGateAndLogInner (package:cli/net/actions.dart:409:7) #3 useJumpGateAndLog (package:cli/net/actions.dart:427:9) #4 continueNavigationIfNeeded (package:cli/nav/navigation.dart:222:11) #5 advanceShipBehavior (package:cli/behavior/advance.dart:74:17) #6 advanceShips (package:cli/logic.dart:71:29)
- Create a new hauler behavior that sends haulers to mines to take goods.
- Teach Miners to decide whether to:
- Sell local
- Travel and sell
- Transfer to a hauler
- Jettison
πΈ#65 βοΈ shipyard data @ X1-ZP28-72377A πΈ#65 π€ 1 ENGINE_ION_DRIVE_II +107% +20,769c per 1 x 40,214c = +40,214c -> π¦ 287,136,414c πΈ#65 π€ 1 ENGINE_ION_DRIVE_II +95% +18,415c per 1 x 37,860c = +37,860c -> π¦ 287,174,274c πΈ#65 π€ 1 ENGINE_ION_DRIVE_II +80% +15,516c per 1 x 34,961c = +34,961c -> π¦ 287,209,235c πΈ#65 π€ 1 ENGINE_ION_DRIVE_II +61% +11,948c per 1 x 31,393c = +31,393c -> π¦ 287,240,628c πΈ#65 π€ 1 ENGINE_ION_DRIVE_II +39% +7,555c per 1 x 27,000c = +27,000c -> π¦ 287,267,628c πΈ#65 π€ 1 ENGINE_ION_DRIVE_II +11% +2,146c per 1 x 21,591c = +21,591c -> π¦ 287,289,219c πΈ#65 π€ 1 ENGINE_ION_DRIVE_II -23% -4,513c per 1 x 14,932c = +14,932c -> π¦ 287,304,151c πΈ#65 π€ 1 ENGINE_ION_DRIVE_II -65% -12,712c per 1 x 6,733c = +6,733c -> π¦ 287,310,884c πΈ#65 π€ 1 ENGINE_ION_DRIVE_II -100% -19,444c per 1 x 1c = +1c -> π¦ 287,310,885c πΈ#65 π€ 1 ENGINE_ION_DRIVE_II -100% -19,444c per 1 x 1c = +1c -> π¦ 287,310,886c πΈ#65 Expected 18,669c profit (71c/s), got -147,134c (-311c/s) in 00:07:53, expected 00:04:22
If nothing else, each interval should be evaluated against the possibility of moving to sell?
Once this is working can buy more of each.
e.g. SHIP_COMMAND_FRIGATE @ X1-QP91-B7, speed = 30 capacity = 60, fuel <= 1200, outlay <= 1000000, jumps <= 10, waypoints <= 200 Opps for 51 trade symbols. Top 100 deals: MEDICINE X1-QP91-D47 12,505c -> X1-QP91-A1 16,664c +204,814c (27%) 3m 930c/s 770,456c CLOTHING X1-QP91-K83 14,338c -> X1-QP91-A1 18,548c +201,726c (23%) 5m 663c/s 883,794c MACHINERY X1-QP91-E50 1,968c -> X1-QP91-D48 2,459c +25,055c (20%) 4m 90c/s 122,485c ELECTRONICS X1-QP91-F52 2,072c -> X1-QP91-A3 2,510c +18,374c (14%) 3m 89c/s 128,576c ELECTRONICS X1-QP91-F52 2,072c -> X1-QP91-D47 2,455c +18,425c (14%) 4m 76c/s 128,875c ELECTRONICS X1-QP91-F52 2,072c -> X1-QP91-D48 2,446c +17,885c (14%) 4m 74c/s 128,875c ELECTRONICS X1-QP91-F52 2,072c -> X1-QP91-H56 2,439c +14,224c (11%) 3m 64c/s 128,576c MICROPROCESSORS X1-QP91-A3 2,900c -> X1-QP91-D47 3,193c +11,725c (7%) 3m 49c/s 179,855c ELECTRONICS X1-QP91-F52 2,072c -> X1-QP91-C45 2,394c +11,016c (9%) 4m 37c/s 129,174c EQUIPMENT X1-QP91-K83 2,516c -> X1-QP91-A1 2,854c +10,586c (7%) 5m 34c/s 156,514c EQUIPMENT X1-QP91-K83 2,516c -> X1-QP91-D47 2,721c +6,447c (4%) 5m 18c/s 156,813c GOLD X1-QP91-B6 266c -> X1-QP91-H58 332c +2,464c (14%) 3m 13c/s 17,456c SILVER X1-QP91-B6 231c -> X1-QP91-H58 277c +1,264c (8%) 3m 6c/s 15,356c ALUMINUM X1-QP91-H55 161c -> X1-QP91-K83 202c +815c (7%) 4m 3c/s 11,305c
I should be able to do some partial trades of the high-value items for decent money.
If you pass it 1000000, CostedDeal.expectedCosts will end up slightly higher than that?
I don't know if B6 sells fuel. But it drifted when it should have refueled:
πΈ#1
% dart run bin/routing_plan.dart X1-QP91-B6 X1-QP91-A3 Route found (5ms) X1-QP91-B6 to X1-QP91-A3 speed: 30 max-fuel: 1200 navCruise X1-QP91-B6 X1-QP91-A3 0:04:49.000000s in 4m uses 329 fuel
πΈ#1 βοΈ shipyard data @ X1-QP91-C45 πΈ#1 π€ 10 SHIP_PLATING +33% +5,941c per 10 x 23,834c = +238,340c -> π¦ 905,407c πΈ#1 π€ 10 SHIP_PLATING +19% +3,337c per 10 x 21,230c = +212,300c -> π¦ 1,117,707c πΈ#1 π€ 10 SHIP_PLATING +1% +131c per 10 x 18,024c = +180,240c -> π¦ 1,297,947c πΈ#1 Expected 11,331c profit (52c/s), got -73,430c (-299c/s) in 00:04:05, expected 00:03:35
That way we can run our "where should we sell this" in between lots.
If you don't have a full tank of fuel, it will plan a route that will cause you to end up drifting, what it should do is plan an early refuel in it and when it refuels re-set to a full capacity.
I'm not sure we have any guards for when construction is completed.
e.g. fuelCapacity: 100 A -> B = 100 B -> C = 1000 (so drift) Try to plan [A, B, C] = fails but it should find a [DRIFT, DRIFT] route, or if B has fuel, a [CRUISE, DRIFT] route.
πΈ#F Starting: X1-QP91-H56 to X1-QP91-B11 speed: 3 max-fuel: 80 navCruise X1-QP91-H56 X1-QP91-A3 0:06:38.000000s refuel X1-QP91-A3 X1-QP91-A3 0:00:00.000000s navCruise X1-QP91-A3 X1-QP91-F51 0:07:36.000000s refuel X1-QP91-F51 X1-QP91-F51 0:00:00.000000s navDrift X1-QP91-F51 X1-QP91-B11 6:16:38.000000s in 6h uses 101 fuel
πΈ#C Starting: X1-QP91-H56 to X1-QP91-B13 speed: 3 max-fuel: 80 navCruise X1-QP91-H56 X1-QP91-D48 0:06:13.000000s refuel X1-QP91-D48 X1-QP91-D48 0:00:00.000000s navDrift X1-QP91-D48 X1-QP91-B13 6:09:41.000000s in 6h uses 45 fuel
πΈ#D Starting: X1-QP91-H56 to X1-QP91-B16 speed: 3 max-fuel: 80 navCruise X1-QP91-H56 X1-QP91-A3 0:06:38.000000s refuel X1-QP91-A3 X1-QP91-A3 0:00:00.000000s navCruise X1-QP91-A3 X1-QP91-F51 0:07:36.000000s refuel X1-QP91-F51 X1-QP91-F51 0:00:00.000000s navDrift X1-QP91-F51 X1-QP91-B16 7:03:51.000000s in 7h uses 101 fuel
πΈ#E Starting: X1-QP91-H56 to X1-QP91-B14 speed: 3 max-fuel: 80 navCruise X1-QP91-H56 X1-QP91-D47 0:06:13.000000s refuel X1-QP91-D47 X1-QP91-D47 0:00:00.000000s navDrift X1-QP91-D47 X1-QP91-B14 5:54:25.000000s in 6h uses 45 fuel
Unhandled exception: ApiException 400: {"error":{"message":"Agent ESEIDEL already has an active contract.","code":4511,"data":{"agentSymbol":"ESEIDEL","contractId":"xxx"}}} #0 FleetApi.negotiateContract (package:openapi/api/fleet_api.dart:1335:7) #1 negotiateContractAndLog (package:cli/net/actions.dart:502:20) #2 acceptContractsIfNeeded (package:cli/behavior/trader.dart:663:9) #3 advanceTrader (package:cli/behavior/trader.dart:843:5) #4 advanceShipBehavior (package:cli/behavior/advance.dart:101:23) #5 advanceShips (package:cli/logic.dart:71:29) #6 logic (package:cli/logic.dart:184:7) #7 cliMain (file:///root/space_traders/packages/cli/bin/cli.dart:148:3) #8 main. (file:///root/space_traders/packages/cli/bin/cli.dart:154:7) #9 main (file:///root/space_traders/packages/cli/bin/cli.dart:152:3)
I think this happened due to time skew with the server during Contact expiration.
Our local check though the contract was expired. But the server didn't.
πΈ#1 Purchased SHIP_LIGHT_SHUTTLE for 83,956c -> π¦ 260,176c πΈ#1 Bought ship: ESEIDEL-4 [WARN] πΈ#1 Purchased ESEIDEL-4 (SHIP_LIGHT_SHUTTLE)! [WARN] Adding missing ship ESEIDEL-4 [WARN] FleetRole.unknown has no specified behaviors, idling. πΈ#1 βοΈ shipyard data @ X1-RK11-A2 πΈ#1 Purchased SHIP_LIGHT_SHUTTLE for 88,259c -> π¦ 171,917c πΈ#1 Bought ship: ESEIDEL-5 [WARN] πΈ#1 Purchased ESEIDEL-5 (SHIP_LIGHT_SHUTTLE)! [WARN] Adding missing ship ESEIDEL-5 [WARN] FleetRole.unknown has no specified behaviors, idling.
Should be possible with making scores more dynamic?
Just clogs up trade routes.
ESEIDEL-4: Behavior.trader In transit to X1-RK11-I57 JUMP_GATE TRANSPORT trader 0/40 destination: X1-RK11-E46, arrives in 5h ASSAULT_RIFLES X1-RK11-E46 2,049c -> X1-RK11-J60 4,760c +104,594c (126%) 3h 9c/s 82,996c duration: 2h ESEIDEL-5: Behavior.trader In transit to X1-RK11-I58 FUEL_STATION TRANSPORT trader 0/40 destination: X1-RK11-D45, arrives in 3h ADVANCED_CIRCUITRY X1-RK11-D45 2,801c -> X1-RK11-I57 13,000c +405,466c (354%) 2h 45c/s 114,534c duration: 2h
Validate extractableByMount, against what is actually extracted and expectedGoodsForWaypoint against what is actually surveyed.
Unhandled exception: ApiException 400: {"error":{"message":"Construction material requirements for ADVANCED_CIRCUITRY have been met.","code":4801}} #0 SystemsApi.supplyConstruction (package:openapi/api/systems_api.dart:742:7) #1 supplyConstruction (package:cli/net/direct.dart:153:20) #2 _deliverConstructionMaterialsIfPossible (package:cli/behavior/trader.dart:430:20) #3 _handleConstructionDealAtDelivery (package:cli/behavior/trader.dart:393:3) #4 MultiJob.run (package:cli/behavior/behavior.dart:162:22) #5 advanceShipBehavior (package:cli/behavior/advance.dart:104:23) #6 advanceShips (package:cli/logic.dart:71:29) #7 logic (package:cli/logic.dart:184:7) #8 cliMain (file:///root/space_traders/packages/cli/bin/cli.dart:148:3) #9 main. (file:///root/space_traders/packages/cli/bin/cli.dart:154:7) #10 main (file:///root/space_traders/packages/cli/bin/cli.dart:152:3)
[WARN] πΈ#D scheduled for 2023-12-04 00:22:33.750 but it is 2s late πΈ#D Still have 2 cargo, waiting for hauler to arrive. πΈ#D No haulers at JX78-XF5X, unknown next arrival time for ESEIDEL-7, ESEIDEL-9, checking in 1 minute. πΈ#D Hauler ESEIDEL-7 is IN_ORBIT to JX78-XF5X arrival -17m, with 0 space available. πΈ#D Hauler ESEIDEL-9 is IN_ORBIT to JX78-XF5X arrival -7m, with 75 space available.
πΈ#11 Still have 4 cargo, waiting for hauler to arrive. πΈ#11 No haulers at JX78-XF5X, unknown next arrival time for ESEIDEL-7, ESEIDEL-9, checking in 1 minute. πΈ#11 Hauler ESEIDEL-7 is IN_ORBIT to JX78-XF5X arrival -7m, with 80 space available. πΈ#11 Hauler ESEIDEL-9 is IN_ORBIT to JX78-XF5X arrival -18m, with 0 space available.
11 is in orbit at X1-JX78-XF5X. 7 is in orbit at X1-JX78-XF5X.
I think this is due to miner haulers not running often? And thus not updating their transit status?
If you disable the "avoid from same source" construction will buy multiple times of the same final set of units for a contract. e.g. if only 40 more are needed, you'll still end up with two 40-sized trades going.
β±οΈ 2s until 2023-12-10 16:18:27.064 πΈ#F Still have 5 cargo, waiting for hauler to arrive. πΈ#F No haulers at JX78-B37, unknown next arrival time for ESEIDEL-8, ESEIDEL-15, checking in 1 minute. πΈ#F Hauler ESEIDEL-8 is IN_ORBIT to JX78-B37 arrival -15m, with 0 space available. πΈ#F Hauler ESEIDEL-15 is IN_ORBIT to JX78-B37 arrival -3m, with 73 space available. β±οΈ 3s until 2023-12-10 16:18:31.255
πΈ#A Still have 3 cargo, waiting for hauler to arrive. πΈ#A No haulers at JX78-B37, unknown next arrival time for ESEIDEL-8, ESEIDEL-15, checking in 1 minute. πΈ#A Hauler ESEIDEL-8 is IN_ORBIT to JX78-B37 arrival -13m, with 0 space available. πΈ#A Hauler ESEIDEL-15 is IN_ORBIT to JX78-B37 arrival -5m, with 77 space available.
Right now we don't AFAICT, which means we'll only chart them when we come back to them.
Found 0 deals for ESEIDEL-25 from SA91-F21B [WARN] πΈ#25 No profitable deals near X1-SA91-F21B. Found 0 deals for ESEIDEL-25 from SA91-F21B Found 0 deals for ESEIDEL-25 from CM2-FE8A Found 0 deals for ESEIDEL-25 from VX52-C19B Found 0 deals for ESEIDEL-25 from KN11-CD8C Found 0 deals for ESEIDEL-25 from PR56-E21B Found 0 deals for ESEIDEL-25 from VJ34-D25C Found 0 deals for ESEIDEL-25 from SS12-E23C Found 0 deals for ESEIDEL-25 from XK65-Z22D Found 0 deals for ESEIDEL-25 from XG74-D28D Found 1 deals for ESEIDEL-25 from UG86-XF4D Found 0 deals for ESEIDEL-25 from UV60-X25E Found 1 deals for ESEIDEL-25 from UG2-BZ7A Found 2 deals for ESEIDEL-25 from ZA48-ZE9C Found 0 deals for ESEIDEL-25 from MR97-BD5B Found 0 deals for ESEIDEL-25 from MR11-EF9A Found 0 deals for ESEIDEL-25 from DU30-E23D Found 0 deals for ESEIDEL-25 from JR48-ZZ6B Found 0 deals for ESEIDEL-25 from CH36-CE9E Found 0 deals for ESEIDEL-25 from RQ80-Z10C Found 0 deals for ESEIDEL-25 from RJ35-CF7C Found 0 deals for ESEIDEL-25 from XY32-E22X Found 0 deals for ESEIDEL-25 from SA11-X20A Found 0 deals for ESEIDEL-25 from NB49-ZX9F Found 0 deals for ESEIDEL-25 from FQ47-XX8B Found 0 deals for ESEIDEL-25 from K12-AX8E Found 0 deals for ESEIDEL-25 from PZ26-B10B Found 0 deals for ESEIDEL-25 from ZV29-CD9B Found 0 deals for ESEIDEL-25 from UN50-E31F Found 0 deals for ESEIDEL-25 from FC60-A21Z Found 0 deals for ESEIDEL-25 from MJ51-CD5A Found 0 deals for ESEIDEL-25 from JC61-E11F Found 0 deals for ESEIDEL-25 from UY94-F10C Found 5 deals for ESEIDEL-25 from RN21-X11Z Found 0 deals for ESEIDEL-25 from YK67-DX5B Found 2 deals for ESEIDEL-25 from ZU42-BB8C Found 0 deals for ESEIDEL-25 from DR61-F21C Found 0 deals for ESEIDEL-25 from GF21-B23F Found 0 deals for ESEIDEL-25 from KB84-EA5B Found 0 deals for ESEIDEL-25 from HT92-FF8E Found 0 deals for ESEIDEL-25 from JD23-B22B Found 0 deals for ESEIDEL-25 from BZ48-DB9E Found 0 deals for ESEIDEL-25 from YG19-X24E Found 0 deals for ESEIDEL-25 from GS85-X12C Found 0 deals for ESEIDEL-25 from NN43-X25X Found 0 deals for ESEIDEL-25 from PG23-D25Z Found 0 deals for ESEIDEL-25 from JC44-A28B Found 0 deals for ESEIDEL-25 from DK25-E20C Found 0 deals for ESEIDEL-25 from YA53-FA8E Found 0 deals for ESEIDEL-25 from RC89-F22B Found 0 deals for ESEIDEL-25 from SV64-C24Z Found 0 deals for ESEIDEL-25 from MR51-X18D Found 0 deals for ESEIDEL-25 from GV91-Z20Z Found 0 deals for ESEIDEL-25 from KS8-BF9C Found 0 deals for ESEIDEL-25 from KV83-A23E Found 0 deals for ESEIDEL-25 from MR47-ZB7E Found 3 deals for ESEIDEL-25 from SB18-CC5B Found 0 deals for ESEIDEL-25 from AP97-ZA9Z Found 0 deals for ESEIDEL-25 from ZZ78-CD5C Found 2 deals for ESEIDEL-25 from UB21-CE7C Found 0 deals for ESEIDEL-25 from ZK58-ZD5A Found 0 deals for ESEIDEL-25 from PM62-CB5Z Found 0 deals for ESEIDEL-25 from GT14-XZ8B Found 0 deals for ESEIDEL-25 from DQ95-A27B Found 0 deals for ESEIDEL-25 from AN36-F20X Found 0 deals for ESEIDEL-25 from KX96-AD6E Found 0 deals for ESEIDEL-25 from B40-BF7E Found 0 deals for ESEIDEL-25 from UX31-AD6E No nearby markets for ESEIDEL-25 [WARN] πΈ#25 Failed to find better location for trader. Disabling Behavior.trader for ESEIDEL-25 for 10m. [WARN] πΈ#25 took 17s (0 requests) expected 0.0s
I'm not confident that we're correctly computing reachability. I think uncharted jumpgates might be ignored?
findBestMarketToSell relies on prices, it probably doesn't need to.
[WARN] πΈ#1 No market for HYDROCARBON. Disabling Behavior.siphoner for ESEIDEL-1 for 10m. Found 14 deals for ESEIDEL-1 from AC35-C43 πΈ#1 Found deal: EQUIPMENT AC35-K90 2,191c -> AC35-A1 3,135c +37,472c (43%) 5m 127c/s 87,928c πΈ#1 Cargo hold not empty, finding market to sell HYDROCARBON. πΈ#1 No nearby market to sell HYDROCARBON, jettisoning cargo! [WARN] πΈ#1 Jettisoning 40 HYDROCARBON πΈ#1 Beginning route to AC35-K90 (3m) πΈ#1 No market at AC35-C43, cannot refuel, need to replan. πΈ#1 Setting flightMode to DRIFT πΈ#1 Insufficient fuel, drifting to AC35-K90 [WARN] πΈ#1 Fuel low: 126 / 400
e.g.
] showRoute X1-GN97-A1 X1-JX78-A1 RD-DEV-1 hops:11 eta:42m46s cost:-45,975 debug:32ms/1,457 eta fuelCost fuelB lvFuel act mode from to arCd arFuel
37s 0 0 222 nav BURN X1-GN97-A1 X1-GN97-E54 0ms 116 1m30s -225 3 400 nav BURN X1-GN97-E54 X1-GN97-I63 0ms 42 3m18s -225 3 342 nav CRUISE X1-GN97-I63 X1-GN97-I62 0ms 123 0ms -15,000 0 123 jump CRUISE X1-GN97-I62 X1-Z62-X19E 16m 123 16m 0 0 123 cooldown CRUISE X1-Z62-X19E X1-Z62-X19E 0ms 123 0ms -15,000 0 123 jump CRUISE X1-Z62-X19E X1-MR11-EF9A 16m 123 16m 0 0 123 cooldown CRUISE X1-MR11-EF9A X1-MR11-EF9A 0ms 123 0ms -15,000 0 123 jump CRUISE X1-MR11-EF9A X1-JX78-I60 16m 123 3m18s -150 2 323 nav CRUISE X1-JX78-I60 X1-JX78-I61 12m42s 104 1m9s -150 2 304 nav BURN X1-JX78-I61 X1-JX78-K91 11m33s 46 54s -225 3 346 nav BURN X1-JX78-K91 X1-JX78-A1 10m39s 158
Try planning out various simulations for each mine and judge based on expected total c/s? (or maybe c/r?) rather than median prices at the markets.
So I can better understand why we don't chose specific mining locations, e.g. for a supply chain.
% dart run bin/exports_supply_chain.dart Sourcing FAB_MATS for AC35-I59 Shuttle FAB_MATS from AC35-F51 (SCARCE, RESTRICTED) to AC35-I59 (no market) distance = 449 Manufacture FAB_MATS at AC35-F51 (SCARCE, RESTRICTED) Shuttle IRON from AC35-H55 (SCARCE, RESTRICTED) to AC35-F51 (LIMITED, GROWING) distance = 90 Manufacture IRON at AC35-H55 (SCARCE, RESTRICTED) Extract IRON_ORE from AC35-C43, deliver to AC35-H55 (SCARCE, GROWING) distance = 158 Extract QUARTZ_SAND from AC35-C43, deliver to AC35-F51 (SCARCE, WEAK) distance = 229
This might be fixed by considering jettisoning goods.
The client doesn't seem to do this right now. But did do so once I ran the jumpgates.dart script.
We should be scanning a system before we travel to it. But right now we don't respect the maxAge so we'll think it's always uncharted.
Timed out (1s) waiting for response? Timed out (2s) waiting for response? Timed out (1s) waiting for response? Timed out (1s) waiting for response? Timed out (2s) waiting for response? Timed out (1s) waiting for response? Unhandled exception: TimeoutException after 0:00:30.000000: Future not completed
Charted all known systems, starting asteroid charting. [WARN] πΈ#28 (charter) took 3s (0 requests) expected 0.0s πΈ#28 JY88-C20A (ASTEROID) is missing chart, routing. πΈ#28 Beginning route to JY88-C20A (6m) πΈ#28 π« to JY88-C20A ASTEROID (6m)
We include fuel price at destination when evaluating trades. But if we're trading fuel we don't want to do that. We could refuel from cargo and the price is also going to change as part of our delivery.
[WARN] πΈ#F Expected 258,752c profit (9c/s), got 1,720c (0c/s) in 12:36:02, expected 07:17:49 Unhandled exception: ApiException 400: {"error":{"message":"Agent ESEIDEL already has an active contract.","code":4511,"data":{"agentSymbol":"ESEIDEL","contractId":"xxxx"}}} #0 FleetApi.negotiateContract (package:openapi/api/fleet_api.dart:1335:7) #1 negotiateContractAndLog (package:cli/net/actions.dart:543:20) #2 acceptContractsIfNeeded (package:cli/behavior/trader.dart:545:9) #3 _initDeal (package:cli/behavior/trader.dart:855:5) #4 MultiJob.run (package:cli/behavior/behavior.dart:154:22) #5 advanceShipBehavior (package:cli/behavior/advance.dart:107:23) #6 advanceShips. (package:cli/logic.dart:101:21) #7 captureTimeAndRequests (package:cli/net/counts.dart:66:18) #8 advanceShips (package:cli/logic.dart:99:29) #9 logic (package:cli/logic.dart:211:7) #10 cliMain (file:///root/space_traders/packages/cli/bin/cli.dart:148:3) #11 main. (file:///root/space_traders/packages/cli/bin/cli.dart:154:7) #12 main (file:///root/space_traders/packages/cli/bin/cli.dart:152:3)
about 2pm on Sunday 12/24.
{
"id": "xxx",
"factionSymbol": "ASTRO",
"type": "PROCUREMENT",
"terms": {
"deadline": "2023-12-24T21:55:42.369Z",
"payment": {
"onAccepted": 1950,
"onFulfilled": 6915
},
"deliver": [
{
"tradeSymbol": "PLATINUM_ORE",
"destinationSymbol": "X1-AC35-B7",
"unitsRequired": 45,
"unitsFulfilled": 0
}
]
},
"accepted": true,
"fulfilled": false,
"expiration": "2023-12-18T21:55:42.369Z",
"deadlineToAccept": "2023-12-18T21:55:42.369Z"
}
e.g. 7hr for 1c/s isn't worth it. But 30m for 1c/s might be. 7hr for 7c/s is fine.
Right now it takes a long time to get back to the end of the queue.
πΈ#36 Charted reachable systems within 5 jumps, charting asteroids in X1-TM24. [WARN] πΈ#36 (charter) took 2s (0 requests) expected 0.0s πΈ#36 TM24-Z65F (ASTEROID) is missing chart, routing. [WARN] πΈ#36 Beginning route to TM24-Z65F (10m) πΈ#36 π« to TM24-Z65F ASTEROID (10m) πΈ#3C πΊοΈ X1-YG47-A53F - ASTEROID - Common Metal Deposits, Deep Craters, Shallow Craters πΈ#3C Charted reachable systems within 5 jumps, charting asteroids in X1-YG47. [WARN] πΈ#3C (charter) took 3s (0 requests) expected 0.0s πΈ#3C YG47-C56C (ASTEROID) is missing chart, routing. [WARN] πΈ#3C Beginning route to YG47-C56C (42m) πΈ#3C π« to YG47-C56C ASTEROID (42m) πΈ#39 πΊοΈ X1-FN61-X16B - ASTEROID - Common Metal Deposits πΈ#39 Charted reachable systems within 5 jumps, charting asteroids in X1-FN61. [WARN] πΈ#39 (charter) took 3s (0 requests) expected 0.0s
πΈ#F π« to PK16-J63 FUEL_STATION (5m) spent 122 fuel [WARN] πΈ#F (trader) took 4s (2 requests) expected 0.8s
Command ship can get stuck on many hour trades and then not be able to buy new ships even after they're queued.
Would only need to apply to trades at low c/s.
- Some sort of initial phase (plan trades based on import/export?)
- Ramping up to a certain number of traders.
- Focusing on construction (Need to fix supply chain logic to handle entire chains.)
- Ramping up probes + exploring (Don't buy probes before opening the jump gate, or they'll start system watching instead of charting.)
- Turning off mining and replacing with heavy freighters.
- Can us the "when done" logic to predict when we sell inventory.
- Can use the historical data for miners.
πΈ#E Still have 12 cargo, waiting for hauler to arrive. πΈ#E No haulers at TV94-B44, unknown next arrival time for ESEIDEL-6, checking in 1 minute. πΈ#E Hauler ESEIDEL-6 is IN_ORBIT to TV94-B44 arrival -30m, with 0 space available.
Lists current status of the construction. Lists any in-progress construction deals. Lists status of construction supply chain?
That way miner haulers can bring fuel with them when heading to a mine and then refuel there, so they have enough to get back to the market.
e.g. when we know of 10 uncharted systems by 1 probe? up to a limit? Could do similar with trades? Buy N haulers when we have N available trades? And maybe mining? When we have N available mines with score above x?
Presumably just a bool on centralCommand that the outer loop can check/clear.
Need two things:
- A way to know that we should re-gen.
- A list of jumpgates to add? (Or do we just re-start the scan?) If we add a single jump gate we'd want to know it's distance? Or do we just not care and call it 0 each time?
Turns out we need squads too since the closest hydrocarbon market is an exchange rather than an import.
I suspect that "home systems" look different only by types / number of waypoints.
πΈ#1
[WARN] πΈ#1 Beginning route to AQ24-I53 (8m) πΈ#1 π« to AQ24-E45 MOON (2m) spent 131 fuel
[WARN] πΈ#1 late 3s πΈ#1 β½ 2 FUEL +1% +1c per 2 x 74c = -148c -> π¦ 385,560c πΈ#1 Beginning route to AQ24-I53 (6m) πΈ#1 Setting flightMode to DRIFT πΈ#1 Insufficient fuel, drifting to AQ24-I53 πΈ#1 π« to AQ24-I53 JUMP_GATE (55m) spent 1 fuel
πΈ#29 Found deal: ANTIMATTER AQ24-I53 12,161c -> GC80-I53 13,859c +2,284c (1%) 0ms 2,284c/s 247,178c πΈ#29 Beginning route to AQ24-I53 (0ms) πΈ#29 π₯Ά for 2h
This might be correct to clear the trade if we have to wait? But I'm also not confident that won't end up resetting trades between jumps during client restarts?
dart run bin/behavior.dart 29 [ { "behavior": "trader", "shipSymbol": "ESEIDEL-29", "deal": null, "routePlan": null, "buyJob": null, "deliverJob": null, "shipBuyJob": null, "mountJob": null, "pickupJob": null, "extractionJob": null, "systemWatcherJob": null, "jobIndex": 0 } ]
"cooldown": { "shipSymbol": "ESEIDEL-29", "totalSeconds": 6944, "remainingSeconds": 6943, "expiration": "2024-03-01T18:17:10.909Z" },
- Generate a list of places to warp to.
- Model how long warping takes: https://github.com/SpaceTradersAPI/api-docs/wiki/Travel-Fuel-and-Time
- Plan a route to the warp point (which may include jump gates)?
Found 3 deals for ESEIDEL-49 from AQ24-I53 πΈ#49 Found deal: LIQUID_HYDROGEN AQ24-C40 3c -> AQ24-G48 32c +3,648c (414%) 9m 6c/s 882c πΈ#49 β½ 4 FUEL +3% +2c per 4 x 74c = -296c -> π¦ 1,667c πΈ#49 Market at AQ24-I53 doesn't buy FABRICS πΈ#49 Cargo hold not empty, finding market to sell FABRICS. πΈ#49 Selecting AQ24-K85 earns 28,650c extra (including 14,147c for fuel) over 6s (4775.0/s) πΈ#49 Beginning route to AQ24-K85 (5m) πΈ#49 π« to AQ24-K85 PLANET (5m) spent 366 fuel
Probably have some logic which computes the number of trades available per-system, and then reassigns ships to the closest system with available trades?
Maybe more generally we should be computing how many traders a given system can handle and re-balancing our traders accordingly? Similar to what we do with system-watchers?
πΈ#12
And the fuel costs are quite high.
Looks correct: warpCruise KH4-C10C JV44-A1 18m 632 fuel actual: πΈ#64 π« to JV44-A1 PLANET (18m) spent 632 fuel
πΈ#64
How did 98 get a buy job!?
πΈ#7 surveyor
I think it happens due to ships not being added immediately after purchase?
πΈ#8 siphoner
My theory is this happens when we do top of loop in between when the ship was purchased and when the new ship is scheduled?
How does it end up with a second buy job?
πΈ#1
Each system can have "slots" based on the number of connected systems without charts. Assign up to half the slots? Do some sort of proximity based matching?
Currently probes (and traders) do self-assign which can cause probes to "grab" far-away systems, even though a closer probe would have done better.
Same thing could work for traders. Compute the number of deals above a certain c/s, starting from that system and assign up to a certain capacity level with a similar matching algorithm?
Pre-compute the path to jumpgate and path from jumpgate. And add those costs as costs to beginning or ending with a jump. If those costs are passed into the warp planner the planner will then correctly choose to warp small distances to adjacent systems to cross large distances within a system. It also simplifies the inter-system planning since we don't have to modify actions after the fact, we just pass in costs to the planner?
- Add warp planner.
- Add logic for explorers to go to more systems (via warp).
It (and all other scripts) aren't setting up the Config phase correctly. Should make config a getter, and have it log if the phase isn't set.
root@ubuntu-s-2vcpu-4gb-sfo3-01:/space_traders/packages/cli# dart run bin/squads.dart
2 squads
Squad 0: mine @ TA36-XE5F
6 MINING_DRONE TA36-XE5F 4/15
7 SURVEYOR TA36-XE5F
B MINING_DRONE TA36-XE5F 0/15
D SURVEYOR TA36-XE5F
F MINING_DRONE TA36-XE5F 6/15
11 MINING_DRONE TA36-XE5F 9/15
Squad 1: mine @ TA36-B9
A MINING_DRONE TA36-B9 7/15
C SURVEYOR TA36-B9
E MINING_DRONE TA36-B9 10/15
10 MINING_DRONE TA36-B9 0/15
root@ubuntu-s-2vcpu-4gb-sfo3-01:/space_traders/packages/cli# dart run bin/fleet.dart
Fleet: 1 Frigate, 1 Probe, 11 Light Freighter, 12 Drone
1 command (trader) 40/40
FERTILIZERS 40 x 212c = 8,480c
en route to TA36-E44 MOON in 31s
FERTILIZERS TA36-G48 178c -> TA36-E44 212c +1,216c (17%) 2m 10c/s 7,264c
duration: 2m
2 probe (systemWatcher) SATELLITE
en route to TA36-H52 MOON in 57s
3 trader (minerHauler) 47/80
ALUMINUM_ORE 47 x 20c = 940c
Orbiting TA36-XE5F ENGINEERED_ASTEROID
4 trader (minerHauler) 80/80
FUEL 5 x 68c = 340c
SILICON_CRYSTALS 34 x 47c = 1,598c
COPPER_ORE 2 x 22c = 44c
IRON_ORE 27 x 23c = 621c
QUARTZ_SAND 12 x 19c = 228c
en route to TA36-B7 ASTEROID_BASE in 1m
5 trader (minerHauler) 0/80
Orbiting TA36-XE5F ENGINEERED_ASTEROID
Whenever you're at a shipyard which sells your same kind of ship for less than the cost of scrap. Buy a new ship of your type and scrap yourself.
[WARN] REFUELING FROM CARGO πΈ#12 trader β½ 0 FUEL -100% -72c per 0 x 0c = -0c -> π¦ 876,309c
So we can answer questions like "how much time was the fleet idle", etc.
https://discord.com/channels/792864705139048469/792864705139048472/1217412921882050611
[WARN] πΈ#8 siphoner late 4s
πΈ#8 siphoner
Maybe pass the amount of fuel next to be used to the refuel command? Or make it always just spill?
πΈ#1 command
[WARN] πΈ#1 command Beginning route to TA36-A1 (12m) πΈ#1 command Setting flightMode to DRIFT πΈ#1 command Insufficient fuel, drifting to JG3-I55 πΈ#1 command π« to JG3-I55 JUMP_GATE (1h) spent 1 fuel [WARN] πΈ#1 command Flight time 01:04:08 does not match predicted 00:55:40 speed: 30 mode: DRIFT distance: 398.8984833262719
e.g. 5 trades above 10c/s available in system X.
Are we not buying probes there? Or are they just not showing up as system watchers?
[WARN] πΈ#8F trader late 2s [WARN] Costed 1156 deals in 2s Found 15 deals for ESEIDEL2-8F from ND96-C39 [WARN] πΈ#8F trader Deal expected profit per second too low: 2c/s Found 1 deals for ESEIDEL2-8F from GT77-C10X Found 1 deals for ESEIDEL2-8F from FC7-X12Z Found 1 deals for ESEIDEL2-8F from TS46-ZA7D Found 1 deals for ESEIDEL2-8F from AQ76-ZE7Z No nearby markets for ESEIDEL2-8F [WARN] πΈ#8F trader Failed to find better location for trader. Disabling Behavior.trader for ESEIDEL2-8F for 10m. πΈ#8F trader took 14s (0 requests, 11 queries) expected 0.0s 2: SELECT * FROM behavior_ WHERE ship_symbol = @ship_symbol 2: SELECT * FROM behavior_ WHERE behavior = @behavior 1: SELECT * FROM ship_ 1: DELETE FROM behavior_ WHERE ship_symbol = @ship_symbol 1: INSERT INTO behavior_ (ship_symbol, behavior, json) VALUES (@ship_symbol, @behavior, @json) ON CONFLICT (ship_symbol) DO UPDATE SET behavior = @behavior, json = @json
1: SELECT * FROM contract_ WHERE fulfilled = 'false' AND 'deadline_to_accept' > @now 1: SELECT * FROM contract_ WHERE accepted = 'false' 1: SELECT * FROM contract_ 1: SELECT * FROM behavior_