feat: challenge peak saving

This commit is contained in:
StopWuyu
2025-08-16 21:13:33 +08:00
parent 412d63830d
commit b5dac65fec
15 changed files with 343 additions and 63 deletions

View File

@@ -14,6 +14,7 @@ public class ChallengeData : BaseDatabaseDataHelper
[SugarColumn(IsJson = true)] public Dictionary<int, ChallengeGroupReward> TakenRewards { get; set; } = new();
[SugarColumn(IsJson = true)] public Dictionary<int, ChallengePeakLevelData> PeakLevelDatas { get; set; } = new();
[SugarColumn(IsJson = true)] public Dictionary<int, ChallengePeakBossLevelData> PeakBossLevelDatas { get; set; } = new();
public void Delete(int challengeId)
{
@@ -24,8 +25,21 @@ public class ChallengeData : BaseDatabaseDataHelper
public class ChallengePeakLevelData
{
public int LevelId { get; set; }
public uint RoundCnt { get; set; }
public uint PeakStar { get; set; }
public List<uint> BaseAvatarList { get; set; } = [];
public List<uint> FinishedTargetList { get; set; } = [];
}
public class ChallengePeakBossLevelData
{
public int LevelId { get; set; }
public uint BuffId { get; set; }
public bool IsHard { get; set; }
public uint RoundCnt { get; set; }
public uint PeakStar { get; set; }
public List<uint> BaseAvatarList { get; set; } = [];
public List<uint> FinishedTargetList { get; set; } = [];
}
public class ChallengeHistoryData(int uid, int challengeId)

View File

@@ -19,6 +19,7 @@ public class ChallengePeakInstance(PlayerInstance player, ChallengeDataPb data)
#region Properties
public ChallengePeakConfigExcel Config { get; } = GameData.ChallengePeakConfigData[(int)data.Peak.CurrentPeakLevelId];
public List<int> AllBattleTargets { get; } = [];
public bool IsWin { get; private set; }
#endregion
@@ -63,14 +64,22 @@ public class ChallengePeakInstance(PlayerInstance player, ChallengeDataPb data)
{
var excel = GameData.BattleTargetConfigData.GetValueOrDefault(Config.BossExcel.HardTarget);
if (excel != null)
{
battle.AddBattleTarget(5, excel.ID, 0, excel.TargetParam);
AllBattleTargets.Add(excel.ID);
}
}
foreach (var targetId in Config.NormalTargetList)
else
{
var excel = GameData.BattleTargetConfigData.GetValueOrDefault(targetId);
if (excel != null)
battle.AddBattleTarget(5, excel.ID, 0, excel.TargetParam);
foreach (var targetId in Config.NormalTargetList)
{
var excel = GameData.BattleTargetConfigData.GetValueOrDefault(targetId);
if (excel != null)
{
battle.AddBattleTarget(5, excel.ID, 0, excel.TargetParam);
AllBattleTargets.Add(excel.ID);
}
}
}
}
@@ -85,12 +94,17 @@ public class ChallengePeakInstance(PlayerInstance player, ChallengeDataPb data)
if (monsters == 0)
{
Data.Peak.CurStatus = (int)ChallengeStatus.ChallengeFinish;
Data.Peak.Stars = CalculateStars(req);
var res = CalculateStars(req);
Data.Peak.Stars = res.Item1;
Data.Peak.RoundCnt = req.Stt.RoundCnt;
IsWin = true;
await Player.SendPacket(new PacketChallengePeakSettleScNotify(this, res.Item2));
await Player.SendPacket(new PacketChallengePeakSettleScNotify(this));
// Call MissionManager
await Player.MissionManager!.HandleFinishType(MissionFinishTypeEnum.ChallengeFinish, this);
await Player.ChallengePeakManager!.SaveHistory(this, res.Item2);
}
// Set saved technique points (This will be restored if the player resets the challenge)
@@ -110,27 +124,38 @@ public class ChallengePeakInstance(PlayerInstance player, ChallengeDataPb data)
Data.Peak.CurStatus = (int)ChallengeStatus.ChallengeFailed;
// Send challenge result data
await Player.SendPacket(new PacketChallengePeakSettleScNotify(this));
await Player.SendPacket(new PacketChallengePeakSettleScNotify(this, []));
break;
}
}
public uint CalculateStars(PVEBattleResultCsReq req)
public (uint, List<uint>) CalculateStars(PVEBattleResultCsReq req)
{
var targets = Config.NormalTargetList;
var targets = AllBattleTargets;
var stars = 0u;
List<uint> finishedIds = [];
foreach (var targetId in targets)
{
var target = req.Stt.BattleTargetInfo[5].BattleTargetList_.FirstOrDefault(x => x.Id == targetId);
if (target == null) continue;
var excel = GameData.BattleTargetConfigData.GetValueOrDefault(targetId);
if (excel == null) continue;
if (target.Progress <= target.TotalProgress)
stars += 1u << targets.IndexOf(targetId);
if (target.Progress <= excel.TargetParam)
{
stars += 1u;
finishedIds.Add((uint)targetId);
}
}
return Math.Min(stars, 7);
if (Data.Peak.IsHard && Config.BossExcel != null)
{
stars = 3;
}
return (Math.Min(stars, 3), finishedIds);
}
#endregion

View File

@@ -8,9 +8,7 @@ using EggLink.DanhengServer.GameServer.Server.Packet.Send.Challenge;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.ChallengePeak;
using EggLink.DanhengServer.Proto;
using EggLink.DanhengServer.Proto.ServerSide;
using System.Drawing.Drawing2D;
using EggLink.DanhengServer.Util;
using ChallengePeakInfo = EggLink.DanhengServer.Proto.ChallengePeakInfo;
using ChallengePeakLevelInfo = EggLink.DanhengServer.Proto.ChallengePeakLevelInfo;
namespace EggLink.DanhengServer.GameServer.Game.ChallengePeak;
@@ -22,31 +20,37 @@ namespace EggLink.DanhengServer.GameServer.Game.ChallengePeak;
/// <see cref="EggLink.DanhengServer.GameServer.Game.Challenge.ChallengeManager"/>
public class ChallengePeakManager(PlayerInstance player) : BasePlayerManager(player)
{
public ChallengePeakInfo GetChallengePeakInfo(int groupId)
public bool BossIsHard { get; set; } = true;
public ChallengePeakLevelInfo GetChallengePeakInfo(int groupId)
{
var proto = new ChallengePeakInfo
var proto = new ChallengePeakLevelInfo
{
CurPeakGroupId = (uint)groupId,
PeakGroupId = (uint)groupId,
};
var data = GameData.ChallengePeakGroupConfigData.GetValueOrDefault(groupId);
if (data == null) return proto;
var starNum = 0;
foreach (var levelId in data.PreLevelIDList)
{
var levelData = GameData.ChallengePeakConfigData.GetValueOrDefault(levelId);
if (levelData == null) continue;
var levelProto = new ChallengePeakLevelInfo
var levelProto = new ChallengePeakPreLevel
{
PeakLevelId = (uint)levelId,
IsRead = true
IsFinished = true
};
if (Player.ChallengeManager!.ChallengeData.PeakLevelDatas.TryGetValue(levelId, out var levelPbData))
{
levelProto.PeakStar = levelPbData.PeakStar;
levelProto.PeakLevelLineup.AddRange(levelPbData.BaseAvatarList);
starNum += (int)levelPbData.PeakStar;
levelProto.PeakRoundCount = levelPbData.RoundCnt;
levelProto.PeakLevelAvatarIdList.AddRange(levelPbData.BaseAvatarList);
levelProto.PeakTargetList.AddRange(levelPbData.FinishedTargetList);
foreach (var avatarId in levelPbData.BaseAvatarList)
{
var avatar = Player.AvatarManager!.GetFormalAvatar((int)avatarId);
@@ -55,11 +59,15 @@ public class ChallengePeakManager(PlayerInstance player) : BasePlayerManager(pla
levelProto.PeakAvatarInfoList.Add(avatar.ToPeakAvatarProto());
proto.PeakAvatarInfoList.Add(avatar.ToPeakAvatarProto());
}
proto.FinishedPreNum++;
}
proto.PeakLevelInfoList.Add(levelProto);
proto.PeakPreLevelInfoList.Add(levelProto);
}
proto.PreLevelStars = (uint)starNum;
// boss
var bossLevelId = data.BossLevelID;
if (bossLevelId <= 0) return proto;
@@ -67,26 +75,67 @@ public class ChallengePeakManager(PlayerInstance player) : BasePlayerManager(pla
var bossLevelData = GameData.ChallengePeakBossConfigData.GetValueOrDefault(bossLevelId);
if (bossLevelData == null) return proto;
var bossProto = new ChallengePeakLevelInfo
var bossProto = new ChallengePeakBossLevel
{
PeakLevelId = (uint)bossLevelId,
IsRead = true
IsFinished = true,
PeakEasyBoss = new ChallengePeakBossInfo(),
PeakHardBoss = new ChallengePeakBossInfo()
};
if (Player.ChallengeManager!.ChallengeData.PeakLevelDatas.TryGetValue(bossLevelId, out var bossPbData))
HashSet<uint> targetIds = [];
HashSet<uint> avatarIds = [];
if (Player.ChallengeManager!.ChallengeData.PeakBossLevelDatas.TryGetValue(bossLevelId << 2 & 0, out var bossPbData)) // easy (is hard = 0)
{
bossProto.PeakStar = bossPbData.PeakStar;
bossProto.PeakLevelLineup.AddRange(bossPbData.BaseAvatarList);
bossProto.PeakEasyBoss.PeakLevelAvatarIdList.AddRange(bossPbData.BaseAvatarList);
bossProto.PeakEasyBoss.BossDisplayAvatarIdList.AddRange(bossPbData.BaseAvatarList);
bossProto.PeakEasyBoss.LeastRoundsCount = bossPbData.RoundCnt;
bossProto.PeakEasyBoss.IsFinished = true;
bossProto.PeakEasyBoss.BuffId = bossPbData.BuffId;
foreach (var targetId in bossPbData.FinishedTargetList)
{
targetIds.Add(targetId);
}
foreach (var avatarId in bossPbData.BaseAvatarList)
{
var avatar = Player.AvatarManager!.GetFormalAvatar((int)avatarId);
if (avatar == null) continue;
bossProto.PeakAvatarInfoList.Add(avatar.ToPeakAvatarProto());
proto.PeakAvatarInfoList.Add(avatar.ToPeakAvatarProto());
avatarIds.Add(avatarId);
}
}
proto.PeakLevelInfoList.Add(bossProto);
if (Player.ChallengeManager!.ChallengeData.PeakBossLevelDatas.TryGetValue(bossLevelId << 2 | 1, out var bossHardPbData)) // easy (is hard = 1)
{
bossProto.IsUltraBossWin = true;
bossProto.PeakHardBoss.PeakLevelAvatarIdList.AddRange(bossHardPbData.BaseAvatarList);
bossProto.PeakHardBoss.BossDisplayAvatarIdList.AddRange(bossHardPbData.BaseAvatarList);
bossProto.PeakHardBoss.LeastRoundsCount = bossHardPbData.RoundCnt;
bossProto.PeakHardBoss.IsFinished = true;
bossProto.PeakHardBoss.BuffId = bossHardPbData.BuffId;
foreach (var targetId in bossHardPbData.FinishedTargetList)
{
targetIds.Add(targetId);
}
foreach (var avatarId in bossHardPbData.BaseAvatarList)
{
avatarIds.Add(avatarId);
}
}
foreach (var avatarId in avatarIds)
{
var avatar = Player.AvatarManager!.GetFormalAvatar((int)avatarId);
if (avatar == null) continue;
proto.PeakAvatarInfoList.Add(avatar.ToPeakAvatarProto());
}
bossProto.PeakTargetList.AddRange(targetIds);
proto.PeakBossLevel = bossProto;
return proto;
}
@@ -98,7 +147,7 @@ public class ChallengePeakManager(PlayerInstance player) : BasePlayerManager(pla
{
List<uint> avatarIds = [];
foreach (var avatarId in lineup.PeakLevelLineup.ToList())
foreach (var avatarId in lineup.PeakLevelAvatarIdList.ToList())
{
var avatar = Player.AvatarManager!.GetFormalAvatar((int)avatarId);
if (avatar != null)
@@ -123,6 +172,64 @@ public class ChallengePeakManager(PlayerInstance player) : BasePlayerManager(pla
await Player.SendPacket(new PacketChallengePeakGroupDataUpdateScNotify(GetChallengePeakInfo(groupId)));
}
public async ValueTask SaveHistory(ChallengePeakInstance inst, List<uint> targetIds)
{
if (inst.Config.BossExcel != null)
{
// is hard
var isHard = inst.Data.Peak.IsHard;
var levelId = (int)inst.Data.Peak.CurrentPeakLevelId << 2 | (isHard ? 1 : 0);
// get old data
if (Player.ChallengeManager!.ChallengeData.PeakBossLevelDatas.TryGetValue(levelId, out var oldData) &&
oldData.FinishedTargetList.Count > targetIds.Count && oldData.RoundCnt < inst.Data.Peak.RoundCnt)
{
// better data already exists, do not overwrite
return;
}
// Save boss data
var data = new ChallengePeakBossLevelData
{
LevelId = (int)inst.Data.Peak.CurrentPeakLevelId,
IsHard = isHard,
BaseAvatarList = Player.LineupManager!.GetCurLineup()?.BaseAvatars?.Select(x => (uint)x.BaseAvatarId).ToList() ?? [],
RoundCnt = inst.Data.Peak.RoundCnt,
BuffId = inst.Data.Peak.Buffs.FirstOrDefault(),
FinishedTargetList = targetIds,
PeakStar = (uint)targetIds.Count
};
Player.ChallengeManager!.ChallengeData.PeakBossLevelDatas[levelId] = data;
}
else
{
// Save level data
var levelId = (int)inst.Data.Peak.CurrentPeakLevelId;
// get old data
if (Player.ChallengeManager!.ChallengeData.PeakLevelDatas.TryGetValue(levelId, out var oldData) &&
oldData.FinishedTargetList.Count > targetIds.Count && oldData.RoundCnt < inst.Data.Peak.RoundCnt)
{
// better data already exists, do not overwrite
return;
}
var data = new ChallengePeakLevelData
{
LevelId = levelId,
BaseAvatarList = Player.LineupManager!.GetCurLineup()?.BaseAvatars?.Select(x => (uint)x.BaseAvatarId).ToList() ?? [],
RoundCnt = inst.Data.Peak.RoundCnt,
FinishedTargetList = targetIds,
PeakStar = (uint)targetIds.Count
};
Player.ChallengeManager!.ChallengeData.PeakLevelDatas[levelId] = data;
}
await Player.SendPacket(new PacketChallengePeakGroupDataUpdateScNotify(GetChallengePeakInfo((int)inst.Data.Peak.CurrentPeakGroupId)));
}
public async ValueTask StartChallenge(int levelId, uint buffId, List<int> avatarIdList)
{
// Get challenge excel
@@ -164,7 +271,7 @@ public class ChallengePeakManager(PlayerInstance player) : BasePlayerManager(pla
lineup.Mp = 5; // Max Mp
// Make sure this lineup has avatars set
if (Player.AvatarManager!.AvatarData!.FormalAvatars.Count == 0)
if (Player.AvatarManager!.AvatarData.FormalAvatars.Count == 0)
{
await Player.SendPacket(new PacketStartChallengePeakScRsp(Retcode.RetChallengeLineupEmpty));
return;
@@ -182,12 +289,17 @@ public class ChallengePeakManager(PlayerInstance player) : BasePlayerManager(pla
{
Peak = new ChallengePeakDataPb
{
CurrentPeakGroupId = (uint)(GameData.ChallengePeakGroupConfigData.Values
.FirstOrDefault(x => x.BossLevelID == levelId || x.PreLevelIDList.Contains(levelId))?.ID ?? 1),
CurrentPeakLevelId = (uint)levelId,
CurrentExtraLineup = ChallengeLineupTypePb.Challenge1,
CurStatus = 1
}
};
if (excel.BossExcel != null)
data.Peak.IsHard = BossIsHard;
if (buffId > 0)
{
data.Peak.Buffs.Add(buffId);

View File

@@ -0,0 +1,18 @@
using EggLink.DanhengServer.GameServer.Server.Packet.Send.ChallengePeak;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.ChallengePeak;
[Opcode(CmdIds.SetChallengePeakBossHardModeCsReq)]
public class HandlerSetChallengePeakBossHardModeCsReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = SetChallengePeakBossHardModeCsReq.Parser.ParseFrom(data);
connection.Player!.ChallengePeakManager!.BossIsHard = req.IsHard;
await connection.SendPacket(new PacketSetChallengePeakBossHardModeScRsp(req.PeakGroupId, req.IsHard));
}
}

View File

@@ -10,7 +10,7 @@ public class HandlerSetChallengePeakMobLineupAvatarCsReq : Handler
{
var req = SetChallengePeakMobLineupAvatarCsReq.Parser.ParseFrom(data);
await connection.Player!.ChallengePeakManager!.SetLineupAvatars((int)req.CurPeakGroupId, req.LineupList.ToList());
await connection.Player!.ChallengePeakManager!.SetLineupAvatars((int)req.PeakGroupId, req.LineupList.ToList());
await connection.SendPacket(CmdIds.SetChallengePeakMobLineupAvatarScRsp);
}

View File

@@ -11,6 +11,6 @@ public class HandlerStartChallengePeakCsReq : Handler
var req = StartChallengePeakCsReq.Parser.ParseFrom(data);
await connection.Player!.ChallengePeakManager!.StartChallenge((int)req.PeakLevelId, req.PeakBossBuff,
req.PeakLevelLineup.Select(x => (int)x).ToList());
req.PeakLevelAvatarIdList.Select(x => (int)x).ToList());
}
}

View File

@@ -20,8 +20,8 @@ public class PacketChallengeBossPhaseSettleNotify : BasePacket
Star = challenge.Data.Boss.Stars,
Phase = challenge.Data.Boss.CurrentStage,
IsReward = true,
IsSecondHalf = challenge.Data.Boss.CurrentStage == challenge.Config.StageNum,
PageType = 1
ShowRemainAction = challenge.Data.Boss.CurrentStage == challenge.Config.StageNum,
CurChallengeType = 1
};
proto.BattleTargetList.AddRange(targetLists?.BattleTargetList_ ?? []);

View File

@@ -5,7 +5,7 @@ namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.ChallengePeak;
public class PacketChallengePeakGroupDataUpdateScNotify : BasePacket
{
public PacketChallengePeakGroupDataUpdateScNotify(ChallengePeakInfo info) : base(CmdIds.ChallengePeakGroupDataUpdateScNotify)
public PacketChallengePeakGroupDataUpdateScNotify(ChallengePeakLevelInfo info) : base(CmdIds.ChallengePeakGroupDataUpdateScNotify)
{
var proto = new ChallengePeakGroupDataUpdateScNotify
{

View File

@@ -6,13 +6,15 @@ namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.ChallengePeak;
public class PacketChallengePeakSettleScNotify : BasePacket
{
public PacketChallengePeakSettleScNotify(ChallengePeakInstance inst) : base(CmdIds.ChallengePeakSettleScNotify)
public PacketChallengePeakSettleScNotify(ChallengePeakInstance inst, List<uint> targetIdList) : base(CmdIds.ChallengePeakSettleScNotify)
{
var proto = new ChallengePeakSettleScNotify
{
PeakStar = inst.Data.Peak.Stars,
PeakRoundCount = inst.Data.Peak.RoundCnt,
IsWin = inst.IsWin,
PeakLevelId = inst.Data.Peak.CurrentPeakLevelId
PeakLevelId = inst.Data.Peak.CurrentPeakLevelId,
PeakTargetList = { targetIdList },
IsUltraBossWin = inst is { IsWin: true, Config.BossExcel: not null } && inst.Data.Peak.IsHard
};
SetData(proto);

View File

@@ -11,12 +11,12 @@ public class PacketGetChallengePeakDataScRsp : BasePacket
{
var proto = new GetChallengePeakDataScRsp
{
FHODLMICBGP = 1
CurPeakGroupId = 1
};
foreach (var groupId in GameData.ChallengePeakGroupConfigData.Keys)
{
proto.ChallengePeakList.Add(player.ChallengePeakManager!.GetChallengePeakInfo(groupId));
proto.ChallengePeakLevelList.Add(player.ChallengePeakManager!.GetChallengePeakInfo(groupId));
}
SetData(proto);

View File

@@ -13,10 +13,10 @@ public class PacketGetCurChallengePeakScRsp : BasePacket
if (player.ChallengeManager!.ChallengeInstance is ChallengePeakInstance peak)
{
proto.IsRead = true;
proto.IsFinished = true;
proto.PeakLevelId = peak.Data.Peak.CurrentPeakLevelId;
proto.PeakBossBuff = peak.Data.Peak.Buffs.FirstOrDefault(0u);
proto.PeakStar = peak.Data.Peak.Stars;
proto.PeakRoundCount = peak.Data.Peak.RoundCnt;
}
SetData(proto);

View File

@@ -0,0 +1,18 @@
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.ChallengePeak;
public class PacketSetChallengePeakBossHardModeScRsp : BasePacket
{
public PacketSetChallengePeakBossHardModeScRsp(uint groupId, bool isHard) : base(CmdIds.SetChallengePeakBossHardModeScRsp)
{
var proto = new SetChallengePeakBossHardModeScRsp
{
IsHard = isHard,
PeakGroupId = groupId
};
SetData(proto);
}
}

View File

@@ -15,7 +15,21 @@ public class PacketTrainPartyBuildDiyScRsp : BasePacket
}
: new TrainPartyBuildDiyScRsp
{
AreaId = (uint)area.AreaId
AreaId = (uint)area.AreaId,
DynamicInfo = { area.DynamicInfo.Select(x => new AreaDynamicInfo
{
DiceSlotId = (uint)x.Key,
DiyDynamicId = (uint)x.Value
}) },
//FFLPKLLDHLM = {new CIKOHJNAGON // TODO update
//{
// AreaId = (uint)area.AreaId,
// KCJBMKJLFBA = area.DynamicInfo.Select(x => new AreaDynamicInfo
// {
// DiceSlotId = (uint)x.Key,
// DiyDynamicId = (uint)x.Value
// }).First(),
//}}
};
SetData(proto);

View File

@@ -44,20 +44,21 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
"IAEoDRIRCglDdXJTdGF0dXMYBSABKA0SDwoHU2F2ZWRNcBgGIAEoDRIyChJD",
"dXJyZW50RXh0cmFMaW5ldXAYByABKA4yFi5DaGFsbGVuZ2VMaW5ldXBUeXBl",
"UGISDQoFU3RhcnMYCCABKA0SEwoLU2NvcmVTdGFnZTEYCSABKA0SEwoLU2Nv",
"cmVTdGFnZTIYCiABKA0SDQoFQnVmZnMYCyADKA0i8wEKE0NoYWxsZW5nZVBl",
"YWtEYXRhUGISGgoSQ3VycmVudFBlYWtMZXZlbElkGAIgASgNEg0KBUJ1ZmZz",
"GAMgAygNEhEKCUN1clN0YXR1cxgEIAEoDRIcCghTdGFydFBvcxgFIAEoCzIK",
"LlZlY3RvcjNQYhIcCghTdGFydFJvdBgGIAEoCzIKLlZlY3RvcjNQYhIPCgdT",
"YXZlZE1wGAcgASgNEg0KBVN0YXJzGAggASgNEjIKEkN1cnJlbnRFeHRyYUxp",
"bmV1cBgJIAEoDjIWLkNoYWxsZW5nZUxpbmV1cFR5cGVQYhIOCgZJc0hhcmQY",
"CiABKAgiwQEKD0NoYWxsZW5nZURhdGFQYhIoCgZtZW1vcnkYASABKAsyFi5D",
"aGFsbGVuZ2VNZW1vcnlEYXRhUGJIABImCgVzdG9yeRgCIAEoCzIVLkNoYWxs",
"ZW5nZVN0b3J5RGF0YVBiSAASJAoEYm9zcxgDIAEoCzIULkNoYWxsZW5nZUJv",
"c3NEYXRhUGJIABIkCgRwZWFrGAQgASgLMhQuQ2hhbGxlbmdlUGVha0RhdGFQ",
"YkgAQhAKDmNoYWxsZW5nZV90eXBlKlEKFUNoYWxsZW5nZUxpbmV1cFR5cGVQ",
"YhIICgROb25lEAASDgoKQ2hhbGxlbmdlMRABEg4KCkNoYWxsZW5nZTIQAxIO",
"CgpDaGFsbGVuZ2UzEARCKaoCJkVnZ0xpbmsuRGFuaGVuZ1NlcnZlci5Qcm90",
"by5TZXJ2ZXJTaWRlYgZwcm90bzM="));
"cmVTdGFnZTIYCiABKA0SDQoFQnVmZnMYCyADKA0ioQIKE0NoYWxsZW5nZVBl",
"YWtEYXRhUGISGgoSQ3VycmVudFBlYWtHcm91cElkGAEgASgNEhoKEkN1cnJl",
"bnRQZWFrTGV2ZWxJZBgCIAEoDRINCgVCdWZmcxgDIAMoDRIRCglDdXJTdGF0",
"dXMYBCABKA0SHAoIU3RhcnRQb3MYBSABKAsyCi5WZWN0b3IzUGISHAoIU3Rh",
"cnRSb3QYBiABKAsyCi5WZWN0b3IzUGISDwoHU2F2ZWRNcBgHIAEoDRINCgVT",
"dGFycxgIIAEoDRIyChJDdXJyZW50RXh0cmFMaW5ldXAYCSABKA4yFi5DaGFs",
"bGVuZ2VMaW5ldXBUeXBlUGISDgoGSXNIYXJkGAogASgIEhAKCFJvdW5kQ250",
"GAsgASgNIsEBCg9DaGFsbGVuZ2VEYXRhUGISKAoGbWVtb3J5GAEgASgLMhYu",
"Q2hhbGxlbmdlTWVtb3J5RGF0YVBiSAASJgoFc3RvcnkYAiABKAsyFS5DaGFs",
"bGVuZ2VTdG9yeURhdGFQYkgAEiQKBGJvc3MYAyABKAsyFC5DaGFsbGVuZ2VC",
"b3NzRGF0YVBiSAASJAoEcGVhaxgEIAEoCzIULkNoYWxsZW5nZVBlYWtEYXRh",
"UGJIAEIQCg5jaGFsbGVuZ2VfdHlwZSpRChVDaGFsbGVuZ2VMaW5ldXBUeXBl",
"UGISCAoETm9uZRAAEg4KCkNoYWxsZW5nZTEQARIOCgpDaGFsbGVuZ2UyEAMS",
"DgoKQ2hhbGxlbmdlMxAEQimqAiZFZ2dMaW5rLkRhbmhlbmdTZXJ2ZXIuUHJv",
"dG8uU2VydmVyU2lkZWIGcHJvdG8z"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::EggLink.DanhengServer.Proto.ServerSide.ChallengeLineupTypePb), }, null, new pbr::GeneratedClrTypeInfo[] {
@@ -65,7 +66,7 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.ServerSide.ChallengeMemoryDataPb), global::EggLink.DanhengServer.Proto.ServerSide.ChallengeMemoryDataPb.Parser, new[]{ "ChallengeMazeId", "StartPos", "StartRot", "CurrentStage", "CurStatus", "DeadAvatarNum", "SavedMp", "CurrentExtraLineup", "RoundsLeft", "Stars" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.ServerSide.ChallengeStoryDataPb), global::EggLink.DanhengServer.Proto.ServerSide.ChallengeStoryDataPb.Parser, new[]{ "ChallengeMazeId", "StartPos", "StartRot", "CurrentStage", "CurStatus", "SavedMp", "CurrentExtraLineup", "Stars", "ScoreStage1", "ScoreStage2", "Buffs" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.ServerSide.ChallengeBossDataPb), global::EggLink.DanhengServer.Proto.ServerSide.ChallengeBossDataPb.Parser, new[]{ "ChallengeMazeId", "StartPos", "StartRot", "CurrentStage", "CurStatus", "SavedMp", "CurrentExtraLineup", "Stars", "ScoreStage1", "ScoreStage2", "Buffs" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.ServerSide.ChallengePeakDataPb), global::EggLink.DanhengServer.Proto.ServerSide.ChallengePeakDataPb.Parser, new[]{ "CurrentPeakLevelId", "Buffs", "CurStatus", "StartPos", "StartRot", "SavedMp", "Stars", "CurrentExtraLineup", "IsHard" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.ServerSide.ChallengePeakDataPb), global::EggLink.DanhengServer.Proto.ServerSide.ChallengePeakDataPb.Parser, new[]{ "CurrentPeakGroupId", "CurrentPeakLevelId", "Buffs", "CurStatus", "StartPos", "StartRot", "SavedMp", "Stars", "CurrentExtraLineup", "IsHard", "RoundCnt" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.ServerSide.ChallengeDataPb), global::EggLink.DanhengServer.Proto.ServerSide.ChallengeDataPb.Parser, new[]{ "Memory", "Story", "Boss", "Peak" }, new[]{ "ChallengeType" }, null, null, null)
}));
}
@@ -2061,6 +2062,7 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public ChallengePeakDataPb(ChallengePeakDataPb other) : this() {
currentPeakGroupId_ = other.currentPeakGroupId_;
currentPeakLevelId_ = other.currentPeakLevelId_;
buffs_ = other.buffs_.Clone();
curStatus_ = other.curStatus_;
@@ -2070,6 +2072,7 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
stars_ = other.stars_;
currentExtraLineup_ = other.currentExtraLineup_;
isHard_ = other.isHard_;
roundCnt_ = other.roundCnt_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@@ -2079,6 +2082,18 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
return new ChallengePeakDataPb(this);
}
/// <summary>Field number for the "CurrentPeakGroupId" field.</summary>
public const int CurrentPeakGroupIdFieldNumber = 1;
private uint currentPeakGroupId_;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public uint CurrentPeakGroupId {
get { return currentPeakGroupId_; }
set {
currentPeakGroupId_ = value;
}
}
/// <summary>Field number for the "CurrentPeakLevelId" field.</summary>
public const int CurrentPeakLevelIdFieldNumber = 2;
private uint currentPeakLevelId_;
@@ -2186,6 +2201,18 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
}
}
/// <summary>Field number for the "RoundCnt" field.</summary>
public const int RoundCntFieldNumber = 11;
private uint roundCnt_;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public uint RoundCnt {
get { return roundCnt_; }
set {
roundCnt_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
@@ -2201,6 +2228,7 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
if (ReferenceEquals(other, this)) {
return true;
}
if (CurrentPeakGroupId != other.CurrentPeakGroupId) return false;
if (CurrentPeakLevelId != other.CurrentPeakLevelId) return false;
if(!buffs_.Equals(other.buffs_)) return false;
if (CurStatus != other.CurStatus) return false;
@@ -2210,6 +2238,7 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
if (Stars != other.Stars) return false;
if (CurrentExtraLineup != other.CurrentExtraLineup) return false;
if (IsHard != other.IsHard) return false;
if (RoundCnt != other.RoundCnt) return false;
return Equals(_unknownFields, other._unknownFields);
}
@@ -2217,6 +2246,7 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override int GetHashCode() {
int hash = 1;
if (CurrentPeakGroupId != 0) hash ^= CurrentPeakGroupId.GetHashCode();
if (CurrentPeakLevelId != 0) hash ^= CurrentPeakLevelId.GetHashCode();
hash ^= buffs_.GetHashCode();
if (CurStatus != 0) hash ^= CurStatus.GetHashCode();
@@ -2226,6 +2256,7 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
if (Stars != 0) hash ^= Stars.GetHashCode();
if (CurrentExtraLineup != global::EggLink.DanhengServer.Proto.ServerSide.ChallengeLineupTypePb.None) hash ^= CurrentExtraLineup.GetHashCode();
if (IsHard != false) hash ^= IsHard.GetHashCode();
if (RoundCnt != 0) hash ^= RoundCnt.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@@ -2244,6 +2275,10 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
output.WriteRawMessage(this);
#else
if (CurrentPeakGroupId != 0) {
output.WriteRawTag(8);
output.WriteUInt32(CurrentPeakGroupId);
}
if (CurrentPeakLevelId != 0) {
output.WriteRawTag(16);
output.WriteUInt32(CurrentPeakLevelId);
@@ -2277,6 +2312,10 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
output.WriteRawTag(80);
output.WriteBool(IsHard);
}
if (RoundCnt != 0) {
output.WriteRawTag(88);
output.WriteUInt32(RoundCnt);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@@ -2287,6 +2326,10 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
if (CurrentPeakGroupId != 0) {
output.WriteRawTag(8);
output.WriteUInt32(CurrentPeakGroupId);
}
if (CurrentPeakLevelId != 0) {
output.WriteRawTag(16);
output.WriteUInt32(CurrentPeakLevelId);
@@ -2320,6 +2363,10 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
output.WriteRawTag(80);
output.WriteBool(IsHard);
}
if (RoundCnt != 0) {
output.WriteRawTag(88);
output.WriteUInt32(RoundCnt);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@@ -2330,6 +2377,9 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public int CalculateSize() {
int size = 0;
if (CurrentPeakGroupId != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(CurrentPeakGroupId);
}
if (CurrentPeakLevelId != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(CurrentPeakLevelId);
}
@@ -2355,6 +2405,9 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
if (IsHard != false) {
size += 1 + 1;
}
if (RoundCnt != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(RoundCnt);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@@ -2367,6 +2420,9 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
if (other == null) {
return;
}
if (other.CurrentPeakGroupId != 0) {
CurrentPeakGroupId = other.CurrentPeakGroupId;
}
if (other.CurrentPeakLevelId != 0) {
CurrentPeakLevelId = other.CurrentPeakLevelId;
}
@@ -2398,6 +2454,9 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
if (other.IsHard != false) {
IsHard = other.IsHard;
}
if (other.RoundCnt != 0) {
RoundCnt = other.RoundCnt;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@@ -2413,6 +2472,10 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
break;
case 8: {
CurrentPeakGroupId = input.ReadUInt32();
break;
}
case 16: {
CurrentPeakLevelId = input.ReadUInt32();
break;
@@ -2456,6 +2519,10 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
IsHard = input.ReadBool();
break;
}
case 88: {
RoundCnt = input.ReadUInt32();
break;
}
}
}
#endif
@@ -2471,6 +2538,10 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
break;
case 8: {
CurrentPeakGroupId = input.ReadUInt32();
break;
}
case 16: {
CurrentPeakLevelId = input.ReadUInt32();
break;
@@ -2514,6 +2585,10 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
IsHard = input.ReadBool();
break;
}
case 88: {
RoundCnt = input.ReadUInt32();
break;
}
}
}
}

View File

@@ -57,6 +57,7 @@ message ChallengeBossDataPb {
}
message ChallengePeakDataPb {
uint32 CurrentPeakGroupId = 1;
uint32 CurrentPeakLevelId = 2;
repeated uint32 Buffs = 3;
uint32 CurStatus = 4;
@@ -66,6 +67,7 @@ message ChallengePeakDataPb {
uint32 Stars = 8;
ChallengeLineupTypePb CurrentExtraLineup = 9;
bool IsHard = 10;
uint32 RoundCnt = 11;
}
message ChallengeDataPb {