implement mc change

This commit is contained in:
amizing25 2024-03-29 23:32:32 +07:00
parent 74447ead85
commit ab66359ebe
5 changed files with 64 additions and 27 deletions

View File

@ -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,

View File

@ -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()
},
)

View File

@ -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<u32, u32>,
avatars: &BTreeMap<u32, AvatarJson>,
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()
};

View File

@ -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()

View File

@ -135,16 +135,15 @@ impl AvatarJson {
}
pub fn to_lineup_avatars(
lineups: &BTreeMap<u32, u32>,
avatars: &BTreeMap<u32, AvatarJson>,
player: &JsonData,
) -> Vec<LineupAvatar> {
let avatar_ids = avatars.iter().map(|(_, v)| v.avatar_id).collect::<Vec<_>>();
let avatar_ids = player.avatars.iter().map(|(_, v)| &v.avatar_id).collect::<Vec<_>>();
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<MainCharacter> {
// 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