Fix challenges error

This commit is contained in:
WatchAndyTW
2024-07-09 16:28:02 +08:00
parent 6a45a0d3a0
commit 961bc4e716
7 changed files with 95 additions and 28 deletions

View File

@@ -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);
}
}
}
}

View File

@@ -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<int, ChallengeMonsterInfo> 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

View File

@@ -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
{

View File

@@ -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;
}

View File

@@ -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));

View File

@@ -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<int> 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<int> 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);
}
}
}

View File

@@ -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);
}
}
}