diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 417c87d45..ce5562109 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -13728,31 +13728,6 @@ void Player::AddQuest( Quest const *pQuest, Object *questGiver ) questStatusData.m_creatureOrGOcount[i] = 0; } - // remove start item if not need - if (questGiver && questGiver->isType(TYPEMASK_ITEM)) - { - // destroy not required for quest finish quest starting item - bool notRequiredItem = true; - for(int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i) - { - if (pQuest->ReqItemId[i] == questGiver->GetEntry()) - { - notRequiredItem = false; - break; - } - } - - if (pQuest->GetSrcItemId() == questGiver->GetEntry()) - notRequiredItem = false; - - if (notRequiredItem) - DestroyItem(((Item*)questGiver)->GetBagSlot(), ((Item*)questGiver)->GetSlot(), true); - } - - GiveQuestSourceItemIfNeed(pQuest); - - AdjustQuestReqItemCount( pQuest, questStatusData ); - if( pQuest->GetRepObjectiveFaction() ) if(FactionEntry const* factionEntry = sFactionStore.LookupEntry(pQuest->GetRepObjectiveFaction())) GetReputationMgr().SetVisible(factionEntry); @@ -13778,9 +13753,53 @@ void Player::AddQuest( Quest const *pQuest, Object *questGiver ) if (questStatusData.uState != QUEST_NEW) questStatusData.uState = QUEST_CHANGED; - //starting initial quest script - if(questGiver && pQuest->GetQuestStartScript()!=0) - GetMap()->ScriptsStart(sQuestStartScripts, pQuest->GetQuestStartScript(), questGiver, this); + // quest accept scripts + if (questGiver) + { + switch (questGiver->GetTypeId()) + { + case TYPEID_UNIT: + sScriptMgr.OnQuestAccept(this, (Creature*)questGiver, pQuest); + break; + case TYPEID_ITEM: + case TYPEID_CONTAINER: + sScriptMgr.OnQuestAccept(this, (Item*)questGiver, pQuest); + break; + case TYPEID_GAMEOBJECT: + sScriptMgr.OnQuestAccept(this, (GameObject*)questGiver, pQuest); + break; + } + + // starting initial DB quest script + if (pQuest->GetQuestStartScript() != 0) + GetMap()->ScriptsStart(sQuestStartScripts, pQuest->GetQuestStartScript(), questGiver, this); + + } + + // remove start item if not need + if (questGiver && questGiver->isType(TYPEMASK_ITEM)) + { + // destroy not required for quest finish quest starting item + bool notRequiredItem = true; + for(int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i) + { + if (pQuest->ReqItemId[i] == questGiver->GetEntry()) + { + notRequiredItem = false; + break; + } + } + + if (pQuest->GetSrcItemId() == questGiver->GetEntry()) + notRequiredItem = false; + + if (notRequiredItem) + DestroyItem(((Item*)questGiver)->GetBagSlot(), ((Item*)questGiver)->GetSlot(), true); + } + + GiveQuestSourceItemIfNeed(pQuest); + + AdjustQuestReqItemCount( pQuest, questStatusData ); // Some spells applied at quest activation SpellAreaForQuestMapBounds saBounds = sSpellMgr.GetSpellAreaForQuestMapBounds(quest_id,true); diff --git a/src/game/QuestHandler.cpp b/src/game/QuestHandler.cpp index 298cf3e18..219011e62 100644 --- a/src/game/QuestHandler.cpp +++ b/src/game/QuestHandler.cpp @@ -185,19 +185,6 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode( WorldPacket & recv_data ) _player->GetAchievementMgr().StartTimedAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, quest); - switch(pObject->GetTypeId()) - { - case TYPEID_UNIT: - sScriptMgr.OnQuestAccept(_player, (Creature*)pObject, qInfo); - break; - case TYPEID_ITEM: - case TYPEID_CONTAINER: - sScriptMgr.OnQuestAccept(_player, (Item*)pObject, qInfo); - break; - case TYPEID_GAMEOBJECT: - sScriptMgr.OnQuestAccept(_player, (GameObject*)pObject, qInfo); - break; - } _player->PlayerTalkClass->CloseGossip(); if( qInfo->GetSrcSpell() > 0 ) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 9ea1e0d68..de22f8db1 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 "11496" + #define REVISION_NR "11497" #endif // __REVISION_NR_H__