fix job generator

This commit is contained in:
evilchili 2024-01-19 14:58:25 -08:00
parent 46a642c30c
commit 5e4e39f30f
2 changed files with 15 additions and 15 deletions

View File

@ -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__':

View File

@ -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]