feat: add Abyss

This commit is contained in:
Naruse
2025-06-17 17:26:38 +08:00
parent 981f2479d9
commit e92798b624
16 changed files with 271 additions and 72 deletions

View File

@@ -0,0 +1,33 @@
using KianaBH.Data;
using KianaBH.Enums.Player;
using KianaBH.Internationalization;
namespace KianaBH.GameServer.Command.Commands;
[CommandInfo("endless", "Game.Command.Endless.Desc", "Game.Command.Endless.Usage", ["en"], [PermEnum.Admin, PermEnum.Support])]
public class CommandEndless : ICommands
{
[CommandDefault]
public async ValueTask SetBoss(CommandArg arg)
{
if (!await arg.CheckOnlineTarget()) return;
var bossIds = new[] { arg.GetInt(0), arg.GetInt(1), arg.GetInt(2) }.ToHashSet();
var data = GameData.ExBossMonsterData.Values
.Where(x => bossIds.Contains(x.BossId))
.Select(x => x.BossId)
.ToList();
if (data.Count == 0)
{
await arg.SendMsg(I18NManager.Translate("Game.Command.Endless.NotFound"));
return;
}
arg.Target!.Player!.Data.ExBossMonster.Clear();
arg.Target!.Player!.Data.ExBossMonster.AddRange(data);
await arg.SendMsg(I18NManager.Translate("Game.Command.Endless.Success"));
}
}

View File

@@ -1,13 +1,14 @@
using KianaBH.GameServer.Server.Packet.Send.Test;
using KianaBH.GameServer.Server.Packet.Send.Endless;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Test;
namespace KianaBH.GameServer.Server.Packet.Recv.Endless;
[Opcode(CmdIds.UltraEndlessEnterSiteReq)]
public class HandlerUltraEndlessEnterSiteReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketUltraEndlessEnterSiteRsp());
var req = UltraEndlessEnterSiteReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketUltraEndlessEnterSiteRsp(req.SiteId));
}
}

View File

@@ -1,13 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Test;
using KianaBH.GameServer.Server.Packet.Send.Endless;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Test;
namespace KianaBH.GameServer.Server.Packet.Recv.Endless;
[Opcode(CmdIds.UltraEndlessGetMainDataReq)]
public class HandlerUltraEndlessGetMainDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketUltraEndlessGetMainDataRsp());
await connection.SendPacket(new PacketUltraEndlessGetMainDataRsp(connection.Player!));
}
}

View File

@@ -1,13 +1,14 @@
using KianaBH.GameServer.Server.Packet.Send.Test;
using KianaBH.GameServer.Server.Packet.Send.Endless;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Test;
namespace KianaBH.GameServer.Server.Packet.Recv.Endless;
[Opcode(CmdIds.UltraEndlessGetTopRankReq)]
public class HandlerUltraEndlessGetTopRankReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketUltraEndlessGetTopRankRsp());
var req = UltraEndlessGetTopRankReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketUltraEndlessGetTopRankRsp(connection.Player!,req.ScheduleId));
}
}

View File

@@ -1,13 +1,14 @@
using KianaBH.GameServer.Server.Packet.Send.Test;
using KianaBH.GameServer.Server.Packet.Send.Endless;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Test;
namespace KianaBH.GameServer.Server.Packet.Recv.Endless;
[Opcode(CmdIds.UltraEndlessReportSiteFloorReq)]
public class HandlerUltraEndlessReportSiteFloorReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketUltraEndlessReportSiteFloorRsp());
var req = UltraEndlessReportSiteFloorReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketUltraEndlessReportSiteFloorRsp(req.SiteId,req.Floor));
}
}

View File

@@ -1,15 +1,15 @@
using KianaBH.KcpSharp;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Send.Test;
namespace KianaBH.GameServer.Server.Packet.Send.Endless;
public class PacketUltraEndlessEnterSiteRsp : BasePacket
{
public PacketUltraEndlessEnterSiteRsp() : base(CmdIds.UltraEndlessEnterSiteRsp)
public PacketUltraEndlessEnterSiteRsp(uint siteId) : base(CmdIds.UltraEndlessEnterSiteRsp)
{
var proto = new UltraEndlessEnterSiteRsp
{
SiteId = siteId
};
SetData(proto);

View File

@@ -0,0 +1,66 @@
using KianaBH.Data;
using KianaBH.GameServer.Game.Player;
using KianaBH.KcpSharp;
using KianaBH.Proto;
using KianaBH.Util.Extensions;
namespace KianaBH.GameServer.Server.Packet.Send.Endless;
public class PacketUltraEndlessGetMainDataRsp : BasePacket
{
public PacketUltraEndlessGetMainDataRsp(PlayerInstance player) : base(CmdIds.UltraEndlessGetMainDataRsp)
{
uint cupNum = player.Data.GetCupNum();
var proto = new UltraEndlessGetMainDataRsp
{
ScheduleId = 1028,
GroupLevel = (uint)player.Data.Abyss.GroupLevel,
TopGroupLevel = 9,
CupNum = cupNum,
MainData = new UltraEndlessMainData
{
ScheduleId = 1028,
BeginTime = (uint)Extensions.GetUnixSec(),
EndTime = (uint)Extensions.GetUnixSec() + 3600 * 24 * 7,
CloseTime = (uint)Extensions.GetUnixSec() + 3600 * 24 * 7 + 1200,
CurSeasonId = 1,
SiteList = { player.Data.ToUltraEndlessSiteProto() }
},
DynamicHardLevel = (uint)player.Data.Abyss.DynamicHard,
EndlessPlayerList =
{
new UltraEndlessPlayer
{
Uid = (uint)player.Data.Uid,
GroupLevel = (uint)player.Data.Abyss.GroupLevel,
CupNum = cupNum,
MaxStageScore = 18000
}
},
BriefDataList =
{
new PlayerFriendBriefData
{
Uid = (uint)player.Data.Uid,
Nickname = player.Data.Name,
Level = (uint)player.Data.Level,
}
},
LastSettleInfo = new UltraEndlessSettleInfo
{
CupNum = 280,
CupNumAfterScheduleSettle = 280,
CupNumAfterSeasonSettle = 380,
CupNumBefore = 380,
CupNumBeforeSeasonSettle = 380,
GroupLevel = 3,
GroupMemberNum = 20,
MmrScore = 974,
Rank = 20,
ScheduleId = 3426
},
};
SetData(proto);
}
}

View File

@@ -0,0 +1,37 @@
using KianaBH.GameServer.Game.Player;
using KianaBH.KcpSharp;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Send.Endless;
public class PacketUltraEndlessGetTopRankRsp : BasePacket
{
public PacketUltraEndlessGetTopRankRsp(PlayerInstance player, uint scheduleId) : base(CmdIds.UltraEndlessGetTopRankRsp)
{
var proto = new UltraEndlessGetTopRankRsp
{
ScheduleId = scheduleId,
RankData = new RankShowData
{
IsFeatureClosed = true,
MyRank = 1,
MyRankType = 1,
MyScore = 18000,
RankList =
{
new UserRankData
{
Uid = (uint)player.Data.Uid,
NickName = player.Data.Name,
Rank = 1,
Score = 18000,
CustomHeadId = (uint)player.Data.HeadIcon,
FrameId = (uint)player.Data.HeadFrame,
}
}
},
};
SetData(proto);
}
}

View File

@@ -0,0 +1,18 @@
using KianaBH.KcpSharp;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Send.Endless;
public class PacketUltraEndlessReportSiteFloorRsp : BasePacket
{
public PacketUltraEndlessReportSiteFloorRsp(uint siteId, uint floor) : base(CmdIds.UltraEndlessReportSiteFloorRsp)
{
var proto = new UltraEndlessReportSiteFloorRsp
{
SiteId = siteId,
Floor = floor,
};
SetData(proto);
}
}

View File

@@ -1,17 +0,0 @@
using KianaBH.KcpSharp;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Send.Test;
public class PacketUltraEndlessGetMainDataRsp : BasePacket
{
public PacketUltraEndlessGetMainDataRsp() : base(CmdIds.UltraEndlessGetMainDataRsp)
{
var proto = new UltraEndlessGetMainDataRsp
{
};
SetData(proto);
}
}

View File

@@ -1,17 +0,0 @@
using KianaBH.KcpSharp;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Send.Test;
public class PacketUltraEndlessGetTopRankRsp : BasePacket
{
public PacketUltraEndlessGetTopRankRsp() : base(CmdIds.UltraEndlessGetTopRankRsp)
{
var proto = new UltraEndlessGetTopRankRsp
{
};
SetData(proto);
}
}

View File

@@ -1,17 +0,0 @@
using KianaBH.KcpSharp;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Send.Test;
public class PacketUltraEndlessReportSiteFloorRsp : BasePacket
{
public PacketUltraEndlessReportSiteFloorRsp() : base(CmdIds.UltraEndlessReportSiteFloorRsp)
{
var proto = new UltraEndlessReportSiteFloorRsp
{
};
SetData(proto);
}
}