Талант у дк, должен снимать по одному стаку после попадания по противнику в ближнем бою, у нас не снимались стаки вообще.
Код:
diff --git a/src/game/UnitAuraProcHandler.cpp b/src/game/UnitAuraProcHandler.cpp
index 342508e..bfc1171 100644
--- a/src/game/UnitAuraProcHandler.cpp
+++ b/src/game/UnitAuraProcHandler.cpp
@@ -3026,31 +3026,31 @@ SpellAuraProcResult Unit::HandleProcTriggerSpellAuraProc(Unit *pVictim, uint32 d
}
break;
case SPELLFAMILY_WARRIOR:
+ {
// Deep Wounds (replace triggered spells to directly apply DoT), dot spell have familyflags
- if (auraSpellInfo->SpellFamilyFlags == UI64LIT(0x0) && auraSpellInfo->SpellIconID == 243)
+ if (auraSpellInfo->IsFitToFamilyMask(UI64LIT(0x0000000000000000)) && auraSpellInfo->SpellIconID == 243)
{
- float weaponDamage;
- // DW should benefit of attack power, damage percent mods etc.
- // TODO: check if using offhand damage is correct and if it should be divided by 2
+ float weaponDamage = 0.0f;
+ // Deep Wounds should benefit of attack power, damage percent mods etc.
if (haveOffhandWeapon() && getAttackTimer(BASE_ATTACK) > getAttackTimer(OFF_ATTACK))
- weaponDamage = (GetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE) + GetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE))/2;
+ weaponDamage = (GetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE) + GetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE)) / 2;
else
- weaponDamage = (GetFloatValue(UNIT_FIELD_MINDAMAGE) + GetFloatValue(UNIT_FIELD_MAXDAMAGE))/2;
+ weaponDamage = (GetFloatValue(UNIT_FIELD_MINDAMAGE) + GetFloatValue(UNIT_FIELD_MAXDAMAGE)) / 2;
switch (auraSpellInfo->Id)
{
- case 12834: basepoints[0] = int32(weaponDamage * 16 / 100); break;
- case 12849: basepoints[0] = int32(weaponDamage * 32 / 100); break;
- case 12867: basepoints[0] = int32(weaponDamage * 48 / 100); break;
- // Impossible case
+ case 12834: basepoints[EFFECT_INDEX_0] = static_cast<int32>(weaponDamage * 16 / 100); break;
+ case 12849: basepoints[EFFECT_INDEX_0] = static_cast<int32>(weaponDamage * 32 / 100); break;
+ case 12867: basepoints[EFFECT_INDEX_0] = static_cast<int32>(weaponDamage * 48 / 100); break;
default:
- sLog.outError("Unit::HandleProcTriggerSpellAuraProc: DW unknown spell rank %u",auraSpellInfo->Id);
+ {
+ sLog.outError("Unit::HandleProcTriggerSpellAuraProc: Deep Wounds unknown spell rank %u", auraSpellInfo->Id);
return SPELL_AURA_PROC_FAILED;
+ }
}
// 1 tick/sec * 6 sec = 6 ticks
- basepoints[0] /= 6;
-
+ basepoints[EFFECT_INDEX_0] /= 6;
trigger_spell_id = 12721;
break;
}
@@ -3061,8 +3061,17 @@ SpellAuraProcResult Unit::HandleProcTriggerSpellAuraProc(Unit *pVictim, uint32 d
return SPELL_AURA_PROC_FAILED;
}
else if (auraSpellInfo->Id == 50421) // Scent of Blood
+ {
+ if (!(procFlags & PROC_FLAG_SUCCESSFUL_MELEE_HIT))
+ return SPELL_AURA_PROC_FAILED;
+
+ RemoveAuraHolderFromStack(50421);
trigger_spell_id = 50422;
+ target = this;
+ break;
+ }
break;
+ }
case SPELLFAMILY_WARLOCK:
{
// Drain Soul
@@ -3070,7 +3079,7 @@ SpellAuraProcResult Unit::HandleProcTriggerSpellAuraProc(Unit *pVictim, uint32 d
{
// search for "Improved Drain Soul" dummy aura
Unit::AuraList const& mDummyAura = GetAurasByType(SPELL_AURA_DUMMY);
- for(Unit::AuraList::const_iterator i = mDummyAura.begin(); i != mDummyAura.end(); ++i)
+ for (Unit::AuraList::const_iterator i = mDummyAura.begin(); i != mDummyAura.end(); ++i)
{
if ((*i)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_WARLOCK && (*i)->GetSpellProto()->SpellIconID == 113)
{
@@ -3096,16 +3105,16 @@ SpellAuraProcResult Unit::HandleProcTriggerSpellAuraProc(Unit *pVictim, uint32 d
{
if (!procSpell)
return SPELL_AURA_PROC_FAILED;
- switch(GetFirstSchoolInMask(GetSpellSchoolMask(procSpell)))
+
+ switch (GetFirstSchoolInMask(GetSpellSchoolMask(procSpell)))
{
- case SPELL_SCHOOL_NORMAL:
- return SPELL_AURA_PROC_FAILED; // ignore
case SPELL_SCHOOL_HOLY: trigger_spell_id = 54370; break;
case SPELL_SCHOOL_FIRE: trigger_spell_id = 54371; break;
case SPELL_SCHOOL_NATURE: trigger_spell_id = 54375; break;
case SPELL_SCHOOL_FROST: trigger_spell_id = 54372; break;
case SPELL_SCHOOL_SHADOW: trigger_spell_id = 54374; break;
case SPELL_SCHOOL_ARCANE: trigger_spell_id = 54373; break;
+ case SPELL_SCHOOL_NORMAL:
default:
return SPELL_AURA_PROC_FAILED;
}