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

46 lines
1.5 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 (
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)