diff --git a/gameserver/src/net/handlers/avatar.rs b/gameserver/src/net/handlers/avatar.rs index 7a2ee5d..cb9a167 100644 --- a/gameserver/src/net/handlers/avatar.rs +++ b/gameserver/src/net/handlers/avatar.rs @@ -1,7 +1,7 @@ use super::*; -static UNLOCKED_AVATARS: [u32; 49] = [ - 8001, 1001, 1002, 1003, 1004, 1005, 1006, 1008, 1009, 1013, 1101, 1102, 1103, 1104, 1105, 1106, +static UNLOCKED_AVATARS: [u32; 54] = [ + 8001, 8002, 8003, 8004, 8005, 8006, 1001, 1002, 1003, 1004, 1005, 1006, 1008, 1009, 1013, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1217, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1312, 1315, diff --git a/gameserver/src/net/handlers/battle.rs b/gameserver/src/net/handlers/battle.rs index d23bd36..3ab3bea 100644 --- a/gameserver/src/net/handlers/battle.rs +++ b/gameserver/src/net/handlers/battle.rs @@ -11,7 +11,7 @@ pub async fn on_start_cocoon_stage_cs_req( let mut battle_info = SceneBattleInfo { stage_id: player.battle_config.stage_id, logic_random_seed: 4444, - battle_id: 1, + // battle_id: 1, kimmjioaodn: player.battle_config.cycle_count, ..Default::default() }; @@ -161,7 +161,7 @@ pub async fn on_pve_battle_result_cs_req( PveBattleResultScRsp { retcode: 0, end_status: body.end_status, - battle_id: body.battle_id, + // battle_id: body.battle_id, ..Default::default() }, ) diff --git a/gameserver/src/net/handlers/lineup.rs b/gameserver/src/net/handlers/lineup.rs index 5c65fce..7557272 100644 --- a/gameserver/src/net/handlers/lineup.rs +++ b/gameserver/src/net/handlers/lineup.rs @@ -1,6 +1,4 @@ -use std::collections::BTreeMap; - -use crate::net::tools::{self, AvatarJson}; +use crate::net::tools::{self, AvatarJson, JsonData}; use super::*; @@ -15,7 +13,7 @@ pub async fn on_get_all_lineup_data_cs_req( // mp: 5, // leader_slot: 0, // max_mp: 5, - avatar_list: AvatarJson::to_lineup_avatars(&player.lineups, &player.avatars), + avatar_list: AvatarJson::to_lineup_avatars(&player), ..Default::default() }; @@ -88,15 +86,18 @@ pub async fn on_join_lineup_cs_req( { let mut player = tools::JsonData::load().await; let lineups = &mut player.lineups; - lineups.insert(body.slot, body.base_avatar_id); + lineups.insert(body.slot, if body.base_avatar_id > 8000 { + player.main_character as u32 + } else { + body.base_avatar_id + }); player.save_lineup().await; } { let player = tools::JsonData::load().await; - let lineups = &player.lineups; - refresh_lineup(session, &lineups, &player.avatars).await?; + refresh_lineup(session,&player).await?; } session.send(CMD_JOIN_LINEUP_SC_RSP, JoinLineupScRsp::default()) @@ -115,7 +116,11 @@ pub async fn on_replace_lineup_cs_req( let lineups = &mut player.lineups; for (slot, avatar_id) in &mut *lineups { if let Some(lineup) = req.jkifflmenfn.get(*slot as usize) { - *avatar_id = lineup.id; + *avatar_id = if lineup.id > 8000 { + player.main_character as u32 + } else { + lineup.id + }; } else { *avatar_id = 0; } @@ -125,9 +130,8 @@ pub async fn on_replace_lineup_cs_req( { let player = tools::JsonData::load().await; - let lineups = &player.lineups; - refresh_lineup(_session, &lineups, &player.avatars).await?; + refresh_lineup(_session, &player).await?; } _session.send(CMD_JOIN_LINEUP_SC_RSP, JoinLineupScRsp::default()) @@ -148,14 +152,13 @@ pub async fn on_quit_lineup_cs_req( async fn refresh_lineup( sess: &mut PlayerSession, - lineups: &BTreeMap, - avatars: &BTreeMap, + player: &JsonData ) -> Result<()> { let lineup = LineupInfo { extra_lineup_type: ExtraLineupType::LineupNone.into(), name: "Squad 1".to_string(), - avatar_list: AvatarJson::to_lineup_avatars(lineups, avatars), + avatar_list: AvatarJson::to_lineup_avatars(&player), ..Default::default() }; diff --git a/gameserver/src/net/handlers/player.rs b/gameserver/src/net/handlers/player.rs index c4a94ce..c0d5176 100644 --- a/gameserver/src/net/handlers/player.rs +++ b/gameserver/src/net/handlers/player.rs @@ -1,4 +1,4 @@ -use crate::util; +use crate::{net::tools::JsonData, util}; use super::*; @@ -22,15 +22,16 @@ pub async fn on_get_hero_basic_type_info_cs_req( session: &mut PlayerSession, _body: &GetHeroBasicTypeInfoCsReq, ) -> Result<()> { + let mc = JsonData::load().await.main_character; session .send( CMD_GET_HERO_BASIC_TYPE_INFO_SC_RSP, GetHeroBasicTypeInfoScRsp { retcode: 0, - gender: Gender::Man.into(), - cur_basic_type: HeroBasicType::BoyWarrior.into(), - basic_type_info_list: vec![HeroBasicTypeInfo { - basic_type: HeroBasicType::BoyWarrior.into(), + 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() diff --git a/gameserver/src/net/tools.rs b/gameserver/src/net/tools.rs index c793e93..7b03bf2 100644 --- a/gameserver/src/net/tools.rs +++ b/gameserver/src/net/tools.rs @@ -135,16 +135,15 @@ impl AvatarJson { } pub fn to_lineup_avatars( - lineups: &BTreeMap, - avatars: &BTreeMap, + player: &JsonData, ) -> Vec { - let avatar_ids = avatars.iter().map(|(_, v)| v.avatar_id).collect::>(); + let avatar_ids = player.avatars.iter().map(|(_, v)| &v.avatar_id).collect::>(); - lineups + player.lineups .iter() .filter(|(_slot, v)| v > &&0 && avatar_ids.contains(v)) .map(|(slot, avatar_id)| { - avatars + player.avatars .get(avatar_id) .unwrap() .to_lineup_avatar_proto(*slot) @@ -542,6 +541,40 @@ pub enum MainCharacter { FemaleHarmony = 8006, } +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 + } else { + Gender::Woman + } + } + + pub fn get_type(&self) -> HeroBasicType { + match *self { + Self::MalePyhsical => HeroBasicType::BoyWarrior, + Self::FemalePhysical => HeroBasicType::GirlWarrior, + Self::MalePreservation => HeroBasicType::BoyKnight, + Self::FemalePreservation => HeroBasicType::GirlKnight, + Self::MaleHarmony => HeroBasicType::BoyShaman, + Self::FemaleHarmony => HeroBasicType::GirlShaman, + } + } +} + impl Default for MainCharacter { fn default() -> Self { Self::FemaleHarmony