essences/
game.rs

1use crate::prelude::*;
2
3use crate::{
4    abilities::AbilityId, currency::CurrencyId, fighting::FightTemplateId, items::AttributeId,
5};
6
7#[declare]
8pub type EntityTemplateId = Uuid;
9
10#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Tsify, JsonSchema)]
11pub struct EntityAttribute {
12    #[schemars(schema_with = "attribute_link_id_schema")]
13    pub attribute_id: AttributeId,
14    #[schemars(title = "Значение атрибута")]
15    pub value: u64,
16}
17
18#[derive(Debug, serde::Deserialize)]
19pub struct CharacterQuery {
20    pub character_id: String,
21}
22
23#[derive(Clone, Debug, Serialize, Deserialize, Tsify, JsonSchema)]
24pub struct EnemyReward {
25    #[schemars(title = "Id валюты награды", schema_with = "currency_link_id_schema")]
26    pub currency_id: CurrencyId,
27    #[schemars(title = "Минимальная награда")]
28    pub from: i64,
29    #[schemars(title = "Максимальная награда")]
30    pub to: i64,
31    #[schemars(
32        title = "Шанс выпадения",
33        description = "Шанс выпадения валюты от 0 до 100"
34    )]
35    pub drop_chance: f64,
36}
37
38impl PartialEq for EnemyReward {
39    fn eq(&self, other: &Self) -> bool {
40        self.currency_id == other.currency_id && self.from == other.from && self.to == other.to
41    }
42}
43
44impl Eq for EnemyReward {}
45
46#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Tsify, JsonSchema)]
47pub struct EntityTemplate {
48    #[schemars(schema_with = "id_schema")]
49    pub id: EntityTemplateId,
50    #[schemars(title = "Имя врага")]
51    pub name: String,
52    #[schemars(title = "Спайн", schema_with = "aa_entity_spine_schema")]
53    pub spine: String,
54    #[schemars(title = "Визуал", schema_with = "asset_unit_spine_skin")]
55    pub spine_skin_path: String,
56    #[schemars(title = "Размер спайна врага")]
57    pub spine_scale: u64,
58    #[schemars(title = "Время каста")]
59    pub cast_time: u64,
60    #[schemars(title = "Атрибуты врага", description = "Набор атрибутов врага")]
61    pub attributes: Vec<EntityAttribute>,
62    #[schemars(
63        title = "Id способностей",
64        description = "Набор id способностей врага",
65        schema_with = "ability_link_id_array_schema"
66    )]
67    pub ability_ids: Vec<AbilityId>,
68    #[schemars(title = "Ширина врага в клетках")]
69    pub width: i8,
70    #[schemars(title = "Награда за убийство врага")]
71    pub rewards: Vec<EnemyReward>,
72
73    #[schemars(
74        title = "Является ли боссом",
75        description = "Босс-сущность (entity_template_is_boss): влияет на босс-таланты и HP-бар."
76    )]
77    #[serde(default)]
78    pub is_boss: bool,
79}
80
81#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Tsify, JsonSchema)]
82pub struct Chapter {
83    #[schemars(schema_with = "id_schema")]
84    pub id: Uuid,
85    #[schemars(title = "Порядковый номер уровня")]
86    pub level: i64,
87    #[schemars(
88        title = "Набор id битв",
89        description = "Набор битв на уровне",
90        schema_with = "fight_template_link_id_array_schema"
91    )]
92    pub fight_ids: Vec<FightTemplateId>,
93    #[schemars(title = "Название боя")]
94    pub title: i18n::I18nString,
95}
96
97#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Tsify, JsonSchema)]
98pub struct CharacterLevel {
99    #[schemars(title = "Уровень игрока")]
100    pub level: i64,
101    #[schemars(title = "Слотов способностей на уровне (для генерации оппонентов)")]
102    pub ability_slots: u64,
103    #[schemars(
104        title = "Минимальный опыт для получения",
105        description = "Минимальный опыт игрока для получения уровня"
106    )]
107    pub required_experience: i64,
108    #[schemars(
109        title = "Базовые аттрибуты игрока на уровне",
110        description = "Базовые аттрибуты игрока, которые выдаются на этом уровне"
111    )]
112    pub attributes: Vec<EntityAttribute>,
113}
114
115#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Tsify, JsonSchema)]
116pub struct AbilitySlotsLevel {
117    #[schemars(title = "Минимальный уровень главы")]
118    pub from_chapter_level: i64,
119    #[schemars(title = "Сколько слотов абилок открыто на уровне")]
120    pub ability_slots: u64,
121}
122
123#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Tsify, JsonSchema)]
124pub struct PetSlotsLevel {
125    #[schemars(title = "Минимальный уровень главы")]
126    pub from_chapter_level: i64,
127    #[schemars(title = "Сколько слотов петов открыто на уровне")]
128    pub pet_slots: u64,
129}