From 20e030fbc0004b4432525142e98fc3d1d8b3ecf4 Mon Sep 17 00:00:00 2001 From: StopWuyu Date: Sat, 31 May 2025 22:35:56 +0800 Subject: [PATCH] feat: add some mission handler --- .../Handler/MissionHandlerAddMissionItem.cs | 12 +++---- .../MissionHandlerAddRecoverMissionItem.cs | 12 +++---- .../Handler/MissionHandlerChangeLineup.cs | 26 +++++++------- .../Handler/MissionHandlerChangeStoryLine.cs | 14 ++++---- .../Handler/MissionHandlerDelMission.cs | 8 ++--- .../Handler/MissionHandlerDelMissionItem.cs | 12 +++---- .../Handler/MissionHandlerDelSubMission.cs | 10 +++--- .../MissionHandlerEnterEntryIfNotThere.cs | 10 +++--- .../Handler/MissionHandlerMoveToAnchor.cs | 10 +++--- .../MissionHandlerSetFloorSavedValue.cs | 18 +++++----- .../Handler/MissionHandlerSetGroupProperty.cs | 20 +++++++++++ .../MissionFinishActionHandler.cs | 2 +- .../MissionHandlerGroupPropertyValue.cs | 34 +++++++++++++++++++ .../MissionHandlerStoryLineAddTrialAvatar.cs | 22 ++++++++++++ .../Handler/MissionHandlerTimeLineSetState.cs | 2 +- GameServer/Game/Player/PlayerInstance.cs | 10 ++++++ GameServer/Game/Task/LevelTask.cs | 12 ++++++- 17 files changed, 165 insertions(+), 69 deletions(-) create mode 100644 GameServer/Game/Mission/FinishAction/Handler/MissionHandlerSetGroupProperty.cs create mode 100644 GameServer/Game/Mission/FinishType/Handler/MissionHandlerGroupPropertyValue.cs create mode 100644 GameServer/Game/Mission/FinishType/Handler/MissionHandlerStoryLineAddTrialAvatar.cs diff --git a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerAddMissionItem.cs b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerAddMissionItem.cs index b163a9d9..fcd180bd 100644 --- a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerAddMissionItem.cs +++ b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerAddMissionItem.cs @@ -6,14 +6,14 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler; [MissionFinishAction(FinishActionTypeEnum.addMissionItem)] public class MissionHandlerAddMissionItem : MissionFinishActionHandler { - public override async ValueTask OnHandle(List Params, List ParamString, PlayerInstance Player) + public override async ValueTask OnHandle(List @params, List paramString, PlayerInstance player) { - if (Params.Count < 2) return; - for (var i = 0; i < Params.Count; i += 2) + if (@params.Count < 2) return; + for (var i = 0; i < @params.Count; i += 2) { - var itemId = Params[i]; - var count = Params[i + 1]; - await Player.InventoryManager!.AddItem(itemId, count); + var itemId = @params[i]; + var count = @params[i + 1]; + await player.InventoryManager!.AddItem(itemId, count); } } } \ No newline at end of file diff --git a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerAddRecoverMissionItem.cs b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerAddRecoverMissionItem.cs index cc9aaab9..c779e020 100644 --- a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerAddRecoverMissionItem.cs +++ b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerAddRecoverMissionItem.cs @@ -6,15 +6,15 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler; [MissionFinishAction(FinishActionTypeEnum.addRecoverMissionItem)] public class MissionHandlerAddRecoverMissionItem : MissionFinishActionHandler { - public override async ValueTask OnHandle(List Params, List ParamString, PlayerInstance Player) + public override async ValueTask OnHandle(List @params, List paramString, PlayerInstance player) { - if (Params.Count < 2) return; + if (@params.Count < 2) return; - for (var i = 0; i < Params.Count; i += 2) + for (var i = 0; i < @params.Count; i += 2) { - var itemId = Params[i]; - var count = Params[i + 1]; - await Player.InventoryManager!.AddItem(itemId, count); + var itemId = @params[i]; + var count = @params[i + 1]; + await player.InventoryManager!.AddItem(itemId, count); } } } \ No newline at end of file diff --git a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerChangeLineup.cs b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerChangeLineup.cs index 63439d39..19c202c5 100644 --- a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerChangeLineup.cs +++ b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerChangeLineup.cs @@ -7,36 +7,36 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler; [MissionFinishAction(FinishActionTypeEnum.ChangeLineup)] public class MissionHandlerChangeLineup : MissionFinishActionHandler { - public override async ValueTask OnHandle(List Params, List ParamString, PlayerInstance Player) + public override async ValueTask OnHandle(List @params, List paramString, PlayerInstance player) { - Player.LineupManager!.GetCurLineup()!.BaseAvatars!.Clear(); + player.LineupManager!.GetCurLineup()!.BaseAvatars!.Clear(); var count = 0; - var avatarCount = Params.Count(value => value != 0) - 1; - foreach (var avatarId in Params) + var avatarCount = @params.Count(value => value != 0) - 1; + foreach (var avatarId in @params) { if (count++ >= 4) break; - GameData.SpecialAvatarData.TryGetValue(avatarId * 10 + Player.Data.WorldLevel, out var specialAvatar); + GameData.SpecialAvatarData.TryGetValue(avatarId * 10 + player.Data.WorldLevel, out var specialAvatar); if (specialAvatar == null) { GameData.AvatarConfigData.TryGetValue(avatarId, out var avatar); if (avatar == null) continue; - var ava = Player.AvatarManager!.GetFormalAvatar(avatarId); - if (ava == null) await Player.AvatarManager!.AddAvatar(avatarId); - await Player.LineupManager!.AddAvatarToCurTeam(avatarId, count == avatarCount); + var ava = player.AvatarManager!.GetFormalAvatar(avatarId); + if (ava == null) await player.AvatarManager!.AddAvatar(avatarId); + await player.LineupManager!.AddAvatarToCurTeam(avatarId, count == avatarCount); } else { - await Player.LineupManager!.AddSpecialAvatarToCurTeam(avatarId * 10 + Player.Data.WorldLevel, + await player.LineupManager!.AddSpecialAvatarToCurTeam(avatarId * 10 + player.Data.WorldLevel, count == avatarCount); } } - GameData.SpecialAvatarData.TryGetValue(Params[4] * 10 + Player.Data.WorldLevel, out var leaderAvatar); + GameData.SpecialAvatarData.TryGetValue(@params[4] * 10 + player.Data.WorldLevel, out var leaderAvatar); if (leaderAvatar == null) - Player.LineupManager!.GetCurLineup()!.LeaderAvatarId = Params[4]; + player.LineupManager!.GetCurLineup()!.LeaderAvatarId = @params[4]; else - Player.LineupManager!.GetCurLineup()!.LeaderAvatarId = leaderAvatar.AvatarID; + player.LineupManager!.GetCurLineup()!.LeaderAvatarId = leaderAvatar.AvatarID; - await Player.SceneInstance!.SyncLineup(); + await player.SceneInstance!.SyncLineup(); } } \ No newline at end of file diff --git a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerChangeStoryLine.cs b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerChangeStoryLine.cs index c25be65c..6d3901fc 100644 --- a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerChangeStoryLine.cs +++ b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerChangeStoryLine.cs @@ -6,17 +6,17 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler; [MissionFinishAction(FinishActionTypeEnum.ChangeStoryLine)] public class MissionHandlerChangeStoryLine : MissionFinishActionHandler { - public override async ValueTask OnHandle(List Params, List ParamString, PlayerInstance Player) + public override async ValueTask OnHandle(List @params, List paramString, PlayerInstance player) { - var toStoryLineId = Params[0]; - var toEntryId = Params[1]; - var toAnchorGroup = Params[2]; - var toAnchorId = Params[3]; + var toStoryLineId = @params[0]; + var toEntryId = @params[1]; + var toAnchorGroup = @params[2]; + var toAnchorId = @params[3]; if (toStoryLineId == 0) // exit - await Player.StoryLineManager!.FinishStoryLine(toEntryId, toAnchorGroup, toAnchorId); + await player.StoryLineManager!.FinishStoryLine(toEntryId, toAnchorGroup, toAnchorId); else - await Player.StoryLineManager!.InitStoryLine(toStoryLineId, toEntryId, toAnchorGroup, toAnchorId); + await player.StoryLineManager!.InitStoryLine(toStoryLineId, toEntryId, toAnchorGroup, toAnchorId); } } \ No newline at end of file diff --git a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerDelMission.cs b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerDelMission.cs index c0e72733..f832dd0a 100644 --- a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerDelMission.cs +++ b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerDelMission.cs @@ -6,10 +6,10 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler; [MissionFinishAction(FinishActionTypeEnum.delMission)] public class MissionHandlerDelMission : MissionFinishActionHandler { - public override async ValueTask OnHandle(List Params, List ParamString, PlayerInstance Player) + public override async ValueTask OnHandle(List @params, List paramString, PlayerInstance player) { - if (Params.Count < 1) return; - var missionId = Params[0]; - await Player.MissionManager!.FinishSubMission(missionId); + if (@params.Count < 1) return; + var missionId = @params[0]; + await player.MissionManager!.FinishSubMission(missionId); } } \ No newline at end of file diff --git a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerDelMissionItem.cs b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerDelMissionItem.cs index 44087b2b..7a3ec187 100644 --- a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerDelMissionItem.cs +++ b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerDelMissionItem.cs @@ -6,14 +6,14 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler; [MissionFinishAction(FinishActionTypeEnum.delMissionItem)] public class MissionHandlerDelMissionItem : MissionFinishActionHandler { - public override async ValueTask OnHandle(List Params, List ParamString, PlayerInstance Player) + public override async ValueTask OnHandle(List @params, List paramString, PlayerInstance player) { - if (Params.Count < 2) return; - for (var i = 0; i < Params.Count; i += 2) + if (@params.Count < 2) return; + for (var i = 0; i < @params.Count; i += 2) { - var itemId = Params[i]; - var count = Params[i + 1]; - await Player.InventoryManager!.RemoveItem(itemId, count); + var itemId = @params[i]; + var count = @params[i + 1]; + await player.InventoryManager!.RemoveItem(itemId, count); } } } \ No newline at end of file diff --git a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerDelSubMission.cs b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerDelSubMission.cs index e1159293..1669b46c 100644 --- a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerDelSubMission.cs +++ b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerDelSubMission.cs @@ -6,14 +6,14 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler; [MissionFinishAction(FinishActionTypeEnum.delSubMission)] public class MissionHandlerDelSubMission : MissionFinishActionHandler { - public override async ValueTask OnHandle(List Params, List ParamString, PlayerInstance Player) + public override async ValueTask OnHandle(List @params, List paramString, PlayerInstance player) { - if (Params.Count < 1) return; + if (@params.Count < 1) return; - foreach (var subMissionId in Params) + foreach (var subMissionId in @params) { - await Player.MissionManager!.AcceptSubMission(subMissionId); - await Player.MissionManager!.FinishSubMission(subMissionId); + await player.MissionManager!.AcceptSubMission(subMissionId); + await player.MissionManager!.FinishSubMission(subMissionId); } } } \ No newline at end of file diff --git a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerEnterEntryIfNotThere.cs b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerEnterEntryIfNotThere.cs index 024b6fbd..25ede8da 100644 --- a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerEnterEntryIfNotThere.cs +++ b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerEnterEntryIfNotThere.cs @@ -6,12 +6,12 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler; [MissionFinishAction(FinishActionTypeEnum.EnterEntryIfNotThere)] public class MissionHandlerEnterEntryIfNotThere : MissionFinishActionHandler { - public override async ValueTask OnHandle(List Params, List ParamString, PlayerInstance Player) + public override async ValueTask OnHandle(List @params, List paramString, PlayerInstance player) { - var entryId = Params[0]; - var anchorGroup = Params[1]; - var anchorId = Params[2]; + var entryId = @params[0]; + var anchorGroup = @params[1]; + var anchorId = @params[2]; - await Player.EnterSceneByEntranceId(entryId, anchorGroup, anchorId, true); + await player.EnterSceneByEntranceId(entryId, anchorGroup, anchorId, true); } } \ No newline at end of file diff --git a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerMoveToAnchor.cs b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerMoveToAnchor.cs index 3772377d..d297f273 100644 --- a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerMoveToAnchor.cs +++ b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerMoveToAnchor.cs @@ -6,11 +6,11 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler; [MissionFinishAction(FinishActionTypeEnum.MoveToAnchor)] public class MissionHandlerMoveToAnchor : MissionFinishActionHandler { - public override async ValueTask OnHandle(List Params, List ParamString, PlayerInstance Player) + public override async ValueTask OnHandle(List @params, List paramString, PlayerInstance player) { - var entryId = Params[0]; - var anchorGroup = Params[1]; - var anchorId = Params[2]; - await Player.EnterSceneByEntranceId(entryId, anchorGroup, anchorId, true); + var entryId = @params[0]; + var anchorGroup = @params[1]; + var anchorId = @params[2]; + await player.EnterSceneByEntranceId(entryId, anchorGroup, anchorId, true); } } \ No newline at end of file diff --git a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerSetFloorSavedValue.cs b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerSetFloorSavedValue.cs index e7216697..ce34451a 100644 --- a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerSetFloorSavedValue.cs +++ b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerSetFloorSavedValue.cs @@ -7,21 +7,21 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler; [MissionFinishAction(FinishActionTypeEnum.SetFloorSavedValue)] public class MissionHandlerSetFloorSavedValue : MissionFinishActionHandler { - public override async ValueTask OnHandle(List Params, List ParamString, PlayerInstance Player) + public override async ValueTask OnHandle(List @params, List paramString, PlayerInstance player) { - _ = int.TryParse(ParamString[0], out var plane); - _ = int.TryParse(ParamString[1], out var floor); - Player.SceneData!.FloorSavedData.TryGetValue(floor, out var value); + _ = int.TryParse(paramString[0], out var plane); + _ = int.TryParse(paramString[1], out var floor); + player.SceneData!.FloorSavedData.TryGetValue(floor, out var value); if (value == null) { value = []; - Player.SceneData.FloorSavedData[floor] = value; + player.SceneData.FloorSavedData[floor] = value; } - value[ParamString[2]] = int.Parse(ParamString[3]); // ParamString[2] is the key - await Player.SendPacket( - new PacketUpdateFloorSavedValueNotify(ParamString[2], int.Parse(ParamString[3]), Player)); + value[paramString[2]] = int.Parse(paramString[3]); // ParamString[2] is the key + await player.SendPacket( + new PacketUpdateFloorSavedValueNotify(paramString[2], int.Parse(paramString[3]), player)); - Player.TaskManager?.SceneTaskTrigger.TriggerFloor(plane, floor); + player.TaskManager?.SceneTaskTrigger.TriggerFloor(plane, floor); } } \ No newline at end of file diff --git a/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerSetGroupProperty.cs b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerSetGroupProperty.cs new file mode 100644 index 00000000..742b3f2c --- /dev/null +++ b/GameServer/Game/Mission/FinishAction/Handler/MissionHandlerSetGroupProperty.cs @@ -0,0 +1,20 @@ +using EggLink.DanhengServer.Enums.Mission; +using EggLink.DanhengServer.GameServer.Game.Player; + +namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler; + +[MissionFinishAction(FinishActionTypeEnum.SetGroupProperty)] +public class MissionHandlerSetGroupProperty : MissionFinishActionHandler +{ + public override async ValueTask OnHandle(List @params, List paramString, PlayerInstance player) + { + var groupId = paramString[0]; + var propertyName = paramString[1]; + var propertyValue = paramString[2]; + + if (string.IsNullOrEmpty(groupId) || string.IsNullOrEmpty(propertyName) || string.IsNullOrEmpty(propertyValue)) + return; + + await player.SceneInstance!.UpdateGroupProperty(int.Parse(groupId), propertyName, int.Parse(propertyValue)); + } +} \ No newline at end of file diff --git a/GameServer/Game/Mission/FinishAction/MissionFinishActionHandler.cs b/GameServer/Game/Mission/FinishAction/MissionFinishActionHandler.cs index 0a2e13be..e13a5b50 100644 --- a/GameServer/Game/Mission/FinishAction/MissionFinishActionHandler.cs +++ b/GameServer/Game/Mission/FinishAction/MissionFinishActionHandler.cs @@ -4,5 +4,5 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction; public abstract class MissionFinishActionHandler { - public abstract ValueTask OnHandle(List Params, List ParamString, PlayerInstance Player); + public abstract ValueTask OnHandle(List @params, List paramString, PlayerInstance player); } \ No newline at end of file diff --git a/GameServer/Game/Mission/FinishType/Handler/MissionHandlerGroupPropertyValue.cs b/GameServer/Game/Mission/FinishType/Handler/MissionHandlerGroupPropertyValue.cs new file mode 100644 index 00000000..58f92d07 --- /dev/null +++ b/GameServer/Game/Mission/FinishType/Handler/MissionHandlerGroupPropertyValue.cs @@ -0,0 +1,34 @@ +using EggLink.DanhengServer.Data.Config; +using EggLink.DanhengServer.Data.Excel; +using EggLink.DanhengServer.Enums.Mission; +using EggLink.DanhengServer.GameServer.Game.Player; + +namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishType.Handler; + +[MissionFinishType(MissionFinishTypeEnum.GroupPropertyValue)] +public class MissionHandlerGroupPropertyValue : MissionFinishTypeHandler +{ + public override async ValueTask HandleMissionFinishType(PlayerInstance player, SubMissionInfo info, object? arg) + { + var floorId = info.LevelFloorID; + var groupId = info.ParamInt1; + var value = info.ParamInt2; + var name = info.ParamStr1; + + if (player.SceneInstance?.FloorId != floorId) return; + var prop = player.SceneInstance.GetGroupProperty(groupId, name); + if (prop == value) await player.MissionManager!.FinishSubMission(info.ID); + } + + public override async ValueTask HandleQuestFinishType(PlayerInstance player, QuestDataExcel quest, FinishWayExcel excel, object? arg) + { + var floorId = excel.MazeFloorID; + var groupId = excel.ParamInt1; + var value = excel.ParamInt2; + var name = excel.ParamStr1; + + if (player.SceneInstance?.FloorId != floorId) return; + var prop = player.SceneInstance.GetGroupProperty(groupId, name); + if (prop == value) await player.QuestManager!.AddQuestProgress(quest.QuestID, 1); + } +} \ No newline at end of file diff --git a/GameServer/Game/Mission/FinishType/Handler/MissionHandlerStoryLineAddTrialAvatar.cs b/GameServer/Game/Mission/FinishType/Handler/MissionHandlerStoryLineAddTrialAvatar.cs new file mode 100644 index 00000000..98bfed80 --- /dev/null +++ b/GameServer/Game/Mission/FinishType/Handler/MissionHandlerStoryLineAddTrialAvatar.cs @@ -0,0 +1,22 @@ +using EggLink.DanhengServer.Data.Config; +using EggLink.DanhengServer.Data.Excel; +using EggLink.DanhengServer.Enums.Mission; +using EggLink.DanhengServer.GameServer.Game.Player; + +namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishType.Handler; + +[MissionFinishType(MissionFinishTypeEnum.StoryLineAddTrialAvatar)] +public class MissionHandlerStoryLineAddTrialAvatar : MissionFinishTypeHandler +{ + public override async ValueTask HandleMissionFinishType(PlayerInstance player, SubMissionInfo info, object? arg) + { + await player.MissionManager!.FinishSubMission(info.ID); + } + + public override async ValueTask HandleQuestFinishType(PlayerInstance player, QuestDataExcel quest, + FinishWayExcel excel, object? arg) + { + // this type wont be used in quest + await ValueTask.CompletedTask; + } +} \ No newline at end of file diff --git a/GameServer/Game/Mission/FinishType/Handler/MissionHandlerTimeLineSetState.cs b/GameServer/Game/Mission/FinishType/Handler/MissionHandlerTimeLineSetState.cs index c0a88fc0..f76a11da 100644 --- a/GameServer/Game/Mission/FinishType/Handler/MissionHandlerTimeLineSetState.cs +++ b/GameServer/Game/Mission/FinishType/Handler/MissionHandlerTimeLineSetState.cs @@ -39,6 +39,6 @@ public class MissionHandlerTimeLineSetState : MissionFinishTypeHandler // compare if (Encoding.UTF8.GetString(Convert.FromBase64String(data.ByteValue)) != value) return; - await player.MissionManager!.FinishSubMission(excel.ID); + await player.QuestManager!.AddQuestProgress(excel.ID, 1); } } \ No newline at end of file diff --git a/GameServer/Game/Player/PlayerInstance.cs b/GameServer/Game/Player/PlayerInstance.cs index 46c2dd4f..264b0f7a 100644 --- a/GameServer/Game/Player/PlayerInstance.cs +++ b/GameServer/Game/Player/PlayerInstance.cs @@ -590,6 +590,16 @@ public class PlayerInstance(PlayerData data) await MissionManager!.OnPlayerInteractWithProp(); } + if (prop.Excel.ID == 104039) + { + foreach (var p in SceneInstance.GetEntitiesInGroup(prop.GroupId)) + { + await p.SetState(newState); + } + + await MissionManager!.OnPlayerInteractWithProp(); + } + if (prop.PropInfo.Name.Contains("Piece")) { var pieceDone = SceneInstance.GetEntitiesInGroup(prop.GroupId) diff --git a/GameServer/Game/Task/LevelTask.cs b/GameServer/Game/Task/LevelTask.cs index 4bd86d8a..5123a42a 100644 --- a/GameServer/Game/Task/LevelTask.cs +++ b/GameServer/Game/Task/LevelTask.cs @@ -201,9 +201,19 @@ public class LevelTask(PlayerInstance player) } } + public async ValueTask StoryLineReplaceTrialPlayer(TaskConfigInfo act, SubMissionExcel subMission, GroupInfo? group = null) + { + if (subMission.SubMissionInfo?.FinishType == MissionFinishTypeEnum.StoryLineAddTrialAvatar) + { + var ids = Player.LineupManager!.GetCurLineup()?.BaseAvatars?.ToList() ?? []; + ids.ForEach(async void (x) => await Player.LineupManager!.RemoveAvatarFromCurTeam(x.BaseAvatarId, false)); + await Player.LineupManager!.AddAvatarToCurTeam(subMission.SubMissionInfo.ParamInt1); + } + } + public async ValueTask ReplaceVirtualTeam(TaskConfigInfo act, SubMissionExcel subMission, GroupInfo? group = null) { - if (!(Player.LineupManager!.GetCurLineup()?.IsExtraLineup() == true)) return; + if (Player.LineupManager!.GetCurLineup()?.IsExtraLineup() != true) return; if (subMission.SubMissionInfo?.FinishType == MissionFinishTypeEnum.GetTrialAvatar) {