using RPG.GameCore.Excel; using RPG.Network.Proto; using RPG.Services.Gameserver.Modules.Attributes; using RPG.Services.Gameserver.Session; namespace RPG.Services.Gameserver.Modules; internal class AdventureModule : BaseModule { private readonly ExcelTables _tables; public AdventureModule(ExcelTables excelTables) { _tables = excelTables; } [OnCommand(CmdType.CmdGetCurSceneInfoCsReq)] public Task OnCmdGetCurSceneInfoCsReq(PlayerSession session, ReadOnlyMemory _) { Send(session, CmdType.CmdGetCurSceneInfoScRsp, new GetCurSceneInfoScRsp { Retcode = 0, Scene = new SceneInfo { PlaneId = 20121, FloorId = 20121001, EntryId = 2012101, EntityList = { }, LeaderEntityId = 0 } }); return Task.CompletedTask; } [OnCommand(CmdType.CmdGetMazeMapInfoCsReq)] public Task OnCmdGetMazeMapInfoCsReq(PlayerSession session, ReadOnlyMemory body) { GetMazeMapInfoCsReq req = GetMazeMapInfoCsReq.Parser.ParseFrom(body.Span); Send(session, CmdType.CmdGetMazeMapInfoScRsp, new GetMazeMapInfoScRsp { Retcode = 0, EntryId = req.EntryId, // TODO: LightenSectionList = { }, MazeGroupList = { }, MazePropList = { } }); return Task.CompletedTask; } [OnCommand(CmdType.CmdEnterMazeCsReq)] public Task OnCmdEnterMazeCsReq(PlayerSession session, ReadOnlyMemory body) { EnterMazeCsReq req = EnterMazeCsReq.Parser.ParseFrom(body.Span); MapEntryRow? entry = _tables.GetExcelRow(ExcelType.MapEntry, req.EntryId); if (entry == null) { Send(session, CmdType.CmdEnterMazeScRsp, new EnterMazeScRsp { Retcode = Retcode.RET_MAZE_MAP_NOT_EXIST }); return Task.CompletedTask; } Send(session, CmdType.CmdEnterMazeScRsp, new EnterMazeScRsp { Retcode = 0, Maze = new Maze { MapEntryId = entry.ID, Id = entry.PlaneID, Floor = new MazeFloor { FloorId = entry.FloorID, Scene = new SceneInfo { EntryId = entry.ID, PlaneId = entry.PlaneID, FloorId = entry.FloorID } } }, }); return Task.CompletedTask; } }