diff --git a/Source/Game/Entities/Player/Player.Quest.cs b/Source/Game/Entities/Player/Player.Quest.cs index b74d2cc6c..fb5aab7e0 100644 --- a/Source/Game/Entities/Player/Player.Quest.cs +++ b/Source/Game/Entities/Player/Player.Quest.cs @@ -1255,7 +1255,7 @@ namespace Game.Entities PlayerTalkClass.ClearMenus(); questGiver.ToCreature()?.GetAI().OnQuestReward(this, quest, rewardType, rewardId); questGiver.ToGameObject()?.GetAI().OnQuestReward(this, quest, rewardType, rewardId); - } + } Global.ScriptMgr.OnQuestStatusChange(this, questId); Global.ScriptMgr.OnQuestStatusChange(this, quest, oldStatus, QuestStatus.Rewarded); @@ -1345,7 +1345,7 @@ namespace Game.Entities FailQuest(questId); } } - + public void AbandonQuest(uint questId) { Quest quest = Global.ObjectMgr.GetQuestTemplate(questId); @@ -2237,6 +2237,19 @@ namespace Game.Entities return GetQuestSlotObjectiveFlag(slot, objective.StorageIndex) ? 1 : 0; } + int GetQuestSlotObjectiveData(uint questId, uint objectiveId) + { + ushort slot = FindQuestSlot(questId); + if (slot >= SharedConst.MaxQuestLogSize) + return 0; + + QuestObjective obj = Global.ObjectMgr.GetQuestObjective(objectiveId); + if (obj == null) + return 0; + + return GetQuestSlotObjectiveData(slot, obj); + } + public void SetQuestSlot(ushort slot, uint quest_id) { var questLogField = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.QuestLog, slot); @@ -2811,6 +2824,23 @@ namespace Game.Entities return true; } + bool IsQuestObjectiveComplete(uint questId, uint objectiveId) + { + Quest quest = Global.ObjectMgr.GetQuestTemplate(questId); + if (quest == null) + return false; + + ushort slot = FindQuestSlot(questId); + if (slot >= SharedConst.MaxQuestLogSize) + return false; + + QuestObjective obj = Global.ObjectMgr.GetQuestObjective(objectiveId); + if (obj == null) + return false; + + return IsQuestObjectiveComplete(slot, quest, obj); + } + public bool IsQuestObjectiveProgressBarComplete(ushort slot, Quest quest) { float progress = 0.0f;