aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/3358_world_spell_bonus_data.sql1
-rw-r--r--sql/updates/3359_world_spell_linked_spell.sql3
-rw-r--r--src/game/SharedDefines.h1
-rw-r--r--src/game/SpellAuras.cpp14
-rw-r--r--src/game/SpellAuras.h2
-rw-r--r--src/game/SpellMgr.cpp7
-rw-r--r--src/game/Unit.cpp10
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);
}
}
}