1use essences::{
2 bundles::BundleId,
3 currency::{CurrencyId, CurrencyUnit},
4 entity::Coordinates,
5};
6
7use schema_loader::{bundle_id_schema, currency_link_id_schema, id_schema};
8use schemars::JsonSchema;
9
10use serde::{Deserialize, Serialize};
11use tsify_next::Tsify;
12
13#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify)]
14pub struct FightSettings {
15 #[schemars(
16 title = "Время ожидания перед стартом следующего боя в тиках",
17 description = "Это момент анимации перебежки персонажа между битвами"
18 )]
19 pub start_fight_delay_ticks_default: u64,
20
21 #[schemars(
22 title = "Время ожидания перед стартом уже начавшегося боя в случае победы",
23 description = "Это момент, когда враги выбегают на экран"
24 )]
25 pub prepare_fight_win_delay_ticks_default: u64,
26
27 #[schemars(
28 title = "Время ожидания перед стартом уже начавшегося боя в случае поражения",
29 description = "Это момент, когда враги выбегают на экран"
30 )]
31 pub prepare_fight_lose_delay_ticks_default: u64,
32
33 #[schemars(title = "Время ожидания перед окончанием боя")]
34 pub end_fight_delay_ticks_default: u64,
35
36 #[schemars(title = "Стартовые координаты игрока")]
37 pub player_start_position: Coordinates,
38
39 #[schemars(title = "Стартовые координаты союзника по пати")]
40 pub party_start_position: Coordinates,
41
42 #[schemars(title = "Стартовые координаты врага в pvp")]
43 pub pvp_enemy_start_position: Coordinates,
44}
45
46#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify)]
47pub struct PvpSettings {
48 #[schemars(
49 title = "Максимальное количество оппонентов",
50 description = "Максимальное количество оппонентов для отображения на экране подбора игроков"
51 )]
52 pub max_matchmaking_opponents_count: i64,
53
54 #[schemars(title = "Дельта уровня пользователя для матчмейкинга")]
55 pub matchmaking_character_level_data: i64,
56}
57
58#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, Tsify)]
59pub struct ArenaLeague {
60 #[schemars(schema_with = "id_schema")]
61 pub id: uuid::Uuid,
62
63 #[schemars(title = "Название лиги")]
64 pub name: i18n::I18nString,
65
66 #[schemars(title = "Минимальный рейтинг")]
67 pub min_rating: i64,
68
69 #[schemars(title = "Максимальный рейтинг")]
70 pub max_rating: i64,
71}
72
73#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, Tsify)]
74pub struct ArenaSettings {
75 #[schemars(title = "Базовый рейтинг пользователя")]
76 pub base_rating: u64,
77
78 #[schemars(title = "Количество последних матчей на экране истории")]
79 pub matches_history_size: u64,
80
81 #[schemars(title = "Размер таблицы лидеров")]
82 pub leaderboard_size: u64,
83
84 #[schemars(
85 title = "Идентификатор валюты pvp токенов",
86 schema_with = "currency_link_id_schema"
87 )]
88 pub arena_tickets_currency_id: CurrencyId,
89
90 #[schemars(title = "Максимальная разница между рейтингами игроков для подбора")]
91 pub matchmaking_character_rating_delta: u64,
92
93 #[schemars(title = "Кулдаун pvp")]
94 pub pvp_cooldown_secs: u64,
95
96 #[schemars(
97 title = "ID бандла награды за победу в арене",
98 schema_with = "bundle_id_schema"
99 )]
100 pub win_reward_bundle_id: BundleId,
101
102 #[schemars(
103 title = "ID бандла награды за поражение в арене",
104 schema_with = "bundle_id_schema"
105 )]
106 pub lose_reward_bundle_id: BundleId,
107
108 #[schemars(
109 title = "Валюта для покупки аренных билетов",
110 schema_with = "currency_link_id_schema"
111 )]
112 pub arena_ticket_buy_currency_id: CurrencyId,
113
114 #[schemars(title = "Стоимость покупки аренных билетов")]
115 pub arena_ticket_price: CurrencyUnit,
116
117 #[schemars(title = "Количество дней жизни матчей в базе данных")]
118 pub arena_matches_ttl_days: u64,
119
120 #[schemars(title = "Максимальное увеличение рейтинга в рематче")]
121 pub rematch_max_rating_increase: i64,
122
123 #[schemars(title = "Максимальное уменьшение рейтинга в рематче")]
124 pub rematch_max_rating_decrease: i64,
125}