artifacts/models/
monster_schema.rs

1use crate::models;
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
5#[cfg_attr(feature = "specta", derive(specta::Type))]
6pub struct MonsterSchema {
7    /// Name of the monster.
8    #[serde(rename = "name")]
9    pub name: String,
10    /// The code of the monster. This is the monster's unique identifier (ID).
11    #[serde(rename = "code")]
12    pub code: String,
13    /// Monster level.
14    #[serde(rename = "level")]
15    pub level: i32,
16    /// Monster type.
17    #[serde(rename = "type")]
18    pub r#type: models::MonsterType,
19    /// Monster hit points.
20    #[serde(rename = "hp")]
21    pub hp: i32,
22    /// Monster fire attack.
23    #[serde(rename = "attack_fire")]
24    pub attack_fire: i32,
25    /// Monster earth attack.
26    #[serde(rename = "attack_earth")]
27    pub attack_earth: i32,
28    /// Monster water attack.
29    #[serde(rename = "attack_water")]
30    pub attack_water: i32,
31    /// Monster air attack.
32    #[serde(rename = "attack_air")]
33    pub attack_air: i32,
34    /// Monster % fire resistance.
35    #[serde(rename = "res_fire")]
36    pub res_fire: i32,
37    /// Monster % earth resistance.
38    #[serde(rename = "res_earth")]
39    pub res_earth: i32,
40    /// Monster % water resistance.
41    #[serde(rename = "res_water")]
42    pub res_water: i32,
43    /// Monster % air resistance.
44    #[serde(rename = "res_air")]
45    pub res_air: i32,
46    /// Monster % critical strike.
47    #[serde(rename = "critical_strike")]
48    pub critical_strike: i32,
49    /// Monster initiative for turn order.
50    #[serde(rename = "initiative")]
51    pub initiative: i32,
52    /// List of effects.
53    #[serde(rename = "effects", skip_serializing_if = "Option::is_none")]
54    pub effects: Option<Vec<models::SimpleEffectSchema>>,
55    /// Monster minimum gold drop.
56    #[serde(rename = "min_gold")]
57    pub min_gold: i32,
58    /// Monster maximum gold drop.
59    #[serde(rename = "max_gold")]
60    pub max_gold: i32,
61    /// Monster drops. This is a list of items that the monster drops after killing the monster.
62    #[serde(rename = "drops")]
63    pub drops: Vec<models::DropRateSchema>,
64}
65
66impl MonsterSchema {
67    pub fn new(
68        name: String,
69        code: String,
70        level: i32,
71        r#type: models::MonsterType,
72        hp: i32,
73        attack_fire: i32,
74        attack_earth: i32,
75        attack_water: i32,
76        attack_air: i32,
77        res_fire: i32,
78        res_earth: i32,
79        res_water: i32,
80        res_air: i32,
81        critical_strike: i32,
82        initiative: i32,
83        min_gold: i32,
84        max_gold: i32,
85        drops: Vec<models::DropRateSchema>,
86    ) -> MonsterSchema {
87        MonsterSchema {
88            name,
89            code,
90            level,
91            r#type,
92            hp,
93            attack_fire,
94            attack_earth,
95            attack_water,
96            attack_air,
97            res_fire,
98            res_earth,
99            res_water,
100            res_air,
101            critical_strike,
102            initiative,
103            effects: None,
104            min_gold,
105            max_gold,
106            drops,
107        }
108    }
109}