JadeSR/gameserver/src/net/handlers/scene.rs

103 lines
3.8 KiB
Rust

use common::data::EXCEL_COLLECTION;
use super::*;
pub async fn on_enter_scene_cs_req(session: &PlayerSession, body: &EnterSceneCsReq) -> Result<()> {
session
.send(CMD_ENTER_SCENE_SC_RSP, EnterSceneScRsp::default())
.await?;
let entrance_config = EXCEL_COLLECTION
.map_entrance_configs
.iter()
.find(|c| c.id == body.entry_id)
.unwrap();
let player = session.player_info();
let enter_scene_by_server = EnterSceneByServerScNotify {
reason: EnterSceneReason::None.into(),
lineup: Some(player.lineup.clone()),
scene: Some(SceneInfo {
plane_id: entrance_config.plane_id,
floor_id: entrance_config.floor_id,
entry_id: entrance_config.id,
game_mode_type: 1, // TODO: EntranceType -> enum repr(u32)
..Default::default()
}),
};
session
.send(CMD_ENTER_SCENE_BY_SERVER_SC_NOTIFY, enter_scene_by_server)
.await
}
pub async fn on_get_cur_scene_info_cs_req(
session: &PlayerSession,
_body: &GetCurSceneInfoCsReq,
) -> Result<()> {
session
.send(
CMD_GET_CUR_SCENE_INFO_SC_RSP,
GetCurSceneInfoScRsp {
retcode: 0,
scene: Some(SceneInfo {
plane_id: 20101,
floor_id: 20101001,
entry_id: 2010101,
game_mode_type: 1,
leader_entity_id: 1,
scene_group_list: vec![
SceneGroupInfo {
state: 1,
group_id: 0,
entity_list: vec![SceneEntityInfo {
group_id: 0,
inst_id: 0,
entity_id: 1,
actor: Some(SceneActorInfo {
avatar_type: 3,
base_avatar_id: 1314,
map_layer: 2,
uid: session.player_uid(),
}),
motion: Some(MotionInfo {
pos: Some(Vector {
x: -550,
y: 19364,
z: 4480,
}),
rot: Some(Vector::default()),
}),
..Default::default()
}],
},
SceneGroupInfo {
state: 1,
group_id: 19,
entity_list: vec![SceneEntityInfo {
group_id: 19,
inst_id: 300001,
entity_id: 228,
prop: Some(ScenePropInfo {
prop_id: 808,
prop_state: 1,
..Default::default()
}),
motion: Some(MotionInfo {
pos: Some(Vector {
x: -570,
y: 19364,
z: 4480,
}),
rot: Some(Vector::default()),
}),
..Default::default()
}],
},
],
..Default::default()
}),
},
)
.await
}