mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Player: Added Player::SkipQuests helper to skip quests (without rewards)
This commit is contained in:
@@ -16334,6 +16334,54 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object const* questgiver) const
|
||||
return result;
|
||||
}
|
||||
|
||||
void Player::SkipQuests(std::vector<uint32> const& questIds)
|
||||
{
|
||||
bool updateVisibility = false;
|
||||
for (uint32 const& questId : questIds)
|
||||
{
|
||||
Quest const* quest = sObjectMgr->GetQuestTemplate(questId);
|
||||
if (!quest)
|
||||
return;
|
||||
|
||||
uint16 questSlot = FindQuestSlot(questId);
|
||||
QuestStatus oldStatus = GetQuestStatus(questSlot);
|
||||
|
||||
if (questSlot != MAX_QUEST_LOG_SIZE)
|
||||
{
|
||||
if (quest->GetLimitTime())
|
||||
RemoveTimedQuest(questId);
|
||||
|
||||
if (quest->HasFlag(QUEST_FLAGS_FLAGS_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(QUEST_FLAGS_UPDATE_PHASESHIFT))
|
||||
updateVisibility = PhasingHandler::OnConditionChange(this, false);
|
||||
|
||||
sScriptMgr->OnQuestStatusChange(this, questId);
|
||||
sScriptMgr->OnQuestStatusChange(this, quest, oldStatus, QUEST_STATUS_REWARDED);
|
||||
}
|
||||
|
||||
SendQuestGiverStatusMultiple();
|
||||
|
||||
// make full db save
|
||||
SaveToDB(false);
|
||||
|
||||
if (updateVisibility)
|
||||
UpdateObjectVisibility();
|
||||
}
|
||||
|
||||
// not used in Trinity, but used in scripting code
|
||||
uint16 Player::GetReqKillOrCastCurrentCount(uint32 quest_id, int32 entry) const
|
||||
{
|
||||
|
||||
@@ -1593,6 +1593,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
|
||||
void RemoveRewardedQuest(uint32 questId, bool update = true);
|
||||
void SendQuestUpdate(uint32 questId);
|
||||
QuestGiverStatus GetQuestDialogStatus(Object const* questGiver) const;
|
||||
void SkipQuests(std::vector<uint32> const& questIds); // removes quest from log, flags rewarded, but does not give any rewards to player
|
||||
|
||||
void SetDailyQuestStatus(uint32 quest_id);
|
||||
bool IsDailyQuestDone(uint32 quest_id) const;
|
||||
|
||||
Reference in New Issue
Block a user