From 701a78e9dceab0406b5587dbed5217cdd8249bba Mon Sep 17 00:00:00 2001 From: yuvlian <51725554+yuvlian@users.noreply.github.com> Date: Mon, 4 May 2026 20:10:01 +0700 Subject: [PATCH] move global buff toggle logic in commands, add compile flags for playerheartbeat data --- common/src/sr_tools.rs | 32 +++++++++++----------- gameserver/src/net/handlers/battle.rs | 6 ++--- gameserver/src/net/handlers/chat.rs | 38 ++++++++++++++++++++++++++- gameserver/src/net/handlers/player.rs | 2 +- 4 files changed, 57 insertions(+), 21 deletions(-) diff --git a/common/src/sr_tools.rs b/common/src/sr_tools.rs index 0c38fa9..8e4ae87 100644 --- a/common/src/sr_tools.rs +++ b/common/src/sr_tools.rs @@ -110,24 +110,24 @@ 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(); + // 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; + // 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(()) - } + // Ok(()) + // } async fn verify_lineup(&mut self) { if self.lineups.is_empty() { diff --git a/gameserver/src/net/handlers/battle.rs b/gameserver/src/net/handlers/battle.rs index 34ad58e..2de22ff 100644 --- a/gameserver/src/net/handlers/battle.rs +++ b/gameserver/src/net/handlers/battle.rs @@ -84,9 +84,9 @@ 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; - } + // 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!"); diff --git a/gameserver/src/net/handlers/chat.rs b/gameserver/src/net/handlers/chat.rs index 0fb8025..9e2ed61 100644 --- a/gameserver/src/net/handlers/chat.rs +++ b/gameserver/src/net/handlers/chat.rs @@ -13,8 +13,10 @@ use super::*; const SERVER_UID: u32 = 727; const SERVER_HEAD_ICON: u32 = 201402; const SERVER_CHAT_BUBBLE_ID: u32 = 220005; -const SERVER_CHAT_HISTORY: [&str; 6] = [ +const SERVER_CHAT_HISTORY: &[&str] = &[ "'lua {path_to_lua_script}' execute lua script", + "'sw {on/off}' enable/disable silver wolf global buff", + "'castorice {on/off}' enable/disable castorice global buff", "'sync' to synchronize stats between json and in-game view", "'mc {mc_id}' mc_id can be set from 8001 to 8008", "'march {march_id}' march_id can be set 1001 or 1224", @@ -125,6 +127,40 @@ pub async fn on_send_msg_cs_req( .await .unwrap(); } + "sw" | "castorice" => { + let status = args.first().unwrap_or(&"on").to_lowercase(); + let enabled = match status.as_str() { + "on" | "1" | "true" => true, + "off" | "0" | "false" => false, + _ => true, + }; + + if cmd == "sw" { + json.enable_sw_global = Some(enabled); + } else { + json.enable_castorice_global = Some(enabled); + } + + json.save_persistent().await; + + session + .send(create_send_message( + 25, + SERVER_UID, + body.message_datas + .as_ref() + .map(|v| v.message_type) + .unwrap_or_default(), + body.chat_type, + format!( + "{} Global Buff: {}", + if cmd == "sw" { "SW" } else { "Castorice" }, + if enabled { "Enabled" } else { "Disabled" } + ), + )) + .await + .unwrap(); + } "mc" => { let mc = MultiPathAvatar::from( args.first() diff --git a/gameserver/src/net/handlers/player.rs b/gameserver/src/net/handlers/player.rs index ebc3879..14e70ea 100644 --- a/gameserver/src/net/handlers/player.rs +++ b/gameserver/src/net/handlers/player.rs @@ -20,7 +20,7 @@ pub async fn on_player_heart_beat_cs_req( res.download_data = Some(ClientDownloadData { version: 51, time: res.server_time_ms as i64, - data: rbase64::decode("bG9jYWwgTUFYX0ZQUyA9IDM2MApsb2NhbCBCRVRBX1dNID0gIiIKCmxvY2FsIGZ1bmN0aW9uIGxvZyhtc2cpCmVuZAoKbG9jYWwgZnVuY3Rpb24gcGF0Y2hGcHMoKQogICAgQ1MuVW5pdHlFbmdpbmUuQXBwbGljYXRpb24udGFyZ2V0RnJhbWVSYXRlID0gTUFYX0ZQUwogICAgQ1MuVW5pdHlFbmdpbmUuUXVhbGl0eVNldHRpbmdzLnZTeW5jQ291bnQgPSAwCmVuZAoKbG9jYWwgZnVuY3Rpb24gcGF0Y2hCZXRhV20oKQogICAgLS0gQmV0YSBXYXRlcm1hcmsKICAgIENTLlVuaXR5RW5naW5lLkdhbWVPYmplY3QuRmluZCgiVUlSb290L0Fib3ZlRGlhbG9nL0JldGFIaW50RGlhbG9nKENsb25lKSIpOkdldENvbXBvbmVudEluQ2hpbGRyZW4odHlwZW9mKENTLlJQRy5DbGllbnQuTG9jYWxpemVkVGV4dCkpLnRleHQgPSBCRVRBX1dNCgogICAgLS0gVUlEIFdhdGVybWFyawogICAgQ1MuVW5pdHlFbmdpbmUuR2FtZU9iamVjdC5GaW5kKCJWZXJzaW9uVGV4dCIpOkdldENvbXBvbmVudEluQ2hpbGRyZW4odHlwZW9mKENTLlJQRy5DbGllbnQuTG9jYWxpemVkVGV4dCkpLnRleHQgPQogICAgICAgICI8Y29sb3I9IzAwZTFmZj5Sb2JpblNSISB8IDwvY29sb3I+IiAuLgogICAgICAgICI8Y29sb3I9IzAwZTFmZj4iIC4uCiAgICAgICAgQ1MuUlBHLkNsaWVudC5HbG9iYWxWYXJzLnNfVmVyc2lvbkRhdGE6R2V0U2VydmVyUGFrVHlwZVZlcnNpb24oKSAuLgogICAgICAgICI8L2NvbG9yPiIKZW5kCgoKbG9jYWwgZnVuY3Rpb24gbWFpbigpCiAgICBwYXRjaEJldGFXbSgpCmVuZAoKeHBjYWxsKG1haW4sIGxvZyk=").unwrap(), + data: rbase64::decode("BAEcA2xvZwJDUwtVbml0eUVuZ2luZQtBcHBsaWNhdGlvbg90YXJnZXRGcmFtZVJhdGUPUXVhbGl0eVNldHRpbmdzCnZTeW5jQ291bnQIcGF0Y2hGcHMKR2FtZU9iamVjdARGaW5kKFVJUm9vdC9BYm92ZURpYWxvZy9CZXRhSGludERpYWxvZyhDbG9uZSkDUlBHBkNsaWVudA1Mb2NhbGl6ZWRUZXh0BnR5cGVvZhZHZXRDb21wb25lbnRJbkNoaWxkcmVuJjxjb2xvcj0jMDBlMWZmPnQubWUvbmVvbnRlYW0yNTwvY29sb3I+BHRleHQLVmVyc2lvblRleHQiPGNvbG9yPSMwMGUxZmY+Um9iaW5TUiEgfCA8L2NvbG9yPg88Y29sb3I9IzAwZTFmZj4KR2xvYmFsVmFycw1zX1ZlcnNpb25EYXRhF0dldFNlcnZlclBha1R5cGVWZXJzaW9uCDwvY29sb3I+C3BhdGNoQmV0YVdtBG1haW4GeHBjYWxsBQEBAAAAAAEWAAEAAAAEAQEYAAUAAAAAAgAAAAAACwwAAwACBADABAFoARABAAMEAAAADAAGAAUEAMAEAQAAEAEA0AcAAAAWAAEACAMCAwMDBAQCBADAAwUDBgQFBADAAwcABwgBGAAAAAAAAQAAAAABCAAAAAAJAAAAAAA2DAEDAAIEAMAPAAF2BAAAAAUBBQAVAAICDAQIAAcYAMAPAwQUCQAAAE0sAwIMAgsAAACgQBUCAgAUAACxDAAAABUAAAIFAQ0AEAEA1Q4AAAAMAQMAAgQAwA8AAXYEAAAABQEPABUAAgIMBAgABxgAwA8DBBQJAAAATSwDAgwCCwAAAKBAFQICABQAALEMAAAAFQAAAgUCEAAFAxEADAgIAAcYAMAPBwisEgAAAA8GByMTAAAAFAYGkRQAAAAVBgICBgQGAAUFFQA1AQIFEAEA1Q4AAAAWAAEAFgMCAwMDCQQCBADAAwoDCwMMAw0EBxgAwAMOAw8EAACgQAMQAxEDEgMTAxQDFQMWAxcDGAMZAAwaARgAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAQEBAAAAAAAAAAAAAQD8AAUOAAAAAAEAAQAAAAMJAAAAFQABARYAAQAAABkbARgAAAEaAAAAAAcAAAEAAAxFAAAARAAAAEQBAQBEAgIARAMDAEoAAgAMBAUAAABAQAYFAwAGBgAAFQQDARYAAQAGBgAGAQYCBgMDHAQAAEBABAABAgMBAAEYAAMDBQ0ABAAAAAAAAQAAAAAE").unwrap(), ..Default::default() }); }