From 3deec204bfd04e57e13c9a8b71edcba97fbc19f7 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 5 Feb 2024 13:36:01 -0500 Subject: [PATCH] Core/Player: Added Player::SkipQuests helper to skip quests (without rewards) Port From (https://github.com/TrinityCore/TrinityCore/commit/e10f7e6d45a06af8eb809b7d134ed79829c09411) --- Source/Game/Entities/Player/Player.Quest.cs | 53 +++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/Source/Game/Entities/Player/Player.Quest.cs b/Source/Game/Entities/Player/Player.Quest.cs index 0408f7843..2c5844b4a 100644 --- a/Source/Game/Entities/Player/Player.Quest.cs +++ b/Source/Game/Entities/Player/Player.Quest.cs @@ -2138,6 +2138,59 @@ namespace Game.Entities return result; } + /// + /// Removes quest from log, flags rewarded, but does not give any rewards to player + /// + /// + public void SkipQuests(List questIds) + { + bool updateVisibility = false; + foreach (uint questId in questIds) + { + Quest quest = Global.ObjectMgr.GetQuestTemplate(questId); + if (quest == null) + return; + + ushort questSlot = FindQuestSlot(questId); + QuestStatus oldStatus = GetQuestStatus(questSlot); + + if (questSlot != SharedConst.MaxQuestLogSize) + { + if (quest.LimitTime != 0) + RemoveTimedQuest(questId); + + if (quest.HasFlag(QuestFlags.Pvp)) + { + pvpInfo.IsHostile = pvpInfo.IsInHostileArea || HasPvPForcingQuest(); + UpdatePvPState(); + } + + SetQuestSlot(questSlot, 0); + TakeQuestSourceItem(questId, true); // remove quest src item from player + AbandonQuest(questId); // remove all quest items player received before abandoning quest. Note, this does not remove normal drop items that happen to be quest requirements. + RemoveActiveQuest(questId); + } + + SetRewardedQuest(questId); + SendQuestUpdate(questId); + + if (!updateVisibility && quest.HasFlag(QuestFlags.UpdatePhaseshift)) + updateVisibility = PhasingHandler.OnConditionChange(this, false); + + Global.ScriptMgr.OnQuestStatusChange(this, questId); + Global.ScriptMgr.OnQuestStatusChange(this, quest, oldStatus, QuestStatus.Rewarded); + } + + SendQuestGiverStatusMultiple(); + + // make full db save + SaveToDB(false); + + if (updateVisibility) + UpdateObjectVisibility(); + } + + public ushort GetReqKillOrCastCurrentCount(uint quest_id, int entry) { Quest qInfo = Global.ObjectMgr.GetQuestTemplate(quest_id);