diff --git a/Common/Data/Excel/ChallengeBossExtraExcel.cs b/Common/Data/Excel/ChallengeBossExtraExcel.cs new file mode 100644 index 00000000..989b5db5 --- /dev/null +++ b/Common/Data/Excel/ChallengeBossExtraExcel.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EggLink.DanhengServer.Data.Excel +{ + [ResourceEntity("ChallengeBossMazeExtra.json")] + public class ChallengeBossExtraExcel : ExcelResource + { + public int ID { get; set; } + public int MonsterID1 { get; set; } + public int MonsterID2 { get; set; } + + + public override int GetId() + { + return ID; + } + + public override void Loaded() + { + if (GameData.ChallengeConfigData.ContainsKey(ID)) + { + var challengeExcel = GameData.ChallengeConfigData[ID]; + challengeExcel.SetBossExcel(this); + } + } + } +} diff --git a/Common/Data/Excel/ChallengeConfigExcel.cs b/Common/Data/Excel/ChallengeConfigExcel.cs index 84e0c2cf..b25f96a1 100644 --- a/Common/Data/Excel/ChallengeConfigExcel.cs +++ b/Common/Data/Excel/ChallengeConfigExcel.cs @@ -2,7 +2,7 @@ namespace EggLink.DanhengServer.Data.Excel { - [ResourceEntity("ChallengeMazeConfig.json,ChallengeStoryMazeConfig.json", + [ResourceEntity("ChallengeMazeConfig.json,ChallengeStoryMazeConfig.json,ChallengeBossMazeConfig.json", isMultifile: true)] public class ChallengeConfigExcel : ExcelResource { @@ -32,6 +32,7 @@ namespace EggLink.DanhengServer.Data.Excel public Dictionary ChallengeMonsters2 { get; set; } = new(); [JsonIgnore] public ChallengeStoryExtraExcel? StoryExcel; + public ChallengeBossExtraExcel? BossExcel; public override int GetId() { @@ -43,12 +44,22 @@ namespace EggLink.DanhengServer.Data.Excel return StoryExcel != null; } + public bool IsBoss() + { + return StoryExcel != null; + } + public void SetStoryExcel(ChallengeStoryExtraExcel storyExcel) { StoryExcel = storyExcel; ChallengeCountDown = storyExcel.TurnLimit; } + public void SetBossExcel(ChallengeBossExtraExcel bossExcel) + { + BossExcel = bossExcel; + } + public override void Loaded() { // Cache challenge monsters diff --git a/Common/Data/Excel/ChallengeGroupExcel.cs b/Common/Data/Excel/ChallengeGroupExcel.cs index ef425333..c0b1346f 100644 --- a/Common/Data/Excel/ChallengeGroupExcel.cs +++ b/Common/Data/Excel/ChallengeGroupExcel.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace EggLink.DanhengServer.Data.Excel { - [ResourceEntity("ChallengeGroupConfig.json,ChallengeStoryGroupConfig.json", + [ResourceEntity("ChallengeGroupConfig.json,ChallengeStoryGroupConfig.json,ChallengeBossGroupConfig.json", isMultifile: true)] public class ChallengeGroupExcel : ExcelResource { diff --git a/GameServer/Game/Challenge/ChallengeInstance.cs b/GameServer/Game/Challenge/ChallengeInstance.cs index 56b7fc38..a6bf7330 100644 --- a/GameServer/Game/Challenge/ChallengeInstance.cs +++ b/GameServer/Game/Challenge/ChallengeInstance.cs @@ -5,6 +5,7 @@ using EggLink.DanhengServer.Game.Battle; using EggLink.DanhengServer.Game.Player; using EggLink.DanhengServer.Game.Scene; using EggLink.DanhengServer.Game.Scene.Entity; +using EggLink.DanhengServer.GameServer.Server.Packet.Send.Challenge; using EggLink.DanhengServer.Proto; using EggLink.DanhengServer.Server.Packet.Send.Challenge; using EggLink.DanhengServer.Server.Packet.Send.Lineup; @@ -91,11 +92,10 @@ namespace EggLink.DanhengServer.Game.Challenge return Excel.IsStory(); } - // Early implementation for 2.3 - /* public bool IsBoss() + public bool IsBoss() { return Excel.IsBoss(); - } */ + } public void SetStatus(ChallengeStatus status) { @@ -205,7 +205,7 @@ namespace EggLink.DanhengServer.Game.Challenge break; default: // Determine challenge result - if ((IsStory()/* || IsBoss()*/) && req.Stt.EndReason == BattleEndReason.TurnLimit) + if ((IsStory() || IsBoss()) && req.Stt.EndReason == BattleEndReason.TurnLimit) { AdvanceStage(); } @@ -232,17 +232,14 @@ namespace EggLink.DanhengServer.Game.Challenge // Save history Player.ChallengeManager!.AddHistory(ChallengeId, Stars, GetTotalScore()); - // Send challenge result data - Player.SendPacket(new PacketChallengeSettleNotify(this)); // Deprecated in 2.3 - // Early implementation for 2.3 - /* if (IsBoss()) + if (IsBoss()) { Player.SendPacket(new PacketChallengeBossPhaseSettleNotify(this)); } else { Player.SendPacket(new PacketChallengeSettleNotify(this)); - } */ + } } else { @@ -333,11 +330,10 @@ namespace EggLink.DanhengServer.Game.Challenge proto.PlayerInfo.CurStoryBuff.BuffList.Add(StoryBuffs.Select(x => (uint)x)); } - // Early implementation for 2.3 - /* if (StoryBuffs != null && StoryBuffs.Count >= CurrentStage) + if (StoryBuffs != null && StoryBuffs.Count >= CurrentStage) { proto.PlayerInfo.CurBossBuff.BuffList.Add((uint)BossBuffs[CurrentStage - 1]); - } */ + } return proto; } diff --git a/GameServer/Game/Challenge/ChallengeManager.cs b/GameServer/Game/Challenge/ChallengeManager.cs index cd258e44..80dc660f 100644 --- a/GameServer/Game/Challenge/ChallengeManager.cs +++ b/GameServer/Game/Challenge/ChallengeManager.cs @@ -21,7 +21,7 @@ namespace EggLink.DanhengServer.Game.Challenge #region Management - public void StartChallenge(int challengeId, StartChallengeStoryBuffInfo? storyBuffs) + public void StartChallenge(int challengeId, StartChallengeStoryBuffInfo? storyBuffs, StartChallengeBossBuffInfo? bossBuffs) { // Get challenge excel if (!GameData.ChallengeConfigData.TryGetValue(challengeId, out ChallengeConfigExcel? value)) @@ -111,12 +111,11 @@ namespace EggLink.DanhengServer.Game.Challenge instance.StoryBuffs.Add((int)storyBuffs.StoryBuffTwo); } - // Early implementation for 2.3 - /* if (BossBuffs != null) + if (bossBuffs != null) { - instance.AddBossBuff((int)BossBuffs.BossBuffOne); - instance.AddBossBuff((int)BossBuffs.BossBuffTwo); - } */ + instance.BossBuffs.Add((int)bossBuffs.StoryBuffOne); + instance.BossBuffs.Add((int)bossBuffs.StoryBuffTwo); + } // Send packet Player.SendPacket(new PacketStartChallengeScRsp(Player)); diff --git a/GameServer/Server/Packet/Recv/Challenge/HandlerStartChallengeCsReq.cs b/GameServer/Server/Packet/Recv/Challenge/HandlerStartChallengeCsReq.cs index 5a82c0ce..b2f7a6ec 100644 --- a/GameServer/Server/Packet/Recv/Challenge/HandlerStartChallengeCsReq.cs +++ b/GameServer/Server/Packet/Recv/Challenge/HandlerStartChallengeCsReq.cs @@ -15,8 +15,7 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Battle storyBuffInfo = req.PlayerInfo.StoryBuffInfo; }; - // Early implementation for 2.3 - /* StartChallengeBossBuffInfo? bossBuffInfo = null; + StartChallengeBossBuffInfo? bossBuffInfo = null; if (req.PlayerInfo != null && req.PlayerInfo.BossBuffInfo != null) { bossBuffInfo = req.PlayerInfo.BossBuffInfo; @@ -25,9 +24,9 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Battle if (req.TeamOne.Count > 0) { List team = new(); - for (int id in req.TeamOne) + foreach (int id in req.TeamOne) { - team.Add(id); + team.Add((int)id); }; connection.Player!.LineupManager!.ReplaceLineup(0, team, ExtraLineupType.LineupChallenge); } @@ -35,14 +34,14 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Battle if (req.TeamTwo.Count > 0) { List team = new(); - for (int id in req.TeamTwo) + foreach (int id in req.TeamTwo) { - team.Add(id); + team.Add((int)id); }; connection.Player!.LineupManager!.ReplaceLineup(0, team, ExtraLineupType.LineupChallenge2); - } */ + } - connection.Player!.ChallengeManager!.StartChallenge((int)req.ChallengeId, storyBuffInfo/*, bossBuffInfo*/); + connection.Player!.ChallengeManager!.StartChallenge((int)req.ChallengeId, storyBuffInfo, bossBuffInfo); } } } diff --git a/GameServer/Server/Packet/Send/Challenge/PacketChallengeBossPhaseSettleNotify.cs b/GameServer/Server/Packet/Send/Challenge/PacketChallengeBossPhaseSettleNotify.cs new file mode 100644 index 00000000..659c724e --- /dev/null +++ b/GameServer/Server/Packet/Send/Challenge/PacketChallengeBossPhaseSettleNotify.cs @@ -0,0 +1,31 @@ +using EggLink.DanhengServer.Game.Challenge; +using EggLink.DanhengServer.Proto; +using EggLink.DanhengServer.Server.Packet; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Challenge +{ + public class PacketChallengeBossPhaseSettleNotify : BasePacket + { + public PacketChallengeBossPhaseSettleNotify(ChallengeInstance challenge) : base(CmdIds.ChallengeBossPhaseSettleNotify) + { + var proto = new ChallengeBossPhaseSettleNotify + { + ChallengeId = (uint)challenge.Excel.ID, + IsWin = challenge.IsWin(), + ChallengeScore = (uint)challenge.ScoreStage1, + ScoreTwo = (uint)challenge.ScoreStage2, + Star = (uint)challenge.Stars, + Phase = (uint)challenge.CurrentStage, + IsRemainingAction = true, + HCLKAEHJCDO = true, + }; + + SetData(proto); + } + } +}