diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 870e572c0..6b4e689b6 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1030,6 +1030,21 @@ void Spell::EffectDummy(SpellEffectIndex eff_idx) return; } + case 21147: // Arcane Vacuum + { + if (!unitTarget) + return; + + // Spell used by Azuregos to teleport all the players to him + // This also resets the target threat + if (m_caster->getThreatManager().getThreat(unitTarget)) + m_caster->getThreatManager().modifyThreatPercent(unitTarget, -100); + + // cast summon player + m_caster->CastSpell(unitTarget, 21150, true); + + return; + } case 23019: // Crystal Prison Dummy DND { if (!unitTarget || !unitTarget->isAlive() || unitTarget->GetTypeId() != TYPEID_UNIT || ((Creature*)unitTarget)->IsPet()) diff --git a/src/game/ThreatManager.h b/src/game/ThreatManager.h index 6159435b5..11dd4e070 100644 --- a/src/game/ThreatManager.h +++ b/src/game/ThreatManager.h @@ -56,7 +56,11 @@ class MANGOS_DLL_SPEC HostileReference : public Reference void setThreat(float pThreat) { addThreat(pThreat - getThreat()); } - void addThreatPercent(int32 pPercent) { float tmpThreat = iThreat; tmpThreat = tmpThreat * (pPercent+100) / 100; addThreat(tmpThreat-iThreat); } + void addThreatPercent(int32 pPercent) + { + // for special -100 case avoid rounding + addThreat(pPercent == -100 ? -iThreat : iThreat * pPercent / 100.0f); + } float getThreat() const { return iThreat; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 2477872f0..4873598e9 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "11470" + #define REVISION_NR "11471" #endif // __REVISION_NR_H__