diff --git a/Maple2.Server.Game/Manager/Field/FieldManager/DungeonFieldManager.cs b/Maple2.Server.Game/Manager/Field/FieldManager/DungeonFieldManager.cs index 5b3d9244..0a212053 100644 --- a/Maple2.Server.Game/Manager/Field/FieldManager/DungeonFieldManager.cs +++ b/Maple2.Server.Game/Manager/Field/FieldManager/DungeonFieldManager.cs @@ -64,6 +64,8 @@ public void ChangeState(DungeonState state) { } player.Session.Dungeon.CompleteDungeon(clearTimestamp); + player.Session.ConditionUpdate(ConditionType.dungeon_clear, + codeLong: DungeonId); } } diff --git a/Maple2.Server.Game/Trigger/TriggerContext.Player.cs b/Maple2.Server.Game/Trigger/TriggerContext.Player.cs index 557c99d4..186c2844 100644 --- a/Maple2.Server.Game/Trigger/TriggerContext.Player.cs +++ b/Maple2.Server.Game/Trigger/TriggerContext.Player.cs @@ -247,22 +247,24 @@ public bool QuestUserDetected(int[] boxIds, int[] questIds, int[] questStates, i continue; } - switch (questStates[0]) { - case 1: // Started - if (quest.State == QuestState.Started) { - return !negate; - } - break; - case 2: // Started and Can Complete - if (quest.State == QuestState.Started && player.Session.Quest.CanComplete(quest)) { - return !negate; - } - break; - case 3: // Completed - if (quest.State == QuestState.Completed) { - return !negate; - } - break; + foreach (int questState in questStates) { + switch (questState) { + case 1: // Started (but NOT ready to complete) + if (quest.State == QuestState.Started && !player.Session.Quest.CanComplete(quest)) { + return !negate; + } + break; + case 2: // Started and Can Complete + if (quest.State == QuestState.Started && player.Session.Quest.CanComplete(quest)) { + return !negate; + } + break; + case 3: // Completed + if (quest.State == QuestState.Completed) { + return !negate; + } + break; + } } } } diff --git a/Maple2.Server.Game/Util/ConditionUtil.cs b/Maple2.Server.Game/Util/ConditionUtil.cs index 580cde34..dfe5e813 100644 --- a/Maple2.Server.Game/Util/ConditionUtil.cs +++ b/Maple2.Server.Game/Util/ConditionUtil.cs @@ -86,6 +86,7 @@ private static bool CheckCode(this ConditionMetadata.Parameters code, GameSessio case ConditionType.quest_accept: case ConditionType.quest_clear_by_chapter: case ConditionType.quest_clear: + case ConditionType.dungeon_clear: case ConditionType.buff: case ConditionType.enchant_result: case ConditionType.dialogue: