From 7fa164e46684d6c2b41dc52d2870f2dac71c25d5 Mon Sep 17 00:00:00 2001 From: Somebody Date: Wed, 24 Jul 2024 16:58:11 +0800 Subject: [PATCH] Fix some bugs --- Common/Data/Config/FloorInfo.cs | 2 +- Common/Data/Config/PropInfo.cs | 2 ++ GameServer/Game/Mission/MissionManager.cs | 36 ++++++++++++++++----- GameServer/Game/Mission/StoryLineManager.cs | 32 ++++++++++++++++-- GameServer/Game/Player/PlayerInstance.cs | 12 +++++++ 5 files changed, 72 insertions(+), 12 deletions(-) diff --git a/Common/Data/Config/FloorInfo.cs b/Common/Data/Config/FloorInfo.cs index a391a1b9..f2ae158b 100644 --- a/Common/Data/Config/FloorInfo.cs +++ b/Common/Data/Config/FloorInfo.cs @@ -64,7 +64,7 @@ public class FloorInfo } else if (json.Contains("Common_Console")) { - //prop.CommonConsole = true; + prop.CommonConsole = true; } // Clear for garbage collection diff --git a/Common/Data/Config/PropInfo.cs b/Common/Data/Config/PropInfo.cs index 3e6a9aec..03ca0ea5 100644 --- a/Common/Data/Config/PropInfo.cs +++ b/Common/Data/Config/PropInfo.cs @@ -28,6 +28,8 @@ public class PropInfo : PositionInfo [JsonIgnore] public int MazePieceCount { get; set; } + [JsonIgnore] public bool CommonConsole = false; + public void Load(GroupInfo info) { if (ValueSource != null) diff --git a/GameServer/Game/Mission/MissionManager.cs b/GameServer/Game/Mission/MissionManager.cs index e342da1f..116d908e 100644 --- a/GameServer/Game/Mission/MissionManager.cs +++ b/GameServer/Game/Mission/MissionManager.cs @@ -433,18 +433,38 @@ public class MissionManager : BasePlayerManager if (mission.TakeType == SubMissionTakeTypeEnum.CustomValue) { var index = 0; - var accept = true; - foreach (var customValue in mission.TakeParamIntList ?? []) + var accept = false; + List> list = [mission.TakeParamIntList ?? []]; + if (mission.TakeParamIntList?.Count > 5) { - if (customValue == 0 && index == 0) continue; // skip 0 - var valueInst = values.Find(x => x.Index == index); - if (valueInst == null) continue; - if (valueInst.CustomValue != customValue) + // every 3 as group + var group = mission.TakeParamIntList.Count / 3; + list = []; + for (var i = 0; i < group; i++) { - accept = false; - break; + var customValue = mission.TakeParamIntList.GetRange(i * 3, 3); + list.Add(customValue); } } + foreach (var customValues in list) + { + var thisAccept = true; + foreach (var customValue in customValues) + { + if (customValue == 0 && index == 0) continue; // skip 0 + var valueInst = values.Find(x => x.Index == index); + if (valueInst == null) continue; + if (valueInst.CustomValue != customValue) + { + thisAccept = false; + break; + } + + index++; + } + + if (thisAccept) accept = true; // accept if any group is true + } if (accept) await AcceptSubMission(mission.ID); } diff --git a/GameServer/Game/Mission/StoryLineManager.cs b/GameServer/Game/Mission/StoryLineManager.cs index a7ec15b9..f9aeaa9b 100644 --- a/GameServer/Game/Mission/StoryLineManager.cs +++ b/GameServer/Game/Mission/StoryLineManager.cs @@ -38,6 +38,7 @@ public class StoryLineManager : BasePlayerManager GameData.StoryLineData.TryGetValue(storyLineId, out var storyExcel); GameData.StroyLineTrialAvatarDataData.TryGetValue(storyLineId, out var storyAvatarExcel); if (storyExcel == null || storyAvatarExcel == null) return; + StoryLineData.RunningStoryLines.TryGetValue(storyLineId, out var lineInfo); StoryLineData.OldEntryId = Player.Data.EntryId; StoryLineData.OldFloorId = Player.Data.FloorId; StoryLineData.OldPlaneId = Player.Data.PlaneId; @@ -58,8 +59,19 @@ public class StoryLineManager : BasePlayerManager if (entryId > 0) await Player.EnterMissionScene(entryId, anchorGroupId, anchorId, true, ChangeStoryLineAction.FinishAction); else - await Player.EnterMissionScene(storyExcel.InitEntranceID, storyExcel.InitGroupID, storyExcel.InitAnchorID, - true, ChangeStoryLineAction.FinishAction); + { + if (lineInfo == null) + { + await Player.EnterMissionScene(storyExcel.InitEntranceID, storyExcel.InitGroupID, storyExcel.InitAnchorID, + true, ChangeStoryLineAction.FinishAction); + } + else + { + await Player.LoadScene(lineInfo.SavedPlaneId, lineInfo.SavedFloorId, lineInfo.SavedEntryId, + lineInfo.SavedPos, lineInfo.SavedRot, true, ChangeStoryLineAction.FinishAction); + } + + } await Player.SendPacket( new PacketChangeStoryLineFinishScNotify(storyExcel.StoryLineID, ChangeStoryLineAction.FinishAction)); @@ -175,10 +187,24 @@ public class StoryLineManager : BasePlayerManager { if (StoryLineData.CurStoryLineId == 0) return; + GameData.StoryLineData.TryGetValue(StoryLineData.CurStoryLineId, out var storyExcel); + if (storyExcel == null) return; Player.LineupManager!.SetExtraLineup(ExtraLineupType.LineupNone, []); // delete old & reset - StoryLineData.RunningStoryLines.Remove(StoryLineData.CurStoryLineId); + if (Player.MissionManager!.GetSubMissionStatus(storyExcel.EndCondition.Param) == MissionPhaseEnum.Finish) + StoryLineData.RunningStoryLines.Remove(StoryLineData.CurStoryLineId); + else + StoryLineData.RunningStoryLines[StoryLineData.CurStoryLineId] = new StoryLineInfo + { + Lineup = Player.LineupManager!.GetCurLineup()!.BaseAvatars!, + SavedEntryId = Player.Data.EntryId, + SavedFloorId = Player.Data.FloorId, + SavedPlaneId = Player.Data.PlaneId, + SavedPos = Player.Data.Pos!, + SavedRot = Player.Data.Rot!, + StoryLineId = StoryLineData.CurStoryLineId + }; StoryLineData.CurStoryLineId = 0; StoryLineData.OldPlaneId = 0; diff --git a/GameServer/Game/Player/PlayerInstance.cs b/GameServer/Game/Player/PlayerInstance.cs index 0ff93ed5..4b368586 100644 --- a/GameServer/Game/Player/PlayerInstance.cs +++ b/GameServer/Game/Player/PlayerInstance.cs @@ -398,6 +398,18 @@ public class PlayerInstance(PlayerData data) } break; + case PropTypeEnum.PROP_ORDINARY: + if (prop.PropInfo.CommonConsole) + { + // set group + foreach (var p in SceneInstance.GetEntitiesInGroup(prop.GroupID)) + { + await p.SetState(newState); + + await MissionManager!.OnPlayerInteractWithProp(); + } + } + break; } // for door unlock