Formulator / base /attribute.py
ango
04.08 commit
b8aecdd
raw
history blame
36.4 kB
from base.constant import *
class Target:
target_level: int = 124
_physical_shield_base: int = 0
_magical_shield_base: int = 0
_physical_shield_gain: int = 0
_magical_shield_gain: int = 0
_all_vulnerable: float = 0
_physical_vulnerable: float = 0
_magical_vulnerable: float = 0
@property
def shield_base(self):
raise NotImplementedError
@property
def physical_shield_base(self):
return SHIELD_BASE_MAP[self.target_level] + self._physical_shield_base
@physical_shield_base.setter
def physical_shield_base(self, physical_shield_base):
self._physical_shield_base = physical_shield_base
@property
def magical_shield_base(self):
return SHIELD_BASE_MAP[self.target_level] + self._magical_shield_base
@magical_shield_base.setter
def magical_shield_base(self, magical_shield_base):
self._magical_shield_base = magical_shield_base
@property
def shield_gain(self):
raise NotImplementedError
@property
def physical_shield_gain(self):
return self._physical_shield_gain / BINARY_SCALE
@physical_shield_gain.setter
def physical_shield_gain(self, physical_shield_gain):
self._physical_shield_gain = physical_shield_gain
@property
def magical_shield_gain(self):
return self._magical_shield_gain / BINARY_SCALE
@magical_shield_gain.setter
def magical_shield_gain(self, magical_shield_gain):
self._magical_shield_gain = magical_shield_gain
@property
def vulnerable(self):
raise NotImplementedError
@property
def all_vulnerable(self):
return self._all_vulnerable
@all_vulnerable.setter
def all_vulnerable(self, all_vulnerable):
residual = all_vulnerable - self._all_vulnerable
self.physical_vulnerable += residual
self.magical_vulnerable += residual
self._all_vulnerable = all_vulnerable
@property
def physical_vulnerable(self):
return self._physical_vulnerable / BINARY_SCALE
@physical_vulnerable.setter
def physical_vulnerable(self, physical_vulnerable):
self._physical_vulnerable = physical_vulnerable
@property
def magical_vulnerable(self):
return self._magical_vulnerable / BINARY_SCALE
@magical_vulnerable.setter
def magical_vulnerable(self, magical_vulnerable):
self._magical_vulnerable = magical_vulnerable
@property
def shield_constant(self):
return SHIELD_SCALE * (LEVEL_SCALE * self.target_level - LEVEL_CONSTANT)
class Major:
_all_major_base: int = 0
_all_major_gain: int = 0
_agility_base: int = 0
_agility_gain: int = 0
_agility: int = 0
_strength_base: int = 0
_strength_gain: int = 0
_strength: int = 0
_spirit_base: int = 0
_spirit_gain: int = 0
_spirit: int = 0
_spunk_base: int = 0
_spunk_gain: int = 0
_spunk: int = 0
_physical_attack_power_base: int = 0
_base_physical_attack_power: int = 0
_physical_attack_power_gain: int = 0
_extra_physical_attack_power: int = 0
_physical_attack_power: int = 0
_magical_attack_power_base: int = 0
_base_magical_attack_power: int = 0
_magical_attack_power_gain: int = 0
_extra_magical_attack_power: int = 0
_magical_attack_power: int = 0
_all_critical_strike_base: int = 0
_all_critical_strike_gain: int = 0
_physical_critical_strike_base: int = 0
_base_physical_critical_strike: int = 0
_extra_physical_critical_strike: int = 0
_physical_critical_strike_percent: float = 0
_physical_critical_strike_gain: int = 0
_physical_critical_strike: float = 0
_magical_critical_strike_base: int = 0
_base_magical_critical_strike: int = 0
_extra_magical_critical_strike: int = 0
_magical_critical_strike_percent: float = 0
_magical_critical_strike_gain: int = 0
_magical_critical_strike: float = 0
_physical_overcome_base: int = 0
_base_physical_overcome: int = 0
_final_physical_overcome: int = 0
_physical_overcome_gain: int = 0
_extra_physical_overcome: int = 0
_physical_overcome: float = 0
_magical_overcome_base: int = 0
_base_magical_overcome: int = 0
_final_magical_overcome: int = 0
_magical_overcome_gain: int = 0
_extra_magical_overcome: int = 0
_magical_overcome: float = 0
""" Major Attr Function"""
@property
def all_major_base(self):
return self._all_major_base
@all_major_base.setter
def all_major_base(self, all_major_base):
residual = all_major_base - self._all_major_base
self.agility_base += residual
self.strength_base += residual
self.spirit_base += residual
self.spunk_base += residual
self._all_major_base = all_major_base
@property
def all_major_gain(self):
return self._all_major_gain
@all_major_gain.setter
def all_major_gain(self, all_major_gain):
residual = all_major_gain - self._all_major_gain
self.agility_gain += residual
self.strength_gain += residual
self.spirit_gain += residual
self.spunk_gain += residual
self._all_major_gain = all_major_gain
@property
def agility_base(self):
return self._agility_base
@agility_base.setter
def agility_base(self, agility_base):
self._agility_base = agility_base
self.agility = agility_base * (1 + self.agility_gain)
@property
def agility_gain(self):
return self._agility_gain / BINARY_SCALE
@agility_gain.setter
def agility_gain(self, agility_gain):
self._agility_gain = agility_gain
self.agility = self.agility_base * (1 + self.agility_gain)
@property
def agility(self):
return self._agility
@agility.setter
def agility(self, agility):
agility = int(agility)
self._agility = agility
self.base_physical_critical_strike = (self.physical_critical_strike_base + self.extra_physical_critical_strike
+ agility * AGILITY_TO_CRITICAL_STRIKE)
@property
def strength_base(self):
return self._strength_base
@strength_base.setter
def strength_base(self, strength_base):
self._strength_base = strength_base
self.strength = strength_base * (1 + self.strength_gain)
@property
def strength_gain(self):
return self._strength_gain / BINARY_SCALE
@strength_gain.setter
def strength_gain(self, strength_gain):
self._strength_gain = strength_gain
self.strength = self.strength_base * (1 + self.strength_gain)
@property
def strength(self):
return self._strength
@strength.setter
def strength(self, strength):
strength = int(strength)
self._strength = strength
self.base_physical_attack_power = self.physical_attack_power_base + strength * STRENGTH_TO_ATTACK_POWER
self.base_physical_overcome = self.physical_overcome_base + strength * STRENGTH_TO_OVERCOME
@property
def spirit_base(self):
return self._spirit_base
@spirit_base.setter
def spirit_base(self, spirit_base):
self._spirit_base = spirit_base
self.spirit = spirit_base * (1 + self.spirit_gain)
@property
def spirit_gain(self):
return self._spirit_gain / BINARY_SCALE
@spirit_gain.setter
def spirit_gain(self, spirit_gain):
self._spirit_gain = spirit_gain
self.spirit = self.spirit_base * (1 + self.spirit_gain)
@property
def spirit(self):
return self._spirit
@spirit.setter
def spirit(self, spirit):
spirit = int(spirit)
self._spirit = spirit
self.base_magical_critical_strike = (self.magical_critical_strike_base + self.extra_magical_critical_strike
+ spirit * SPIRIT_TO_CRITICAL_STRIKE)
@property
def spunk_base(self):
return self._spunk_base
@spunk_base.setter
def spunk_base(self, spunk_base):
self._spunk_base = spunk_base
self.spunk = spunk_base * (1 + self.spunk_gain)
@property
def spunk_gain(self):
return self._spunk_gain / BINARY_SCALE
@spunk_gain.setter
def spunk_gain(self, spunk_gain):
self._spunk_gain = spunk_gain
self.spunk = self.spunk_base * (1 + self.spunk_gain)
@property
def spunk(self):
return self._spunk
@spunk.setter
def spunk(self, spunk):
spunk = int(spunk)
self._spunk = spunk
self.base_magical_attack_power = self.magical_attack_power_base + spunk * SPUNK_TO_ATTACK_POWER
self.base_magical_overcome = self.magical_overcome_base + spunk * SPUNK_TO_OVERCOME
""" Attack Power Function """
@property
def attack_power(self):
raise NotImplementedError
@property
def physical_attack_power_base(self):
return self._physical_attack_power_base
@physical_attack_power_base.setter
def physical_attack_power_base(self, physical_attack_power_base):
self._physical_attack_power_base = physical_attack_power_base
self.base_physical_attack_power = physical_attack_power_base + self.strength * STRENGTH_TO_ATTACK_POWER
@property
def base_physical_attack_power(self):
return self._base_physical_attack_power
@base_physical_attack_power.setter
def base_physical_attack_power(self, base_physical_attack_power):
base_physical_attack_power = int(base_physical_attack_power)
self._base_physical_attack_power = base_physical_attack_power
self.physical_attack_power = (self.base_physical_attack_power +
self.base_physical_attack_power * self.physical_attack_power_gain +
self.extra_physical_attack_power)
@property
def physical_attack_power_gain(self):
return self._physical_attack_power_gain / BINARY_SCALE
@physical_attack_power_gain.setter
def physical_attack_power_gain(self, physical_attack_power_gain):
self._physical_attack_power_gain = physical_attack_power_gain
self.physical_attack_power = (self.base_physical_attack_power +
self.base_physical_attack_power * self.physical_attack_power_gain +
self.extra_physical_attack_power)
@property
def extra_physical_attack_power(self):
return self._extra_physical_attack_power
@extra_physical_attack_power.setter
def extra_physical_attack_power(self, extra_physical_attack_power):
extra_physical_attack_power = int(extra_physical_attack_power)
self._extra_physical_attack_power = extra_physical_attack_power
self.physical_attack_power = (self.base_physical_attack_power +
self.base_physical_attack_power * self.physical_attack_power_gain +
self.extra_physical_attack_power)
@property
def physical_attack_power(self):
return self._physical_attack_power
@physical_attack_power.setter
def physical_attack_power(self, physical_attack_power):
self._physical_attack_power = int(physical_attack_power)
@property
def magical_attack_power_base(self):
return self._magical_attack_power_base
@magical_attack_power_base.setter
def magical_attack_power_base(self, magical_attack_power_base):
self._magical_attack_power_base = magical_attack_power_base
self.base_magical_attack_power = magical_attack_power_base + self.spunk_base * SPUNK_TO_ATTACK_POWER
@property
def base_magical_attack_power(self):
return self._base_magical_attack_power
@base_magical_attack_power.setter
def base_magical_attack_power(self, base_magical_attack_power):
base_magical_attack_power = int(base_magical_attack_power)
self._base_magical_attack_power = base_magical_attack_power
self.magical_attack_power = (self.base_magical_attack_power +
self.base_magical_attack_power * self.magical_attack_power_gain +
self.extra_magical_attack_power)
@property
def magical_attack_power_gain(self):
return self._magical_attack_power_gain / BINARY_SCALE
@magical_attack_power_gain.setter
def magical_attack_power_gain(self, magical_attack_power_gain):
self._magical_attack_power_gain = magical_attack_power_gain
self.magical_attack_power = (self.base_magical_attack_power +
self.base_magical_attack_power * self.magical_attack_power_gain +
self.extra_magical_attack_power)
@property
def extra_magical_attack_power(self):
return self._extra_magical_attack_power
@extra_magical_attack_power.setter
def extra_magical_attack_power(self, extra_magical_attack_power):
extra_magical_attack_power = int(extra_magical_attack_power)
self._extra_magical_attack_power = extra_magical_attack_power
self.magical_attack_power = (self.base_magical_attack_power +
self.base_magical_attack_power * self.magical_attack_power_gain +
self.extra_magical_attack_power)
@property
def magical_attack_power(self):
return self._magical_attack_power
@magical_attack_power.setter
def magical_attack_power(self, magical_attack_power):
self._magical_attack_power = int(magical_attack_power)
""" Critical Strike Function"""
@property
def critical_strike(self):
raise NotImplementedError
@property
def all_critical_strike_base(self):
return self._all_critical_strike_base
@all_critical_strike_base.setter
def all_critical_strike_base(self, all_critical_strike_base):
residual = all_critical_strike_base - self._all_critical_strike_base
self.physical_critical_strike_base += residual
self.magical_critical_strike_base += residual
self._all_critical_strike_base = all_critical_strike_base
@property
def all_critical_strike_gain(self):
return self._all_critical_strike_gain
@all_critical_strike_gain.setter
def all_critical_strike_gain(self, all_critical_strike_gain):
residual = all_critical_strike_gain - self._all_critical_strike_gain
self.physical_critical_strike_gain += residual
self.magical_critical_strike_gain += residual
self._all_critical_strike_gain = all_critical_strike_gain
@property
def physical_critical_strike_base(self):
return self._physical_critical_strike_base
@physical_critical_strike_base.setter
def physical_critical_strike_base(self, physical_critical_strike_base):
self._physical_critical_strike_base = physical_critical_strike_base
self.base_physical_critical_strike = (self.physical_critical_strike_base + self.extra_physical_critical_strike
+ self.agility * AGILITY_TO_CRITICAL_STRIKE)
@property
def extra_physical_critical_strike(self):
return self._extra_physical_critical_strike
@extra_physical_critical_strike.setter
def extra_physical_critical_strike(self, extra_physical_critical_strike):
extra_physical_critical_strike = int(extra_physical_critical_strike)
self._extra_physical_critical_strike = extra_physical_critical_strike
self.base_physical_critical_strike = (self.physical_critical_strike_base + self.extra_physical_critical_strike
+ self.agility * AGILITY_TO_CRITICAL_STRIKE)
@property
def base_physical_critical_strike(self):
return self._base_physical_critical_strike
@base_physical_critical_strike.setter
def base_physical_critical_strike(self, base_physical_critical_strike):
base_physical_critical_strike = int(base_physical_critical_strike)
self._base_physical_critical_strike = base_physical_critical_strike
self.physical_critical_strike_percent = self.base_physical_critical_strike / CRITICAL_STRIKE_SCALE
@property
def physical_critical_strike_percent(self):
return self._physical_critical_strike_percent
@physical_critical_strike_percent.setter
def physical_critical_strike_percent(self, physical_critical_strike_percent):
self._physical_critical_strike_percent = physical_critical_strike_percent
self.physical_critical_strike = self.physical_critical_strike_percent + self.physical_critical_strike_gain
@property
def physical_critical_strike_gain(self):
return self._physical_critical_strike_gain / DECIMAL_SCALE
@physical_critical_strike_gain.setter
def physical_critical_strike_gain(self, physical_critical_strike_gain):
self._physical_critical_strike_gain = physical_critical_strike_gain
self.physical_critical_strike = self.physical_critical_strike_percent + self.physical_critical_strike_gain
@property
def physical_critical_strike(self):
return self._physical_critical_strike
@physical_critical_strike.setter
def physical_critical_strike(self, physical_critical_strike):
self._physical_critical_strike = physical_critical_strike
@property
def magical_critical_strike_base(self):
return self._magical_critical_strike_base
@magical_critical_strike_base.setter
def magical_critical_strike_base(self, magical_critical_strike_base):
self._magical_critical_strike_base = magical_critical_strike_base
self.base_magical_critical_strike = (self.magical_critical_strike_base + self.extra_magical_critical_strike
+ self.spirit * SPIRIT_TO_CRITICAL_STRIKE)
@property
def extra_magical_critical_strike(self):
return self._extra_magical_critical_strike
@extra_magical_critical_strike.setter
def extra_magical_critical_strike(self, extra_magical_critical_strike):
extra_magical_critical_strike = int(extra_magical_critical_strike)
self._extra_magical_critical_strike = extra_magical_critical_strike
self.base_magical_critical_strike = (self.magical_critical_strike_base + self.extra_magical_critical_strike
+ self.spirit * SPIRIT_TO_CRITICAL_STRIKE)
@property
def base_magical_critical_strike(self):
return self._base_magical_critical_strike
@base_magical_critical_strike.setter
def base_magical_critical_strike(self, base_magical_critical_strike):
base_magical_critical_strike = int(base_magical_critical_strike)
self._base_magical_critical_strike = base_magical_critical_strike
self.magical_critical_strike_percent = self.base_magical_critical_strike / CRITICAL_STRIKE_SCALE
@property
def magical_critical_strike_percent(self):
return self._magical_critical_strike_percent
@magical_critical_strike_percent.setter
def magical_critical_strike_percent(self, magical_critical_strike_percent):
self._magical_critical_strike_percent = magical_critical_strike_percent
self.magical_critical_strike = self.magical_critical_strike_percent + self.magical_critical_strike_gain
@property
def magical_critical_strike_gain(self):
return self._magical_critical_strike_gain / DECIMAL_SCALE
@magical_critical_strike_gain.setter
def magical_critical_strike_gain(self, magical_critical_strike_gain):
self._magical_critical_strike_gain = magical_critical_strike_gain
self.magical_critical_strike = self.magical_critical_strike_percent + self.magical_critical_strike_gain
@property
def magical_critical_strike(self):
return self._magical_critical_strike
@magical_critical_strike.setter
def magical_critical_strike(self, magical_critical_strike):
self._magical_critical_strike = magical_critical_strike
""" Overcome Function"""
@property
def overcome(self):
raise NotImplementedError
@property
def physical_overcome_base(self):
return self._physical_overcome_base
@physical_overcome_base.setter
def physical_overcome_base(self, physical_overcome_base):
self._physical_overcome_base = physical_overcome_base
self.base_physical_overcome = self.physical_overcome_base + self.strength * STRENGTH_TO_OVERCOME
@property
def base_physical_overcome(self):
return self._base_physical_overcome
@base_physical_overcome.setter
def base_physical_overcome(self, base_physical_overcome):
base_physical_overcome = int(base_physical_overcome)
self._base_physical_overcome = base_physical_overcome
self.final_physical_overcome = (self.base_physical_overcome * (1 + self.physical_overcome_gain)
+ self.extra_physical_overcome)
@property
def physical_overcome_gain(self):
return self._physical_overcome_gain / BINARY_SCALE
@physical_overcome_gain.setter
def physical_overcome_gain(self, physical_overcome_gain):
self._physical_overcome_gain = physical_overcome_gain
self.final_physical_overcome = (self.base_physical_overcome * (1 + self.physical_overcome_gain)
+ self.extra_physical_overcome)
@property
def extra_physical_overcome(self):
return self._extra_physical_overcome
@extra_physical_overcome.setter
def extra_physical_overcome(self, extra_physical_overcome):
extra_physical_overcome = int(extra_physical_overcome)
self._extra_physical_overcome = extra_physical_overcome
self.final_physical_overcome = (self.base_physical_overcome * (1 + self.physical_overcome_gain)
+ self.extra_physical_overcome)
@property
def final_physical_overcome(self):
return self._final_physical_overcome
@final_physical_overcome.setter
def final_physical_overcome(self, final_physical_overcome):
final_physical_overcome = int(final_physical_overcome)
self._final_physical_overcome = final_physical_overcome
self.physical_overcome = final_physical_overcome / OVERCOME_SCALE
@property
def physical_overcome(self):
return self._physical_overcome
@physical_overcome.setter
def physical_overcome(self, physical_overcome):
self._physical_overcome = physical_overcome
@property
def magical_overcome_base(self):
return self._magical_overcome_base
@magical_overcome_base.setter
def magical_overcome_base(self, magical_overcome_base):
self._magical_overcome_base = magical_overcome_base
self.base_magical_overcome = self.magical_overcome_base + self.spunk * SPUNK_TO_OVERCOME
@property
def base_magical_overcome(self):
return self._base_magical_overcome
@base_magical_overcome.setter
def base_magical_overcome(self, base_magical_overcome):
base_magical_overcome = int(base_magical_overcome)
self._base_magical_overcome = base_magical_overcome
self.final_magical_overcome = (self.base_magical_overcome * (1 + self.magical_overcome_gain)
+ self.extra_magical_overcome)
@property
def magical_overcome_gain(self):
return self._magical_overcome_gain / BINARY_SCALE
@magical_overcome_gain.setter
def magical_overcome_gain(self, magical_overcome_gain):
self._magical_overcome_gain = magical_overcome_gain
self.final_magical_overcome = (self.base_magical_overcome * (1 + self.magical_overcome_gain)
+ self.extra_magical_overcome)
@property
def extra_magical_overcome(self):
return self._extra_magical_overcome
@extra_magical_overcome.setter
def extra_magical_overcome(self, extra_magical_overcome):
extra_magical_overcome = int(extra_magical_overcome)
self._extra_magical_overcome = extra_magical_overcome
self.final_magical_overcome = (self.base_magical_overcome * (1 + self.magical_overcome_gain)
+ self.extra_magical_overcome)
@property
def final_magical_overcome(self):
return self._final_magical_overcome
@final_magical_overcome.setter
def final_magical_overcome(self, final_magical_overcome):
final_magical_overcome = int(final_magical_overcome)
self._final_magical_overcome = final_magical_overcome
self.magical_overcome = final_magical_overcome / OVERCOME_SCALE
@property
def magical_overcome(self):
return self._magical_overcome
@magical_overcome.setter
def magical_overcome(self, magical_overcome):
self._magical_overcome = magical_overcome
class Minor:
surplus: int = 0
_strain_base: int = 0
_strain_percent: float = 0
_strain_gain: int = 0
_strain: float = 0
_all_critical_power_base: int = 0
_all_critical_power_gain: int = 0
_physical_critical_power_base: int = 0
_physical_critical_power_percent: float = 0
_physical_critical_power_gain: int = 0
_physical_critical_power: float = 0
_magical_critical_power_base: int = 0
_magical_critical_power_percent: float = 0
_magical_critical_power_gain: int = 0
_magical_critical_power: float = 0
_weapon_damage_rand: int = 0
_weapon_damage_base: int = 0
_weapon_damage_gain: int = 0
_weapon_damage: int = 0
_all_shield_ignore: float = 0
_physical_shield_ignore: float = 0
_magical_shield_ignore: float = 0
_all_damage_addition: float = 0
_physical_damage_addition: float = 0
_magical_damage_addition: float = 0
_pve_addition: float = 0
""" Minor Function """
@property
def strain_base(self):
return self._strain_base
@strain_base.setter
def strain_base(self, strain_base):
self._strain_base = strain_base
self.strain_percent = strain_base / STRAIN_SCALE
@property
def strain_percent(self):
return self._strain_percent
@strain_percent.setter
def strain_percent(self, strain_percent):
self._strain_percent = strain_percent
self.strain = strain_percent + self.strain_gain
@property
def strain_gain(self):
return self._strain_gain / BINARY_SCALE
@strain_gain.setter
def strain_gain(self, strain_gain):
self._strain_gain = strain_gain
self.strain = self.strain_percent + self.strain_gain
@property
def strain(self):
return self._strain
@strain.setter
def strain(self, strain):
self._strain = strain
""" Critical Power Function"""
@property
def critical_power(self):
raise NotImplementedError
@property
def all_critical_power_base(self):
return self._all_critical_power_base
@all_critical_power_base.setter
def all_critical_power_base(self, all_critical_power_base):
residual = all_critical_power_base - self._all_critical_power_base
self.physical_critical_power_base += residual
self.magical_critical_power_base += residual
self._all_critical_power_base = all_critical_power_base
@property
def all_critical_power_gain(self):
return self._all_critical_power_gain
@all_critical_power_gain.setter
def all_critical_power_gain(self, all_critical_power_gain):
residual = all_critical_power_gain - self._all_critical_power_gain
self.physical_critical_power_gain += residual
self.magical_critical_power_gain += residual
self._all_critical_power_gain = all_critical_power_gain
@property
def physical_critical_power_base(self):
return self._physical_critical_power_base
@physical_critical_power_base.setter
def physical_critical_power_base(self, physical_critical_power_base):
self._physical_critical_power_base = physical_critical_power_base
self.physical_critical_power_percent = self.physical_critical_power_base / CRITICAL_POWER_SCALE
@property
def physical_critical_power_percent(self):
return CRITICAL_POWER_BASE + self._physical_critical_power_percent
@physical_critical_power_percent.setter
def physical_critical_power_percent(self, physical_critical_power_percent):
self._physical_critical_power_percent = physical_critical_power_percent
self.physical_critical_power = self.physical_critical_power_percent + self.physical_critical_power_gain
@property
def physical_critical_power_gain(self):
return self._physical_critical_power_gain / BINARY_SCALE
@physical_critical_power_gain.setter
def physical_critical_power_gain(self, physical_critical_power_gain):
self._physical_critical_power_gain = physical_critical_power_gain
self.physical_critical_power = self.physical_critical_power_percent + self.physical_critical_power_gain
@property
def physical_critical_power(self):
return self._physical_critical_power
@physical_critical_power.setter
def physical_critical_power(self, physical_critical_power):
self._physical_critical_power = physical_critical_power
@property
def magical_critical_power_base(self):
return self._magical_critical_power_base
@magical_critical_power_base.setter
def magical_critical_power_base(self, magical_critical_power_base):
self._magical_critical_power_base = magical_critical_power_base
self.magical_critical_power_percent = self.magical_critical_power_base / CRITICAL_POWER_SCALE
@property
def magical_critical_power_percent(self):
return CRITICAL_POWER_BASE + self._magical_critical_power_percent
@magical_critical_power_percent.setter
def magical_critical_power_percent(self, magical_critical_power_percent):
self._magical_critical_power_percent = magical_critical_power_percent
self.magical_critical_power = self.magical_critical_power_percent + self.magical_critical_power_gain
@property
def magical_critical_power_gain(self):
return self._magical_critical_power_gain / BINARY_SCALE
@magical_critical_power_gain.setter
def magical_critical_power_gain(self, magical_critical_power_gain):
self._magical_critical_power_gain = magical_critical_power_gain
self.magical_critical_power = self.magical_critical_power_percent + self.magical_critical_power_gain
@property
def magical_critical_power(self):
return self._magical_critical_power
@magical_critical_power.setter
def magical_critical_power(self, magical_critical_power):
self._magical_critical_power = magical_critical_power
""" Weapon Damage Function """
@property
def weapon_damage_rand(self):
return self._weapon_damage_rand
@weapon_damage_rand.setter
def weapon_damage_rand(self, weapon_damage_rand):
self._weapon_damage_rand = weapon_damage_rand
self.weapon_damage = self.weapon_damage_base * (1 + self.weapon_damage_gain) + self.weapon_damage_rand / 2
@property
def weapon_damage_base(self):
return self._weapon_damage_base
@weapon_damage_base.setter
def weapon_damage_base(self, weapon_damage_base):
self._weapon_damage_base = weapon_damage_base
self.weapon_damage = self.weapon_damage_base * (1 + self.weapon_damage_gain) + self.weapon_damage_rand / 2
@property
def weapon_damage_gain(self):
return self._weapon_damage_gain / BINARY_SCALE
@weapon_damage_gain.setter
def weapon_damage_gain(self, weapon_damage_gain):
self._weapon_damage_gain = weapon_damage_gain
self.weapon_damage = self.weapon_damage_base * (1 + self.weapon_damage_gain) + self.weapon_damage_rand / 2
@property
def weapon_damage(self):
return self._weapon_damage
@weapon_damage.setter
def weapon_damage(self, weapon_damage):
self._weapon_damage = int(weapon_damage)
""" Others """
@property
def shield_ignore(self):
raise NotImplementedError
@property
def all_shield_ignore(self):
return self._all_shield_ignore
@all_shield_ignore.setter
def all_shield_ignore(self, all_shield_ignore):
residual = all_shield_ignore - self._all_shield_ignore
self.physical_shield_ignore += residual
self.magical_shield_ignore += residual
self._all_shield_ignore = all_shield_ignore
@property
def physical_shield_ignore(self):
return self._physical_shield_ignore / BINARY_SCALE
@physical_shield_ignore.setter
def physical_shield_ignore(self, physical_shield_ignore):
self._physical_shield_ignore = physical_shield_ignore
@property
def magical_shield_ignore(self):
return self._magical_shield_ignore / BINARY_SCALE
@magical_shield_ignore.setter
def magical_shield_ignore(self, magical_shield_ignore):
self._magical_shield_ignore = magical_shield_ignore
@property
def damage_addition(self):
raise NotImplementedError
@property
def all_damage_addition(self):
return self._all_damage_addition
@all_damage_addition.setter
def all_damage_addition(self, all_damage_addition):
residual = all_damage_addition - self._all_damage_addition
self.physical_damage_addition += residual
self.magical_damage_addition += residual
self._all_damage_addition = all_damage_addition
@property
def physical_damage_addition(self):
return self._physical_damage_addition / BINARY_SCALE
@physical_damage_addition.setter
def physical_damage_addition(self, physical_damage_addition):
self._physical_damage_addition = physical_damage_addition
@property
def magical_damage_addition(self):
return self._magical_damage_addition / BINARY_SCALE
@magical_damage_addition.setter
def magical_damage_addition(self, magical_damage_addition):
self._magical_damage_addition = magical_damage_addition
@property
def pve_addition(self):
return self._pve_addition / BINARY_SCALE
@pve_addition.setter
def pve_addition(self, pve_addition):
self._pve_addition = pve_addition
class Attribute(Major, Minor, Target):
level: int = 120
grad_attrs: dict = None
def __init__(self):
self.all_major_base += MAJOR_BASE
@property
def level_reduction(self):
return LEVEL_REDUCTION * (self.target_level - self.level)
class PhysicalAttribute(Attribute):
@property
def attack_power(self):
return self.physical_attack_power
@property
def critical_strike(self):
return self.physical_critical_strike
@property
def critical_power(self):
return self.physical_critical_power
@property
def overcome(self):
return self.physical_overcome
@property
def shield_ignore(self):
return self.physical_shield_ignore
@property
def damage_addition(self):
return self.physical_damage_addition
@property
def shield_base(self):
return self.physical_shield_base
@property
def shield_gain(self):
return self.physical_shield_gain
@property
def vulnerable(self):
return self.physical_vulnerable
class MagicalAttribute(Attribute):
@property
def attack_power(self):
return self.magical_attack_power
@property
def critical_strike(self):
return self.magical_critical_strike
@property
def critical_power(self):
return self.magical_critical_power
@property
def overcome(self):
return self.magical_overcome
@property
def shield_ignore(self):
return self.magical_shield_ignore
@property
def damage_addition(self):
return self.magical_damage_addition
@property
def shield_base(self):
return self.magical_shield_base
@property
def shield_gain(self):
return self.magical_shield_gain
@property
def vulnerable(self):
return self.magical_vulnerable