From b000fdca70547a3e1963292e39ff9ebb596e099a Mon Sep 17 00:00:00 2001 From: joschiwald Date: Thu, 6 Feb 2014 21:23:18 +0100 Subject: Core/Entities: allow interaction with gameobject questgivers if player can take or return quests Closes #11269 Closes #8898 Closes #10204 Closes #11410 Closes #7053 Closes #6189 Closes #9474 --- src/server/game/Entities/GameObject/GameObject.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/server/game/Entities/GameObject') diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index e326e0155c1..e3c8c9c8136 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -986,9 +986,17 @@ bool GameObject::ActivateToQuest(Player* target) const switch (GetGoType()) { - // scan GO chest with loot including quest items + case GAMEOBJECT_TYPE_QUESTGIVER: + { + GameObject* go = const_cast(this); + QuestGiverStatus questStatus = target->GetQuestDialogStatus(go); + if (questStatus > DIALOG_STATUS_UNAVAILABLE) + return true; + break; + } case GAMEOBJECT_TYPE_CHEST: { + // scan GO chest with loot including quest items if (LootTemplates_Gameobject.HaveQuestLootForPlayer(GetGOInfo()->GetLootId(), target)) { if (Battleground const* bg = target->GetBattleground()) @@ -2148,6 +2156,10 @@ void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* t int16 pathProgress = -1; switch (GetGoType()) { + case GAMEOBJECT_TYPE_QUESTGIVER: + if (ActivateToQuest(target)) + dynFlags |= GO_DYNFLAG_LO_ACTIVATE; + break; case GAMEOBJECT_TYPE_CHEST: case GAMEOBJECT_TYPE_GOOBER: if (ActivateToQuest(target)) -- cgit v1.2.3