import betterproto from game_server.net.session import PlayerSession from game_server.game.motion.motion_info import Motion from rail_proto.lib import ( ReplaceLineupCsReq, ReplaceLineupScRsp, SyncLineupNotify, SceneGroupRefreshScNotify, GroupRefreshInfo, SceneEntityRefreshInfo, SceneGroupRefreshType ) async def handle(session: PlayerSession, msg: ReplaceLineupCsReq) -> betterproto.Message: lineup = session.player.lineup_manager.get(msg.index) lineup.avatar_list = [avatar.id for avatar in msg.lineup_slot_list] lineup.leader_slot = msg.leader_slot await session.notify( SyncLineupNotify( lineup=lineup.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.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) ) ] ) ] ) ) return ReplaceLineupScRsp(retcode=0)