import dice import db import gemart import alchemical import armor import weapons import gear import items def gentypes(types, funcs): itemfuncs = (funcs[k](v['count']) for k, v in types.iteritems()) return (i for item in itemfuncs for i in item) def mundane(total): types = db.xtypes('mundane_treasure', total, lambda m: m['lookup_type']) funcs = {'alchemical_items': alchemical.Alchemical.generate(), 'armor': armor.Armor.mundane(), 'weapons': weapons.Weapon.mundane(), 'tools_and_gear': gear.Gear.generate()} return gentypes(types, funcs) def minor(total): types = db.xtypes('magic_items', total, lambda m: m['lookup_type'], "power = 'minor'") funcs = {'armor': armor.Armor.minor(), 'scrolls': items.Item.generatedefault('minor scroll'), 'wands': items.Item.generatedefault('minor wand'), 'weapons': items.Item.generatedefault('minor weapon'), 'potions': items.Item.generatedefault('minor potion'), 'rings': items.Item.generatedefault('minor ring'), 'wondrous_items': items.Item.generatedefault('minor wondrous item')} #realm return gentypes(types, funcs) def generate(el): generators = {'mundane': mundane, 'cp': items.Money.generate('cp'), 'sp': items.Money.generate('sp'), 'gp': items.Money.generate('gp'), 'pp': items.Money.generate('pp'), 'minor': minor, 'medium': items.Item.generatedefault('medium magic item'), 'major': items.Item.generatedefault('major magic item'), 'gems': gemart.Gem.generate('Forgotten Realms'), 'art': gemart.Art.generate()} treasures = (db.treasureqry(el, t) for t in ('coins', 'goods', 'items')) rolls = (dice.getroll(t, dice.d100()) for t in treasures) filtered = (r for r in rolls if r['name'] != '-') rolleditems = (i for item in (generators[r['name']](dice.rolldbdice(r)) for r in filtered) for i in item) return rolleditems