Core/Scripts: Enhance quest status hook by making it catch more status changes (#17865)

(cherry picked from commit c52566a888)
This commit is contained in:
Rochet2
2016-09-09 22:11:36 +03:00
committed by joschiwald
parent 9710c808d7
commit 117b45d768
6 changed files with 15 additions and 5 deletions

View File

@@ -14864,6 +14864,8 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
// add to Quest Tracker
CharacterDatabase.Execute(stmt);
}
sScriptMgr->OnQuestStatusChange(this, quest_id);
}
void Player::CompleteQuest(uint32 quest_id)
@@ -15204,6 +15206,8 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
//lets remove flag for delayed teleports
SetCanDelayTeleport(false);
sScriptMgr->OnQuestStatusChange(this, quest_id);
}
void Player::FailQuest(uint32 questId)
@@ -15854,7 +15858,7 @@ void Player::SetQuestStatus(uint32 questId, QuestStatus status, bool update /*=
if (update)
SendQuestUpdate(questId);
sScriptMgr->OnQuestStatusChange(this, questId, status);
sScriptMgr->OnQuestStatusChange(this, questId);
}
void Player::RemoveActiveQuest(uint32 questId, bool update /*= true*/)

View File

@@ -462,6 +462,8 @@ void WorldSession::HandleQuestLogRemoveQuest(WorldPackets::Quest::QuestLogRemove
// add to Quest Tracker
CharacterDatabase.Execute(stmt);
}
sScriptMgr->OnQuestStatusChange(_player, questId);
}
_player->SetQuestSlot(packet.Entry, 0);

View File

@@ -2219,9 +2219,9 @@ void ScriptMgr::OnPlayerUpdateZone(Player* player, uint32 newZone, uint32 newAre
FOREACH_SCRIPT(PlayerScript)->OnUpdateZone(player, newZone, newArea);
}
void ScriptMgr::OnQuestStatusChange(Player* player, uint32 questId, QuestStatus status)
void ScriptMgr::OnQuestStatusChange(Player* player, uint32 questId)
{
FOREACH_SCRIPT(PlayerScript)->OnQuestStatusChange(player, questId, status);
FOREACH_SCRIPT(PlayerScript)->OnQuestStatusChange(player, questId);
}
void ScriptMgr::OnMovieComplete(Player* player, uint32 movieId)

View File

@@ -744,7 +744,7 @@ class TC_GAME_API PlayerScript : public UnitScript
virtual void OnMapChanged(Player* /*player*/) { }
// Called after a player's quest status has been changed
virtual void OnQuestStatusChange(Player* /*player*/, uint32 /*questId*/, QuestStatus /*status*/) { }
virtual void OnQuestStatusChange(Player* /*player*/, uint32 /*questId*/) { }
// Called when a player completes a movie
virtual void OnMovieComplete(Player* /*player*/, uint32 /*movieId*/) { }
@@ -1129,7 +1129,7 @@ class TC_GAME_API ScriptMgr
void OnPlayerSave(Player* player);
void OnPlayerBindToInstance(Player* player, Difficulty difficulty, uint32 mapid, bool permanent, uint8 extendState);
void OnPlayerUpdateZone(Player* player, uint32 newZone, uint32 newArea);
void OnQuestStatusChange(Player* player, uint32 questId, QuestStatus status);
void OnQuestStatusChange(Player* player, uint32 questId);
void OnMovieComplete(Player* player, uint32 movieId);
public: /* AccountScript */

View File

@@ -4472,6 +4472,8 @@ void Spell::EffectQuestClear(SpellEffIndex /*effIndex*/)
player->RemoveActiveQuest(quest_id, false);
player->RemoveRewardedQuest(quest_id);
sScriptMgr->OnQuestStatusChange(player, quest_id);
}
void Spell::EffectSendTaxi(SpellEffIndex /*effIndex*/)

View File

@@ -146,6 +146,8 @@ public:
player->RemoveActiveQuest(entry, false);
player->RemoveRewardedQuest(entry);
sScriptMgr->OnQuestStatusChange(player, entry);
handler->SendSysMessage(LANG_COMMAND_QUEST_REMOVED);
return true;
}