39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
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
|
|
) |