1use essences::{abilities::AbilityRarityId, currency::CurrencyUnit};
2use schema_loader::{
3 aa_vfx_projectile_schema, ability_rarity_link_id_array_schema, ability_rarity_link_id_schema,
4 id_schema, script_schema,
5};
6use schemars::JsonSchema;
7
8use serde::{Deserialize, Serialize};
9use tsify_next::{Tsify, declare};
10
11use crate::validated_types::PositiveF64;
12
13#[declare]
14pub type ProjectileId = uuid::Uuid;
15
16#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify)]
17pub struct AbilityCaseRarityWeight {
18 #[schemars(title = "Id редкости", schema_with = "ability_rarity_link_id_schema")]
19 pub rarity_id: AbilityRarityId,
20
21 #[schemars(title = "Вес редкости")]
22 pub weight: PositiveF64,
23}
24
25#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify, Default)]
26pub struct AbilityCaseCheckpointAbilityReward {
27 #[schemars(title = "Количество роллов абилки")]
29 pub amount: i64,
30
31 #[schemars(
33 title = "Минимальная редкость",
34 schema_with = "ability_rarity_link_id_schema"
35 )]
36 pub min_rarity_id: AbilityRarityId,
37}
38
39#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify, Default)]
40pub struct AbilityCaseCheckpointReward {
41 #[schemars(title = "Порог чекпоинта (крутки в уровне)")]
43 pub required_opens: i64,
44
45 #[schemars(title = "Валютные награды чекпоинта")]
47 pub currency_rewards: Vec<CurrencyUnit>,
48
49 #[schemars(title = "Награды абилками чекпоинта")]
51 pub ability_rewards: Vec<AbilityCaseCheckpointAbilityReward>,
52}
53
54#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify, Default)]
55pub struct AbilityCaseEvolveRule {
56 #[schemars(
58 title = "Редкость исходного шарда",
59 schema_with = "ability_rarity_link_id_schema"
60 )]
61 pub from_rarity_id: AbilityRarityId,
62
63 #[schemars(title = "Попытки evolve (маленькая крутка)")]
65 pub small_roll_tries: i64,
66
67 #[schemars(title = "Попытки evolve (большая крутка)")]
69 pub big_roll_tries: i64,
70
71 #[schemars(title = "Вероятности целевых редкостей")]
74 pub to_rarity_weights: Vec<AbilityCaseRarityWeight>,
75}
76
77#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify, Default)]
80pub struct BigRollShard {
81 #[schemars(
83 title = "Минимальная редкость шарда",
84 schema_with = "ability_rarity_link_id_schema"
85 )]
86 pub min_rarity_id: AbilityRarityId,
87
88 #[schemars(title = "Количество шардов")]
90 pub count: u8,
91}
92
93#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify)]
94pub struct AbilityCasesSettingsByLevel {
95 #[schemars(title = "Уровень сундука")]
96 pub level: i64,
97
98 #[schemars(
99 title = "Стоимость уровня",
100 description = "Кумулятивное количество круток для достижения уровня"
101 )]
102 pub opens_to_upgrade: i64,
103
104 #[schemars(title = "Граничный уровень")]
107 pub is_boundary_level: bool,
108
109 #[schemars(title = "Веса редкостей")]
110 pub rarity_weights: Vec<AbilityCaseRarityWeight>,
111
112 #[schemars(title = "Чекпоинты уровня")]
114 pub checkpoints: Vec<AbilityCaseCheckpointReward>,
115
116 #[schemars(
118 title = "Допустимые редкости вишлиста",
119 schema_with = "ability_rarity_link_id_array_schema"
120 )]
121 pub allowed_wishlist_rarity_ids: Vec<AbilityRarityId>,
122
123 #[schemars(title = "Правила evolve")]
125 pub evolve_rules: Vec<AbilityCaseEvolveRule>,
126
127 #[schemars(title = "Дополнительные валюты за большую крутку")]
129 pub big_roll_currency_rewards: Vec<CurrencyUnit>,
130
131 #[schemars(title = "Шарды большой крутки")]
134 pub big_roll_shards: Vec<BigRollShard>,
135}
136
137#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Tsify, JsonSchema)]
138pub struct AbilityLevel {
139 #[schemars(title = "Уровень способности")]
140 pub level: i64,
141 #[schemars(title = "Id редкости", schema_with = "ability_rarity_link_id_schema")]
142 pub rarity_id: AbilityRarityId,
143 #[schemars(
144 title = "Количество осколков для улучшения",
145 description = "Количество осколков, необходимое для улучшения уровня способности"
146 )]
147 pub required_shards: i64,
148}
149
150#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Tsify, JsonSchema)]
151pub struct Projectile {
152 #[schemars(schema_with = "id_schema")]
153 pub id: ProjectileId,
154 #[schemars(
155 title = "Скрипт начала каста проджектайла",
156 schema_with = "script_schema"
157 )]
158 pub start_script: String,
159 #[schemars(title = "Скрипт каста проджектайла", schema_with = "script_schema")]
160 pub script: String,
161 #[schemars(title = "VFX проджектайла", schema_with = "aa_vfx_projectile_schema")]
162 pub vfx: String,
163}