Skip to content

Commit

Permalink
[Pet] Add option to disable guardian scaling modifiers for guardian t…
Browse files Browse the repository at this point in the history
…ype pets
  • Loading branch information
nyterage committed Jan 24, 2025
1 parent deafd89 commit 83f630c
Show file tree
Hide file tree
Showing 18 changed files with 191 additions and 154 deletions.
6 changes: 3 additions & 3 deletions engine/action/action.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4158,8 +4158,8 @@ void action_t::snapshot_internal( action_state_t* state, unsigned flags, result_

if ( flags & STATE_MUL_PET )
{
state->pet_multiplier =
player->cast_pet()->owner->composite_player_pet_damage_multiplier( state, player->type == PLAYER_GUARDIAN );
state->pet_multiplier = player->cast_pet()->owner->composite_player_pet_damage_multiplier(
state, player->type == PLAYER_GUARDIAN, player->cast_pet()->player_effect_scaling_guardian );
}

if ( flags & STATE_TGT_MUL_DA )
Expand All @@ -4171,7 +4171,7 @@ void action_t::snapshot_internal( action_state_t* state, unsigned flags, result_
if ( flags & STATE_TGT_MUL_PET )
{
state->target_pet_multiplier = player->cast_pet()->owner->composite_player_target_pet_damage_multiplier(
state->target, player->type == PLAYER_GUARDIAN );
state->target, player->type == PLAYER_GUARDIAN, player->cast_pet()->player_effect_scaling_guardian );
}

if ( flags & STATE_TGT_CRIT )
Expand Down
24 changes: 14 additions & 10 deletions engine/action/parse_effects.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -812,13 +812,15 @@ double parse_player_effects_t::composite_player_multiplier( school_e school ) co
return m;
}

double parse_player_effects_t::composite_player_pet_damage_multiplier( const action_state_t* s, bool guardian ) const
double parse_player_effects_t::composite_player_pet_damage_multiplier( const action_state_t* s, bool guardian,
bool scaling_guardian ) const
{
auto dm = player_t::composite_player_pet_damage_multiplier( s, guardian );
auto dm = player_t::composite_player_pet_damage_multiplier( s, guardian, scaling_guardian );

for ( const auto& i : pet_multiplier_effects )
if ( static_cast<bool>( i.opt_enum ) == guardian )
dm *= 1.0 + get_effect_value( i, true );
if ( scaling_guardian || !guardian )
for ( const auto& i : pet_multiplier_effects )
if ( static_cast<bool>( i.opt_enum ) == guardian )
dm *= 1.0 + get_effect_value( i, true );

return dm;
}
Expand Down Expand Up @@ -988,14 +990,16 @@ double parse_player_effects_t::composite_player_target_multiplier( player_t* t,
return tm;
}

double parse_player_effects_t::composite_player_target_pet_damage_multiplier( player_t* t, bool guardian ) const
double parse_player_effects_t::composite_player_target_pet_damage_multiplier( player_t* t, bool guardian,
bool scaling_guardian ) const
{
auto tm = player_t::composite_player_target_pet_damage_multiplier( t, guardian );
auto tm = player_t::composite_player_target_pet_damage_multiplier( t, guardian, scaling_guardian );
auto td = get_target_data( t );

for ( const auto& i : target_pet_multiplier_effects )
if ( static_cast<bool>( i.opt_enum ) == guardian )
tm *= 1.0 + get_effect_value( i, td );
if ( scaling_guardian || !guardian )
for ( const auto& i : target_pet_multiplier_effects )
if ( static_cast<bool>( i.opt_enum ) == guardian )
tm *= 1.0 + get_effect_value( i, td );

return tm;
}
Expand Down
4 changes: 2 additions & 2 deletions engine/action/parse_effects.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -743,7 +743,7 @@ struct parse_player_effects_t : public player_t, public parse_effects_t
double composite_heal_versatility() const override;
double composite_mitigation_versatility() const override;
double composite_player_multiplier( school_e ) const override;
double composite_player_pet_damage_multiplier( const action_state_t*, bool ) const override;
double composite_player_pet_damage_multiplier( const action_state_t*, bool, bool ) const override;
double composite_attack_power_multiplier() const override;
double composite_melee_crit_chance() const override;
double composite_spell_crit_chance() const override;
Expand All @@ -760,7 +760,7 @@ struct parse_player_effects_t : public player_t, public parse_effects_t
double composite_dodge() const override;
double matching_gear_multiplier( attribute_e ) const override;
double composite_player_target_multiplier( player_t*, school_e ) const override;
double composite_player_target_pet_damage_multiplier( player_t*, bool ) const override;
double composite_player_target_pet_damage_multiplier( player_t*, bool, bool ) const override;

void invalidate_cache( cache_e c ) override;

Expand Down
28 changes: 16 additions & 12 deletions engine/class_modules/priest/sc_priest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3256,33 +3256,37 @@ double priest_t::composite_spell_crit_chance() const
return sc;
}

double priest_t::composite_player_pet_damage_multiplier( const action_state_t* s, bool guardian ) const
double priest_t::composite_player_pet_damage_multiplier( const action_state_t* s, bool guardian,
bool scaling_guardian ) const
{
double m = player_t::composite_player_pet_damage_multiplier( s, guardian );
double m = player_t::composite_player_pet_damage_multiplier( s, guardian, scaling_guardian );

// Certain modifiers are only for Guardians, otherwise just give the Pet Modifier

if ( guardian )
if ( guardian && scaling_guardian )
{
m *= ( 1.0 + specs.shadow_priest->effectN( 4 ).percent() );
m *= ( 1.0 + specs.discipline_priest->effectN( 15 ).percent() );
}
else
else if ( !guardian )
{
m *= ( 1.0 + specs.shadow_priest->effectN( 3 ).percent() );
m *= ( 1.0 + specs.discipline_priest->effectN( 3 ).percent() );
}

// TWW1 Set Bonus for pet spells, this double dips with pet spells
if ( buffs.devouring_chorus->check() )
if ( scaling_guardian || !guardian )
{
m *= ( 1.0 + buffs.devouring_chorus->check_stack_value() );
}
// TWW1 Set Bonus for pet spells, this double dips with pet spells
if ( buffs.devouring_chorus->check() )
{
m *= ( 1.0 + buffs.devouring_chorus->check_stack_value() );
}

// Auto parsing does not cover melee attacks, and other attacks double dip with this
if ( buffs.devoured_pride->check() )
{
m *= ( 1.0 + talents.shadow.devoured_pride->effectN( 2 ).percent() );
// Auto parsing does not cover melee attacks, and other attacks double dip with this
if ( buffs.devoured_pride->check() )
{
m *= ( 1.0 + talents.shadow.devoured_pride->effectN( 2 ).percent() );
}
}
return m;
}
Expand Down
2 changes: 1 addition & 1 deletion engine/class_modules/priest/sc_priest.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -896,7 +896,7 @@ struct priest_t final : public player_t
double composite_melee_haste() const override;
double composite_spell_haste() const override;
double composite_spell_crit_chance() const override;
double composite_player_pet_damage_multiplier( const action_state_t*, bool ) const override;
double composite_player_pet_damage_multiplier( const action_state_t*, bool, bool ) const override;
double composite_player_absorb_multiplier( const action_state_t* s ) const override;
double composite_player_heal_multiplier( const action_state_t* s ) const override;
double composite_player_multiplier( school_e school ) const override;
Expand Down
25 changes: 14 additions & 11 deletions engine/class_modules/sc_hunter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1019,8 +1019,8 @@ struct hunter_t final : public player_t
double composite_player_critical_damage_multiplier( const action_state_t* ) const override;
double composite_player_multiplier( school_e school ) const override;
double composite_player_target_multiplier( player_t* target, school_e school ) const override;
double composite_player_pet_damage_multiplier( const action_state_t*, bool ) const override;
double composite_player_target_pet_damage_multiplier( player_t* target, bool guardian ) const override;
double composite_player_pet_damage_multiplier( const action_state_t*, bool, bool ) const override;
double composite_player_target_pet_damage_multiplier( player_t* target, bool guardian, bool scaling_guardian ) const override;
double composite_leech() const override;
double matching_gear_multiplier( attribute_e attr ) const override;
double stacking_movement_modifier() const override;
Expand Down Expand Up @@ -8839,16 +8839,19 @@ double hunter_t::composite_player_target_multiplier( player_t* target, school_e
return d;
}

double hunter_t::composite_player_pet_damage_multiplier( const action_state_t* s, bool guardian ) const
double hunter_t::composite_player_pet_damage_multiplier( const action_state_t* s, bool guardian, bool scaling_guardian ) const
{
double m = player_t::composite_player_pet_damage_multiplier( s, guardian );
double m = player_t::composite_player_pet_damage_multiplier( s, guardian, scaling_guardian );

if ( mastery.master_of_beasts->ok() )
m *= 1.0 + cache.mastery_value();
if ( !guardian || scaling_guardian )
{
if ( mastery.master_of_beasts->ok() )
m *= 1.0 + cache.mastery_value();

m *= 1 + specs.beast_mastery_hunter -> effectN( 3 ).percent();
m *= 1 + specs.survival_hunter -> effectN( 3 ).percent();
m *= 1 + specs.marksmanship_hunter -> effectN( 3 ).percent();
m *= 1 + specs.beast_mastery_hunter->effectN( 3 ).percent();
m *= 1 + specs.survival_hunter->effectN( 3 ).percent();
m *= 1 + specs.marksmanship_hunter->effectN( 3 ).percent();
}

if ( !guardian )
{
Expand All @@ -8863,9 +8866,9 @@ double hunter_t::composite_player_pet_damage_multiplier( const action_state_t* s
return m;
}

double hunter_t::composite_player_target_pet_damage_multiplier( player_t* target, bool guardian ) const
double hunter_t::composite_player_target_pet_damage_multiplier( player_t* target, bool guardian, bool scaling_guardian ) const
{
double m = player_t::composite_player_target_pet_damage_multiplier( target, guardian );
double m = player_t::composite_player_target_pet_damage_multiplier( target, guardian, scaling_guardian );

if ( !guardian )
{
Expand Down
25 changes: 14 additions & 11 deletions engine/class_modules/sc_hunter_live.inc
Original file line number Diff line number Diff line change
Expand Up @@ -989,8 +989,8 @@ public:
double composite_player_critical_damage_multiplier( const action_state_t* ) const override;
double composite_player_multiplier( school_e school ) const override;
double composite_player_target_multiplier( player_t* target, school_e school ) const override;
double composite_player_pet_damage_multiplier( const action_state_t*, bool ) const override;
double composite_player_target_pet_damage_multiplier( player_t* target, bool guardian ) const override;
double composite_player_pet_damage_multiplier( const action_state_t*, bool, bool ) const override;
double composite_player_target_pet_damage_multiplier( player_t* target, bool guardian, bool scaling_guardian ) const override;
double composite_leech() const override;
double matching_gear_multiplier( attribute_e attr ) const override;
double stacking_movement_modifier() const override;
Expand Down Expand Up @@ -8913,16 +8913,19 @@ double hunter_t::composite_player_target_multiplier( player_t* target, school_e
return d;
}

double hunter_t::composite_player_pet_damage_multiplier( const action_state_t* s, bool guardian ) const
double hunter_t::composite_player_pet_damage_multiplier( const action_state_t* s, bool guardian, bool scaling_guardian ) const
{
double m = player_t::composite_player_pet_damage_multiplier( s, guardian );
double m = player_t::composite_player_pet_damage_multiplier( s, guardian, scaling_guardian );

if ( mastery.master_of_beasts->ok() )
m *= 1.0 + cache.mastery_value();
if( !guardian || scaling_guardian )
{
if ( mastery.master_of_beasts->ok() )
m *= 1.0 + cache.mastery_value();

m *= 1 + specs.beast_mastery_hunter -> effectN( 3 ).percent();
m *= 1 + specs.survival_hunter -> effectN( 3 ).percent();
m *= 1 + specs.marksmanship_hunter -> effectN( 3 ).percent();
m *= 1 + specs.beast_mastery_hunter -> effectN( 3 ).percent();
m *= 1 + specs.survival_hunter -> effectN( 3 ).percent();
m *= 1 + specs.marksmanship_hunter -> effectN( 3 ).percent();
}

if ( !guardian )
{
Expand All @@ -8937,9 +8940,9 @@ double hunter_t::composite_player_pet_damage_multiplier( const action_state_t* s
return m;
}

double hunter_t::composite_player_target_pet_damage_multiplier( player_t* target, bool guardian ) const
double hunter_t::composite_player_target_pet_damage_multiplier( player_t* target, bool guardian, bool scaling_guardian ) const
{
double m = player_t::composite_player_target_pet_damage_multiplier( target, guardian );
double m = player_t::composite_player_target_pet_damage_multiplier( target, guardian, scaling_guardian );

if ( !guardian )
{
Expand Down
22 changes: 13 additions & 9 deletions engine/class_modules/sc_mage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -974,8 +974,8 @@ struct mage_t final : public player_t
double stacking_movement_modifier() const override;
double composite_player_critical_damage_multiplier( const action_state_t* ) const override;
double composite_player_multiplier( school_e ) const override;
double composite_player_pet_damage_multiplier( const action_state_t*, bool ) const override;
double composite_player_target_pet_damage_multiplier( player_t*, bool ) const override;
double composite_player_pet_damage_multiplier( const action_state_t*, bool, bool ) const override;
double composite_player_target_pet_damage_multiplier( player_t*, bool, bool ) const override;
double composite_melee_crit_chance() const override;
double composite_spell_crit_chance() const override;
double composite_melee_haste() const override;
Expand Down Expand Up @@ -8867,13 +8867,17 @@ double mage_t::composite_player_multiplier( school_e school ) const
return m;
}

double mage_t::composite_player_pet_damage_multiplier( const action_state_t* s, bool guardian ) const
double mage_t::composite_player_pet_damage_multiplier( const action_state_t* s, bool guardian,
bool scaling_guardian ) const
{
double m = player_t::composite_player_pet_damage_multiplier( s, guardian );
double m = player_t::composite_player_pet_damage_multiplier( s, guardian, scaling_guardian );

m *= 1.0 + spec.arcane_mage->effectN( 3 ).percent();
m *= 1.0 + spec.fire_mage->effectN( 3 ).percent();
m *= 1.0 + spec.frost_mage->effectN( 3 ).percent();
if ( !guardian || scaling_guardian )
{
m *= 1.0 + spec.arcane_mage->effectN( 3 ).percent();
m *= 1.0 + spec.fire_mage->effectN( 3 ).percent();
m *= 1.0 + spec.frost_mage->effectN( 3 ).percent();
}

if ( !guardian )
{
Expand All @@ -8884,9 +8888,9 @@ double mage_t::composite_player_pet_damage_multiplier( const action_state_t* s,
return m;
}

double mage_t::composite_player_target_pet_damage_multiplier( player_t* target, bool guardian ) const
double mage_t::composite_player_target_pet_damage_multiplier( player_t* target, bool guardian, bool scaling_guardian ) const
{
double m = player_t::composite_player_target_pet_damage_multiplier( target, guardian );
double m = player_t::composite_player_target_pet_damage_multiplier( target, guardian, scaling_guardian );

if ( auto td = find_target_data( target ) )
{
Expand Down
21 changes: 12 additions & 9 deletions engine/class_modules/sc_mage_live.inc
Original file line number Diff line number Diff line change
Expand Up @@ -960,8 +960,8 @@ public:
double stacking_movement_modifier() const override;
double composite_player_critical_damage_multiplier( const action_state_t* ) const override;
double composite_player_multiplier( school_e ) const override;
double composite_player_pet_damage_multiplier( const action_state_t*, bool ) const override;
double composite_player_target_pet_damage_multiplier( player_t*, bool ) const override;
double composite_player_pet_damage_multiplier( const action_state_t*, bool, bool ) const override;
double composite_player_target_pet_damage_multiplier( player_t*, bool, bool ) const override;
double composite_melee_crit_chance() const override;
double composite_spell_crit_chance() const override;
double composite_melee_haste() const override;
Expand Down Expand Up @@ -8795,13 +8795,16 @@ double mage_t::composite_player_multiplier( school_e school ) const
return m;
}

double mage_t::composite_player_pet_damage_multiplier( const action_state_t* s, bool guardian ) const
double mage_t::composite_player_pet_damage_multiplier( const action_state_t* s, bool guardian, bool scaling_guardian ) const
{
double m = player_t::composite_player_pet_damage_multiplier( s, guardian );
double m = player_t::composite_player_pet_damage_multiplier( s, guardian, scaling_guardian );

m *= 1.0 + spec.arcane_mage->effectN( 3 ).percent();
m *= 1.0 + spec.fire_mage->effectN( 3 ).percent();
m *= 1.0 + spec.frost_mage->effectN( 3 ).percent();
if( !guardian || scaling_guardian )
{
m *= 1.0 + spec.arcane_mage->effectN( 3 ).percent();
m *= 1.0 + spec.fire_mage->effectN( 3 ).percent();
m *= 1.0 + spec.frost_mage->effectN( 3 ).percent();
}

if ( !guardian )
{
Expand All @@ -8812,9 +8815,9 @@ double mage_t::composite_player_pet_damage_multiplier( const action_state_t* s,
return m;
}

double mage_t::composite_player_target_pet_damage_multiplier( player_t* target, bool guardian ) const
double mage_t::composite_player_target_pet_damage_multiplier( player_t* target, bool guardian, bool scaling_guardian ) const
{
double m = player_t::composite_player_target_pet_damage_multiplier( target, guardian );
double m = player_t::composite_player_target_pet_damage_multiplier( target, guardian, scaling_guardian );

if ( auto td = find_target_data( target ) )
{
Expand Down
18 changes: 11 additions & 7 deletions engine/class_modules/sc_rogue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1291,7 +1291,7 @@ class rogue_t : public player_t
double composite_leech() const override;
double matching_gear_multiplier( attribute_e attr ) const override;
double composite_player_multiplier( school_e school ) const override;
double composite_player_pet_damage_multiplier( const action_state_t*, bool ) const override;
double composite_player_pet_damage_multiplier( const action_state_t*, bool guardian, bool scaling_guardian ) const override;
double composite_player_target_multiplier( player_t* target, school_e school ) const override;
double composite_player_target_crit_chance( player_t* target ) const override;
double composite_player_target_armor( player_t* target ) const override;
Expand Down Expand Up @@ -5552,7 +5552,7 @@ struct secret_technique_t : public rogue_attack_t
if ( secondary_trigger_type == secondary_trigger::SECRET_TECHNIQUE_CLONE )
{
// Secret Technique clones count as pets and benefit from pet modifiers
m *= p()->composite_player_pet_damage_multiplier( state, true );
m *= p()->composite_player_pet_damage_multiplier( state, true, true );
}

return m;
Expand Down Expand Up @@ -9749,13 +9749,17 @@ double rogue_t::composite_player_multiplier( school_e school ) const

// rogue_t::composite_player_pet_damage_multiplier ==========================

double rogue_t::composite_player_pet_damage_multiplier( const action_state_t* s, bool guardian ) const
double rogue_t::composite_player_pet_damage_multiplier( const action_state_t* s, bool guardian,
bool scaling_guardian ) const
{
double m = player_t::composite_player_pet_damage_multiplier( s, guardian );
double m = player_t::composite_player_pet_damage_multiplier( s, guardian, scaling_guardian );

m *= 1.0 + spec.assassination_rogue->effectN( 6 ).percent();
m *= 1.0 + spec.outlaw_rogue->effectN( 3 ).percent();
m *= 1.0 + spec.subtlety_rogue->effectN( 8 ).percent();
if ( !guardian || scaling_guardian )
{
m *= 1.0 + spec.assassination_rogue->effectN( 6 ).percent();
m *= 1.0 + spec.outlaw_rogue->effectN( 3 ).percent();
m *= 1.0 + spec.subtlety_rogue->effectN( 8 ).percent();
}

return m;
}
Expand Down
Loading

0 comments on commit 83f630c

Please sign in to comment.