*Use amount check instead of positivity check for aura effects.
*Fix Overkill and Master of subtlety. --HG-- branch : trunk
This commit is contained in:
@@ -960,7 +960,7 @@ void Aura::SendAuraUpdate()
|
|||||||
data << uint32(GetId());
|
data << uint32(GetId());
|
||||||
data << uint8(m_auraFlags);
|
data << uint8(m_auraFlags);
|
||||||
data << uint8(m_auraLevel);
|
data << uint8(m_auraLevel);
|
||||||
data << uint8(m_stackAmount > 1 ? (m_procCharges > 1 ? m_stackAmount * m_procCharges : m_stackAmount) : m_procCharges);
|
data << uint8(m_stackAmount > 1 ? m_stackAmount : m_procCharges);
|
||||||
|
|
||||||
if(!(m_auraFlags & AFLAG_CASTER))
|
if(!(m_auraFlags & AFLAG_CASTER))
|
||||||
{
|
{
|
||||||
@@ -4804,7 +4804,7 @@ void AuraEffect::HandleAuraModResistance(bool apply, bool Real, bool /*changeAmo
|
|||||||
{
|
{
|
||||||
m_target->HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + x), TOTAL_VALUE, float(m_amount), apply);
|
m_target->HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + x), TOTAL_VALUE, float(m_amount), apply);
|
||||||
if(m_target->GetTypeId() == TYPEID_PLAYER || ((Creature*)m_target)->isPet())
|
if(m_target->GetTypeId() == TYPEID_PLAYER || ((Creature*)m_target)->isPet())
|
||||||
m_target->ApplyResistanceBuffModsMod(SpellSchools(x),GetParentAura()->IsPositive(),m_amount, apply);
|
m_target->ApplyResistanceBuffModsMod(SpellSchools(x),m_amount > 0,m_amount, apply);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5441,7 +5441,7 @@ void AuraEffect::HandleModDamageDone(bool apply, bool Real, bool changeAmount)
|
|||||||
|
|
||||||
if(m_target->GetTypeId() == TYPEID_PLAYER)
|
if(m_target->GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
if(GetParentAura()->IsPositive())
|
if(m_amount > 0)
|
||||||
m_target->ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS,m_amount,apply);
|
m_target->ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS,m_amount,apply);
|
||||||
else
|
else
|
||||||
m_target->ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG,m_amount,apply);
|
m_target->ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG,m_amount,apply);
|
||||||
@@ -5465,7 +5465,7 @@ void AuraEffect::HandleModDamageDone(bool apply, bool Real, bool changeAmount)
|
|||||||
// This information for client side use only
|
// This information for client side use only
|
||||||
if(m_target->GetTypeId() == TYPEID_PLAYER)
|
if(m_target->GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
if(GetParentAura()->IsPositive())
|
if(m_amount > 0)
|
||||||
{
|
{
|
||||||
for(int i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; i++)
|
for(int i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; i++)
|
||||||
{
|
{
|
||||||
@@ -5488,7 +5488,7 @@ void AuraEffect::HandleModDamageDone(bool apply, bool Real, bool changeAmount)
|
|||||||
|
|
||||||
void AuraEffect::HandleModDamagePercentDone(bool apply, bool Real, bool changeAmount)
|
void AuraEffect::HandleModDamagePercentDone(bool apply, bool Real, bool changeAmount)
|
||||||
{
|
{
|
||||||
sLog.outDebug("AURA MOD DAMAGE type:%u negative:%u", GetMiscValue(), GetParentAura()->IsPositive() ? 0 : 1);
|
sLog.outDebug("AURA MOD DAMAGE type:%u negative:%u", GetMiscValue(), m_amount > 0);
|
||||||
|
|
||||||
// apply item specific bonuses for already equipped weapon
|
// apply item specific bonuses for already equipped weapon
|
||||||
if((Real || changeAmount) && m_target->GetTypeId()==TYPEID_PLAYER)
|
if((Real || changeAmount) && m_target->GetTypeId()==TYPEID_PLAYER)
|
||||||
|
|||||||
@@ -597,6 +597,13 @@ bool IsPositiveEffect(uint32 spellId, uint32 effIndex, bool deep)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Special case: effects which determine positivity of whole spell
|
||||||
|
for (uint8 i = 0;i<MAX_SPELL_EFFECTS;++i)
|
||||||
|
{
|
||||||
|
if (spellproto->EffectApplyAuraName[i] == SPELL_AURA_MOD_STEALTH)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
switch(spellproto->Effect[effIndex])
|
switch(spellproto->Effect[effIndex])
|
||||||
{
|
{
|
||||||
// always positive effects (check before target checks that provided non-positive result in some case for positive effects)
|
// always positive effects (check before target checks that provided non-positive result in some case for positive effects)
|
||||||
@@ -1349,9 +1356,6 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellPr
|
|||||||
// Exist req for PROC_EX_EX_TRIGGER_ALWAYS
|
// Exist req for PROC_EX_EX_TRIGGER_ALWAYS
|
||||||
if ((procExtra & AURA_SPELL_PROC_EX_MASK) && (procEvent_procEx & PROC_EX_EX_TRIGGER_ALWAYS))
|
if ((procExtra & AURA_SPELL_PROC_EX_MASK) && (procEvent_procEx & PROC_EX_EX_TRIGGER_ALWAYS))
|
||||||
return true;
|
return true;
|
||||||
// Passive spells can`t trigger if need hit
|
|
||||||
if ((procEvent_procEx & PROC_EX_NORMAL_HIT))
|
|
||||||
return false;
|
|
||||||
// Check Extra Requirement like (hit/crit/miss/resist/parry/dodge/block/immune/reflect/absorb and other)
|
// Check Extra Requirement like (hit/crit/miss/resist/parry/dodge/block/immune/reflect/absorb and other)
|
||||||
if (procEvent_procEx & procExtra)
|
if (procEvent_procEx & procExtra)
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
+11
-13
@@ -4915,6 +4915,17 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
// Overkill
|
||||||
|
case 58426:
|
||||||
|
{
|
||||||
|
if (procEx & AURA_REMOVE_PROC_EX_MASK)
|
||||||
|
triggered_spell_id = 58428;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
triggered_spell_id = 58427;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
// Eye for an Eye
|
// Eye for an Eye
|
||||||
case 9799:
|
case 9799:
|
||||||
case 25988:
|
case 25988:
|
||||||
@@ -5033,18 +5044,6 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
|
|||||||
triggered_spell_id = 34650;
|
triggered_spell_id = 34650;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Overkill
|
|
||||||
case 58426:
|
|
||||||
{
|
|
||||||
if (procEx & AURA_REMOVE_PROC_EX_MASK)
|
|
||||||
triggered_spell_id = 58428;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
basepoints0 = -triggerAmount;
|
|
||||||
triggered_spell_id = 58427;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// Mark of Malice
|
// Mark of Malice
|
||||||
case 33493:
|
case 33493:
|
||||||
{
|
{
|
||||||
@@ -13486,7 +13485,6 @@ bool Unit::IsTriggeredAtSpellProcEvent(Unit *pVictim, Aura * aura, SpellEntry co
|
|||||||
{
|
{
|
||||||
modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_CHANCE_OF_SUCCESS,chance);
|
modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_CHANCE_OF_SUCCESS,chance);
|
||||||
}
|
}
|
||||||
|
|
||||||
return roll_chance_f(chance);
|
return roll_chance_f(chance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user