aboutsummaryrefslogtreecommitdiff
path: root/src/game/QuestHandler.cpp
diff options
context:
space:
mode:
authorn0n4m3 <none@none>2009-12-19 18:08:07 +0100
committern0n4m3 <none@none>2009-12-19 18:08:07 +0100
commite1e11ed43ea62e562eb13326c5b2e207ede2731a (patch)
tree09bf86cb7a8538de94ac47d7eb83ca25b33c4321 /src/game/QuestHandler.cpp
parentef2cbee517417814d2f5fe5afb4148fb8804b4b2 (diff)
Add basic support for QUEST_FLAGS_PARTY_ACCEPT (2). by NoFantasy
--HG-- branch : trunk
Diffstat (limited to 'src/game/QuestHandler.cpp')
-rw-r--r--src/game/QuestHandler.cpp53
1 files changed, 52 insertions, 1 deletions
diff --git a/src/game/QuestHandler.cpp b/src/game/QuestHandler.cpp
index cc8d3e4a87c..48ec382b6e8 100644
--- a/src/game/QuestHandler.cpp
+++ b/src/game/QuestHandler.cpp
@@ -158,6 +158,30 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode( WorldPacket & recv_data )
{
_player->AddQuest( qInfo, pObject );
+ if (qInfo->HasFlag(QUEST_FLAGS_PARTY_ACCEPT))
+ {
+ if (Group* pGroup = _player->GetGroup())
+ {
+ for(GroupReference *itr = pGroup->GetFirstMember(); itr != NULL; itr = itr->next())
+ {
+ Player* pPlayer = itr->getSource();
+
+ if (!pPlayer || pPlayer == _player) // not self
+ continue;
+
+ if (pPlayer->CanTakeQuest(qInfo, true))
+ {
+ pPlayer->SetDivider(_player->GetGUID());
+
+ //need confirmation that any gossip window will close
+ pPlayer->PlayerTalkClass->CloseGossip();
+
+ _player->SendQuestConfirmAccept(qInfo, pPlayer);
+ }
+ }
+ }
+ }
+
if ( _player->CanCompleteQuest( quest ) )
_player->CompleteQuest( quest );
@@ -375,7 +399,34 @@ void WorldSession::HandleQuestConfirmAccept(WorldPacket& recv_data)
uint32 quest;
recv_data >> quest;
- sLog.outDebug( "WORLD: Received CMSG_QUEST_CONFIRM_ACCEPT quest = %u",quest );
+ sLog.outDebug("WORLD: Received CMSG_QUEST_CONFIRM_ACCEPT quest = %u", quest);
+
+ if (const Quest* pQuest = objmgr.GetQuestTemplate(quest))
+ {
+ if (!pQuest->HasFlag(QUEST_FLAGS_PARTY_ACCEPT))
+ return;
+
+ Player* pOriginalPlayer = ObjectAccessor::FindPlayer(_player->GetDivider());
+
+ if (!pOriginalPlayer)
+ return;
+
+ if (pQuest->GetType() == QUEST_TYPE_RAID)
+ {
+ if (!_player->IsInSameRaidWith(pOriginalPlayer))
+ return;
+ }
+ else
+ {
+ if (!_player->IsInSameGroupWith(pOriginalPlayer))
+ return;
+ }
+
+ if (_player->CanAddQuest(pQuest, true))
+ _player->AddQuest(pQuest, NULL); // NULL, this prevent DB script from duplicate running
+
+ _player->SetDivider(0);
+ }
}
void WorldSession::HandleQuestgiverCompleteQuest(WorldPacket& recv_data)