From e915519938700223ccd0e02aec99fcb810b83001 Mon Sep 17 00:00:00 2001 From: Somebody Date: Sun, 2 Jun 2024 16:22:50 +0800 Subject: [PATCH] fix message --- GameServer/Game/Message/MessageManager.cs | 49 +++++++++++++++-------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/GameServer/Game/Message/MessageManager.cs b/GameServer/Game/Message/MessageManager.cs index e752350f..51ded585 100644 --- a/GameServer/Game/Message/MessageManager.cs +++ b/GameServer/Game/Message/MessageManager.cs @@ -98,7 +98,7 @@ namespace EggLink.DanhengServer.Game.Message } } - public void AddMessageItem(int itemId) + public void AddMessageItem(int itemId, bool sendPacket = true) { GameData.MessageItemConfigData.TryGetValue(itemId, out var itemConfig); if (itemConfig == null) return; @@ -126,7 +126,7 @@ namespace EggLink.DanhengServer.Game.Message group.CurrentSectionId = sectionId; group.RefreshTime = Extensions.GetUnixSec(); group.Status = MessageGroupStatus.MessageGroupDoing; - if (!group.Sections.Any(m => m.SectionId == sectionId)) + if (!group.Sections.Any(m => m.SectionId == sectionId)) // new section { group.Sections.Add(new MessageSectionData { @@ -134,21 +134,27 @@ namespace EggLink.DanhengServer.Game.Message Status = MessageSectionStatus.MessageSectionDoing, ToChooseItemId = itemConfig.NextItemIDList, }); + + if (itemConfig.NextItemIDList.Count == 1) + { + FinishMessageItem(itemConfig.NextItemIDList[0], false); + } } - else + else // old { group.Sections.First(m => m.SectionId == sectionId).Status = MessageSectionStatus.MessageSectionDoing; } } - DatabaseHelper.Instance!.UpdateInstance(Data); - // sync - var notify = new PacketPlayerSyncScNotify(group, group.Sections.First(m => m.SectionId == sectionId)); - Player.SendPacket(notify); + if (sendPacket) + { + var notify = new PacketPlayerSyncScNotify(group, group.Sections.First(m => m.SectionId == sectionId)); + Player.SendPacket(notify); + } } - public void FinishSection(int sectionId) + public void FinishSection(int sectionId, bool sendPacket = true) { GameData.MessageSectionConfigData.TryGetValue(sectionId, out var sectionConfig); if (sectionConfig == null) return; @@ -161,18 +167,20 @@ namespace EggLink.DanhengServer.Game.Message { group.Status = MessageGroupStatus.MessageGroupFinish; } - DatabaseHelper.Instance!.UpdateInstance(Data); // sync - var notify = new PacketPlayerSyncScNotify(group, section); - Player.SendPacket(notify); + if (sendPacket) + { + var notify = new PacketPlayerSyncScNotify(group, section); + Player.SendPacket(notify); + } // broadcast to mission system Player.MissionManager!.HandleFinishType(Enums.MissionFinishTypeEnum.MessagePerformSectionFinish); Player.MissionManager!.HandleFinishType(Enums.MissionFinishTypeEnum.MessageSectionFinish); } - public void FinishMessageItem(int itemId) + public void FinishMessageItem(int itemId, bool sendPacket = true) { GameData.MessageItemConfigData.TryGetValue(itemId, out var itemConfig); if (itemConfig == null) return; @@ -181,7 +189,7 @@ namespace EggLink.DanhengServer.Game.Message if (!Data.Groups.TryGetValue(groupId, out var group)) return; var section = group.Sections.First(m => m.SectionId == sectionId); if (section.Status != MessageSectionStatus.MessageSectionDoing) return; - //if (!section.ToChooseItemId.Contains(itemId)) return; + if (!section.ToChooseItemId.Contains(itemId)) return; section.ToChooseItemId.Clear(); section.Items.Add(new MessageItemData { @@ -191,10 +199,17 @@ namespace EggLink.DanhengServer.Game.Message group.RefreshTime = Extensions.GetUnixSec(); - DatabaseHelper.Instance!.UpdateInstance(Data); - // sync - var notify = new PacketPlayerSyncScNotify(group, section); - Player.SendPacket(notify); + if (section.ToChooseItemId.Count == 1) // if only one item, auto finish + { + FinishMessageItem(section.ToChooseItemId[0], false); + } + + if (sendPacket) + { + // sync + var notify = new PacketPlayerSyncScNotify(group, section); + Player.SendPacket(notify); + } } #endregion