import betterproto from game_server.net.session import PlayerSession from game_server.resource import ResourceManager from game_server.resource.configdb.map_entrance import MapEntranceData from game_server.resource.configdb.map_default_entrance import MapDefaultEntranceData from rail_proto.lib import ( GetSceneMapInfoCsReq, GetSceneMapInfoScRsp, SceneMapInfo, ChestInfo, ChestType, MazeGroup, MazePropState ) async def handle(session: PlayerSession, msg: GetSceneMapInfoCsReq) -> betterproto.Message: rsp = GetSceneMapInfoScRsp(retcode=0) for floor_id in msg.floor_id_list: map_default = ResourceManager.instance().find_by_index(MapDefaultEntranceData, floor_id) if not map_default: continue data = ResourceManager.instance().find_by_index(MapEntranceData, map_default.EntranceID) if not data: continue map_info = SceneMapInfo( retcode=0, chest_list=[ ChestInfo(chest_type=ChestType.MAP_INFO_CHEST_TYPE_NORMAL.value), ChestInfo(chest_type=ChestType.MAP_INFO_CHEST_TYPE_PUZZLE.value), ChestInfo(chest_type=ChestType.MAP_INFO_CHEST_TYPE_CHALLENGE.value) ], floor_id=floor_id ) for i in range(101): map_info.lighten_section_list.append(i) level_group = data.floor_infos.get(map_default.EntranceID) if level_group: for group_id,group in level_group.groups.items(): maze_group_list = MazeGroup( group_id=group_id ) map_info.maze_group_list.append(maze_group_list) 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), config_id=prop.ID ) if prop.MappingInfoID > 0: map_info.unlock_teleport_list.append(prop.MappingInfoID) map_info.maze_prop_list.append(maze_prop) rsp.scene_map_info.append(map_info) return rsp