diff options
-rw-r--r-- | src/server/game/AI/CoreAI/UnitAI.h | 1 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.h | 3 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 12 | ||||
-rw-r--r-- | src/server/scripts/World/npcs_special.cpp | 2 |
7 files changed, 15 insertions, 24 deletions
diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index b6743b572cb..979fe4fe558 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -258,7 +258,6 @@ class UnitAI virtual void sGossipSelectCode(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/, char const* /*code*/) { } virtual void sQuestAccept(Player* /*player*/, Quest const* /*quest*/) { } virtual void sQuestSelect(Player* /*player*/, Quest const* /*quest*/) { } - virtual void sQuestComplete(Player* /*player*/, Quest const* /*quest*/) { } virtual void sQuestReward(Player* /*player*/, Quest const* /*quest*/, uint32 /*opt*/) { } virtual bool sOnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/) { return false; } virtual void sOnGameEvent(bool /*start*/, uint16 /*eventId*/) { } diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index e674bbfdaac..b0d5d4f8343 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -178,8 +178,7 @@ class SmartAI : public CreatureAI void sGossipSelect(Player* player, uint32 sender, uint32 action) override; void sGossipSelectCode(Player* player, uint32 sender, uint32 action, const char* code) override; void sQuestAccept(Player* player, Quest const* quest) override; - //void sQuestSelect(Player* player, Quest const* quest); - //void sQuestComplete(Player* player, Quest const* quest); + //void sQuestSelect(Player* player, Quest const* quest) override; void sQuestReward(Player* player, Quest const* quest, uint32 opt) override; bool sOnDummyEffect(Unit* caster, uint32 spellId, SpellEffIndex effIndex) override; void sOnGameEvent(bool start, uint16 eventId) override; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index c9ac4e73374..490412f5c60 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -16031,6 +16031,8 @@ void Player::SetQuestStatus(uint32 questId, QuestStatus status, bool update /*= if (update) SendQuestUpdate(questId); + + sScriptMgr->OnQuestStatusChange(this, questId, status); } void Player::RemoveActiveQuest(uint32 questId, bool update /*= true*/) diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index d4dc7a9ab0d..f7c3c8a2be6 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -491,9 +491,6 @@ void WorldSession::HandleQuestgiverCompleteQuest(WorldPacket& recvData) else // no items required _player->PlayerTalkClass->SendQuestGiverOfferReward(quest, guid, true); } - - if (Creature* creature = object->ToCreature()) - sScriptMgr->OnQuestComplete(_player, creature, quest); } void WorldSession::HandleQuestgiverQuestAutoLaunch(WorldPacket& /*recvPacket*/) diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index fa83c4b112d..daa4c36a442 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -774,17 +774,6 @@ bool ScriptMgr::OnQuestSelect(Player* player, Creature* creature, Quest const* q return tmpscript->OnQuestSelect(player, creature, quest); } -bool ScriptMgr::OnQuestComplete(Player* player, Creature* creature, Quest const* quest) -{ - ASSERT(player); - ASSERT(creature); - ASSERT(quest); - - GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, false); - player->PlayerTalkClass->ClearMenus(); - return tmpscript->OnQuestComplete(player, creature, quest); -} - bool ScriptMgr::OnQuestReward(Player* player, Creature* creature, Quest const* quest, uint32 opt) { ASSERT(player); @@ -1296,6 +1285,11 @@ 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) +{ + FOREACH_SCRIPT(PlayerScript)->OnQuestStatusChange(player, questId, status); +} + // Account void ScriptMgr::OnAccountLogin(uint32 accountId) { diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 615b1d3bb06..ea25d51dab2 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -446,10 +446,7 @@ class CreatureScript : public UnitScript, public UpdatableScript<Creature> // Called when a player selects a quest in the creature's quest menu. virtual bool OnQuestSelect(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/) { return false; } - // Called when a player completes a quest with the creature. - virtual bool OnQuestComplete(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/) { return false; } - - // Called when a player selects a quest reward. + // Called when a player completes a quest and is rewarded, opt is the selected item's index or 0 virtual bool OnQuestReward(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/, uint32 /*opt*/) { return false; } // Called when the dialog status between a player and the creature is requested. @@ -484,7 +481,7 @@ class GameObjectScript : public ScriptObject, public UpdatableScript<GameObject> // Called when a player accepts a quest from the gameobject. virtual bool OnQuestAccept(Player* /*player*/, GameObject* /*go*/, Quest const* /*quest*/) { return false; } - // Called when a player selects a quest reward. + // Called when a player completes a quest and is rewarded, opt is the selected item's index or 0 virtual bool OnQuestReward(Player* /*player*/, GameObject* /*go*/, Quest const* /*quest*/, uint32 /*opt*/) { return false; } // Called when the dialog status between a player and the gameobject is requested. @@ -769,6 +766,9 @@ class PlayerScript : public UnitScript // Called when a player changes to a new map (after moving to new map) virtual void OnMapChanged(Player* /*player*/) { } + + // Called after a player's quest status has been changed + virtual void OnQuestStatusChange(Player* /*player*/, uint32 /*questId*/, QuestStatus /*status*/) { } }; class AccountScript : public ScriptObject @@ -966,7 +966,6 @@ class ScriptMgr bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, const char* code); bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest); bool OnQuestSelect(Player* player, Creature* creature, Quest const* quest); - bool OnQuestComplete(Player* player, Creature* creature, Quest const* quest); bool OnQuestReward(Player* player, Creature* creature, Quest const* quest, uint32 opt); uint32 GetDialogStatus(Player* player, Creature* creature); CreatureAI* GetCreatureAI(Creature* creature); @@ -1075,6 +1074,7 @@ class ScriptMgr void OnPlayerSave(Player* player); void OnPlayerBindToInstance(Player* player, Difficulty difficulty, uint32 mapid, bool permanent); void OnPlayerUpdateZone(Player* player, uint32 newZone, uint32 newArea); + void OnQuestStatusChange(Player* player, uint32 questId, QuestStatus status); public: /* AccountScript */ diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index 3bb1ed87ef5..3d6d98072e6 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -397,7 +397,7 @@ public: return true; } - bool OnQuestComplete(Player* /*player*/, Creature* creature, Quest const* quest) override + bool OnQuestReward(Player* /*player*/, Creature* creature, Quest const* quest, uint32 /*opt*/) override { if (quest->GetQuestId() == QUEST_CLUCK) ENSURE_AI(npc_chicken_cluck::npc_chicken_cluckAI, creature->AI())->Reset(); |