diff options
| -rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 4 | ||||
| -rwxr-xr-x | src/server/game/Spells/Auras/SpellAuraDefines.h | 1 | ||||
| -rwxr-xr-x | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 20 |
3 files changed, 14 insertions, 11 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 3ed5f36d46f..e4b203adb38 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -6455,13 +6455,13 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) AuraEffectList const& mModSkill = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL); for (AuraEffectList::const_iterator j = mModSkill.begin(); j != mModSkill.end(); ++j) if ((*j)->GetMiscValue() == int32(id)) - (*j)->HandleEffect(this, 0, true); + (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true); // permanent bonuses AuraEffectList const& mModSkillTalent = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL_TALENT); for (AuraEffectList::const_iterator j = mModSkillTalent.begin(); j != mModSkillTalent.end(); ++j) if ((*j)->GetMiscValue() == int32(id)) - (*j)->HandleEffect(this, 0, true); + (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true); // Learn all spells for skill learnSkillRewardedSpells(id, newVal); diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index b4150fdc9e8..9d19c0b5a32 100755 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -43,6 +43,7 @@ enum AuraEffectHandleModes AURA_EFFECT_HANDLE_CHANGE_AMOUNT = 0x04, // handler updates effect on target after effect amount change AURA_EFFECT_HANDLE_REAPPLY = 0x08, // handler updates effect on target after aura is reapplied on target AURA_EFFECT_HANDLE_STAT = 0x10, // handler updates effect on target when stat removal/apply is needed for calculations by core + AURA_EFFECT_HANDLE_SKILL = 0x20, // handler updates effect on target when skill removal/apply is needed for calculations by core AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK = (AURA_EFFECT_HANDLE_SEND_FOR_CLIENT | AURA_EFFECT_HANDLE_REAL), // any case handler need to send packet AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK = (AURA_EFFECT_HANDLE_CHANGE_AMOUNT | AURA_EFFECT_HANDLE_REAL), // any case handler applies effect depending on amount AURA_EFFECT_HANDLE_CHANGE_AMOUNT_SEND_FOR_CLIENT_MASK = (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK), diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 460b6b86056..38c33d0a030 100755 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -975,11 +975,11 @@ void AuraEffect::ChangeAmount(int32 newAmount, bool mark, bool onStackOrReapply) void AuraEffect::HandleEffect(AuraApplication * aurApp, uint8 mode, bool apply) { // check if call is correct, we really don't want using bitmasks here (with 1 exception) - ASSERT(!mode - || mode == AURA_EFFECT_HANDLE_REAL + ASSERT(mode == AURA_EFFECT_HANDLE_REAL || mode == AURA_EFFECT_HANDLE_SEND_FOR_CLIENT || mode == AURA_EFFECT_HANDLE_CHANGE_AMOUNT || mode == AURA_EFFECT_HANDLE_STAT + || mode == AURA_EFFECT_HANDLE_SKILL || mode == AURA_EFFECT_HANDLE_REAPPLY || mode == (AURA_EFFECT_HANDLE_CHANGE_AMOUNT | AURA_EFFECT_HANDLE_REAPPLY)); @@ -2774,7 +2774,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit * target, bool apply) const void AuraEffect::HandleModInvisibilityDetect(AuraApplication const * aurApp, uint8 mode, bool apply) const { - if (!(mode & AURA_EFFECT_HANDLE_REAL)) + if (!(mode & AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK)) return; Unit * target = aurApp->GetTarget(); @@ -2799,7 +2799,7 @@ void AuraEffect::HandleModInvisibilityDetect(AuraApplication const * aurApp, uin void AuraEffect::HandleModInvisibility(AuraApplication const * aurApp, uint8 mode, bool apply) const { - if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK)) + if (!(mode & AURA_EFFECT_HANDLE_CHANGE_AMOUNT_SEND_FOR_CLIENT_MASK)) return; Unit * target = aurApp->GetTarget(); @@ -2855,7 +2855,7 @@ void AuraEffect::HandleModInvisibility(AuraApplication const * aurApp, uint8 mod void AuraEffect::HandleModStealthDetect(AuraApplication const * aurApp, uint8 mode, bool apply) const { - if (!(mode & AURA_EFFECT_HANDLE_REAL)) + if (!(mode & AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK)) return; Unit * target = aurApp->GetTarget(); @@ -2880,7 +2880,7 @@ void AuraEffect::HandleModStealthDetect(AuraApplication const * aurApp, uint8 mo void AuraEffect::HandleModStealth(AuraApplication const * aurApp, uint8 mode, bool apply) const { - if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK)) + if (!(mode & AURA_EFFECT_HANDLE_CHANGE_AMOUNT_SEND_FOR_CLIENT_MASK)) return; Unit * target = aurApp->GetTarget(); @@ -2920,7 +2920,7 @@ void AuraEffect::HandleModStealth(AuraApplication const * aurApp, uint8 mode, bo void AuraEffect::HandleModStealthLevel(AuraApplication const * aurApp, uint8 mode, bool apply) const { - if (!(mode & AURA_EFFECT_HANDLE_REAL)) + if (!(mode & AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK)) return; Unit * target = aurApp->GetTarget(); @@ -3926,8 +3926,10 @@ void AuraEffect::HandleAuraModPetTalentsPoints(AuraApplication const * aurApp, u pet->InitTalentForLevel(); } -void AuraEffect::HandleAuraModSkill(AuraApplication const * aurApp, uint8 /*mode*/, bool apply) const +void AuraEffect::HandleAuraModSkill(AuraApplication const * aurApp, uint8 mode, bool apply) const { + if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_SKILL))) + return; Unit * target = aurApp->GetTarget(); if (target->GetTypeId() != TYPEID_PLAYER) @@ -6609,7 +6611,7 @@ void AuraEffect::HandleAuraOpenStable(AuraApplication const * aurApp, uint8 mode void AuraEffect::HandleAuraModFakeInebriation(AuraApplication const * aurApp, uint8 mode, bool apply) const { - if (!(mode & AURA_EFFECT_HANDLE_REAL)) + if (!(mode & AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK)) return; Unit* target = aurApp->GetTarget(); |
