diff options
| author | QAston <qaston@gmail.com> | 2011-06-08 09:19:34 +0200 |
|---|---|---|
| committer | QAston <qaston@gmail.com> | 2011-06-08 09:19:34 +0200 |
| commit | 0575dddbb3865cfd4f822fefdff92aa4e024afc9 (patch) | |
| tree | 2afcfb1ed44c4f43735ba33b9d1b611d0ec2c41b /src | |
| parent | 72b73d2cb9c6835635f46eefa9ca39b8468e1542 (diff) | |
Core/Auras: Fix visibility aura effect handlers to work correctly on amount change
Diffstat (limited to 'src')
| -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(); |
