def handler(exp): real = dice.roll(exp) mx = dice.roll_max(exp) mn = dice.roll_min(exp) try: yield from zip( cast(Iterable[int], real), cast(Iterable[int], mn), cast(Iterable[int], mx), ) except TypeError: yield (real, mn, mx)
async def massroll(ctx, amt: int, atk: str, dmg: str = '0', ac: int = 0, short: str = ''): text = f'''```Massroll: {amt} rolls against AC {ac}''' textEnd = '' #emb = discord.Embed(title=f'Mass roll: {amt} rolls against AC {ac}') sumNum = 0 sumCrits = 0 try: dndice.basic(atk) except: ctx.send(f'{atk} is not valid roll syntax') try: dndice.basic(dmg) except: ctx.send(f'{dmg} is not valid roll syntax') for x in range(amt): atkRoll = dndice.basic(atk) dmgRoll = dndice.basic(dmg) if atkRoll == dice.roll_max(atk): critical = ', Critical!' sumCrits += 1 dmgRoll = dndice.basic(dmg.replace('d', 'dc')) else: critical = '' if dmg != '0': textEnd += f"Attack n°{x}: {atkRoll}, damage: {dmgRoll}{critical}\n" #emb.add_field(name=f'Attack {x}', value=f'{critical}{atkRoll}, damage: {dmgRoll}') else: textEnd += f"Attack {x}: {critical}{atkRoll}\n" #emb.add_field(name=f'Attack {x}', value=f'{critical}{atkRoll}') if (atkRoll >= ac or critical == 'Critical Attack!: '): sumNum += dmgRoll text += f'''\n Sum of the Damage: {sumNum} damage''' text += f"\n Amount of critical attacks: {sumCrits}\n\n" if short == "short": pass elif (len(text) + len(textEnd) <= 1997): text += textEnd else: text += "Text is too long, detail doesnt fit." #emb.add_field(name=f'Sum of the Damage', value=f'{sumNum} damage') text += "```" await ctx.send(text)
def __init__(self, name='Sword', damage='1d6', magicBonus=0, char=dndChar()): self.name = name self.damage = damage + '+0' self.magicBonus = magicBonus self.char = char self.minDamage = dice.roll_min(self.damage) self.maxDamage = dice.roll_max(self.damage) self.averageDamage = np.zeros(self.maxCA) self.plot = None
def handler(exp): real = as_iterable(dice.roll(exp)) mn = as_iterable(dice.roll_min(exp)) mx = as_iterable(dice.roll_max(exp)) yield from zip(real, mn, mx)
def test_extreme_roll(self): assert roll_min('3d6') == [1] * 3 assert roll_max('3d6') == [6] * 3
def test_extreme_reroll(self): r = roll_min("2d6r") assert r == [1, 1] r = roll_max("2d6r6") assert r == [6, 6]
def test_roll(): for single, raw in itertools.product((True, False), (True, False)): assert roll('6d6', single=single, raw=raw) assert roll_min('6d6', single=single, raw=raw) assert roll_max('6d6', single=single, raw=raw)
def test_roll(): for single, raw in product((True, False), (True, False)): assert roll("6d6", single=single, raw=raw) assert roll_min("6d6", single=single, raw=raw) assert roll_max("6d6", single=single, raw=raw)
def test_extreme_reroll(self): r = roll_min('2d6r') assert r == [1, 1] r = roll_max('2d6r6') assert r == [6, 6]
def test_extreme_roll(self): assert roll_min("3d6") == [1] * 3 assert roll_max("3d6") == [6] * 3