haulin goods
This commit is contained in:
@@ -3,6 +3,8 @@ from nullptr.missions.mine import MiningMission
|
||||
from nullptr.missions.haul import HaulMission
|
||||
from nullptr.missions.travel import TravelMission
|
||||
from nullptr.missions.probe import ProbeMission
|
||||
from nullptr.missions.idle import IdleMission
|
||||
|
||||
|
||||
def get_mission_class( mtype):
|
||||
types = {
|
||||
@@ -10,7 +12,8 @@ def get_mission_class( mtype):
|
||||
'mine': MiningMission,
|
||||
'haul': HaulMission,
|
||||
'travel': TravelMission,
|
||||
'probe': ProbeMission
|
||||
'probe': ProbeMission,
|
||||
'idle': IdleMission
|
||||
}
|
||||
if mtype not in types:
|
||||
raise ValueError(f'invalid mission type {mtype}')
|
||||
|
||||
@@ -97,7 +97,7 @@ class Mission:
|
||||
logging.info(f'mission finished for {self.ship}')
|
||||
|
||||
def is_waiting(self):
|
||||
return self.next_step > time()
|
||||
return self.next_step > time() or self.ship.cooldown > time() or self.ship.arrival > time()
|
||||
|
||||
def is_finished(self):
|
||||
return self.status() in ['done','error']
|
||||
@@ -147,6 +147,10 @@ class BaseMission(Mission):
|
||||
self.api.navigate(self.ship, site)
|
||||
self.next_step = self.ship.arrival
|
||||
|
||||
def step_market(self):
|
||||
loc = self.ship.location
|
||||
self.api.marketplace(loc)
|
||||
|
||||
def step_unload(self):
|
||||
delivery = self.st('delivery')
|
||||
if delivery == 'sell':
|
||||
@@ -176,9 +180,15 @@ class BaseMission(Mission):
|
||||
return 'more'
|
||||
|
||||
def step_load(self):
|
||||
credits = self.api.agent.credits
|
||||
cargo_space = self.ship.cargo_capacity - self.ship.cargo_units
|
||||
resource = self.st('resource')
|
||||
self.api.buy(self.ship, resource, cargo_space)
|
||||
loc = self.ship.location
|
||||
market = self.store.get('Marketplace', loc.symbol)
|
||||
price = market.buy_price(resource)
|
||||
affordable = credits // price
|
||||
amount = min(cargo_space, affordable)
|
||||
self.api.buy(self.ship, resource, amount)
|
||||
|
||||
def step_travel(self):
|
||||
traject = self.st('traject')
|
||||
|
||||
@@ -18,8 +18,10 @@ class HaulMission(BaseMission):
|
||||
|
||||
def steps(self):
|
||||
return {
|
||||
**self.travel_steps('to', 'site', 'load'),
|
||||
**self.travel_steps('to', 'site', 'market'),
|
||||
'market': (self.step_market, 'load'),
|
||||
'load': (self.step_load, 'travel-back'),
|
||||
**self.travel_steps('back', 'dest', 'unload'),
|
||||
'unload': (self.step_unload, 'travel-to'),
|
||||
'unload': (self.step_unload, 'market-dest'),
|
||||
'market-dest': (self.step_market, 'done'),
|
||||
}
|
||||
|
||||
26
nullptr/missions/idle.py
Normal file
26
nullptr/missions/idle.py
Normal file
@@ -0,0 +1,26 @@
|
||||
from nullptr.missions.base import BaseMission, MissionParam
|
||||
import time
|
||||
|
||||
class IdleMission(BaseMission):
|
||||
def start_state(self):
|
||||
return 'start'
|
||||
|
||||
def step_wait(self):
|
||||
self.next_step = int(time.time()) + self.st('seconds')
|
||||
|
||||
def step_idle(self):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def params(cls):
|
||||
return {
|
||||
'seconds': MissionParam(int, True)
|
||||
}
|
||||
|
||||
def steps(self):
|
||||
return {
|
||||
'start': (self.step_wait, 'wait'),
|
||||
'wait': (self.step_idle, 'done')
|
||||
}
|
||||
|
||||
|
||||
@@ -20,10 +20,6 @@ class ProbeMission(BaseMission):
|
||||
|
||||
}
|
||||
|
||||
def step_market(self):
|
||||
loc = self.ship.location
|
||||
self.api.marketplace(loc)
|
||||
|
||||
def step_next_hop(self):
|
||||
hops = self.st('hops')
|
||||
next_hop = self.st('next-hop')
|
||||
|
||||
Reference in New Issue
Block a user