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, script_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(
43 title = "Скрипт для вычисления скорректированной силы союзника по пати",
44 description = "Принимает PlayerCharacterState и PartyCharacterState, возвращает i64",
45 schema_with = "script_schema"
46 )]
47 pub power_adjust_script: String,
48
49 #[schemars(title = "Стартовые координаты врага в pvp")]
50 pub pvp_enemy_start_position: Coordinates,
51}
52
53#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify)]
54pub struct PvpSettings {
55 #[schemars(
56 title = "Максимальное количество оппонентов",
57 description = "Максимальное количество оппонентов для отображения на экране подбора игроков"
58 )]
59 pub max_matchmaking_opponents_count: i64,
60
61 #[schemars(title = "Дельта уровня пользователя для матчмейкинга")]
62 pub matchmaking_character_level_data: i64,
63}
64
65#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, Tsify)]
66pub struct ArenaLeague {
67 #[schemars(schema_with = "id_schema")]
68 pub id: uuid::Uuid,
69
70 #[schemars(title = "Название лиги")]
71 pub name: i18n::I18nString,
72
73 #[schemars(title = "Минимальный рейтинг")]
74 pub min_rating: i64,
75
76 #[schemars(title = "Максимальный рейтинг")]
77 pub max_rating: i64,
78}
79
80#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, Tsify)]
81pub struct ArenaSettings {
82 #[schemars(title = "Базовый рейтинг пользователя")]
83 pub base_rating: u64,
84
85 #[schemars(
86 title = "Скрипт для вычисления изменения рейтинга при победе",
87 schema_with = "script_schema"
88 )]
89 pub win_rating_increase_script: String,
90
91 #[schemars(
92 title = "Скрипт для вычисления изменения рейтинга при поражении",
93 schema_with = "script_schema"
94 )]
95 pub lose_rating_increase_script: String,
96
97 #[schemars(title = "Количество последних матчей на экране истории")]
98 pub matches_history_size: u64,
99
100 #[schemars(title = "Размер таблицы лидеров")]
101 pub leaderboard_size: u64,
102
103 #[schemars(
104 title = "Идентификатор валюты pvp токенов",
105 schema_with = "currency_link_id_schema"
106 )]
107 pub arena_tickets_currency_id: CurrencyId,
108
109 #[schemars(title = "Максимальная разница между рейтингами игроков для подбора")]
110 pub matchmaking_character_rating_delta: u64,
111
112 #[schemars(title = "Кулдаун pvp")]
113 pub pvp_cooldown_secs: u64,
114
115 #[schemars(title = "Количество звезд за победу")]
116 pub win_stars_increase: i64,
117
118 #[schemars(title = "Количество звезд за поражение")]
119 pub lose_stars_decrease: i64,
120
121 #[schemars(title = "Количество звезд для получения награды")]
122 pub stars_reward_threshold: i64,
123
124 #[schemars(
125 title = "ID бандла награды за звезды",
126 schema_with = "bundle_id_schema"
127 )]
128 pub stars_reward_bundle_id: BundleId,
129
130 #[schemars(
131 title = "Валюта для покупки аренных билетов",
132 schema_with = "currency_link_id_schema"
133 )]
134 pub arena_ticket_buy_currency_id: CurrencyId,
135
136 #[schemars(title = "Стоимость покупки аренных билетов")]
137 pub arena_ticket_price: CurrencyUnit,
138
139 #[schemars(title = "Количество дней жизни матчей в базе данных")]
140 pub arena_matches_ttl_days: u64,
141
142 #[schemars(title = "Максимальное увеличение рейтинга в рематче")]
143 pub rematch_max_rating_increase: i64,
144
145 #[schemars(title = "Максимальное уменьшение рейтинга в рематче")]
146 pub rematch_max_rating_decrease: i64,
147
148 #[schemars(title = "Максимальное количество выдач наград за звезды в день")]
149 pub daily_stars_claims_limit: i64,
150}