1use chrono::Utc;
2use configs::cheats::CheatScriptId;
3use essences::ability_presets::AbilityPresetId;
4use essences::ad_usage::AdPlacement;
5use essences::autochest::{AutoChestFilter, AutoChestFilterId};
6use essences::currency::{CurrencyConsumer, CurrencySource, CurrencyUnit};
7use essences::dungeons::DungeonTemplateId;
8use essences::entity::{Coordinates, EntityAttributes, EntityId};
9use essences::fighting::{EntityTeam, FightTemplateId};
10use essences::game::EntityTemplateId;
11use essences::gift::Gift;
12use essences::items::{Item, ItemTemplateId, ItemType};
13use essences::offers::{Offer, OfferId, OfferTemplateId};
14use essences::pets::{EquippedPets, PetCaseRollType, PetDrop, PetId, PetSlotId, UpgradedPetsMap};
15use essences::prelude::*;
16use essences::pvp::PVPState;
17use essences::quest::QuestGroupType;
18use essences::skins::SkinId;
19use essences::talent_tree::TalentId;
20use essences::vassals::Suzerain;
21use essences::vassals::VassalTask;
22use essences::{
23 abilities::{
24 AbilityCaseRollType, AbilityDrop, AbilityId, AbilitySlotId, EquippedAbilities,
25 UpgradedAbilitiesMap,
26 },
27 bundles::BundleId,
28};
29use event_system::derive::Event;
30use event_system::derive::RhaiEnum;
31pub use event_system::event::Event;
32use event_system::event::{EventRhaiEnum, EventStruct, EventVec};
33use event_system::script::scope::ScriptScope;
34use schemars::JsonSchema;
35
36use crate::script::CustomEventData;
37
38#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema, Tsify)]
39#[tsify(from_wasm_abi, into_wasm_abi)]
40pub enum AdRewardType {
41 AfkInstant,
42 AfkBoost,
43 DailyBooster,
44 UpgradeSpeedup,
45 FreeAbilityCaseOpen,
46 FreePetCaseOpen,
47 DungeonRaid {
48 dungeon_id: DungeonTemplateId,
49 difficulty: i64,
50 },
51 ArenaRefresh,
52 ClaimBirdReward {
53 variant_id: configs::ads_settings::BirdVariantId,
54 },
55}
56
57#[derive(
58 PartialEq,
59 Eq,
60 Clone,
61 Debug,
62 Event,
63 RhaiEnum,
64 JsonSchema,
65 Tsify,
66 Serialize,
67 Deserialize,
68 strum_macros::Display,
69 strum_macros::VariantNames,
70)]
71#[tsify(into_wasm_abi, from_wasm_abi, namespace)]
72pub enum OverlordEvent {
73 #[event_type(client)]
75 OpenItemCase {
76 batch_size: i64,
77 },
78 AutoChestOpenItemCase {
79 batch_size: i64,
80 },
81 PlayerNewItems {
82 items: Vec<Item>,
83 },
84 #[event_type(client)]
85 PlayerEquipItem {
86 item_id: Uuid,
87 },
88 #[event_type(client)]
89 SellItem {
90 item_id: Uuid,
91 },
92 ItemSold {
93 item_id: Uuid,
94 },
95 #[event_type(client, sync)]
96 UpgradeItemCase {},
97 ItemCaseUpgraded {},
98 #[event_type(client, sync)]
99 SpeedupUpgradeItemCase {},
100 #[event_type(client, sync)]
101 SkipUpgradeItemCase {},
102 #[event_type(client, sync)]
103 ClaimUpgradeItemCase {},
104
105 #[event_type(client)]
106 EnableAutoSell {},
107
108 #[event_type(client)]
109 DisableAutoSell {},
110
111 #[event_type(client)]
112 SetGearOverrideEnabled {
113 item_type: ItemType,
114 enabled: bool,
115 },
116
117 #[event_type(client)]
119 EnableAutoChest {},
120
121 #[event_type(client)]
122 DisableAutoChest {},
123
124 #[event_type(client)]
125 EnableAutoChestFilter {
126 filter_id: AutoChestFilterId,
127 },
128
129 #[event_type(client)]
130 DisableAutoChestFilter {},
131
132 #[event_type(client)]
133 EnableAutoChestPowerCompare {},
134
135 #[event_type(client)]
136 DisableAutoChestPowerCompare {},
137
138 #[event_type(client)]
139 UpdateAutoChestBatchSize {
140 batch_size: i64,
141 },
142
143 #[event_type(client)]
144 NewAutoChestFilter {
145 filter: AutoChestFilter,
146 },
147
148 #[event_type(client)]
149 UpdateAutoChestFilter {
150 updated_filter: AutoChestFilter,
151 },
152
153 #[event_type(client)]
154 RemoveAutoChestFilter {
155 filter_id: AutoChestFilterId,
156 },
157
158 #[event_type(client, sync)]
160 OpenAbilityCase {
161 roll_type: AbilityCaseRollType,
162 },
163
164 #[event_type(client, sync)]
167 SetAbilityGachaWishlist {
168 ability_ids: Vec<AbilityId>,
169 },
170
171 #[event_type(client, sync)]
173 UpgradeAbilitySlot {
174 slot_id: u64,
175 },
176
177 AbilityCaseOpened {
178 batch_size: u8,
179 },
180
181 NewAbilities {
183 abilities: Vec<AbilityDrop>,
184 },
185
186 #[event_type(client, sync)]
187 FastEquipAbilities {},
188
189 #[event_type(client)]
190 EquipAbility {
191 slot_id: u64,
192 ability_id: AbilityId,
193 },
194
195 #[event_type(client)]
196 UnequipAbility {
197 slot_id: AbilitySlotId,
198 },
199
200 EquipAbilities {
201 equipped_abilities: EquippedAbilities,
202 },
203
204 #[event_type(client, sync)]
205 UpgradeAbility {
206 ability_id: AbilityId,
207 },
208
209 #[event_type(client, sync)]
210 UpgradeAllAbilities {},
211
212 UpgradedAbilities {
214 upgraded_abilities: UpgradedAbilitiesMap,
215 },
216
217 UpgradeAbilityCase {},
218
219 CurrencyIncrease {
220 currencies: Vec<CurrencyUnit>,
221 currency_source: CurrencySource,
222 },
223
224 CurrencyDecrease {
225 currencies: Vec<CurrencyUnit>,
226 currency_consumer: CurrencyConsumer,
227 },
228
229 NewCharacterLevel {
231 level: i64,
232 },
233
234 #[event_type(client, sync)]
236 StartGame {},
237 #[event_type(client)]
238 PrepareFight {
239 prepare_fight_type: PrepareFightType,
240 },
241 #[event_type(client)]
242 StartFight {
243 fight_id: Uuid,
244 },
245 #[event_type(client)]
246 FightProgress {},
247 EndFight {
248 fight_id: Uuid,
249 is_win: bool,
250 pvp_state: Option<PVPState>,
251 },
252 StageCleared {},
253
254 #[event_type(client, sync)]
255 RaidDungeon {
256 dungeon_id: DungeonTemplateId,
257 difficulty: i64,
258 amount: i64,
259 },
260
261 WaveCleared {},
262
263 #[event_type(client, sync)]
265 StartVassalPVPSync {
266 opponent_id: Uuid,
267 opponent_suzerain_id: Option<Uuid>,
268 },
269
270 #[event_type(client, sync)]
271 StartArenaPVPSync {
272 opponent_id: Uuid,
273 is_bot: bool,
274 },
275
276 #[event_type(client, sync)]
277 StartArenaRematchSync {
278 match_id: Uuid,
279 },
280
281 #[event_type(client, sync)]
282 RefreshArenaMatchmaking {},
283
284 #[event_type(client, sync)]
285 BuyArenaTicket {},
286
287 StartMove {
289 entity_id: Uuid,
290 to: Coordinates,
291 duration_ticks: u64,
292 },
293 EndMove {
295 entity_id: Uuid,
296 },
297
298 SpawnEntity {
300 id: EntityId,
301 entity_template_id: EntityTemplateId,
302 position: Coordinates,
303 entity_team: EntityTeam,
304 has_big_hp_bar: bool,
305 entity_attributes: EntityAttributes,
306 },
307
308 StartCastAbility {
309 by_entity_id: Uuid,
310 ability_id: AbilityId,
311 pet_id: Option<PetId>,
312 },
313 StartedCastAbility {
315 by_entity_id: Uuid,
316 ability_id: AbilityId,
317 duration_ticks: u64,
318 },
319 CastAbility {
320 by_entity_id: Uuid,
321 to_entity_id: Uuid,
322 ability_id: AbilityId,
323 },
324 StartCastProjectile {
325 by_entity_id: Uuid,
326 to_entity_id: Uuid,
327 projectile_id: Uuid,
328 level: i64,
329 delay: u64,
330 },
331 StartedCastProjectile {
332 by_entity_id: Uuid,
333 to_entity_id: Uuid,
334 projectile_id: Uuid,
335 duration_ticks: u64,
336 },
337 CastProjectile {
340 by_entity_id: Uuid,
341 to_entity_id: Uuid,
342 projectile_id: Uuid,
343 level: i64,
344 projectile_data: CustomEventData,
345 },
346 Damage {
347 entity_id: Uuid,
348 damage: u64,
349 damage_data: CustomEventData,
350 },
351 Heal {
352 entity_id: Uuid,
353 heal: u64,
354 },
355 CounterAttack {
356 by_entity_id: Uuid,
357 to_entity_id: Uuid,
358 duration_ticks: u64,
359 },
360 Multicast {
361 entity_id: Uuid,
362 amount: u64,
363 },
364 Evasion {
365 entity_id: Uuid,
366 },
367 PlayerDeath {},
368 EntityDeath {
369 entity_id: Uuid,
370 reward: Vec<CurrencyUnit>,
371 },
372 EntityIncrAttribute {
373 entity_id: Uuid,
374 attribute: String,
375 delta: i64,
376 },
377 EntityApplyEffect {
378 entity_id: Uuid,
379 effect_id: Uuid,
380 },
381 CastEffect {
382 entity_id: Uuid,
383 effect_id: Uuid,
384 },
385 CastEffectFromEvent {
386 entity_id: Uuid,
387 effect_id: Uuid,
388 caller_event: Box<OverlordEvent>,
389 },
390 FightCustomEvent {
391 entity_id: u64,
392 value: String,
393 },
394 FightVisualEvent {
395 effect_type: String,
396 effect_data: CustomEventData,
397 },
398
399 SetMaxHp {
400 entity_id: EntityId,
401 new_max_hp: u64,
402 new_hp: u64,
403 },
404
405 #[event_type(client, sync)]
407 ClaimVassalReward {
408 character_id: Uuid,
409 },
410
411 #[event_type(client, sync)]
412 ClaimSuzerainReward {},
413
414 NewSuzerain {
415 new_suzerain: Option<Suzerain>,
416 },
417
418 RemoveVassal {
419 vassal_id: Uuid,
420 },
421
422 #[event_type(client, sync)]
424 GiveTask {
425 vassal_id: Uuid,
426 template_task_id: Uuid,
427 },
428
429 NewTask {
430 new_task: VassalTask,
431 },
432
433 #[event_type(client)]
434 AcceptTask {
435 task_id: Uuid,
436 is_good: bool,
437 },
438
439 TaskAccepted {
440 task_id: Uuid,
441 started_good: bool,
442 started_at: chrono::DateTime<Utc>,
443 finish_at: chrono::DateTime<Utc>,
444 },
445
446 #[event_type(client)]
447 HitHands {
448 task_id: Uuid,
449 },
450
451 HandsHitted {
452 task_id: Uuid,
453 },
454
455 TaskFinished {
456 task_id: Uuid,
457 },
458
459 #[event_type(client)]
460 ClaimTaskReward {
461 task_id: Uuid,
462 },
463
464 GiveResistTask {
466 new_resist_task: VassalTask,
467 },
468
469 #[event_type(client, sync)]
470 AcceptResistTask {},
471
472 ResistTaskAccepted {
473 new_resist_task: VassalTask,
474 },
475
476 #[event_type(client)]
477 CatchResistTask {
478 task_id: Uuid,
479 },
480
481 ResistTaskCatched {
482 task_id: Uuid,
483 },
484
485 ResistTaskFinished {
486 task_id: Uuid,
487 },
488
489 #[event_type(client)]
490 ClaimResistTaskReward {
491 task_id: Uuid,
492 },
493
494 SetCustomValue {
496 key: String,
497 value: i64,
498 },
499
500 SetConnectionStore {
502 key: String,
503 value: i64,
504 },
505
506 #[event_type(client)]
508 ClaimQuest {
509 quest_id: Uuid,
510 },
511
512 #[event_type(client, sync)]
513 ClaimAllQuests {
514 quest_group_type: QuestGroupType,
515 },
516
517 PatronQuestCompleted {
518 quest_id: Uuid,
519 },
520
521 HiddenQuestCompleted {
522 quest_id: Uuid,
523 },
524
525 QuestCompleted {
526 quest_id: Uuid,
527 },
528
529 NewQuests {
530 quest_ids: Vec<Uuid>,
531 },
532
533 UpdateActiveLoopTaskId {
535 quest_id: Uuid,
536 },
537
538 ResetRepeatingQuests {
539 quest_ids: Vec<Uuid>,
540 },
541
542 #[event_type(client)]
543 ClaimQuestProgressionReward {
544 quest_group_type: QuestGroupType,
545 },
546
547 #[event_type(client)]
549 ClaimReferralLvlUpReward {
550 level: i64,
551 },
552
553 #[event_type(client)]
554 ClaimReferralDailyReward {},
555
556 ReferralDailyRewardStatusUpdate {
557 referral_daily_reward_status: bool,
558 },
559
560 #[event_type(client)]
562 SendGift {
563 receiver_id: Uuid,
564 config_gift_id: Uuid,
565 },
566
567 NewGift {
568 new_gift: Gift,
569 },
570
571 #[event_type(client)]
572 AcceptGift {
573 gift_id: Uuid,
574 },
575
576 #[event_type(client, sync)]
578 ClaimAfkReward {},
579
580 AfkRewardClaimed {},
581
582 AfkRewardsGatingUnlocked {},
587
588 #[event_type(client, sync)]
589 ClaimAfkInstantRewardGems {},
590
591 #[event_type(client, sync)]
593 WatchAd {
594 ad_reward_type: AdRewardType,
595 },
596
597 ShowBird {
598 variant_id: configs::ads_settings::BirdVariantId,
599 },
600
601 #[event_type(client)]
604 BirdShown {},
605
606 ResetAdUsage {
607 placements: Vec<AdPlacement>,
608 },
609
610 ResetInstantRewardGemsPressCount {},
611
612 #[event_type(client, sync)]
614 ClaimBundleStepGeneric {},
615
616 AddBundleGroup {
617 bundle_ids: Vec<BundleId>,
618 },
619
620 #[event_type(client, sync)]
622 ChangeClass {
623 new_class_id: uuid::Uuid,
624 },
625
626 #[event_type(client, sync)]
628 LinkGuestAccount {
629 token: String,
630 },
631
632 #[event_type(client, sync)]
633 SetUsername {
634 username: String,
635 },
636
637 #[event_type(client, sync)]
638 SetCharacterBlocked {
639 character_id: Uuid,
640 blocked: bool,
641 },
642
643 #[event_type(client, sync)]
645 CreateAbilityPreset {
646 name: Option<String>,
647 ability_ids: Vec<AbilityId>,
648 index: i64,
649 },
650
651 #[event_type(client, sync)]
652 EditAbilityPreset {
653 preset_id: AbilityPresetId,
654 name: String,
655 ability_ids: Vec<AbilityId>,
656 },
657
658 EnableCaseUpgradePopUp {},
659
660 #[event_type(client)]
661 DisableCaseUpgradePopUp {},
662
663 #[event_type(client, sync)]
665 BuySkins {
666 skin_ids: Vec<SkinId>,
667 equip: bool,
668 },
669
670 #[event_type(client, sync)]
671 EquipAndUnequipSkins {
672 equip_skin_ids: Vec<SkinId>,
673 unequip_skin_ids: Vec<SkinId>,
674 },
675
676 #[event_type(client)]
678 RunCheat {
679 cheat: Cheat,
680 },
681
682 #[event_type(client, sync)]
684 ClaimMail {
685 mail_id: essences::mail::MailId,
686 },
687
688 #[event_type(client, sync)]
689 ClaimAllMails {},
690
691 #[event_type(client, sync)]
692 MakeRead {
693 mail_id: essences::mail::MailId,
694 },
695
696 #[event_type(client, sync)]
697 MakeAllRead {},
698
699 #[event_type(client, sync)]
700 DeleteMail {
701 mail_id: essences::mail::MailId,
702 },
703
704 #[event_type(client, sync)]
705 DeleteAllMails {},
706
707 NewMail {
708 new_mail: essences::mail::Mail,
709 },
710
711 #[event_type(client, sync)]
713 NewOffer {
714 offer_template_id: OfferTemplateId,
715 },
716
717 #[event_type(client, sync)]
718 BuyOffer {
719 purchase_token: Option<String>,
720 offer_id: OfferId,
721 },
722
723 OfferPurchaseCompleted {
724 purchase_token: String,
725 offer_id: OfferId,
726 },
727
728 OfferPurchaseFailed {
729 purchase_token: String,
730 offer_id: OfferId,
731 },
732
733 PurchasesBanned {},
734
735 ResetOffers {
736 new_offers: Vec<Offer>,
737 },
738
739 #[event_type(client)]
741 EquipPet {
742 slot_id: u64,
743 pet_id: PetId,
744 },
745
746 #[event_type(client)]
747 UnequipPet {
748 slot_id: PetSlotId,
749 },
750
751 #[event_type(client, sync)]
752 FastEquipPets {},
753
754 EquipPets {
755 equipped_pets: EquippedPets,
756 },
757
758 #[event_type(client, sync)]
759 UpgradePet {
760 pet_id: PetId,
761 },
762
763 #[event_type(client, sync)]
764 UpgradeAllPets {},
765
766 UpgradedPets {
768 upgraded_pets: UpgradedPetsMap,
769 },
770
771 #[event_type(client)]
772 UpgradePetSlot {
773 slot_id: u64,
774 },
775
776 #[event_type(client, sync)]
778 OpenPetCase {
779 roll_type: PetCaseRollType,
780 },
781
782 #[event_type(client, sync)]
784 SetPetGachaWishlist {
785 pet_ids: Vec<PetId>,
786 },
787
788 PetCaseOpened {
789 batch_size: u8,
790 },
791
792 NewPets {
794 pets: Vec<PetDrop>,
795 },
796
797 UpgradePetCase {},
798
799 #[event_type(client)]
801 TutorialShown {
802 step_number: i16,
803 },
804 #[event_type(client)]
805 TutorialStepCompleted {
806 step_number: i16,
807 },
808
809 #[event_type(client, sync)]
811 AddCharacterToParty {
812 character_id: uuid::Uuid,
813 },
814 #[event_type(client, sync)]
815 RemoveCharacterFromParty {},
816 #[event_type(client, sync)]
817 RefreshPartyPlayers {},
818 #[event_type(sync)]
819 RefreshPartyMemberState {},
820
821 #[event_type(client, sync)]
824 StartTalentResearch {
825 talent_id: TalentId,
826 },
827 TalentResearchStarted {
829 talent_id: TalentId,
830 finish_at: chrono::DateTime<chrono::Utc>,
831 },
832 #[event_type(client, sync)]
834 SpeedupTalentResearch {},
835 #[event_type(client, sync)]
837 SkipTalentResearch {},
838 ClaimTalentResearch {},
840
841 #[event_type(client, sync)]
844 StatueRoll {
845 set_index: u8,
846 locked_slot_indices: Vec<u8>,
847 },
848 #[event_type(client, sync)]
850 StatueActivateSet {
851 set_index: u8,
852 },
853 #[event_type(client, sync)]
855 StatueAddSet {},
856 #[event_type(client, sync)]
858 StatueRenameSet {
859 set_index: u8,
860 name: String,
861 },
862 #[event_type(client, sync)]
864 StatueLockSlot {
865 set_index: u8,
866 slot_index: u8,
867 is_locked: bool,
868 },
869 #[event_type(client, sync)]
871 StatueRollNewSlot {
872 set_index: u8,
873 slot_index: u8,
874 },
875
876 #[event_type(client)]
879 UserRating {
880 rating: Option<i8>,
881 },
882
883 Error {
885 code: String,
886 message: String,
887 },
888
889 #[event_type(client)]
891 CustomRhai {
892 event_type: String,
893 data: CustomEventData,
894 },
895}
896
897#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema, Tsify)]
898#[tsify(from_wasm_abi, into_wasm_abi)]
899pub enum PrepareFightType {
900 PVEFight,
901 PVPFight {
902 fight_id: FightTemplateId,
903 pvp_state: Box<PVPState>,
904 },
905 RetryBossFight,
906 DungeonFight {
907 dungeon_id: DungeonTemplateId,
908 difficulty: i64,
909 },
910 ForfeitDungeonFight,
911 SingleFight {
912 fight_templated_id: FightTemplateId,
913 },
914}
915
916#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema, Tsify)]
917#[tsify(from_wasm_abi, into_wasm_abi)]
918pub enum Cheat {
919 PauseCombat,
920 UnpauseCombat,
921 GodModeOn,
922 GodModeOff,
923 GetRich,
924 ClearInventory,
925 ClearSlot {
926 item_id: Uuid,
927 },
928 GetAllSpells,
929 SetChapter {
930 chapter: i64,
931 },
932 StartFight {
933 templated_id: FightTemplateId,
934 },
935 SpawnEntity {
936 entity_id: EntityTemplateId,
937 x: i64,
938 y: i64,
939 team: EntityTeam,
940 attributes: Vec<(String, i64)>,
941 },
942 WearItems {
943 items_ids: Vec<ItemTemplateId>,
944 },
945 EquipSkin {
946 skin_id: SkinId,
947 },
948 UnequipSkin {
949 skin_id: SkinId,
950 },
951 NewLevel {
952 level: i64,
953 },
954 Script {
955 script_id: CheatScriptId,
956 },
957}