mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Auras: Implemented aura to increase armor by percentage of primary stat
This commit is contained in:
@@ -109,7 +109,6 @@ bool Player::UpdateStats(Stats stat)
|
||||
switch (stat)
|
||||
{
|
||||
case STAT_AGILITY:
|
||||
UpdateArmor();
|
||||
UpdateAllCritPercentages();
|
||||
UpdateDodgePercentage();
|
||||
break;
|
||||
@@ -118,7 +117,6 @@ bool Player::UpdateStats(Stats stat)
|
||||
break;
|
||||
case STAT_INTELLECT:
|
||||
UpdateSpellCritChance();
|
||||
UpdateArmor(); //SPELL_AURA_MOD_RESISTANCE_OF_INTELLECT_PERCENT, only armor currently
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -132,6 +130,7 @@ bool Player::UpdateStats(Stats stat)
|
||||
UpdateAttackPowerAndDamage(true);
|
||||
}
|
||||
|
||||
UpdateArmor();
|
||||
UpdateSpellDamageAndHealingBonus();
|
||||
UpdateManaRegen();
|
||||
return true;
|
||||
@@ -242,6 +241,17 @@ void Player::UpdateArmor()
|
||||
|
||||
float value = GetFlatModifierValue(unitMod, BASE_VALUE); // base armor (from items)
|
||||
float baseValue = value;
|
||||
|
||||
GetTotalAuraModifier(SPELL_AURA_MOD_ARMOR_PCT_FROM_STAT, [this, &baseValue](AuraEffect const* aurEff) {
|
||||
int32 miscValue = aurEff->GetMiscValue();
|
||||
Stats stat = (miscValue != -2) ? Stats(miscValue) : GetPrimaryStat();
|
||||
|
||||
int32 armorAmount = CalculatePct(GetStat(stat), aurEff->GetAmount());
|
||||
baseValue += armorAmount;
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
value *= GetPctModifierValue(unitMod, BASE_PCT); // armor percent from items
|
||||
value += GetFlatModifierValue(unitMod, TOTAL_VALUE);
|
||||
value *= GetPctModifierValue(unitMod, TOTAL_PCT);
|
||||
|
||||
@@ -346,7 +346,7 @@ enum AuraType : uint32
|
||||
SPELL_AURA_265 = 265,
|
||||
SPELL_AURA_SET_VIGNETTE = 266, // NYI
|
||||
SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL = 267,
|
||||
SPELL_AURA_268 = 268, // old SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT. unused 4.3.4
|
||||
SPELL_AURA_MOD_ARMOR_PCT_FROM_STAT = 268,
|
||||
SPELL_AURA_MOD_IGNORE_TARGET_RESIST = 269,
|
||||
SPELL_AURA_MOD_SCHOOL_MASK_DAMAGE_FROM_CASTER = 270,
|
||||
SPELL_AURA_MOD_SPELL_DAMAGE_FROM_CASTER = 271,
|
||||
|
||||
@@ -335,7 +335,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]=
|
||||
&AuraEffect::HandleUnused, //265 unused (4.3.4)
|
||||
&AuraEffect::HandleNULL, //266 SPELL_AURA_SET_VIGNETTE
|
||||
&AuraEffect::HandleNoImmediateEffect, //267 SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL implemented in Unit::IsImmunedToSpellEffect
|
||||
&AuraEffect::HandleUnused, //268 unused (4.3.4) old SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT.
|
||||
&AuraEffect::HandleModArmorPctFromStat, //268 SPELL_AURA_MOD_ARMOR_PCT_FROM_STAT also implemented in Player::UpdateArmor()
|
||||
&AuraEffect::HandleNoImmediateEffect, //269 SPELL_AURA_MOD_IGNORE_TARGET_RESIST implemented in Unit::CalcAbsorbResist and CalcArmorReducedDamage
|
||||
&AuraEffect::HandleNoImmediateEffect, //270 SPELL_AURA_MOD_SCHOOL_MASK_DAMAGE_FROM_CASTER implemented in Unit::SpellDamageBonusTaken and Unit::MeleeDamageBonusTaken
|
||||
&AuraEffect::HandleNoImmediateEffect, //271 SPELL_AURA_MOD_SPELL_DAMAGE_FROM_CASTER implemented in Unit::SpellDamageBonusTaken and Unit::MeleeDamageBonusTaken
|
||||
@@ -3460,6 +3460,20 @@ void AuraEffect::HandleAuraModExpertise(AuraApplication const* aurApp, uint8 mod
|
||||
target->ToPlayer()->UpdateExpertise(OFF_ATTACK);
|
||||
}
|
||||
|
||||
// Increase armor by <AuraEffect.BasePoints> % of your <primary stat>
|
||||
void AuraEffect::HandleModArmorPctFromStat(AuraApplication const* aurApp, uint8 mode, bool /*apply*/) const
|
||||
{
|
||||
if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT)))
|
||||
return;
|
||||
|
||||
// only players have primary stats
|
||||
Player* player = aurApp->GetTarget()->ToPlayer();
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
player->UpdateArmor();
|
||||
}
|
||||
|
||||
void AuraEffect::HandleModStatBonusPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const
|
||||
{
|
||||
if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT)))
|
||||
|
||||
@@ -238,6 +238,7 @@ class TC_GAME_API AuraEffect
|
||||
void HandleModHealingDonePct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
|
||||
void HandleModTotalPercentStat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
|
||||
void HandleAuraModExpertise(AuraApplication const* aurApp, uint8 mode, bool apply) const;
|
||||
void HandleModArmorPctFromStat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
|
||||
void HandleModStatBonusPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
|
||||
void HandleOverrideSpellPowerByAttackPower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
|
||||
void HandleOverrideAttackPowerBySpellPower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
|
||||
|
||||
Reference in New Issue
Block a user