Files
neonsr/game_server/handlers/EnterSceneCsReq.py
2025-04-16 21:31:18 +08:00

39 lines
1.3 KiB
Python

import betterproto
from game_server.net.session import PlayerSession
from game_server.game.scene.scene_manager import SceneManager
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:
session.player.scene_manager = SceneManager(entry_id=msg.entry_id)
scene = session.player.scene_manager
if msg.teleport_id > 0:
scene.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=scene.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
return EnterSceneScRsp(
retcode=0
)