diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 4 | ||||
-rwxr-xr-x | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 12 |
2 files changed, 10 insertions, 6 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 58c21183982..b35ba61eb2f 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -14225,10 +14225,10 @@ void Unit::RestoreDisplayId() { if (AuraApplication const * aurApp = (*i)->GetBase()->GetApplicationOfTarget(GetGUID())) { - if (aurApp->IsPositive()) + if (!handledAura) handledAura = (*i); // prefer negative auras - else + if (!aurApp->IsPositive()) { handledAura = (*i); break; diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 28d3fea7bec..5f646153fad 100755 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -3253,7 +3253,7 @@ void AuraEffect::HandleAuraTransform(AuraApplication const * aurApp, uint8 mode, if (apply) { // update active transform spell only when transform or shapeshift not set or not overwriting negative by positive case - if ((!target->getTransForm() && !target->GetShapeshiftForm()) || !IsPositiveSpell(GetId()) || IsPositiveSpell(target->getTransForm())) + if (!target->GetModelForForm(target->GetShapeshiftForm()) || !IsPositiveSpell(GetId())) { // special case (spell specific functionality) if (GetMiscValue() == 0) @@ -3264,7 +3264,7 @@ void AuraEffect::HandleAuraTransform(AuraApplication const * aurApp, uint8 mode, case 16739: { uint32 orb_model = target->GetNativeDisplayId(); - switch(orb_model) + switch (orb_model) { // Troll Female case 1479: target->SetDisplayId(10134); break; @@ -3343,9 +3343,12 @@ void AuraEffect::HandleAuraTransform(AuraApplication const * aurApp, uint8 mode, target->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID,16314); } } - target->setTransForm(GetId()); } + // update active transform spell only when transform or shapeshift not set or not overwriting negative by positive case + if (!target->getTransForm() || !IsPositiveSpell(GetId()) || IsPositiveSpell(target->getTransForm())) + target->setTransForm(GetId()); + // polymorph case if ((mode & AURA_EFFECT_HANDLE_REAL) && target->GetTypeId() == TYPEID_PLAYER && target->IsPolymorphed()) { @@ -3362,7 +3365,8 @@ void AuraEffect::HandleAuraTransform(AuraApplication const * aurApp, uint8 mode, else { // HandleEffect(this, AURA_EFFECT_HANDLE_SEND_FOR_CLIENT, true) will reapply it if need - target->setTransForm(0); + if (target->getTransForm() == GetId()) + target->setTransForm(0); target->RestoreDisplayId(); |