From 49d28e2a5a2108ccf9f7ae5693f38ed8d7bbe38b Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Fri, 4 Oct 2024 20:47:40 -0400 Subject: [PATCH 1/4] fix: Fix few issues related to quest.Enabled - Don't populate quest information for quests which are not enabled. - Add a new function to check if a quest is enabled which can handle null without causing an exception. --- Arrowgene.Ddon.GameServer/Characters/QuestManager.cs | 11 +++++++++++ .../GatheringItems/InstanceEventDropItemManager.cs | 2 +- .../Handler/PartyPartyCreateHandler.cs | 12 ++++++------ .../Handler/QuestGetCycleContentsStateListHandler.cs | 12 +++++++++++- .../Handler/QuestGetTutorialQuestListHandler.cs | 3 ++- Arrowgene.Ddon.GameServer/Party/PartyQuestState.cs | 5 ++--- 6 files changed, 33 insertions(+), 12 deletions(-) diff --git a/Arrowgene.Ddon.GameServer/Characters/QuestManager.cs b/Arrowgene.Ddon.GameServer/Characters/QuestManager.cs index 25351a2ac..b452f9583 100644 --- a/Arrowgene.Ddon.GameServer/Characters/QuestManager.cs +++ b/Arrowgene.Ddon.GameServer/Characters/QuestManager.cs @@ -228,6 +228,17 @@ public static Quest GetQuest(uint questId) return GetQuest((QuestId)questId); } + public static bool IsQuestEnabled(uint questId) + { + var quest = GetQuest(questId); + return (quest == null) ? false : quest.Enabled; + } + + public static bool IsQuestEnabled(QuestId questId) + { + return IsQuestEnabled((uint)questId); + } + public class LayoutFlag { public static CDataQuestLayoutFlagSetInfo Create(uint layoutFlag, StageNo stageNo, uint groupId) diff --git a/Arrowgene.Ddon.GameServer/GatheringItems/InstanceEventDropItemManager.cs b/Arrowgene.Ddon.GameServer/GatheringItems/InstanceEventDropItemManager.cs index d819cd0b4..f3d0701bd 100644 --- a/Arrowgene.Ddon.GameServer/GatheringItems/InstanceEventDropItemManager.cs +++ b/Arrowgene.Ddon.GameServer/GatheringItems/InstanceEventDropItemManager.cs @@ -23,7 +23,7 @@ public InstanceEventDropItemManager(AssetRepository assetRepository) private bool DropEnabled(Character character, EventItem item, Enemy enemy, StageId stageId) { - if (item.QuestIds.Count > 0 && !item.QuestIds.Any(x => QuestManager.GetQuest(x).Enabled)) + if (item.QuestIds.Count > 0 && !item.QuestIds.Any(x => QuestManager.IsQuestEnabled(x))) { return false; } diff --git a/Arrowgene.Ddon.GameServer/Handler/PartyPartyCreateHandler.cs b/Arrowgene.Ddon.GameServer/Handler/PartyPartyCreateHandler.cs index d404d9ec8..861c22782 100644 --- a/Arrowgene.Ddon.GameServer/Handler/PartyPartyCreateHandler.cs +++ b/Arrowgene.Ddon.GameServer/Handler/PartyPartyCreateHandler.cs @@ -51,17 +51,17 @@ public override void Handle(GameClient client, StructurePacket x.Enabled).ToList()) { uint stageNo = (uint) StageManager.ConvertIdToStageNo(quest.StageId); if (stageNo != request.StageNo) diff --git a/Arrowgene.Ddon.GameServer/Party/PartyQuestState.cs b/Arrowgene.Ddon.GameServer/Party/PartyQuestState.cs index e7a05ed86..9456b89e9 100644 --- a/Arrowgene.Ddon.GameServer/Party/PartyQuestState.cs +++ b/Arrowgene.Ddon.GameServer/Party/PartyQuestState.cs @@ -307,10 +307,9 @@ public void AddNewQuest(QuestId questId, uint step, bool questStarted) quest = GetQuest(questId); } - if (quest == null) + if (!QuestManager.IsQuestEnabled(questId)) { - // Might be progress from removed quest (or one in development). - Logger.Error($"Unable to locate quest data for {questId}"); + // Quest either not enabled or removed (skip it) return; } From 117077a8e548162270e384931a529002dae24132 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Fri, 4 Oct 2024 22:00:30 -0400 Subject: [PATCH 2/4] fix: Mark Bonus Lobby as a safe area --- Arrowgene.Ddon.GameServer/Characters/StageManager.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Arrowgene.Ddon.GameServer/Characters/StageManager.cs b/Arrowgene.Ddon.GameServer/Characters/StageManager.cs index d6681b275..3fcccf679 100644 --- a/Arrowgene.Ddon.GameServer/Characters/StageManager.cs +++ b/Arrowgene.Ddon.GameServer/Characters/StageManager.cs @@ -75,6 +75,7 @@ public static StageNo ConvertIdToStageNo(StageId stageId) 557, // Heroic Spirit Sleeping Path: Feryana Wilderness 558, // Old Heroic Spirit Shrine 576, // Fort Thines: Great Dining Hall + 578, // Bonus Dungeon Lobby 580, // Fortress City Megado: Craft Room 584, // Eli Guard Tower 594, // Northern Bandit Hideout From 49f6bc6f42ae99d3cf44b9c6ef14d975a665f59e Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Fri, 4 Oct 2024 22:00:43 -0400 Subject: [PATCH 3/4] fix: Add potential fix for BGM which don't end --- Arrowgene.Ddon.Shared/Files/Assets/quests/q00020010.json | 1 + 1 file changed, 1 insertion(+) diff --git a/Arrowgene.Ddon.Shared/Files/Assets/quests/q00020010.json b/Arrowgene.Ddon.Shared/Files/Assets/quests/q00020010.json index 38f5c7007..d2b2228fa 100644 --- a/Arrowgene.Ddon.Shared/Files/Assets/quests/q00020010.json +++ b/Arrowgene.Ddon.Shared/Files/Assets/quests/q00020010.json @@ -216,6 +216,7 @@ "stage_id": { "id": 335 }, + "bgm_stop": true, "event_id": 15, "jump_stage_id": { "id": 3 From cb50c6f00737e06ceaab4ee5bfcd5b27cb1c006b Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Fri, 4 Oct 2024 23:13:45 -0400 Subject: [PATCH 4/4] revert improved enemy group handling --- Arrowgene.Ddon.GameServer/Context/ContextManager.cs | 8 ++++++++ .../Handler/InstanceGetEnemySetListHandler.cs | 3 ++- Arrowgene.Ddon.GameServer/Quests/Quest.cs | 4 ++-- docs/quests/holiday_personal_quests.md | 2 ++ 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Arrowgene.Ddon.GameServer/Context/ContextManager.cs b/Arrowgene.Ddon.GameServer/Context/ContextManager.cs index 9e70abca2..2b77db4a6 100644 --- a/Arrowgene.Ddon.GameServer/Context/ContextManager.cs +++ b/Arrowgene.Ddon.GameServer/Context/ContextManager.cs @@ -41,6 +41,14 @@ public static void SetContext(PartyGroup partyGroup, ulong uniqueId, Tuple SetAndGetContext(PartyGroup partyGroup, ulong uniqueId, Tuple context) { lock (partyGroup.Contexts) diff --git a/Arrowgene.Ddon.GameServer/Handler/InstanceGetEnemySetListHandler.cs b/Arrowgene.Ddon.GameServer/Handler/InstanceGetEnemySetListHandler.cs index 07677b686..80308b65d 100644 --- a/Arrowgene.Ddon.GameServer/Handler/InstanceGetEnemySetListHandler.cs +++ b/Arrowgene.Ddon.GameServer/Handler/InstanceGetEnemySetListHandler.cs @@ -32,7 +32,8 @@ public override void Handle(GameClient client, StructurePacket