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_engine_domain::dbc::{ResolvedGameDataEffectExt as _, SpellSchoolMask};
3use wowlab_types::{constants::HUNDRED, sim::SpellIdx};
4
5use crate::generated::items::sporecallers_blooming_loop::{AURA, EFFECT, ITEM_ID};
6
7pub(crate) fn on_player_impact(ctx: &mut HookCtx<'_>, impact: ImpactEvent) {
8    let school = ctx
9        .game_data()
10        .school_mask(SpellIdx::from_raw(impact.spell_id))
11        .map(SpellSchoolMask::from_dbc)
12        .unwrap_or_default();
13
14    if !school.contains(SpellSchoolMask::NATURE) || !ctx.roll_item_rppm(ITEM_ID) {
15        return;
16    }
17
18    if let Some(remaining) = ctx.flat_periodic_damage_remaining_id(AURA::ROTBLOOM) {
19        let multiplier = ctx
20            .game_data()
21            .effect_base_points(EFFECT::CONSUME_MULTIPLIER)
22            / HUNDRED;
23
24        ctx.expire_aura_id(AURA::ROTBLOOM);
25        ctx.deal_damage_flat(EFFECT::VIRULENT_DAMAGE.0, remaining * multiplier);
26    } else {
27        ctx.apply_aura_id(AURA::ROTBLOOM);
28    }
29}