Пример #1
0
 def apply(self, match: Match):
     operator = match.group(1)
     operators = ["+", "-", "*", "/"]
     if operator in operators:
         modifier = int(match.group(2))
         return RollSpec(modifier=modifier, operation=operator)
     else:
         modifier = int(match.group(2))
         return RollSpec(modifier=modifier, operation="+")
Пример #2
0
    def apply(self, match: Match):
        if match.group(1):
            dice_count = int(match.group(1))
        else:
            dice_count = 1

        return RollSpec(
            dice_count=int(dice_count),
            dice_sides=int(match.group(2)),
            modifier=0,
            target_number=int(match.group(3)),
        )
Пример #3
0
    def apply(self, match: Match):
        if match.group(1):
            operation = match.group(1)
        else:
            operation = "+"

        if match.group(2):
            dice_count = int(match.group(2))
        else:
            dice_count = 1

        return RollSpec(
            dice_count=int(dice_count),
            dice_sides=int(match.group(3)),
            operation=operation,
        )
Пример #4
0
    def apply(self, match: Match):
        target_number = -int(match.group(1))

        if match.group(2):
            modifier = match.group(2)
            if modifier == "hard":
                target_number = ceil(target_number / 2)
            elif modifier == "easy":
                target_number = target_number * 2

        return RollSpec(
            dice_count=1,
            dice_sides=100,
            modifier=0,
            target_number=target_number,
        )
Пример #5
0
    def apply(self, match: Match):
        if match.group(3):
            if match.group(3) == "+":
                modifier = int(match.group(4))
            else:
                modifier = -int(match.group(4))
        else:
            modifier = 0

        if match.group(1):
            dice_count = int(match.group(1))
        else:
            dice_count = 1

        return RollSpec(
            dice_count=dice_count,
            dice_sides=int(match.group(2)),
            modifier=modifier,
            target_number=None,
        )
Пример #6
0
 def add_part(self, part: RollSpec):
     self.parts.append(part)
     self.dice_count += part.dice_count
     if part.has_target():
         self.target_number = part.target_number
Пример #7
0
def get_spec(roll_string):
    parser = get_token_parser()
    roll_spec = parser.parse(roll_string)
    if not roll_spec.target_number:
        roll_spec.add_part(RollSpec(target_number=5, operation=None))
    return roll_spec
Пример #8
0
 def apply(self, match: Match):
     return RollSpec(target_number=int(match.group(1)), operation=None)