Skip to main content

wowlab_parsers/parsers/dbc/rows/
creature.rs

1// #t(file: rust_duplicate_strings) DBC field attributes repeat an upstream-schema ownership reason that Rust requires as a literal.
2
3use serde::Deserialize;
4use wowlab_engine_macros::{HasFk, HasId};
5
6/// DBC row from Creature.db2: NPC identity and classification metadata.
7#[derive(Clone, Debug, Deserialize, HasId)]
8#[allow(
9    non_snake_case,
10    reason = "fields mirror upstream DBC CSV headers exactly"
11)]
12pub struct CreatureRow {
13    pub ID: i32,
14    pub Name_lang: Option<String>,
15    pub Classification: i32,
16    pub CreatureType: i32,
17    pub CreatureFamily: i32,
18}
19
20/// DBC row from CreatureDifficulty.db2: per-creature content-tuning variant.
21#[derive(Clone, Debug, Deserialize, HasFk)]
22#[allow(
23    non_snake_case,
24    reason = "fields mirror upstream DBC CSV headers exactly"
25)]
26#[fk_field = "CreatureID"]
27pub struct CreatureDifficultyRow {
28    pub ID: i32,
29    pub Field_9_0_1_35522_003Min: i32,
30    pub Field_9_0_1_35522_003Max: i32,
31    pub FactionTemplateID: i32,
32    pub ContentTuningID: i32,
33    pub Flags_0: i32,
34    pub Flags_1: i32,
35    pub Flags_2: i32,
36    pub Flags_3: i32,
37    pub Flags_4: i32,
38    pub Flags_5: i32,
39    pub Flags_6: i32,
40    pub Flags_7: i32,
41    pub Flags_8: i32,
42    pub CreatureID: i32,
43}
44
45/// DBC row from ContentTuning.db2: expansion, level bounds, and scaling-curve IDs.
46#[derive(Clone, Debug, Deserialize, HasId)]
47#[allow(
48    non_snake_case,
49    reason = "fields mirror upstream DBC CSV headers exactly"
50)]
51pub struct ContentTuningRow {
52    pub ID: i32,
53    pub Flags: i32,
54    pub ExpansionID: i32,
55    pub HPScalingCurveID: i32,
56    pub DMGScalingCurveID: i32,
57    pub HPPrimaryStatScalingCurveID: i32,
58    pub DMGPrimaryStatScalingCurveID: i32,
59    pub PrimaryStatScalingModPlayerDataElementCharacterID: i32,
60    pub PrimaryStatScalingModPlayerDataElementCharacterMultiplier: f32,
61    pub MinLevelSquish: i32,
62    pub MaxLevelSquish: i32,
63    pub MinLevelScalingOffset: i32,
64    pub MaxLevelScalingOffset: i32,
65    pub AllowedMinOffset: i32,
66    pub AllowedMaxOffset: i32,
67    pub LfgMinLevel: i32,
68    pub LfgMaxLevel: i32,
69    pub ILevel: i32,
70    pub XpMultQuest: f32,
71}
72
73/// DBC row from ContentTuningXDifficulty.db2: content tuning to difficulty mapping.
74#[derive(Clone, Debug, Deserialize, HasFk)]
75#[allow(
76    non_snake_case,
77    reason = "fields mirror upstream DBC CSV headers exactly"
78)]
79#[fk_field = "ContentTuningID"]
80pub struct ContentTuningXDifficultyRow {
81    pub ID: i32,
82    pub DifficultyID: i32,
83    pub ContentTuningID: i32,
84}
85
86/// DBC row from ContentTuningXExpected.db2: content tuning to expected-stat-mod mapping with Mythic+ season bounds.
87#[derive(Clone, Debug, Deserialize, HasFk)]
88#[allow(
89    non_snake_case,
90    reason = "fields mirror upstream DBC CSV headers exactly"
91)]
92#[fk_field = "ContentTuningID"]
93pub struct ContentTuningXExpectedRow {
94    pub ID: i32,
95    pub ExpectedStatModID: i32,
96    pub MinMythicPlusSeasonID: i32,
97    pub MaxMythicPlusSeasonID: i32,
98    pub ContentTuningID: i32,
99}