Jump to content

[Fix][9057] Ignite, Righteous Vengeance, Item Set 73/824 (4) bonus' Stacking Behavior


Auntie Mangos

Recommended Posts

What bug does the patch fix? What features does the patch add?

Implements a more generic way of "carrying over" periodic damage for Deep Wounds, Ignite, Righteous Vengeance, Ele. Shaman's T8 (4) Proc, and Piercing Shots (which currently doesn't proc). Basically, when one of these auras is reapplied, the remaining damage on the aura should carry over to the total damage done by the new aura.

Also implements a flag that these spells use and others to prevent them from having damage percent mods applied on them multiple times (requires use of the currently commented out field, AttributesEx6, however).

For which repository revision was the patch created?

8312

Is there a thread in the bug report section or at lighthouse? If yes, please add a link to the thread.

http://getmangos.eu/community/viewtopic.php?id=2850

http://getmangos.eu/community/viewtopic.php?id=8702 (alt. patch for ignite)

http://getmangos.eu/community/viewtopic.php?id=9176 (alt. patch for ignite)

Who has been writing this patch? Please include either forum user names or email addresses.

Myself

Patch

More Notes:

The five DoTs that use this mechanic shared two flags, which I labelled as SPELL_ATTR_EX4_STACK_DOT_MODIFIER and SPELL_ATTR_EX6_NO_DMG_PERCENT_MODS. The SPELL_ATTR_EX4_STACK_DOT_MODIFIER was introduced first, so I deduced that that was probably the "carrying over" damage flag.

The other flag was introduced in 3.1, and you can see from the patch notes that that was when those spells no longer benefited from damage percent mods.

This flag also seems to work for creatures. Take for example, this boss, who has a hard mode buff that increases damage pct:

Phase 3 is the actual hard mode encounter. ... XT will also do 15% more melee and Tantrum damage, but Gravity Bomb and Searing Light will remain the same.

Those two spells have the flag I defined as "SPELL_ATTR_EX6_NO_DMG_PERCENT_MODS".

Also, I didn't see the point of using the dummy spell that Deep Wounds procs. I don't see any useful info in those spells, and damage needs to be custom calculated from averaging the caster's weapon damage anyway. So I moved it from EffectDummy into the "Custom triggered spells" switch of HandleProcTriggerSpell, and made it proc spell 12721 directly.

Edit: Don't count auras with negative (permanent) duration as a precaution.

Link to comment
Share on other sites

  • 39 years later...

are u sure it is correct? my deep wounds after few row crits tick for 8k... 8k every 3sec :>

Ok so the problem is like this (will describe on Deep Wounds).

1) You make critical attack on Target - he gest debuff.

2) After 4sec duration u make again critical on him - damage from DW get added

3) After few such crits and stacks u make 8k ticks or even more (some ppl hit to 30k ticks on PvE) making 10k DPS ticks in PVE

How it should work:

1) You make critical attack on Target - he gets debuff

2) After 4sec duration u make again critical on him - damage from DW get added

3) After next 2 secs THE OLD DEEP WOUNDS damage add gets removed and only new Deep Wounds damage ticks.

So generally: the dmg should be subtracted as well when the previous wounds hidden timer ends

That is one deep bug

Link to comment
Share on other sites

are u sure it is correct? my deep wounds after few row crits tick for 8k... 8k every 3sec :>

Ok so the problem is like this (will describe on Deep Wounds).

1) You make critical attack on Target - he gest debuff.

2) After 4sec duration u make again critical on him - damage from DW get added

3) After few such crits and stacks u make 8k ticks or even more (some ppl hit to 30k ticks on PvE) making 10k DPS ticks in PVE

How it should work:

1) You make critical attack on Target - he gets debuff

2) After 4sec duration u make again critical on him - damage from DW get added

3) After next 2 secs THE OLD DEEP WOUNDS damage add gets removed and only new Deep Wounds damage ticks.

So generally: the dmg should be subtracted as well when the previous wounds hidden timer ends

That is one deep bug

Confirm.

damage from 100 to 8k per tick :eek:

Link to comment
Share on other sites

Please, test this draft patch:

diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h
index bae2f36..aeb8045 100644
--- a/src/game/SpellAuras.h
+++ b/src/game/SpellAuras.h
@@ -367,6 +367,7 @@ class MANGOS_DLL_SPEC Aura
        int32 m_maxduration;                                // Max aura duration
        int32 m_duration;                                   // Current time
        int32 m_timeCla;                                    // Timer for power per sec calcultion
+        public:
        int32 m_periodicTimer;                              // Timer for periodic auras

        AuraRemoveMode m_removeMode:8;                      // Store info for know remove aura reason
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 57feb9d..8be1bec 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -3624,7 +3624,20 @@ bool Unit::AddAura(Aura *Aur)
                        int32 remainingTicks = 1 + (aur2->GetAuraDuration() / aur2->GetModifier()->periodictime);
                        int32 maxTicks = aur2->GetAuraMaxDuration() / aur2->GetModifier()->periodictime;

-                        Aur->GetModifier()->m_amount += int32(remainingTicks * aur2->GetModifier()->m_amount / maxTicks);
+                        // increase current aura damage and make it similar new aura work
+                        aur2->GetModifier()->m_amount = Aur->GetModifier()->m_amount + int32(remainingTicks * aur2->GetModifier()->m_amount / maxTicks);
+                        aur2->GetModifier()->periodictime = Aur->GetModifier()->periodictime;
+                        aur2->m_periodicTimer             = Aur->GetModifier()->periodictime;
+
+                        // hide old aura icon
+                        aur2->SetAura(true);
+                        aur2->SetAuraFlags(AFLAG_NONE);
+                        aur2->SetAuraLevel(0);
+                        aur2->SetAuraSlot(0xFF);
+
+                        // delay new aura tick until old finish
+                        Aur->m_periodicTimer = aur2->m_periodicTimer + (aur2->GetAuraDuration()/Aur->GetModifier()->periodictime+1)*Aur->GetModifier()->periodictime;
+                        break;
                    }
                    // can be only single (this check done at _each_ aura add
                    RemoveAura(i2,AURA_REMOVE_BY_STACK);

I mostly want ask is it visual and expected damage log fit expected.

If it wrk ok i will prepare more clean version without hacks ;)

Link to comment
Share on other sites

Hm all the discussions across the net about Ignite and Deep Wounds i found explained that the remaining damage get spread over the whole duration of the new DOT that replaces the existing one, just like it has been implemented in [9057]. :huh:

Or can anyone present a combat log showing different behaviour? Did it change with some 3.x patch?

Spreading over new DoT means that damage can indeed accumulate arbitrarily when you crit often enough in a row, but it's really just delayed damage, the logic behind it is not broken IMHO.

Say you can crit 10 times always before the first tick comes, you get a single DoT with the damage from all crits accumulated. But you did not get any DOT damage while building up this massive DOT.

Checking the numbers calculated look good to me too, tested with an arms warrior wielding two daggers.

However, this way i'm seeing about 50% of my total damage just from deep wounds, and i saw the same from a titan grip fury warrior just yesterday, outclassing other DPS classes by far. This makes me think something else is actually fishy here! :confused:

In the old code that got removed in [9057], i see:

// 1 tick/sec * 6 sec = 6 ticks
int32 deepWoundsDotBasePoints0 = int32(damage / 6);

In the new code added, i can't see such a division. Could it be that Deep Wounds is simply doing 6 times too high damage right now?

Link to comment
Share on other sites

So... maybe something like this?

 src/game/Unit.cpp |   10 +++++++---
1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index cf6594a..4627bf5 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -7360,6 +7360,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
            // Deep Wounds (replace triggered spells to directly apply DoT), dot spell have finilyflags
            if (auraSpellInfo->SpellFamilyFlags == UI64LIT(0x0) && auraSpellInfo->SpellIconID == 243)
            {
+                float damage;
                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
@@ -7370,14 +7371,17 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB

                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;
+                    case 12834: damage = int32(weaponDamage * 16 / 100); break;
+                    case 12849: damage = int32(weaponDamage * 32 / 100); break;
+                    case 12867: damage = int32(weaponDamage * 48 / 100); break;
                    // Impossible case
                    default:
                        return false;
                }

+                // 1 tick/sec * 6 sec = 6 ticks
+                basepoints[0] = int32(damage / 6);
+
                trigger_spell_id = 12721;
                break;
            }

EDIT: ok, i see you already fix it in 9081. Thanks

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use