Exemplo n.º 1
0
def calculate_hit(attack: AttackAction, player_hit_bonus,
                  hit_resistances: Dict[str, int]) -> str:
    matched_hit_resistance = hit_resistances.get(attack.dmg_type, 0)
    hit_roll = roll(1, 20, advantage=attack.hit_bonus + player_hit_bonus)
    miss_roll = roll(1, 20, advantage=matched_hit_resistance)
    # print(f"Rolled {hit_roll} vs {miss_roll} diff is {hit_roll-miss_roll}")
    if hit_roll <= miss_roll:
        return "miss"
    if (hit_roll - miss_roll) > 10:
        return "critical"
    return "hit"
Exemplo n.º 2
0
 def use_effect(self, game: Game, source_player: Character, params: list[Any]) -> None:
     from utils.Dice import roll
     raw_roll = roll(5, 20, source_player.luck)
     previous_stamina = source_player.stamina
     source_player.stamina = min(raw_roll + source_player.stamina, source_player.max_stamina)
     restored_amt = source_player.stamina - previous_stamina
     game.discord_connection.send_game_chat_sync(f"Restored {restored_amt} stamina.", [source_player.discord_user])
Exemplo n.º 3
0
def calculate_damage(attack: AttackAction, player_dmg_bonus,
                     dmg_resistances: Dict[str, int]) -> int:
    matched_dmg_resistance = dmg_resistances.get(attack.dmg_type, 0)
    damage_roll = roll(attack.dmg_roll[0],
                       attack.dmg_roll[1],
                       advantage=(attack.dmg_bonus + player_dmg_bonus -
                                  matched_dmg_resistance))
    return damage_roll
Exemplo n.º 4
0
    def tick(self,
             source_entity: Optional[CombatEntity] = None,
             game: Optional[Game] = None,
             **kwargs) -> None:
        if source_entity != self.parent:
            return
        from utils.Dice import roll
        from utils.CombatHelpers import assign_damage
        resistances = source_entity.resistances
        fire_dmg_res = resistances["dmg"].get(DamageTypes.Fire, 0)
        fire_hit_res = resistances["hit"].get(DamageTypes.Fire, 0)
        dmg_roll = roll(self.data["level"], 6, fire_dmg_res)
        game.discord_connection.send_game_chat_sync(
            f"The fire on {source_entity.combat_name} rages. " +
            assign_damage(game, None, source_entity, dmg_roll))
        extinguish_roll = roll(1, 20, source_entity.luck + fire_hit_res)
        #  1, 2, 3, 4, 5 -> fire grows
        #  16, 17, 18, 19, 20 -> fire shrinks
        if extinguish_roll <= 5:
            self.data["level"] = self.data["level"] + 1
            game.discord_connection.send_game_chat_sync(
                f"The fire on {source_entity.combat_name} grows even stronger."
            )
        elif extinguish_roll > 15:
            self.data["level"] = self.data["level"] - 1
            if self.data["level"] <= 0:
                self.parent.status_effects.remove(self)
                self.parent = None
                self.detach_triggers(game)
                game.discord_connection.send_game_chat_sync(
                    f"The fire on {source_entity.combat_name} goes out.")
            else:
                game.discord_connection.send_game_chat_sync(
                    f"The fire on {source_entity.combat_name} appears to shrink."
                )

        self.hit_resistances[
            DamageTypes.Fire] = fire_hit_res + self.data["level"]
Exemplo n.º 5
0
 def initiative(self) -> int:
     return roll(1, 20, advantage=1)
Exemplo n.º 6
0
 def initiative(self) -> int:
     return roll(1, 20)