fix job generator
This commit is contained in:
parent
46a642c30c
commit
5e4e39f30f
27
dmsh/jobs.py
27
dmsh/jobs.py
|
@ -1,6 +1,5 @@
|
||||||
import random
|
import random
|
||||||
import collections
|
import collections
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from rolltable.types import RollTable
|
from rolltable.types import RollTable
|
||||||
from npc import random_npc
|
from npc import random_npc
|
||||||
|
@ -8,12 +7,6 @@ from npc import random_npc
|
||||||
Crime = collections.namedtuple('Crime', ['name', 'min_bounty', 'max_bounty'])
|
Crime = collections.namedtuple('Crime', ['name', 'min_bounty', 'max_bounty'])
|
||||||
|
|
||||||
|
|
||||||
def generate_location(frequency='default'):
|
|
||||||
source = Path("sources/locations.yaml")
|
|
||||||
rt = RollTable([source.read_text()], hide_rolls=True, frequency=frequency)
|
|
||||||
return random.choice(rt.rows[1:])[1]
|
|
||||||
|
|
||||||
|
|
||||||
def nearest(value, step=50):
|
def nearest(value, step=50):
|
||||||
if value < step:
|
if value < step:
|
||||||
return step
|
return step
|
||||||
|
@ -33,13 +26,15 @@ class BaseJob:
|
||||||
details=None,
|
details=None,
|
||||||
reward=None,
|
reward=None,
|
||||||
contact=None,
|
contact=None,
|
||||||
location=None
|
location=None,
|
||||||
|
source_path=None
|
||||||
):
|
):
|
||||||
self._name = name
|
self._name = name
|
||||||
self._details = details
|
self._details = details
|
||||||
self._reward = reward
|
self._reward = reward
|
||||||
self._contact = contact or random_npc()
|
self._contact = contact or random_npc()
|
||||||
self._location = location
|
self._location = location
|
||||||
|
self._source_path = source_path
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self):
|
def name(self):
|
||||||
|
@ -88,7 +83,6 @@ class Bounty(BaseJob):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
self._target = target
|
self._target = target
|
||||||
|
|
||||||
self._crime = crime
|
self._crime = crime
|
||||||
|
|
||||||
dead_or_alive = []
|
dead_or_alive = []
|
||||||
|
@ -131,6 +125,11 @@ class Bounty(BaseJob):
|
||||||
self._target = random_npc()
|
self._target = random_npc()
|
||||||
return self._target
|
return self._target
|
||||||
|
|
||||||
|
def generate_location(self, frequency='default'):
|
||||||
|
source = self._source_path / "locations.yaml"
|
||||||
|
rt = RollTable([source.read_text()], hide_rolls=True, frequency=frequency)
|
||||||
|
return random.choice(rt.rows[1:])[1]
|
||||||
|
|
||||||
|
|
||||||
class Determinant(BaseJob):
|
class Determinant(BaseJob):
|
||||||
"""
|
"""
|
||||||
|
@ -144,8 +143,8 @@ class Escort(BaseJob):
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self._contact = random_npc()
|
self._contact = random_npc()
|
||||||
self._location = generate_location('settlements')
|
self._location = self.generate_location('settlements')
|
||||||
self._destination = generate_location('default')
|
self._destination = self.generate_location('default')
|
||||||
self._reward = f"{nearest(random.randint(5, 20), step=5)} GP/day"
|
self._reward = f"{nearest(random.randint(5, 20), step=5)} GP/day"
|
||||||
self._name = (
|
self._name = (
|
||||||
f"Accompany {self.contact} from {self.location} to "
|
f"Accompany {self.contact} from {self.location} to "
|
||||||
|
@ -158,7 +157,7 @@ class Foraging(BaseJob):
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
source = Path("sources/flora.yaml")
|
source = self._source_path / "flora.yaml"
|
||||||
rt = RollTable([source.read_text()], hide_rolls=True)
|
rt = RollTable([source.read_text()], hide_rolls=True)
|
||||||
|
|
||||||
# [ rarity, name, descr, val ]
|
# [ rarity, name, descr, val ]
|
||||||
|
@ -178,8 +177,8 @@ classes = BaseJob.__subclasses__()
|
||||||
job_types = [c.__name__ for c in classes]
|
job_types = [c.__name__ for c in classes]
|
||||||
|
|
||||||
|
|
||||||
def generate_job():
|
def generate_job(source_path):
|
||||||
return random.choice(classes)()
|
return random.choice(classes)(source_path=source_path)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -379,7 +379,8 @@ class DMShell(BasePrompt):
|
||||||
"""
|
"""
|
||||||
Generate a random jobs table.
|
Generate a random jobs table.
|
||||||
"""
|
"""
|
||||||
self.console.print(jobs.generate_job())
|
source_path = self._data_path / Path("sources")
|
||||||
|
self.console.print(jobs.generate_job(source_path))
|
||||||
|
|
||||||
@command(usage="""
|
@command(usage="""
|
||||||
[title]PLACE[/title]
|
[title]PLACE[/title]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user