diff --git a/src/game/Player.cpp b/src/game/Player.cpp index af7a13db8..03e281007 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -13790,6 +13790,21 @@ void Player::RewardQuest(Quest const *pQuest, uint32 reward, Object* questGiver, if (announce) SendQuestReward(pQuest, XP, questGiver); + bool handled = false; + + switch(questGiver->GetTypeId()) + { + case TYPEID_UNIT: + handled = sScriptMgr.OnQuestRewarded(this, (Creature*)questGiver, pQuest); + break; + case TYPEID_GAMEOBJECT: + handled = sScriptMgr.OnQuestRewarded(this, (GameObject*)questGiver, pQuest); + break; + } + + if (!handled && pQuest->GetQuestCompleteScript() != 0) + GetMap()->ScriptsStart(sQuestEndScripts, pQuest->GetQuestCompleteScript(), questGiver, this); + // cast spells after mark quest complete (some spells have quest completed state reqyurements in spell_area data) if (pQuest->GetRewSpellCast() > 0) CastSpell(this, pQuest->GetRewSpellCast(), true); @@ -14860,9 +14875,6 @@ void Player::SendQuestReward( Quest const *pQuest, uint32 XP, Object * questGive data << uint32(pQuest->GetBonusTalents()); // bonus talents data << uint32(0); // arena points GetSession()->SendPacket( &data ); - - if (pQuest->GetQuestCompleteScript() != 0) - GetMap()->ScriptsStart(sQuestEndScripts, pQuest->GetQuestCompleteScript(), questGiver, this); } void Player::SendQuestFailed( uint32 quest_id, InventoryChangeFailure reason) diff --git a/src/game/QuestHandler.cpp b/src/game/QuestHandler.cpp index f26cfcd90..366d8027d 100644 --- a/src/game/QuestHandler.cpp +++ b/src/game/QuestHandler.cpp @@ -54,7 +54,7 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode( WorldPacket & recv_data ) if (!cr_questgiver->IsHostileTo(_player)) // not show quest status to enemies { - dialogStatus = sScriptMgr.OnDialogStatus(_player, cr_questgiver); + dialogStatus = sScriptMgr.GetDialogStatus(_player, cr_questgiver); if (dialogStatus > DIALOG_STATUS_REWARD_REP) dialogStatus = getDialogStatus(_player, cr_questgiver, DIALOG_STATUS_NONE); @@ -64,7 +64,7 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode( WorldPacket & recv_data ) case TYPEID_GAMEOBJECT: { GameObject* go_questgiver = (GameObject*)questgiver; - dialogStatus = sScriptMgr.OnDialogStatus(_player, go_questgiver); + dialogStatus = sScriptMgr.GetDialogStatus(_player, go_questgiver); if (dialogStatus > DIALOG_STATUS_REWARD_REP) dialogStatus = getDialogStatus(_player, go_questgiver, DIALOG_STATUS_NONE); @@ -296,25 +296,9 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode( WorldPacket & recv_data ) { _player->RewardQuest( pQuest, reward, pObject ); - switch(pObject->GetTypeId()) - { - case TYPEID_UNIT: - if (!sScriptMgr.OnQuestChooseReward(_player, (Creature*)pObject, pQuest, reward)) - { - // Send next quest - if (Quest const* nextquest = _player->GetNextQuest(guid, pQuest)) - _player->PlayerTalkClass->SendQuestGiverQuestDetails(nextquest, guid, true); - } - break; - case TYPEID_GAMEOBJECT: - if (!sScriptMgr.OnQuestChooseReward(_player, (GameObject*)pObject, pQuest, reward)) - { - // Send next quest - if (Quest const* nextquest = _player->GetNextQuest(guid, pQuest)) - _player->PlayerTalkClass->SendQuestGiverQuestDetails(nextquest, guid, true); - } - break; - } + // Send next quest + if (Quest const* nextquest = _player->GetNextQuest(guid, pQuest)) + _player->PlayerTalkClass->SendQuestGiverQuestDetails(nextquest, guid, true); } else _player->PlayerTalkClass->SendQuestGiverOfferReward(pQuest, guid, true); @@ -663,7 +647,7 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket if (!questgiver->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER)) continue; - dialogStatus = sScriptMgr.OnDialogStatus(_player, questgiver); + dialogStatus = sScriptMgr.GetDialogStatus(_player, questgiver); if (dialogStatus > DIALOG_STATUS_REWARD_REP) dialogStatus = getDialogStatus(_player, questgiver, DIALOG_STATUS_NONE); @@ -682,7 +666,7 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket if (questgiver->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER) continue; - dialogStatus = sScriptMgr.OnDialogStatus(_player, questgiver); + dialogStatus = sScriptMgr.GetDialogStatus(_player, questgiver); if (dialogStatus > DIALOG_STATUS_REWARD_REP) dialogStatus = getDialogStatus(_player, questgiver, DIALOG_STATUS_NONE); diff --git a/src/game/ScriptMgr.cpp b/src/game/ScriptMgr.cpp index f077621ea..da3731542 100644 --- a/src/game/ScriptMgr.cpp +++ b/src/game/ScriptMgr.cpp @@ -53,11 +53,10 @@ ScriptMgr::ScriptMgr() : m_pOnQuestAccept(NULL), m_pOnGOQuestAccept(NULL), m_pOnItemQuestAccept(NULL), - m_pOnQuestComplete(NULL), - m_pOnQuestChooseReward(NULL), - m_pOnGOQuestChooseReward(NULL), - m_pOnNPCDialogStatus(NULL), - m_pOnGODialogStatus(NULL), + m_pOnQuestRewarded(NULL), + m_pOnGOQuestRewarded(NULL), + m_pGetNPCDialogStatus(NULL), + m_pGetGODialogStatus(NULL), m_pOnGOUse(NULL), m_pOnItemUse(NULL), m_pOnAreaTrigger(NULL), @@ -967,35 +966,30 @@ bool ScriptMgr::OnQuestAccept(Player* pPlayer, Item* pItem, Quest const* pQuest) return m_pOnItemQuestAccept != NULL && m_pOnItemQuestAccept(pPlayer, pItem, pQuest); } -bool ScriptMgr::OnQuestComplete(Player* pPlayer, Creature* pCreature, Quest const* pQuest) +bool ScriptMgr::OnQuestRewarded(Player* pPlayer, Creature* pCreature, Quest const* pQuest) { - return m_pOnQuestComplete != NULL && m_pOnQuestComplete(pPlayer, pCreature, pQuest); + return m_pOnQuestRewarded != NULL && m_pOnQuestRewarded(pPlayer, pCreature, pQuest); } -bool ScriptMgr::OnQuestChooseReward(Player* pPlayer, Creature* pCreature, Quest const* pQuest, uint32 opt) +bool ScriptMgr::OnQuestRewarded(Player* pPlayer, GameObject* pGameObject, Quest const* pQuest) { - return m_pOnQuestChooseReward != NULL && m_pOnQuestChooseReward(pPlayer, pCreature, pQuest, opt); + return m_pOnGOQuestRewarded != NULL && m_pOnGOQuestRewarded(pPlayer, pGameObject, pQuest); } -bool ScriptMgr::OnQuestChooseReward(Player* pPlayer, GameObject* pGameObject, Quest const* pQuest, uint32 opt) +uint32 ScriptMgr::GetDialogStatus(Player* pPlayer, Creature* pCreature) { - return m_pOnGOQuestChooseReward != NULL && m_pOnGOQuestChooseReward(pPlayer, pGameObject, pQuest, opt); -} - -uint32 ScriptMgr::OnDialogStatus(Player* pPlayer, Creature* pCreature) -{ - if (!m_pOnNPCDialogStatus) + if (!m_pGetNPCDialogStatus) return 100; - return m_pOnNPCDialogStatus(pPlayer, pCreature); + return m_pGetNPCDialogStatus(pPlayer, pCreature); } -uint32 ScriptMgr::OnDialogStatus(Player* pPlayer, GameObject* pGameObject) +uint32 ScriptMgr::GetDialogStatus(Player* pPlayer, GameObject* pGameObject) { - if (!m_pOnGODialogStatus) + if (!m_pGetGODialogStatus) return 100; - return m_pOnGODialogStatus(pPlayer, pGameObject); + return m_pGetGODialogStatus(pPlayer, pGameObject); } bool ScriptMgr::OnGameObjectUse(Player* pPlayer, GameObject* pGameObject) @@ -1013,7 +1007,7 @@ bool ScriptMgr::OnAreaTrigger(Player* pPlayer, AreaTriggerEntry const* atEntry) return m_pOnAreaTrigger != NULL && m_pOnAreaTrigger(pPlayer, atEntry); } -bool ScriptMgr::OnProcessEvent(uint32 eventId, WorldObject* pSource, WorldObject* pTarget, bool isStart) +bool ScriptMgr::OnProcessEvent(uint32 eventId, Object* pSource, Object* pTarget, bool isStart) { return m_pOnProcessEvent != NULL && m_pOnProcessEvent(eventId, pSource, pTarget, isStart); } @@ -1066,11 +1060,10 @@ bool ScriptMgr::LoadScriptLibrary(const char* libName) GetScriptHookPtr(m_pOnQuestAccept, "QuestAccept"); GetScriptHookPtr(m_pOnGOQuestAccept, "GOQuestAccept"); GetScriptHookPtr(m_pOnItemQuestAccept, "ItemQuestAccept"); - GetScriptHookPtr(m_pOnQuestComplete, "QuestComplete"); - GetScriptHookPtr(m_pOnQuestChooseReward, "QuestChooseReward"); - GetScriptHookPtr(m_pOnGOQuestChooseReward, "GOQuestChooseReward"); - GetScriptHookPtr(m_pOnNPCDialogStatus, "NPCDialogStatus"); - GetScriptHookPtr(m_pOnGODialogStatus, "GODialogStatus"); + GetScriptHookPtr(m_pOnQuestRewarded, "QuestRewarded"); + GetScriptHookPtr(m_pOnGOQuestRewarded, "GOQuestRewarded"); + GetScriptHookPtr(m_pGetNPCDialogStatus, "GetNPCDialogStatus"); + GetScriptHookPtr(m_pGetGODialogStatus, "GetGODialogStatus"); GetScriptHookPtr(m_pOnGOUse, "GOUse"); GetScriptHookPtr(m_pOnItemUse, "ItemUse"); GetScriptHookPtr(m_pOnAreaTrigger, "AreaTrigger"); @@ -1116,11 +1109,10 @@ void ScriptMgr::UnloadScriptLibrary() m_pOnQuestAccept = NULL; m_pOnGOQuestAccept = NULL; m_pOnItemQuestAccept = NULL; - m_pOnQuestComplete = NULL; - m_pOnQuestChooseReward = NULL; - m_pOnGOQuestChooseReward = NULL; - m_pOnNPCDialogStatus = NULL; - m_pOnGODialogStatus = NULL; + m_pOnQuestRewarded = NULL; + m_pOnGOQuestRewarded = NULL; + m_pGetNPCDialogStatus = NULL; + m_pGetGODialogStatus = NULL; m_pOnGOUse = NULL; m_pOnItemUse = NULL; m_pOnAreaTrigger = NULL; diff --git a/src/game/ScriptMgr.h b/src/game/ScriptMgr.h index 8e9ee6f9b..7adfbfc87 100644 --- a/src/game/ScriptMgr.h +++ b/src/game/ScriptMgr.h @@ -32,6 +32,7 @@ class GameObject; class InstanceData; class Item; class Map; +class Object; class Player; class Quest; class SpellCastTargets; @@ -342,15 +343,14 @@ public: bool OnQuestAccept(Player* pPlayer, Creature* pCreature, Quest const* pQuest); bool OnQuestAccept(Player* pPlayer, GameObject* pGameObject, Quest const* pQuest); bool OnQuestAccept(Player* pPlayer, Item* pItem, Quest const* pQuest); - bool OnQuestComplete(Player* pPlayer, Creature* pCreature, Quest const* pQuest); - bool OnQuestChooseReward(Player* pPlayer, Creature* pCreature, Quest const* pQuest, uint32 opt); - bool OnQuestChooseReward(Player* pPlayer, GameObject* pGameObject, Quest const* pQuest, uint32 opt); - uint32 OnDialogStatus(Player* pPlayer, Creature* pCreature); - uint32 OnDialogStatus(Player* pPlayer, GameObject* pGameObject); + bool OnQuestRewarded(Player* pPlayer, Creature* pCreature, Quest const* pQuest); + bool OnQuestRewarded(Player* pPlayer, GameObject* pGameObject, Quest const* pQuest); + uint32 GetDialogStatus(Player* pPlayer, Creature* pCreature); + uint32 GetDialogStatus(Player* pPlayer, GameObject* pGameObject); bool OnGameObjectUse(Player* pPlayer, GameObject* pGameObject); bool OnItemUse(Player* pPlayer, Item* pItem, SpellCastTargets const& targets); bool OnAreaTrigger(Player* pPlayer, AreaTriggerEntry const* atEntry); - bool OnProcessEvent(uint32 eventId, WorldObject* pSource, WorldObject* pTarget, bool isStart); + bool OnProcessEvent(uint32 eventId, Object* pSource, Object* pTarget, bool isStart); bool OnEffectDummy(Unit* pCaster, uint32 spellId, SpellEffectIndex effIndex, Creature* pTarget); bool OnEffectDummy(Unit* pCaster, uint32 spellId, SpellEffectIndex effIndex, GameObject* pTarget); bool OnEffectDummy(Unit* pCaster, uint32 spellId, SpellEffectIndex effIndex, Item* pTarget); @@ -391,16 +391,15 @@ private: bool (MANGOS_IMPORT* m_pOnGOGossipSelectWithCode) (Player*, GameObject*, uint32, uint32, const char*); bool (MANGOS_IMPORT* m_pOnQuestAccept) (Player*, Creature*, Quest const*); bool (MANGOS_IMPORT* m_pOnGOQuestAccept) (Player*, GameObject*, Quest const*); - bool (MANGOS_IMPORT* m_pOnItemQuestAccept) (Player*, Item*pItem, Quest const*); - bool (MANGOS_IMPORT* m_pOnQuestComplete) (Player*, Creature* pCreature, Quest const*); - bool (MANGOS_IMPORT* m_pOnQuestChooseReward) (Player*, Creature*, Quest const*, uint32); - bool (MANGOS_IMPORT* m_pOnGOQuestChooseReward) (Player*, GameObject*, Quest const*, uint32); - uint32 (MANGOS_IMPORT* m_pOnNPCDialogStatus) (Player*, Creature*); - uint32 (MANGOS_IMPORT* m_pOnGODialogStatus) (Player*, GameObject*); + bool (MANGOS_IMPORT* m_pOnItemQuestAccept) (Player*, Item*, Quest const*); + bool (MANGOS_IMPORT* m_pOnQuestRewarded) (Player*, Creature*, Quest const*); + bool (MANGOS_IMPORT* m_pOnGOQuestRewarded) (Player*, GameObject*, Quest const*); + uint32 (MANGOS_IMPORT* m_pGetNPCDialogStatus) (Player*, Creature*); + uint32 (MANGOS_IMPORT* m_pGetGODialogStatus) (Player*, GameObject*); bool (MANGOS_IMPORT* m_pOnGOUse) (Player*, GameObject*); bool (MANGOS_IMPORT* m_pOnItemUse) (Player*, Item*, SpellCastTargets const&); bool (MANGOS_IMPORT* m_pOnAreaTrigger) (Player*, AreaTriggerEntry const*); - bool (MANGOS_IMPORT* m_pOnProcessEvent)(uint32, WorldObject*, WorldObject*, bool); + bool (MANGOS_IMPORT* m_pOnProcessEvent) (uint32, Object*, Object*, bool); bool (MANGOS_IMPORT* m_pOnEffectDummyCreature) (Unit*, uint32, SpellEffectIndex, Creature*); bool (MANGOS_IMPORT* m_pOnEffectDummyGO) (Unit*, uint32, SpellEffectIndex, GameObject*); bool (MANGOS_IMPORT* m_pOnEffectDummyItem) (Unit*, uint32, SpellEffectIndex, Item*); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index b37cd0da2..759dff52f 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "10937" + #define REVISION_NR "10938" #endif // __REVISION_NR_H__ diff --git a/win/VC80/game.vcproj b/win/VC80/game.vcproj index 937f7fb4d..5a15b4615 100644 --- a/win/VC80/game.vcproj +++ b/win/VC80/game.vcproj @@ -909,14 +909,6 @@ RelativePath="..\..\src\game\QuestHandler.cpp" > - - - - diff --git a/win/VC90/game.vcproj b/win/VC90/game.vcproj index 7d6b96eb8..cc3fee88e 100644 --- a/win/VC90/game.vcproj +++ b/win/VC90/game.vcproj @@ -902,14 +902,6 @@ RelativePath="..\..\src\game\QuestHandler.cpp" > - - - -