mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-12 21:04:41 +01:00
feat: add Abyss
This commit is contained in:
@@ -42,4 +42,8 @@ public static class GameData
|
||||
public static Dictionary<int, TutorialDataExcel> TutorialData { get; private set; } = [];
|
||||
public static Dictionary<int, CityEventPhotoExcel> CityEventPhotoData { get; private set; } = [];
|
||||
public static Dictionary<int, RandomPlotDataExcel> RandomPlotData { get; private set; } = [];
|
||||
public static Dictionary<int, UltraEndlessSiteExcel> UltraEndlessSiteData { get; private set; } = [];
|
||||
public static Dictionary<int, List<UltraEndlessFloorExcel>> UltraEndlessFloorData { get; private set; } = [];
|
||||
public static Dictionary<int, ExBossMonsterDataExcel> ExBossMonsterData { get; private set; } = [];
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Drawing;
|
||||
using KianaBH.Data;
|
||||
using KianaBH.Proto;
|
||||
using KianaBH.Util;
|
||||
using KianaBH.Util.Extensions;
|
||||
@@ -23,6 +23,8 @@ public class PlayerData : BaseDatabaseDataHelper
|
||||
public int BirthDay { get; set; } = 0;
|
||||
[SugarColumn(IsJson = true)] public WarshipAvatarData WarshipAvatar { get; set; } = new();
|
||||
[SugarColumn(IsNullable = true)] public long LastActiveTime { get; set; }
|
||||
[SugarColumn(IsJson = true)] public UltraEndless Abyss { get; set; } = new();
|
||||
public List<int> ExBossMonster { get; set; } = new List<int> { 51016, 4021, 36112 };
|
||||
public long RegisterTime { get; set; } = Extensions.GetUnixSec();
|
||||
|
||||
public static PlayerData? GetPlayerByUid(long uid)
|
||||
@@ -64,6 +66,49 @@ public class PlayerData : BaseDatabaseDataHelper
|
||||
TotalLoginDays = 1
|
||||
};
|
||||
}
|
||||
|
||||
public uint GetCupNum()
|
||||
{
|
||||
uint GroupLevel = (uint)Abyss.GroupLevel;
|
||||
if (GroupLevel > 6) return (GroupLevel - 6) * 367 + 900;
|
||||
else if (GroupLevel > 1) return (GroupLevel - 2) * 200 + 100;
|
||||
else return 0;
|
||||
}
|
||||
|
||||
public List<UltraEndlessSite> ToUltraEndlessSiteProto()
|
||||
{
|
||||
int currentSiteId = Abyss.SiteId;
|
||||
|
||||
var currentSiteData = GameData.UltraEndlessSiteData.Values
|
||||
.FirstOrDefault(x => x.SiteID == currentSiteId);
|
||||
|
||||
if (currentSiteData == null) return [];
|
||||
|
||||
if (currentSiteData.SiteNodeName.StartsWith("Area") &&
|
||||
int.TryParse(currentSiteData.SiteNodeName.Substring(4), out int areaNumber) &&
|
||||
areaNumber > 1) currentSiteId -= (areaNumber - 1);
|
||||
|
||||
var siteIds = Enumerable.Range(0, 4).Select(i => currentSiteId + i).ToHashSet();
|
||||
|
||||
var siteDatas = GameData.UltraEndlessSiteData.Values
|
||||
.Where(site => siteIds.Contains(site.SiteID));
|
||||
|
||||
return siteDatas.Select(site => new UltraEndlessSite
|
||||
{
|
||||
SiteId = (uint)site.SiteID,
|
||||
FloorList =
|
||||
{
|
||||
GameData.UltraEndlessFloorData.Values
|
||||
.SelectMany(floorList => floorList)
|
||||
.Where(floor => floor.StageID == site.StageID)
|
||||
.Select(floor => new UltraEndlessFloor
|
||||
{
|
||||
Floor = (uint)floor.FloorID,
|
||||
MaxScore = site.SiteNodeName == "Area3" ? 0 : (uint)floor.MaxScore
|
||||
})
|
||||
}
|
||||
}).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public class WarshipAvatarData
|
||||
@@ -71,3 +116,11 @@ public class WarshipAvatarData
|
||||
public int FirstAvatarId { get; set; } = 101;
|
||||
public int SecondAvatarId { get; set; } = 0;
|
||||
}
|
||||
|
||||
public class UltraEndless
|
||||
{
|
||||
public int SiteId { get; set; } = 6691;
|
||||
public int GroupLevel { get; set; } = 8;
|
||||
public int DynamicHard { get; set; } = 100;
|
||||
|
||||
}
|
||||
@@ -44,6 +44,9 @@ public class WordTextEN
|
||||
public string Activity => "Activity";
|
||||
public string Elf => "Elf";
|
||||
public string Dress => "Outfit";
|
||||
public string Bracket => "Bracket";
|
||||
public string Disturbance => "Disturbance";
|
||||
public string Site => "Site";
|
||||
|
||||
// server info
|
||||
public string Config => "Config File";
|
||||
@@ -80,7 +83,9 @@ public class CommandTextEN
|
||||
public HelpTextEN Help { get; } = new();
|
||||
public ValkTextEN Valk { get; } = new();
|
||||
public GiveAllTextEN GiveAll { get; } = new();
|
||||
public ElfTextEN Elf { get; } = new();
|
||||
public ElfTextEN Elf { get; } = new();
|
||||
public AbyssTextEN Abyss { get; } = new();
|
||||
public EndlessTextEN Endless { get; } = new();
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -236,6 +241,37 @@ public class ElfTextEN
|
||||
public string ElfSetStar => "Set Elf {0}'s Resonance to {1}!";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// path: Game.Command.Abyss
|
||||
/// </summary>
|
||||
public class AbyssTextEN
|
||||
{
|
||||
public string Desc => "Set abyss disturbance,bracket,site \n";
|
||||
|
||||
public string Usage =>
|
||||
"Usage: /abyss bracket [1-9]\n\n" +
|
||||
"Usage: /abyss temp [value]\n\n" +
|
||||
"Usage: /abyss site [siteId]\n";
|
||||
|
||||
public string Success => "Success set {0}";
|
||||
public string AreaNotFound => "SiteId Not Found";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// path: Game.Command.Endless
|
||||
/// </summary>
|
||||
public class EndlessTextEN
|
||||
{
|
||||
public string Desc => "Set Memorial Arena boss \n";
|
||||
|
||||
public string Usage =>
|
||||
"Usage: /endless [bossid1] [bossid2] [bossid3]\n\n" +
|
||||
"/endless 1001 1002 1003";
|
||||
|
||||
public string Success => "Success set Memorial Arena Boss";
|
||||
public string NotFound => "BossId Not Found";
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
33
GameServer/Command/Commands/CommandEndless.cs
Normal file
33
GameServer/Command/Commands/CommandEndless.cs
Normal 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"));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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!));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -561,7 +561,7 @@ message PlayerDetailData {
|
||||
uint32 frame_id = 16;
|
||||
PlayerAdventureData adventure = 17;
|
||||
repeated AvatarDetailData backup_avatar_list = 18;
|
||||
Medal on_medal = 19;
|
||||
uint32 on_medal = 19;
|
||||
bool is_allow_visit = 30;
|
||||
uint32 visit_avatar = 31;
|
||||
uint32 be_liked_num = 32;
|
||||
@@ -596,7 +596,7 @@ message PlayerFriendBriefData {
|
||||
string armada_name = 13;
|
||||
uint32 bond = 14;
|
||||
uint32 on_medal_id = 15;
|
||||
Medal on_medal = 16;
|
||||
uint32 on_medal = 16;
|
||||
uint32 frame_id = 17;
|
||||
uint32 mp_level = 18;
|
||||
uint32 custom_head_id = 19;
|
||||
@@ -17223,7 +17223,7 @@ message ChatworldPlayerInfo {
|
||||
repeated ChatworldBuff buff_list = 18;
|
||||
uint32 runtime_tag = 20;
|
||||
uint32 custom_head_id = 22;
|
||||
Medal on_medal = 23;
|
||||
uint32 on_medal = 23;
|
||||
ChatworldBattle battle_info = 32;
|
||||
}
|
||||
|
||||
@@ -28646,7 +28646,7 @@ message GetMainDataRsp {
|
||||
uint32 register_time = 40;
|
||||
WarshipThemeData warship_theme = 41;
|
||||
repeated WaitDelMaterialData wait_del_material_list = 42;
|
||||
Medal on_medal = 43;
|
||||
uint32 on_medal = 43;
|
||||
repeated uint32 type_list = 44;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user