30 if (amount >
int32(baseValue))
94 for (AuraEffectList::const_iterator i = modRatingFromStat.begin(); i != modRatingFromStat.end(); ++i)
95 if (
Stats((*i)->GetMiscValueB()) == stat)
96 mask |= (*i)->GetMiscValue();
100 if (mask & (1 << rating))
108 float precision = 100.0f;
112 float pvpHealing = value / precision;
113 float pvpDamage = value / precision;
150 if (aurEff->GetAmount() < 0 && aurEff->GetMiscValue() & (1 << i))
151 negativeMod += aurEff->GetAmount();
243 ratio = hpBase->ratio;
246 float baseStam = std::min(20.0f, stamina);
247 float moreStam = stamina - baseStam;
249 return baseStam + moreStam * ratio;
327 if (form && form->
flags1 & 0x20)
330 val2 = strengthValue + agilityValue;
412 weaponSpeed = weapon->GetTemplate()->Delay / 1000;
416 weapon_mindamage = weapon_mindamage / weaponSpeed;
417 weapon_maxdamage = weapon_maxdamage / weaponSpeed;
421 weapon_mindamage = weapon_mindamage / weaponSpeed + weapon_mindamage / 2.5;
422 weapon_maxdamage = weapon_mindamage / weaponSpeed + weapon_maxdamage / 2.5;
445 min_damage = ((base_value + weapon_mindamage) * base_pct + total_value) * total_pct;
446 max_damage = ((base_value + weapon_maxdamage) * base_pct + total_value) * total_pct;
490 value = value < 0.0f ? 0.0f : value;
528 value = value < 0.0f ? 0.0f : value;
589 if (
CanParry() && parry_cap[pclass] > 0.0f)
591 float nondiminishing = 5.0f;
597 value = nondiminishing + diminishing * parry_cap[pclass] / (diminishing + parry_cap[pclass] *
m_diminishing_k[pclass]);
602 value = value < 0.0f ? 0.0f : value;
624 float diminishing = 0.0f, nondiminishing = 0.0f;
632 float value = nondiminishing + (diminishing * dodge_cap[pclass] / (diminishing + dodge_cap[pclass] *
m_diminishing_k[pclass]));
637 value = value < 0.0f ? 0.0f : value;
701 for (AuraEffectList::const_iterator itr = expAuras.begin(); itr != expAuras.end(); ++itr)
704 if ((*itr)->GetSpellInfo()->EquippedItemClass == -1)
705 expertise += (*itr)->GetAmount();
708 expertise += (*itr)->GetAmount();
757 spirit_regen /= 5.0f;
938 weapon_mindamage = 0;
939 weapon_maxdamage = 0;
942 float mindamage = ((base_value + weapon_mindamage) * dmg_multiplier * base_pct + total_value) * total_pct;
943 float maxdamage = ((base_value + weapon_maxdamage) * dmg_multiplier * base_pct + total_value) * total_pct;
970#define ENTRY_VOIDWALKER 1860
971#define ENTRY_SUCCUBUS 1863
972#define ENTRY_FELHUNTER 417
973#define ENTRY_FELGUARD 17252
974#define ENTRY_WATER_ELEMENTAL 510
975#define ENTRY_TREANT 1964
976#define ENTRY_FIRE_ELEMENTAL 15438
977#define ENTRY_GHOUL 26125
978#define ENTRY_BLOODWORM 28017
988 float ownersBonus = 0.0f;
1001 ownersBonus = float(owner->
GetStat(stat)) * mod;
1002 value += ownersBonus;
1007 value += ownersBonus;
1014 value += ownersBonus;
1077 float bonus_armor = 0.0f;
1084 bonus_armor =
m_owner->GetArmor();
1099 float multiplicator;
1102 case ENTRY_IMP: multiplicator = 8.4f;
break;
1108 default: multiplicator = 10.0f;
break;
1124 float multiplicator = 15.0f;
1128 case ENTRY_IMP: multiplicator = 4.95f;
break;
1133 default: multiplicator = 15.0f;
break;
1150 float bonusAP = 0.0f;
1174 float dmg_multiplier = 0.31f;
1175 if (
m_owner->GetAuraEffect(63271, 0))
1176 dmg_multiplier = 0.61f;
1190 int32 maximum = (fire > shadow) ? fire : shadow;
1194 bonusAP = maximum * 0.57f;
1226 float bonusDamage = 0.0f;
1234 bonusDamage = spellDmg * 0.09f;
1241 bonusDamage = spellDmg * 0.4f;
1257 float mindamage = ((base_value + weapon_mindamage) * base_pct + total_value) * total_pct;
1258 float maxdamage = ((base_value + weapon_maxdamage) * base_pct + total_value) * total_pct;
1261 for (Unit::AuraEffectList::const_iterator itr = mDummy.begin(); itr != mDummy.end(); ++itr)
1263 switch ((*itr)->GetSpellInfo()->Id)
1267 AddPct(mindamage, -(*itr)->GetAmount());
1268 AddPct(maxdamage, -(*itr)->GetAmount());
DBCStorage< SpellShapeshiftFormEntry > sSpellShapeshiftFormStore(SpellShapeshiftFormfmt)
DBCStorage< gtOCTHpPerStaminaEntry > sGtOCTHpPerStaminaStore(GtOCTHpPerStaminafmt)
DBCStorage< ChrClassesEntry > sChrClassesStore(ChrClassesEntryfmt)
@ SPEC_SHAMAN_RESTORATION
@ SPELL_AURA_MOD_ATTACKSPEED
@ SPELL_AURA_MOD_PARRY_PERCENT
@ SPELL_AURA_MOD_RATING_FROM_STAT
@ SPELL_AURA_MOD_SPELL_HIT_CHANCE
@ SPELL_AURA_MOD_EXPERTISE
@ SPELL_AURA_MOD_POWER_REGEN
@ SPELL_AURA_OVERRIDE_AP_BY_SPELL_POWER_PCT
@ SPELL_AURA_MOD_SPELL_CRIT_CHANCE
@ SPELL_AURA_MOD_HIT_CHANCE
@ SPELL_AURA_MOD_DODGE_PERCENT
@ SPELL_AURA_MOD_MANA_REGEN_INTERRUPT
@ SPELL_AURA_MOD_CRIT_PCT
@ SPELL_AURA_OVERRIDE_SPELL_POWER_BY_AP_PCT
@ SPELL_AURA_MOD_POWER_REGEN_PERCENT
@ SPELL_AURA_MOD_DAMAGE_DONE
@ SPELL_AURA_MOD_BLOCK_PERCENT
#define ENTRY_FIRE_ELEMENTAL
const float m_diminishing_k[MAX_CLASSES]
bool _ModifyUInt32(bool apply, uint32 &baseValue, int32 &amount)
#define ENTRY_WATER_ELEMENTAL
@ UNIT_MOD_DAMAGE_OFFHAND
@ UNIT_MOD_RESISTANCE_START
@ UNIT_MOD_DAMAGE_MAINHAND
@ UNIT_MOD_ATTACK_POWER_RANGED
#define MAX_COMBAT_RATING
@ OFFHAND_CRIT_PERCENTAGE
@ UNIT_FIELD_RANGED_ATTACK_POWER
@ UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER
@ UNIT_FIELD_RANGED_ATTACK_POWER_MOD_POS
@ UNIT_FIELD_MAX_RANGED_DAMAGE
@ UNIT_FIELD_ATTACK_POWER_MOD_POS
@ UNIT_FIELD_ATTACK_POWER_MULTIPLIER
@ UNIT_FIELD_ATTACK_POWER
@ UNIT_FIELD_MAX_OFF_HAND_DAMAGE
@ UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER
@ UNIT_FIELD_MIN_RANGED_DAMAGE
@ UNIT_FIELD_MIN_OFF_HAND_DAMAGE
@ UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER
@ PLAYER_FIELD_OFFHAND_CRIT_PERCENTAGE
@ PLAYER_FIELD_MOD_DAMAGE_DONE_POS
@ PLAYER_FIELD_PVP_POWER_HEALING
@ PLAYER_FIELD_OVERRIDE_APBY_SPELL_POWER_PERCENT
@ PLAYER_FIELD_DODGE_PERCENTAGE
@ PLAYER_FIELD_OFFHAND_EXPERTISE
@ PLAYER_FIELD_PET_SPELL_POWER
@ PLAYER_FIELD_MOD_TARGET_RESISTANCE
@ PLAYER_FIELD_RANGED_CRIT_PERCENTAGE
@ PLAYER_FIELD_PARRY_PERCENTAGE
@ PLAYER_FIELD_COMBAT_RATINGS
@ PLAYER_FIELD_RUNE_REGEN
@ PLAYER_FIELD_PVP_POWER_DAMAGE
@ PLAYER_FIELD_RANGED_EXPERTISE
@ PLAYER_FIELD_CRIT_PERCENTAGE
@ PLAYER_FIELD_MOD_HEALING_DONE_POS
@ PLAYER_FIELD_SPELL_CRIT_PERCENTAGE
@ PLAYER_FIELD_BLOCK_PERCENTAGE
@ PLAYER_FIELD_MAINHAND_EXPERTISE
@ PLAYER_FIELD_MOD_DAMAGE_DONE_NEG
T CalculatePct(T base, U pct)
bool UpdateAllStats() OVERRIDE
void UpdateMaxHealth() OVERRIDE
void UpdateDamagePhysical(WeaponAttackType attType) OVERRIDE
void UpdateMaxPower(Powers power) OVERRIDE
CreatureTemplate const * GetCreatureTemplate() const
bool UpdateStats(Stats stat) OVERRIDE
void UpdateResistances(uint32 school) OVERRIDE
void UpdateAttackPowerAndDamage(bool ranged=false) OVERRIDE
void UpdateArmor() OVERRIDE
void UpdateMaxPower(Powers power) OVERRIDE
bool UpdateStats(Stats stat) OVERRIDE
bool UpdateAllStats() OVERRIDE
void SetBonusDamage(int32 damage)
void UpdateArmor() OVERRIDE
float m_statFromOwner[MAX_STATS]
void UpdateMaxHealth() OVERRIDE
void UpdateResistances(uint32 school) OVERRIDE
void UpdateDamagePhysical(WeaponAttackType attType) OVERRIDE
void UpdateAttackPowerAndDamage(bool ranged=false) OVERRIDE
bool IsFitToSpellRequirements(SpellInfo const *spellInfo) const
bool IsSpiritWolf() const
bool IsWhiteTiger() const
int32 GetInt32Value(uint16 index) const
void SetInt32Value(uint16 index, int32 value)
uint32 GetUInt32Value(uint16 index) const
void ApplyModInt32Value(uint16 index, int32 val, bool apply)
void ApplyModUInt32Value(uint16 index, int32 val, bool apply)
float GetFloatValue(uint16 index) const
void SetFloatValue(uint16 index, float value)
void SetStatFloatValue(uint16 index, float value)
void SetUInt32Value(uint16 index, uint32 value)
void SetStatInt32Value(uint16 index, int32 value)
void UpdateParryPercentage()
void UpdateAllSpellCritChances()
void UpdateArmorPenetration(int32 amount)
float GetMeleeCritFromAgility()
void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float &min_damage, float &max_damage)
void UpdateRuneRegen(RuneType rune)
void UpdateDamagePhysical(WeaponAttackType attType) override
float GetHealthBonusFromStamina()
void UpdateDodgePercentage()
float GetTotalPercentageModValue(BaseModGroup modGroup) const
void UpdateMaxPower(Powers power) override
void ApplyRatingMod(CombatRating cr, int32 value, bool apply)
void UpdateCritPercentage(WeaponAttackType attType)
uint32 GetTalentSpecialization(uint8 spec) const
float GetRatingBonusValue(CombatRating cr) const
void SetBaseModValue(BaseModGroup modGroup, BaseModType modType, float value)
void GetDodgeFromAgility(float &diminishing, float &nondiminishing)
void UpdateBlockPercentage()
void ApplySpellPenetrationBonus(int32 amount, bool apply)
float GetManaSpecializationMultiplier()
void UpdateArmor() override
void RecalculateRating(CombatRating cr)
bool UpdateStats(Stats stat) override
void _RemoveAllItemMods()
void UpdateSpellHitChances()
void UpdateExpertise(WeaponAttackType attType)
void _ApplyAllStatBonuses()
void ApplyManaRegenBonus(int32 amount, bool apply)
void UpdateResistances(uint32 school) override
void UpdateSpellDamageAndHealingBonus()
void UpdateMaxHealth() override
void UpdateMeleeHitChances()
float GetSpellCritFromIntellect()
void UpdateAllRunesRegen()
uint8 GetActiveSpec() const
void UpdateRangedHitChances()
void ApplySpellPowerBonus(int32 amount, bool apply)
void UpdateAllCritPercentages()
uint32 GetRuneBaseCooldown(uint8 index) const
bool UpdateAllStats() override
Item * GetWeaponForAttack(WeaponAttackType attackType, bool useable=false) const
void UpdateTalentSpecializationManaBonus()
void _RemoveAllStatBonuses()
int32 m_spellPenetrationItemMod
void ApplyHealthRegenBonus(int32 amount, bool apply)
float OCTRegenMPPerSpirit()
RuneType GetBaseRune(uint8 index) const
void UpdateAttackPowerAndDamage(bool ranged=false) override
uint32 GetRuneTypeBaseCooldown(RuneType runeType) const
void UpdateSpellCritChance(uint32 school)
AuraEffectList const & GetAuraEffectsByType(AuraType type) const
void SetStat(Stats stat, int32 val)
float GetTotalAuraModValue(UnitMods unitMod) const
float GetTotalStatValue(Stats stat) const
void ApplyStatBuffMod(Stats stat, float val, bool apply)
ShapeshiftForm GetShapeshiftForm() const
bool haveOffhandWeapon() const
float GetTotalAuraMultiplierByMiscValue(AuraType auratype, int32 misc_value) const
bool CanDualWield() const
float m_modRangedHitChance
int32 GetMaxPower(Powers power) const
uint16 GetMaxSkillValueForLevel(Unit const *target=NULL) const
void _ApplyAllAuraStatMods()
bool CanUseAttackType(WeaponAttackType attacktype) const
void SetResistance(SpellSchools school, int32 val)
float GetModifierValue(UnitMods unitMod, UnitModifierType modifierType) const
float GetWeaponDamageRange(WeaponAttackType attType, WeaponDamageRange type) const
uint32 GetCreateHealth() const
bool HasAuraType(AuraType auraType) const
float m_modMeleeHitChance
void _RemoveAllAuraStatMods()
uint32 GetAttackTime(WeaponAttackType att) const
int32 SpellBaseHealingBonusDone(SpellSchoolMask schoolMask) const
float GetAPMultiplier(WeaponAttackType attType, bool normalized)
float GetCreateStat(Stats stat) const
void SetModifierValue(UnitMods unitMod, UnitModifierType modifierType, float value)
bool IsInFeralForm() const
int32 GetCreatePowers(Powers power) const
void SetCanModifyStats(bool modifyStats)
int32 GetTotalAuraModifierByMiscValue(AuraType auratype, int32 misc_value) const
float GetStat(Stats stat) const
void SetMaxPower(Powers power, int32 val)
Powers getPowerType() const
void SetMaxHealth(uint32 val)
int32 GetTotalAuraModifier(AuraType auratype) const
std::list< AuraEffect * > AuraEffectList
float m_modSpellHitChance
Guardian * GetGuardianPet() const
int32 SpellBaseDamageBonusDone(SpellSchoolMask schoolMask) const
float GetTotalAttackPowerValue(WeaponAttackType attType) const
@ CONFIG_STATS_LIMITS_ENABLE
@ CONFIG_STATS_LIMITS_PARRY
@ CONFIG_STATS_LIMITS_DODGE
@ CONFIG_STATS_LIMITS_CRIT
@ CONFIG_STATS_LIMITS_BLOCK