diff --git a/Common/Data/Excel/FinishWayExcel.cs b/Common/Data/Excel/FinishWayExcel.cs index 15699f8a..eab7c7f8 100644 --- a/Common/Data/Excel/FinishWayExcel.cs +++ b/Common/Data/Excel/FinishWayExcel.cs @@ -5,7 +5,7 @@ using Newtonsoft.Json.Converters; namespace EggLink.DanhengServer.Data.Excel; -[ResourceEntity("FinishWay.json,FinishWayRogue.json,FinishWayEventMission.json,RogueDLCFinishWay.json", true)] +[ResourceEntity("FinishWay.json,FinishWayRogue.json,RogueDLCFinishWay.json", true)] public class FinishWayExcel : ExcelResource { public List ParamIntList { get; set; } = []; diff --git a/Common/Data/Excel/RogueBuffGroupExcel.cs b/Common/Data/Excel/RogueBuffGroupExcel.cs index e12be9f8..87f64015 100644 --- a/Common/Data/Excel/RogueBuffGroupExcel.cs +++ b/Common/Data/Excel/RogueBuffGroupExcel.cs @@ -7,9 +7,9 @@ namespace EggLink.DanhengServer.Data.Excel; [ResourceEntity("RogueBuffGroup.json")] public class RogueBuffGroupExcel : BaseRogueBuffGroupExcel { - [JsonProperty("IKOLKLEFCGO")] public int GroupID { get; set; } + [JsonProperty("GroupID")] public int GroupID { get; set; } - [JsonProperty("DKLEHCPFLFJ")] public List BuffTagList { get; set; } = []; + [JsonProperty("BuffTagList")] public List BuffTagList { get; set; } = []; public override int GetId() { diff --git a/Common/Data/Excel/RogueMiracleExcel.cs b/Common/Data/Excel/RogueMiracleExcel.cs index c7df3ecf..d9704844 100644 --- a/Common/Data/Excel/RogueMiracleExcel.cs +++ b/Common/Data/Excel/RogueMiracleExcel.cs @@ -20,7 +20,8 @@ public class RogueMiracleExcel : ExcelResource public override void AfterAllDone() { - MiracleName = GameData.RogueMiracleDisplayData[MiracleDisplayID].MiracleName; + if (MiracleDisplayID != 0) + MiracleName = GameData.RogueMiracleDisplayData[MiracleDisplayID].MiracleName; GameData.RogueMiracleData[MiracleID] = this; } } \ No newline at end of file diff --git a/Common/Data/Excel/RogueTournDifficultyCompExcel.cs b/Common/Data/Excel/RogueTournDifficultyCompExcel.cs deleted file mode 100644 index 74616a85..00000000 --- a/Common/Data/Excel/RogueTournDifficultyCompExcel.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace EggLink.DanhengServer.Data.Excel; - -[ResourceEntity("RogueTournDifficultyComp.json")] -public class RogueTournDifficultyCompExcel : ExcelResource -{ - public int DifficultyCompID { get; set; } - public int Level { get; set; } - - public override int GetId() - { - return DifficultyCompID; - } - - public override void Loaded() - { - GameData.RogueTournDifficultyCompData.TryAdd(DifficultyCompID, this); - } -} \ No newline at end of file diff --git a/Common/Data/GameData.cs b/Common/Data/GameData.cs index ddba0149..1a2129ed 100644 --- a/Common/Data/GameData.cs +++ b/Common/Data/GameData.cs @@ -283,9 +283,6 @@ public static class GameData public static Dictionary RogueTournHandbookMiracleData { get; private set; } = []; - public static Dictionary RogueTournDifficultyCompData { get; private set; } = - []; - public static Dictionary RogueTournRoomData { get; private set; } = []; public static Dictionary RogueTournDifficultyData { get; private set; } = []; diff --git a/Common/Enums/Mission/MissionFinishTypeEnum.cs b/Common/Enums/Mission/MissionFinishTypeEnum.cs index b284fa1e..65df5bd5 100644 --- a/Common/Enums/Mission/MissionFinishTypeEnum.cs +++ b/Common/Enums/Mission/MissionFinishTypeEnum.cs @@ -590,5 +590,21 @@ public enum MissionFinishTypeEnum TarotBookUnlockGivenStoryCnt = 300007, DestructPropId = 300008, TarotBookFinishInteraction = 300009, - TimeRewindPropStayInState = 300010 + TimeRewindPropStayInState = 300010, + RogueTournReachDivisionLevel = 310000, + RogueTournFinishCntByDifficultyDivision = 310001, + ChimeraFinishRound = 310002, + ChimeraFinishPhase = 310003, + ChimeraGetChimera = 310004, + ChimeraGetChimeraCnt = 310005, + ChimeraFinishWorkValue = 310006, + ChimeraReachRank = 310007, + RogueTournTitanGetTitanBless = 310008, + RogueTournFinishWithBuffCnt = 310009, + RogueTournFinishLayerWithLineupAvatarCnt = 310010, + RogueTournFinishWithTitanBless = 310011, + RogueTournTitanGetTitanBlessCnt = 310012, + RogueTournEnableSeasonTalent = 310013, + PropListStayInState = 310014, + ChimeraEndlessHighestWorkValue = 310015 } \ No newline at end of file diff --git a/Common/Enums/Scene/ChestTypeEnum.cs b/Common/Enums/Scene/ChestTypeEnum.cs index 1f332c2a..5088ac92 100644 --- a/Common/Enums/Scene/ChestTypeEnum.cs +++ b/Common/Enums/Scene/ChestTypeEnum.cs @@ -42,6 +42,7 @@ public enum ChestTypeEnum CHEST_PUZZLE_INSECT_SPECIMEN = 227, CHEST_PUZZLE_MASCOT = 228, CHEST_PUZZLE_SWITCH_HAND_COIN = 229, + CHEST_PUZZLE_GRAVITYBALL = 230, CHEST_SPECIAL_HIDDEN = 301, CHEST_DIGGING = 302, CHEST_NORMAL_CHALLENGE = 401, diff --git a/GameServer/Game/Battle/BattleManager.cs b/GameServer/Game/Battle/BattleManager.cs index 600e77a1..3f8fe2d1 100644 --- a/GameServer/Game/Battle/BattleManager.cs +++ b/GameServer/Game/Battle/BattleManager.cs @@ -17,6 +17,7 @@ namespace EggLink.DanhengServer.GameServer.Game.Battle; public class BattleManager(PlayerInstance player) : BasePlayerManager(player) { + public StageConfigExcel? NextBattleStageConfig { get; set; } = null; public async ValueTask StartBattle(SceneCastSkillCsReq req, MazeSkill skill, List hitTargetEntityIdList) { if (Player.BattleInstance != null) return; @@ -144,6 +145,15 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player) WorldLevel = Player.Data.WorldLevel }; + if (NextBattleStageConfig != null) + { + battleInstance = new BattleInstance(Player, Player.LineupManager!.GetCurLineup()!, [NextBattleStageConfig]) + { + WorldLevel = Player.Data.WorldLevel, + }; + NextBattleStageConfig = null; + } + avatarList.AddRange(Player.LineupManager!.GetCurLineup()!.BaseAvatars! .Select(item => Player.SceneInstance!.AvatarInfo.Values.FirstOrDefault(x => @@ -220,6 +230,12 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player) } } + if (NextBattleStageConfig != null) + { + stageConfig = NextBattleStageConfig; + NextBattleStageConfig = null; + } + BattleInstance battleInstance = new(Player, Player.LineupManager!.GetCurLineup()!, [stageConfig]) { WorldLevel = Player.Data.WorldLevel, @@ -286,6 +302,15 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player) MappingInfoId = config.MappingInfoID }; + if (NextBattleStageConfig != null) + { + battleInstance = new BattleInstance(Player, Player.LineupManager!.GetCurLineup()!, [NextBattleStageConfig]) + { + WorldLevel = Player.Data.WorldLevel, + }; + NextBattleStageConfig = null; + } + var avatarList = Player.LineupManager!.GetCurLineup()!.BaseAvatars!.Select(item => Player.SceneInstance!.AvatarInfo.Values.FirstOrDefault(x => x.AvatarInfo.AvatarId == item.BaseAvatarId)) .OfType().ToList(); diff --git a/GameServer/Game/Rogue/Scene/Entity/RogueNpc.cs b/GameServer/Game/Rogue/Scene/Entity/RogueNpc.cs index ac22b3e7..b91f2eab 100644 --- a/GameServer/Game/Rogue/Scene/Entity/RogueNpc.cs +++ b/GameServer/Game/Rogue/Scene/Entity/RogueNpc.cs @@ -18,7 +18,7 @@ public class RogueNpc(SceneInstance scene, GroupInfo group, NpcInfo npcInfo) : E public async ValueTask FinishDialogue() { IsFinish = true; - await Scene.Player.SendPacket(new PacketSceneGroupRefreshScNotify(this)); + await Scene.Player.SendPacket(new PacketSceneGroupRefreshScNotify(Scene.Player, this)); } public override SceneEntityInfo ToProto() diff --git a/GameServer/Game/RogueTourn/RogueTournManager.cs b/GameServer/Game/RogueTourn/RogueTournManager.cs index 869745f4..83cecf67 100644 --- a/GameServer/Game/RogueTourn/RogueTournManager.cs +++ b/GameServer/Game/RogueTourn/RogueTournManager.cs @@ -112,9 +112,7 @@ public class RogueTournManager(PlayerInstance player) : BasePlayerManager(player public List ToDifficultyProtoList() { - return (from difficultyExcel in GameData.RogueTournDifficultyCompData.Values - select new RogueTournDifficultyInfo - { DifficultyId = (uint)difficultyExcel.DifficultyCompID, IsUnlocked = true }).ToList(); + return []; } public RogueTournExpInfo ToExpProto() diff --git a/GameServer/Game/Scene/Entity/EntityProp.cs b/GameServer/Game/Scene/Entity/EntityProp.cs index 148a4587..80a68d4b 100644 --- a/GameServer/Game/Scene/Entity/EntityProp.cs +++ b/GameServer/Game/Scene/Entity/EntityProp.cs @@ -73,7 +73,7 @@ public class EntityProp(SceneInstance scene, MazePropExcel excel, GroupInfo grou { //if (State == PropStateEnum.Open) return; // already open DO NOT CLOSE AGAIN State = state; - if (sendPacket) await Scene.Player.SendPacket(new PacketSceneGroupRefreshScNotify(this)); + if (sendPacket) await Scene.Player.SendPacket(new PacketSceneGroupRefreshScNotify(Scene.Player, this)); // save if (Group.SaveType == SaveTypeEnum.Reset) return; diff --git a/GameServer/Game/Scene/SceneEntityLoader.cs b/GameServer/Game/Scene/SceneEntityLoader.cs index 0db30bb4..b4933af8 100644 --- a/GameServer/Game/Scene/SceneEntityLoader.cs +++ b/GameServer/Game/Scene/SceneEntityLoader.cs @@ -85,7 +85,7 @@ public class SceneEntityLoader(SceneInstance scene) } if (refreshed && (addList.Count > 0 || removeList.Count > 0)) - await Scene.Player.SendPacket(new PacketSceneGroupRefreshScNotify(addList, removeList)); + await Scene.Player.SendPacket(new PacketSceneGroupRefreshScNotify(Scene.Player, addList, removeList)); } public virtual async ValueTask?> LoadGroup(GroupInfo info, bool forceLoad = false) @@ -194,7 +194,7 @@ public class SceneEntityLoader(SceneInstance scene) var entities = await LoadGroup(group, true); if (sendPacket && entities is { Count: > 0 }) - await Scene.Player.SendPacket(new PacketSceneGroupRefreshScNotify(entities)); + await Scene.Player.SendPacket(new PacketSceneGroupRefreshScNotify(Scene.Player, entities)); return entities; } @@ -217,7 +217,7 @@ public class SceneEntityLoader(SceneInstance scene) Scene.Groups.Remove(group.Id); - if (refreshed) await Scene.Player.SendPacket(new PacketSceneGroupRefreshScNotify(removeEntity: removeList)); + if (refreshed) await Scene.Player.SendPacket(new PacketSceneGroupRefreshScNotify(Scene.Player, removeEntity: removeList)); } public virtual async ValueTask LoadNpc(NpcInfo info, GroupInfo group, bool sendPacket = false) diff --git a/GameServer/Game/Scene/SceneInstance.cs b/GameServer/Game/Scene/SceneInstance.cs index 5d748f6b..5f5e17e8 100644 --- a/GameServer/Game/Scene/SceneInstance.cs +++ b/GameServer/Game/Scene/SceneInstance.cs @@ -297,7 +297,7 @@ public class SceneInstance var info = AvatarInfo.Values.ToList()[leaderAvatarSlot ?? 0]; LeaderEntityId = info.AvatarInfo.EntityId; if (sendPacket && !notSendPacket) - await Player.SendPacket(new PacketSceneGroupRefreshScNotify(addAvatar, removeAvatar)); + await Player.SendPacket(new PacketSceneGroupRefreshScNotify(Player, addAvatar, removeAvatar)); } public void SyncGroupInfo() @@ -320,7 +320,7 @@ public class SceneInstance entity.EntityID = ++LastEntityId; Entities.Add(entity.EntityID, entity); - if (sendPacket) await Player.SendPacket(new PacketSceneGroupRefreshScNotify(entity)); + if (sendPacket) await Player.SendPacket(new PacketSceneGroupRefreshScNotify(Player, entity)); } public async ValueTask AddSummonUnitEntity(EntitySummonUnit entity) @@ -340,7 +340,7 @@ public class SceneInstance await monster.RemoveBuff(sceneBuff.BuffId); } - await Player.SendPacket(new PacketSceneGroupRefreshScNotify(entity, SummonUnit)); + await Player.SendPacket(new PacketSceneGroupRefreshScNotify(Player, entity, SummonUnit)); SummonUnit = entity; } @@ -353,7 +353,7 @@ public class SceneInstance { Entities.Remove(monster.EntityID); - if (sendPacket) await Player.SendPacket(new PacketSceneGroupRefreshScNotify(null, monster)); + if (sendPacket) await Player.SendPacket(new PacketSceneGroupRefreshScNotify(Player, null, monster)); } public List GetEntitiesInGroup(int groupID) @@ -444,7 +444,7 @@ public class SceneInstance public async ValueTask ClearSummonUnit() { if (SummonUnit == null) return; - await Player.SendPacket(new PacketSceneGroupRefreshScNotify(null, SummonUnit)); + await Player.SendPacket(new PacketSceneGroupRefreshScNotify(Player, null, SummonUnit)); SummonUnit = null; diff --git a/GameServer/Server/Packet/Send/Scene/PacketSceneGroupRefreshScNotify.cs b/GameServer/Server/Packet/Send/Scene/PacketSceneGroupRefreshScNotify.cs index b330df2f..f7e465e3 100644 --- a/GameServer/Server/Packet/Send/Scene/PacketSceneGroupRefreshScNotify.cs +++ b/GameServer/Server/Packet/Send/Scene/PacketSceneGroupRefreshScNotify.cs @@ -1,4 +1,6 @@ -using EggLink.DanhengServer.GameServer.Game.Scene.Entity; +using EggLink.DanhengServer.GameServer.Game.Mission; +using EggLink.DanhengServer.GameServer.Game.Player; +using EggLink.DanhengServer.GameServer.Game.Scene.Entity; using EggLink.DanhengServer.Kcp; using EggLink.DanhengServer.Proto; @@ -6,10 +8,14 @@ namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Scene; public class PacketSceneGroupRefreshScNotify : BasePacket { - public PacketSceneGroupRefreshScNotify(List? addEntity = null, List? removeEntity = null) + public PacketSceneGroupRefreshScNotify(PlayerInstance player, List? addEntity = null, List? removeEntity = null) : base(CmdIds.SceneGroupRefreshScNotify) { - var proto = new SceneGroupRefreshScNotify(); + var proto = new SceneGroupRefreshScNotify + { + FloorId = (uint)player.Data.FloorId, + DimensionId = (uint)((player.SceneInstance!.EntityLoader as StoryLineEntityLoader)?.DimensionId ?? 0) + }; Dictionary refreshInfo = []; foreach (var e in removeEntity ?? []) @@ -53,8 +59,8 @@ public class PacketSceneGroupRefreshScNotify : BasePacket SetData(proto); } - public PacketSceneGroupRefreshScNotify(IGameEntity? addEntity = null, IGameEntity? removeEntity = null) : - this(addEntity == null ? [] : [addEntity], removeEntity == null ? [] : [removeEntity]) + public PacketSceneGroupRefreshScNotify(PlayerInstance player, IGameEntity? addEntity = null, IGameEntity? removeEntity = null) : + this(player, addEntity == null ? [] : [addEntity], removeEntity == null ? [] : [removeEntity]) { } } \ No newline at end of file diff --git a/Program/Handbook/HandbookGenerator.cs b/Program/Handbook/HandbookGenerator.cs index c411653b..f7cfe350 100644 --- a/Program/Handbook/HandbookGenerator.cs +++ b/Program/Handbook/HandbookGenerator.cs @@ -78,6 +78,11 @@ public static class HandbookGenerator builder.AppendLine(); GenerateItem(builder, textMap, fallbackTextMap, lang == config.ServerOption.Language); + builder.AppendLine(); + builder.AppendLine("#StageId"); + builder.AppendLine(); + GenerateStageId(builder, textMap, fallbackTextMap); + builder.AppendLine(); builder.AppendLine("#MainMission"); builder.AppendLine(); @@ -167,6 +172,17 @@ public static class HandbookGenerator } } + public static void GenerateStageId(StringBuilder builder, Dictionary map, + Dictionary fallback) + { + foreach (var stage in GameData.StageConfigData.Values) + { + var name = map.TryGetValue(stage.StageName.Hash, out var value) ? value : + fallback.TryGetValue(stage.StageName.Hash, out value) ? value : $"[{stage.StageName.Hash}]"; + builder.AppendLine(stage.StageID + ": " + name); + } + } + public static void GenerateRogueBuff(StringBuilder builder, Dictionary map, Dictionary fallback, bool setName) {