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 hit points.
17    #[serde(rename = "hp")]
18    pub hp: i32,
19    /// Monster fire attack.
20    #[serde(rename = "attack_fire")]
21    pub attack_fire: i32,
22    /// Monster earth attack.
23    #[serde(rename = "attack_earth")]
24    pub attack_earth: i32,
25    /// Monster water attack.
26    #[serde(rename = "attack_water")]
27    pub attack_water: i32,
28    /// Monster air attack.
29    #[serde(rename = "attack_air")]
30    pub attack_air: i32,
31    /// Monster % fire resistance.
32    #[serde(rename = "res_fire")]
33    pub res_fire: i32,
34    /// Monster % earth resistance.
35    #[serde(rename = "res_earth")]
36    pub res_earth: i32,
37    /// Monster % water resistance.
38    #[serde(rename = "res_water")]
39    pub res_water: i32,
40    /// Monster % air resistance.
41    #[serde(rename = "res_air")]
42    pub res_air: i32,
43    /// Monster % critical strike.
44    #[serde(rename = "critical_strike")]
45    pub critical_strike: i32,
46    /// List of effects.
47    #[serde(rename = "effects", skip_serializing_if = "Option::is_none")]
48    pub effects: Option<Vec<models::SimpleEffectSchema>>,
49    /// Monster minimum gold drop.
50    #[serde(rename = "min_gold")]
51    pub min_gold: i32,
52    /// Monster maximum gold drop.
53    #[serde(rename = "max_gold")]
54    pub max_gold: i32,
55    /// Monster drops. This is a list of items that the monster drops after killing the monster.
56    #[serde(rename = "drops")]
57    pub drops: Vec<models::DropRateSchema>,
58}
59
60impl MonsterSchema {
61    pub fn new(
62        name: String,
63        code: String,
64        level: i32,
65        hp: i32,
66        attack_fire: i32,
67        attack_earth: i32,
68        attack_water: i32,
69        attack_air: i32,
70        res_fire: i32,
71        res_earth: i32,
72        res_water: i32,
73        res_air: i32,
74        critical_strike: i32,
75        min_gold: i32,
76        max_gold: i32,
77        drops: Vec<models::DropRateSchema>,
78    ) -> MonsterSchema {
79        MonsterSchema {
80            name,
81            code,
82            level,
83            hp,
84            attack_fire,
85            attack_earth,
86            attack_water,
87            attack_air,
88            res_fire,
89            res_earth,
90            res_water,
91            res_air,
92            critical_strike,
93            effects: None,
94            min_gold,
95            max_gold,
96            drops,
97        }
98    }
99}