def attemptAttack(self): self.defender.updateHitPoints(self.defender.getConstitutionModifier()) successfulRoll = Roll(self.attacker, self.defender, self.roll).isSuccessful() if successfulRoll: Damage(self.attacker, self.defender, self.roll).applyDamage() self.attacker.updateCharacter()
def __init__(self, Str=0,Con=0,Int=0,Wis=0,Agi=0,Dex=0): self.stats={ "Str" : Str,# Strength - Влияет на урон оружием "Con" : Con,# Construction - Влияет на кол-во Hp "Wis" : Wis,# Wisdom - Влияет на кол-во Mp "Int" : Int,# Intellect - Влияет на урон магии "Agi" : Agi,# Agility - влияет на способность уворота и попадания по противнику "Dex" : Dex # Dexterity - влияет на очередность ходов } self._HpMultiplier = 10 # 1 Con даёт 10 Hp self._MpMultiplier = 10 # 1 Int даёт 10 Mp #Note: Кол-во hp и mp определяется статистиками Con и Int self.maxHp = self.con() * self._HpMultiplier self.hp = self.maxHp self.maxMp = self.wis() * self._MpMultiplier self.mp = self.maxMp #Note: базовое кол-во урона определяется кол-вом str self.damage = Damage()
def removeStats(self, stats):#stats - that should be removed from self self.stats["Str"] -= stats.str() self.stats["Con"] -= stats.con() self.stats["Wis"] -= stats.wis() self.stats["Int"] -= stats.int() self.stats["Agi"] -= stats.agi() self.stats["Dex"] -= stats.dex() self.maxHp -= stats.con() * self._HpMultiplier self.hp -= stats.con() * self._HpMultiplier self.maxMp -= stats.wis() * self._MpMultiplier self.mp -= stats.wis() * self._MpMultiplier self.damage.removeDamage(Damage(stats.str(), stats.str()))
def addStats(self, stats):#stats - that should be added to self self.stats["Str"] += stats.str() self.stats["Con"] += stats.con() self.stats["Wis"] += stats.wis() self.stats["Int"] += stats.int() self.stats["Agi"] += stats.agi() self.stats["Dex"] += stats.dex() self.maxHp += stats.con() * self._HpMultiplier self.hp += stats.con() * self._HpMultiplier self.maxMp += stats.wis() * self._MpMultiplier self.mp += stats.wis() * self._MpMultiplier self.damage.addDamage(Damage(stats.str(), stats.str()))
def calculate_damage(self, other: Target) -> Damage: base_damage = self.__get_base_damage() damage_modifier = self.__get_damage_modifier() total_damage = round(base_damage * damage_modifier) soak = self.__get_soak(other, total_damage) return Damage(max(0, total_damage - soak))
class Stats: #TODOlater Question может N кол-во Con даёт резист? типо 10 Con +1 resist ко всему def __init__(self, Str=0,Con=0,Int=0,Wis=0,Agi=0,Dex=0): self.stats={ "Str" : Str,# Strength - Влияет на урон оружием "Con" : Con,# Construction - Влияет на кол-во Hp "Wis" : Wis,# Wisdom - Влияет на кол-во Mp "Int" : Int,# Intellect - Влияет на урон магии "Agi" : Agi,# Agility - влияет на способность уворота и попадания по противнику "Dex" : Dex # Dexterity - влияет на очередность ходов } self._HpMultiplier = 10 # 1 Con даёт 10 Hp self._MpMultiplier = 10 # 1 Int даёт 10 Mp #Note: Кол-во hp и mp определяется статистиками Con и Int self.maxHp = self.con() * self._HpMultiplier self.hp = self.maxHp self.maxMp = self.wis() * self._MpMultiplier self.mp = self.maxMp #Note: базовое кол-во урона определяется кол-вом str self.damage = Damage() ## Возвращает элементы словаря stats ## позволяет не обращаться к словарю на прямую для вывода статистик def items(self): return self.stats.items() def str(self): return self.stats["Str"] def con(self): return self.stats["Con"] def wis(self): return self.stats["Wis"] def int(self): return self.stats["Int"] def agi(self): return self.stats["Agi"] def dex(self): return self.stats["Dex"] ## Добавляет статистики к своим и перещитывает hp mp и damage в self def addStats(self, stats):#stats - that should be added to self self.stats["Str"] += stats.str() self.stats["Con"] += stats.con() self.stats["Wis"] += stats.wis() self.stats["Int"] += stats.int() self.stats["Agi"] += stats.agi() self.stats["Dex"] += stats.dex() self.maxHp += stats.con() * self._HpMultiplier self.hp += stats.con() * self._HpMultiplier self.maxMp += stats.wis() * self._MpMultiplier self.mp += stats.wis() * self._MpMultiplier self.damage.addDamage(Damage(stats.str(), stats.str())) ## Отнимает статистики от своих и перещитывает hp mp и damage в self def removeStats(self, stats):#stats - that should be removed from self self.stats["Str"] -= stats.str() self.stats["Con"] -= stats.con() self.stats["Wis"] -= stats.wis() self.stats["Int"] -= stats.int() self.stats["Agi"] -= stats.agi() self.stats["Dex"] -= stats.dex() self.maxHp -= stats.con() * self._HpMultiplier self.hp -= stats.con() * self._HpMultiplier self.maxMp -= stats.wis() * self._MpMultiplier self.mp -= stats.wis() * self._MpMultiplier self.damage.removeDamage(Damage(stats.str(), stats.str())) ## Возвращает характеристики в виде строки def __str__(self): result="" for statistic, value in self.items(): result+="{0}: {1}\n".format(statistic, value) return result