Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Принятые патчи (http://mangos.ytdb.ru/forumdisplay.php?f=5)
-   -   [patch] Fix talent Scent of Blood (http://mangos.ytdb.ru/showthread.php?t=5559)

Den 01.07.2012 22:05

[patch] Fix talent Scent of Blood
 
Талант у дк, должен снимать по одному стаку после попадания по противнику в ближнем бою, у нас не снимались стаки вообще.

Код:

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;
                }


Vladimir 01.07.2012 23:03

Код:

if (auraSpellInfo->IsFitToFamilyMask(UI64LIT(0x0000000000000000))
Учитывая что сравнивается неравенство 0 маски это не может работать в принципе.

Den 01.07.2012 23:10

А ведь из SPELLFAMILY_WARRIOR, только Deep Wounds имеет SpellIconID == 264
Может тогда, это сравнение нулевой маски вообще не нужно? А проверять только SpellIconID

Vladimir 01.07.2012 23:11

Ну может быть - но лучше перепроверить по dbc - или она была нужна ранее с другим dbc, или всетаки есть какой-то спелл неудобный... лишние проверки странно если добавлялись

schmoozerd 20.05.2013 18:15

In [12506]. Thank you :)


Текущее время: 08:32. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS