100 lines
2.9 KiB
Python
100 lines
2.9 KiB
Python
import random
|
|
from typing import List, Tuple
|
|
|
|
from map.quest_map import EncounterType
|
|
from map.treasure_hoard import TreasureHoard, Treasure, TreasureType as TT
|
|
|
|
|
|
class HoardTable:
|
|
def __init__(self, input: List[Tuple[int, int, TT]]):
|
|
self.input = input
|
|
|
|
def roll(self) -> Treasure:
|
|
dice_total = random.randint(1, 6) + random.randint(1, 6)
|
|
for top_of_band, amount, treasure_type in self.input:
|
|
if dice_total <= top_of_band:
|
|
return Treasure(amount, treasure_type)
|
|
|
|
|
|
_TABLES = {
|
|
1: {
|
|
EncounterType.BATTLE_REGULAR: HoardTable([
|
|
(2, 200, TT.GOLD),
|
|
(4, 2, TT.COG),
|
|
(5, 1, TT.CONSUMABLE),
|
|
(6, 1, TT.DEED),
|
|
(8, 50, TT.GOLD),
|
|
(9, 1, TT.GEMS),
|
|
(10, 1, TT.ART_OBJECT),
|
|
(11, 100, TT.GOLD),
|
|
(12, 1, TT.LIFE),
|
|
]),
|
|
EncounterType.BATTLE_ELITE: HoardTable([
|
|
(2, 300, TT.GOLD),
|
|
(4, 4, TT.COG),
|
|
(5, 2, TT.CONSUMABLE),
|
|
(6, 2, TT.DEED),
|
|
(8, 100, TT.GOLD),
|
|
(9, 2, TT.GEMS),
|
|
(10, 2, TT.ART_OBJECT),
|
|
(11, 1, TT.LIFE),
|
|
(12, 1, TT.RELIC),
|
|
]),
|
|
EncounterType.BATTLE_BOSS: HoardTable([
|
|
(2, 400, TT.GOLD),
|
|
(4, 6, TT.COG),
|
|
(5, 3, TT.CONSUMABLE),
|
|
(6, 3, TT.DEED),
|
|
(8, 150, TT.GOLD),
|
|
(9, 3, TT.GEMS),
|
|
(10, 1, TT.NOBILITY_TITLE),
|
|
(12, 1, TT.RELIC),
|
|
]),
|
|
},
|
|
2: {
|
|
EncounterType.BATTLE_REGULAR: HoardTable([
|
|
(2, 240, TT.GOLD),
|
|
(3, 1, TT.ART_OBJECT),
|
|
(4, 2, TT.COG),
|
|
(5, 1, TT.CONSUMABLE),
|
|
(6, 1, TT.DEED),
|
|
(8, 60, TT.GOLD),
|
|
(9, 1, TT.GEMS),
|
|
(10, 1, TT.ART_OBJECT),
|
|
(11, 120, TT.GOLD),
|
|
(12, 1, TT.LIFE),
|
|
]),
|
|
EncounterType.BATTLE_ELITE: HoardTable([
|
|
(2, 360, TT.GOLD),
|
|
(3, 2, TT.ART_OBJECT),
|
|
(4, 4, TT.COG),
|
|
(5, 2, TT.CONSUMABLE),
|
|
(6, 2, TT.DEED),
|
|
(8, 120, TT.GOLD),
|
|
(9, 2, TT.GEMS),
|
|
(10, 1, TT.LIFE),
|
|
(11, 1, TT.NOBILITY_TITLE),
|
|
(12, 1, TT.RELIC),
|
|
]),
|
|
EncounterType.BATTLE_BOSS: HoardTable([
|
|
(2, 480, TT.GOLD),
|
|
(3, 3, TT.ART_OBJECT),
|
|
(4, 6, TT.COG),
|
|
(5, 3, TT.CONSUMABLE),
|
|
(6, 3, TT.DEED),
|
|
(8, 180, TT.GOLD),
|
|
(9, 3, TT.GEMS),
|
|
(10, 1, TT.NOBILITY_TITLE),
|
|
(12, 1, TT.RELIC),
|
|
]),
|
|
},
|
|
}
|
|
|
|
|
|
def generate_hoard(battle_type: EncounterType, level: int):
|
|
return TreasureHoard(_roll_treasure(battle_type, level))
|
|
|
|
|
|
def _roll_treasure(battle_type: EncounterType, level: int):
|
|
table: HoardTable = _TABLES[level][battle_type]
|
|
return table.roll()
|