import betterproto from game_server.net.session import PlayerSession from game_server.game.motion.motion_info import Motion from rail_proto.lib import ( EnterSceneCsReq, EnterSceneScRsp, EnterSceneByServerScNotify, SceneEntityMoveScNotify ) async def handle(session: PlayerSession, msg: EnterSceneCsReq) -> betterproto.Message: scene = session.player.scene_manager scene.entry_id = msg.entry_id if msg.teleport_id > 0: session.player.scene_manager.teleport_id = msg.teleport_id scene_proto = scene.ToProto(session) lineup = session.player.lineup_manager.get(session.player.data.cur_lineup).ToProto() session.pending_notify( EnterSceneByServerScNotify( scene=scene_proto, lineup=lineup ) ) session.pending_notify( SceneEntityMoveScNotify( entry_id=session.player.scene_manager.entry_id, motion=Motion( x=session.player.data.pos.x, y=session.player.data.pos.y, z=session.player.data.pos.z, rotY=session.player.data.rot.y, ).ToProto() ) ) scene.teleport_id = 0 #session.player.data.save_player_data() return EnterSceneScRsp( retcode=0 )