Skip to main content

wowlab_engine_content/hooks/items/
sporecallers_blooming_loop.rs

1use wowlab_engine_combat::{AuraOps as _, DamageOps as _, HookCtx, ImpactEvent, ProcOps as _};
2use wowlab_types::constants::HUNDRED;
3
4use crate::{
5    generated::items::sporecallers_blooming_loop::{AURA_BINDING, RPPM_BINDING},
6    hooks::items::{bound_aura, bound_rppm},
7};
8
9pub(crate) fn on_player_impact(ctx: &mut HookCtx<'_>, impact: ImpactEvent) {
10    if !ctx.impact_is_nature(impact)
11        || !bound_rppm(ctx, RPPM_BINDING).is_some_and(|rppm| ctx.roll_rppm(rppm))
12    {
13        return;
14    }
15
16    let Some(rotbloom) = bound_aura(ctx, AURA_BINDING::ROTBLOOM) else {
17        return;
18    };
19
20    if let Some(remaining) = ctx.flat_periodic_damage_remaining(rotbloom) {
21        let multiplier = ctx.effect_base_points(
22            crate::generated::items::sporecallers_blooming_loop::DAMAGE_EFFECT::CONSUME_MULTIPLIER,
23        ) / HUNDRED;
24
25        ctx.expire_aura(rotbloom);
26        ctx.deal_damage_flat(
27            crate::generated::items::sporecallers_blooming_loop::DAMAGE_EFFECT::VIRULENT_DAMAGE
28                .action(),
29            remaining * multiplier,
30        );
31    } else {
32        ctx.apply_aura(rotbloom);
33    }
34}