mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-02 20:26:03 +08:00
feat: challenge peak saving
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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_ ?? []);
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user