mirror of
https://github.com/mangosfour/server.git
synced 2025-12-31 13:37:07 +00:00
[8216] More fixes in spell 47897 and talent 17962 and ranks work.
* Implement DoT apply for 47897 and ranks. * Implement propertly aura state update at add/remove 47897/348 and ranks * Update checks for 29722 and ranks for bonus damage Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
febdda5bab
commit
680ab810e0
5 changed files with 86 additions and 14 deletions
|
|
@ -893,7 +893,7 @@ enum AuraState
|
|||
//AURA_STATE_UNKNOWN11 = 11, // t|
|
||||
AURA_STATE_FAERIE_FIRE = 12, // c t|
|
||||
AURA_STATE_HEALTHLESS_35_PERCENT = 13, // C T |
|
||||
AURA_STATE_IMMOLATE = 14, // T |
|
||||
AURA_STATE_CONFLAGRATE = 14, // T |
|
||||
AURA_STATE_SWIFTMEND = 15, // T |
|
||||
AURA_STATE_DEADLY_POISON = 16, // T |
|
||||
AURA_STATE_ENRAGE = 17, // C |
|
||||
|
|
|
|||
|
|
@ -984,9 +984,13 @@ void Aura::_AddAura()
|
|||
if (IsSealSpell(m_spellProto))
|
||||
m_target->ModifyAuraState(AURA_STATE_JUDGEMENT, true);
|
||||
|
||||
// Conflagrate aura state on Immolate
|
||||
if (m_spellProto->SpellFamilyName == SPELLFAMILY_WARLOCK && m_spellProto->SpellFamilyFlags & 4)
|
||||
m_target->ModifyAuraState(AURA_STATE_IMMOLATE, true);
|
||||
// Conflagrate aura state on Immolate and Shadowflame
|
||||
if (m_spellProto->SpellFamilyName == SPELLFAMILY_WARLOCK &&
|
||||
// Immolate
|
||||
((m_spellProto->SpellFamilyFlags & UI64LIT(0x0000000000000004)) ||
|
||||
// Shadowflame
|
||||
(m_spellProto->SpellFamilyFlags2 & 0x00000002)))
|
||||
m_target->ModifyAuraState(AURA_STATE_CONFLAGRATE, true);
|
||||
|
||||
// Faerie Fire (druid versions)
|
||||
if (m_spellProto->SpellFamilyName == SPELLFAMILY_DRUID && (m_spellProto->SpellFamilyFlags & UI64LIT(0x0000000000000400)))
|
||||
|
|
@ -1089,8 +1093,43 @@ void Aura::_RemoveAura()
|
|||
removeState = AURA_STATE_JUDGEMENT; // Update Seals information
|
||||
break;
|
||||
case SPELLFAMILY_WARLOCK:
|
||||
if(m_spellProto->SpellFamilyFlags & UI64LIT(0x4))
|
||||
removeState = AURA_STATE_IMMOLATE; // Conflagrate aura state
|
||||
// Conflagrate aura state on Immolate and Shadowflame
|
||||
// Check Immolate case
|
||||
if (m_spellProto->SpellFamilyFlags & UI64LIT(0x0000000000000004))
|
||||
{
|
||||
//check if there is a Shadowflame DOT present, if not, remove AURA_STATE_CONFLAGRATE
|
||||
bool removeAuraState=true;
|
||||
Unit::AuraList const& SFDOT = m_target->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE);
|
||||
for(Unit::AuraList::const_iterator i = SFDOT.begin(); i != SFDOT.end(); ++i)
|
||||
{
|
||||
if ((*i)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_WARLOCK &&
|
||||
((*i)->GetSpellProto()->SpellFamilyFlags2 & 0x00000002))
|
||||
{
|
||||
removeAuraState=false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(removeAuraState)
|
||||
removeState = AURA_STATE_CONFLAGRATE;
|
||||
}
|
||||
// Check Shadowflame case
|
||||
else if (m_spellProto->SpellFamilyFlags2 & 0x00000002)
|
||||
{
|
||||
//check if there is a Immolate DOT present, if not, remove AURA_STATE_CONFLAGRATE
|
||||
bool removeAuraState=true;
|
||||
Unit::AuraList const& IMDOT = m_target->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE);
|
||||
for(Unit::AuraList::const_iterator i = IMDOT.begin(); i != IMDOT.end(); ++i)
|
||||
{
|
||||
if ((*i)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_WARLOCK &&
|
||||
((*i)->GetSpellProto()->SpellFamilyFlags & UI64LIT(0x0000000000000004)))
|
||||
{
|
||||
removeAuraState=false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(removeAuraState)
|
||||
removeState = AURA_STATE_CONFLAGRATE;
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_DRUID:
|
||||
if(m_spellProto->SpellFamilyFlags & UI64LIT(0x0000000000000400))
|
||||
|
|
|
|||
|
|
@ -404,12 +404,38 @@ void Spell::EffectSchoolDMG(uint32 effect_idx)
|
|||
// Incinerate Rank 1 & 2
|
||||
if ((m_spellInfo->SpellFamilyFlags & UI64LIT(0x00004000000000)) && m_spellInfo->SpellIconID==2128)
|
||||
{
|
||||
// Incinerate does more dmg (dmg*0.25) if the target is Immolated.
|
||||
if(unitTarget->HasAuraState(AURA_STATE_IMMOLATE))
|
||||
damage += int32(damage*0.25f);
|
||||
// Incinerate does more dmg (dmg*0.25) if the target have Immolate debuff.
|
||||
// Check aura state for speed but aura state set not only for Immolate spell
|
||||
if(unitTarget->HasAuraState(AURA_STATE_CONFLAGRATE))
|
||||
{
|
||||
Unit::AuraList const& RejorRegr = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE);
|
||||
for(Unit::AuraList::const_iterator i = RejorRegr.begin(); i != RejorRegr.end(); ++i)
|
||||
{
|
||||
// Immolate
|
||||
if((*i)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_WARLOCK &&
|
||||
((*i)->GetSpellProto()->SpellFamilyFlags & UI64LIT(0x00000000000004)))
|
||||
{
|
||||
damage += damage/4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Conflagrate - consumes immolate or Shadowflame
|
||||
if (m_spellInfo->TargetAuraState == AURA_STATE_IMMOLATE)
|
||||
// Shadowflame
|
||||
else if (m_spellInfo->SpellFamilyFlags & UI64LIT(0x0001000000000000))
|
||||
{
|
||||
// Apply DOT part
|
||||
switch(m_spellInfo->Id)
|
||||
{
|
||||
case 47897: m_caster->CastSpell(unitTarget, 47960, true); break;
|
||||
case 61290: m_caster->CastSpell(unitTarget, 61291, true); break;
|
||||
default:
|
||||
sLog.outError("Spell::EffectDummy: Unhandeled Shadowflame spell rank %u",m_spellInfo->Id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Conflagrate - consumes Immolate or Shadowflame
|
||||
else if (m_spellInfo->TargetAuraState == AURA_STATE_CONFLAGRATE)
|
||||
{
|
||||
// for caster applied auras only
|
||||
Unit::AuraList const &mPeriodic = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE);
|
||||
|
|
@ -418,7 +444,7 @@ void Spell::EffectSchoolDMG(uint32 effect_idx)
|
|||
if ((*i)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_WARLOCK &&
|
||||
(*i)->GetCasterGUID()==m_caster->GetGUID() &&
|
||||
// Immolate
|
||||
((*i)->GetSpellProto()->SpellFamilyFlags & 0x0000000000000004 ||
|
||||
((*i)->GetSpellProto()->SpellFamilyFlags & UI64LIT(0x0000000000000004) ||
|
||||
// Shadowflame
|
||||
(*i)->GetSpellProto()->SpellFamilyFlags2 & 0x00000002))
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue