Jump to content

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


Guest KAPATEJIb

Recommended Posts

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 2 weeks later...

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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. :)

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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;

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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