def __init__(self): super().__init__() self.coinage = { 'Copper': 0, 'Silver': 0, 'Electrum': 0, 'Gold': dice(12, 6) * 1000, 'Platinum': dice(8, 6) * 1000, 'Gems': 0, 'Jewels': 0 } loot_data = ( (2, {}), (5, {"Gems": (3, 6, 1000), "Magic_Items": [(magic_table_c, (1, 8))]}), (8, {"Jewels": (1, 10, 2500), "Magic_Items": [(magic_table_c, (1, 8))]}), (11, {"Jewels": (1, 4, 7500), "Magic_Items": [(magic_table_c, (1, 8))]}), (14, {"Gems": (1, 8, 5000), "Magic_Items": [(magic_table_c, (1, 8))]}), (22, {"Gems": (3, 6, 1000), "Magic_Items": [(magic_table_d, (1, 6))]}), (30, {"Jewels": (1, 10, 2500), "Magic_Items": [(magic_table_d, (1, 6))]}), (38, {"Jewels": (1, 4, 7500), "Magic_Items": [(magic_table_d, (1, 6))]}), (46, {"Gems": (1, 8, 5000), "Magic_Items": [(magic_table_d, (1, 6))]}), (52, {"Gems": (3, 6, 1000), "Magic_Items": [(magic_table_e, (1, 6))]}), (58, {"Jewels": (1, 10, 2500), "Magic_Items": [(magic_table_e, (1, 6))]}), (63, {"Jewels": (1, 4, 7500), "Magic_Items": [(magic_table_e, (1, 6))]}), (68, {"Gems": (1, 8, 5000), "Magic_Items": [(magic_table_e, (1, 6))]}), (69, {"Gems": (3, 6, 1000), "Magic_Items": [(magic_table_g, (1, 4))]}), (70, {"Jewels": (1, 10, 2500), "Magic_Items": [(magic_table_g, (1, 4))]}), (71, {"Jewels": (1, 4, 7500), "Magic_Items": [(magic_table_g, (1, 4))]}), (72, {"Gems": (1, 8, 5000), "Magic_Items": [(magic_table_g, (1, 4))]}), (74, {"Gems": (3, 6, 1000), "Magic_Items": [(magic_table_h, (1, 4))]}), (76, {"Jewels": (1, 10, 2500), "Magic_Items": [(magic_table_h, (1, 4))]}), (78, {"Jewels": (1, 4, 7500), "Magic_Items": [(magic_table_h, (1, 4))]}), (80, {"Gems": (1, 8, 5000), "Magic_Items": [(magic_table_h, (1, 4))]}), (85, {"Gems": (3, 6, 1000), "Magic_Items": [(magic_table_i, (1, 4))]}), (90, {"Jewels": (1, 10, 2500), "Magic_Items": [(magic_table_i, (1, 4))]}), (95, {"Jewels": (1, 4, 7500), "Magic_Items": [(magic_table_i, (1, 4))]}), (100, {"Gems": (1, 8, 5000), "Magic_Items": [(magic_table_i, (1, 4))]}) ) self.set_loot(loot_data)
def turn(defense: dict): roll_offence, roll_defense = dice(1, 20), dice(1, 20) if roll_offence > roll_defense: damage = dice(1, 10) defense['Health'] = max(defense['Health'] - damage, 0) return defense
def __init__(self): super().__init__() self.coinage = { 'Copper': dice(6, 6) * 100, 'Silver': dice(3, 6) * 100, 'Electrum': 0, 'Gold': dice(2, 6) * 10, 'Platinum': 0, 'Gems': 0, 'Jewels': 0 } loot_data = ( (6, {}), (16, {"Gems": (2, 6, 10)}), (26, {"Jewels": (2, 4, 25)}), (36, {"Gems": (2, 6, 50)}), (44, {"Gems": (2, 6, 10), "Magic_Items": [(magic_table_a, (1, 6))]}), (52, {"Jewels": (2, 4, 25), "Magic_Items": [(magic_table_a, (1, 6))]}), (60, {"Gems": (2, 6, 50), "Magic_Items": [(magic_table_a, (1, 6))]}), (65, {"Gems": (2, 6, 10), "Magic_Items": [(magic_table_b, (1, 4))]}), (70, {"Jewels": (2, 4, 25), "Magic_Items": [(magic_table_b, (1, 4))]}), (75, {"Gems": (2, 6, 50), "Magic_Items": [(magic_table_b, (1, 4))]}), (78, {"Gems": (2, 6, 10), "Magic_Items": [(magic_table_c, (1, 4))]}), (80, {"Jewels": (2, 4, 25), "Magic_Items": [(magic_table_c, (1, 4))]}), (85, {"Gems": (2, 6, 50), "Magic_Items": [(magic_table_c, (1, 4))]}), (92, {"Gems": (2, 4, 25), "Magic_Items": [(magic_table_f, (1, 4))]}), (97, {"Jewels": (2, 6, 50), "Magic_Items": [(magic_table_f, (1, 4))]}), (99, {"Gems": (2, 4, 25), "Magic_Items": [(magic_table_g, 1)]}), (100, {"Jewels": (2, 6, 50), "Magic_Items": [(magic_table_g, 1)]}) ) self.set_loot(loot_data)
def campaign(): random_class = RandomValue(( Barbarian, Gladiator, Knight, Wizard, Warlock, Witch, Archer, Ninja, Pirate, Templar, Druid, Shaman, )) with open('combat_log.csv', 'w') as csv_file: file = csv.writer(csv_file, delimiter=',') file.writerow(("Attacker", "AttackerLevel", "Defender", "DefenderLevel", "Winner")) for _ in range(1000000): attacker = random_class(dice(1, 20)) defender = random_class(dice(1, 20)) file.writerow( (attacker.name, attacker.level, defender.name, defender.level, combat(attacker, defender)))
def combat(player: dict, target: dict): init_roll_a, init_roll_b = dice(1, 20), dice(1, 20) while init_roll_a == init_roll_b: init_roll_a, init_roll_b = dice(1, 20), dice(1, 20) while player['Health'] > 0 and target['Health'] > 0: if init_roll_a > init_roll_b: player, target = combat_round(player, target) else: target, player = combat_round(target, player) if player['Health'] > 0: return player['Name'] elif target['Health'] > 0: return target['Name'] else: return 'Tie'
def set_loot(self, loot_data): loot = cumulative_weighted_choice(loot_data) for key in loot: if key == "Magic_Items": for itm in loot[key]: table, amount = itm if amount == 1: self.magic_items.append(table()) else: self.magic_items.extend(table() for _ in range(dice(*amount))) else: coin_type, amount = key, loot[key] n = len(amount) if n == 2: r, s = amount self.coinage[coin_type] += dice(r, s) elif n == 3: r, s, m = amount self.coinage[coin_type] += dice(r, s) * m
def __init__(self): super().__init__() self.coinage = { 'Copper': 0, 'Silver': 0, 'Electrum': 0, 'Gold': dice(4, 6) * 1000, 'Platinum': dice(5, 6) * 100, 'Gems': 0, 'Jewels': 0 } loot_data = ( (3, {}), (6, {"Jewels": (2, 4, 250)}), (9, {"Jewels": (2, 4, 750)}), (12, {"Gems": (3, 6, 500)}), (15, {"Gems": (3, 6, 1000)}), (19, {"Jewels": (2, 4, 250), "Magic_Items": [(magic_table_a, (1, 4)), (magic_table_b, (1, 6))]}), (23, {"Jewels": (2, 4, 750), "Magic_Items": [(magic_table_a, (1, 4)), (magic_table_b, (1, 6))]}), (26, {"Gems": (3, 6, 500), "Magic_Items": [(magic_table_a, (1, 4)), (magic_table_b, (1, 6))]}), (29, {"Gems": (3, 6, 1000), "Magic_Items": [(magic_table_a, (1, 4)), (magic_table_b, (1, 6))]}), (35, {"Jewels": (2, 4, 250), "Magic_Items": [(magic_table_c, (1, 6))]}), (40, {"Jewels": (2, 4, 750), "Magic_Items": [(magic_table_c, (1, 6))]}), (45, {"Gems": (3, 6, 500), "Magic_Items": [(magic_table_c, (1, 6))]}), (50, {"Gems": (3, 6, 1000), "Magic_Items": [(magic_table_c, (1, 6))]}), (54, {"Jewels": (2, 4, 250), "Magic_Items": [(magic_table_d, (1, 4))]}), (58, {"Jewels": (2, 4, 750), "Magic_Items": [(magic_table_d, (1, 4))]}), (62, {"Gems": (3, 6, 500), "Magic_Items": [(magic_table_d, (1, 4))]}), (66, {"Gems": (3, 6, 1000), "Magic_Items": [(magic_table_d, (1, 4))]}), (68, {"Jewels": (2, 4, 250), "Magic_Items": [(magic_table_e, 1)]}), (70, {"Jewels": (2, 4, 750), "Magic_Items": [(magic_table_e, 1)]}), (72, {"Gems": (3, 6, 500), "Magic_Items": [(magic_table_e, 1)]}), (74, {"Gems": (3, 6, 1000), "Magic_Items": [(magic_table_e, 1)]}), (76, {"Jewels": (2, 4, 250), "Magic_Items": [(magic_table_g, (1, 4))]}), (78, {"Jewels": (2, 4, 750), "Magic_Items": [(magic_table_g, (1, 4))]}), (80, {"Gems": (3, 6, 500), "Magic_Items": [(magic_table_g, (1, 4))]}), (82, {"Gems": (3, 6, 1000), "Magic_Items": [(magic_table_g, (1, 4))]}), (85, {"Jewels": (2, 4, 250), "Magic_Items": [(magic_table_h, (1, 4))]}), (88, {"Jewels": (2, 4, 750), "Magic_Items": [(magic_table_h, (1, 4))]}), (90, {"Gems": (3, 6, 500), "Magic_Items": [(magic_table_h, (1, 4))]}), (92, {"Gems": (3, 6, 1000), "Magic_Items": [(magic_table_h, (1, 4))]}), (94, {"Jewels": (2, 4, 250), "Magic_Items": [(magic_table_i, 1)]}), (96, {"Jewels": (2, 4, 750), "Magic_Items": [(magic_table_i, 1)]}), (98, {"Gems": (3, 6, 500), "Magic_Items": [(magic_table_i, 1)]}), (100, {"Gems": (3, 6, 1000), "Magic_Items": [(magic_table_i, 1)]}), ) self.set_loot(loot_data)
def __init__(self): super().__init__() self.coinage = { 'Copper': dice(2, 6) * 100, 'Silver': dice(2, 6) * 1000, 'Electrum': 0, 'Gold': dice(6, 6) * 100, 'Platinum': dice(3, 6) * 10, 'Gems': 0, 'Jewels': 0 } loot_data = ( (4, {}), (10, {"Jewels": (2, 4, 25)}), (16, {"Gems": (3, 6, 50)}), (22, {"Gems": (3, 6, 100)}), (28, {"Jewels": (2, 4, 250)}), (32, {"Jewels": (2, 4, 25), "Magic_Items": [(magic_table_a, (1, 6))]}), (36, {"Gems": (3, 6, 50), "Magic_Items": [(magic_table_a, (1, 6))]}), (40, {"Gems": (3, 6, 100), "Magic_Items": [(magic_table_a, (1, 6))]}), (44, {"Jewels": (2, 4, 250), "Magic_Items": [(magic_table_a, (1, 6))]}), (49, {"Jewels": (2, 4, 25), "Magic_Items": [(magic_table_b, (1, 4))]}), (54, {"Gems": (3, 6, 50), "Magic_Items": [(magic_table_b, (1, 4))]}), (59, {"Gems": (3, 6, 100), "Magic_Items": [(magic_table_b, (1, 4))]}), (63, {"Jewels": (2, 4, 250), "Magic_Items": [(magic_table_b, (1, 4))]}), (66, {"Jewels": (2, 4, 25), "Magic_Items": [(magic_table_c, (1, 4))]}), (69, {"Gems": (3, 6, 50), "Magic_Items": [(magic_table_c, (1, 4))]}), (72, {"Gems": (3, 6, 100), "Magic_Items": [(magic_table_c, (1, 4))]}), (74, {"Jewels": (2, 4, 250), "Magic_Items": [(magic_table_c, (1, 4))]}), (76, {"Jewels": (2, 4, 25), "Magic_Items": [(magic_table_d, 1)]}), (78, {"Gems": (3, 6, 50), "Magic_Items": [(magic_table_d, 1)]}), (79, {"Gems": (3, 6, 100), "Magic_Items": [(magic_table_d, 1)]}), (80, {"Jewels": (2, 4, 250), "Magic_Items": [(magic_table_d, 1)]}), (84, {"Jewels": (2, 4, 25), "Magic_Items": [(magic_table_f, (1, 4))]}), (88, {"Gems": (3, 6, 50), "Magic_Items": [(magic_table_f, (1, 4))]}), (91, {"Gems": (3, 6, 100), "Magic_Items": [(magic_table_f, (1, 4))]}), (94, {"Jewels": (2, 4, 250), "Magic_Items": [(magic_table_f, (1, 4))]}), (96, {"Gems": (2, 4, 100), "Magic_Items": [(magic_table_g, (1, 4))]}), (98, {"Jewels": (2, 4, 250), "Magic_Items": [(magic_table_g, (1, 4))]}), (99, {"Gems": (3, 6, 100), "Magic_Items": [(magic_table_h, 1)]}), (100, {"Jewels": (2, 4, 250), "Magic_Items": [(magic_table_h, 1)]}) ) self.set_loot(loot_data)
def damage(self): return dice(1, 6)
def damage(self): return dice(self.level, self.dam_dice)
def __init__(self, level): self.level = level self.health = max(self.hit_dice, dice(self.level, self.hit_dice)) self.n_specials = self.level // 5