def get(self): """Returns a random encounter meeting the supplied specifications.""" args = parser.parse_args() character_level_dict = Counter(args["character_levels"]) monster_sets = args["monster_sets"] difficulty = args["difficulty"] if not args["difficulty"] is None and args["difficulty"] not in [ "medium", "easy", "hard", ]: raise BadRequest("Invalid difficulty value") if not all([ monster_set in monster_manual.monster_sets for monster_set in monster_sets ]): raise BadRequest("One or more invalid monster sets in request") if not all([level <= 20 for level in character_level_dict.keys()]): raise BadRequest("Maximum character level is 20") source = EncounterSource(character_level_dict=character_level_dict, monster_sets=monster_sets) encounter = source.get_encounter(difficulty=difficulty) return encounter
class PlacePopulator: def __init__(self, terrain=None, all_tags=None, none_tags=None, any_tags=None, level=None, monster_set=None): self.mm = MonsterManual(terrain=terrain) if monster_set is None: sets = self.mm.get_monster_sets(all_tags=all_tags, none_tags=none_tags, any_tags=any_tags, level=level) monster_set = random.choice(sets) self.monster_set = monster_set self.source = EncounterSource(encounter_level=level, monster_sets=[self.monster_set]) def apply(self, graph): for node, data in graph.nodes(data=True): if random.randint(1, 6) >= 5: data["signs"] = self.source.get_sign() data["encounter"] = self.source.get_encounter()
def choose_dragon(self): dragons = special_events_data['dragon lair']['dragons'] dragon_source = EncounterSource(encounter_level=self.level, monster_sets=dragons) return dragon_source.get_encounter(difficulty='hard')
def test_encounter_source_summary(): source = EncounterSource(monster_set="jailers") print(source.get_encounter())