Jump to content

[9155][patch/dev] Paladin's Judgements & Seals


Recommended Posts

Posted

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

On current state it fixes:

*Prevent proc from all kind of spells for Seal of Vengeance and Seal of Corruption

*Removed wrong ppm proc chance and prevented to proc from all kind of spells for Seal of Command

*Deleted outdated and unneeded data from DB table spell_bonus_data

*Fixed damage for Judgement of Command

*Fixed damage for Judgement of Righteousness

*Remove code for not used now spells Judgement of Seal of Blood/Martyr

*Fixed a bug with replacing buff from Seal of Vengeance/Corruption by debuff from enemy's judgement

*Added support for Holy Vengeance and Blood Corruption (Seal of Vengeance and Seal of Corruption dot)

*Fixed number of targets for Seal of Command proc when using Divine Storm

*Fixed heal amount for Seal of Light

For which repository revision was the patch created?

9071+

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

I'm too lazy to find it all, because is too many threads

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

Me

Core part: http://paste2.org/p/578487

DB part: http://paste2.org/p/536277

Posted
Why not use spell_bonus_data?

Because in most cases is doesn't work for melee based spells, also we need to check only HOLY school spell damage, in db we can check only normal spell damage.

Posted
we need to check only HOLY school spell damage, in db we can check only normal spell damage.

Are you serious? The fact that db data are used only for "normal" spell damage and not spell specific (judgement is holy isn't it?) would render the table useless for most spells :o

Posted

I've already tried a couple of different ways (adding it to DB, adding to the core+db, adding it to core), only hardcoding gives me a right result.

I also upload a new version of the patch (v4). Added missing part of code and fixed a bug with spell crits caused by my patch (:

Posted
Are you serious? The fact that db data are used only for "normal" spell damage and not spell specific (judgement is holy isn't it?) would render the table useless for most spells :o

KAPATEJIb the truth:)

Posted
Because in most cases is doesn't work for melee based spells, also we need to check only HOLY school spell damage, in db we can check only normal spell damage.

the problem here is downranking of spells, judgements have spelllvl 20 or something like that, and gets less spell bonus. The dbc is wrong here or there might me some attribte flag to ignore downranking

  • 2 weeks later...
Posted

2) do not allow to attack other 2 targets for Seal of Command when using Divine Storm

first of all, thank you for your incredible works!

ok, then, i find a way to solve this problem you addressed.

here goes my patch:

--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -2573,6 +2573,14 @@ void Spell::cast(bool skipCheck)

    FillTargetMap();

+    // let not attack nearby enemies when Seal of Command is triggered by Divine Storm
+    if (m_spellInfo->Id == 20424) {
+        if (m_caster->FindCurrentSpellBySpellId(53385)) {
+            for (int numTargets = m_UniqueTargetInfo.size(); numTargets > 1; numTargets--)
+                m_UniqueTargetInfo.pop_back();
+        }
+    }
+
    if(m_spellState == SPELL_STATE_FINISHED)                // stop cast if spell marked as finish somewhere in FillTargetMap
    {
        SetExecutedCurrently(false);

Posted

To fix the SoV Dot tick ... The damage is required to be scripted

I did this in Aura::HandlePeriodicDamage and it works

case SPELLFAMILY_PALADIN:
               {
                   // Holy Vengeance / Blood Corruption[(0.013 * SPH + 0.025 * AP) * 5] 
                   if( m_spellProto->Id == 31803 || m_spellProto->Id == 53742)
                       m_modifier.m_amount += int32(((0.013 * (((Player*)caster)->GetBaseSpellPowerBonus()) + 0.025 * (caster->GetTotalAttackPowerValue(BASE_ATTACK))) * 5));
               }

Posted
first of all, thank you for your incredible works!

ok, then, i find a way to solve this problem you addressed.

here goes my patch:

--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -2573,6 +2573,14 @@ void Spell::cast(bool skipCheck)

    FillTargetMap();

+    // let not attack nearby enemies when Seal of Command is triggered by Divine Storm
+    if (m_spellInfo->Id == 20424) {
+        if (m_caster->FindCurrentSpellBySpellId(53385)) {
+            for (int numTargets = m_UniqueTargetInfo.size(); numTargets > 1; numTargets--)
+                m_UniqueTargetInfo.pop_back();
+        }
+    }
+
    if(m_spellState == SPELL_STATE_FINISHED)                // stop cast if spell marked as finish somewhere in FillTargetMap
    {
        SetExecutedCurrently(false);

This doesn't works for me. Still bugged

In combat log when i click on once at Divine Storm spell (3 targets):

Divine Storm for 111 physical

Seal of Command for 92 holy (crit)

Divine Storm for 111 physical

Seal of Command for 46 holy

Divine Storm for 112 physical

Seal of Command for 47 holy

Should be:

Divine Storm for 111 physical

Seal of Command for 92 holy (crit)

Divine Storm for 111 physical

Divine Storm for 112 physical

Patch updated. Added support for Holy Vengeance and Blood Corruption (Seal of Vengeance and Seal of Corruption DOT debuffs)

Posted
This doesn't works for me. Still bugged

In combat log when i click on once at Divine Storm spell (3 targets):

Divine Storm for 111 physical

Seal of Command for 92 holy (crit)

Divine Storm for 111 physical

Seal of Command for 46 holy

Divine Storm for 112 physical

Seal of Command for 47 holy

Should be:

Divine Storm for 111 physical

Seal of Command for 92 holy (crit)

Divine Storm for 111 physical

Divine Storm for 112 physical

the upper one of the two logs is correct, i tested and verified on official servers (3.2.2a).

Divine Storm should proc seal exactly once on EVERY target it hits.

so there should be no problem with my patch. :)

Posted
the upper one of the two logs is correct, i tested and verified on official servers (3.2.2a).

Divine Storm should proc seal exactly once on EVERY target it hits.

so there should be no problem with my patch. :)

Ok, updated now

Posted

Thanks for a nice patch.

Just a little reminder to Holy Vengeance/ Blood Corruption. It seems to me that you left out a

caster->SpellBaseDamageBonusForVictim( GetSpellSchoolMask( m_spellProto ), GetTarget() )

in holy calculation.

And maybe to make it complete you can add Seal of Light functionality?

Here is my solution:

SpellEffect.cpp

void Spell::EffectHeal( uint32 /*i*/ )
{
   if (unitTarget && unitTarget->isAlive() && damage >= 0)
   {
       // Try to get original caster
       Unit *caster = m_originalCasterGUID ? m_originalCaster : m_caster;

       // Skip if m_originalCaster not available
       if (!caster)
           return;

       int32 addhealth = damage;

+        // Seal of Light proc
+        if ( m_spellInfo->Id == 20167 )
+        {
+            float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK);
+            int32 holy = caster->SpellBaseHealingBonus(GetSpellSchoolMask(m_spellInfo)) +
+                         caster->SpellBaseHealingBonusForVictim(GetSpellSchoolMask(m_spellInfo), unitTarget);
+            addhealth += int32( ap * 0.15 ) + int32(holy  * 15 / 100 );  
+        }

       // Vessel of the Naaru (Vial of the Sunwell trinket)
-        if (m_spellInfo->Id == 45064)
+        else if (m_spellInfo->Id == 45064)

and delete entry from spell_bonus_data for 20167 (don't know why DB koeficients are ignored)

Posted

And I forgot to mention that DoT from SoV / SoCorr should be triggered only from autoattack and Hammer of the Righteous.

Unit.cpp, HandleDummyAuraProc()

               // Seal of Vengeance (damage calc on apply aura)
               case 31801:
               {
                   if(effIndex != 0)                       // effect 1,2 used by seal unleashing code
                       return false;

+                    if( ( procFlag & PROC_FLAG_SUCCESSFUL_MELEE_HIT ) || ( procSpell && procSpell->Id == 53595 ) )
                       triggered_spell_id = 31803;

               // Seal of Corruption (damage calc on apply aura)
               case 53736:
               {
                   if(effIndex != 0)                       // effect 1,2 used by seal unleashing code
                       return false;

+                    if( ( procFlag & PROC_FLAG_SUCCESSFUL_MELEE_HIT ) || ( procSpell && procSpell->Id == 53595 ) )
                       triggered_spell_id = 53742;

Posted

Judgement of Light & Judgement of Wisdom have 4 sec cooldown on proc(from wowhead) and chances are around 40-50%...can any1 confirm cause currently there is 100% proc on any hit..

Posted

Updated for 8882. Also added seal of light fix

And I forgot to mention that DoT from SoV / SoCorr should be triggered only from autoattack and Hammer of the Righteous. And Judgement of Light heal proc update. :)

Unit.cpp, HandleDummyAuraProc()

               // Seal of Vengeance (damage calc on apply aura)
               case 31801:
               {
                   if(effIndex != 0)                       // effect 1,2 used by seal unleashing code
                       return false;

+                    if( ( procFlag & PROC_FLAG_SUCCESSFUL_MELEE_HIT ) || ( procSpell && procSpell->Id == 53595 ) )
                       triggered_spell_id = 31803;

               // Seal of Corruption (damage calc on apply aura)
               case 53736:
               {
                   if(effIndex != 0)                       // effect 1,2 used by seal unleashing code
                       return false;

+                    if( ( procFlag & PROC_FLAG_SUCCESSFUL_MELEE_HIT ) || ( procSpell && procSpell->Id == 53595 ) )
                       triggered_spell_id = 53742;

           switch(dummySpell->Id)
           {
               // Judgement of Light
               case 20185:
               {
                   // Get judgement caster
                   Unit *caster = triggeredByAura->GetCaster();
                   if (!caster)
                       return false;
/* removed old calculation */                   
                   basepoints0 = int32( pVictim->GetMaxHealth() * 2 / 100 );
                   pVictim->CastCustomSpell(pVictim, 20267, &basepoints0, NULL, NULL, true, NULL, triggeredByAura);
                   return true;
               }

maybe this should be handled by spell_proc_event table?

×
×
  • 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