From 8fbdd0c8ce28b03b40129bffd63671d45b5fa47e Mon Sep 17 00:00:00 2001 From: Somebody Date: Sat, 14 Jun 2025 20:16:54 +0800 Subject: [PATCH] fix: partly entry mission of Zagreus --- Command/Command/Cmd/CommandRaid.cs | 32 +++++++++++++++++++ GameServer/Game/Raid/RaidManager.cs | 22 +++++++++++-- GameServer/Game/Scene/SceneInstance.cs | 8 +++++ .../HandlerChangeEraFlipperDataCsReq.cs | 30 ++++++----------- .../PacketGetEraFlipperDataScRsp.cs | 10 +++--- 5 files changed, 75 insertions(+), 27 deletions(-) diff --git a/Command/Command/Cmd/CommandRaid.cs b/Command/Command/Cmd/CommandRaid.cs index 0ed01925..dfbed2de 100644 --- a/Command/Command/Cmd/CommandRaid.cs +++ b/Command/Command/Cmd/CommandRaid.cs @@ -18,4 +18,36 @@ public class CommandRaid : ICommand await arg.SendMsg(I18NManager.Translate("Game.Command.Raid.Leaved")); } + + [CommandMethod("0 reset")] + public async ValueTask Reset(CommandArg arg) + { + if (arg.Target == null) + { + await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound")); + return; + } + + if (arg.BasicArgs.Count < 2) + { + await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments")); + return; + } + + if (!int.TryParse(arg.BasicArgs[0], out var raidId)) + { + await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.InvalidMissionId")); + return; + } + + if (!int.TryParse(arg.BasicArgs[1], out var level)) + { + await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.InvalidMissionId")); + return; + } + + await arg.Target.Player!.RaidManager!.ClearRaid(raidId, level); + + await arg.SendMsg(I18NManager.Translate("Game.Command.Raid.Leaved")); + } } \ No newline at end of file diff --git a/GameServer/Game/Raid/RaidManager.cs b/GameServer/Game/Raid/RaidManager.cs index c6cc4c41..43c77f56 100644 --- a/GameServer/Game/Raid/RaidManager.cs +++ b/GameServer/Game/Raid/RaidManager.cs @@ -271,15 +271,33 @@ public class RaidManager : BasePlayerManager GameData.RaidConfigData.TryGetValue(raidId * 100 + worldLevel, out var config); if (config == null) return; - config.MainMissionIDList.ForEach(async missionId => + HashSet floorIds = []; + foreach (var missionId in config.MainMissionIDList) { await Player.MissionManager!.RemoveMainMission(missionId); - }); + + GameData.MainMissionData.TryGetValue(missionId, out var mission); + if (mission?.MissionInfo.SubMissionList == null) continue; + foreach (var i in mission.MissionInfo.SubMissionList.Select(x => x.LevelFloorID).ToHashSet()) + { + floorIds.Add(i); + } + } dict.Remove(worldLevel); if (dict.Count == 0) RaidData.RaidRecordDatas.Remove(raidId); + // reset scene data + foreach (var floorId in floorIds) + { + Player.SceneData!.PropTimelineData.Remove(floorId); + Player.SceneData!.GroupPropertyData.Remove(floorId); + Player.SceneData!.FloorTargetPuzzleGroupData.Remove(floorId); + Player.SceneData!.FloorSavedData.Remove(floorId); + Player.SceneData!.ScenePropData.Remove(floorId); + } + await Player.SendPacket(new PacketDelSaveRaidScNotify(raidId, worldLevel)); } diff --git a/GameServer/Game/Scene/SceneInstance.cs b/GameServer/Game/Scene/SceneInstance.cs index f28dbfd8..f9e3fba2 100644 --- a/GameServer/Game/Scene/SceneInstance.cs +++ b/GameServer/Game/Scene/SceneInstance.cs @@ -18,6 +18,8 @@ using EggLink.DanhengServer.GameServer.Game.Scene.Entity; using EggLink.DanhengServer.GameServer.Server.Packet.Send.Scene; using EggLink.DanhengServer.Proto; using EggLink.DanhengServer.Util; +using System.Management; +using EggLink.DanhengServer.Enums.Mission; namespace EggLink.DanhengServer.GameServer.Game.Scene; @@ -340,6 +342,12 @@ public class SceneInstance floorSavedData[name] = value; await Player.SendPacket(new PacketUpdateFloorSavedValueNotify(name, value, Player)); + await Player.MissionManager!.HandleFinishType(MissionFinishTypeEnum.FloorSavedValue); + } + + public int GetFloorSavedValue(string name) + { + return Player.SceneData!.GetFloorSavedValue(FloorId, name); } public int GetGroupProperty(int groupId, string name) diff --git a/GameServer/Server/Packet/Recv/EraFlipper/HandlerChangeEraFlipperDataCsReq.cs b/GameServer/Server/Packet/Recv/EraFlipper/HandlerChangeEraFlipperDataCsReq.cs index 7671489a..0f25f1d3 100644 --- a/GameServer/Server/Packet/Recv/EraFlipper/HandlerChangeEraFlipperDataCsReq.cs +++ b/GameServer/Server/Packet/Recv/EraFlipper/HandlerChangeEraFlipperDataCsReq.cs @@ -1,7 +1,6 @@ using EggLink.DanhengServer.Enums.Mission; using EggLink.DanhengServer.GameServer.Game.Scene.Component; using EggLink.DanhengServer.GameServer.Server.Packet.Send.EraFlipper; -using EggLink.DanhengServer.GameServer.Server.Packet.Send.Scene; using EggLink.DanhengServer.Kcp; using EggLink.DanhengServer.Proto; @@ -21,27 +20,18 @@ public class HandlerChangeEraFlipperDataCsReq : Handler return; } - if (req.Data.EraFlipperDataList_.Any(x => x.EraFlipperRegionId == 2) && connection.Player!.SceneInstance!.FloorInfo?.FloorSavedValue.Find(x => x.Name == "FSV_FlashBackCount") != - null) + if (req.Data.EraFlipperDataList_.Any(x => x.EraFlipperRegionId == 2)) { - // should save - var plane = connection.Player.SceneInstance.PlaneId; - var floor = connection.Player.SceneInstance.FloorId; - connection.Player.SceneData!.FloorSavedData.TryGetValue(floor, out var value); - if (value == null) - { - value = []; - connection.Player.SceneData.FloorSavedData[floor] = value; - } + var curValue = connection.Player.SceneInstance!.GetFloorSavedValue("FSV_FlashBackCount") + 1; + await connection.Player!.SceneInstance!.UpdateFloorSavedValue("FSV_FlashBackCount", curValue); - value["FSV_FlashBackCount"] = 0; - value["FSV_FlashBackCount"] = - value.GetValueOrDefault("FSV_FlashBackCount", 0) + 1; // ParamString[2] is the key - await connection.SendPacket(new PacketUpdateFloorSavedValueNotify("FSV_FlashBackCount", - value["FSV_FlashBackCount"], connection.Player)); - - connection.Player.TaskManager?.SceneTaskTrigger.TriggerFloor(plane, floor); - connection.Player.MissionManager?.HandleFinishType(MissionFinishTypeEnum.FloorSavedValue); + Dictionary gpValueDict = []; + gpValueDict.Add(1, 2); + gpValueDict.Add(2, 3); + gpValueDict.Add(3, 5); + gpValueDict.Add(4, 6); + var gpValue = gpValueDict.GetValueOrDefault(curValue, 0); + await connection.Player.SceneInstance!.UpdateGroupProperty(74, "MimiGoStep", gpValue); } component.ChangeEraFlipperStates(req.Data.EraFlipperDataList_.ToList()); diff --git a/GameServer/Server/Packet/Send/EraFlipper/PacketGetEraFlipperDataScRsp.cs b/GameServer/Server/Packet/Send/EraFlipper/PacketGetEraFlipperDataScRsp.cs index 102103b6..9d5bac21 100644 --- a/GameServer/Server/Packet/Send/EraFlipper/PacketGetEraFlipperDataScRsp.cs +++ b/GameServer/Server/Packet/Send/EraFlipper/PacketGetEraFlipperDataScRsp.cs @@ -14,11 +14,11 @@ public class PacketGetEraFlipperDataScRsp : BasePacket { EraFlipperDataList_ = { - player.SceneData!.EraFlipperData.RegionState.Select(x => new EraFlipperData - { - EraFlipperRegionId = (uint)x.Key, - State = (uint)x.Value - }) + //player.SceneData!.EraFlipperData.RegionState.Select(x => new EraFlipperData + //{ + // EraFlipperRegionId = (uint)x.Key, + // State = (uint)x.Value + //}) } } };