Skip to main content

wowlab_engine_domain/dbc/semantics/
spell_effect_attributes.rs

1//! Attributes attached to an individual DBC spell effect.
2
3bitflags::bitflags! {
4    /// DBC `SpellEffectAttributes`.
5    #[derive(Copy, Clone, Debug, Default, Eq, Hash, PartialEq)]
6    pub struct SpellEffectAttributes: u32 {
7        const NO_IMMUNITY = 1 << 0;
8        const POSITION_IS_FACING_RELATIVE = 1 << 1;
9        const JUMP_CHARGE_UNIT_MELEE_RANGE = 1 << 2;
10        const JUMP_CHARGE_UNIT_STRICT_PATH_CHECK = 1 << 3;
11        const EXCLUDE_OWN_PARTY = 1 << 4;
12        const ALWAYS_AOE_LINE_OF_SIGHT = 1 << 5;
13        const SUPPRESS_POINTS_STACKING = 1 << 6;
14        const CHAIN_FROM_INITIAL_TARGET = 1 << 7;
15        const UNCONTROLLED_NO_BACKWARDS = 1 << 8;
16        const AURA_POINTS_STACK = 1 << 9;
17        const NO_COPY_DAMAGE_INTERRUPTS_OR_PROCS = 1 << 10;
18        const ADD_TARGET_COMBAT_REACH_TO_AOE = 1 << 11;
19        const IS_HARMFUL = 1 << 12;
20        const FORCE_SCALE_TO_OVERRIDE_CAMERA_MIN_HEIGHT = 1 << 13;
21        const PLAYERS_ONLY = 1 << 14;
22        const COMPUTE_POINTS_ONLY_AT_CAST_TIME = 1 << 15;
23        const ENFORCE_LINE_OF_SIGHT_TO_CHAIN_TARGETS = 1 << 16;
24        const AREA_EFFECTS_USE_TARGET_RADIUS = 1 << 17;
25        const TELEPORT_WITH_VEHICLE = 1 << 18;
26        const SCALE_POINTS_BY_CHALLENGE_MODE_DAMAGE_SCALER = 1 << 19;
27        const DONT_FAIL_SPELL_ON_TARGETING_FAILURE = 1 << 20;
28        const IGNORE_DURING_COOLDOWN_TIME_RATE_CALCULATION = 1 << 23;
29        const DAMAGE_ONLY_ABSORB_SHIELDS = 1 << 26;
30    }
31}
32
33impl SpellEffectAttributes {
34    #[must_use]
35    pub const fn from_dbc(raw: i32) -> Self {
36        Self::from_bits_retain(u32::from_ne_bytes(raw.to_ne_bytes()))
37    }
38}