feat: handle avatar enhanced state

This commit is contained in:
amizing25
2025-05-24 05:50:15 +07:00
parent 0cb4138562
commit 81a783a078
10 changed files with 15172 additions and 37288 deletions
+1
View File
@@ -69,6 +69,7 @@ impl FreesrData {
equipment_unique_id: lightcone.map(|v| v.get_unique_id()).unwrap_or_default(),
first_met_timestamp: 1712924677,
equip_relic_list: relics.map(|v| v.into()).collect::<Vec<_>>(),
unk_enhanced_id: avatar.enhanced_id.unwrap_or_default(),
..Default::default()
})
}
+6 -2
View File
@@ -128,6 +128,7 @@ pub struct AvatarJson {
pub sp_value: Option<u32>,
#[serde(alias = "spMax")]
pub sp_max: Option<u32>,
pub enhanced_id: Option<u32>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
@@ -164,6 +165,7 @@ impl AvatarJson {
equipment_unique_id: lightcone.map(|v| v.get_unique_id()).unwrap_or_default(),
first_met_timestamp: 1712924677,
equip_relic_list: relics.iter().map(|v| (*v).into()).collect::<Vec<_>>(),
unk_enhanced_id: self.enhanced_id.unwrap_or_default(),
..Default::default()
}
}
@@ -202,6 +204,7 @@ impl AvatarJson {
cur_sp: self.sp_value.unwrap_or(10_000),
max_sp: self.sp_max.unwrap_or(10_000),
}),
enhanced_id: self.enhanced_id.unwrap_or_default(),
..Default::default()
};
@@ -256,11 +259,12 @@ impl AvatarJson {
}
pub fn to_lineup_info(lineups: &BTreeMap<u32, u32>) -> LineupInfo {
let max_mp = if lineups.contains_key(&1408) { 8 } else { 5 };
let mut lineup_info = LineupInfo {
extra_lineup_type: ExtraLineupType::LineupNone.into(),
name: "Squad 1".to_string(),
mp: 5,
max_mp: 5,
mp: max_mp,
max_mp,
..Default::default()
};
+15072 -37227
View File
File diff suppressed because it is too large Load Diff
+20
View File
@@ -70,3 +70,23 @@ pub async fn on_get_avatar_data_cs_req(
res.multi_path_avatar_type_info_list = json.get_multi_path_info();
}
pub async fn on_set_avatar_enhanced_id_cs_req(
_session: &mut PlayerSession,
_req: &SetAvatarEnhancedIdCsReq,
_res: &mut SetAvatarEnhancedIdScRsp,
) {
// let Some(json) = session.json_data.get_mut() else {
// return;
// };
// let Some(avatar) = json.avatars.get_mut(&req.avatar_id) else {
// return;
// };
// avatar.enhanced_id = if req.enhanced_id == 0 {
// Option::<u32>::None
// } else {
// Some(req.enhanced_id)
// };
// res.growth_avatar_id = avatar.avatar_id;
// res.unk_enhanced_id = req.enhanced_id;
}
+47 -35
View File
@@ -217,21 +217,27 @@ async fn create_battle_info(
// pf score object
if player.battle_config.battle_type == BattleType::PF {
if battle_info.stage_id >= 30309011 {
battle_info.battle_target_info.insert(1, BattleTargetList {
battle_target_list: vec![BattleTarget {
id: 10003,
progress: 0,
..Default::default()
}],
});
battle_info.battle_target_info.insert(
1,
BattleTargetList {
battle_target_list: vec![BattleTarget {
id: 10003,
progress: 0,
..Default::default()
}],
},
);
} else {
battle_info.battle_target_info.insert(1, BattleTargetList {
battle_target_list: vec![BattleTarget {
id: 10002,
progress: 0,
..Default::default()
}],
});
battle_info.battle_target_info.insert(
1,
BattleTargetList {
battle_target_list: vec![BattleTarget {
id: 10002,
progress: 0,
..Default::default()
}],
},
);
}
for i in 2..=4 {
@@ -240,31 +246,37 @@ async fn create_battle_info(
.insert(i, BattleTargetList::default());
}
battle_info.battle_target_info.insert(5, BattleTargetList {
battle_target_list: vec![
BattleTarget {
id: 2001,
progress: 0,
..Default::default()
},
BattleTarget {
id: 2002,
progress: 0,
..Default::default()
},
],
});
battle_info.battle_target_info.insert(
5,
BattleTargetList {
battle_target_list: vec![
BattleTarget {
id: 2001,
progress: 0,
..Default::default()
},
BattleTarget {
id: 2002,
progress: 0,
..Default::default()
},
],
},
);
}
// Apocalyptic Shadow
if player.battle_config.battle_type == BattleType::AS {
battle_info.battle_target_info.insert(1, BattleTargetList {
battle_target_list: vec![BattleTarget {
id: 90005,
progress: 0,
..Default::default()
}],
});
battle_info.battle_target_info.insert(
1,
BattleTargetList {
battle_target_list: vec![BattleTarget {
id: 90005,
progress: 0,
..Default::default()
}],
},
);
}
// SU
+1 -1
View File
@@ -172,12 +172,12 @@ trait_handler! {
PlayerLogin;
GetMissionStatus;
GetBasicInfo;
// GetMultiPathAvatarInfo;
GetAvatarData;
GetAllLineupData;
GetCurLineupData;
GetCurSceneInfo;
PlayerHeartBeat;
SetAvatarEnhancedId;
// Entity move (dummy!)
+6 -4
View File
@@ -41,10 +41,12 @@ impl PlayerSession {
let (shutdown_tx, shutdown_rx) = watch::channel(());
Self {
token,
kcp: Arc::new(Mutex::new(Kcp::new(conv, token, false, RemoteEndPoint {
socket,
addr,
}))),
kcp: Arc::new(Mutex::new(Kcp::new(
conv,
token,
false,
RemoteEndPoint { socket, addr },
))),
start_time: util::cur_timestamp_secs(),
json_data: OnceLock::new(),
shutdown_rx,
+12 -12
View File
@@ -1,21 +1,21 @@
{
"lineups": {
"0": 1403,
"1": 1407,
"2": 8001,
"3": 1405
"0": 1005,
"1": 1006,
"2": 1301,
"3": 1309
},
"position": {
"x": -26968,
"y": 78953,
"z": 14457,
"rot_y": 11858
"x": 162379,
"y": 220000,
"z": 265445,
"rot_y": 122650
},
"scene": {
"plane_id": 20411,
"floor_id": 20411001,
"entry_id": 2041101
"plane_id": 20421,
"floor_id": 20421001,
"entry_id": 2042101
},
"main_character": "FemaleRememberance",
"main_character": "MaleRememberance",
"march_type": "MarchHunt"
}
+5 -5
View File
@@ -16105,7 +16105,7 @@ pub struct UpdateTrackMainMissionIdScRsp {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct FinishedMissionScNotify {
#[prost(uint32, repeated, tag = "3")]
pub finished_mission_id: ::prost::alloc::vec::Vec<u32>,
pub finished_mission_id_list: ::prost::alloc::vec::Vec<u32>,
}
/// Obf: PILPBOGGLKO
#[derive(proto_derive::CmdID)]
@@ -29513,11 +29513,11 @@ pub struct MissionStatusBySceneInfo {
#[prost(uint32, repeated, tag = "2")]
pub icbikgmghik: ::prost::alloc::vec::Vec<u32>,
#[prost(uint32, repeated, tag = "4")]
pub finished_mission_id: ::prost::alloc::vec::Vec<u32>,
pub finished_mission_id_list: ::prost::alloc::vec::Vec<u32>,
#[prost(uint32, repeated, tag = "6")]
pub ndnonhfimfi: ::prost::alloc::vec::Vec<u32>,
#[prost(message, repeated, tag = "11")]
pub dgkjillcfla: ::prost::alloc::vec::Vec<Mission>,
pub sub_mission_status_list: ::prost::alloc::vec::Vec<Mission>,
}
#[derive(proto_derive::CmdID)]
#[derive(Clone, PartialEq, ::prost::Message)]
@@ -29535,7 +29535,7 @@ pub struct SceneInfo {
#[prost(uint32, tag = "8")]
pub plane_id: u32,
#[prost(uint32, repeated, tag = "1906")]
pub djbibijmebh: ::prost::alloc::vec::Vec<u32>,
pub chest_id_list: ::prost::alloc::vec::Vec<u32>,
#[prost(uint32, tag = "13")]
pub floor_id: u32,
#[prost(message, repeated, tag = "14")]
@@ -32159,7 +32159,7 @@ pub struct MissionSync {
#[prost(uint32, repeated, tag = "7")]
pub hnepoedcidk: ::prost::alloc::vec::Vec<u32>,
#[prost(uint32, repeated, tag = "6")]
pub finished_mission_id: ::prost::alloc::vec::Vec<u32>,
pub finished_mission_id_list: ::prost::alloc::vec::Vec<u32>,
#[prost(uint32, repeated, tag = "12")]
pub mcfonopkokd: ::prost::alloc::vec::Vec<u32>,
}
+2 -2
View File
@@ -1,6 +1,6 @@
use proc_macro::TokenStream;
use quote::{quote, ToTokens};
use syn::{parse_macro_input, DeriveInput, Meta, MetaList};
use quote::{ToTokens, quote};
use syn::{DeriveInput, Meta, MetaList, parse_macro_input};
#[proc_macro_derive(CmdID, attributes(cmdid))]
pub fn message_id_derive(input: TokenStream) -> TokenStream {