diff --git a/gameserver/src/net/handlers/battle.rs b/gameserver/src/net/handlers/battle.rs index 5df37c7..717f105 100644 --- a/gameserver/src/net/handlers/battle.rs +++ b/gameserver/src/net/handlers/battle.rs @@ -308,7 +308,7 @@ pub async fn on_mpemgbdkigg(session: &mut PlayerSession, request: &Mpemgbdkigg) let targets = request .jpieajikioh .iter() - .filter(|id| **id > 20_000 || **id < 10) + .filter(|id| **id > 30_000 || **id < 1_000) .collect::>(); if targets.is_empty() { diff --git a/gameserver/src/net/handlers/chat.rs b/gameserver/src/net/handlers/chat.rs new file mode 100644 index 0000000..fc9bbda --- /dev/null +++ b/gameserver/src/net/handlers/chat.rs @@ -0,0 +1,220 @@ +use crate::{ + net::{ + tools::{JsonData, MainCharacter}, + PlayerSession, + }, + util::cur_timestamp_ms, +}; + +use super::*; + +pub async fn on_nhfajfplkep(session: &mut PlayerSession, _: &Nhfajfplkep) -> Result<()> { + session + .send( + CMD_GET_FRIEND_LIST_INFO_SC_RSP, + Pbfkjlnnnim { + amgpdgdnlgd: vec![Leldmbjfheh { + gpgdedmpjla: PlayingState::None.into(), + cfmiklhjmle: Some(Alcoeanikil::default()), + hiljemhhhnk: String::from("RobinSR"), + kmclngophda: Some(Hcdpijbnijp { + uid: 727, + mbdjcknimop: 3, + igmaomgegaj: 1, + gjlfhjlijon: 201008, + jpajpffgnbi: 220005, + level: 70, + nickname: String::from("Server"), + plmbeaaegak: vec![AssistSimpleInfo { + avatar_id: 1008, + level: 70, + ..Default::default() + }], + ..Default::default() + }), + gjdiplfecfa: true, + }], + ..Default::default() + }, + ) + .await +} + +pub async fn on_komknbijgpi(session: &mut PlayerSession, _: &Komknbijgpi) -> Result<()> { + session + .send( + CMD_GET_PRIVATE_CHAT_HISTORY_SC_RSP, + Ooibcglpnac { + pgofeopnpbm: vec![Bpifmdladdn { + bdjoneohhpj: MsgType::CustomText.into(), + phhhfhobhmk: cur_timestamp_ms(), + fbelgjfhbkh: ":motorized_wheelchair:".to_string(), + nokipdbhglc: 727, + ..Default::default() + }], + fjbkleaflam: 727, + oligkfnjkma: 1337, + ..Default::default() + }, + ) + .await +} + +// RecvMsgCsReq +pub async fn on_bgfjcbbfiek(session: &mut PlayerSession, body: &Bgfjcbbfiek) -> Result<()> { + let mut json = JsonData::load().await; + if let Some((cmd, args)) = parse_command(&body.moiplammfad) { + match cmd { + "sync" => { + sync_player(session, json).await?; + session + .send( + CMD_REVC_MSG_SC_NOTIFY, + Kifdjbodlcc { + pofomobijdg: body.pofomobijdg, + kjdhmhgjdmc: body.kjdhmhgjdmc, + moiplammfad: String::from("Inventory Synced"), + bdjoneohhpj: body.bdjoneohhpj, + aljhmlmnmhp: 727, + djefnoaonkc: 1337, + }, + ) + .await?; + } + "mc" => { + let mc = MainCharacter::from( + args.first() + .unwrap_or(&"") + .parse::() + .unwrap_or(json.main_character as u32), + ); + + json.main_character = mc; + json.save().await; + + session + .send( + CMD_GET_HERO_BASIC_TYPE_INFO_SC_RSP, + GetHeroBasicTypeInfoScRsp { + retcode: 0, + gender: mc.get_gender().into(), + cur_basic_type: mc.get_type().into(), + basic_type_info_list: vec![HeroBasicTypeInfo { + basic_type: mc.get_type().into(), + ..Default::default() + }], + ..Default::default() + }, + ) + .await?; + + sync_player(session, json).await?; + + session + .send( + CMD_REVC_MSG_SC_NOTIFY, + Kifdjbodlcc { + pofomobijdg: body.pofomobijdg, + kjdhmhgjdmc: body.kjdhmhgjdmc, + moiplammfad: format!("Set MC to: {mc:#?}"), + bdjoneohhpj: body.bdjoneohhpj, + aljhmlmnmhp: 727, + djefnoaonkc: 1337, + }, + ) + .await?; + } + _ => {} + } + } + + session + .send( + CMD_SEND_MSG_SC_RSP, + Jhickbdnnii { + retcode: 0, + end_time: 0, + }, + ) + .await +} + +fn parse_command(command: &str) -> Option<(&str, Vec<&str>)> { + let parts: Vec<&str> = command.split_whitespace().collect(); + + if parts.is_empty() { + return Option::None; + } + + Some((parts[0], parts[1..].to_vec())) +} + +async fn sync_player(session: &mut PlayerSession, json: JsonData) -> Result<()> { + session + .send( + CMD_PLAYER_SYNC_SC_NOTIFY, + Eckkajafean { + lminpcphbfp: (2000..3500).collect(), + oglioehgbal: (1..2000).collect(), + ..Default::default() + }, + ) + .await?; + + session + .send( + CMD_PLAYER_SYNC_SC_NOTIFY, + Eckkajafean { + fihplpphfme: Some(Abcekhjbnmp { + avatar_list: json + .avatars + .values() + .map(|avatar| avatar.to_avatar_proto(Option::None, vec![])) + .collect::>(), + }), + ..Default::default() + }, + ) + .await?; + + session + .send( + CMD_PLAYER_SYNC_SC_NOTIFY, + Eckkajafean { + relic_list: json.relics.iter().map(|v| v.to_relic_proto()).collect(), + equipment_list: json + .lightcones + .iter() + .map(|v| v.to_equipment_proto()) + .collect(), + ..Default::default() + }, + ) + .await?; + + session + .send( + CMD_PLAYER_SYNC_SC_NOTIFY, + Eckkajafean { + fihplpphfme: Some(Abcekhjbnmp { + avatar_list: json + .avatars + .values() + .map(|avatar| { + avatar.to_avatar_proto( + json.lightcones + .iter() + .find(|v| v.equip_avatar == avatar.avatar_id), + json.relics + .iter() + .filter(|v| v.equip_avatar == avatar.avatar_id) + .collect(), + ) + }) + .collect(), + }), + ..Default::default() + }, + ) + .await +} diff --git a/gameserver/src/net/handlers/lineup.rs b/gameserver/src/net/handlers/lineup.rs index 9fbf5a6..18e956b 100644 --- a/gameserver/src/net/handlers/lineup.rs +++ b/gameserver/src/net/handlers/lineup.rs @@ -155,6 +155,38 @@ async fn refresh_lineup(sess: &mut PlayerSession, player: &JsonData) -> Result<( ..Default::default() }; + sess.send( + CMD_SCENE_GROUP_REFRESH_SC_NOTIFY, + Ljihfeagpcl { + kpfomkdmoce: vec![Jnofbbanolk { + group_id: 0, + state: 0, + kppckepfpce: 0, + fiiciciambe: player + .lineups + .iter() + .map(|(idx, v)| Gffbkjofnad { + fimallpbobk: 0, + mggfjbdchjh: 0, + glalelmdamm: Some(SceneEntityInfo { + actor: Some(SceneActorInfo { + avatar_type: AvatarType::AvatarFormalType.into(), + base_avatar_id: *v, + map_layer: 0, + uid: 1337, + }), + entity_id: idx + 1, + group_id: 0, + inst_id: 0, + ..Default::default() + }), + }) + .collect(), + }], + }, + ) + .await?; + sess.send( CMD_SYNC_LINEUP_NOTIFY, SyncLineupNotify { diff --git a/gameserver/src/net/handlers/mod.rs b/gameserver/src/net/handlers/mod.rs index 5eb5ad3..887646c 100644 --- a/gameserver/src/net/handlers/mod.rs +++ b/gameserver/src/net/handlers/mod.rs @@ -7,6 +7,7 @@ mod player; mod scene; mod tutorial; mod inventory; +mod chat; use anyhow::Result; use paste::paste; @@ -25,6 +26,7 @@ pub use player::*; pub use scene::*; pub use tutorial::*; pub use inventory::*; +pub use chat::*; use proto::{ Aaihejacdpk::*, Achkcddkkkj::*, Bancodieeof::*, CmdActivityType::*, CmdBattleType::*, @@ -80,7 +82,7 @@ dummy! { QueryProductInfo, GetQuestData, GetQuestRecord, - GetFriendListInfo, + // GetFriendListInfo, GetFriendApplyListInfo, GetCurAssist, GetRogueHandbookData, diff --git a/gameserver/src/net/handlers/scene.rs b/gameserver/src/net/handlers/scene.rs index 59c0652..b68cf7b 100644 --- a/gameserver/src/net/handlers/scene.rs +++ b/gameserver/src/net/handlers/scene.rs @@ -300,9 +300,9 @@ async fn load_scene( }; let mut loaded_npc: Vec = vec![]; - let mut prop_entity_id = 10; - let mut npc_entity_id = 10_000; - let mut monster_entity_id = 20_000; + let mut prop_entity_id = 1_000; + let mut npc_entity_id = 20_000; + let mut monster_entity_id = 30_000; for (group_id, group) in &group_config.group_items { let mut group_info = Dhkacjhaoid { diff --git a/gameserver/src/net/packet.rs b/gameserver/src/net/packet.rs index 78ea2da..732c0c9 100644 --- a/gameserver/src/net/packet.rs +++ b/gameserver/src/net/packet.rs @@ -280,9 +280,9 @@ trait_handler! { // StartChallengeScRsp 1788; // GetChallengeCsReq 1734; // BatchMarkChatEmojiScRsp 3906; - // SendMsgCsReq 3934; + Bgfjcbbfiek 3934;// SendMsgCsReq 3934; // GetPrivateChatHistoryScRsp 3909; - // GetPrivateChatHistoryCsReq 3902; + Komknbijgpi 3902; // GetPrivateChatHistoryCsReq 3902; // GetChatEmojiListScRsp 3929; // PrivateMsgOfflineUsersScNotify 3988; // MarkChatEmojiCsReq 3945; @@ -493,7 +493,7 @@ trait_handler! { // GetAssistListCsReq 2961; // GetFriendRecommendListInfoScRsp 2939; // GetPlatformPlayerInfoCsReq 2965; - // GetFriendListInfoCsReq 2934; + Nhfajfplkep 2934;// GetFriendListInfoCsReq 2934; // SetAssistScRsp 2997; // SetForbidOtherApplyFriendCsReq 2992; // GetCurAssistCsReq 2924; diff --git a/gameserver/src/net/tools.rs b/gameserver/src/net/tools.rs index 10ada9f..bb91b39 100644 --- a/gameserver/src/net/tools.rs +++ b/gameserver/src/net/tools.rs @@ -535,20 +535,21 @@ pub enum MainCharacter { FemaleHarmony = 8006, } +impl From for MainCharacter { + fn from(value: u32) -> Self { + match value { + 8001 => Self::MalePyhsical, + 8002 => Self::FemalePhysical, + 8003 => Self::MalePreservation, + 8004 => Self::FemalePreservation, + 8005 => Self::MaleHarmony, + 8006 => Self::FemaleHarmony, + _ => Self::FemaleHarmony, + } + } +} + impl MainCharacter { - // pub fn to_vec() -> Vec { - // return vec![ - // MainCharacter::MalePyhsical, - // MainCharacter::FemalePhysical, - - // MainCharacter::MalePreservation, - // MainCharacter::FemalePreservation, - - // MainCharacter::MaleHarmony, - // MainCharacter::FemaleHarmony - // ] - // } - pub fn get_gender(&self) -> Gender { if *self as u32 % 2 == 1 { Gender::Man @@ -579,9 +580,11 @@ impl JsonData { pub async fn load() -> Self { let mut json: JsonData = tokio::fs::read_to_string("freesr-data.json") .await - .map(|v| serde_json::from_str(&v)) - .expect("freesr-data.json is broken, pls redownload") - .expect("freesr-data.json is broken, pls redownload"); + .map(|v| { + serde_json::from_str::(&v) + .expect("freesr-data.json is broken, pls redownload") + }) + .expect("failed to read freesr-data.json"); let json2: JsonData2 = serde_json::from_str( &tokio::fs::read_to_string("persistent")