*Allow hots to proc
--HG-- branch : trunk
This commit is contained in:
+15
-12
@@ -5788,12 +5788,13 @@ void AuraEffect::PeriodicTick()
|
|||||||
SpellEntry const* spellProto = GetSpellProto();
|
SpellEntry const* spellProto = GetSpellProto();
|
||||||
|
|
||||||
// Set trigger flag
|
// Set trigger flag
|
||||||
uint32 procAttacker = PROC_FLAG_ON_DO_PERIODIC;// | PROC_FLAG_SUCCESSFUL_HARMFUL_SPELL_HIT;
|
uint32 procAttacker = PROC_FLAG_ON_DO_PERIODIC;
|
||||||
uint32 procVictim = PROC_FLAG_ON_TAKE_PERIODIC;// | PROC_FLAG_TAKEN_HARMFUL_SPELL_HIT;
|
uint32 procVictim = PROC_FLAG_ON_TAKE_PERIODIC;
|
||||||
|
uint32 procEx = PROC_EX_INTERNAL_DOT | PROC_EX_NORMAL_HIT;
|
||||||
pdamage = (pdamage <= absorb+resist) ? 0 : (pdamage-absorb-resist);
|
pdamage = (pdamage <= absorb+resist) ? 0 : (pdamage-absorb-resist);
|
||||||
if (pdamage)
|
if (pdamage)
|
||||||
procVictim|=PROC_FLAG_TAKEN_ANY_DAMAGE;
|
procVictim|=PROC_FLAG_TAKEN_ANY_DAMAGE;
|
||||||
pCaster->ProcDamageAndSpell(target, procAttacker, procVictim, PROC_EX_NORMAL_HIT, pdamage, BASE_ATTACK, spellProto);
|
pCaster->ProcDamageAndSpell(target, procAttacker, procVictim, procEx, pdamage, BASE_ATTACK, spellProto);
|
||||||
|
|
||||||
pCaster->DealDamage(target, pdamage, &cleanDamage, DOT, GetSpellSchoolMask(spellProto), spellProto, true);
|
pCaster->DealDamage(target, pdamage, &cleanDamage, DOT, GetSpellSchoolMask(spellProto), spellProto, true);
|
||||||
break;
|
break;
|
||||||
@@ -5853,12 +5854,13 @@ void AuraEffect::PeriodicTick()
|
|||||||
int32 stackAmount = GetParentAura()->GetStackAmount();
|
int32 stackAmount = GetParentAura()->GetStackAmount();
|
||||||
|
|
||||||
// Set trigger flag
|
// Set trigger flag
|
||||||
uint32 procAttacker = PROC_FLAG_ON_DO_PERIODIC;// | PROC_FLAG_SUCCESSFUL_HARMFUL_SPELL_HIT;
|
uint32 procAttacker = PROC_FLAG_ON_DO_PERIODIC;
|
||||||
uint32 procVictim = PROC_FLAG_ON_TAKE_PERIODIC;// | PROC_FLAG_TAKEN_HARMFUL_SPELL_HIT;
|
uint32 procVictim = PROC_FLAG_ON_TAKE_PERIODIC;
|
||||||
|
uint32 procEx = PROC_EX_INTERNAL_DOT | PROC_EX_NORMAL_HIT;
|
||||||
pdamage = (pdamage <= absorb+resist) ? 0 : (pdamage-absorb-resist);
|
pdamage = (pdamage <= absorb+resist) ? 0 : (pdamage-absorb-resist);
|
||||||
if (pdamage)
|
if (pdamage)
|
||||||
procVictim|=PROC_FLAG_TAKEN_ANY_DAMAGE;
|
procVictim|=PROC_FLAG_TAKEN_ANY_DAMAGE;
|
||||||
pCaster->ProcDamageAndSpell(target, procAttacker, procVictim, PROC_EX_NORMAL_HIT, pdamage, BASE_ATTACK, spellProto);
|
pCaster->ProcDamageAndSpell(target, procAttacker, procVictim, procEx, pdamage, BASE_ATTACK, spellProto);
|
||||||
int32 new_damage = pCaster->DealDamage(target, pdamage, &cleanDamage, DOT, GetSpellSchoolMask(spellProto), spellProto, false);
|
int32 new_damage = pCaster->DealDamage(target, pdamage, &cleanDamage, DOT, GetSpellSchoolMask(spellProto), spellProto, false);
|
||||||
|
|
||||||
if (!target->isAlive() && pCaster->IsNonMeleeSpellCasted(false))
|
if (!target->isAlive() && pCaster->IsNonMeleeSpellCasted(false))
|
||||||
@@ -5964,11 +5966,12 @@ void AuraEffect::PeriodicTick()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*uint32 procAttacker = PROC_FLAG_ON_DO_PERIODIC;// | PROC_FLAG_SUCCESSFUL_HEAL;
|
uint32 procAttacker = PROC_FLAG_ON_DO_PERIODIC;
|
||||||
uint32 procVictim = PROC_FLAG_ON_TAKE_PERIODIC; //| PROC_FLAG_TAKEN_HEAL;
|
uint32 procVictim = PROC_FLAG_ON_TAKE_PERIODIC;
|
||||||
|
uint32 procEx = PROC_EX_INTERNAL_HOT | PROC_EX_NORMAL_HIT;
|
||||||
// ignore item heals
|
// ignore item heals
|
||||||
if(procSpell && !haveCastItem)
|
if(procSpell && !haveCastItem)
|
||||||
pCaster->ProcDamageAndSpell(target, procAttacker, procVictim, PROC_EX_NORMAL_HIT, pdamage, BASE_ATTACK, spellProto);*/
|
pCaster->ProcDamageAndSpell(target, procAttacker, procVictim, procEx, pdamage, BASE_ATTACK, spellProto);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SPELL_AURA_PERIODIC_MANA_LEECH:
|
case SPELL_AURA_PERIODIC_MANA_LEECH:
|
||||||
@@ -6182,9 +6185,9 @@ void AuraEffect::PeriodicTick()
|
|||||||
pCaster->SendSpellNonMeleeDamageLog(&damageInfo);
|
pCaster->SendSpellNonMeleeDamageLog(&damageInfo);
|
||||||
|
|
||||||
// Set trigger flag
|
// Set trigger flag
|
||||||
uint32 procAttacker = PROC_FLAG_ON_DO_PERIODIC;// | PROC_FLAG_SUCCESSFUL_HARMFUL_SPELL_HIT;
|
uint32 procAttacker = PROC_FLAG_ON_DO_PERIODIC;
|
||||||
uint32 procVictim = PROC_FLAG_ON_TAKE_PERIODIC;// | PROC_FLAG_TAKEN_HARMFUL_SPELL_HIT;
|
uint32 procVictim = PROC_FLAG_ON_TAKE_PERIODIC;
|
||||||
uint32 procEx = createProcExtendMask(&damageInfo, SPELL_MISS_NONE);
|
uint32 procEx = createProcExtendMask(&damageInfo, SPELL_MISS_NONE) | PROC_EX_INTERNAL_DOT;
|
||||||
if (damageInfo.damage)
|
if (damageInfo.damage)
|
||||||
procVictim|=PROC_FLAG_TAKEN_ANY_DAMAGE;
|
procVictim|=PROC_FLAG_TAKEN_ANY_DAMAGE;
|
||||||
|
|
||||||
|
|||||||
@@ -1234,6 +1234,41 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellPr
|
|||||||
if((procFlags & EventProcFlag) == 0)
|
if((procFlags & EventProcFlag) == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
/* Check Periodic Auras
|
||||||
|
|
||||||
|
* Both hots and dots can trigger if spell has no PROC_FLAG_SUCCESSFUL_POSITIVE_SPELL
|
||||||
|
nor PROC_FLAG_SUCCESSFUL_NEGATIVE_SPELL_HIT
|
||||||
|
|
||||||
|
*Only Hots can trigger if spell has PROC_FLAG_SUCCESSFUL_POSITIVE_SPELL
|
||||||
|
|
||||||
|
*Only dots can trigger if spell has both positivity flags or PROC_FLAG_SUCCESSFUL_NEGATIVE_SPELL_HIT
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (procFlags & PROC_FLAG_ON_DO_PERIODIC)
|
||||||
|
{
|
||||||
|
if (EventProcFlag & PROC_FLAG_SUCCESSFUL_NEGATIVE_SPELL_HIT)
|
||||||
|
{
|
||||||
|
if (!(procExtra & PROC_EX_INTERNAL_DOT))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (EventProcFlag & PROC_FLAG_SUCCESSFUL_POSITIVE_SPELL
|
||||||
|
&& !(procExtra & PROC_EX_INTERNAL_HOT))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (procFlags & PROC_FLAG_ON_TAKE_PERIODIC)
|
||||||
|
{
|
||||||
|
if (EventProcFlag & PROC_FLAG_TAKEN_NEGATIVE_SPELL_HIT)
|
||||||
|
{
|
||||||
|
if (!(procExtra & PROC_EX_INTERNAL_DOT))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (EventProcFlag & PROC_FLAG_TAKEN_POSITIVE_SPELL
|
||||||
|
&& !(procExtra & PROC_EX_INTERNAL_HOT))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Always trigger for this
|
// Always trigger for this
|
||||||
if (EventProcFlag & (PROC_FLAG_KILLED | PROC_FLAG_KILL | PROC_FLAG_ON_TRAP_ACTIVATION))
|
if (EventProcFlag & (PROC_FLAG_KILLED | PROC_FLAG_KILL | PROC_FLAG_ON_TRAP_ACTIVATION))
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user