From a660b5c8604fdcc1ff96f88a4f7754f7fc09a03b Mon Sep 17 00:00:00 2001 From: WatchAndyTW Date: Fri, 2 Aug 2024 10:27:13 +0800 Subject: [PATCH 1/2] Fix monster spawning for trial and challenge --- .../Game/Activity/Activities/TrialActivityInstance.cs | 6 ++++++ .../Activity/Loaders/TrialActivityEntityLoader.cs | 9 ++++++++- GameServer/Game/Challenge/ChallengeEntityLoader.cs | 6 +++--- GameServer/Game/Scene/SceneInstance.cs | 11 +++++------ .../Recv/Challenge/HandlerLeaveChallengeCsReq.cs | 2 +- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/GameServer/Game/Activity/Activities/TrialActivityInstance.cs b/GameServer/Game/Activity/Activities/TrialActivityInstance.cs index 7444e2e9..c940b586 100644 --- a/GameServer/Game/Activity/Activities/TrialActivityInstance.cs +++ b/GameServer/Game/Activity/Activities/TrialActivityInstance.cs @@ -34,6 +34,12 @@ public class TrialActivityInstance : BaseActivityInstance public async ValueTask EndActivity(TrialActivityStatus status = TrialActivityStatus.None) { var player = ActivityManager.Player!; + + // Remove trial lineup + await player.LineupManager!.DestroyExtraLineup(ExtraLineupType.LineupStageTrial); + player.LineupManager!.LineupData.CurExtraLineup = -1; + + // Go back to default scene await player.EnterScene(2000101, 0, true); if (status == TrialActivityStatus.Finish) { diff --git a/GameServer/Game/Activity/Loaders/TrialActivityEntityLoader.cs b/GameServer/Game/Activity/Loaders/TrialActivityEntityLoader.cs index 6fe1f1d2..7e5ed4d6 100644 --- a/GameServer/Game/Activity/Loaders/TrialActivityEntityLoader.cs +++ b/GameServer/Game/Activity/Loaders/TrialActivityEntityLoader.cs @@ -5,6 +5,7 @@ using EggLink.DanhengServer.Enums.Scene; using EggLink.DanhengServer.GameServer.Game.Player; using EggLink.DanhengServer.GameServer.Game.Scene; using EggLink.DanhengServer.GameServer.Game.Scene.Entity; +using EggLink.DanhengServer.Util; namespace EggLink.DanhengServer.GameServer.Game.Activity.Loaders; @@ -19,13 +20,13 @@ public class TrialActivityEntityLoader(SceneInstance scene, PlayerInstance playe // Get activity instance if (Player.ActivityManager!.TrialActivityInstance == null) return; var instance = Player.ActivityManager!.TrialActivityInstance; + LoadGroups.SafeAddRange(Scene.FloorInfo!.Groups.Keys.ToList()); // Setup stage GameData.AvatarDemoConfigData.TryGetValue(instance.Data.CurTrialStageId, out var excel); if (excel == null) return; Scene.FloorInfo!.Groups.TryGetValue(excel.MazeGroupID1, out var groupData); if (groupData != null) await LoadGroup(groupData); - ; foreach (var group in Scene.FloorInfo.Groups.Values) { @@ -73,4 +74,10 @@ public class TrialActivityEntityLoader(SceneInstance scene, PlayerInstance playe return entity; } + + public override async ValueTask LoadNpc(NpcInfo info, GroupInfo group, bool sendPacket = false) + { + await System.Threading.Tasks.Task.CompletedTask; + return null; + } } \ No newline at end of file diff --git a/GameServer/Game/Challenge/ChallengeEntityLoader.cs b/GameServer/Game/Challenge/ChallengeEntityLoader.cs index e898eb7c..08f463f5 100644 --- a/GameServer/Game/Challenge/ChallengeEntityLoader.cs +++ b/GameServer/Game/Challenge/ChallengeEntityLoader.cs @@ -20,15 +20,15 @@ public class ChallengeEntityLoader(SceneInstance scene, PlayerInstance player) : // Get challenge instance if (Player.ChallengeManager!.ChallengeInstance == null) return; var instance = Player.ChallengeManager.ChallengeInstance; + LoadGroups.SafeAddRange(Scene.FloorInfo!.Groups.Keys.ToList()); // Setup first stage var excel = instance.Excel; - Scene.FloorInfo!.Groups.TryGetValue(excel.MazeGroupID1, out var groupData); + Scene.FloorInfo.Groups.TryGetValue(excel.MazeGroupID1, out var groupData); if (groupData != null) await LoadGroup(groupData); - ; // Set leave entry - Scene.LeaveEntityId = + Scene.LeaveEntryId = instance.IsStory() ? GameConstants.CHALLENGE_STORY_ENTRANCE : GameConstants.CHALLENGE_ENTRANCE; foreach (var group in Scene.FloorInfo.Groups.Values) diff --git a/GameServer/Game/Scene/SceneInstance.cs b/GameServer/Game/Scene/SceneInstance.cs index c9fdd17c..3431561c 100644 --- a/GameServer/Game/Scene/SceneInstance.cs +++ b/GameServer/Game/Scene/SceneInstance.cs @@ -158,7 +158,7 @@ public class SceneInstance public int PlaneId; public int EntryId; - public int LeaveEntityId; + public int LeaveEntryId; public int LastEntityId; public bool IsLoaded = false; @@ -179,7 +179,7 @@ public class SceneInstance PlaneId = excel.PlaneID; FloorId = floorId; EntryId = entryId; - LeaveEntityId = 0; + LeaveEntryId = 0; System.Threading.Tasks.Task.Run(async () => { await SyncLineup(true, true); }).Wait(); @@ -203,10 +203,9 @@ public class SceneInstance case PlaneTypeEnum.Challenge: EntityLoader = new ChallengeEntityLoader(this, Player); break; - // Temproary disabled - /* case Enums.Scene.PlaneTypeEnum.TrialActivity: - EntityLoader = new ChallengeEntityLoader(this, Player); - break; */ + case PlaneTypeEnum.TrialActivity: + EntityLoader = new TrialActivityEntityLoader(this, Player); + break; default: if (Player.StoryLineManager?.StoryLineData.CurStoryLineId != 0) EntityLoader = new StoryLineEntityLoader(this); diff --git a/GameServer/Server/Packet/Recv/Challenge/HandlerLeaveChallengeCsReq.cs b/GameServer/Server/Packet/Recv/Challenge/HandlerLeaveChallengeCsReq.cs index a5c9fe05..b0feb4c4 100644 --- a/GameServer/Server/Packet/Recv/Challenge/HandlerLeaveChallengeCsReq.cs +++ b/GameServer/Server/Packet/Recv/Challenge/HandlerLeaveChallengeCsReq.cs @@ -29,7 +29,7 @@ public class HandlerLeaveChallengeCsReq : Handler foreach (var avatar in player.LineupManager.GetCurLineup()!.AvatarData!.Avatars) avatar.CurrentHp = 10000; var leaveEntryId = GameConstants.CHALLENGE_ENTRANCE; - if (player.SceneInstance.LeaveEntityId != 0) leaveEntryId = player.SceneInstance.LeaveEntityId; + if (player.SceneInstance.LeaveEntryId != 0) leaveEntryId = player.SceneInstance.LeaveEntryId; await player.EnterScene(leaveEntryId, 0, true); } From 19019fa3e76f2e4575a22ab492965b57f20c8535 Mon Sep 17 00:00:00 2001 From: WatchAndyTW Date: Fri, 2 Aug 2024 10:29:13 +0800 Subject: [PATCH 2/2] Fix activity loader import --- GameServer/Game/Scene/SceneInstance.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/GameServer/Game/Scene/SceneInstance.cs b/GameServer/Game/Scene/SceneInstance.cs index 3431561c..fbde2975 100644 --- a/GameServer/Game/Scene/SceneInstance.cs +++ b/GameServer/Game/Scene/SceneInstance.cs @@ -3,6 +3,7 @@ using EggLink.DanhengServer.Data.Config; using EggLink.DanhengServer.Data.Excel; using EggLink.DanhengServer.Database.Avatar; using EggLink.DanhengServer.Enums.Scene; +using EggLink.DanhengServer.GameServer.Game.Activity.Loaders; using EggLink.DanhengServer.GameServer.Game.Battle; using EggLink.DanhengServer.GameServer.Game.Challenge; using EggLink.DanhengServer.GameServer.Game.ChessRogue.Cell;