diff options
-rw-r--r-- | sql/base/world_database.sql | 4 | ||||
-rw-r--r-- | sql/updates/10091_world_spell_proc_event.sql | 7 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 29 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 1 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuras.cpp | 20 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 7 |
6 files changed, 38 insertions, 30 deletions
diff --git a/sql/base/world_database.sql b/sql/base/world_database.sql index 182aacdc8e7..32b5367041f 100644 --- a/sql/base/world_database.sql +++ b/sql/base/world_database.sql @@ -18815,6 +18815,7 @@ INSERT INTO `spell_proc_event` (`entry`,`SchoolMask`,`SpellFamilyName`,`SpellFam ( 44472, 0x00, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0, 0, 0), -- Burnout (Rank 5) ( 44543, 0x00, 3, 0x00100220, 0x00001000, 0x00000000, 0x00010000, 0x00000000, 0, 7, 0), -- Fingers of Frost (Rank 1) ( 44545, 0x00, 3, 0x00100220, 0x00001000, 0x00000000, 0x00010000, 0x00000000, 0, 15, 0), -- Fingers of Frost (Rank 2) +( 74396, 0x10, 3, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000003, 0, 0, 0), -- Fingers of Frost (buff) ( 44546, 0x00, 3, 0x00100220, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 0), -- Brain Freeze (Rank 1) ( 44548, 0x00, 3, 0x00100220, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 0), -- Brain Freeze (Rank 2) ( 44549, 0x00, 3, 0x00100220, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 0), -- Brain Freeze (Rank 3) @@ -19269,6 +19270,9 @@ INSERT INTO `spell_proc_event` (`entry`,`SchoolMask`,`SpellFamilyName`,`SpellFam ( 56636, 0x00, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 6), -- Taste for Blood (Rank 1) ( 56637, 0x00, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 6), -- Taste for Blood (Rank 2) ( 56638, 0x00, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 6), -- Taste for Blood (Rank 3) +( 60503, 0x01, 4, 0x00000004, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0, 0, 0), -- Taste for Blood (proc) +( 68051, 0x01, 4, 0x00000004, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0, 0, 0), -- Overpower Ready! (proc) +( 52437, 0x01, 4, 0x20000000, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0, 0, 0), -- Sudden Death (proc) ( 50421, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 0), -- Scent of Blood ( 53386, 0x30, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 0), -- Rune of Cinderglacier ( 56375, 0x00, 3, 0x01000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0, 0, 0), -- Glyphs of Polymorph diff --git a/sql/updates/10091_world_spell_proc_event.sql b/sql/updates/10091_world_spell_proc_event.sql new file mode 100644 index 00000000000..02d88bcfc4e --- /dev/null +++ b/sql/updates/10091_world_spell_proc_event.sql @@ -0,0 +1,7 @@ +-- Taste for Blood, Overpower Ready!, Sudden Death and Fingers of Frost proc data. +DELETE FROM `spell_proc_event` WHERE `entry` IN (60503, 68051, 52437, 74396); +INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `procFlags`, `procEx`, `ppmRate`, `CustomChance`, `Cooldown`) VALUES +(60503, 0x01, 4, 0x00000004, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0, 0, 0), +(68051, 0x01, 4, 0x00000004, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0, 0, 0), +(52437, 0x01, 4, 0x20000000, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0, 0, 0), +(74396, 0x10, 3, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000003, 0, 0, 0); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 6a36c3b5338..bc0b67f2089 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -19111,34 +19111,7 @@ void Player::RemoveSpellMods(Spell * spell) { if (!spell) return; - std::set <Aura *> checkedSpells; - - AuraEffectList const & auraList = GetAuraEffectsByType(SPELL_AURA_ABILITY_IGNORE_AURASTATE); - for (AuraEffectList::const_iterator itr = auraList.begin(); itr != auraList.end();) - { - AuraEffect * aurEff = *itr; - Aura * aura = aurEff->GetBase(); - ++itr; - if (!aura->GetCharges()) - continue; - - SpellEntry const * spellInfo = aura->GetSpellProto(); - - if (spellInfo->SpellFamilyName != spell->m_spellInfo->SpellFamilyName || - checkedSpells.find(aura) != checkedSpells.end()) - continue; - - if (spell->m_spellInfo->SpellFamilyFlags & spellInfo->EffectSpellClassMask[aurEff->GetEffIndex()] - // this is for fingers of frost, look at spell::finish part, a charge will be taken by the triggering spell - && aura->GetDuration() != aura->GetMaxDuration()) - { - checkedSpells.insert(aura); - spell->m_appliedMods.erase(aura); - if (aura->DropCharge()) - itr = auraList.begin(); - } - } - + if (spell->m_appliedMods.empty()) return; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index e5984f5cd38..c13aa68b825 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13790,6 +13790,7 @@ bool InitTriggerAuraData() isTriggerAura[SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE] = true; isTriggerAura[SPELL_AURA_MOD_DAMAGE_FROM_CASTER] = true; isTriggerAura[SPELL_AURA_MOD_SPELL_CRIT_CHANCE] = true; + isTriggerAura[SPELL_AURA_ABILITY_IGNORE_AURASTATE] = true; isNonTriggerAura[SPELL_AURA_MOD_POWER_REGEN]=true; isNonTriggerAura[SPELL_AURA_REDUCE_PUSHBACK]=true; diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 4d0e43fd678..5228d099f8c 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -959,6 +959,20 @@ void Aura::HandleAuraSpecificMods(AuraApplication const * aurApp, Unit * caster, caster->CastSpell(caster, spellId, true); } break; + case 44544: // Fingers of Frost + { + // See if we already have the indicator aura. If not, create one. + if (Aura *aur = target->GetAura(74396)) + { + // Aura already there. Refresh duration and set original charges + aur->SetCharges(2); + aur->RefreshDuration(); + } + else + target->AddAura(74396, target); + } + default: + break; } break; case SPELLFAMILY_WARLOCK: @@ -1125,6 +1139,10 @@ void Aura::HandleAuraSpecificMods(AuraApplication const * aurApp, Unit * caster, break; target->CastSpell(target, 32612, true, NULL, GetEffect(1)); break; + case 74396: // Fingers of Frost + // Remove the IGNORE_AURASTATE aura + target->RemoveAurasDueToSpell(44544); + break; case 44401: //Missile Barrage case 48108: //Hot Streak case 57761: //Fireball! @@ -1133,6 +1151,8 @@ void Aura::HandleAuraSpecificMods(AuraApplication const * aurApp, Unit * caster, if (target->HasAura(70752)) //Item - Mage T10 2P Bonus target->CastSpell(target, 70753, true); break; + default: + break; } if (!caster) break; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index a8087363aa3..eb9f0bd6dd4 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -3721,7 +3721,6 @@ void SpellMgr::LoadSpellCustomAttr() case 54741: // Firestarter case 57761: // Fireball! case 39805: // Lightning Overload - case 52437: // Sudden Death case 64823: // Item - Druid T8 Balance 4P Bonus case 44401: spellInfo->procCharges = 1; @@ -3732,8 +3731,12 @@ void SpellMgr::LoadSpellCustomAttr() count++; break; case 44544: // Fingers of Frost + spellInfo->EffectSpellClassMask[0] = flag96(685904631, 1151048, 0); + count++; + break; + case 74396: // Fingers of Frost visual buff spellInfo->procCharges = 2; - spellInfo->EffectSpellClassMask[0] = flag96(685904631,1151048,0); + spellInfo->StackAmount = 0; count++; break; case 28200: // Ascendance (Talisman of Ascendance trinket) |