From 1b727e06d7b271d23cdf0ef1c0ed5e6d269d5d66 Mon Sep 17 00:00:00 2001 From: Naruse <71993948+DevilProMT@users.noreply.github.com> Date: Fri, 18 Apr 2025 10:06:55 +0800 Subject: [PATCH] add more lineup & add SwitchLineup --- game_server/game/player/player_manager.py | 15 +++--- game_server/handlers/GetSceneMapInfoCsReq.py | 2 +- .../handlers/SwitchLineupIndexCsReq.py | 48 +++++++++++++++++++ 3 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 game_server/handlers/SwitchLineupIndexCsReq.py diff --git a/game_server/game/player/player_manager.py b/game_server/game/player/player_manager.py index a3495e5..b416e42 100644 --- a/game_server/game/player/player_manager.py +++ b/game_server/game/player/player_manager.py @@ -56,13 +56,14 @@ class PlayerManager(BaseModel): def add_all_lineups(self): lineups = get_all_lineup_by_uid(uid=self.data.uid) if not lineups: - lineup = LineupData( - uid=self.data.uid, - index=0, - name="", - avatar_list=[self.data.cur_basic_type] - ).add_lineup() - self.lineup_manager[lineup.index] = lineup + for i in range(0, 10): + lineup = LineupData( + uid=self.data.uid, + index=i, + name="", + avatar_list=[self.data.cur_basic_type] if i == 0 else [] + ).add_lineup() + self.lineup_manager[lineup.index] = lineup for lineup in lineups: self.lineup_manager[lineup.index] = lineup diff --git a/game_server/handlers/GetSceneMapInfoCsReq.py b/game_server/handlers/GetSceneMapInfoCsReq.py index 0a4d7e9..4e4f609 100644 --- a/game_server/handlers/GetSceneMapInfoCsReq.py +++ b/game_server/handlers/GetSceneMapInfoCsReq.py @@ -47,7 +47,7 @@ async def handle(session: PlayerSession, msg: GetSceneMapInfoCsReq) -> betterpro for prop in group.PropList: maze_prop = MazePropState( group_id=group_id, - state=8 if prop.MappingInfoID > 0 else (1 if prop.State == 0 else prop.State), + state=prop.State if prop.State else 0, config_id=prop.ID ) if prop.MappingInfoID > 0: diff --git a/game_server/handlers/SwitchLineupIndexCsReq.py b/game_server/handlers/SwitchLineupIndexCsReq.py new file mode 100644 index 0000000..fe54dd6 --- /dev/null +++ b/game_server/handlers/SwitchLineupIndexCsReq.py @@ -0,0 +1,48 @@ +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 + ) \ No newline at end of file