58 lines
2.2 KiB
Python
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 |