shipyards

This commit is contained in:
Richard 2024-02-03 21:20:04 +01:00
parent 02f206d078
commit fb3b6162fc
6 changed files with 49 additions and 14 deletions

View File

@ -9,5 +9,4 @@ ADD --chown=user . /app
RUN chmod +x /app/main.py
VOLUME /data
#ENTRYPOINT bash
ENTRYPOINT [ "python3", "/app/main.py"]
CMD ["-d", "/data"]
CMD ["/bin/sh", "-c", "python3 /app/main.py -d /data ; bash -i"]

View File

@ -4,6 +4,7 @@ from nullptr.models.waypoint import Waypoint
from nullptr.models.marketplace import Marketplace
from nullptr.models.jumpgate import Jumpgate
from nullptr.models.ship import Ship
from nullptr.models.shipyard import Shipyard
from .util import *
from time import sleep, time
class ApiError(Exception):
@ -117,7 +118,10 @@ class Api:
return self.store.update(Jumpgate, data, symbol)
def shipyard(self, wp):
return self.request('get', f'systems/{wp.system}/waypoints/{wp}/shipyard')
data = self.request('get', f'systems/{wp.system}/waypoints/{wp}/shipyard')
symbol = str(wp)
return self.store.update(Shipyard, data, symbol)
######## Fleet #########
def list_ships(self):

View File

@ -71,5 +71,4 @@ class AtlasBuilder:
#print(f'jumpgate at {w}')
self.sched(self.api.jumps, w)
if 'SHIPYARD' in w.traits:
# todo
pass
self.sched(self.api.shipyard, w)

View File

@ -205,6 +205,8 @@ class Commander(CommandLine):
self.api.marketplace(w)
if w.type == 'JUMP_GATE':
self.api.jumps(w)
if 'SHIPYARD' in w.traits:
self.api.shipyard(w)
def do_system(self, system_str):
system = self.store.get(System, system_str)
@ -261,19 +263,14 @@ class Commander(CommandLine):
else:
waypoint = self.store.get(Waypoint, waypoint_str.upper())
r = self.api.jumps(waypoint)
pprint(r)
pprint(r, 5)
def do_shipyard(self, w=''):
location = self.resolve_waypoint(w)
if location is None:
raise CommandError(f'waypoint {w} not found')
data = self.api.shipyard(location)
if 'ships' in data:
for s in must_get(data, 'ships'):
print(s['type'], s['purchasePrice'])
else:
for s in must_get(data, 'shipTypes'):
print(s['type'])
sy = self.api.shipyard(location)
pprint(sy, 5)
######## Commerce #########
def do_refuel(self, source='market'):

View File

@ -10,5 +10,6 @@ from nullptr.models.contract import Contract
from nullptr.models.survey import Survey
from nullptr.models.atlas import Atlas
from nullptr.models.crew import Crew
from nullptr.models.shipyard import Shipyard
__all__ = [ 'Waypoint', 'Sector', 'Ship', 'Survey', 'System', 'Agent', 'Marketplace', 'Jumpgate', 'Contract', 'Base', 'Atlas', 'Crew' ]
__all__ = [ 'Waypoint', 'Sector', 'Ship', 'Survey', 'System', 'Agent', 'Marketplace', 'Jumpgate', 'Contract', 'Base', 'Atlas', 'Crew', 'Shipyard' ]

View File

@ -0,0 +1,35 @@
from nullptr.models import Base
from time import time
from nullptr.util import *
class Shipyard(Base):
def define(self):
self.last_prices = 0
self.types = set()
self.prices:dict = {}
def get_waypoint(self):
return self.store.get('Waypoint', self.symbol, create=True)
@classmethod
def ext(self):
return 'syd'
def update(self, d):
if 'ships' in d:
self.last_prices = time()
for s in must_get(d, 'ships'):
self.prices[s['type']] = s['purchasePrice']
for s in must_get(d, 'shipTypes'):
self.types.add(s['type'])
def f(self, detail=1):
r = super().f(detail)
if detail > 2:
r += '\n'
for st in self.types:
price = "Unknown"
if st in self.prices:
price = self.prices[st]
r += f'{st:20} {price}\n'
return r