overlord_event_system/async_handler/
referrals.rs1use crate::{
2 async_handler::handler::OverlordAsyncEventHandler, event::OverlordEvent,
3 game_config_helpers::GameConfigLookup, state::OverlordState,
4};
5
6use essences::currency::CurrencySource;
7use event_system::system::EventHandleResult;
8
9impl OverlordAsyncEventHandler {
10 pub fn handle_claim_referral_lvlup_reward(
11 &self,
12 level: i64,
13 mut state: OverlordState,
14 ) -> EventHandleResult<OverlordEvent, OverlordState> {
15 let game_config = self.game_config.get();
16
17 if level - 1 != state.character_state.character.patron_level {
18 tracing::error!(
19 "Tried leveling patron_level = {}, for more than 1 value, requested_level = {}",
20 state.character_state.character.patron_level,
21 level
22 );
23 return EventHandleResult::fail(state);
24 }
25
26 let Ok(patron_level_info) = game_config.require_patron_level_info(level) else {
27 tracing::error!(
28 "Tried finding patron_level = {}, in config while leveling up, but there is None",
29 level
30 );
31 return EventHandleResult::fail(state);
32 };
33
34 if patron_level_info.required_experience > state.character_state.character.patron_experience
35 {
36 tracing::error!(
37 "Tried leveling up patron_level = {}, when there is not enough experience",
38 level
39 );
40 return EventHandleResult::fail(state);
41 }
42
43 state.character_state.character.patron_level = level;
44
45 let events = vec![Self::currency_increase(
46 &patron_level_info.lvlup_reward,
47 CurrencySource::ReferralLvlUp,
48 )];
49
50 EventHandleResult::ok_events(state, events)
51 }
52
53 pub fn handle_claim_referral_daily_reward(
54 &self,
55 mut state: OverlordState,
56 ) -> EventHandleResult<OverlordEvent, OverlordState> {
57 let game_config = self.game_config.get();
58
59 if state.referral_daily_reward_claimed.is_some()
60 && state.referral_daily_reward_claimed.unwrap()
61 {
62 tracing::error!("Tried claiming referral daily reward, but its already claimed");
63 return EventHandleResult::fail(state);
64 }
65
66 let Ok(patron_level_info) =
67 game_config.require_patron_level_info(state.character_state.character.patron_level)
68 else {
69 tracing::error!(
70 "Tried finding patron_level = {}, in config while claiming daily reward, but there is None",
71 state.character_state.character.patron_level
72 );
73 return EventHandleResult::fail(state);
74 };
75
76 let currency_event = Self::currency_increase(
77 &patron_level_info.daily_reward,
78 CurrencySource::ReferralDailyReward,
79 );
80
81 state.referral_daily_reward_claimed = Some(true);
82
83 let events = vec![currency_event];
84
85 EventHandleResult::ok_events(state, events)
86 }
87
88 pub fn handle_referral_daily_reward_status_update(
89 &self,
90 referral_daily_reward_status: bool,
91 mut state: OverlordState,
92 ) -> EventHandleResult<OverlordEvent, OverlordState> {
93 state.referral_daily_reward_claimed = Some(referral_daily_reward_status);
94
95 EventHandleResult::ok(state)
96 }
97}