Files
neonsr/game_server/handlers/GetSceneMapInfoCsReq.py
Naruse ec8972d5d6 init
2025-04-15 19:36:05 +08:00

58 lines
2.2 KiB
Python

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