diff --git a/Arrowgene.Ddon.GameServer/Characters/QuestManager.cs b/Arrowgene.Ddon.GameServer/Characters/QuestManager.cs index 25351a2a..b452f958 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/Characters/StageManager.cs b/Arrowgene.Ddon.GameServer/Characters/StageManager.cs index d6681b27..3fcccf67 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 diff --git a/Arrowgene.Ddon.GameServer/Context/ContextManager.cs b/Arrowgene.Ddon.GameServer/Context/ContextManager.cs index 9e70abca..2b77db4a 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/GatheringItems/InstanceEventDropItemManager.cs b/Arrowgene.Ddon.GameServer/GatheringItems/InstanceEventDropItemManager.cs index d819cd0b..f3d0701b 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/InstanceGetEnemySetListHandler.cs b/Arrowgene.Ddon.GameServer/Handler/InstanceGetEnemySetListHandler.cs index 07677b68..80308b65 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 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 e7a05ed8..9456b89e 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; } diff --git a/Arrowgene.Ddon.GameServer/Quests/Quest.cs b/Arrowgene.Ddon.GameServer/Quests/Quest.cs index 94ae56b2..56fa62b3 100644 --- a/Arrowgene.Ddon.GameServer/Quests/Quest.cs +++ b/Arrowgene.Ddon.GameServer/Quests/Quest.cs @@ -511,7 +511,7 @@ public virtual void ResetEnemiesForBlock(GameClient client, QuestBlock questBloc foreach (var enemy in enemyGroup.Enemies) { var uid = ContextManager.CreateEnemyUID(enemy.Index, enemyGroup.StageId.ToStageLayoutId()); - client.Party.Contexts.Remove(uid); + ContextManager.RemoveContext(client.Party, uid); } S2CInstanceEnemyGroupResetNtc resetNtc = new S2CInstanceEnemyGroupResetNtc() @@ -534,7 +534,7 @@ public virtual void ResetEnemiesForStage(GameClient client, StageId stageId) foreach (var enemy in group.Enemies) { var uid = ContextManager.CreateEnemyUID(enemy.Index, group.StageId.ToStageLayoutId()); - client.Party.Contexts.Remove(uid); + ContextManager.RemoveContext(client.Party, uid); } S2CInstanceEnemyGroupResetNtc resetNtc = new S2CInstanceEnemyGroupResetNtc() diff --git a/Arrowgene.Ddon.Shared/Files/Assets/quests/q00020010.json b/Arrowgene.Ddon.Shared/Files/Assets/quests/q00020010.json index 38f5c700..d2b2228f 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 diff --git a/docs/quests/holiday_personal_quests.md b/docs/quests/holiday_personal_quests.md index 5d48d847..b5b2f579 100644 --- a/docs/quests/holiday_personal_quests.md +++ b/docs/quests/holiday_personal_quests.md @@ -4,6 +4,8 @@ There appears to be a set of holiday/seasonal personal quests. Some which don't ## Halloween +https://moreali523425.com/2018/10/02/post-5695/ + - quest\q60301001\quest\60301001\q60301001_st0200.qst.json (mentions pumpkins) - quest\q60301054\quest\60301054\q60301054_st0200.qst.json (also mentions pumpkins)