Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
 def test_extreme_roll(self):
     assert roll_min('3d6') == [1] * 3
     assert roll_max('3d6') == [6] * 3
Exemplo n.º 6
0
    def test_extreme_reroll(self):
        r = roll_min("2d6r")
        assert r == [1, 1]

        r = roll_max("2d6r6")
        assert r == [6, 6]
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
    def test_extreme_reroll(self):
        r = roll_min('2d6r')
        assert r == [1, 1]

        r = roll_max('2d6r6')
        assert r == [6, 6]
Exemplo n.º 10
0
 def test_extreme_roll(self):
     assert roll_min('3d6') == [1] * 3
     assert roll_max('3d6') == [6] * 3
Exemplo n.º 11
0
 def test_extreme_roll(self):
     assert roll_min("3d6") == [1] * 3
     assert roll_max("3d6") == [6] * 3