@@ -1424,24 +1424,19 @@ void judgment_base_t::impact(action_state_t* s)
14241424 trigger_hammer_and_anvil ( p (), s, hammer_and_anvil, HAA_JUDGMENT );
14251425}
14261426
1427- judgment_t ::judgment_t ( paladin_t * p, util::string_view name, util::string_view options_str, double mul, bool bg )
1428- : judgment_base_t( p, name, options_str, p-> find_class_spell ( " Judgment " ) )
1427+ judgment_t ::judgment_t ( paladin_t * p, util::string_view name, util::string_view options_str, const spell_data_t * s )
1428+ : judgment_base_t( p, name, options_str, s )
14291429{
14301430 // no weapon multiplier
14311431 weapon_multiplier = 0.0 ;
14321432 may_block = may_parry = may_dodge = false ;
1433- base_multiplier *= mul;
14341433 // force effect 1 to be used for direct ratios
14351434 parse_effect_data ( data ().effectN ( 1 ) );
14361435
1437- // todo - what's the point of this?
1438- [[maybe_unused]] auto j = p->find_class_spell ( " Judgment" );
1439-
14401436 if ( p->cooldowns .judgment == nullptr )
14411437 p->cooldowns .judgment = cooldown;
14421438 else
14431439 cooldown = p->cooldowns .judgment ;
1444- background = bg;
14451440}
14461441
14471442proc_types judgment_t::proc_type () const
@@ -1476,14 +1471,11 @@ struct judgment_ret_t : public judgment_t
14761471{
14771472 int holy_power_generation;
14781473
1479- judgment_ret_t ( paladin_t * p, util::string_view name, util::string_view options_str, double mul = 1.0 ,
1480- bool bg = false )
1481- : judgment_t ( p, name, options_str ),
1474+ judgment_ret_t ( paladin_t * p, util::string_view name, util::string_view options_str, const spell_data_t * s )
1475+ : judgment_t ( p, name, options_str, s ),
14821476 holy_power_generation ( as<int >( p->find_spell ( 220637 )->effectN( 1 ).base_value() ) )
14831477 {
14841478 parse_options ( options_str );
1485- base_multiplier *= mul;
1486- background = bg;
14871479
14881480 if ( p->talents .blessed_champion ->ok () )
14891481 {
@@ -1497,6 +1489,12 @@ struct judgment_ret_t : public judgment_t
14971489
14981490 if ( p ()->spec .judgment_3 ->ok () )
14991491 p ()->resource_gain ( RESOURCE_HOLY_POWER, holy_power_generation, p ()->gains .judgment );
1492+
1493+ if ( !background && p ()->specialization () == PALADIN_RETRIBUTION && p ()->buffs .divine_resonance ->up () )
1494+ {
1495+ p ()->active .divine_resonance_ret ->execute_on_target ( execute_state->target );
1496+ p ()->buffs .divine_resonance ->decrement ();
1497+ }
15001498 }
15011499
15021500 void impact ( action_state_t * s ) override
@@ -1516,21 +1514,65 @@ struct judgment_ret_t : public judgment_t
15161514 }
15171515 }
15181516};
1519-
1520- struct judgment_divine_exaction_t :public judgment_ret_t
1517+ struct divine_toll_judgment_ret_t :judgment_ret_t
1518+ {
1519+ divine_toll_judgment_ret_t ( paladin_t * p ) : judgment_ret_t ( p, " divine_toll_judgment" , " " , p->spells.judgment_ret_dt )
1520+ {
1521+ background = true ;
1522+ aoe = 1 ; // Divine Toll's Judgments don't cleave further
1523+ }
1524+ };
1525+ struct divine_resonance_judgment_t :judgment_ret_t
1526+ {
1527+ divine_resonance_judgment_t (paladin_t * p) : judgment_ret_t (p, " divine_resonance_judgment" , " " , p->spells.judgment_ret)
1528+ {
1529+ background = true ;
1530+ base_multiplier *= p->buffs .divine_resonance ->data ().effectN ( 2 ).percent ();
1531+ }
1532+ };
1533+ struct divine_exaction_judgment_t : public judgment_ret_t
1534+ {
1535+ divine_exaction_judgment_t ( paladin_t * p ) : judgment_ret_t ( p, " judgment_de" , " " , p->spells.judgment_ret_dt )
1536+ {
1537+ background = true ;
1538+ aoe = 1 ; // DE's Hammer of Wrath's don't cleave further
1539+ base_multiplier *= p->talents .templar .divine_exaction ->effectN ( 2 ).percent ();
1540+ }
1541+ };
1542+ struct divine_toll_hammer_of_wrath_ret_t : hammer_of_wrath_t
1543+ {
1544+ divine_toll_hammer_of_wrath_ret_t ( paladin_t * p )
1545+ : hammer_of_wrath_t ( p, " divine_toll_hammer_of_wrath" , " " , p->spells.hammer_of_wrath_ret_dt )
1546+ {
1547+ background = true ;
1548+ aoe = 1 ; // Divine Toll's Hammer of Wraths don't cleave further
1549+ }
1550+ };
1551+ struct divine_resonance_hammer_of_wrath_t :hammer_of_wrath_t
1552+ {
1553+ divine_resonance_hammer_of_wrath_t (paladin_t * p)
1554+ : hammer_of_wrath_t ( p, " divine_resonance_hammer_of_wrath" , " " , p->spells.hammer_of_wrath_ret )
1555+ {
1556+ background = true ;
1557+ base_multiplier *= p->buffs .divine_resonance ->data ().effectN ( 2 ).percent ();
1558+ }
1559+ };
1560+ struct divine_exaction_hammer_of_wrath_t :public hammer_of_wrath_t
15211561{
1522- judgment_divine_exaction_t (paladin_t * p) : judgment_ret_t (p, " judgment_de" , " " , p->talents.templar.divine_exaction->effectN (2 ).percent(), true)
1562+ divine_exaction_hammer_of_wrath_t (paladin_t * p)
1563+ : hammer_of_wrath_t (p, " hammer_of_wrath_de" , " " , p->spells.hammer_of_wrath_ret_dt)
15231564 {
15241565 background = true ;
1566+ aoe = 1 ; // DE's Hammer of Wrath's don't cleave further
1567+ base_multiplier *= p->talents .templar .divine_exaction ->effectN ( 2 ).percent ();
15251568 }
15261569};
15271570
1528- hammer_of_wrath_t ::hammer_of_wrath_t ( paladin_t * p, util::string_view name, util::string_view options_str, double mul, bool bg )
1529- : judgment_base_t ( p, name, options_str, p-> find_spell ( 1241413 ) ),
1571+ hammer_of_wrath_t ::hammer_of_wrath_t ( paladin_t * p, util::string_view name, util::string_view options_str, const spell_data_t * s )
1572+ : judgment_base_t( p, name, options_str, s ),
15301573 echo( nullptr )
15311574{
15321575 parse_options ( options_str );
1533- base_multiplier *= mul;
15341576 if ( p->talents .adjudication ->ok () )
15351577 {
15361578 add_child ( p->active .background_blessed_hammer );
@@ -1548,7 +1590,7 @@ hammer_of_wrath_t::hammer_of_wrath_t( paladin_t* p, util::string_view name, util
15481590
15491591 if ( p->talents .herald_of_the_sun .second_sunrise ->ok () )
15501592 {
1551- echo = new hammer_of_wrath_t ( p, " Hammer of Wrath Echo" , " " );
1593+ echo = new hammer_of_wrath_t ( p, " Hammer of Wrath Echo" , " " , s );
15521594 echo->base_multiplier = base_multiplier;
15531595 echo->aoe = aoe;
15541596 echo->base_aoe_multiplier = base_aoe_multiplier;
@@ -1563,7 +1605,17 @@ hammer_of_wrath_t::hammer_of_wrath_t( paladin_t* p, util::string_view name, util
15631605 else
15641606 cooldown = p->cooldowns .judgment ;
15651607 }
1566- background = bg;
1608+ }
1609+
1610+ void hammer_of_wrath_t::execute ()
1611+ {
1612+ judgment_base_t::execute ();
1613+
1614+ if ( !background && p ()->specialization () == PALADIN_RETRIBUTION && p ()->buffs .divine_resonance ->up () )
1615+ {
1616+ p ()->active .divine_resonance_ret_how ->execute_on_target ( execute_state->target );
1617+ p ()->buffs .divine_resonance ->decrement ();
1618+ }
15671619}
15681620
15691621void hammer_of_wrath_t::impact ( action_state_t * s )
@@ -1623,8 +1675,16 @@ void paladin_t::trigger_greater_judgment( paladin_td_t* targetdata, bool remove_
16231675}
16241676struct divine_toll_t : public paladin_spell_t
16251677{
1678+ divine_toll_judgment_ret_t * judgment;
1679+ divine_exaction_judgment_t * judgment_de;
1680+ divine_toll_hammer_of_wrath_ret_t * how;
1681+ divine_exaction_hammer_of_wrath_t * how_de;
16261682 divine_toll_t ( paladin_t * p, util::string_view options_str )
1627- : paladin_spell_t ( " divine_toll" , p, p->talents.divine_toll )
1683+ : paladin_spell_t ( " divine_toll" , p, p->talents.divine_toll ),
1684+ judgment ( nullptr ),
1685+ judgment_de( nullptr ),
1686+ how( nullptr ),
1687+ how_de( nullptr )
16281688 {
16291689 parse_options ( options_str );
16301690
@@ -1635,10 +1695,24 @@ struct divine_toll_t : public paladin_spell_t
16351695 {
16361696 add_child ( p->active .divine_resonance );
16371697 }
1698+ else if ( p->specialization () == PALADIN_RETRIBUTION )
1699+ {
1700+ judgment = new divine_toll_judgment_ret_t ( p );
1701+ add_child ( judgment );
1702+ how = new divine_toll_hammer_of_wrath_ret_t ( p );
1703+ add_child ( how );
1704+ }
16381705 if ( p->talents .templar .divine_exaction ->ok () )
16391706 {
1640- add_child ( p->specialization () == PALADIN_PROTECTION ? p->active .divine_exaction_prot
1641- : p->active .divine_exaction_ret );
1707+ if ( p->specialization () == PALADIN_PROTECTION )
1708+ add_child ( p->active .divine_exaction_prot );
1709+ else if ( p->specialization () == PALADIN_RETRIBUTION )
1710+ {
1711+ judgment_de = new divine_exaction_judgment_t ( p );
1712+ how_de = new divine_exaction_hammer_of_wrath_t ( p );
1713+ add_child ( judgment_de );
1714+ add_child ( how_de );
1715+ }
16421716 }
16431717 if ( p->talents .templar .divine_hammer ->ok () )
16441718 {
@@ -1652,8 +1726,17 @@ struct divine_toll_t : public paladin_spell_t
16521726
16531727 if ( result_is_hit ( s->result ) )
16541728 {
1655- p ()->active .divine_toll ->set_target ( s->target );
1656- p ()->active .divine_toll ->execute ();
1729+ if (p ()->specialization () == PALADIN_RETRIBUTION )
1730+ {
1731+ if ( p ()->buffs .hammer_of_wrath ->up () )
1732+ how->execute_on_target ( s->target );
1733+ else
1734+ judgment->execute_on_target ( s->target );
1735+ }
1736+ else
1737+ {
1738+ p ()->active .divine_toll ->execute_on_target ( s->target );
1739+ }
16571740 }
16581741 }
16591742
@@ -1682,8 +1765,19 @@ struct divine_toll_t : public paladin_spell_t
16821765 }
16831766 if ( p ()->talents .templar .divine_exaction ->ok () )
16841767 {
1685- action_t * a = p ()->specialization () == PALADIN_RETRIBUTION ? p ()->active .divine_exaction_ret
1686- : p ()->active .divine_exaction_prot ;
1768+ action_t * a = nullptr ;
1769+ if ( p ()->specialization () == PALADIN_RETRIBUTION )
1770+ {
1771+ // ToDo Fluttershy: Find out state after 300ms?
1772+ if ( p ()->buffs .hammer_of_wrath ->up () )
1773+ a = how_de;
1774+ else
1775+ a = judgment_de;
1776+ }
1777+ else if ( p ()->specialization () == PALADIN_PROTECTION )
1778+ {
1779+ a = p ()->active .divine_exaction_prot ;
1780+ }
16871781 for ( int i = 0 ; i < p ()->talents .templar .divine_exaction ->effectN ( 1 ).base_value (); i++ )
16881782 {
16891783 make_event<delayed_execute_event_t >( *sim, p (), a, execute_state->target , 300_ms * ( i + 1 ) );
@@ -3171,10 +3265,10 @@ void paladin_t::create_actions()
31713265 else if ( specialization () == PALADIN_RETRIBUTION )
31723266 {
31733267 paladin_t::create_ret_actions ();
3174- active.divine_toll =
3175- new judgment_ret_t ( this , " judgment_dt " , " " , 1.0 + find_spell ( 220637 )-> effectN ( 1 ). base_value (), true );
3176- if ( talents. templar . divine_exaction -> ok () )
3177- active.divine_exaction_ret = new judgment_divine_exaction_t ( this );
3268+ active.divine_toll = new divine_toll_judgment_ret_t ( this );
3269+ active. divine_toll_how = new divine_toll_hammer_of_wrath_ret_t ( this );
3270+ active. divine_resonance_ret = new divine_resonance_judgment_t ( this );
3271+ active.divine_resonance_ret_how = new divine_resonance_hammer_of_wrath_t ( this );
31783272 }
31793273
31803274 if ( talents.avenging_wrath ->ok () )
@@ -3282,13 +3376,18 @@ action_t* paladin_t::create_action( util::string_view name, util::string_view op
32823376 if ( name == " lay_on_hands" )
32833377 return new lay_on_hands_t ( this , options_str );
32843378 if ( name == " hammer_of_wrath" )
3285- return new hammer_of_wrath_t ( this , " hammer_of_wrath" , options_str );
3379+ {
3380+ if ( specialization () == PALADIN_PROTECTION )
3381+ return new hammer_of_wrath_t ( this , " hammer_of_wrath" , options_str, find_spell ( 1241413 ) );
3382+ else if ( specialization () == PALADIN_RETRIBUTION )
3383+ return new hammer_of_wrath_t ( this , " hammer_of_wrath" , options_str, find_spell ( 24275 ) );
3384+ }
32863385 if ( name == " judgment" )
32873386 {
32883387 if ( specialization () == PALADIN_PROTECTION )
3289- return new judgment_t ( this , " judgment" , options_str );
3388+ return new judgment_t ( this , " judgment" , options_str, find_spell ( 275779 ) );
32903389 else if ( specialization () == PALADIN_RETRIBUTION )
3291- return new judgment_ret_t ( this , " judgment" , options_str );
3390+ return new judgment_ret_t ( this , " judgment" , options_str, find_spell ( 20271 ) );
32923391 }
32933392 if ( name == " devotion_aura" )
32943393 return new devotion_aura_t ( this , options_str );
@@ -3512,7 +3611,10 @@ void paladin_t::create_buffs()
35123611 this ->active .divine_resonance ->schedule_execute ();
35133612 } );
35143613 else
3614+ {
35153615 buffs.divine_resonance = make_buff ( this , " divine_resonance" , find_spell ( 1266308 ) );
3616+ buffs.divine_resonance ->set_initial_stack ( buffs.divine_resonance ->max_stack () );
3617+ }
35163618
35173619 buffs.hammer_of_wrath = make_buff ( this , " hammer_of_wrath" , find_spell ( 1277026 ) );
35183620
0 commit comments