diff options
-rw-r--r-- | sql/updates/3358_world_spell_bonus_data.sql | 1 | ||||
-rw-r--r-- | sql/updates/3359_world_spell_linked_spell.sql | 3 | ||||
-rw-r--r-- | src/game/SharedDefines.h | 1 | ||||
-rw-r--r-- | src/game/SpellAuras.cpp | 14 | ||||
-rw-r--r-- | src/game/SpellAuras.h | 2 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 7 | ||||
-rw-r--r-- | src/game/Unit.cpp | 10 |
7 files changed, 27 insertions, 11 deletions
diff --git a/sql/updates/3358_world_spell_bonus_data.sql b/sql/updates/3358_world_spell_bonus_data.sql new file mode 100644 index 00000000000..e2cb0aa706b --- /dev/null +++ b/sql/updates/3358_world_spell_bonus_data.sql @@ -0,0 +1 @@ +UPDATE `spell_bonus_data` SET `direct_bonus` = '0.6453' WHERE `spell_bonus_data`.`entry` =33763; diff --git a/sql/updates/3359_world_spell_linked_spell.sql b/sql/updates/3359_world_spell_linked_spell.sql new file mode 100644 index 00000000000..a8d73d37056 --- /dev/null +++ b/sql/updates/3359_world_spell_linked_spell.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_linked_spell` WHERE spell_trigger = 33206; +INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES +( 33206, 44416, 2, 'Pain Suppression (threat)');
\ No newline at end of file diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 57858df5ea8..fd7a6840ca8 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -249,7 +249,6 @@ enum SpellCategory #define SPELL_ATTR_UNAFFECTED_BY_INVULNERABILITY 0x20000000 // 29 unaffected by invulnerability (hmm possible not...) #define SPELL_ATTR_BREAKABLE_BY_DAMAGE 0x40000000 // 30 breakable by damage? #define SPELL_ATTR_CANT_CANCEL 0x80000000 // 31 positive aura can't be canceled - #define SPELL_ATTR_EX_DISMISS_PET 0x00000001 // 0 dismiss pet and not allow to summon new one? #define SPELL_ATTR_EX_DRAIN_ALL_POWER 0x00000002 // 1 use all power (Only paladin Lay of Hands and Bunyanize) #define SPELL_ATTR_EX_CHANNELED_1 0x00000004 // 2 channeled target diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 639f6a1e2e0..8867522e549 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -1229,8 +1229,13 @@ bool Aura::modStackAmount(int32 num) return false; } -void Aura::SetAuraDuration(int32 duration) +void Aura::SetAuraDuration(int32 duration, bool withMods) { + if (withMods) + { + if (Player * modOwner = m_target->GetSpellModOwner()) + modOwner->ApplySpellMod(GetId(), SPELLMOD_DURATION, duration); + } m_duration = duration; //if (duration<0) //m_permanent=true; @@ -2483,6 +2488,13 @@ void AuraEffect::HandleAuraDummy(bool apply, bool Real, bool changeAmount) return; } + // Wrath of the Astromancer + if (GetId()==42783) + { + m_target->CastSpell(m_target,m_amount,true,NULL,this); + return; + } + switch(m_spellProto->SpellFamilyName) { case SPELLFAMILY_WARLOCK: diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h index 148f09d3ffb..b4d7eefb706 100644 --- a/src/game/SpellAuras.h +++ b/src/game/SpellAuras.h @@ -68,7 +68,7 @@ class TRINITY_DLL_SPEC Aura int32 GetAuraMaxDuration() const { return m_maxduration; } void SetAuraMaxDuration(int32 duration) { m_maxduration = duration; } int32 GetAuraDuration() const { return m_duration; } - void SetAuraDuration(int32 duration); + void SetAuraDuration(int32 duration, bool withMods = false); void RefreshAura() { SetAuraDuration(m_maxduration); } bool IsExpired() const { return !GetAuraDuration() && !(IsPermanent() || IsPassive()); } diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index e497884eb79..50e41dce8a7 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -2649,10 +2649,6 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2, bool //if spells have exactly the same effect they cannot stack for(uint32 i = 0; i < 3; ++i) if(spellInfo_1->Effect[i] != spellInfo_2->Effect[i] - // Overkill and master of subtlety need this - || spellInfo_1->EffectApplyAuraName[i] == SPELL_AURA_DUMMY - || spellInfo_1->EffectApplyAuraName[i] == SPELL_AURA_PERIODIC_DUMMY - || spellInfo_1->EffectApplyAuraName[i] != spellInfo_2->EffectApplyAuraName[i] || spellInfo_1->EffectMiscValue[i] != spellInfo_2->EffectMiscValue[i]) // paladin resist aura return false; // need itemtype check? need an example to add that check @@ -2666,6 +2662,9 @@ bool IsDispelableBySpell(SpellEntry const * dispelSpell, uint32 spellId, bool de SpellEntry const *spellproto = sSpellStore.LookupEntry(spellId); if (!spellproto) return false; + if (spellproto->Attributes & SPELL_ATTR_UNAFFECTED_BY_INVULNERABILITY) + return false; + if(dispelSpell->Attributes & SPELL_ATTR_UNAFFECTED_BY_INVULNERABILITY) return true; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index e417bd33488..c287713b6c2 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -5910,7 +5910,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger // lookup Slice and Dice if (AuraEffect * aur = GetAura(SPELL_AURA_MOD_HASTE, SPELLFAMILY_ROGUE,0x40000, 0, 0)) { - aur->GetParentAura()->SetAuraDuration(GetSpellMaxDuration(aur->GetSpellProto())); + aur->GetParentAura()->SetAuraDuration(GetSpellMaxDuration(aur->GetSpellProto()), true); return true; } return false; @@ -12812,6 +12812,11 @@ bool Unit::IsTriggeredAtSpellProcEvent(Unit *pVictim, Aura * aura, SpellEntry co if (!EventProcFlag) return false; + // Do not proc spells for totem if aura does not require family to proc + if (GetTypeId()==TYPEID_UNIT && isTotem() && ((*Totem)this)->target->IsControlledByPlayer()) + if (!spellProcEvent || !spellProcEvent->spellFamilyFlags) + return false; + // Additional checks for triggered spells if (procExtra & PROC_EX_INTERNAL_TRIGGERED) { @@ -12922,9 +12927,6 @@ bool Unit::HandleAuraRaidProcFromChargeWithValue( AuraEffect* triggeredByAura ) CastCustomSpell(target,spellProto->Id,&heal,NULL,NULL,true,NULL,triggeredByAura,caster->GetGUID()); if (Aura * aur = target->GetAura(spellProto->Id, caster->GetGUID())) aur->SetAuraCharges(jumps); - - //bonus must be applied after aura cast on target - heal = caster->SpellHealingBonus(this, spellProto, heal, HEAL); } } } |