using RPG.GameCore.Excel; using RPG.Network.Proto; using RPG.Services.Gameserver.Modules.Attributes; using RPG.Services.Gameserver.Session; namespace RPG.Services.Gameserver.Modules; [GMAlias("adventure")] internal class AdventureModule : BaseModule { private readonly ExcelTables _tables; public AdventureModule(ExcelTables excelTables) { _tables = excelTables; } [GMCommand("maze")] public Task OnGmEnterMaze(PlayerSession session, string[] args) { if (args.Length != 1) return Task.CompletedTask; if (!uint.TryParse(args[0], out uint entryId)) return Task.CompletedTask; MapEntryRow? entry = _tables.GetExcelRow(ExcelType.MapEntry, entryId); if (entry == null) return Task.CompletedTask; Send(session, CmdType.CmdEnterMazeByServerScNotify, new EnterMazeByServerScNotify { 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; } [OnCommand(CmdType.CmdGetCurSceneInfoCsReq)] public Task OnCmdGetCurSceneInfoCsReq(PlayerSession session, ReadOnlyMemory _) { Send(session, CmdType.CmdGetCurSceneInfoScRsp, new GetCurSceneInfoScRsp { Retcode = 0, Scene = new SceneInfo { PlaneId = 20001, FloorId = 20001001, EntryId = 2000101, GameModeType = 1 } }); 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, GameModeType = 1 } } }, }); return Task.CompletedTask; } [OnCommand(CmdType.CmdGetCurBattleInfoCsReq)] public Task OnCmdGetCurBattleInfoCsReq(PlayerSession session, ReadOnlyMemory _) { Send(session, CmdType.CmdGetCurBattleInfoScRsp, new GetCurBattleInfoScRsp { BattleInfo = new(), LastEndStatus = BattleEndStatus.BattleEndNone }); return Task.CompletedTask; } }