*Fix lifebloom final heal coefficient - by nesocip

*Fix aura immunity dispel for spells like Resurrection sickness
*Do not proc auras without spellfamilyflags required for totems.
*Allow more auras to be displayed in client.
*Fix some issues with Cut to the Chase.

--HG--
branch : trunk
This commit is contained in:
QAston
2009-05-16 20:23:56 +02:00
parent 14daff6d38
commit bb6e0dba89
7 changed files with 27 additions and 11 deletions
@@ -0,0 +1 @@
UPDATE `spell_bonus_data` SET `direct_bonus` = '0.6453' WHERE `spell_bonus_data`.`entry` =33763;
@@ -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)');
-1
View File
@@ -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
+13 -1
View File
@@ -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:
+1 -1
View File
@@ -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()); }
+3 -4
View File
@@ -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;
+6 -4
View File
@@ -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);
}
}
}