diff --git a/GameServer/Game/Battle/BattleInstance.cs b/GameServer/Game/Battle/BattleInstance.cs index faa65962..969cdb2c 100644 --- a/GameServer/Game/Battle/BattleInstance.cs +++ b/GameServer/Game/Battle/BattleInstance.cs @@ -7,6 +7,7 @@ using EggLink.DanhengServer.Game.Player; using EggLink.DanhengServer.Game.Scene; using EggLink.DanhengServer.Game.Scene.Entity; using EggLink.DanhengServer.Proto; +using Google.Protobuf; namespace EggLink.DanhengServer.Game.Battle { @@ -31,7 +32,7 @@ namespace EggLink.DanhengServer.Game.Battle public List AvatarInfo { get; set; } = []; public List Buffs { get; set; } = []; public Dictionary BattleEvents { get; set; } = []; - public List BattleTargets { get; set; } = []; + public Dictionary BattleTargets { get; set; } = []; public BattleInstance(PlayerInstance player, Database.Lineup.LineupInfo lineup, List monsters) : this(player, lineup, new List()) { @@ -66,6 +67,23 @@ namespace EggLink.DanhengServer.Game.Battle return list; } + public void AddBattleTarget(int key, int targetId, int progress, int totalProgress) + { + if (!BattleTargets.ContainsKey(key)) + { + BattleTargets.Add(key, new BattleTargetList()); + } + + var battleTarget = new BattleTarget() + { + Id = (uint)targetId, + Progress = (uint)progress, + TotalProgress = (uint)totalProgress + }; + + BattleTargets[key].BGNPEBHGELB.Add(battleTarget); + } + public SceneBattleInfo ToProto() { var proto = new SceneBattleInfo() @@ -138,13 +156,12 @@ namespace EggLink.DanhengServer.Game.Battle { for (int i = 1; i <= 5; i++) { - var battleTargetList = BattleTargets[i]; - var battleTargetEntry = new BattleTargetList { }; + var battleTargetEntry = new BattleTargetList(); - // Maybe? - if (BattleTargets.Count >= i) + if (BattleTargets.ContainsKey(i)) { - battleTargetEntry.BGNPEBHGELB.Add(battleTargetList); + var battleTargetList = BattleTargets[i]; + battleTargetEntry.BGNPEBHGELB.AddRange(battleTargetList.BGNPEBHGELB); } proto.BattleTargetInfo.Add((uint)i, battleTargetEntry); diff --git a/GameServer/Game/Challenge/ChallengeInstance.cs b/GameServer/Game/Challenge/ChallengeInstance.cs index 7a38a129..033d9a50 100644 --- a/GameServer/Game/Challenge/ChallengeInstance.cs +++ b/GameServer/Game/Challenge/ChallengeInstance.cs @@ -34,7 +34,7 @@ namespace EggLink.DanhengServer.Game.Challenge [JsonIgnore] PlayerInstance Player { get; set; } [JsonIgnore] - ChallengeConfigExcel Excel { get; set; } + public ChallengeConfigExcel Excel { get; set; } public List StoryBuffs { get; set; } = []; public List BossBuffs { get; set; } = []; @@ -136,20 +136,11 @@ namespace EggLink.DanhengServer.Game.Challenge if (Excel.StoryExcel != null) { - battle.BattleTargets.Add(new BattleTarget() { - Id = 1, - Progress = 10001, - TotalProgress = (uint)GetTotalScore(), - }); + battle.AddBattleTarget(1, 10001, GetTotalScore(), 0); foreach (var id in Excel.StoryExcel.BattleTargetID!) { - battle.BattleTargets.Add(new BattleTarget() - { - Id = 5, - Progress = (uint)id, - TotalProgress = (uint)GetTotalScore(), - }); + battle.AddBattleTarget(1, id, GetTotalScore(), 0); } } } @@ -179,7 +170,7 @@ namespace EggLink.DanhengServer.Game.Challenge ExtraLineupType = (ExtraLineupType)CurrentExtraLineup }; - if (StoryBuffs != null && StoryBuffs.Count >= (CurrentStage - 1)) + if (StoryBuffs != null && StoryBuffs.Count >= CurrentStage) { proto.PlayerInfo = new ChallengeStoryInfo() { CurStoryBuff = new ChallengeStoryBuffInfo() { } }; proto.PlayerInfo.CurStoryBuff.BuffList.Add((uint)StoryBuffs[CurrentStage - 1]); diff --git a/GameServer/Game/Lineup/LineupManager.cs b/GameServer/Game/Lineup/LineupManager.cs index a6d99ebf..6bcb9de3 100644 --- a/GameServer/Game/Lineup/LineupManager.cs +++ b/GameServer/Game/Lineup/LineupManager.cs @@ -293,7 +293,7 @@ namespace EggLink.DanhengServer.Game.Lineup public void ReplaceLineup(Proto.ReplaceLineupCsReq req) { - if (req.ExtraLineupType == Proto.ExtraLineupType.LineupChallenge || req.ExtraLineupType == Proto.ExtraLineupType.LineupChallenge2) + if (req.ExtraLineupType != Proto.ExtraLineupType.LineupNone) { LineupData.CurExtraLineup = (int)req.ExtraLineupType + 10; if (!LineupData.Lineups.ContainsKey(LineupData.CurExtraLineup))