48 lines
1.6 KiB
Python
48 lines
1.6 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 (
|
|
SwitchLineupIndexCsReq,
|
|
SwitchLineupIndexScRsp,
|
|
SyncLineupNotify,
|
|
SceneGroupRefreshScNotify,
|
|
GroupRefreshInfo,
|
|
SceneGroupRefreshType,
|
|
SceneEntityRefreshInfo
|
|
)
|
|
|
|
async def handle(session: PlayerSession, msg: SwitchLineupIndexCsReq) -> betterproto.Message | None:
|
|
lineup_data = session.player.lineup_manager.get(msg.index)
|
|
if not lineup_data: return None
|
|
await session.notify(
|
|
SyncLineupNotify(
|
|
lineup=lineup_data.ToProto()
|
|
)
|
|
)
|
|
player_pos = 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()
|
|
for avatar_id in lineup_data.avatar_list:
|
|
session.pending_notify(
|
|
SceneGroupRefreshScNotify(
|
|
floor_id=session.player.data.floor_id,
|
|
group_refresh_list=[
|
|
GroupRefreshInfo(
|
|
refresh_type=SceneGroupRefreshType.SCENE_GROUP_REFRESH_TYPE_LOADED.value,
|
|
refresh_entity=[
|
|
SceneEntityRefreshInfo(
|
|
add_entity=session.player.scene_manager.Actor(avatar_id, player_pos)
|
|
)
|
|
]
|
|
)
|
|
]
|
|
)
|
|
)
|
|
session.player.data.cur_lineup = msg.index
|
|
return SwitchLineupIndexScRsp(
|
|
retcode=0,
|
|
index=msg.index
|
|
) |