diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index e3b7a37a6..4b8929702 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -2073,6 +2073,112 @@ void Aura::HandleAuraDummy(bool apply, bool Real) } case SPELLFAMILY_WARRIOR: { + switch(GetId()) + { + case 41099: // Battle Stance + { + if (target->GetTypeId() != TYPEID_UNIT) + return; + + // Stance Cooldown + target->CastSpell(target, 41102, true, NULL, this); + + // Battle Aura + target->CastSpell(target, 41106, true, NULL, this); + + // equipment + target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, 32614); + target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, 0); + target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, 0); + return; + } + case 41100: // Berserker Stance + { + if (target->GetTypeId() != TYPEID_UNIT) + return; + + // Stance Cooldown + target->CastSpell(target, 41102, true, NULL, this); + + // Berserker Aura + target->CastSpell(target, 41107, true, NULL, this); + + // equipment + target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, 32614); + target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, 0); + target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, 0); + return; + } + case 41101: // Defensive Stance + { + if (target->GetTypeId() != TYPEID_UNIT) + return; + + // Stance Cooldown + target->CastSpell(target, 41102, true, NULL, this); + + // Defensive Aura + target->CastSpell(target, 41105, true, NULL, this); + + // equipment (unknown, but should be axe+shield) + //target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, 0); + //target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, 0); + //target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, 0); + return; + } + case 53790: // Defensive Stance + { + if (target->GetTypeId() != TYPEID_UNIT) + return; + + // Stance Cooldown + target->CastSpell(target, 59526, true, NULL, this); + + // Defensive Aura + target->CastSpell(target, 41105, true, NULL, this); + + // equipment (need help here, item id not known) + //target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, 0); + //target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, 0); + //target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, 0); + return; + } + case 53791: // Berserker Stance + { + if (target->GetTypeId() != TYPEID_UNIT) + return; + + // Stance Cooldown + target->CastSpell(target, 59526, true, NULL, this); + + // Berserker Aura + target->CastSpell(target, 41107, true, NULL, this); + + // equipment + target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, 43625); + target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, 43625); + target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, 0); + return; + } + case 53792: // Battle Stance + { + if (target->GetTypeId() != TYPEID_UNIT) + return; + + // Stance Cooldown + target->CastSpell(target, 59526, true, NULL, this); + + // Battle Aura + target->CastSpell(target, 41106, true, NULL, this); + + // equipment + target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, 43623); + target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, 0); + target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, 0); + return; + } + } + // Overpower if (GetSpellProto()->SpellFamilyFlags & UI64LIT(0x0000000000000004)) { @@ -2255,6 +2361,24 @@ void Aura::HandleAuraDummy(bool apply, bool Real) target->CastSpell(target, 36731, true, NULL, this); return; } + case 41099: // Battle Stance + { + // Battle Aura + target->RemoveAurasDueToSpell(41106); + return; + } + case 41100: // Berserker Stance + { + // Berserker Aura + target->RemoveAurasDueToSpell(41107); + return; + } + case 41101: // Defensive Stance + { + // Defensive Aura + target->RemoveAurasDueToSpell(41105); + return; + } case 42517: // Beam to Zelfrax { // expecting target to be a dummy creature @@ -2326,6 +2450,24 @@ void Aura::HandleAuraDummy(bool apply, bool Real) return; } + case 53790: // Defensive Stance + { + // Defensive Aura + target->RemoveAurasDueToSpell(41105); + return; + } + case 53791: // Berserker Stance + { + // Berserker Aura + target->RemoveAurasDueToSpell(41107); + return; + } + case 53792: // Battle Stance + { + // Battle Aura + target->RemoveAurasDueToSpell(41106); + return; + } case 56511: // Towers of Certain Doom: Tower Bunny Smoke Flare Effect { // Towers of Certain Doom: Skorn Cannonfire diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index d80f2a4fd..462647974 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -2034,6 +2034,11 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons if ((spellInfo_1->SpellIconID == 456 && spellInfo_2->SpellIconID == 2006) || (spellInfo_2->SpellIconID == 456 && spellInfo_1->SpellIconID == 2006)) return false; + + // Defensive/Berserker/Battle stance aura can not stack (needed for dummy auras) + if (((spellInfo_1->SpellFamilyFlags & UI64LIT(0x800000)) && (spellInfo_2->SpellFamilyFlags & UI64LIT(0x800000))) || + ((spellInfo_2->SpellFamilyFlags & UI64LIT(0x800000)) && (spellInfo_1->SpellFamilyFlags & UI64LIT(0x800000)))) + return true; } // Hamstring -> Improved Hamstring (multi-family check) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index c868d484a..987ad20c3 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 "11083" + #define REVISION_NR "11084" #endif // __REVISION_NR_H__