1use essences::{
2 abilities::{AbilityCastType, AbilityFightUiVisibility, AbilityRarity, AbilityTemplate},
3 ability_presets, bundles, class,
4 currency::{Currency, CurrencyUnit},
5 dungeons::{DungeonTemplate, DungeonTip, RewardType},
6 effect::Effect,
7 entity::Coordinates,
8 fighting::{EntityTeam, EntityType, FightEntity, FightTemplate, FightType},
9 game::{
10 AbilitySlotsLevel, Chapter, CharacterLevel, EnemyReward, EntityAttribute, EntityTemplate,
11 PetSlotsLevel,
12 },
13 gatings::{CastleGating, Gatings, NavBarNavigation, SideBarNavigation},
14 generation::{
15 BotsSettings, PhotoGenerationSettings, UsernameGenerationSettings, UsersGeneratingSettings,
16 },
17 gift::{GiftTemplate, GiftType},
18 item_case::{
19 AutoChestSettings, InventoryLevel, ItemCaseRarityWeight, ItemCasesSettingsByLevel,
20 },
21 items::{Attribute, ItemAttributeSettings, ItemRarity, ItemTemplate, ItemType},
22 mail::{MailRepeatType, MailSendType, MailTemplate},
23 offers::{OfferTemplate, PaymentType, ShopTab, ShopTabConfig},
24 pets::{PetRarity, PetSecondaryStat, PetTemplate},
25 quest::{
26 QuestGroupType, QuestTemplate, QuestsProgressionPointSettings, QuestsProgressionSettings,
27 },
28 ratings::{RatingRangeReward, RatingSettings, RatingType},
29 referrals::ReferralLevelInfo,
30 skins::{ConfigSkin, SkinType, SkinsSettings},
31 vassals::VassalTaskTemplate,
32};
33
34use uuid::{Uuid, uuid};
35
36use enum_iterator::all;
37
38use crate::statue::{
39 StatueBonusGradeValue, StatueBonusGradeWeight, StatueBonusTypeConfig, StatueLevelConfig,
40 StatueRollCostConfig, StatueSettings,
41};
42use crate::validated_types::{
43 NonEmptyVec, NonZeroU64, PositiveF64, PositiveI32, PositiveI64, WeightMultiplier,
44};
45use crate::{
46 abilities::{
47 AbilityCaseCheckpointAbilityReward, AbilityCaseCheckpointReward, AbilityCaseEvolveRule,
48 AbilityCaseRarityWeight, AbilityCasesSettingsByLevel, AbilityLevel, BigRollShard,
49 Projectile,
50 },
51 ads_settings::{AdSpeedupConfig, AdsSettings, BirdAdConfig, BirdAdVariantWeight, BirdVariant},
52 afk_rewards::{
53 AfkRewardBonusType, AfkRewardBonusWeight, AfkRewardsByLevel, AfkRewardsSettings,
54 CurrencyRate,
55 },
56 buffs::{BuffEffect, BuffTemplate},
57 events::EventDescription,
58 fighting::{ArenaLeague, ArenaSettings, FightSettings, PvpSettings},
59 game_config::GameConfig,
60 game_settings::{DailyCurrencyReset, GameSettings},
61 matchmaking::{MatchmakingSettings, OpponentPositionSettings},
62 pets::{
63 PetBigRollShard, PetCaseCheckpointPetReward, PetCaseCheckpointReward, PetCaseRarityWeight,
64 PetCasesSettingsByLevel, PetLevel,
65 },
66 reports::ReportsSettings,
67 vassals::VassalsSettings,
68};
69use essences::statue::StatueBonusGrade;
70use essences::talent_tree::{
71 TalentAttributeBonus, TalentBackendModifier, TalentLevel, TalentPosition, TalentTemplate,
72 TalentTreeSettings, TalentUnlockCondition,
73};
74
75fn generate_attributes() -> Vec<Attribute> {
76 vec![
77 Attribute {
78 id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
79 name: i18n::I18nString::new(
80 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
81 ),
82 prefix: Some(i18n::I18nString::new(
83 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
84 )),
85 suffix: Some(i18n::I18nString::new(
86 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
87 )),
88 code: "hp".to_string(),
89 icon: "/hp_icon.webp".to_string(),
90 icon_path: "/hp_icon.webp".to_string(),
91 db_code: 0,
92 denominator: None,
93 is_percent: false,
94 calculation_script: "Random.randint(8, 14)".to_string(),
95 order: 0,
96 is_ui_visible: true,
97 description: i18n::I18nString::new(
98 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
99 ),
100 },
101 Attribute {
102 id: uuid!("6ad485d7-9567-4b77-8ddc-a2418dd1dfe6"),
103 name: i18n::I18nString::new(
104 "content.attributes.6ad485d7-9567-4b77-8ddc-a2418dd1dfe6:name",
105 ),
106 prefix: Some(i18n::I18nString::new(
107 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
108 )),
109 suffix: Some(i18n::I18nString::new(
110 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
111 )),
112 code: "damage".to_string(),
113 icon: "/damage_icon.webp".to_string(),
114 icon_path: "/damage_icon.webp".to_string(),
115 db_code: 1,
116 is_percent: false,
117 denominator: None,
118 calculation_script: "Random.randint(8, 14)".to_string(),
119 order: 1,
120 is_ui_visible: true,
121 description: i18n::I18nString::new(
122 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
123 ),
124 },
125 Attribute {
126 id: uuid!("3a6ec1c8-7494-43df-a345-d23e297b892d"),
127 name: i18n::I18nString::new(
128 "content.attributes.3a6ec1c8-7494-43df-a345-d23e297b892d:name",
129 ),
130 prefix: Some(i18n::I18nString::new(
131 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
132 )),
133 suffix: Some(i18n::I18nString::new(
134 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
135 )),
136 code: "strength".to_string(),
137 icon: "/strength_icon.webp".to_string(),
138 icon_path: "/strength_icon.webp".to_string(),
139 db_code: 2,
140 is_percent: false,
141 denominator: None,
142 calculation_script: "Random.randint(8, 14)".to_string(),
143 order: 2,
144 is_ui_visible: true,
145 description: i18n::I18nString::new(
146 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
147 ),
148 },
149 Attribute {
150 id: uuid!("42aea610-2ab7-41f7-95bf-5d6f00341ac9"),
151 name: i18n::I18nString::new(
152 "content.attributes.42aea610-2ab7-41f7-95bf-5d6f00341ac9:name",
153 ),
154 prefix: Some(i18n::I18nString::new(
155 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
156 )),
157 suffix: Some(i18n::I18nString::new(
158 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
159 )),
160 code: "agility".to_string(),
161 icon: "/agility_icon.webp".to_string(),
162 icon_path: "/agility_icon.webp".to_string(),
163 db_code: 3,
164 is_percent: false,
165 denominator: None,
166 calculation_script: "Random.randint(8, 14)".to_string(),
167 order: 3,
168 is_ui_visible: true,
169 description: i18n::I18nString::new(
170 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
171 ),
172 },
173 Attribute {
174 id: uuid!("f82eb3fa-8a09-44fb-b8ed-979cc2db28f4"),
175 name: i18n::I18nString::new(
176 "content.attributes.f82eb3fa-8a09-44fb-b8ed-979cc2db28f4:name",
177 ),
178 prefix: Some(i18n::I18nString::new(
179 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
180 )),
181 suffix: Some(i18n::I18nString::new(
182 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
183 )),
184 code: "armor".to_string(),
185 icon: "/armor_icon.webp".to_string(),
186 icon_path: "/armor_icon.webp".to_string(),
187 db_code: 4,
188 is_percent: false,
189 denominator: None,
190 calculation_script: "Random.randint(8, 14)".to_string(),
191 order: 4,
192 is_ui_visible: false,
193 description: i18n::I18nString::new(
194 "content.attributes.45eca0a7-7430-487b-bd65-b796c6d88c08:name",
195 ),
196 },
197 ]
198}
199
200fn generate_item_cases_settings() -> Vec<ItemCasesSettingsByLevel> {
201 vec![
202 ItemCasesSettingsByLevel {
203 level: 1,
204 required_chapter_level: 0,
205 upgrade_cost: vec![],
206 upgrade_time_secs: 600,
207 rarity_weights: vec![
208 ItemCaseRarityWeight {
209 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
210 weight: 512.0,
211 },
212 ItemCaseRarityWeight {
213 rarity_id: uuid!("272f3e73-6b3e-43a0-88d6-d34bdaf5aeae"),
214 weight: 256.0,
215 },
216 ItemCaseRarityWeight {
217 rarity_id: uuid!("c45eed5f-ad7e-4af0-b0a5-46b311573bf4"),
218 weight: 128.0,
219 },
220 ItemCaseRarityWeight {
221 rarity_id: uuid!("a9a0575f-9d09-4118-b305-14e927817302"),
222 weight: 64.0,
223 },
224 ItemCaseRarityWeight {
225 rarity_id: uuid!("19e2db05-5f17-4d89-9732-924134056776"),
226 weight: 32.0,
227 },
228 ItemCaseRarityWeight {
229 rarity_id: uuid!("9d662020-0929-439b-8afa-f286b72070a9"),
230 weight: 16.0,
231 },
232 ItemCaseRarityWeight {
233 rarity_id: uuid!("363dded9-e5a4-4bb9-bde6-63037d808246"),
234 weight: 8.0,
235 },
236 ItemCaseRarityWeight {
237 rarity_id: uuid!("9e1842cc-4192-4332-8c13-0f901ca442a4"),
238 weight: 4.0,
239 },
240 ItemCaseRarityWeight {
241 rarity_id: uuid!("d59e98d8-fc7d-4b8b-9da0-a374400df154"),
242 weight: 0.0,
243 },
244 ItemCaseRarityWeight {
245 rarity_id: uuid!("c0d049eb-359e-4b1e-9de2-eda276043ea8"),
246 weight: 0.0,
247 },
248 ],
249 auto_chest_settings: AutoChestSettings { max_batch_size: 2 },
250 },
251 ItemCasesSettingsByLevel {
252 level: 2,
253 required_chapter_level: 0,
254 upgrade_cost: vec![CurrencyUnit {
255 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
256 amount: 20,
257 }],
258 upgrade_time_secs: 600,
259 rarity_weights: vec![
260 ItemCaseRarityWeight {
261 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
262 weight: 256.0,
263 },
264 ItemCaseRarityWeight {
265 rarity_id: uuid!("272f3e73-6b3e-43a0-88d6-d34bdaf5aeae"),
266 weight: 256.0,
267 },
268 ItemCaseRarityWeight {
269 rarity_id: uuid!("c45eed5f-ad7e-4af0-b0a5-46b311573bf4"),
270 weight: 128.0,
271 },
272 ItemCaseRarityWeight {
273 rarity_id: uuid!("a9a0575f-9d09-4118-b305-14e927817302"),
274 weight: 64.0,
275 },
276 ItemCaseRarityWeight {
277 rarity_id: uuid!("19e2db05-5f17-4d89-9732-924134056776"),
278 weight: 32.0,
279 },
280 ItemCaseRarityWeight {
281 rarity_id: uuid!("9d662020-0929-439b-8afa-f286b72070a9"),
282 weight: 16.0,
283 },
284 ItemCaseRarityWeight {
285 rarity_id: uuid!("363dded9-e5a4-4bb9-bde6-63037d808246"),
286 weight: 8.0,
287 },
288 ItemCaseRarityWeight {
289 rarity_id: uuid!("9e1842cc-4192-4332-8c13-0f901ca442a4"),
290 weight: 4.0,
291 },
292 ItemCaseRarityWeight {
293 rarity_id: uuid!("d59e98d8-fc7d-4b8b-9da0-a374400df154"),
294 weight: 0.0,
295 },
296 ItemCaseRarityWeight {
297 rarity_id: uuid!("c0d049eb-359e-4b1e-9de2-eda276043ea8"),
298 weight: 0.0,
299 },
300 ],
301 auto_chest_settings: AutoChestSettings { max_batch_size: 2 },
302 },
303 ItemCasesSettingsByLevel {
304 level: 3,
305 required_chapter_level: 5,
306 upgrade_cost: vec![CurrencyUnit {
307 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
308 amount: 20,
309 }],
310 upgrade_time_secs: 600,
311 rarity_weights: vec![
312 ItemCaseRarityWeight {
313 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
314 weight: 256.0,
315 },
316 ItemCaseRarityWeight {
317 rarity_id: uuid!("272f3e73-6b3e-43a0-88d6-d34bdaf5aeae"),
318 weight: 256.0,
319 },
320 ItemCaseRarityWeight {
321 rarity_id: uuid!("c45eed5f-ad7e-4af0-b0a5-46b311573bf4"),
322 weight: 128.0,
323 },
324 ItemCaseRarityWeight {
325 rarity_id: uuid!("a9a0575f-9d09-4118-b305-14e927817302"),
326 weight: 64.0,
327 },
328 ItemCaseRarityWeight {
329 rarity_id: uuid!("19e2db05-5f17-4d89-9732-924134056776"),
330 weight: 32.0,
331 },
332 ItemCaseRarityWeight {
333 rarity_id: uuid!("9d662020-0929-439b-8afa-f286b72070a9"),
334 weight: 16.0,
335 },
336 ItemCaseRarityWeight {
337 rarity_id: uuid!("363dded9-e5a4-4bb9-bde6-63037d808246"),
338 weight: 8.0,
339 },
340 ItemCaseRarityWeight {
341 rarity_id: uuid!("9e1842cc-4192-4332-8c13-0f901ca442a4"),
342 weight: 4.0,
343 },
344 ItemCaseRarityWeight {
345 rarity_id: uuid!("d59e98d8-fc7d-4b8b-9da0-a374400df154"),
346 weight: 2.0,
347 },
348 ItemCaseRarityWeight {
349 rarity_id: uuid!("c0d049eb-359e-4b1e-9de2-eda276043ea8"),
350 weight: 1.0,
351 },
352 ],
353 auto_chest_settings: AutoChestSettings { max_batch_size: 3 },
354 },
355 ]
356}
357
358fn generate_game_settings() -> GameSettings {
359 GameSettings {
360 loyalty_decrease_script: "TimePassedSec * 4".to_string(),
361 character_power_calculate_script: "1".to_string(),
362 item_power_calculate_script: "10".to_string(),
363 item_price_calculation_expression: "Result.push(CurrencyUnit(uuid(\"b59b33a2-4d19-4e2c-9cea-e03ea15882a0\"), 10))".to_string(),
364 item_experience_calculation_expression: "50".to_string(),
365 required_attributes: vec![
366 uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
367 uuid!("6ad485d7-9567-4b77-8ddc-a2418dd1dfe6"),
368 ],
369 resist_task_id: uuid!("05e915bf-55fe-4419-bcf0-5f90833f17bd"),
370 hp_attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
371 time_skip_ticket_currency_id: uuid!("22297520-abb8-45b9-9fbb-c418b8001246"),
372 chest_upgrade_skip_ticket_skips_sec: 750,
373 chest_upgrade_skip_currency_id: uuid!("6c050b07-5282-4a23-8bbf-dabecd27cade"),
374 chest_upgrade_skip_currency_skips_sec: 400,
375 get_default_loop_task_id: "if CustomValues[\"loop_task\"] == 0 {uuid(\"305300e2-f432-4cbf-ad46-85386a9a9410\")} else {uuid(\"29540ca2-21f3-4f0e-a478-240adafed4e3\")}".to_string(),
376 fast_equip_abilities_script: "for ability in Abilities {if Result.len() == Slots {break;} Result.push(ability.template_id)}".to_string(),
377 fast_equip_pets_script: "for pet in Pets {if Result.len() == signed(Slots) {break;} Result.push(pet.template_id)}".to_string(),
378 ability_gacha: crate::game_settings::AbilityGachaSettings {
379 currency_id: uuid!("22297520-abb8-45b9-9fbb-c418b8001246"),
380 roll_price_in_diamonds: PositiveI64::new(2),
381 small_roll_cost: PositiveI64::new(3),
382 big_roll_cost: PositiveI64::new(10),
383 big_roll_bonus_drops: 1,
384 wishlist_slots: 5,
385 wishlist_weight_multiplier: WeightMultiplier::new(2.0),
386 slot_upgrade_currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
387 slot_max_level: PositiveI64::new(6),
388 slot_level_costs: vec![PositiveI64::new(100), PositiveI64::new(200), PositiveI64::new(300), PositiveI64::new(400), PositiveI64::new(500), PositiveI64::new(600)],
389 slot_level_bonus_levels: vec![0, 1, 2, 3, 4, 5, 6],
390 },
391 item_case_currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
392 initial_class_id: uuid!("5956e37c-ca7f-45cf-8bfb-49601dc9aca3"),
393 chat_message_ttl_secs: 3600,
394 currency_ids_to_show: vec![
395 uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
396 uuid!("22297520-abb8-45b9-9fbb-c418b8001246"),
397 uuid!("6c050b07-5282-4a23-8bbf-dabecd27cade"),
398 ],
399 auto_chest_pause_duration_ticks: 20,
400 arena_fight_template_id: uuid!("360fc654-dea1-4f5d-97af-249ab30608ac"),
401 vassal_fight_id: uuid!("b92c69a2-6544-4b83-809f-5af290b75473"),
402 fight_progress_tick: 1000,
403 db_power_update_frequency: 2,
404 deleted_user_username: "Deleted".to_owned(),
405 diamond_currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
406 username_change_cooldown_sec: 604800,
407 username_min_length: 3,
408 username_max_length: 32,
409 dungeons_keys_reset_amount: 2,
410 daily_currency_resets: vec![
411 DailyCurrencyReset {
412 currency_id: uuid!("6c050b07-5282-4a23-8bbf-dabecd27cade"),
413 reset_amount: 5,
414 },
415 ],
416 pet_gacha: crate::game_settings::PetGachaSettings {
417 currency_id: uuid!("22297520-abb8-45b9-9fbb-c418b8001246"),
418 roll_price_in_diamonds: PositiveI64::new(2),
419 small_roll_cost: PositiveI64::new(3),
420 big_roll_cost: PositiveI64::new(10),
421 big_roll_bonus_drops: 1,
422 wishlist_slots: 5,
423 wishlist_weight_multiplier: WeightMultiplier::new(2.0),
424 },
425 chest_item_choose_script: "if CharacterState.character.custom_values[\"use_chest_script\"] == 1 {some_uuid(uuid(\"8c7cdde1-e80b-4b40-a5d8-039bf39db419\"))} else {none_uuid()}".to_string(),
426 default_shop_tab: ShopTab::DailyDeals,
427 }
428}
429
430fn generate_ads_settings() -> AdsSettings {
431 AdsSettings {
432 chest_upgrade_speedup: AdSpeedupConfig {
433 speedup_seconds: 300,
434 cooldown_sec: 5,
435 daily_limit: 3,
436 },
437 talent_upgrade_speedup: AdSpeedupConfig {
438 speedup_seconds: 300,
439 cooldown_sec: 5,
440 daily_limit: 3,
441 },
442 free_ability_case_cooldown_sec: 86400,
443 skill_gacha_ad_daily_limit: 3,
444 skill_gacha_ad_rolls: 3,
445 pet_gacha_ad_daily_limit: 3,
446 pet_gacha_ad_rolls: 3,
447 afk_boost_ad_daily_limit: 1,
448 afk_boost_multiplier: 1.5,
449 daily_booster_ad_daily_limit: 1,
450 daily_booster_ad_buff_template_id: uuid!("b2c3d4e5-f6a7-8901-bcde-f12345678901"),
451 daily_booster_ad_buff_duration: 3600,
452 arena_refresh_ad_daily_limit: 3,
453 dungeon_raid_ad_daily_limit: 2,
454 bird_ad: BirdAdConfig {
455 daily_limit: 5,
456 cooldown_sec: 60,
457 post_show_cooldown_sec: 10,
458 flight_duration_sec: 8,
459 variants: vec![
460 BirdAdVariantWeight {
461 variant_id: uuid!("d1e2f3a4-b5c6-7890-abcd-ef1234567891"),
462 weight: 70,
463 },
464 BirdAdVariantWeight {
465 variant_id: uuid!("d1e2f3a4-b5c6-7890-abcd-ef1234567892"),
466 weight: 30,
467 },
468 ],
469 },
470 }
471}
472
473fn generate_item_rarities() -> Vec<ItemRarity> {
474 vec![
475 ItemRarity {
476 id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
477 name: i18n::I18nString::new(
478 "content.item_rarities.8c8acba2-67d3-40e0-ac62-2f7acce64ccc:name",
479 ),
480 rarity_icon: "2b51dc17-022f-404d-a31b-6a7fe1d8603a.png".to_string(),
481 rarity_icon_path: "2b51dc17-022f-404d-a31b-6a7fe1d8603a.png".to_string(),
482 text_color: "#E9E9D4".to_string(),
483 ribbon_icon: "".to_string(),
484 ribbon_icon_path: "".to_string(),
485 order: 1,
486 },
487 ItemRarity {
488 id: uuid!("272f3e73-6b3e-43a0-88d6-d34bdaf5aeae"),
489 name: i18n::I18nString::new(
490 "content.item_rarities.272f3e73-6b3e-43a0-88d6-d34bdaf5aeae:name",
491 ),
492 rarity_icon: "df3529d5-9a9a-4399-9f16-34ea61b66c93.png".to_string(),
493 rarity_icon_path: "df3529d5-9a9a-4399-9f16-34ea61b66c93.png".to_string(),
494 text_color: "#36DB89".to_string(),
495 ribbon_icon: "".to_string(),
496 ribbon_icon_path: "".to_string(),
497 order: 2,
498 },
499 ItemRarity {
500 id: uuid!("c45eed5f-ad7e-4af0-b0a5-46b311573bf4"),
501 name: i18n::I18nString::new(
502 "content.item_rarities.c45eed5f-ad7e-4af0-b0a5-46b311573bf4:name",
503 ),
504 rarity_icon: "28d57678-8db0-4870-9791-1899b7228f96.png".to_string(),
505 rarity_icon_path: "28d57678-8db0-4870-9791-1899b7228f96.png".to_string(),
506 text_color: "#399AE1".to_string(),
507 ribbon_icon: "".to_string(),
508 ribbon_icon_path: "".to_string(),
509 order: 3,
510 },
511 ItemRarity {
512 id: uuid!("a9a0575f-9d09-4118-b305-14e927817302"),
513 name: i18n::I18nString::new(
514 "content.item_rarities.a9a0575f-9d09-4118-b305-14e927817302:name",
515 ),
516 rarity_icon: "b08a1167-c58d-42a4-8230-576c3b69063c.png".to_string(),
517 rarity_icon_path: "b08a1167-c58d-42a4-8230-576c3b69063c.png".to_string(),
518 text_color: "#CC34E3".to_string(),
519 ribbon_icon: "".to_string(),
520 ribbon_icon_path: "".to_string(),
521 order: 4,
522 },
523 ItemRarity {
524 id: uuid!("19e2db05-5f17-4d89-9732-924134056776"),
525 name: i18n::I18nString::new(
526 "content.item_rarities.19e2db05-5f17-4d89-9732-924134056776:name",
527 ),
528 rarity_icon: "1edfd7ed-8945-4c95-8bd5-40ba9422d7c2.png".to_string(),
529 rarity_icon_path: "1edfd7ed-8945-4c95-8bd5-40ba9422d7c2.png".to_string(),
530 text_color: "#FDCA5B".to_string(),
531 ribbon_icon: "".to_string(),
532 ribbon_icon_path: "".to_string(),
533 order: 5,
534 },
535 ItemRarity {
536 id: uuid!("9d662020-0929-439b-8afa-f286b72070a9"),
537 name: i18n::I18nString::new(
538 "content.item_rarities.9d662020-0929-439b-8afa-f286b72070a9:name",
539 ),
540 rarity_icon: "60b73aa0-c1dd-4bac-9efe-ebc25030dbef.png".to_string(),
541 rarity_icon_path: "60b73aa0-c1dd-4bac-9efe-ebc25030dbef.png".to_string(),
542 text_color: "#F78B46".to_string(),
543 ribbon_icon: "".to_string(),
544 ribbon_icon_path: "".to_string(),
545 order: 6,
546 },
547 ItemRarity {
548 id: uuid!("363dded9-e5a4-4bb9-bde6-63037d808246"),
549 name: i18n::I18nString::new(
550 "content.item_rarities.363dded9-e5a4-4bb9-bde6-63037d808246:name",
551 ),
552 rarity_icon: "59126b12-2d5c-45f4-8f58-1283f6ba9ccd.png".to_string(),
553 rarity_icon_path: "59126b12-2d5c-45f4-8f58-1283f6ba9ccd.png".to_string(),
554 text_color: "#ED581D".to_string(),
555 ribbon_icon: "".to_string(),
556 ribbon_icon_path: "".to_string(),
557 order: 7,
558 },
559 ItemRarity {
560 id: uuid!("9e1842cc-4192-4332-8c13-0f901ca442a4"),
561 name: i18n::I18nString::new(
562 "content.item_rarities.9e1842cc-4192-4332-8c13-0f901ca442a4:name",
563 ),
564 rarity_icon: "5dbec395-33dd-43da-b35a-8d1262409c9d.png".to_string(),
565 rarity_icon_path: "5dbec395-33dd-43da-b35a-8d1262409c9d.png".to_string(),
566 text_color: "#FA91FF".to_string(),
567 ribbon_icon: "".to_string(),
568 ribbon_icon_path: "".to_string(),
569 order: 8,
570 },
571 ItemRarity {
572 id: uuid!("d59e98d8-fc7d-4b8b-9da0-a374400df154"),
573 name: i18n::I18nString::new(
574 "content.item_rarities.d59e98d8-fc7d-4b8b-9da0-a374400df154:name",
575 ),
576 rarity_icon: "0d0a6bfa-d2db-40bc-88c9-3bce4472e376.png".to_string(),
577 rarity_icon_path: "0d0a6bfa-d2db-40bc-88c9-3bce4472e376.png".to_string(),
578 text_color: "#5FECF3".to_string(),
579 ribbon_icon: "".to_string(),
580 ribbon_icon_path: "".to_string(),
581 order: 9,
582 },
583 ItemRarity {
584 id: uuid!("c0d049eb-359e-4b1e-9de2-eda276043ea8"),
585 name: i18n::I18nString::new(
586 "content.item_rarities.c0d049eb-359e-4b1e-9de2-eda276043ea8:name",
587 ),
588 rarity_icon: "b4e58214-77c1-45fa-a1ec-260c1e76b5cd.png".to_string(),
589 rarity_icon_path: "b4e58214-77c1-45fa-a1ec-260c1e76b5cd.png".to_string(),
590 text_color: "#E73636".to_string(),
591 ribbon_icon: "".to_string(),
592 ribbon_icon_path: "".to_string(),
593 order: 10,
594 },
595 ]
596}
597
598fn generate_effects() -> Vec<Effect> {
599 vec![
600 Effect {
601 id: uuid!("ccc47912-61c0-4efa-88f9-7911fa1b074f"),
602 name: i18n::I18nString::new(
603 "content.effects.ccc47912-61c0-4efa-88f9-7911fa1b074f:name",
604 ),
605 script: r#"if Entity.attributes["bloodleak"] != () {
606 Result.push(OverlordEventDamage(Entity.id, unsigned(Entity.attributes["bloodleak"]), CustomEventData()));
607 Result.push(OverlordEventEntityIncrAttribute(Entity.id, "bloodleak", -5));
608 }"#.into(),
609 icon_url: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
610 interval_ticks: Some(5000),
611 required_attributes: Some(vec!["bloodleak".to_string()]),
612 events_subscribe: None,
613 positive: false,
614 code: "".into(),
615 icon: "".into(),
616 },
617 Effect {
618 id: uuid!("3b136901-137c-47cc-8c7e-bc0ce387eb1c"),
619 name: i18n::I18nString::new(
620 "content.effects.3b136901-137c-47cc-8c7e-bc0ce387eb1c:name",
621 ),
622 script: r#"if type_of(Event) == "OverlordEventDamage" {
623 if Event.entity_id == Entity.id {
624 if Entity.hp - Event.damage < unsigned(5) {
625 Result.push(OverlordEventHeal(Entity.id, unsigned(100)));
626 }
627 }
628 }"#.into(),
629 icon_url: "8e991eae-e001-4a76-8238-277c38b35889.webp".to_string(),
630 interval_ticks: None,
631 required_attributes: None,
632 events_subscribe: Some(vec!["Damage".to_string()]),
633 positive: true,
634 code: "".into(),
635 icon: "".into(),
636 },
637 Effect {
638 id: uuid!("39f135d2-b930-42a7-abfa-f1ec49f3cc00"),
639 name: i18n::I18nString::new(
640 "content.effects.3b136901-137c-47cc-8c7e-bc0ce387eb1c:name",
641 ),
642 script: r#"if type_of(Event) == "OverlordEventEntityDeath" {
643 Result.push(
644 spawn_entity(
645 uuid("0486f548-5040-4b70-b202-8b35a9880939"),
646 Coordinates(Entity.coordinates.x + 1, Entity.coordinates.y + 1),
647 EntityTeam("Enemy"),
648 false,
649 EntityAttributes(),
650 Random
651 )
652 );
653 Result.push(
654 spawn_entity(
655 uuid("0486f548-5040-4b70-b202-8b35a9880939"),
656 Coordinates(Entity.coordinates.x + 1, Entity.coordinates.y + 2),
657 EntityTeam("Enemy"),
658 false,
659 EntityAttributes(),
660 Random
661 )
662 );
663 }"#.into(),
664 icon_url: "8e991eae-e001-4a76-8238-277c38b35889.webp".to_string(),
665 interval_ticks: None,
666 required_attributes: None,
667 events_subscribe: Some(vec!["EntityDeath".to_string()]),
668 positive: true,
669 code: "".into(),
670 icon: "".into(),
671 },
672 ]
673}
674
675fn generate_start_ability_script() -> String {
676 r#"for entity in Fight.entities {
677 if entity.team.str != CasterEntity.team.str {
678 Result.push_attack(unsigned(0), unsigned(500), entity.id);
679 break;
680 }
681 }"#
682 .into()
683}
684
685fn generate_ability_script() -> String {
686 r#"Result.push(OverlordEventDamage(TargetEntity.id, unsigned(5), CustomEventData()));"#.into()
687}
688
689fn generate_abilities() -> Vec<AbilityTemplate> {
690 let start_script = generate_start_ability_script();
691 let ability_script = generate_ability_script();
692 vec![
693 AbilityTemplate {
694 id: uuid!("da6c582b-7364-40bd-9b2d-946d8e20eaac"),
695 is_fight_ui_visible: false,
696 fight_ui_visibility: AbilityFightUiVisibility::Hidden,
697 name: i18n::I18nString::new(
698 "content.abilities.da6c582b-7364-40bd-9b2d-946d8e20eaac:name",
699 ),
700 start_script: start_script.clone(),
701 script: ability_script.clone(),
702 icon_url: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
703 icon_path: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
704 cooldown: 10000,
705 is_gacha_ability: false,
706 rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
707 description: i18n::I18nString::new(
708 "content.abilities.da6c582b-7364-40bd-9b2d-946d8e20eaac:description",
709 ),
710 description_values_script: Some("Result.push(1); Result.push(100)".to_string()),
711 vfx_object_path: "".into(),
712 cast_type: AbilityCastType::default(),
713 },
714 AbilityTemplate {
715 id: uuid!("7e584338-057d-41a2-a80e-8e2c76e98f6a"),
716 is_fight_ui_visible: true,
717 fight_ui_visibility: AbilityFightUiVisibility::Slotted,
718 name: i18n::I18nString::new(
719 "content.abilities.7e584338-057d-41a2-a80e-8e2c76e98f6a:name",
720 ),
721 start_script: start_script.clone(),
722 script: ability_script.clone(),
723 icon_url: "8e991eae-e001-4a76-8238-277c38b35889.webp".to_string(),
724 icon_path: "8e991eae-e001-4a76-8238-277c38b35889.webp".to_string(),
725 cooldown: 30000,
726 is_gacha_ability: true,
727 rarity_id: uuid!("81b082cc-2736-4545-87d1-301f5de8951a"),
728 description: i18n::I18nString::new(
729 "content.abilities.7e584338-057d-41a2-a80e-8e2c76e98f6a:description",
730 ),
731 description_values_script: Some(
732 "Result.push(2); Result.push(200); Result.push(20000)".to_string(),
733 ),
734 vfx_object_path: "".into(),
735 cast_type: AbilityCastType::default(),
736 },
737 AbilityTemplate {
738 id: uuid!("487a23e5-7401-4c34-a6c6-2401f95249cf"),
739 is_fight_ui_visible: true,
740 fight_ui_visibility: AbilityFightUiVisibility::Slotted,
741 name: i18n::I18nString::new(
742 "content.abilities.487a23e5-7401-4c34-a6c6-2401f95249cf:name",
743 ),
744 start_script: start_script.clone(),
745 script: ability_script.clone(),
746 icon_url: "2cd222a0-1a1a-42d2-b553-7d3754b08e0d.webp".to_string(),
747 icon_path: "2cd222a0-1a1a-42d2-b553-7d3754b08e0d.webp".to_string(),
748 cooldown: 15000,
749 is_gacha_ability: true,
750 rarity_id: uuid!("6f0f1099-8ab1-4378-aea5-ac6bcbe6ec3e"),
751 description: i18n::I18nString::new(
752 "content.abilities.487a23e5-7401-4c34-a6c6-2401f95249cf:description",
753 ),
754 description_values_script: Some("Result.push(3);".to_string()),
755 vfx_object_path: "".into(),
756 cast_type: AbilityCastType::default(),
757 },
758 AbilityTemplate {
759 id: uuid!("fd053ec6-8b23-4ba1-a31f-31b56d8c57bc"),
760 is_fight_ui_visible: true,
761 fight_ui_visibility: AbilityFightUiVisibility::Slotted,
762 name: i18n::I18nString::new(
763 "content.abilities.fd053ec6-8b23-4ba1-a31f-31b56d8c57bc:name",
764 ),
765 start_script: start_script.clone(),
766 script: ability_script.clone(),
767 icon_url: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
768 icon_path: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
769 cooldown: 10000,
770 is_gacha_ability: true,
771 rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
772 description: i18n::I18nString::new(
773 "content.abilities.fd053ec6-8b23-4ba1-a31f-31b56d8c57bc:description",
774 ),
775 description_values_script: None,
776 vfx_object_path: "".into(),
777 cast_type: AbilityCastType::default(),
778 },
779 AbilityTemplate {
780 id: uuid!("50260b1c-7748-49bf-a1ed-34d69d029697"),
781 is_fight_ui_visible: true,
782 fight_ui_visibility: AbilityFightUiVisibility::Slotted,
783 name: i18n::I18nString::new(
784 "content.abilities.50260b1c-7748-49bf-a1ed-34d69d029697:name",
785 ),
786 start_script: start_script.clone(),
787 script: r#"
788 Result.push(OverlordEventEntityIncrAttribute(TargetEntity.id, "bloodleak", 10));
789 Result.push(OverlordEventEntityApplyEffect(TargetEntity.id, uuid("ccc47912-61c0-4efa-88f9-7911fa1b074f")));
790 "#.into(),
791 icon_url: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
792 icon_path: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
793 cooldown: 10000,
794 is_gacha_ability: false,
795 rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
796 description: i18n::I18nString::new(
797 "content.abilities.50260b1c-7748-49bf-a1ed-34d69d029697:description",
798 ),
799 description_values_script: Some("Result.push(5); Result.push(500)".to_string()),
800 vfx_object_path: "".into(),
801 cast_type: AbilityCastType::default(),
802 },
803 AbilityTemplate {
804 id: uuid!("41ee5532-a293-4f88-bfb6-5ffca1e57acc"),
805 is_fight_ui_visible: true,
806 fight_ui_visibility: AbilityFightUiVisibility::Slotted,
807 name: i18n::I18nString::new(
808 "content.abilities.41ee5532-a293-4f88-bfb6-5ffca1e57acc:name",
809 ),
810 start_script: "Result.push_attack(unsigned(0), unsigned(500), CasterEntity.id);".into(),
811 script: r#"Result.push(OverlordEventEntityApplyEffect(Event.by_entity_id, uuid("3b136901-137c-47cc-8c7e-bc0ce387eb1c")));"#.into(),
812 icon_url: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
813 icon_path: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
814 cooldown: 10000,
815 is_gacha_ability: false,
816 rarity_id: uuid!("81b082cc-2736-4545-87d1-301f5de8951a"),
817 description: i18n::I18nString::new(
818 "content.abilities.41ee5532-a293-4f88-bfb6-5ffca1e57acc:description",
819 ),
820 description_values_script: Some("Result.push(6); Result.push(600)".to_string()),
821 vfx_object_path: "".into(),
822 cast_type: AbilityCastType::default(),
823 },
824 AbilityTemplate {
825 id: uuid!("9f8e7d6c-5b4a-3c2d-1e0f-9a8b7c6d5e4f"),
826 is_fight_ui_visible: true,
827 fight_ui_visibility: AbilityFightUiVisibility::Slotted,
828 name: i18n::I18nString::new(
829 "content.abilities.9f8e7d6c-5b4a-3c2d-1e0f-9a8b7c6d5e4f:name",
830 ),
831 start_script: r#"for entity in Fight.entities {
832 if entity.team.str != CasterEntity.team.str {
833 Result.push_attack(unsigned(0), unsigned(500), entity.id);
834 break;
835 }
836 }"#
837 .into(),
838 script: ability_script.clone(),
839 icon_url: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
840 icon_path: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
841 cooldown: 0,
842 is_gacha_ability: true,
843 rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
844 description: i18n::I18nString::new(
845 "content.abilities.9f8e7d6c-5b4a-3c2d-1e0f-9a8b7c6d5e4f:description",
846 ),
847 description_values_script: Some("Result.push(7); Result.push(700)".to_string()),
848 vfx_object_path: "".into(),
849 cast_type: AbilityCastType::default(),
850 },
851 AbilityTemplate {
852 id: uuid!("59e317c9-0108-4eb0-a41f-9d513b821542"),
853 is_fight_ui_visible: true,
854 fight_ui_visibility: AbilityFightUiVisibility::Class,
855 name: i18n::I18nString::new(
856 "content.abilities.59e317c9-0108-4eb0-a41f-9d513b821542:name",
857 ),
858 start_script: start_script.clone(),
859 script: ability_script.clone(),
860 icon_url: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
861 icon_path: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
862 cooldown: 10000000000000,
863 is_gacha_ability: false,
864 rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
865 description: i18n::I18nString::new(
866 "content.abilities.59e317c9-0108-4eb0-a41f-9d513b821542:description",
867 ),
868 description_values_script: Some("Result.push(1); Result.push(100)".to_string()),
869 vfx_object_path: "".into(),
870 cast_type: AbilityCastType::default(),
871 },
872 AbilityTemplate {
873 id: uuid!("c9c291ea-8a10-4bab-99df-ff0dc40e66f6"),
874 is_fight_ui_visible: true,
875 fight_ui_visibility: AbilityFightUiVisibility::Slotted,
876 name: i18n::I18nString::new(
877 "content.abilities.fd053ec6-8b23-4ba1-a31f-31b56d8c57bc:name",
878 ),
879 start_script: start_script.clone(),
880 script: ability_script.clone(),
881 icon_url: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
882 icon_path: "18789966-dfbb-445a-8ec1-c55397604203.webp".to_string(),
883 cooldown: 0,
884 is_gacha_ability: true,
885 rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
886 description: i18n::I18nString::new(
887 "content.abilities.fd053ec6-8b23-4ba1-a31f-31b56d8c57bc:description",
888 ),
889 description_values_script: None,
890 vfx_object_path: "".into(),
891 cast_type: AbilityCastType::default(),
892 },
893 ]
894}
895
896fn generate_ability_cases_settings() -> NonEmptyVec<AbilityCasesSettingsByLevel> {
897 NonEmptyVec::new(vec![
898 AbilityCasesSettingsByLevel {
899 level: 1,
900 opens_to_upgrade: 0,
901 is_boundary_level: false,
902 rarity_weights: vec![
903 AbilityCaseRarityWeight {
904 rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
905 weight: PositiveF64::new(256.0),
906 },
907 AbilityCaseRarityWeight {
908 rarity_id: uuid!("6f0f1099-8ab1-4378-aea5-ac6bcbe6ec3e"),
909 weight: PositiveF64::new(128.0),
910 },
911 AbilityCaseRarityWeight {
912 rarity_id: uuid!("81b082cc-2736-4545-87d1-301f5de8951a"),
913 weight: PositiveF64::new(64.0),
914 },
915 ],
916 checkpoints: vec![AbilityCaseCheckpointReward {
917 required_opens: 1,
918 currency_rewards: vec![],
919 ability_rewards: vec![AbilityCaseCheckpointAbilityReward {
920 amount: 1,
921 min_rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
922 }],
923 }],
924 allowed_wishlist_rarity_ids: vec![
925 uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
926 uuid!("6f0f1099-8ab1-4378-aea5-ac6bcbe6ec3e"),
927 ],
928 evolve_rules: vec![AbilityCaseEvolveRule {
929 from_rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
930 small_roll_tries: 1,
931 big_roll_tries: 1,
932 to_rarity_weights: vec![AbilityCaseRarityWeight {
933 rarity_id: uuid!("6f0f1099-8ab1-4378-aea5-ac6bcbe6ec3e"),
934 weight: PositiveF64::new(1.0),
935 }],
936 }],
937 big_roll_currency_rewards: vec![],
938 big_roll_shards: vec![
939 BigRollShard {
940 min_rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
941 count: 7,
942 },
943 BigRollShard {
944 min_rarity_id: uuid!("6f0f1099-8ab1-4378-aea5-ac6bcbe6ec3e"),
945 count: 3,
946 },
947 BigRollShard {
948 min_rarity_id: uuid!("81b082cc-2736-4545-87d1-301f5de8951a"),
949 count: 1,
950 },
951 ],
952 },
953 AbilityCasesSettingsByLevel {
954 level: 2,
955 opens_to_upgrade: 10,
956 is_boundary_level: false,
957 rarity_weights: vec![
958 AbilityCaseRarityWeight {
959 rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
960 weight: PositiveF64::new(256.0),
961 },
962 AbilityCaseRarityWeight {
963 rarity_id: uuid!("6f0f1099-8ab1-4378-aea5-ac6bcbe6ec3e"),
964 weight: PositiveF64::new(128.0),
965 },
966 AbilityCaseRarityWeight {
967 rarity_id: uuid!("81b082cc-2736-4545-87d1-301f5de8951a"),
968 weight: PositiveF64::new(64.0),
969 },
970 ],
971 checkpoints: vec![],
972 allowed_wishlist_rarity_ids: vec![uuid!("81b082cc-2736-4545-87d1-301f5de8951a")],
973 evolve_rules: vec![],
974 big_roll_currency_rewards: vec![],
975 big_roll_shards: vec![
976 BigRollShard {
977 min_rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
978 count: 7,
979 },
980 BigRollShard {
981 min_rarity_id: uuid!("6f0f1099-8ab1-4378-aea5-ac6bcbe6ec3e"),
982 count: 3,
983 },
984 BigRollShard {
985 min_rarity_id: uuid!("81b082cc-2736-4545-87d1-301f5de8951a"),
986 count: 1,
987 },
988 ],
989 },
990 AbilityCasesSettingsByLevel {
991 level: 3,
992 opens_to_upgrade: 20,
993 is_boundary_level: true,
994 rarity_weights: vec![],
995 checkpoints: vec![],
996 allowed_wishlist_rarity_ids: vec![],
997 evolve_rules: vec![],
998 big_roll_currency_rewards: vec![],
999 big_roll_shards: vec![],
1000 },
1001 ])
1002}
1003
1004fn generate_pet_rarities() -> Vec<PetRarity> {
1005 vec![
1006 PetRarity {
1007 id: uuid!("a0000000-0000-0000-0000-000000000001"),
1008 name: i18n::I18nString::Translated("Common Pet Rarity".to_string()),
1009 order: 1,
1010 color: "#ffffff".to_string(),
1011 bg_color: "#000000".to_string(),
1012 icon_path: "/pet_rarity_common.webp".to_string(),
1013 square_icon_path: "/pet_rarity_common.webp".to_string(),
1014 },
1015 PetRarity {
1016 id: uuid!("a0000000-0000-0000-0000-000000000002"),
1017 name: i18n::I18nString::Translated("Uncommon Pet Rarity".to_string()),
1018 order: 2,
1019 color: "#00ff00".to_string(),
1020 bg_color: "#003300".to_string(),
1021 icon_path: "/pet_rarity_uncommon.webp".to_string(),
1022 square_icon_path: "/pet_rarity_uncommon.webp".to_string(),
1023 },
1024 ]
1025}
1026
1027fn generate_pet_templates() -> Vec<PetTemplate> {
1028 vec![
1029 PetTemplate {
1030 id: uuid!("b0000000-0000-0000-0000-000000000001"),
1031 name: i18n::I18nString::Translated("Test Pet 1".to_string()),
1032 icon_path: "/pet1.webp".to_string(),
1033 spine_path: "/pet1_spine".to_string(),
1034 rarity_id: uuid!("a0000000-0000-0000-0000-000000000001"),
1035 stats: vec![
1036 PetSecondaryStat {
1037 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
1038 base_value: 100,
1039 per_level_value: 10,
1040 },
1041 PetSecondaryStat {
1042 attribute_id: uuid!("6ad485d7-9567-4b77-8ddc-a2418dd1dfe6"),
1043 base_value: 50,
1044 per_level_value: 5,
1045 },
1046 ],
1047 active_ability_id: Some(uuid!("da6c582b-7364-40bd-9b2d-946d8e20eaac")),
1048 passive_ability_id: None,
1049 charge_rate_on_damage_dealt: 1000,
1050 charge_rate_on_damage_taken: 500,
1051 charge_rate_on_skill_use: 200,
1052 max_charge: 10000,
1053 is_gacha_pet: true,
1054 },
1055 PetTemplate {
1056 id: uuid!("b0000000-0000-0000-0000-000000000002"),
1057 name: i18n::I18nString::Translated("Test Pet 2".to_string()),
1058 icon_path: "/pet2.webp".to_string(),
1059 spine_path: "/pet2_spine".to_string(),
1060 rarity_id: uuid!("a0000000-0000-0000-0000-000000000001"),
1061 stats: vec![PetSecondaryStat {
1062 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
1063 base_value: 200,
1064 per_level_value: 20,
1065 }],
1066 active_ability_id: None,
1067 passive_ability_id: None,
1068 charge_rate_on_damage_dealt: 0,
1069 charge_rate_on_damage_taken: 0,
1070 charge_rate_on_skill_use: 0,
1071 max_charge: 0,
1072 is_gacha_pet: true,
1073 },
1074 PetTemplate {
1075 id: uuid!("b0000000-0000-0000-0000-000000000003"),
1076 name: i18n::I18nString::Translated("Test Pet 3 Uncommon".to_string()),
1077 icon_path: "/pet3.webp".to_string(),
1078 spine_path: "/pet3_spine".to_string(),
1079 rarity_id: uuid!("a0000000-0000-0000-0000-000000000002"),
1080 stats: vec![PetSecondaryStat {
1081 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
1082 base_value: 300,
1083 per_level_value: 30,
1084 }],
1085 active_ability_id: None,
1086 passive_ability_id: None,
1087 charge_rate_on_damage_dealt: 0,
1088 charge_rate_on_damage_taken: 0,
1089 charge_rate_on_skill_use: 0,
1090 max_charge: 0,
1091 is_gacha_pet: true,
1092 },
1093 ]
1094}
1095
1096fn generate_pet_levels() -> Vec<PetLevel> {
1097 vec![
1098 PetLevel {
1099 level: 2,
1100 rarity_id: uuid!("a0000000-0000-0000-0000-000000000001"),
1101 required_shards: 10,
1102 },
1103 PetLevel {
1104 level: 3,
1105 rarity_id: uuid!("a0000000-0000-0000-0000-000000000001"),
1106 required_shards: 20,
1107 },
1108 PetLevel {
1109 level: 2,
1110 rarity_id: uuid!("a0000000-0000-0000-0000-000000000002"),
1111 required_shards: 15,
1112 },
1113 PetLevel {
1114 level: 3,
1115 rarity_id: uuid!("a0000000-0000-0000-0000-000000000002"),
1116 required_shards: 30,
1117 },
1118 ]
1119}
1120
1121fn generate_pet_slots_levels() -> Vec<PetSlotsLevel> {
1122 vec![PetSlotsLevel {
1123 from_chapter_level: 1,
1124 pet_slots: 3,
1125 }]
1126}
1127
1128fn generate_pet_cases_settings() -> Vec<PetCasesSettingsByLevel> {
1129 vec![
1133 PetCasesSettingsByLevel {
1134 level: 1,
1135 opens_to_upgrade: 0,
1136 is_boundary_level: false,
1137 rarity_weights: vec![
1138 PetCaseRarityWeight {
1139 rarity_id: uuid!("a0000000-0000-0000-0000-000000000001"),
1140 weight: PositiveF64::new(256.0),
1141 },
1142 PetCaseRarityWeight {
1143 rarity_id: uuid!("a0000000-0000-0000-0000-000000000002"),
1144 weight: PositiveF64::new(128.0),
1145 },
1146 ],
1147 checkpoints: vec![PetCaseCheckpointReward {
1148 required_opens: 1,
1149 currency_rewards: vec![],
1150 pet_rewards: vec![PetCaseCheckpointPetReward {
1151 amount: 1,
1152 min_rarity_id: uuid!("a0000000-0000-0000-0000-000000000001"),
1153 }],
1154 }],
1155 allowed_wishlist_rarity_ids: vec![uuid!("a0000000-0000-0000-0000-000000000001")],
1156 big_roll_currency_rewards: vec![],
1157 big_roll_shards: vec![
1158 PetBigRollShard {
1159 min_rarity_id: uuid!("a0000000-0000-0000-0000-000000000001"),
1160 count: 8,
1161 },
1162 PetBigRollShard {
1163 min_rarity_id: uuid!("a0000000-0000-0000-0000-000000000002"),
1164 count: 3,
1165 },
1166 ],
1167 },
1168 PetCasesSettingsByLevel {
1169 level: 2,
1170 opens_to_upgrade: 10,
1171 is_boundary_level: false,
1172 rarity_weights: vec![
1173 PetCaseRarityWeight {
1174 rarity_id: uuid!("a0000000-0000-0000-0000-000000000001"),
1175 weight: PositiveF64::new(256.0),
1176 },
1177 PetCaseRarityWeight {
1178 rarity_id: uuid!("a0000000-0000-0000-0000-000000000002"),
1179 weight: PositiveF64::new(128.0),
1180 },
1181 ],
1182 checkpoints: vec![],
1183 allowed_wishlist_rarity_ids: vec![uuid!("a0000000-0000-0000-0000-000000000002")],
1184 big_roll_currency_rewards: vec![],
1185 big_roll_shards: vec![
1186 PetBigRollShard {
1187 min_rarity_id: uuid!("a0000000-0000-0000-0000-000000000001"),
1188 count: 8,
1189 },
1190 PetBigRollShard {
1191 min_rarity_id: uuid!("a0000000-0000-0000-0000-000000000002"),
1192 count: 3,
1193 },
1194 ],
1195 },
1196 PetCasesSettingsByLevel {
1197 level: 3,
1198 opens_to_upgrade: 20,
1199 is_boundary_level: true,
1200 rarity_weights: vec![],
1201 checkpoints: vec![],
1202 allowed_wishlist_rarity_ids: vec![],
1203 big_roll_currency_rewards: vec![],
1204 big_roll_shards: vec![],
1205 },
1206 ]
1207}
1208
1209fn generate_ability_rarities() -> Vec<AbilityRarity> {
1210 vec![
1211 AbilityRarity {
1212 id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
1213 name: i18n::I18nString::new(
1214 "content.ability_rarities.33a0af72-2390-4df9-bd4f-f66b27ed7792:name",
1215 ),
1216 order: 1,
1217 color: "#97ca7a".to_string(),
1218 bg_color: "#244026".to_string(),
1219 icon_url: "e0bcf4ea-b2b5-47d6-9d76-985797a5a818.webp".to_string(),
1220 icon_path: "e0bcf4ea-b2b5-47d6-9d76-985797a5a818.webp".to_string(),
1221 square_icon_path: "e0bcf4ea-b2b5-47d6-9d76-985797a5a818.webp".to_string(),
1222 },
1223 AbilityRarity {
1224 id: uuid!("6f0f1099-8ab1-4378-aea5-ac6bcbe6ec3e"),
1225 name: i18n::I18nString::new(
1226 "content.ability_rarities.6f0f1099-8ab1-4378-aea5-ac6bcbe6ec3e:name",
1227 ),
1228 order: 2,
1229 color: "#97ca7a".to_string(),
1230 bg_color: "#244026".to_string(),
1231 icon_url: "e0bcf4ea-b2b5-47d6-9d76-985797a5a818.webp".to_string(),
1232 icon_path: "e0bcf4ea-b2b5-47d6-9d76-985797a5a818.webp".to_string(),
1233 square_icon_path: "e0bcf4ea-b2b5-47d6-9d76-985797a5a818.webp".to_string(),
1234 },
1235 AbilityRarity {
1236 id: uuid!("81b082cc-2736-4545-87d1-301f5de8951a"),
1237 name: i18n::I18nString::new(
1238 "content.ability_rarities.81b082cc-2736-4545-87d1-301f5de8951a:name",
1239 ),
1240 order: 3,
1241 color: "#97ca7a".to_string(),
1242 bg_color: "#244026".to_string(),
1243 icon_url: "e0bcf4ea-b2b5-47d6-9d76-985797a5a818.webp".to_string(),
1244 icon_path: "e0bcf4ea-b2b5-47d6-9d76-985797a5a818.webp".to_string(),
1245 square_icon_path: "e0bcf4ea-b2b5-47d6-9d76-985797a5a818.webp".to_string(),
1246 },
1247 AbilityRarity {
1248 id: uuid!("88ed32be-33cd-43a5-88e1-65c078e6372d"),
1249 name: i18n::I18nString::new(
1250 "content.ability_rarities.88ed32be-33cd-43a5-88e1-65c078e6372d:name",
1251 ),
1252 order: 4,
1253 color: "#97ca7a".to_string(),
1254 bg_color: "#244026".to_string(),
1255 icon_url: "e0bcf4ea-b2b5-47d6-9d76-985797a5a818.webp".to_string(),
1256 icon_path: "e0bcf4ea-b2b5-47d6-9d76-985797a5a818.webp".to_string(),
1257 square_icon_path: "e0bcf4ea-b2b5-47d6-9d76-985797a5a818.webp".to_string(),
1258 },
1259 ]
1260}
1261
1262fn generate_ability_levels() -> Vec<AbilityLevel> {
1263 vec![
1264 AbilityLevel {
1265 level: 1,
1266 rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
1267 required_shards: 5,
1268 },
1269 AbilityLevel {
1270 level: 2,
1271 rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
1272 required_shards: 10,
1273 },
1274 AbilityLevel {
1275 level: 3,
1276 rarity_id: uuid!("33a0af72-2390-4df9-bd4f-f66b27ed7792"),
1277 required_shards: 10,
1278 },
1279 AbilityLevel {
1280 level: 1,
1281 rarity_id: uuid!("6f0f1099-8ab1-4378-aea5-ac6bcbe6ec3e"),
1282 required_shards: 5,
1283 },
1284 AbilityLevel {
1285 level: 2,
1286 rarity_id: uuid!("6f0f1099-8ab1-4378-aea5-ac6bcbe6ec3e"),
1287 required_shards: 10,
1288 },
1289 AbilityLevel {
1290 level: 3,
1291 rarity_id: uuid!("6f0f1099-8ab1-4378-aea5-ac6bcbe6ec3e"),
1292 required_shards: 15,
1293 },
1294 AbilityLevel {
1295 level: 4,
1296 rarity_id: uuid!("6f0f1099-8ab1-4378-aea5-ac6bcbe6ec3e"),
1297 required_shards: 100,
1298 },
1299 AbilityLevel {
1300 level: 1,
1301 rarity_id: uuid!("81b082cc-2736-4545-87d1-301f5de8951a"),
1302 required_shards: 5,
1303 },
1304 AbilityLevel {
1305 level: 2,
1306 rarity_id: uuid!("81b082cc-2736-4545-87d1-301f5de8951a"),
1307 required_shards: 10,
1308 },
1309 AbilityLevel {
1310 level: 3,
1311 rarity_id: uuid!("81b082cc-2736-4545-87d1-301f5de8951a"),
1312 required_shards: 15,
1313 },
1314 ]
1315}
1316
1317fn generate_fight_settings() -> FightSettings {
1318 FightSettings {
1319 start_fight_delay_ticks_default: 2000,
1320 prepare_fight_win_delay_ticks_default: 1000,
1321 prepare_fight_lose_delay_ticks_default: 1000,
1322 end_fight_delay_ticks_default: 2000,
1323 player_start_position: Coordinates { x: 1, y: 1 },
1324 party_start_position: Coordinates { x: 1, y: 0 },
1325 power_adjust_script: "0".to_string(),
1326 pvp_enemy_start_position: Coordinates { x: 4, y: 1 },
1327 }
1328}
1329
1330fn generate_entities() -> Vec<EntityTemplate> {
1331 vec![
1332 EntityTemplate {
1333 id: uuid!("969f80ff-cf60-45e5-be6a-036911309ade"),
1334 name: "forest_goblin".into(),
1335 spine: "fe551450-4b55-4641-b376-a0184291fa05".into(),
1336 spine_skin_path: "Goblin:default".into(),
1337 spine_scale: 1,
1338 cast_time: 500,
1339 width: 1,
1340 ability_ids: vec![uuid!("50260b1c-7748-49bf-a1ed-34d69d029697")],
1341 attributes: vec![
1342 EntityAttribute {
1343 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
1344 value: 6,
1345 },
1346 EntityAttribute {
1347 attribute_id: uuid!("6ad485d7-9567-4b77-8ddc-a2418dd1dfe6"),
1348 value: 5,
1349 },
1350 EntityAttribute {
1351 attribute_id: uuid!("42aea610-2ab7-41f7-95bf-5d6f00341ac9"),
1352 value: 0,
1353 },
1354 ],
1355 rewards: vec![EnemyReward {
1356 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
1357 from: 100,
1358 to: 100,
1359 drop_chance: 100.0,
1360 }],
1361 },
1362 EntityTemplate {
1363 id: uuid!("bcc325dd-dc9a-4c30-b3c7-bfefdeec9a5f"),
1364 name: "shadow_wolf".into(),
1365 spine: "".into(),
1366 spine_skin_path: "Goblin:default".into(),
1367 spine_scale: 1,
1368 cast_time: 500,
1369 width: 1,
1370 ability_ids: vec![uuid!("50260b1c-7748-49bf-a1ed-34d69d029697")],
1371 attributes: vec![
1372 EntityAttribute {
1373 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
1374 value: 4,
1375 },
1376 EntityAttribute {
1377 attribute_id: uuid!("6ad485d7-9567-4b77-8ddc-a2418dd1dfe6"),
1378 value: 8,
1379 },
1380 EntityAttribute {
1381 attribute_id: uuid!("42aea610-2ab7-41f7-95bf-5d6f00341ac9"),
1382 value: 1,
1383 },
1384 ],
1385 rewards: vec![EnemyReward {
1386 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
1387 from: 100,
1388 to: 100,
1389 drop_chance: 100.0,
1390 }],
1391 },
1392 EntityTemplate {
1393 id: uuid!("94b110ce-a22c-461a-ab78-8a928ac1fad0"),
1394 name: "stone_giant".into(),
1395 spine: "".into(),
1396 spine_skin_path: "Goblin:default".into(),
1397 spine_scale: 1,
1398 cast_time: 500,
1399 width: 1,
1400 ability_ids: vec![uuid!("7e584338-057d-41a2-a80e-8e2c76e98f6a")],
1401 attributes: vec![
1402 EntityAttribute {
1403 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
1404 value: 10,
1405 },
1406 EntityAttribute {
1407 attribute_id: uuid!("6ad485d7-9567-4b77-8ddc-a2418dd1dfe6"),
1408 value: 2,
1409 },
1410 EntityAttribute {
1411 attribute_id: uuid!("42aea610-2ab7-41f7-95bf-5d6f00341ac9"),
1412 value: 5,
1413 },
1414 ],
1415 rewards: vec![EnemyReward {
1416 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
1417 from: 100,
1418 to: 100,
1419 drop_chance: 100.0,
1420 }],
1421 },
1422 EntityTemplate {
1423 id: uuid!("d414698e-afbd-4cd8-a594-901e8dcef231"),
1424 name: "fire_dragon".into(),
1425 spine: "".into(),
1426 spine_skin_path: "Goblin:default".into(),
1427 spine_scale: 1,
1428 cast_time: 500,
1429 width: 1,
1430 ability_ids: vec![
1431 uuid!("487a23e5-7401-4c34-a6c6-2401f95249cf"),
1432 uuid!("fd053ec6-8b23-4ba1-a31f-31b56d8c57bc"),
1433 ],
1434 attributes: vec![
1435 EntityAttribute {
1436 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
1437 value: 45,
1438 },
1439 EntityAttribute {
1440 attribute_id: uuid!("6ad485d7-9567-4b77-8ddc-a2418dd1dfe6"),
1441 value: 4,
1442 },
1443 EntityAttribute {
1444 attribute_id: uuid!("42aea610-2ab7-41f7-95bf-5d6f00341ac9"),
1445 value: 7,
1446 },
1447 ],
1448 rewards: vec![EnemyReward {
1449 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
1450 from: 100,
1451 to: 100,
1452 drop_chance: 100.0,
1453 }],
1454 },
1455 EntityTemplate {
1456 id: uuid!("447000b9-e155-4b74-82e3-df481ffc8136"),
1457 name: "phantom_assassin".into(),
1458 spine: "".into(),
1459 spine_skin_path: "Goblin:default".into(),
1460 spine_scale: 1,
1461 cast_time: 500,
1462 width: 1,
1463 ability_ids: vec![
1464 uuid!("da6c582b-7364-40bd-9b2d-946d8e20eaac"),
1465 uuid!("7e584338-057d-41a2-a80e-8e2c76e98f6a"),
1466 uuid!("50260b1c-7748-49bf-a1ed-34d69d029697"),
1467 ],
1468 attributes: vec![
1469 EntityAttribute {
1470 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
1471 value: 6,
1472 },
1473 EntityAttribute {
1474 attribute_id: uuid!("6ad485d7-9567-4b77-8ddc-a2418dd1dfe6"),
1475 value: 10,
1476 },
1477 EntityAttribute {
1478 attribute_id: uuid!("42aea610-2ab7-41f7-95bf-5d6f00341ac9"),
1479 value: 2,
1480 },
1481 ],
1482 rewards: vec![EnemyReward {
1483 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
1484 from: 100,
1485 to: 100,
1486 drop_chance: 100.0,
1487 }],
1488 },
1489 EntityTemplate {
1490 id: uuid!("0195e7d2-5ae7-70e4-88ec-b9417813b007"),
1491 name: "mini_roshan".into(),
1492 spine: "".into(),
1493 spine_skin_path: "Goblin:default".into(),
1494 spine_scale: 1,
1495 cast_time: 500,
1496 width: 1,
1497 ability_ids: vec![
1498 uuid!("da6c582b-7364-40bd-9b2d-946d8e20eaac"),
1499 uuid!("7e584338-057d-41a2-a80e-8e2c76e98f6a"),
1500 ],
1501 attributes: vec![
1502 EntityAttribute {
1503 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
1504 value: 150,
1505 },
1506 EntityAttribute {
1507 attribute_id: uuid!("6ad485d7-9567-4b77-8ddc-a2418dd1dfe6"),
1508 value: 150,
1509 },
1510 EntityAttribute {
1511 attribute_id: uuid!("42aea610-2ab7-41f7-95bf-5d6f00341ac9"),
1512 value: 150,
1513 },
1514 ],
1515 rewards: vec![EnemyReward {
1516 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
1517 from: 500,
1518 to: 500,
1519 drop_chance: 100.0,
1520 }],
1521 },
1522 EntityTemplate {
1523 id: uuid!("0195e7ce-ba97-7f6b-9ac6-0de3c160cde7"),
1524 name: "roshan".into(),
1525 spine: "".into(),
1526 spine_skin_path: "Goblin:default".into(),
1527 spine_scale: 1,
1528 cast_time: 500,
1529 width: 1,
1530 ability_ids: vec![
1531 uuid!("da6c582b-7364-40bd-9b2d-946d8e20eaac"),
1532 uuid!("7e584338-057d-41a2-a80e-8e2c76e98f6a"),
1533 uuid!("50260b1c-7748-49bf-a1ed-34d69d029697"),
1534 ],
1535 attributes: vec![
1536 EntityAttribute {
1537 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
1538 value: 300,
1539 },
1540 EntityAttribute {
1541 attribute_id: uuid!("6ad485d7-9567-4b77-8ddc-a2418dd1dfe6"),
1542 value: 300,
1543 },
1544 EntityAttribute {
1545 attribute_id: uuid!("42aea610-2ab7-41f7-95bf-5d6f00341ac9"),
1546 value: 300,
1547 },
1548 ],
1549 rewards: vec![EnemyReward {
1550 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
1551 from: 1000,
1552 to: 1000,
1553 drop_chance: 100.0,
1554 }],
1555 },
1556 EntityTemplate {
1557 id: uuid!("0486f548-5040-4b70-b202-8b35a9880939"),
1558 name: "spawner".into(),
1559 spine: "".into(),
1560 spine_skin_path: "Goblin:default".into(),
1561 spine_scale: 1,
1562 cast_time: 500,
1563 width: 1,
1564 ability_ids: vec![],
1565 attributes: vec![
1566 EntityAttribute {
1567 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
1568 value: 5,
1569 },
1570 EntityAttribute {
1571 attribute_id: uuid!("6ad485d7-9567-4b77-8ddc-a2418dd1dfe6"),
1572 value: 5,
1573 },
1574 EntityAttribute {
1575 attribute_id: uuid!("42aea610-2ab7-41f7-95bf-5d6f00341ac9"),
1576 value: 5,
1577 },
1578 ],
1579 rewards: vec![EnemyReward {
1580 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
1581 from: 1000,
1582 to: 1000,
1583 drop_chance: 100.0,
1584 }],
1585 },
1586 ]
1587}
1588
1589fn generate_fight_templates() -> Vec<FightTemplate> {
1590 vec![
1591 FightTemplate {
1592 id: uuid!("360fc654-dea1-4f5d-97af-249ab30608ac"),
1593 title: i18n::I18nString::new(
1594 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
1595 ),
1596 power: Some(300),
1597 fight_entities: vec![FightEntity {
1598 entity_type: EntityType::PVPEntity,
1599 position: Coordinates { x: 3, y: 1 },
1600 has_big_hp_bar: false,
1601 team: EntityTeam::Enemy,
1602 }],
1603 background: "".into(),
1604 max_duration_ticks: 300000,
1605 starting_fx: "".to_string(),
1606 fight_type: FightType::ArenaPVP,
1607 waves_amount: 1,
1608 prepare_fight_script: "".into(),
1609 start_script: "".to_string(),
1610 prepare_fight_win_duration_ticks: None,
1611 prepare_fight_lose_duration_ticks: None,
1612 start_fight_delay_ticks: None,
1613 end_fight_delay_ticks: None,
1614 bundle_reward_id: Some(uuid!("53e8ffaa-7ee4-4612-bbfc-bb157979ca8d")),
1615 stop_on_win: false,
1616 stop_on_lose: false,
1617 show_vs_screen: false,
1618 show_stages: None,
1619 target_width_cells: 6,
1620 },
1621 FightTemplate {
1622 id: uuid!("b92c69a2-6544-4b83-809f-5af290b75473"),
1623 title: i18n::I18nString::new(
1624 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
1625 ),
1626 power: Some(300),
1627 fight_entities: vec![FightEntity {
1628 entity_type: EntityType::PVPEntity,
1629 position: Coordinates { x: 3, y: 1 },
1630 has_big_hp_bar: false,
1631 team: EntityTeam::Enemy,
1632 }],
1633 background: "".into(),
1634 max_duration_ticks: 300000,
1635 starting_fx: "".to_string(),
1636 fight_type: FightType::VassalPVP,
1637 waves_amount: 1,
1638 prepare_fight_script: "".into(),
1639 start_script: "".to_string(),
1640 prepare_fight_win_duration_ticks: None,
1641 prepare_fight_lose_duration_ticks: None,
1642 start_fight_delay_ticks: None,
1643 end_fight_delay_ticks: None,
1644 bundle_reward_id: Some(uuid!("53e8ffaa-7ee4-4612-bbfc-bb157979ca8d")),
1645 stop_on_win: false,
1646 stop_on_lose: false,
1647 show_vs_screen: false,
1648 show_stages: None,
1649 target_width_cells: 6,
1650 },
1651 FightTemplate {
1652 id: uuid!("b9d46e46-e8aa-4f73-9b67-694f567f1c48"),
1653 title: i18n::I18nString::new(
1654 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
1655 ),
1656 power: Some(300),
1657 fight_entities: vec![
1658 FightEntity {
1659 entity_type: EntityType::PVEEntity {
1660 entity_template_id: uuid!("969f80ff-cf60-45e5-be6a-036911309ade"),
1661 },
1662 position: Coordinates { x: 3, y: 1 },
1663 has_big_hp_bar: false,
1664 team: EntityTeam::Enemy,
1665 },
1666 FightEntity {
1667 entity_type: EntityType::PVEEntity {
1668 entity_template_id: uuid!("969f80ff-cf60-45e5-be6a-036911309ade"),
1669 },
1670 position: Coordinates { x: 3, y: 2 },
1671 has_big_hp_bar: false,
1672 team: EntityTeam::Enemy,
1673 },
1674 ],
1675 background: "".into(),
1676 max_duration_ticks: 300000,
1677 starting_fx: "".to_string(),
1678 fight_type: FightType::CampaignFight,
1679 waves_amount: 1,
1680 prepare_fight_script: "".into(),
1681 start_script: "".to_string(),
1682 prepare_fight_win_duration_ticks: None,
1683 prepare_fight_lose_duration_ticks: None,
1684 start_fight_delay_ticks: None,
1685 end_fight_delay_ticks: None,
1686 bundle_reward_id: None,
1687 stop_on_win: false,
1688 stop_on_lose: false,
1689 show_vs_screen: false,
1690 show_stages: None,
1691 target_width_cells: 6,
1692 },
1693 FightTemplate {
1694 id: uuid!("44ca267b-7b6f-4508-ac74-a17b9dbeed99"),
1695 title: i18n::I18nString::new(
1696 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
1697 ),
1698 power: Some(300),
1699 fight_entities: vec![FightEntity {
1700 entity_type: EntityType::PVEEntity {
1701 entity_template_id: uuid!("bcc325dd-dc9a-4c30-b3c7-bfefdeec9a5f"),
1702 },
1703 position: Coordinates { x: 3, y: 1 },
1704 has_big_hp_bar: false,
1705 team: EntityTeam::Enemy,
1706 }],
1707 background: "".into(),
1708 max_duration_ticks: 300000,
1709 starting_fx: "".to_string(),
1710 fight_type: FightType::CampaignFight,
1711 waves_amount: 1,
1712 prepare_fight_script: "".into(),
1713 start_script: "".to_string(),
1714 prepare_fight_win_duration_ticks: None,
1715 prepare_fight_lose_duration_ticks: None,
1716 start_fight_delay_ticks: None,
1717 end_fight_delay_ticks: None,
1718 bundle_reward_id: None,
1719 stop_on_win: false,
1720 stop_on_lose: false,
1721 show_vs_screen: false,
1722 show_stages: None,
1723 target_width_cells: 6,
1724 },
1725 FightTemplate {
1726 id: uuid!("26f23346-541f-4a74-9ae0-efc3523b0ebf"),
1727 title: i18n::I18nString::new(
1728 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
1729 ),
1730 power: Some(300),
1731 fight_entities: vec![
1732 FightEntity {
1733 entity_type: EntityType::PVEEntity {
1734 entity_template_id: uuid!("bcc325dd-dc9a-4c30-b3c7-bfefdeec9a5f"),
1735 },
1736 position: Coordinates { x: 2, y: 1 },
1737 has_big_hp_bar: false,
1738 team: EntityTeam::Enemy,
1739 },
1740 FightEntity {
1741 entity_type: EntityType::PVEEntity {
1742 entity_template_id: uuid!("94b110ce-a22c-461a-ab78-8a928ac1fad0"),
1743 },
1744 position: Coordinates { x: 2, y: 2 },
1745 has_big_hp_bar: true,
1746 team: EntityTeam::Enemy,
1747 },
1748 ],
1749 background: "".into(),
1750 max_duration_ticks: 300000,
1751 starting_fx: "".to_string(),
1752 fight_type: FightType::CampaignBossFight,
1753 waves_amount: 1,
1754 prepare_fight_script: "".into(),
1755 start_script: "".to_string(),
1756 prepare_fight_win_duration_ticks: None,
1757 prepare_fight_lose_duration_ticks: None,
1758 start_fight_delay_ticks: None,
1759 end_fight_delay_ticks: None,
1760 bundle_reward_id: Some(uuid!("53e8ffaa-7ee4-4612-bbfc-bb157979ca8d")),
1761 stop_on_win: false,
1762 stop_on_lose: false,
1763 show_vs_screen: false,
1764 show_stages: None,
1765 target_width_cells: 6,
1766 },
1767 FightTemplate {
1768 id: uuid!("f32d7a64-23b4-4d3f-bc31-801ae0f9acda"),
1769 title: i18n::I18nString::new(
1770 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
1771 ),
1772 power: Some(300),
1773 fight_entities: vec![
1774 FightEntity {
1775 entity_type: EntityType::PVEEntity {
1776 entity_template_id: uuid!("969f80ff-cf60-45e5-be6a-036911309ade"),
1777 },
1778 position: Coordinates { x: 3, y: 1 },
1779 has_big_hp_bar: false,
1780 team: EntityTeam::Enemy,
1781 },
1782 FightEntity {
1783 entity_type: EntityType::PVEEntity {
1784 entity_template_id: uuid!("94b110ce-a22c-461a-ab78-8a928ac1fad0"),
1785 },
1786 position: Coordinates { x: 3, y: 2 },
1787 has_big_hp_bar: false,
1788 team: EntityTeam::Enemy,
1789 },
1790 ],
1791 background: "".into(),
1792 max_duration_ticks: 300000,
1793 starting_fx: "".to_string(),
1794 fight_type: FightType::CampaignFight,
1795 waves_amount: 1,
1796 prepare_fight_script: "".into(),
1797 start_script: "Result.push(OverlordEventDamage(Fight.entities[0].id, unsigned(5), CustomEventData()))"
1798 .to_string(),
1799 prepare_fight_win_duration_ticks: None,
1800 prepare_fight_lose_duration_ticks: None,
1801 start_fight_delay_ticks: None,
1802 end_fight_delay_ticks: None,
1803 bundle_reward_id: None,
1804 stop_on_win: false,
1805 stop_on_lose: false,
1806 show_vs_screen: false,
1807 show_stages: None,
1808 target_width_cells: 6,
1809 },
1810 FightTemplate {
1811 id: uuid!("83f96aa7-1553-445f-b0d4-4bb1a13c68a1"),
1812 title: i18n::I18nString::new(
1813 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
1814 ),
1815 power: Some(300),
1816 fight_entities: vec![
1817 FightEntity {
1818 entity_type: EntityType::PVEEntity {
1819 entity_template_id: uuid!("94b110ce-a22c-461a-ab78-8a928ac1fad0"),
1820 },
1821 position: Coordinates { x: 3, y: 1 },
1822 has_big_hp_bar: false,
1823 team: EntityTeam::Enemy,
1824 },
1825 FightEntity {
1826 entity_type: EntityType::PVEEntity {
1827 entity_template_id: uuid!("d414698e-afbd-4cd8-a594-901e8dcef231"),
1828 },
1829 position: Coordinates { x: 3, y: 2 },
1830 has_big_hp_bar: false,
1831 team: EntityTeam::Enemy,
1832 },
1833 ],
1834 background: "".into(),
1835 max_duration_ticks: 300000,
1836 starting_fx: "".to_string(),
1837 fight_type: FightType::CampaignFight,
1838 waves_amount: 1,
1839 prepare_fight_script: "".into(),
1840 start_script: "".to_string(),
1841 prepare_fight_win_duration_ticks: None,
1842 prepare_fight_lose_duration_ticks: None,
1843 start_fight_delay_ticks: None,
1844 end_fight_delay_ticks: None,
1845 bundle_reward_id: None,
1846 stop_on_win: false,
1847 stop_on_lose: false,
1848 show_vs_screen: false,
1849 show_stages: None,
1850 target_width_cells: 6,
1851 },
1852 FightTemplate {
1853 id: uuid!("a57fe553-3506-4211-a871-d199165a0f6a"),
1854 title: i18n::I18nString::new(
1855 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
1856 ),
1857 power: Some(300),
1858 fight_entities: vec![
1859 FightEntity {
1860 entity_type: EntityType::PVEEntity {
1861 entity_template_id: uuid!("94b110ce-a22c-461a-ab78-8a928ac1fad0"),
1862 },
1863 position: Coordinates { x: 2, y: 1 },
1864 has_big_hp_bar: false,
1865 team: EntityTeam::Enemy,
1866 },
1867 FightEntity {
1868 entity_type: EntityType::PVEEntity {
1869 entity_template_id: uuid!("0195e7d2-5ae7-70e4-88ec-b9417813b007"),
1870 },
1871 position: Coordinates { x: 2, y: 2 },
1872 has_big_hp_bar: true,
1873 team: EntityTeam::Enemy,
1874 },
1875 ],
1876 background: "".into(),
1877 max_duration_ticks: 300000,
1878 starting_fx: "".to_string(),
1879 fight_type: FightType::CampaignBossFight,
1880 waves_amount: 1,
1881 prepare_fight_script: "".into(),
1882 start_script: "".to_string(),
1883 prepare_fight_win_duration_ticks: None,
1884 prepare_fight_lose_duration_ticks: None,
1885 start_fight_delay_ticks: None,
1886 end_fight_delay_ticks: None,
1887 bundle_reward_id: None,
1888 stop_on_win: false,
1889 stop_on_lose: false,
1890 show_vs_screen: false,
1891 show_stages: None,
1892 target_width_cells: 6,
1893 },
1894 FightTemplate {
1895 id: uuid!("c274b0bb-173e-49e3-9d36-2c32f1e2c8a1"),
1896 title: i18n::I18nString::new(
1897 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
1898 ),
1899 power: Some(300),
1900 fight_entities: vec![FightEntity {
1901 entity_type: EntityType::PVEEntity {
1902 entity_template_id: uuid!("d414698e-afbd-4cd8-a594-901e8dcef231"),
1903 },
1904 position: Coordinates { x: 3, y: 1 },
1905 has_big_hp_bar: false,
1906 team: EntityTeam::Enemy,
1907 }],
1908 background: "".into(),
1909 max_duration_ticks: 300000,
1910 starting_fx: "".to_string(),
1911 fight_type: FightType::CampaignFight,
1912 waves_amount: 1,
1913 prepare_fight_script: "".into(),
1914 start_script: "".to_string(),
1915 prepare_fight_win_duration_ticks: None,
1916 prepare_fight_lose_duration_ticks: None,
1917 start_fight_delay_ticks: None,
1918 end_fight_delay_ticks: None,
1919 bundle_reward_id: None,
1920 stop_on_win: true,
1921 stop_on_lose: false,
1922 show_vs_screen: false,
1923 show_stages: None,
1924 target_width_cells: 6,
1925 },
1926 FightTemplate {
1927 id: uuid!("d02ac74e-5ad2-49c2-9a3e-927194c62adf"),
1928 title: i18n::I18nString::new(
1929 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
1930 ),
1931 power: Some(300),
1932 fight_entities: vec![
1933 FightEntity {
1934 entity_type: EntityType::PVEEntity {
1935 entity_template_id: uuid!("969f80ff-cf60-45e5-be6a-036911309ade"),
1936 },
1937 position: Coordinates { x: 3, y: 1 },
1938 has_big_hp_bar: false,
1939 team: EntityTeam::Enemy,
1940 },
1941 FightEntity {
1942 entity_type: EntityType::PVEEntity {
1943 entity_template_id: uuid!("bcc325dd-dc9a-4c30-b3c7-bfefdeec9a5f"),
1944 },
1945 position: Coordinates { x: 3, y: 2 },
1946 has_big_hp_bar: false,
1947 team: EntityTeam::Enemy,
1948 },
1949 FightEntity {
1950 entity_type: EntityType::PVEEntity {
1951 entity_template_id: uuid!("d414698e-afbd-4cd8-a594-901e8dcef231"),
1952 },
1953 position: Coordinates { x: 4, y: 1 },
1954 has_big_hp_bar: false,
1955 team: EntityTeam::Enemy,
1956 },
1957 ],
1958 background: "".into(),
1959 max_duration_ticks: 300000,
1960 starting_fx: "".to_string(),
1961 fight_type: FightType::CampaignFight,
1962 waves_amount: 1,
1963 prepare_fight_script: "".into(),
1964 start_script: "".to_string(),
1965 prepare_fight_win_duration_ticks: None,
1966 prepare_fight_lose_duration_ticks: None,
1967 start_fight_delay_ticks: None,
1968 end_fight_delay_ticks: None,
1969 bundle_reward_id: None,
1970 stop_on_win: false,
1971 stop_on_lose: true,
1972 show_vs_screen: false,
1973 show_stages: None,
1974 target_width_cells: 6,
1975 },
1976 FightTemplate {
1977 id: uuid!("1f2b6501-d76f-4ed9-a6b6-7057c3ee16dc"),
1978 title: i18n::I18nString::new(
1979 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
1980 ),
1981 power: Some(300),
1982 fight_entities: vec![
1983 FightEntity {
1984 entity_type: EntityType::PVEEntity {
1985 entity_template_id: uuid!("d414698e-afbd-4cd8-a594-901e8dcef231"),
1986 },
1987 position: Coordinates { x: 2, y: 1 },
1988 has_big_hp_bar: false,
1989 team: EntityTeam::Enemy,
1990 },
1991 FightEntity {
1992 entity_type: EntityType::PVEEntity {
1993 entity_template_id: uuid!("0195e7ce-ba97-7f6b-9ac6-0de3c160cde7"),
1994 },
1995 position: Coordinates { x: 2, y: 2 },
1996 has_big_hp_bar: true,
1997 team: EntityTeam::Enemy,
1998 },
1999 ],
2000 background: "".into(),
2001 max_duration_ticks: 300000,
2002 starting_fx: "".to_string(),
2003 fight_type: FightType::CampaignBossFight,
2004 waves_amount: 1,
2005 prepare_fight_script: "".into(),
2006 start_script: "".to_string(),
2007 prepare_fight_win_duration_ticks: None,
2008 prepare_fight_lose_duration_ticks: None,
2009 start_fight_delay_ticks: None,
2010 end_fight_delay_ticks: None,
2011 bundle_reward_id: None,
2012 stop_on_win: false,
2013 stop_on_lose: false,
2014 show_vs_screen: false,
2015 show_stages: None,
2016 target_width_cells: 6,
2017 },
2018 FightTemplate {
2019 id: uuid!("09207dc1-ef01-4222-8382-ee853770fc3d"),
2020 title: i18n::I18nString::new(
2021 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2022 ),
2023 power: Some(300),
2024 fight_entities: vec![
2025 FightEntity {
2026 entity_type: EntityType::PVEEntity {
2027 entity_template_id: uuid!("0486f548-5040-4b70-b202-8b35a9880939"),
2028 },
2029 position: Coordinates { x: 2, y: 1 },
2030 has_big_hp_bar: false,
2031 team: EntityTeam::Enemy,
2032 },
2033 FightEntity {
2034 entity_type: EntityType::PVEEntity {
2035 entity_template_id: uuid!("0486f548-5040-4b70-b202-8b35a9880939"),
2036 },
2037 position: Coordinates { x: 2, y: 2 },
2038 has_big_hp_bar: true,
2039 team: EntityTeam::Enemy,
2040 },
2041 ],
2042 background: "".into(),
2043 max_duration_ticks: 300000,
2044 starting_fx: "".to_string(),
2045 fight_type: FightType::CampaignBossFight,
2046 waves_amount: 1,
2047 prepare_fight_script: "".into(),
2048 start_script: r#"Result.push(OverlordEventEntityApplyEffect(Fight.player_id, uuid("39f135d2-b930-42a7-abfa-f1ec49f3cc00")));"#.to_string(),
2049 prepare_fight_win_duration_ticks: None,
2050 prepare_fight_lose_duration_ticks: None,
2051 start_fight_delay_ticks: None,
2052 end_fight_delay_ticks: None,
2053 bundle_reward_id: None,
2054 stop_on_win: false,
2055 stop_on_lose: false,
2056 show_vs_screen: false,
2057 show_stages: None,
2058 target_width_cells: 6,
2059 },
2060 FightTemplate {
2061 id: uuid!("669c9bac-7734-457a-8619-1c5b65802ac8"),
2062 title: i18n::I18nString::new(
2063 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2064 ),
2065 power: Some(300),
2066 fight_entities: vec![
2067 FightEntity {
2068 entity_type: EntityType::PVEEntity {
2069 entity_template_id: uuid!("0486f548-5040-4b70-b202-8b35a9880939"),
2070 },
2071 position: Coordinates { x: 2, y: 1 },
2072 has_big_hp_bar: false,
2073 team: EntityTeam::Enemy,
2074 },
2075 ],
2076 background: "".into(),
2077 max_duration_ticks: 300000,
2078 starting_fx: "".to_string(),
2079 fight_type: FightType::CampaignBossFight,
2080 waves_amount: 3,
2081 prepare_fight_script: r#"Result.push(spawn_entity(
2082 uuid("0486f548-5040-4b70-b202-8b35a9880939"),
2083 Coordinates(Fight.entities[0].coordinates.x + 1, Fight.entities[0].coordinates.y + 2),
2084 EntityTeam("Enemy"),
2085 false,
2086 EntityAttributes(),
2087 Random
2088 ))"#.into(),
2089 start_script: "".into(),
2090 prepare_fight_win_duration_ticks: None,
2091 prepare_fight_lose_duration_ticks: None,
2092 start_fight_delay_ticks: None,
2093 end_fight_delay_ticks: None,
2094 bundle_reward_id: None,
2095 stop_on_win: false,
2096 stop_on_lose: false,
2097 show_vs_screen: false,
2098 show_stages: None,
2099 target_width_cells: 6,
2100 },
2101 FightTemplate {
2102 id: uuid!("bceb9758-a0e1-4f4c-90e9-f841e412baa2"),
2103 title: i18n::I18nString::new(
2104 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2105 ),
2106 power: Some(300),
2107 fight_entities: vec![
2108 FightEntity {
2109 entity_type: EntityType::PVEEntity {
2110 entity_template_id: uuid!("0486f548-5040-4b70-b202-8b35a9880939"),
2111 },
2112 position: Coordinates { x: 2, y: 1 },
2113 has_big_hp_bar: false,
2114 team: EntityTeam::Enemy,
2115 },
2116 ],
2117 background: "".into(),
2118 max_duration_ticks: 300000,
2119 starting_fx: "".to_string(),
2120 fight_type: FightType::CampaignBossFight,
2121 waves_amount: 1,
2122 prepare_fight_script: "".into(),
2123 start_script: "".into(),
2124 prepare_fight_win_duration_ticks: Some(1),
2125 prepare_fight_lose_duration_ticks: Some(1),
2126 start_fight_delay_ticks: Some(1),
2127 end_fight_delay_ticks: Some(1),
2128 bundle_reward_id: Some(uuid!("53e8ffaa-7ee4-4612-bbfc-bb157979ca8d")),
2129 stop_on_win: false,
2130 stop_on_lose: false,
2131 show_vs_screen: false,
2132 show_stages: None,
2133 target_width_cells: 6,
2134 },
2135 FightTemplate {
2136 id: uuid!("3ba961a4-6eab-4251-a048-1edef27da219"),
2137 title: i18n::I18nString::new(
2138 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2139 ),
2140 power: Some(300),
2141 fight_entities: vec![
2142 FightEntity {
2143 entity_type: EntityType::PVEEntity {
2144 entity_template_id: uuid!("0486f548-5040-4b70-b202-8b35a9880939"),
2145 },
2146 position: Coordinates { x: 2, y: 1 },
2147 has_big_hp_bar: false,
2148 team: EntityTeam::Enemy,
2149 },
2150 ],
2151 background: "".into(),
2152 max_duration_ticks: 300000,
2153 starting_fx: "".to_string(),
2154 fight_type: FightType::CampaignBossFight,
2155 waves_amount: 2,
2156 prepare_fight_script: "".into(),
2157 start_script: "".into(),
2158 prepare_fight_win_duration_ticks: Some(1),
2159 prepare_fight_lose_duration_ticks: Some(1),
2160 start_fight_delay_ticks: Some(1),
2161 end_fight_delay_ticks: Some(1),
2162 bundle_reward_id: Some(uuid!("53e8ffaa-7ee4-4612-bbfc-bb157979ca8d")),
2163 stop_on_win: false,
2164 stop_on_lose: false,
2165 show_vs_screen: false,
2166 show_stages: None,
2167 target_width_cells: 6,
2168 }
2169 ]
2170}
2171
2172fn generate_dungeon_templates() -> Vec<DungeonTemplate> {
2173 vec![DungeonTemplate {
2174 id: uuid!("cfa28006-f242-47dc-9f69-e12587ea54fb"),
2175 title: i18n::I18nString::new("content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title"),
2176 description: i18n::I18nString::new(
2177 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2178 ),
2179 key_currency_id: uuid!("85d98a50-510e-4853-b00a-84a51ad5cb50"),
2180 max_difficulty_level: 2,
2181 ui_background_path: "".to_string(),
2182 ui_banner_path: "".to_string(),
2183 tips: vec![
2184 DungeonTip {
2185 difficulty_level: 1,
2186 tip: i18n::I18nString::new(
2187 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2188 ),
2189 },
2190 DungeonTip {
2191 difficulty_level: 2,
2192 tip: i18n::I18nString::new(
2193 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2194 ),
2195 },
2196 ],
2197 fight_template_ids: vec![
2198 uuid!("bceb9758-a0e1-4f4c-90e9-f841e412baa2"),
2199 uuid!("bceb9758-a0e1-4f4c-90e9-f841e412baa2"),
2200 ],
2201 rewards_by_difficulty: vec![],
2202 main_reward: RewardType::Currency(uuid!("2ed77d25-cc1e-41ee-8f46-c4934ca8f684")),
2203 chapter_level_unlock: 2,
2204 }]
2205}
2206
2207fn generate_chapters() -> Vec<Chapter> {
2208 vec![
2209 Chapter {
2210 id: uuid!("9a51675f-9aa7-4f2b-9843-f2ce0cf8e6fd"),
2211 title: i18n::I18nString::new(
2212 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2213 ),
2214 level: 0,
2215 fight_ids: vec![
2216 uuid!("b9d46e46-e8aa-4f73-9b67-694f567f1c48"),
2217 uuid!("44ca267b-7b6f-4508-ac74-a17b9dbeed99"),
2218 uuid!("26f23346-541f-4a74-9ae0-efc3523b0ebf"),
2219 ],
2220 },
2221 Chapter {
2222 id: uuid!("a073ff29-425d-47d2-93e2-e254b5da3ec3"),
2223 title: i18n::I18nString::new(
2224 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2225 ),
2226 level: 1,
2227 fight_ids: vec![
2228 uuid!("f32d7a64-23b4-4d3f-bc31-801ae0f9acda"),
2229 uuid!("83f96aa7-1553-445f-b0d4-4bb1a13c68a1"),
2230 uuid!("a57fe553-3506-4211-a871-d199165a0f6a"),
2231 ],
2232 },
2233 Chapter {
2234 id: uuid!("35e6ccd4-7412-4910-ac1e-e6bdb6e1e1fb"),
2235 title: i18n::I18nString::new(
2236 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2237 ),
2238 level: 2,
2239 fight_ids: vec![
2240 uuid!("c274b0bb-173e-49e3-9d36-2c32f1e2c8a1"),
2241 uuid!("d02ac74e-5ad2-49c2-9a3e-927194c62adf"),
2242 uuid!("1f2b6501-d76f-4ed9-a6b6-7057c3ee16dc"),
2243 ],
2244 },
2245 Chapter {
2246 id: uuid!("fda76007-ff26-4a66-abef-0bd0f7ac3e60"),
2247 title: i18n::I18nString::new(
2248 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2249 ),
2250 level: 3,
2251 fight_ids: vec![uuid!("09207dc1-ef01-4222-8382-ee853770fc3d")],
2252 },
2253 Chapter {
2254 id: uuid!("e1c72dcf-017f-4d6b-8834-8e32f77c7534"),
2255 title: i18n::I18nString::new(
2256 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2257 ),
2258 level: 4,
2259 fight_ids: vec![uuid!("669c9bac-7734-457a-8619-1c5b65802ac8")],
2260 },
2261 Chapter {
2262 id: uuid!("de35b2ff-9330-4b1d-a268-5a82f7646936"),
2263 title: i18n::I18nString::new(
2264 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2265 ),
2266 level: 5,
2267 fight_ids: vec![uuid!("3ba961a4-6eab-4251-a048-1edef27da219")],
2268 },
2269 ]
2270}
2271
2272fn generate_character_levels() -> Vec<CharacterLevel> {
2273 vec![
2274 CharacterLevel {
2275 level: 1,
2276 required_experience: 0,
2277 attributes: vec![EntityAttribute {
2278 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
2279 value: 10,
2280 }],
2281 },
2282 CharacterLevel {
2283 level: 2,
2284 required_experience: 10000,
2285 attributes: vec![EntityAttribute {
2286 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
2287 value: 30,
2288 }],
2289 },
2290 ]
2291}
2292
2293fn generate_ability_slots_levels() -> Vec<AbilitySlotsLevel> {
2294 vec![
2295 AbilitySlotsLevel {
2296 from_chapter_level: 0,
2297 ability_slots: 2,
2298 },
2299 AbilitySlotsLevel {
2300 from_chapter_level: 2,
2301 ability_slots: 10,
2302 },
2303 ]
2304}
2305
2306fn generate_patron_levels() -> Vec<ReferralLevelInfo> {
2307 vec![
2308 ReferralLevelInfo {
2309 level: 1,
2310 required_experience: 0,
2311 lvlup_reward: vec![],
2312 daily_reward: vec![],
2313 },
2314 ReferralLevelInfo {
2315 level: 2,
2316 required_experience: 200,
2317 lvlup_reward: vec![CurrencyUnit {
2318 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
2319 amount: 100,
2320 }],
2321 daily_reward: vec![CurrencyUnit {
2322 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
2323 amount: 100,
2324 }],
2325 },
2326 ]
2327}
2328fn generate_quests() -> Vec<QuestTemplate> {
2329 vec![
2330 QuestTemplate {
2331 id: uuid!("e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5"),
2332 title: i18n::I18nString::new(
2333 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2334 ),
2335 description: i18n::I18nString::new(
2336 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2337 ),
2338 progress_script: r#"if Event.level == 1 { return 1; } else { return 2; };"#.into(),
2339 progress_target: 100,
2340 quest_group_type: QuestGroupType::Daily,
2341 bundle_id: Some(uuid!("9cc6c6e4-e87f-4443-99ce-2f88b2bdbe82")),
2342 progression_points: 70,
2343 starting: true,
2344 next_quest_ids: vec![],
2345 events_subscribe: vec!["NewCharacterLevel".to_string()],
2346 additional_quests_script: None,
2347 progress_if_inactive: false,
2348 screen_reference: None,
2349 code: None,
2350 },
2351 QuestTemplate {
2352 id: uuid!("4cf49879-8129-481c-b356-9e0f29335e84"),
2353 title: i18n::I18nString::new(
2354 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2355 ),
2356 description: i18n::I18nString::new(
2357 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2358 ),
2359 progress_script: r#"if Quest.current == 0 { 1 } else { 2 }"#.into(),
2360 progress_target: 2,
2361 quest_group_type: QuestGroupType::Daily,
2362 bundle_id: Some(uuid!("9cc6c6e4-e87f-4443-99ce-2f88b2bdbe82")),
2363 progression_points: 70,
2364 starting: true,
2365 next_quest_ids: vec![],
2366 events_subscribe: vec!["PlayerNewItems".to_string()],
2367 additional_quests_script: None,
2368 progress_if_inactive: false,
2369 screen_reference: None,
2370 code: None,
2371 },
2372 QuestTemplate {
2373 id: uuid!("305300e2-f432-4cbf-ad46-85386a9a9410"),
2374 title: i18n::I18nString::new(
2375 "content.quests.305300e2-f432-4cbf-ad46-85386a9a9410:title",
2376 ),
2377 description: i18n::I18nString::new(
2378 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2379 ),
2380 progress_script: r#"if Quest.current == 0 { 1 } else { 2 }"#.into(),
2381 progress_target: 2,
2382 quest_group_type: QuestGroupType::LoopTask,
2383 bundle_id: Some(uuid!("9cc6c6e4-e87f-4443-99ce-2f88b2bdbe82")),
2384 progression_points: 80,
2385 starting: false,
2386 next_quest_ids: vec![uuid!("305300e2-f432-4cbf-ad46-85386a9a9410")],
2387 events_subscribe: vec!["PlayerNewItems".to_string()],
2388 additional_quests_script: Some("Result.push(OverlordEventSetCustomValue(\"loop_task\", 1));
2389 Result.push(OverlordEventUpdateActiveLoopTaskId(uuid(\"29540ca2-21f3-4f0e-a478-240adafed4e3\")))".to_string()),
2390 progress_if_inactive: true,
2391 screen_reference: None,
2392 code: None,
2393 },
2394 QuestTemplate {
2395 id: uuid!("29540ca2-21f3-4f0e-a478-240adafed4e3"),
2396 title: i18n::I18nString::new(
2397 "content.quests.29540ca2-21f3-4f0e-a478-240adafed4e3:title",
2398 ),
2399 description: i18n::I18nString::new(
2400 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2401 ),
2402 progress_script: r#"Quest.current + 1"#.into(),
2403 progress_target: 3,
2404 quest_group_type: QuestGroupType::LoopTask,
2405 bundle_id: Some(uuid!("9cc6c6e4-e87f-4443-99ce-2f88b2bdbe82")),
2406 progression_points: 100,
2407 starting: false,
2408 next_quest_ids: vec![uuid!("29540ca2-21f3-4f0e-a478-240adafed4e3")],
2409 events_subscribe: vec!["PlayerNewItems".to_string()],
2410 additional_quests_script: Some("Result.push(OverlordEventSetCustomValue(\"loop_task\", 2));
2411 Result.push(OverlordEventUpdateActiveLoopTaskId(uuid(\"9d3d2428-af3c-409f-a580-593de0fd06cf\")))".to_string()),
2412 progress_if_inactive: false,
2413 screen_reference: None,
2414 code: None,
2415 },
2416 QuestTemplate {
2417 id: uuid!("9d3d2428-af3c-409f-a580-593de0fd06cf"),
2418 title: i18n::I18nString::new(
2419 "content.quests.29540ca2-21f3-4f0e-a478-240adafed4e3:title",
2420 ),
2421 description: i18n::I18nString::new(
2422 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2423 ),
2424 progress_script: r#"Quest.current + 1"#.into(),
2425 progress_target: 5,
2426 quest_group_type: QuestGroupType::LoopTask,
2427 bundle_id: Some(uuid!("9cc6c6e4-e87f-4443-99ce-2f88b2bdbe82")),
2428 progression_points: 100,
2429 starting: false,
2430 next_quest_ids: vec![uuid!("9d3d2428-af3c-409f-a580-593de0fd06cf")],
2431 events_subscribe: vec!["PlayerNewItems".to_string()],
2432 additional_quests_script: Some("Result.push(OverlordEventSetCustomValue(\"loop_task\", 0));
2433 Result.push(OverlordEventUpdateActiveLoopTaskId(uuid(\"305300e2-f432-4cbf-ad46-85386a9a9410\")))".to_string()),
2434 progress_if_inactive: true,
2435 screen_reference: None,
2436 code: None,
2437 },
2438 QuestTemplate {
2439 id: uuid!("fa166167-f172-424f-b10b-a661fa8895db"),
2440 title: i18n::I18nString::new(
2441 "content.quests.fa166167-f172-424f-b10b-a661fa8895db:title",
2442 ),
2443 description: i18n::I18nString::new(
2444 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2445 ),
2446 progress_script:
2447 r#"if Event.level == 1 { return 1; }; if Event.level == 2 { return 2; };"#.into(),
2448 progress_target: 2,
2449 quest_group_type: QuestGroupType::PatronLifetime,
2450 bundle_id: Some(uuid!("9cc6c6e4-e87f-4443-99ce-2f88b2bdbe82")),
2451 progression_points: 50,
2452 starting: true,
2453 next_quest_ids: vec![],
2454 events_subscribe: vec!["NewCharacterLevel".to_string()],
2455 additional_quests_script: None,
2456 progress_if_inactive: false,
2457 screen_reference: None,
2458 code: None,
2459 },
2460 QuestTemplate {
2461 id: uuid!("2cf76eea-5b4b-4258-9051-3d3188845c5e"),
2462 title: i18n::I18nString::new(
2463 "content.quests.fa166167-f172-424f-b10b-a661fa8895db:title",
2464 ),
2465 description: i18n::I18nString::new(
2466 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2467 ),
2468 progress_script:
2469 r#"if Quest.current == 0 { return 1; }; if Quest.current == 1 { return 2; };"#
2470 .into(),
2471 progress_target: 2,
2472 quest_group_type: QuestGroupType::PatronLifetime,
2473 bundle_id: Some(uuid!("9cc6c6e4-e87f-4443-99ce-2f88b2bdbe82")),
2474 progression_points: 50,
2475 starting: true,
2476 next_quest_ids: vec![],
2477 events_subscribe: vec!["PlayerNewItems".to_string()],
2478 additional_quests_script: None,
2479 progress_if_inactive: false,
2480 screen_reference: None,
2481 code: None,
2482 },
2483 QuestTemplate {
2484 id: uuid!("78552c1c-5e8a-4f95-8f48-a5671051852e"),
2485 title: i18n::I18nString::new(
2486 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2487 ),
2488 description: i18n::I18nString::new(
2489 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2490 ),
2491 progress_script:
2492 r#"if Quest.current == 0 { return 1; }; if Quest.current == 1 { return 2; };"#
2493 .into(),
2494 progress_target: 2,
2495 quest_group_type: QuestGroupType::PatronDaily,
2496 bundle_id: Some(uuid!("9cc6c6e4-e87f-4443-99ce-2f88b2bdbe82")),
2497 progression_points: 1000,
2498 starting: true,
2499 next_quest_ids: vec![],
2500 events_subscribe: vec!["PlayerNewItems".to_string()],
2501 additional_quests_script: None,
2502 progress_if_inactive: false,
2503 screen_reference: None,
2504 code: None,
2505 },
2506 QuestTemplate {
2507 id: uuid!("b16fea6d-6b9b-484c-b25b-8bec70234691"),
2508 title: i18n::I18nString::new(
2509 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2510 ),
2511 description: i18n::I18nString::new(
2512 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2513 ),
2514 progress_script: r#"if Quest.current == 0 { 1 } else { 2 }"#.into(),
2515 progress_target: 2,
2516 quest_group_type: QuestGroupType::Hidden,
2517 bundle_id: None,
2518 progression_points: 0,
2519 starting: true,
2520 next_quest_ids: vec![uuid!("ce92f997-e41e-4cfe-9963-e100cc121289")],
2521 events_subscribe: vec!["PlayerNewItems".to_string()],
2522 additional_quests_script: None,
2523 progress_if_inactive: false,
2524 screen_reference: None,
2525 code: None,
2526 },
2527 QuestTemplate {
2528 id: uuid!("ce92f997-e41e-4cfe-9963-e100cc121289"),
2529 title: i18n::I18nString::new(
2530 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2531 ),
2532 description: i18n::I18nString::new(
2533 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2534 ),
2535 progress_script: r#"if Quest.current == 0 { 1 } else { 2 }"#.into(),
2536 progress_target: 2,
2537 quest_group_type: QuestGroupType::Hidden,
2538 bundle_id: None,
2539 progression_points: 0,
2540 starting: false,
2541 next_quest_ids: vec![uuid!("db3c73c6-e300-42dd-be47-3f820ab8b095")],
2542 events_subscribe: vec!["PlayerNewItems".to_string()],
2543 additional_quests_script: None,
2544 progress_if_inactive: false,
2545 screen_reference: None,
2546 code: None,
2547 },
2548 QuestTemplate {
2549 id: uuid!("c3ae0d0c-a0c3-49f4-b538-fd19f388d0b2"),
2550 title: i18n::I18nString::new(
2551 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2552 ),
2553 description: i18n::I18nString::new(
2554 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2555 ),
2556 progress_script: r#"Quest.current + 1"#.into(),
2557 progress_target: 1,
2558 quest_group_type: QuestGroupType::Hidden,
2559 bundle_id: None,
2560 progression_points: 0,
2561 starting: true,
2562 next_quest_ids: vec![],
2563 events_subscribe: vec!["PlayerNewItems".to_string()],
2564 additional_quests_script: Some("Result.push(OverlordEventSetCustomValue(\"loop_task\", 0));
2565 Result.push(give_quests([
2566 uuid(\"305300e2-f432-4cbf-ad46-85386a9a9410\"),
2567 uuid(\"29540ca2-21f3-4f0e-a478-240adafed4e3\"),
2568 uuid(\"9d3d2428-af3c-409f-a580-593de0fd06cf\")
2569 ]));
2570 Result.push(OverlordEventUpdateActiveLoopTaskId(uuid(\"305300e2-f432-4cbf-ad46-85386a9a9410\")))".to_string()),
2571 progress_if_inactive: false,
2572 screen_reference: None,
2573 code: None,
2574 },
2575 QuestTemplate {
2576 id: uuid!("a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"),
2577 title: i18n::I18nString::new(
2578 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2579 ),
2580 description: i18n::I18nString::new(
2581 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2582 ),
2583 progress_script: r#"if Quest.current == 0 { 1 } else { 2 }"#.into(),
2584 progress_target: 2,
2585 quest_group_type: QuestGroupType::Hidden,
2586 bundle_id: Some(uuid!("9cc6c6e4-e87f-4443-99ce-2f88b2bdbe82")),
2587 progression_points: 0,
2588 starting: false,
2589 next_quest_ids: vec![],
2590 events_subscribe: vec!["NewCharacterLevel".to_string()],
2591 additional_quests_script: None,
2592 progress_if_inactive: false,
2593 screen_reference: None,
2594 code: None,
2595 },
2596 QuestTemplate {
2597 id: uuid!("db3c73c6-e300-42dd-be47-3f820ab8b095"),
2598 title: i18n::I18nString::new(
2599 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2600 ),
2601 description: i18n::I18nString::new(
2602 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2603 ),
2604 progress_script: r#"if Quest.current == 0 { 1 } else { 2 }"#.into(),
2605 progress_target: 2,
2606 quest_group_type: QuestGroupType::Lifetime,
2607 bundle_id: Some(uuid!("9cc6c6e4-e87f-4443-99ce-2f88b2bdbe82")),
2608 progression_points: 0,
2609 starting: false,
2610 next_quest_ids: vec![],
2611 events_subscribe: vec!["PlayerNewItems".to_string()],
2612 additional_quests_script: None,
2613 progress_if_inactive: false,
2614 screen_reference: None,
2615 code: None,
2616 },
2617 QuestTemplate {
2618 id: uuid!("d1986660-eb69-4051-a256-dbb1d8e5377f"),
2619 title: i18n::I18nString::new(
2620 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2621 ),
2622 description: i18n::I18nString::new(
2623 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2624 ),
2625 progress_script: r#"if Quest.current == 0 { 1 } else { 2 }"#.into(),
2626 progress_target: 2,
2627 quest_group_type: QuestGroupType::Lifetime,
2628 bundle_id: Some(uuid!("9cc6c6e4-e87f-4443-99ce-2f88b2bdbe82")),
2629 progression_points: 0,
2630 starting: true,
2631 next_quest_ids: vec![],
2632 events_subscribe: vec!["PlayerNewItems".to_string()],
2633 additional_quests_script: None,
2634 progress_if_inactive: false,
2635 screen_reference: None,
2636 code: None,
2637 },
2638 QuestTemplate {
2641 id: uuid!("a1000000-0000-0000-0000-000000000001"),
2642 title: i18n::I18nString::new(
2643 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2644 ),
2645 description: i18n::I18nString::new(
2646 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2647 ),
2648 progress_script: r#"if Quest.current == 0 { 1 } else { 2 }"#.into(),
2649 progress_target: 2,
2650 quest_group_type: QuestGroupType::Achievement,
2651 progression_points: 50,
2652 bundle_id: Some(uuid!("9cc6c6e4-e87f-4443-99ce-2f88b2bdbe82")),
2653 starting: true,
2654 next_quest_ids: vec![],
2655 events_subscribe: vec!["PlayerNewItems".to_string()],
2656 additional_quests_script: None,
2657 progress_if_inactive: false,
2658 screen_reference: None,
2659 code: None,
2660 },
2661 QuestTemplate {
2663 id: uuid!("a1000000-0000-0000-0000-000000000002"),
2664 title: i18n::I18nString::new(
2665 "content.quests.e3bc23d8-2035-44d0-b8c1-bb1996ac6bc5:title",
2666 ),
2667 description: i18n::I18nString::new(
2668 "content.quests.78552c1c-5e8a-4f95-8f48-a5671051852e:title",
2669 ),
2670 progress_script: r#"Quest.current + 1"#.into(),
2671 progress_target: 3,
2672 quest_group_type: QuestGroupType::Achievement,
2673 progression_points: 50,
2674 bundle_id: Some(uuid!("9cc6c6e4-e87f-4443-99ce-2f88b2bdbe82")),
2675 starting: true,
2676 next_quest_ids: vec![],
2677 events_subscribe: vec!["PlayerNewItems".to_string()],
2678 additional_quests_script: None,
2679 progress_if_inactive: false,
2680 screen_reference: None,
2681 code: None,
2682 },
2683 ]
2684}
2685
2686fn generate_quests_progression_settings() -> QuestsProgressionSettings {
2687 QuestsProgressionSettings {
2688 daily: vec![
2689 QuestsProgressionPointSettings {
2690 points: 35,
2691 reward_script: r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 10))"#.into(),
2692 },
2693 QuestsProgressionPointSettings {
2694 points: 70,
2695 reward_script: r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 70))"#.into(),
2696 },
2697 QuestsProgressionPointSettings {
2698 points: 100,
2699 reward_script: r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 100))"#.into(),
2700 },
2701 ],
2702 weekly: vec![
2703 QuestsProgressionPointSettings {
2704 points: 30,
2705 reward_script: r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 100))"#.into(),
2706 },
2707 QuestsProgressionPointSettings {
2708 points: 60,
2709 reward_script: r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 500))"#.into(),
2710 },
2711 QuestsProgressionPointSettings {
2712 points: 100,
2713 reward_script: r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 1000))"#.into(),
2714 },
2715 ],
2716 achievement: vec![
2717 QuestsProgressionPointSettings {
2718 points: 50,
2719 reward_script: r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 10))"#.into(),
2720 },
2721 QuestsProgressionPointSettings {
2722 points: 100,
2723 reward_script: r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 50))"#.into(),
2724 },
2725 QuestsProgressionPointSettings {
2726 points: 200,
2727 reward_script: r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 100))"#.into(),
2728 },
2729 ],
2730 }
2731}
2732
2733fn generate_vassals_settings() -> VassalsSettings {
2734 VassalsSettings {
2735 vassal_reward_script:
2736 r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 42))"#.into(),
2737 suzerain_reward_script:
2738 r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 42))"#.into(),
2739 vassal_shield_duration_secs: 0,
2740 }
2741}
2742
2743fn generate_pvp_settings() -> PvpSettings {
2744 PvpSettings {
2745 max_matchmaking_opponents_count: 10,
2746 matchmaking_character_level_data: 2,
2747 }
2748}
2749
2750fn generate_vassal_tasks() -> Vec<VassalTaskTemplate> {
2751 vec![
2752 VassalTaskTemplate {
2753 id: uuid!("7b4a7bf5-01e0-4078-9cc1-52b742ed2b1e"),
2754 title: i18n::I18nString::new("content.vassal_tasks.7b4a7bf5-01e0-4078-9cc1-52b742ed2b1e:title"),
2755 duration_sec: 2,
2756 reward_script: r#"if GoodTask {Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 42))} else {Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 32))}"#.into(),
2757 loyalty_script: r#"if GoodTask {42} else {32}"#.into(),
2758 },
2759 VassalTaskTemplate {
2760 id: uuid!("05e915bf-55fe-4419-bcf0-5f90833f17bd"),
2761 title: i18n::I18nString::new("content.vassal_tasks.05e915bf-55fe-4419-bcf0-5f90833f17bd:title"),
2762 duration_sec: 10,
2763 reward_script: r#"if GoodTask {Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 0))} else {Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 42))}"#.into(),
2764 loyalty_script: r#"if GoodTask {0} else {42}"#.into(),
2765 },
2766 ]
2767}
2768
2769fn generate_gifts() -> Vec<GiftTemplate> {
2770 vec![
2771 GiftTemplate {
2772 id: uuid!("5e4b493e-78d2-45cd-931a-3d12ff669038"),
2773 gift_type: GiftType::VassalGift,
2774 price: vec![CurrencyUnit {
2775 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
2776 amount: 50,
2777 }],
2778 reward: vec![CurrencyUnit {
2779 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
2780 amount: 50,
2781 }],
2782 loyalty: 50,
2783 },
2784 GiftTemplate {
2785 id: uuid!("64e8ead6-44cf-4798-a18d-db648d598930"),
2786 gift_type: GiftType::GenericGift,
2787 price: vec![CurrencyUnit {
2788 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
2789 amount: 50,
2790 }],
2791 reward: vec![CurrencyUnit {
2792 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
2793 amount: 50,
2794 }],
2795 loyalty: 0,
2796 },
2797 ]
2798}
2799
2800fn generate_currencies() -> Vec<Currency> {
2801 vec![
2802 Currency {
2803 id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
2804 name: i18n::I18nString::new(
2805 "content.currencies.b59b33a2-4d19-4e2c-9cea-e03ea15882a0:name",
2806 ),
2807 description: i18n::I18nString::new(
2808 "content.currencies.b59b33a2-4d19-4e2c-9cea-e03ea15882a0:name",
2809 ),
2810 icon_url: "e0bcf4ea-b2b5-47d6-9d76-985797a5a818.webp".to_string(),
2811 icon_path: "e0bcf4ea-b2b5-47d6-9d76-985797a5a818.webp".to_string(),
2812 },
2813 Currency {
2814 id: uuid!("22297520-abb8-45b9-9fbb-c418b8001246"),
2815 name: i18n::I18nString::new(
2816 "content.currencies.22297520-abb8-45b9-9fbb-c418b8001246:name",
2817 ),
2818 description: i18n::I18nString::new(
2819 "content.currencies.22297520-abb8-45b9-9fbb-c418b8001246:name",
2820 ),
2821 icon_url: "b2446d1a-368d-4747-8b92-82a279bc6193.webp".to_string(),
2822 icon_path: "b2446d1a-368d-4747-8b92-82a279bc6193.webp".to_string(),
2823 },
2824 Currency {
2825 id: uuid!("6c050b07-5282-4a23-8bbf-dabecd27cade"),
2826 name: i18n::I18nString::new(
2827 "content.currencies.6c050b07-5282-4a23-8bbf-dabecd27cade:name",
2828 ),
2829 description: i18n::I18nString::new(
2830 "content.currencies.6c050b07-5282-4a23-8bbf-dabecd27cade:name",
2831 ),
2832 icon_url: "50a5cd4b-6b68-4e44-b4dd-9acb928bfea5.webp".to_string(),
2833 icon_path: "50a5cd4b-6b68-4e44-b4dd-9acb928bfea5.webp".to_string(),
2834 },
2835 ]
2836}
2837
2838fn generate_mail_templates() -> Vec<MailTemplate> {
2839 vec![
2840 MailTemplate {
2841 id: uuid!("f3d6c5a1-2b4e-4c9a-9f61-8d2e9af2a1b1"),
2842 title: i18n::I18nString::new(
2843 "content.mails.f3d6c5a1-2b4e-4c9a-9f61-8d2e9af2a1b1:title",
2844 ),
2845 message: i18n::I18nString::new(
2846 "content.mails.f3d6c5a1-2b4e-4c9a-9f61-8d2e9af2a1b1:message",
2847 ),
2848 bundle_id: Some(uuid!("53e8ffaa-7ee4-4612-bbfc-bb157979ca8d")),
2849 lifetime_secs: 86_400,
2850 send_type: MailSendType {
2851 scheduled_at: None,
2852 repeat: None,
2853 },
2854 restrictions: None,
2855 is_auto_send: true,
2856 },
2857 MailTemplate {
2858 id: uuid!("7216d615-6adc-46ab-b5af-4d8e26f38baf"),
2859 title: i18n::I18nString::new(
2860 "content.mails.f3d6c5a1-2b4e-4c9a-9f61-8d2e9af2a1b1:title",
2861 ),
2862 message: i18n::I18nString::new(
2863 "content.mails.f3d6c5a1-2b4e-4c9a-9f61-8d2e9af2a1b1:message",
2864 ),
2865 bundle_id: None,
2866 lifetime_secs: 86_400,
2867 send_type: MailSendType {
2868 scheduled_at: None,
2869 repeat: None,
2870 },
2871 restrictions: None,
2872 is_auto_send: true,
2873 },
2874 MailTemplate {
2875 id: uuid!("5dd4c42f-95af-4f10-8fa7-7f567686e756"),
2876 title: i18n::I18nString::new(
2877 "content.mails.f3d6c5a1-2b4e-4c9a-9f61-8d2e9af2a1b1:title",
2878 ),
2879 message: i18n::I18nString::new(
2880 "content.mails.f3d6c5a1-2b4e-4c9a-9f61-8d2e9af2a1b1:message",
2881 ),
2882 bundle_id: Some(uuid!("53e8ffaa-7ee4-4612-bbfc-bb157979ca8d")),
2883 lifetime_secs: 86_400,
2884 send_type: MailSendType {
2885 scheduled_at: Some("2015-01-01-00-00-00".to_string()),
2886 repeat: Some(MailRepeatType::Daily),
2887 },
2888 restrictions: None,
2889 is_auto_send: true,
2890 },
2891 MailTemplate {
2892 id: uuid!("7b1d8c15-74c5-44d1-b7fb-bb027d5389c6"),
2893 title: i18n::I18nString::new(
2894 "content.mails.f3d6c5a1-2b4e-4c9a-9f61-8d2e9af2a1b1:title",
2895 ),
2896 message: i18n::I18nString::new(
2897 "content.mails.f3d6c5a1-2b4e-4c9a-9f61-8d2e9af2a1b1:message",
2898 ),
2899 bundle_id: Some(uuid!("53e8ffaa-7ee4-4612-bbfc-bb157979ca8d")),
2900 lifetime_secs: 86_400,
2901 send_type: MailSendType {
2902 scheduled_at: Some("2015-01-01-00-00-00".to_string()),
2903 repeat: Some(MailRepeatType::Daily),
2904 },
2905 restrictions: None,
2906 is_auto_send: false,
2907 },
2908 MailTemplate {
2909 id: uuid!("98eea253-ac84-49ea-becb-4d5ef9c18b5c"),
2910 title: i18n::I18nString::new(
2911 "content.mails.f3d6c5a1-2b4e-4c9a-9f61-8d2e9af2a1b1:title",
2912 ),
2913 message: i18n::I18nString::new(
2914 "content.mails.f3d6c5a1-2b4e-4c9a-9f61-8d2e9af2a1b1:message",
2915 ),
2916 bundle_id: Some(uuid!("53e8ffaa-7ee4-4612-bbfc-bb157979ca8d")),
2917 lifetime_secs: 86_400,
2918 send_type: MailSendType {
2919 scheduled_at: Some("2015-01-01-00-00-00".to_string()),
2920 repeat: Some(MailRepeatType::Daily),
2921 },
2922 restrictions: None,
2923 is_auto_send: false,
2924 },
2925 MailTemplate {
2926 id: uuid!("0042b76d-bfbe-4e02-a6a6-4881e229da88"),
2927 title: i18n::I18nString::new(
2928 "content.mails.f3d6c5a1-2b4e-4c9a-9f61-8d2e9af2a1b1:title",
2929 ),
2930 message: i18n::I18nString::new(
2931 "content.mails.f3d6c5a1-2b4e-4c9a-9f61-8d2e9af2a1b1:message",
2932 ),
2933 bundle_id: Some(uuid!("53e8ffaa-7ee4-4612-bbfc-bb157979ca8d")),
2934 lifetime_secs: 86_400,
2935 send_type: MailSendType {
2936 scheduled_at: Some("2015-01-01-00-00-00".to_string()),
2937 repeat: Some(MailRepeatType::Daily),
2938 },
2939 restrictions: None,
2940 is_auto_send: false,
2941 },
2942 ]
2943}
2944
2945fn generate_inventory_levels() -> Vec<InventoryLevel> {
2946 vec![InventoryLevel {
2947 from_chapter_level: 0,
2948 item_types: all::<ItemType>().collect(),
2949 }]
2950}
2951
2952fn generate_arena_settings() -> ArenaSettings {
2953 ArenaSettings {
2954 base_rating: 1000,
2955 win_rating_increase_script: "25".to_string(),
2956 lose_rating_increase_script: "-20".to_string(),
2957 matches_history_size: 5,
2958 leaderboard_size: 5,
2959 arena_tickets_currency_id: uuid!("6c050b07-5282-4a23-8bbf-dabecd27cade"),
2960 matchmaking_character_rating_delta: 30,
2961 pvp_cooldown_secs: 60,
2962 win_stars_increase: 1,
2963 lose_stars_decrease: -1,
2964 stars_reward_threshold: 3,
2965 stars_reward_bundle_id: uuid!("53e8ffaa-7ee4-4612-bbfc-bb157979ca8d"),
2966 arena_ticket_buy_currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
2967 arena_ticket_price: CurrencyUnit {
2968 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
2969 amount: 100,
2970 },
2971 arena_matches_ttl_days: 30,
2972 rematch_max_rating_increase: 250,
2973 rematch_max_rating_decrease: -100,
2974 daily_stars_claims_limit: 2,
2975 }
2976}
2977
2978fn generate_arena_leagues() -> Vec<ArenaLeague> {
2979 vec![
2980 ArenaLeague {
2981 id: uuid!("842ce55f-c6b9-4d2f-b86b-6288529a8658"),
2982 name: i18n::I18nString::new(
2983 "content.arena.leagues.842ce55f-c6b9-4d2f-b86b-6288529a8658:name",
2984 ),
2985 min_rating: 0,
2986 max_rating: 999,
2987 },
2988 ArenaLeague {
2989 id: uuid!("d1936748-b14e-4a7a-b17d-aaf2d70e5077"),
2990 name: i18n::I18nString::new(
2991 "content.arena.leagues.d1936748-b14e-4a7a-b17d-aaf2d70e5077:name",
2992 ),
2993 min_rating: 1000,
2994 max_rating: 1999,
2995 },
2996 ArenaLeague {
2997 id: uuid!("1e69174c-5628-4a65-ba87-55ac6e31868f"),
2998 name: i18n::I18nString::new(
2999 "content.arena.leagues.1e69174c-5628-4a65-ba87-55ac6e31868f:name",
3000 ),
3001 min_rating: 2000,
3002 max_rating: 10000,
3003 },
3004 ]
3005}
3006
3007fn generate_matchmaking_settings() -> MatchmakingSettings {
3008 MatchmakingSettings {
3009 opponent_positions: vec![
3010 OpponentPositionSettings {
3011 min_rating_diff_percent: 15.0,
3012 max_rating_diff_percent: 20.0,
3013 max_rating_for_bots: 1000,
3014 bot_power_multiplier: 1.0,
3015 },
3016 OpponentPositionSettings {
3017 min_rating_diff_percent: -7.0,
3018 max_rating_diff_percent: 7.0,
3019 max_rating_for_bots: 1000,
3020 bot_power_multiplier: 1.0,
3021 },
3022 OpponentPositionSettings {
3023 min_rating_diff_percent: -7.0,
3024 max_rating_diff_percent: 7.0,
3025 max_rating_for_bots: 1000,
3026 bot_power_multiplier: 1.0,
3027 },
3028 OpponentPositionSettings {
3029 min_rating_diff_percent: -17.0,
3030 max_rating_diff_percent: -15.0,
3031 max_rating_for_bots: 1000,
3032 bot_power_multiplier: 1.0,
3033 },
3034 ],
3035 percentile_threshold: 30.0,
3036 }
3037}
3038
3039fn generate_event_descriptions() -> Vec<EventDescription> {
3040 vec![EventDescription {
3041 name: "NewCharacterLevel".to_string(),
3042 description: i18n::I18nString::new("content.event.newcharacterlevel:name"),
3043 color: "#008000".to_string(),
3044 icon_url: "tmp".to_string(),
3045 bg_url: "tmp".to_string(),
3046 bg_path: "tmp".to_string(),
3047 text_url: "tmp".to_string(),
3048 effect_url: "tmp".to_string(),
3049 ttl_milliseconds: 2000,
3050 }]
3051}
3052
3053fn generate_classes() -> Vec<class::Class> {
3054 vec![
3055 class::Class {
3056 id: uuid!("00000000-0000-0000-0000-000000000000"),
3057 character_asset: "2f7d1e2e-0e33-4730-a3b6-de7122ed9044".to_string(),
3058 spine: "".into(),
3059 cast_time: 500,
3060 basic_abilities: vec![uuid!("da6c582b-7364-40bd-9b2d-946d8e20eaac")],
3061 starter_bundle_id: None,
3062 attributes: vec![],
3063 ability_rarity_id: uuid!("88ed32be-33cd-43a5-88e1-65c078e6372d"),
3064 tier: class::ClassTier::C,
3065 transitions: vec![],
3066 background_image_url: "".to_string(),
3067 icon_url: "".to_string(),
3068 description: i18n::I18nString::new("content.event.newcharacterlevel:name"),
3069 name: i18n::I18nString::new("content.event.newcharacterlevel:name"),
3070 },
3071 class::Class {
3072 id: uuid!("5956e37c-ca7f-45cf-8bfb-49601dc9aca3"),
3073 character_asset: "2f7d1e2e-0e33-4730-a3b6-de7122ed9044".to_string(),
3074 spine: "".into(),
3075 cast_time: 500,
3076 basic_abilities: vec![uuid!("da6c582b-7364-40bd-9b2d-946d8e20eaac")],
3077 starter_bundle_id: Some(uuid!("c86eed27-03d0-4c06-a6b2-e8688c09f7ed")),
3078 attributes: vec![
3079 class::ClassAttribute::EntityAttribute(EntityAttribute {
3080 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
3081 value: 50,
3082 }),
3083 class::ClassAttribute::EntityAttribute(EntityAttribute {
3084 attribute_id: uuid!("6ad485d7-9567-4b77-8ddc-a2418dd1dfe6"),
3085 value: 20,
3086 }),
3087 class::ClassAttribute::ScriptAttributes(
3088 r#"Result.push(EntityAttribute(uuid("45eca0a7-7430-487b-bd65-b796c6d88c08"), 20)); Result.push(EntityAttribute(uuid("6ad485d7-9567-4b77-8ddc-a2418dd1dfe6"), 5))"#
3089 .into(),
3090 ),
3091 ],
3092 ability_rarity_id: uuid!("88ed32be-33cd-43a5-88e1-65c078e6372d"),
3093 tier: class::ClassTier::A,
3094 transitions: vec![class::ClassTransition {
3095 class_id: uuid!("95d314ee-ce2c-4b10-a8bc-596b0f03ab8a"),
3096 cost: vec![CurrencyUnit {
3097 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
3098 amount: 20,
3099 }],
3100 }],
3101 background_image_url: "".to_string(),
3102 icon_url: "".to_string(),
3103 description: i18n::I18nString::new("content.event.newcharacterlevel:name"),
3104 name: i18n::I18nString::new("content.event.newcharacterlevel:name"),
3105 },
3106 class::Class {
3107 id: uuid!("95d314ee-ce2c-4b10-a8bc-596b0f03ab8a"),
3108 character_asset: "2f7d1e2e-0e33-4730-a3b6-de7122ed9044".to_string(),
3109 spine: "".into(),
3110 cast_time: 500,
3111 basic_abilities: vec![uuid!("59e317c9-0108-4eb0-a41f-9d513b821542"), uuid!("41ee5532-a293-4f88-bfb6-5ffca1e57acc")],
3112 starter_bundle_id: None,
3113 attributes: vec![],
3114 ability_rarity_id: uuid!("88ed32be-33cd-43a5-88e1-65c078e6372d"),
3115 tier: class::ClassTier::A,
3116 transitions: vec![],
3117 background_image_url: "".to_string(),
3118 icon_url: "".to_string(),
3119 description: i18n::I18nString::new("content.event.newcharacterlevel:name"),
3120 name: i18n::I18nString::new("content.event.newcharacterlevel:name"),
3121 },
3122 ]
3123}
3124
3125fn generate_projectiles() -> Vec<Projectile> {
3126 vec![Projectile {
3127 id: uuid!("1ca53a04-5321-4d93-bdc4-55caed5ab83b"),
3128 start_script:
3129 r#"Result.animation_duration_ticks = unsigned(500); Result.projectile_data.add("damage", 300);"#
3130 .to_string(),
3131 script: "Result.push(OverlordEventDamage(TargetEntity.id, unsigned(5), CustomEventData()));".to_string(),
3132 vfx: "".to_string(),
3133 }]
3134}
3135
3136fn generate_basic_items() -> Vec<ItemTemplate> {
3137 vec![
3138 ItemTemplate {
3139 id: uuid!("176c4cc5-7b93-43b4-9f90-958e2791a8d6"),
3140 name: i18n::I18nString::new("content.items.176c4cc5-7b93-43b4-9f90-958e2791a8d6:name"),
3141 icon_url: "/leather_boots.png".to_string(),
3142 icon_path: "/leather_boots.png".to_string(),
3143 item_type: ItemType::Weapon,
3144 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3145 attributes_settings: ItemAttributeSettings {
3146 optional_attributes_count: 0,
3147 optional_attributes_ids: vec![],
3148 },
3149 skin_id: Some(uuid!("44d8fbed-9ec9-4a57-865a-59d32465a1f2")),
3150 exclude_from_mimic: false,
3151 },
3152 ItemTemplate {
3153 id: uuid!("9f86cff5-2ce6-4191-95cf-2271cc3686f5"),
3154 name: i18n::I18nString::new("content.items.9f86cff5-2ce6-4191-95cf-2271cc3686f5:name"),
3155 icon_url: "/iron_chestplate.png".to_string(),
3156 icon_path: "/iron_chestplate.png".to_string(),
3157 item_type: ItemType::Torso,
3158 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3159 attributes_settings: ItemAttributeSettings {
3160 optional_attributes_count: 0,
3161 optional_attributes_ids: vec![],
3162 },
3163 skin_id: Some(uuid!("a1b2c3d4-e5f6-7890-abcd-ef1234567890")),
3164 exclude_from_mimic: false,
3165 },
3166 ItemTemplate {
3167 id: uuid!("6779d933-1663-4d02-8e47-2bf8ce06aeee"),
3168 name: i18n::I18nString::new("content.items.6779d933-1663-4d02-8e47-2bf8ce06aeee:name"),
3169 icon_url: "/mask_of_fury.png".to_string(),
3170 icon_path: "/mask_of_fury.png".to_string(),
3171 item_type: ItemType::Head,
3172 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3173 attributes_settings: ItemAttributeSettings {
3174 optional_attributes_count: 0,
3175 optional_attributes_ids: vec![],
3176 },
3177 skin_id: None,
3178 exclude_from_mimic: false,
3179 },
3180 ItemTemplate {
3181 id: uuid!("a1b2c3d4-e5f6-7890-abcd-ef1234567891"),
3182 name: i18n::I18nString::new("content.items.a1b2c3d4-e5f6-7890-abcd-ef1234567891:name"),
3183 icon_url: "/simple_sword.png".to_string(),
3184 icon_path: "/simple_sword.png".to_string(),
3185 item_type: ItemType::Weapon,
3186 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3187 attributes_settings: ItemAttributeSettings {
3188 optional_attributes_count: 0,
3189 optional_attributes_ids: vec![],
3190 },
3191 skin_id: None,
3192 exclude_from_mimic: false,
3193 },
3194 ItemTemplate {
3195 id: uuid!("37108f62-1595-4e2d-8d51-708b96311511"),
3196 name: i18n::I18nString::new("content.items.37108f62-1595-4e2d-8d51-708b96311511:name"),
3197 icon_url: "/gloves_of_agility.png".to_string(),
3198 icon_path: "/gloves_of_agility.png".to_string(),
3199 item_type: ItemType::Legs,
3200 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3201 attributes_settings: ItemAttributeSettings {
3202 optional_attributes_count: 1,
3203 optional_attributes_ids: vec![uuid!("3a6ec1c8-7494-43df-a345-d23e297b892d")],
3204 },
3205 skin_id: None,
3206 exclude_from_mimic: false,
3207 },
3208 ItemTemplate {
3209 id: uuid!("edee37e9-cfea-4406-b16e-64f5f3aed7c2"),
3210 name: i18n::I18nString::new("content.items.edee37e9-cfea-4406-b16e-64f5f3aed7c2:name"),
3211 icon_url: "/wizard_hat.png".to_string(),
3212 icon_path: "/wizard_hat.png".to_string(),
3213 item_type: ItemType::Shoulders,
3214 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3215 attributes_settings: ItemAttributeSettings {
3216 optional_attributes_count: 1,
3217 optional_attributes_ids: vec![uuid!("3a6ec1c8-7494-43df-a345-d23e297b892d")],
3218 },
3219 skin_id: None,
3220 exclude_from_mimic: false,
3221 },
3222 ItemTemplate {
3223 id: uuid!("88ee0a22-b495-40bd-ad1b-132998a1cd37"),
3224 name: i18n::I18nString::new("content.items.88ee0a22-b495-40bd-ad1b-132998a1cd37:name"),
3225 icon_url: "/mystic_pants.png".to_string(),
3226 icon_path: "/mystic_pants.png".to_string(),
3227 item_type: ItemType::Boots,
3228 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3229 attributes_settings: ItemAttributeSettings {
3230 optional_attributes_count: 1,
3231 optional_attributes_ids: vec![uuid!("3a6ec1c8-7494-43df-a345-d23e297b892d")],
3232 },
3233 skin_id: None,
3234 exclude_from_mimic: false,
3235 },
3236 ItemTemplate {
3237 id: uuid!("1eda3aa8-8868-4f77-8ac3-cb2c0b080f1d"),
3238 name: i18n::I18nString::new("content.items.1eda3aa8-8868-4f77-8ac3-cb2c0b080f1d:name"),
3239 icon_url: "/immortal_blade.png".to_string(),
3240 icon_path: "/immortal_blade.png".to_string(),
3241 item_type: ItemType::Gloves,
3242 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3243 attributes_settings: ItemAttributeSettings {
3244 optional_attributes_count: 1,
3245 optional_attributes_ids: vec![uuid!("3a6ec1c8-7494-43df-a345-d23e297b892d")],
3246 },
3247 skin_id: None,
3248 exclude_from_mimic: false,
3249 },
3250 ItemTemplate {
3251 id: uuid!("255ad949-72cc-48dc-8129-30584a5a69b7"),
3252 name: i18n::I18nString::new("content.items.255ad949-72cc-48dc-8129-30584a5a69b7:name"),
3253 icon_url: "/divine_armor.png".to_string(),
3254 icon_path: "/divine_armor.png".to_string(),
3255 item_type: ItemType::Waist,
3256 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3257 attributes_settings: ItemAttributeSettings {
3258 optional_attributes_count: 1,
3259 optional_attributes_ids: vec![uuid!("3a6ec1c8-7494-43df-a345-d23e297b892d")],
3260 },
3261 skin_id: None,
3262 exclude_from_mimic: false,
3263 },
3264 ItemTemplate {
3265 id: uuid!("32be4f79-5327-4118-9594-e67a3a97959d"),
3266 name: i18n::I18nString::new("content.items.32be4f79-5327-4118-9594-e67a3a97959d:name"),
3267 icon_url: "/ancient_crown.png".to_string(),
3268 icon_path: "/ancient_crown.png".to_string(),
3269 item_type: ItemType::Neck,
3270 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3271 attributes_settings: ItemAttributeSettings {
3272 optional_attributes_count: 1,
3273 optional_attributes_ids: vec![uuid!("3a6ec1c8-7494-43df-a345-d23e297b892d")],
3274 },
3275 skin_id: None,
3276 exclude_from_mimic: false,
3277 },
3278 ItemTemplate {
3279 id: uuid!("8c7cdde1-e80b-4b40-a5d8-039bf39db419"),
3280 name: i18n::I18nString::new("content.items.8c7cdde1-e80b-4b40-a5d8-039bf39db419:name"),
3281 icon_url: "/godlike_scepter.png".to_string(),
3282 icon_path: "/godlike_scepter.png".to_string(),
3283 item_type: ItemType::Ring,
3284 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3285 attributes_settings: ItemAttributeSettings {
3286 optional_attributes_count: 1,
3287 optional_attributes_ids: vec![uuid!("3a6ec1c8-7494-43df-a345-d23e297b892d")],
3288 },
3289 skin_id: None,
3290 exclude_from_mimic: false,
3291 },
3292 ]
3293}
3294
3295fn generate_items(item_rarities: &[ItemRarity]) -> Vec<ItemTemplate> {
3296 let basic_items = generate_basic_items();
3297 let mut result = basic_items.clone();
3298 for rarity in &item_rarities[1..] {
3299 for item in &basic_items {
3300 result.push(ItemTemplate {
3301 id: Uuid::now_v7(),
3302 rarity_id: rarity.id,
3303 ..item.clone()
3304 });
3305 }
3306 }
3307 result
3308}
3309
3310fn generate_bundles() -> Vec<bundles::BundleRaw> {
3311 let first_steps = vec![
3312 bundles::BundleRawStep {
3313 item_type: bundles::BundleStepType::Currency,
3314 script:
3315 r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 80)); Result.push(CurrencyUnit(uuid("22297520-abb8-45b9-9fbb-c418b8001246"), 70));"#
3316 .into(),
3317 has_pop_up: true,
3318 },
3319 bundles::BundleRawStep {
3320 item_type: bundles::BundleStepType::Ability,
3321 script:
3322 r#"Result.push(AbilityShard(uuid("7e584338-057d-41a2-a80e-8e2c76e98f6a"), 11)); Result.push(AbilityShard(uuid("487a23e5-7401-4c34-a6c6-2401f95249cf"), 1))"#
3323 .into(),
3324 has_pop_up: true,
3325 },
3326 bundles::BundleRawStep {
3327 item_type: bundles::BundleStepType::Item,
3328 script: r#"Result.push(uuid("176c4cc5-7b93-43b4-9f90-958e2791a8d6"))"#.into(),
3329 has_pop_up: false,
3330 },
3331 ];
3332
3333 let second_steps = vec![
3334 bundles::BundleRawStep {
3335 item_type: bundles::BundleStepType::Currency,
3336 script:
3337 r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 50)); Result.push(CurrencyUnit(uuid("22297520-abb8-45b9-9fbb-c418b8001246"), 170));"#
3338 .into(),
3339 has_pop_up: true,
3340 },
3341 bundles::BundleRawStep {
3342 item_type: bundles::BundleStepType::Ability,
3343 script:
3344 r#"Result.push(AbilityShard(uuid("7e584338-057d-41a2-a80e-8e2c76e98f6a"), 6)); Result.push(AbilityShard(uuid("487a23e5-7401-4c34-a6c6-2401f95249cf"), 18))"#
3345 .into(),
3346 has_pop_up: true,
3347 },
3348 bundles::BundleRawStep {
3349 item_type: bundles::BundleStepType::Item,
3350 script: r#"Result.push(uuid("f86cff5-2ce6-4191-95cf-2271cc3686f5"))"#.into(),
3351 has_pop_up: false,
3352 },
3353 ];
3354
3355 let fourth_steps = vec![
3356 bundles::BundleRawStep {
3357 item_type: bundles::BundleStepType::Currency,
3358 script: r#"
3359 if Now - LastClaimAt > unsigned(8) {
3360 Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 228));
3361 } else {
3362 Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 111));
3363 }
3364 "#
3365 .into(),
3366 has_pop_up: true,
3367 },
3368 bundles::BundleRawStep {
3369 item_type: bundles::BundleStepType::Ability,
3370 script: "".into(),
3371 has_pop_up: false,
3372 },
3373 bundles::BundleRawStep {
3374 item_type: bundles::BundleStepType::Item,
3375 script: "".into(),
3376 has_pop_up: false,
3377 },
3378 ];
3379
3380 let all_at_once_steps = vec![
3381 bundles::BundleRawStep {
3382 item_type: bundles::BundleStepType::Currency,
3383 script:
3384 r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 100)); Result.push(CurrencyUnit(uuid("22297520-abb8-45b9-9fbb-c418b8001246"), 200));"#
3385 .into(),
3386 has_pop_up: true,
3387 },
3388 bundles::BundleRawStep {
3389 item_type: bundles::BundleStepType::Ability,
3390 script:
3391 r#"Result.push(AbilityShard(uuid("7e584338-057d-41a2-a80e-8e2c76e98f6a"), 25)); Result.push(AbilityShard(uuid("487a23e5-7401-4c34-a6c6-2401f95249cf"), 10))"#
3392 .into(),
3393 has_pop_up: false,
3394 },
3395 bundles::BundleRawStep {
3396 item_type: bundles::BundleStepType::Item,
3397 script: r#"Result.push(uuid("176c4cc5-7b93-43b4-9f90-958e2791a8d6"))"#.into(),
3398 has_pop_up: false,
3399 },
3400 ];
3401
3402 let basic_bundle = vec![bundles::BundleRawStep {
3403 item_type: bundles::BundleStepType::Currency,
3404 script: r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 100));"#
3405 .into(),
3406 has_pop_up: true,
3407 }];
3408
3409 let basic_bundle_no_popup = vec![bundles::BundleRawStep {
3410 item_type: bundles::BundleStepType::Currency,
3411 script: r#"Result.push(CurrencyUnit(uuid("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"), 100));"#
3412 .into(),
3413 has_pop_up: false,
3414 }];
3415
3416 vec![
3417 bundles::BundleRaw {
3418 id: uuid!("53e8ffaa-7ee4-4612-bbfc-bb157979ca8d"),
3419 steps: first_steps,
3420 claim_mode: bundles::BundleClaimMode::Sequential,
3421 },
3422 bundles::BundleRaw {
3423 id: uuid!("e18fc101-6615-440c-9a1d-42f509986ccc"),
3424 steps: second_steps,
3425 claim_mode: bundles::BundleClaimMode::Sequential,
3426 },
3427 bundles::BundleRaw {
3428 id: uuid!("c86eed27-03d0-4c06-a6b2-e8688c09f7ed"),
3429 steps: vec![],
3430 claim_mode: bundles::BundleClaimMode::Sequential,
3431 },
3432 bundles::BundleRaw {
3433 id: uuid!("1ed77d25-cc1e-41ee-8f46-c4934ca8f684"),
3434 steps: fourth_steps,
3435 claim_mode: bundles::BundleClaimMode::Sequential,
3436 },
3437 bundles::BundleRaw {
3438 id: uuid!("a7f3b8e2-9c4d-4a5e-b6f1-d8e9c7a2b1f0"),
3439 steps: all_at_once_steps,
3440 claim_mode: bundles::BundleClaimMode::AllAtOnce,
3441 },
3442 bundles::BundleRaw {
3443 id: uuid!("8838388b-6f13-4dc8-b0d4-561d8fe84da8"),
3444 steps: basic_bundle,
3445 claim_mode: bundles::BundleClaimMode::AllAtOnce,
3446 },
3447 bundles::BundleRaw {
3448 id: uuid!("9cc6c6e4-e87f-4443-99ce-2f88b2bdbe82"),
3449 steps: basic_bundle_no_popup,
3450 claim_mode: bundles::BundleClaimMode::AllAtOnce,
3451 },
3452 ]
3453}
3454
3455fn generate_ability_presets_settings() -> ability_presets::AbilityPresetsSettings {
3456 ability_presets::AbilityPresetsSettings {
3457 max_presets_count: 4,
3458 default_preset_name: i18n::I18nString::new("content.ability_presets.default_preseset:name"),
3459 }
3460}
3461
3462fn generate_bots_settings() -> BotsSettings {
3463 BotsSettings {
3464 bots_generation_script: r#"
3465 Result.set_level(1);
3466 Result.set_class_id(uuid("00000000-0000-0000-0000-000000000000"));
3467
3468 Result.push_item(UuidIntPair(uuid("176c4cc5-7b93-43b4-9f90-958e2791a8d6"), 1));
3469 Result.push_item(UuidIntPair(uuid("9f86cff5-2ce6-4191-95cf-2271cc3686f5"), 2));
3470
3471 Result.push_ability(UuidIntPair(uuid("7e584338-057d-41a2-a80e-8e2c76e98f6a"), 1));
3472
3473 Result.set_power(52);
3474 "#
3475 .to_string(),
3476 username_generation_settings: UsernameGenerationSettings {
3477 prefixes: vec!["Angry".to_string(), "Chubby".to_string()],
3478 suffixes: vec!["Lord".to_string(), "Queen".to_string()],
3479 template: "{prefix}{suffix} [bot]".to_string(),
3480 },
3481 photo_generation_settings: PhotoGenerationSettings {
3482 templates: vec!["img1".to_string(), "img2".to_string()],
3483 },
3484 }
3485}
3486
3487fn generate_reports_settings() -> ReportsSettings {
3488 ReportsSettings {
3489 ticket_categories: vec!["Technical support".to_string(), "Bug".to_string()],
3490 bug_categories: vec!["Bug".to_string()],
3491 }
3492}
3493
3494fn generate_afk_rewards_levels() -> Vec<AfkRewardsByLevel> {
3495 vec![AfkRewardsByLevel {
3496 chapter_level: 0,
3497 currency_rates: vec![CurrencyRate {
3498 currency_id: uuid!("2ed77d25-cc1e-41ee-8f46-c4934ca8f684"),
3499 rate_per_minute: PositiveF64::new(10.0),
3500 }],
3501 bonus_weights: NonEmptyVec::new(vec![
3502 AfkRewardBonusWeight {
3503 bonus_type: AfkRewardBonusType::Currency(uuid!(
3504 "2ed77d25-cc1e-41ee-8f46-c4934ca8f684"
3505 )),
3506 weight: PositiveF64::new(1.0),
3507 count: PositiveI64::new(100),
3508 },
3509 AfkRewardBonusWeight {
3510 bonus_type: AfkRewardBonusType::Ability(uuid!(
3511 "3ed77d25-cc1e-41ee-8f46-c4934ca8f684"
3512 )),
3513 weight: PositiveF64::new(0.5),
3514 count: PositiveI64::new(1),
3515 },
3516 AfkRewardBonusWeight {
3517 bonus_type: AfkRewardBonusType::Item(uuid!("4ed77d25-cc1e-41ee-8f46-c4934ca8f684")),
3518 weight: PositiveF64::new(0.5),
3519 count: PositiveI64::new(1),
3520 },
3521 ]),
3522 }]
3523}
3524
3525fn generate_afk_rewards_settings() -> AfkRewardsSettings {
3526 AfkRewardsSettings {
3527 bundle_id: uuid!("1ed77d25-cc1e-41ee-8f46-c4934ca8f684"),
3528 min_required_time_sec: 4,
3529 max_possible_time_sec: 8,
3530 bonus_calculation_rate_sec: NonZeroU64::new(60),
3531 instant_reward_duration_sec: 6,
3532 instant_reward_gems_prices: vec![50, 100, 150],
3533 afk_instant_ad_daily_limit: 2,
3534 }
3535}
3536
3537fn generate_users_generating_settings() -> UsersGeneratingSettings {
3538 UsersGeneratingSettings {
3539 username_generation_settings: UsernameGenerationSettings {
3540 prefixes: vec!["Big".to_string(), "Small".to_string()],
3541 suffixes: vec!["Egor".to_string(), "Danya".to_string()],
3542 template: "{prefix} {suffix}".to_string(),
3543 },
3544 photo_generation_settings: PhotoGenerationSettings {
3545 templates: vec!["img1".to_string(), "img2".to_string()],
3546 },
3547 }
3548}
3549
3550fn generate_skins() -> Vec<ConfigSkin> {
3551 vec![
3552 ConfigSkin {
3553 id: uuid!("59a4dd34-b395-436f-8f81-2fb36ee1b714"),
3554 name: i18n::I18nString::new("content.skins.59a4dd34-b395-436f-8f81-2fb36ee1b714:name"),
3555 unlock_description: Some(i18n::I18nString::Translated("Default face unlock".into())),
3556 code: "default_face".to_string(),
3557 skin_type: SkinType::Face,
3558 icon_url: "/skins/face_default.webp".to_string(),
3559 icon_path: "/skins/face_default.webp".to_string(),
3560 spine_path: "".to_string(),
3561 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3562 price: None,
3563 color: Some("".into()),
3564 },
3565 ConfigSkin {
3566 id: uuid!("44d8fbed-9ec9-4a57-865a-59d32465a1f2"),
3567 name: i18n::I18nString::new("content.skins.44d8fbed-9ec9-4a57-865a-59d32465a1f2:name"),
3568 unlock_description: Some(i18n::I18nString::Translated(
3569 "Default hairstyle unlock".into(),
3570 )),
3571 code: "default_hairstyle".to_string(),
3572 skin_type: SkinType::Hairstyle,
3573 icon_url: "/skins/hair_default.webp".to_string(),
3574 icon_path: "/skins/face_default.webp".to_string(),
3575 spine_path: "".to_string(),
3576 rarity_id: uuid!("272f3e73-6b3e-43a0-88d6-d34bdaf5aeae"),
3577 price: Some(vec![CurrencyUnit {
3578 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
3579 amount: 100,
3580 }]),
3581 color: Some("".into()),
3582 },
3583 ConfigSkin {
3584 id: uuid!("a1b2c3d4-e5f6-7890-abcd-ef1234567890"),
3585 name: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
3586 unlock_description: Some(i18n::I18nString::Translated("Test armor unlock".into())),
3587 code: "test_armor".to_string(),
3588 skin_type: SkinType::Armor,
3589 icon_url: "/skins/armor_test.webp".to_string(),
3590 icon_path: "/skins/face_default.webp".to_string(),
3591 spine_path: "".to_string(),
3592 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3593 price: None,
3594 color: Some("".into()),
3595 },
3596 ConfigSkin {
3597 id: uuid!("c0ffee00-1234-5678-9abc-def012345678"),
3598 name: i18n::I18nString::Translated("Helmet".into()),
3599 unlock_description: Some(i18n::I18nString::Translated("Test helmet unlock".into())),
3600 code: "test_helmet".to_string(),
3601 skin_type: SkinType::Helmet,
3602 icon_url: "/skins/helmet_test.webp".to_string(),
3603 icon_path: "/skins/helmet_test.webp".to_string(),
3604 spine_path: "".to_string(),
3605 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3606 price: Some(vec![CurrencyUnit {
3607 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
3608 amount: 200,
3609 }]),
3610 color: Some("".into()),
3611 },
3612 ConfigSkin {
3613 id: uuid!("a1b2c3d4-e5f6-7890-abcd-ef1234567892"),
3614 name: i18n::I18nString::Translated("Alt armor".into()),
3615 unlock_description: Some(i18n::I18nString::Translated("Alt armor unlock".into())),
3616 code: "test_armor_alt".to_string(),
3617 skin_type: SkinType::Armor,
3618 icon_url: "/skins/armor_alt.webp".to_string(),
3619 icon_path: "/skins/armor_alt.webp".to_string(),
3620 spine_path: "".to_string(),
3621 rarity_id: uuid!("8c8acba2-67d3-40e0-ac62-2f7acce64ccc"),
3622 price: None,
3623 color: Some("".into()),
3624 },
3625 ]
3626}
3627
3628fn generate_skins_settings() -> SkinsSettings {
3629 SkinsSettings {
3630 default_unlocked_skins: vec![uuid!("59a4dd34-b395-436f-8f81-2fb36ee1b714")],
3631 default_equipped_skins: vec![uuid!("a1b2c3d4-e5f6-7890-abcd-ef1234567890")],
3632 }
3633}
3634
3635fn generate_offers_templates() -> Vec<OfferTemplate> {
3636 vec![
3637 OfferTemplate {
3638 id: uuid!("0fab3fca-d35c-4fbd-8f95-4033e548be6f"),
3639 alias: "First Daily".to_string(),
3640 title: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
3641 icon_path: String::new(),
3642 reward_bundle_id: uuid!("8838388b-6f13-4dc8-b0d4-561d8fe84da8"),
3643 payment_type: PaymentType::InGameCurrency(vec![CurrencyUnit {
3644 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
3645 amount: 50,
3646 }]),
3647 limit_of_buys: Some(3),
3648 buys_reset_seconds: None,
3649 limit_buy_text: None,
3650 events_subscribe: vec![],
3651 trigger_script: "true".to_string(),
3652 shop_tab: ShopTab::DailyDeals,
3653 enabled: true,
3654 flag_new: false,
3655 flag_sale: None,
3656 value: None,
3657 priority: 0,
3658 },
3659 OfferTemplate {
3660 id: uuid!("4af19145-037d-4d9b-b9a5-98e7d8c7b127"),
3661 alias: "Second Daily".to_string(),
3662 title: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
3663 icon_path: String::new(),
3664 reward_bundle_id: uuid!("8838388b-6f13-4dc8-b0d4-561d8fe84da8"),
3665 payment_type: PaymentType::InGameCurrency(vec![CurrencyUnit {
3666 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
3667 amount: 50,
3668 }]),
3669 limit_of_buys: Some(1),
3670 buys_reset_seconds: None,
3671 limit_buy_text: None,
3672 events_subscribe: vec![],
3673 trigger_script: "true".to_string(),
3674 shop_tab: ShopTab::DailyDeals,
3675 enabled: true,
3676 flag_new: false,
3677 flag_sale: None,
3678 value: None,
3679 priority: 0,
3680 },
3681 OfferTemplate {
3682 id: uuid!("6fea60b3-db1c-4a20-a03c-94716a32afbc"),
3683 alias: "First triggered".to_string(),
3684 title: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
3685 icon_path: String::new(),
3686 reward_bundle_id: uuid!("8838388b-6f13-4dc8-b0d4-561d8fe84da8"),
3687 payment_type: PaymentType::InGameCurrency(vec![CurrencyUnit {
3688 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
3689 amount: 50,
3690 }]),
3691 limit_of_buys: Some(2),
3692 buys_reset_seconds: Some(86400),
3693 limit_buy_text: None,
3694 events_subscribe: vec!["EnableAutoSell".to_string()],
3695 trigger_script: "true".to_string(),
3696 shop_tab: ShopTab::Resources,
3697 enabled: true,
3698 flag_new: false,
3699 flag_sale: None,
3700 value: None,
3701 priority: 0,
3702 },
3703 OfferTemplate {
3704 id: uuid!("11111111-1111-1111-1111-111111111111"),
3705 alias: "Disabled offer".to_string(),
3706 title: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
3707 icon_path: String::new(),
3708 reward_bundle_id: uuid!("8838388b-6f13-4dc8-b0d4-561d8fe84da8"),
3709 payment_type: PaymentType::InGameCurrency(vec![CurrencyUnit {
3710 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
3711 amount: 50,
3712 }]),
3713 limit_of_buys: Some(1),
3714 buys_reset_seconds: Some(86400),
3715 limit_buy_text: None,
3716 events_subscribe: vec![],
3717 trigger_script: "true".to_string(),
3718 shop_tab: ShopTab::DailyDeals,
3719 enabled: false,
3720 flag_new: false,
3721 flag_sale: None,
3722 value: None,
3723 priority: 0,
3724 },
3725 OfferTemplate {
3726 id: uuid!("22222222-2222-2222-2222-222222222222"),
3727 alias: "Free offer".to_string(),
3728 title: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
3729 icon_path: String::new(),
3730 reward_bundle_id: uuid!("8838388b-6f13-4dc8-b0d4-561d8fe84da8"),
3731 payment_type: PaymentType::Free,
3732 limit_of_buys: Some(1),
3733 buys_reset_seconds: Some(86400),
3734 limit_buy_text: None,
3735 events_subscribe: vec!["EnableAutoChest".to_string()],
3736 trigger_script: "true".to_string(),
3737 shop_tab: ShopTab::DailyDeals,
3738 enabled: true,
3739 flag_new: false,
3740 flag_sale: None,
3741 value: None,
3742 priority: 0,
3743 },
3744 OfferTemplate {
3745 id: uuid!("33333333-3333-3333-3333-333333333333"),
3746 alias: "Ad offer".to_string(),
3747 title: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
3748 icon_path: String::new(),
3749 reward_bundle_id: uuid!("8838388b-6f13-4dc8-b0d4-561d8fe84da8"),
3750 payment_type: PaymentType::Ad,
3751 limit_of_buys: Some(1),
3752 buys_reset_seconds: Some(86400),
3753 limit_buy_text: None,
3754 events_subscribe: vec!["DisableAutoChest".to_string()],
3755 trigger_script: "true".to_string(),
3756 shop_tab: ShopTab::Diamonds,
3757 enabled: true,
3758 flag_new: false,
3759 flag_sale: None,
3760 value: None,
3761 priority: 0,
3762 },
3763 OfferTemplate {
3764 id: uuid!("0b5cfa47-43bf-46db-930d-1d4a975f17d9"),
3765 alias: "Cash offer".to_string(),
3766 title: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
3767 icon_path: String::new(),
3768 reward_bundle_id: uuid!("8838388b-6f13-4dc8-b0d4-561d8fe84da8"),
3769 payment_type: PaymentType::RealMoney,
3770 limit_of_buys: Some(1),
3771 buys_reset_seconds: Some(86400),
3772 limit_buy_text: None,
3773 events_subscribe: vec!["DisableCaseUpgradePopUp".to_string()],
3774 trigger_script: "true".to_string(),
3775 shop_tab: ShopTab::Diamonds,
3776 enabled: true,
3777 flag_new: false,
3778 flag_sale: None,
3779 value: None,
3780 priority: 0,
3781 },
3782 OfferTemplate {
3784 id: uuid!("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"),
3785 alias: "Chain start offer".to_string(),
3786 title: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
3787 icon_path: String::new(),
3788 reward_bundle_id: uuid!("8838388b-6f13-4dc8-b0d4-561d8fe84da8"),
3789 payment_type: PaymentType::InGameCurrency(vec![CurrencyUnit {
3790 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
3791 amount: 50,
3792 }]),
3793 limit_of_buys: Some(1),
3794 buys_reset_seconds: Some(86400),
3795 limit_buy_text: None,
3796 events_subscribe: vec!["DisableAutoSell".to_string()],
3797 trigger_script: "true".to_string(),
3798 shop_tab: ShopTab::Resources,
3799 enabled: true,
3800 flag_new: false,
3801 flag_sale: None,
3802 value: None,
3803 priority: 0,
3804 },
3805 OfferTemplate {
3808 id: uuid!("dddddddd-dddd-dddd-dddd-dddddddddddd"),
3809 alias: "Unlimited offer".to_string(),
3810 title: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
3811 icon_path: String::new(),
3812 reward_bundle_id: uuid!("8838388b-6f13-4dc8-b0d4-561d8fe84da8"),
3813 payment_type: PaymentType::Free,
3814 limit_of_buys: None,
3815 buys_reset_seconds: None,
3816 limit_buy_text: None,
3817 events_subscribe: vec!["_never".to_string()],
3818 trigger_script: "false".to_string(),
3819 shop_tab: ShopTab::DailyDeals,
3820 enabled: true,
3821 flag_new: false,
3822 flag_sale: None,
3823 value: None,
3824 priority: 0,
3825 },
3826 OfferTemplate {
3828 id: uuid!("eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee"),
3829 alias: "Short reset daily".to_string(),
3830 title: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
3831 icon_path: String::new(),
3832 reward_bundle_id: uuid!("8838388b-6f13-4dc8-b0d4-561d8fe84da8"),
3833 payment_type: PaymentType::Free,
3834 limit_of_buys: Some(1),
3835 buys_reset_seconds: Some(60),
3836 limit_buy_text: None,
3837 events_subscribe: vec![],
3838 trigger_script: "true".to_string(),
3839 shop_tab: ShopTab::DailyDeals,
3840 enabled: true,
3841 flag_new: false,
3842 flag_sale: None,
3843 value: None,
3844 priority: 0,
3845 },
3846 OfferTemplate {
3848 id: uuid!("cccccccc-cccc-cccc-cccc-cccccccccccc"),
3849 alias: "Disabled triggered offer".to_string(),
3850 title: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
3851 icon_path: String::new(),
3852 reward_bundle_id: uuid!("8838388b-6f13-4dc8-b0d4-561d8fe84da8"),
3853 payment_type: PaymentType::Free,
3854 limit_of_buys: Some(1),
3855 buys_reset_seconds: Some(86400),
3856 limit_buy_text: None,
3857 events_subscribe: vec!["DisableAutoSell".to_string()],
3858 trigger_script: "true".to_string(),
3859 shop_tab: ShopTab::DailyDeals,
3860 enabled: false,
3861 flag_new: false,
3862 flag_sale: None,
3863 value: None,
3864 priority: 0,
3865 },
3866 ]
3867}
3868
3869fn generate_shop_tabs() -> Vec<ShopTabConfig> {
3870 vec![
3871 ShopTabConfig {
3872 tab: ShopTab::DailyDeals,
3873 name: i18n::I18nString::Translated("Daily Deals".to_string()),
3874 },
3875 ShopTabConfig {
3876 tab: ShopTab::Diamonds,
3877 name: i18n::I18nString::Translated("Diamonds".to_string()),
3878 },
3879 ShopTabConfig {
3880 tab: ShopTab::Resources,
3881 name: i18n::I18nString::Translated("Resources".to_string()),
3882 },
3883 ]
3884}
3885
3886fn generate_ratings_settings() -> Vec<RatingSettings> {
3887 vec![
3888 RatingSettings {
3889 id: uuid!("2a743358-aace-4404-8582-aae2c67bcb7b"),
3890 rating_type: RatingType::Arena,
3891 rating_range_rewards: vec![
3892 RatingRangeReward {
3893 mail_template_id: Some(uuid!("98eea253-ac84-49ea-becb-4d5ef9c18b5c")),
3894 diapason_start: 1,
3895 diapason_end: Some(2),
3896 },
3897 RatingRangeReward {
3898 mail_template_id: Some(uuid!("0042b76d-bfbe-4e02-a6a6-4881e229da88")),
3899 diapason_start: 3,
3900 diapason_end: Some(3),
3901 },
3902 ],
3903 },
3904 RatingSettings {
3905 id: uuid!("a4b3388c-6d77-437d-aa41-91c4850ab01a"),
3906 rating_type: RatingType::Power,
3907 rating_range_rewards: vec![],
3908 },
3909 RatingSettings {
3910 id: uuid!("998fa5ac-9bd6-4b19-a13a-2e8c7ad6fcbd"),
3911 rating_type: RatingType::PvE,
3912 rating_range_rewards: vec![],
3913 },
3914 ]
3915}
3916
3917fn generate_gatings() -> Gatings {
3918 Gatings {
3919 afk_rewards_button_unlock_chapter: 2,
3920 sidebar_navigation: SideBarNavigation {
3921 quests_button_unlock_chapter: 2,
3922 arena_button_unlock_chapter: 2,
3923 ratings_button_unlock_chapter: 2,
3924 mail_button_unlock_chapter: 2,
3925 },
3926 party_unlock_chapter: 2,
3927 navbar_navigation: NavBarNavigation {
3928 castle: CastleGating {
3929 statue_unlock_chapter: 2,
3930 ..Default::default()
3931 },
3932 ..Default::default()
3933 },
3934 ..Default::default()
3935 }
3936}
3937
3938pub fn generate_test_talents() -> Vec<TalentTemplate> {
3939 vec![
3940 TalentTemplate {
3941 id: uuid!("a1000000-0000-0000-0000-000000000001"),
3942 name: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
3943 description: i18n::I18nString::new(
3944 "content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name",
3945 ),
3946 description_values_script: None,
3947 icon_url: String::new(),
3948 icon_path: String::new(),
3949 levels: vec![
3950 TalentLevel {
3951 level: 1,
3952 cost: CurrencyUnit {
3953 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
3954 amount: 100,
3955 },
3956 duration_sec: 10,
3957 attribute_bonuses: vec![TalentAttributeBonus {
3958 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
3959 value: 50,
3960 }],
3961 backend_modifiers: vec![],
3962 },
3963 TalentLevel {
3964 level: 2,
3965 cost: CurrencyUnit {
3966 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
3967 amount: 200,
3968 },
3969 duration_sec: 20,
3970 attribute_bonuses: vec![TalentAttributeBonus {
3971 attribute_id: uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08"),
3972 value: 50,
3973 }],
3974 backend_modifiers: vec![],
3975 },
3976 ],
3977 unlock_condition: TalentUnlockCondition {
3978 required_talents: vec![],
3979 required_points: 0,
3980 },
3981 position: TalentPosition { col: 0, row: 0 },
3982 },
3983 TalentTemplate {
3984 id: uuid!("a1000000-0000-0000-0000-000000000002"),
3985 name: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
3986 description: i18n::I18nString::new(
3987 "content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name",
3988 ),
3989 description_values_script: None,
3990 icon_url: String::new(),
3991 icon_path: String::new(),
3992 levels: vec![
3993 TalentLevel {
3994 level: 1,
3995 cost: CurrencyUnit {
3996 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
3997 amount: 150,
3998 },
3999 duration_sec: 30,
4000 attribute_bonuses: vec![],
4001 backend_modifiers: vec![TalentBackendModifier::TalentResearchSpeedPercent(
4002 20.0,
4003 )],
4004 },
4005 TalentLevel {
4006 level: 2,
4007 cost: CurrencyUnit {
4008 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
4009 amount: 300,
4010 },
4011 duration_sec: 60,
4012 attribute_bonuses: vec![],
4013 backend_modifiers: vec![TalentBackendModifier::TalentResearchSpeedPercent(
4014 20.0,
4015 )],
4016 },
4017 ],
4018 unlock_condition: TalentUnlockCondition {
4019 required_talents: vec![uuid!("a1000000-0000-0000-0000-000000000001")],
4020 required_points: 0,
4021 },
4022 position: TalentPosition { col: 1, row: 0 },
4023 },
4024 TalentTemplate {
4026 id: uuid!("a1000000-0000-0000-0000-000000000003"),
4027 name: i18n::I18nString::new("content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name"),
4028 description: i18n::I18nString::new(
4029 "content.skins.a1b2c3d4-e5f6-7890-abcd-ef1234567890:name",
4030 ),
4031 description_values_script: None,
4032 icon_url: String::new(),
4033 icon_path: String::new(),
4034 levels: vec![TalentLevel {
4035 level: 1,
4036 cost: CurrencyUnit {
4037 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
4038 amount: 100,
4039 },
4040 duration_sec: 2000,
4041 attribute_bonuses: vec![],
4042 backend_modifiers: vec![],
4043 }],
4044 unlock_condition: TalentUnlockCondition {
4045 required_talents: vec![],
4046 required_points: 0,
4047 },
4048 position: TalentPosition { col: 2, row: 0 },
4049 },
4050 ]
4051}
4052
4053fn generate_statue_bonus_grades() -> NonEmptyVec<StatueBonusGrade> {
4054 NonEmptyVec::new(vec![
4055 StatueBonusGrade {
4056 id: uuid!("a1000000-0000-0000-0000-000000000001"),
4057 name: i18n::I18nString::Translated("F".to_string()),
4058 color: "#808080".to_string(),
4059 order: 0,
4060 },
4061 StatueBonusGrade {
4062 id: uuid!("a1000000-0000-0000-0000-000000000002"),
4063 name: i18n::I18nString::Translated("D".to_string()),
4064 color: "#00aa00".to_string(),
4065 order: 1,
4066 },
4067 StatueBonusGrade {
4068 id: uuid!("a1000000-0000-0000-0000-000000000003"),
4069 name: i18n::I18nString::Translated("C".to_string()),
4070 color: "#0000ff".to_string(),
4071 order: 2,
4072 },
4073 StatueBonusGrade {
4074 id: uuid!("a1000000-0000-0000-0000-000000000009"),
4075 name: i18n::I18nString::Translated("SSS+".to_string()),
4076 color: "#ff0000".to_string(),
4077 order: 8,
4078 },
4079 ])
4080}
4081
4082fn generate_statue_settings() -> StatueSettings {
4083 StatueSettings {
4084 currency_id: uuid!("b59b33a2-4d19-4e2c-9cea-e03ea15882a0"),
4086 roll_costs: NonEmptyVec::new(vec![
4087 StatueRollCostConfig {
4088 locked_count: 0,
4089 cost: PositiveI64::new(100),
4090 },
4091 StatueRollCostConfig {
4092 locked_count: 1,
4093 cost: PositiveI64::new(300),
4094 },
4095 StatueRollCostConfig {
4096 locked_count: 2,
4097 cost: PositiveI64::new(500),
4098 },
4099 StatueRollCostConfig {
4100 locked_count: 3,
4101 cost: PositiveI64::new(700),
4102 },
4103 StatueRollCostConfig {
4104 locked_count: 4,
4105 cost: PositiveI64::new(900),
4106 },
4107 StatueRollCostConfig {
4108 locked_count: 5,
4109 cost: PositiveI64::new(1200),
4110 },
4111 ]),
4112 }
4113}
4114
4115fn generate_statue_bonus_type_configs() -> NonEmptyVec<StatueBonusTypeConfig> {
4116 let grade_f = uuid!("a1000000-0000-0000-0000-000000000001");
4117 let grade_d = uuid!("a1000000-0000-0000-0000-000000000002");
4118 let grade_c = uuid!("a1000000-0000-0000-0000-000000000003");
4119 let grade_sss_plus = uuid!("a1000000-0000-0000-0000-000000000009");
4120 let attr_hp = uuid!("45eca0a7-7430-487b-bd65-b796c6d88c08");
4121 let attr_damage = uuid!("6ad485d7-9567-4b77-8ddc-a2418dd1dfe6");
4122
4123 NonEmptyVec::new(vec![
4124 StatueBonusTypeConfig {
4125 attribute_id: attr_hp,
4126 grade_values: NonEmptyVec::new(vec![
4127 StatueBonusGradeValue {
4128 grade_id: grade_f,
4129 value: PositiveI32::new(100),
4130 },
4131 StatueBonusGradeValue {
4132 grade_id: grade_d,
4133 value: PositiveI32::new(200),
4134 },
4135 StatueBonusGradeValue {
4136 grade_id: grade_c,
4137 value: PositiveI32::new(300),
4138 },
4139 StatueBonusGradeValue {
4140 grade_id: grade_sss_plus,
4141 value: PositiveI32::new(1200),
4142 },
4143 ]),
4144 },
4145 StatueBonusTypeConfig {
4146 attribute_id: attr_damage,
4147 grade_values: NonEmptyVec::new(vec![
4148 StatueBonusGradeValue {
4149 grade_id: grade_f,
4150 value: PositiveI32::new(100),
4151 },
4152 StatueBonusGradeValue {
4153 grade_id: grade_d,
4154 value: PositiveI32::new(200),
4155 },
4156 StatueBonusGradeValue {
4157 grade_id: grade_c,
4158 value: PositiveI32::new(300),
4159 },
4160 StatueBonusGradeValue {
4161 grade_id: grade_sss_plus,
4162 value: PositiveI32::new(1200),
4163 },
4164 ]),
4165 },
4166 ])
4167}
4168
4169fn generate_statue_level_configs() -> NonEmptyVec<StatueLevelConfig> {
4170 let grade_f = uuid!("a1000000-0000-0000-0000-000000000001");
4171 let grade_d = uuid!("a1000000-0000-0000-0000-000000000002");
4172 let grade_c = uuid!("a1000000-0000-0000-0000-000000000003");
4173 let grade_sss_plus = uuid!("a1000000-0000-0000-0000-000000000009");
4174
4175 NonEmptyVec::new(vec![
4176 StatueLevelConfig {
4177 level: 1,
4178 required_experience: 0,
4179 slot_count: NonZeroU64::new(3),
4180 sets_count: NonZeroU64::new(1),
4181 grade_weights: NonEmptyVec::new(vec![
4182 StatueBonusGradeWeight {
4183 grade_id: grade_f,
4184 weight: PositiveF64::new(5.0),
4185 },
4186 StatueBonusGradeWeight {
4187 grade_id: grade_d,
4188 weight: PositiveF64::new(3.0),
4189 },
4190 StatueBonusGradeWeight {
4191 grade_id: grade_c,
4192 weight: PositiveF64::new(2.0),
4193 },
4194 ]),
4195 },
4196 StatueLevelConfig {
4197 level: 2,
4198 required_experience: 200,
4199 slot_count: NonZeroU64::new(4),
4200 sets_count: NonZeroU64::new(2),
4201 grade_weights: NonEmptyVec::new(vec![
4202 StatueBonusGradeWeight {
4203 grade_id: grade_f,
4204 weight: PositiveF64::new(4.0),
4205 },
4206 StatueBonusGradeWeight {
4207 grade_id: grade_d,
4208 weight: PositiveF64::new(3.0),
4209 },
4210 StatueBonusGradeWeight {
4211 grade_id: grade_c,
4212 weight: PositiveF64::new(2.0),
4213 },
4214 StatueBonusGradeWeight {
4215 grade_id: grade_sss_plus,
4216 weight: PositiveF64::new(1.0),
4217 },
4218 ]),
4219 },
4220 ])
4221}
4222
4223pub fn generate_game_config_for_tests() -> GameConfig {
4224 let mut game_config = GameConfig {
4225 script_modules: vec![],
4226 attributes: generate_attributes(),
4227 item_cases_settings: generate_item_cases_settings(),
4228 game_settings: generate_game_settings(),
4229 ads_settings: generate_ads_settings(),
4230 items: vec![],
4231 item_rarities: generate_item_rarities(),
4232 skins: generate_skins(),
4233 skins_settings: generate_skins_settings(),
4234 effects: generate_effects(),
4235 abilities: generate_abilities(),
4236 ability_cases_settings: generate_ability_cases_settings(),
4237 ability_rarities: generate_ability_rarities(),
4238 ability_levels: generate_ability_levels(),
4239 fight_settings: generate_fight_settings(),
4240 entities: generate_entities(),
4241 fight_templates: generate_fight_templates(),
4242 dungeon_templates: generate_dungeon_templates(),
4243 chapters: generate_chapters(),
4244 character_levels: generate_character_levels(),
4245 ability_slots_levels: generate_ability_slots_levels(),
4246 patron_levels: generate_patron_levels(),
4247 quests: generate_quests(),
4248 quests_progression_settings: generate_quests_progression_settings(),
4249 vassals_settings: generate_vassals_settings(),
4250 vassal_tasks: generate_vassal_tasks(),
4251 pvp_settings: generate_pvp_settings(),
4252 gifts: generate_gifts(),
4253 currencies: generate_currencies(),
4254 inventory_levels: generate_inventory_levels(),
4255 arena_settings: generate_arena_settings(),
4256 arena_leagues: generate_arena_leagues(),
4257 matchmaking_settings: generate_matchmaking_settings(),
4258 event_descriptions: generate_event_descriptions(),
4259 classes: generate_classes(),
4260 projectiles: generate_projectiles(),
4261 mail_templates: generate_mail_templates(),
4262 bundles: generate_bundles(),
4263 ability_presets_settings: generate_ability_presets_settings(),
4264 bots_settings: generate_bots_settings(),
4265 reports_settings: generate_reports_settings(),
4266 afk_rewards_settings: generate_afk_rewards_settings(),
4267 afk_rewards_levels: generate_afk_rewards_levels(),
4268 users_generating_settings: generate_users_generating_settings(),
4269 tutorial_steps: vec![],
4270 chats_settings: vec![],
4271 offers_templates: generate_offers_templates(),
4272 shop_tabs: generate_shop_tabs(),
4273 ratings_settings: generate_ratings_settings(),
4274 cheat_scripts: vec![],
4275 test_player_scripts: vec![],
4276 gatings: generate_gatings(),
4277 pet_rarities: generate_pet_rarities(),
4278 pet_templates: generate_pet_templates(),
4279 pet_levels: generate_pet_levels(),
4280 pet_slots_levels: generate_pet_slots_levels(),
4281 pet_cases_settings: generate_pet_cases_settings(),
4282 talent_tree_settings: TalentTreeSettings {
4283 time_skip_ticket_skips_sec: 1800,
4284 skip_currency_id: uuid!("6c050b07-5282-4a23-8bbf-dabecd27cade"),
4285 skip_currency_skips_sec: 900,
4286 },
4287 talents: generate_test_talents(),
4288 statue_bonus_grades: generate_statue_bonus_grades(),
4289 statue_bonus_type_configs: generate_statue_bonus_type_configs(),
4290 statue_level_configs: generate_statue_level_configs(),
4291 statue_settings: generate_statue_settings(),
4292 buff_templates: vec![BuffTemplate {
4293 id: uuid!("b2c3d4e5-f6a7-8901-bcde-f12345678901"),
4294 title: i18n::I18nString::Translated("Daily Booster x1.5".to_string()),
4295 description: i18n::I18nString::Translated(
4296 "Exp and currency gain multiplied by 1.5 until end of day".to_string(),
4297 ),
4298 icon_path: String::new(),
4299 effect: BuffEffect::CurrencyExpBoost {
4300 multiplier: 1.5,
4301 currency_id: uuid!("00000000-0000-0000-0000-000000000000"),
4302 },
4303 }],
4304 bird_variants: vec![
4305 BirdVariant {
4306 id: uuid!("d1e2f3a4-b5c6-7890-abcd-ef1234567891"),
4307 spine_path: "/bird_variant_1".to_string(),
4308 bundle_id: uuid!("53e8ffaa-7ee4-4612-bbfc-bb157979ca8d"),
4309 },
4310 BirdVariant {
4311 id: uuid!("d1e2f3a4-b5c6-7890-abcd-ef1234567892"),
4312 spine_path: "/bird_variant_2".to_string(),
4313 bundle_id: uuid!("e18fc101-6615-440c-9a1d-42f509986ccc"),
4314 },
4315 ],
4316 };
4317
4318 game_config.items = generate_items(&game_config.item_rarities);
4319
4320 game_config
4321}