1use essences::currency::CurrencyId;
2use essences::items::AttributeId;
3use essences::statue::StatueBonusGradeId;
4use schema_loader::{
5 attribute_link_id_schema, currency_link_id_schema, statue_bonus_grade_id_schema,
6};
7use schemars::JsonSchema;
8use serde::{Deserialize, Serialize};
9use tsify_next::Tsify;
10
11use crate::validated_types::{NonEmptyVec, NonZeroU64, PositiveF64, PositiveI32, PositiveI64};
12
13#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify)]
15pub struct StatueBonusGradeWeight {
16 #[schemars(schema_with = "statue_bonus_grade_id_schema")]
17 pub grade_id: StatueBonusGradeId,
18
19 #[schemars(title = "Вес грейда")]
20 pub weight: PositiveF64,
21}
22
23#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify)]
26pub struct StatueBonusGradeValue {
27 #[schemars(schema_with = "statue_bonus_grade_id_schema")]
28 pub grade_id: StatueBonusGradeId,
29
30 #[schemars(title = "Значение бонуса (плоское значение)")]
31 pub value: PositiveI32,
32}
33
34#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify)]
36pub struct StatueBonusTypeConfig {
37 #[schemars(schema_with = "attribute_link_id_schema")]
38 pub attribute_id: AttributeId,
39
40 #[schemars(title = "Значения по грейдам")]
41 pub grade_values: NonEmptyVec<StatueBonusGradeValue>,
42}
43
44#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify)]
46pub struct StatueLevelConfig {
47 #[schemars(title = "Уровень статуи")]
48 pub level: i64,
49
50 #[schemars(title = "Необходимый опыт (суммарный)")]
51 pub required_experience: i64,
52
53 #[schemars(title = "Количество слотов")]
54 pub slot_count: NonZeroU64,
55
56 #[schemars(title = "Количество доступных сетов")]
57 pub sets_count: NonZeroU64,
58
59 #[schemars(title = "Веса грейдов при ролле на этом уровне")]
60 pub grade_weights: NonEmptyVec<StatueBonusGradeWeight>,
61}
62
63#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify)]
65pub struct StatueRollCostConfig {
66 #[schemars(title = "Количество заблокированных слотов")]
67 pub locked_count: u64,
68
69 #[schemars(title = "Стоимость ролла")]
70 pub cost: PositiveI64,
71}
72
73#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify)]
75pub struct StatueSettings {
76 #[schemars(title = "Валюта статуи", schema_with = "currency_link_id_schema")]
77 pub currency_id: CurrencyId,
78
79 #[schemars(title = "Стоимость ролла по количеству заблокированных слотов")]
80 pub roll_costs: NonEmptyVec<StatueRollCostConfig>,
81}