Skip to main content

wowlab_manifest_schema/
periodic.rs

1//! Periodic aura components.
2
3use serde::Deserialize;
4
5use crate::{DamageSchoolKind, PeriodicDamageMode, ScalarRef};
6
7/// Periodic stack-decay component on an [`crate::ManifestAuraDef`].
8#[derive(Debug, Deserialize)]
9pub struct PeriodicRemoveStack {
10    pub tick_ms: ScalarRef,
11}
12
13/// Periodic damage component on an [`crate::ManifestAuraDef`].
14#[derive(Debug, Deserialize)]
15pub struct PeriodicDamage {
16    pub tick_ms: ScalarRef,
17    #[serde(default)]
18    pub mode: PeriodicDamageMode,
19    #[serde(default)]
20    pub spell_id: Option<u32>,
21    #[serde(default)]
22    pub ap_coef: Option<ScalarRef>,
23    #[serde(default)]
24    pub sp_coef: Option<ScalarRef>,
25    /// Total flat damage resolved from the referenced effect's DBC item-scaling class.
26    #[serde(default)]
27    pub item_damage_total: Option<ScalarRef>,
28    #[serde(default)]
29    pub school: Option<DamageSchoolKind>,
30    /// Schedule ticks normally, but classify their damage payload as a direct child hit.
31    #[serde(default)]
32    pub direct: bool,
33    #[serde(default)]
34    pub resource_gain: Option<ScalarRef>,
35    #[serde(default)]
36    pub crit_resource_gain: Option<ScalarRef>,
37    #[serde(default)]
38    pub crit_resource_chance: Option<ScalarRef>,
39}
40
41/// Periodic drain for a post-mitigation residual damage pool.
42#[derive(Debug, Deserialize)]
43pub struct PeriodicResidualDamage {
44    pub tick_ms: ScalarRef,
45}
46
47/// Periodic resource-gain component on an [`crate::ManifestAuraDef`].
48#[derive(Debug, Deserialize)]
49pub struct PeriodicResource {
50    pub tick_ms: ScalarRef,
51    pub amount: ScalarRef,
52}
53
54/// Periodic resource-drain component on an [`crate::ManifestAuraDef`].
55#[derive(Debug, Deserialize)]
56// #t(rust_similar_structs) gain and drain are distinct manifest operations despite sharing timing and amount fields
57pub struct PeriodicResourceDrain {
58    pub tick_ms: ScalarRef,
59    pub amount: ScalarRef,
60}
61
62/// Periodic aura-apply component on an [`crate::ManifestAuraDef`].
63#[derive(Debug, Deserialize)]
64pub struct PeriodicApplyAura {
65    pub tick_ms: ScalarRef,
66    pub aura: String,
67}
68
69/// Hook-only periodic component on an [`crate::ManifestAuraDef`] (pure pulse window).
70#[derive(Debug, Deserialize)]
71pub struct PeriodicHook {
72    pub tick_ms: ScalarRef,
73}