diff --git a/common/src/sr_tools.rs b/common/src/sr_tools.rs index a11cfc2..0c38fa9 100644 --- a/common/src/sr_tools.rs +++ b/common/src/sr_tools.rs @@ -31,6 +31,10 @@ pub struct FreesrData { pub main_character: MultiPathAvatar, #[serde(skip_serializing, skip_deserializing)] pub march_type: MultiPathAvatar, + #[serde(skip_serializing, skip_deserializing)] + pub enable_sw_global: Option, + #[serde(skip_serializing, skip_deserializing)] + pub enable_castorice_global: Option, } impl FreesrData { @@ -77,6 +81,8 @@ impl FreesrData { freesr_data.scene = persistent.scene; freesr_data.main_character = persistent.main_character; freesr_data.march_type = persistent.march_type; + freesr_data.enable_sw_global = persistent.enable_sw_global; + freesr_data.enable_castorice_global = persistent.enable_castorice_global; // freesr_data.game_language = persistent.game_language; // freesr_data.voice_langauge = persistent.voice_language; @@ -104,6 +110,25 @@ impl FreesrData { Ok(()) } + pub async fn refresh_persistent(&mut self) -> anyhow::Result<()> { + let persistent: Persistent = serde_json::from_str( + &tokio::fs::read_to_string("persistent") + .await + .unwrap_or_default(), + ) + .unwrap_or_default(); + + self.lineups = persistent.lineups; + self.position = persistent.position; + self.scene = persistent.scene; + self.main_character = persistent.main_character; + self.march_type = persistent.march_type; + self.enable_sw_global = persistent.enable_sw_global; + self.enable_castorice_global = persistent.enable_castorice_global; + + Ok(()) + } + async fn verify_lineup(&mut self) { if self.lineups.is_empty() { self.lineups = BTreeMap::::from([(0, 8001), (1, 0), (2, 0), (3, 0)]) @@ -122,6 +147,8 @@ impl FreesrData { position: self.position.clone(), scene: self.scene.clone(), march_type: self.march_type, + enable_sw_global: self.enable_sw_global, + enable_castorice_global: self.enable_castorice_global, // game_language: self.game_language, // voice_language: self.voice_langauge, }) { diff --git a/common/src/structs/persistent.rs b/common/src/structs/persistent.rs index 8ca82a3..bc00f36 100644 --- a/common/src/structs/persistent.rs +++ b/common/src/structs/persistent.rs @@ -43,6 +43,14 @@ pub struct Persistent { pub march_type: MultiPathAvatar, // pub game_language: AllowedLanguages, // pub voice_language: AllowedLanguages, + #[serde(default = "default_true")] + pub enable_sw_global: Option, + #[serde(default = "default_true")] + pub enable_castorice_global: Option, +} + +fn default_true() -> Option { + Some(true) } impl Default for Persistent { @@ -55,6 +63,8 @@ impl Default for Persistent { march_type: MultiPathAvatar::MarchHunt, // game_language: AllowedLanguages::En, // voice_language: AllowedLanguages::Jp, + enable_sw_global: Some(true), + enable_castorice_global: Some(true), } } } diff --git a/gameserver/src/net/handlers/battle.rs b/gameserver/src/net/handlers/battle.rs index 50c5af0..34ad58e 100644 --- a/gameserver/src/net/handlers/battle.rs +++ b/gameserver/src/net/handlers/battle.rs @@ -84,6 +84,10 @@ async fn create_battle_info( caster_id: u32, skill_index: u32, ) -> SceneBattleInfo { + if let Some(player) = session.json_data.get_mut() { + let _ = player.refresh_persistent().await; + } + let Some(player) = session.json_data.get() else { tracing::error!("data is not set!"); return SceneBattleInfo::default(); @@ -444,7 +448,7 @@ async fn create_battle_info( } } - if !has_castorice_global_buff { + if !has_castorice_global_buff && player.enable_castorice_global.unwrap_or(true) { battle_info.buff_list.push(BattleBuff { id: 140703, level: 1, @@ -455,7 +459,7 @@ async fn create_battle_info( }); } - if !has_silver_wolf_global_buff { + if !has_silver_wolf_global_buff && player.enable_sw_global.unwrap_or(true) { battle_info.buff_list.push(BattleBuff { id: 150602, level: 1, diff --git a/persistent b/persistent index c0b9aac..63c8a2c 100644 --- a/persistent +++ b/persistent @@ -3,7 +3,7 @@ "0": 1003, "1": 1310, "2": 1321, - "3": 1414 + "3": 1401 }, "position": { "x": 422379, @@ -17,5 +17,7 @@ "entry_id": 2051101 }, "main_character": "FemaleElation", - "march_type": "MarchHunt" -} \ No newline at end of file + "march_type": "MarchHunt", + "enable_sw_global": true, + "enable_castorice_global": true +}