105 lines
3.7 KiB
Rust
105 lines
3.7 KiB
Rust
use std::collections::HashMap;
|
|
|
|
use crate::{
|
|
net::tools::{FreesrData, MultiPathAvatar},
|
|
util::cur_timestamp_ms,
|
|
};
|
|
|
|
use super::*;
|
|
|
|
pub async fn on_get_basic_info_cs_req(
|
|
_session: &mut PlayerSession,
|
|
_body: &GetBasicInfoCsReq,
|
|
res: &mut GetBasicInfoScRsp,
|
|
) {
|
|
res.player_setting_info = Some(PlayerSettingInfo::default());
|
|
res.gender = Gender::Woman as u32;
|
|
res.is_gender_set = true;
|
|
}
|
|
|
|
pub async fn on_player_heart_beat_cs_req(
|
|
_session: &mut PlayerSession,
|
|
body: &PlayerHeartBeatCsReq,
|
|
res: &mut PlayerHeartBeatScRsp,
|
|
) {
|
|
res.client_time_ms = body.client_time_ms;
|
|
res.server_time_ms = cur_timestamp_ms();
|
|
res.download_data = Some(ClientDownloadData {
|
|
version: 51,
|
|
time: res.server_time_ms as i64,
|
|
data: rbase64::decode("bG9jYWwgZnVuY3Rpb24gYmV0YV90ZXh0KG9iaikKICAgIGxvY2FsIGdhbWVPYmplY3QgPSBDUy5Vbml0eUVuZ2luZS5HYW1lT2JqZWN0LkZpbmQoIlVJUm9vdC9BYm92ZURpYWxvZy9CZXRhSGludERpYWxvZyhDbG9uZSkiKQoKICAgIGlmIGdhbWVPYmplY3QgdGhlbgogICAgICAgIGxvY2FsIHRleHRDb21wb25lbnQgPSBnYW1lT2JqZWN0OkdldENvbXBvbmVudEluQ2hpbGRyZW4odHlwZW9mKENTLlJQRy5DbGllbnQuTG9jYWxpemVkVGV4dCkpCgogICAgICAgIGlmIHRleHRDb21wb25lbnQgdGhlbgogICAgICAgICAgICB0ZXh0Q29tcG9uZW50LnRleHQgPSAiUm9iaW5TUiBpcyBhIGZyZWUgYW5kIG9wZW4gc291cmNlIHNvZnR3YXJlLiBkaXNjb3JkLmdnL3JldmVyc2Vkcm9vbXMiCiAgICAgICAgZW5kCiAgICBlbHNlCiAgICBlbmQKZW5kCgpiZXRhX3RleHQoKQ==").unwrap(),
|
|
ghkpbpdfijh: 0
|
|
});
|
|
}
|
|
|
|
pub async fn on_player_login_finish_cs_req(
|
|
session: &mut PlayerSession,
|
|
_req: &PlayerLoginFinishCsReq,
|
|
_res: &mut PlayerLoginFinishScRsp,
|
|
) -> Result<()> {
|
|
session
|
|
.send(ContentPackageSyncDataScNotify {
|
|
data: Some(PackageData {
|
|
info_list: [
|
|
200001, 200002, 200003, 200004, 150017, 150015, 150021, 150018, 130011, 130012,
|
|
130013,
|
|
]
|
|
.iter()
|
|
.map(|v| ContentInfo {
|
|
status: ContentPackageStatus::Finished.into(),
|
|
content_id: *v,
|
|
})
|
|
.collect(),
|
|
..Default::default()
|
|
}),
|
|
})
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub async fn on_get_multi_path_avatar_info_cs_req(
|
|
_session: &mut PlayerSession,
|
|
_req: &GetMultiPathAvatarInfoCsReq,
|
|
res: &mut GetMultiPathAvatarInfoScRsp,
|
|
) {
|
|
let json = FreesrData::load().await;
|
|
|
|
res.current_multi_path_avatar_id = HashMap::from([
|
|
(8001, json.main_character.get_type().into()),
|
|
(1001, json.march_type.get_type().into()),
|
|
]);
|
|
|
|
res.multi_path_avatar_type_info_list = MultiPathAvatar::to_vec()
|
|
.iter()
|
|
.filter_map(|mp_type| {
|
|
let avatar_info = json.avatars.get(&((*mp_type) as u32))?;
|
|
Some(MultiPathAvatarTypeInfo {
|
|
avatar_id: *mp_type as i32,
|
|
rank: avatar_info.data.rank,
|
|
equip_relic_list: json
|
|
.relics
|
|
.iter()
|
|
.filter(|relic| relic.equip_avatar == *mp_type as u32)
|
|
.map(|relic| relic.to_equipment_relic_proto())
|
|
.collect(),
|
|
skilltree_list: avatar_info
|
|
.data
|
|
.skills
|
|
.iter()
|
|
.map(|(point_id, level)| AvatarSkillTree {
|
|
point_id: *point_id,
|
|
level: *level,
|
|
})
|
|
.collect(),
|
|
path_equipment_id: json
|
|
.lightcones
|
|
.iter()
|
|
.find(|v| v.equip_avatar == *mp_type as u32)
|
|
.map(|v| v.internal_uid)
|
|
.unwrap_or_default(),
|
|
})
|
|
})
|
|
.collect();
|
|
}
|