void absorb_t::assess_damage( dmg_e /*heal_type*/ , // commented to remove compiler warning, uncomment if needed action_state_t* s ) { //s -> result_amount = s -> target -> resource_gain( RESOURCE_HEALTH, s -> result_amount, 0, this ); if ( target_specific[ s -> target ] == nullptr ) target_specific[ s -> target ] = create_buff( s ); if ( result_is_hit( s -> result ) ) { target_specific[ s -> target ] -> trigger( 1, s -> result_amount ); if ( sim -> log ) sim -> out_log.printf( "%s %s applies absorb on %s for %.0f (%.0f) (%s)", player -> name(), name(), s -> target -> name(), s -> result_amount, s -> result_total, util::result_type_string( s -> result ) ); } else if ( result_is_multistrike( s -> result ) ) { target_specific[ s -> target ] -> current_value += s -> result_amount; if ( sim -> log ) sim -> out_log.printf( "%s %s multistrike adds to absorb on %s for %.0f (%.0f) (%s)", player -> name(), name(), s -> target -> name(), s -> result_amount, s -> result_total, util::result_type_string( s -> result ) ); } stats -> add_result( 0.0, s -> result_total, ABSORB, s -> result, s -> block_result, s -> target ); }
void action_t::execute() { if ( sim -> log && ! dual ) { log_t::output( sim, "%s performs %s (%.0f)", player -> name(), name(), player -> resource_current[ player -> primary_resource() ] ); } if ( observer ) *observer = 0; player_buff(); target_debuff( DMG_DIRECT ); calculate_result(); consume_resource(); if ( result_is_hit() ) { calculate_direct_damage(); if ( direct_dmg > 0 ) { assess_damage( direct_dmg, DMG_DIRECT ); } if ( num_ticks > 0 ) { if ( dot_behavior == DOT_REFRESH ) { current_tick = 0; if ( ! ticking ) schedule_tick(); } else { if ( ticking ) cancel(); snapshot_haste = haste(); schedule_tick(); } } } else { if ( sim -> log ) { log_t::output( sim, "%s avoids %s (%s)", sim -> target -> name(), name(), util_t::result_type_string( result ) ); log_t::miss_event( this ); } } update_ready(); if ( ! dual ) update_stats( DMG_DIRECT ); schedule_travel(); if ( repeating && ! proc ) schedule_execute(); if ( harmful ) player -> in_combat = true; }