aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/QuestHandler.cpp
diff options
context:
space:
mode:
authorVincent-Michael <Vincent_Michael@gmx.de>2013-08-07 11:59:51 +0200
committerVincent-Michael <Vincent_Michael@gmx.de>2013-08-07 11:59:51 +0200
commitc0fc0f237f7e85ab3c5cc422fea7a1000fa72b23 (patch)
tree8f9ba881f1e2eb5e58a712afbeb9bb0cb5753e35 /src/server/game/Handlers/QuestHandler.cpp
parent0c96062687475191685d07b014e888ffcfbf5534 (diff)
parent33f8c3ead4da07ff024a94b5e8cf0d05c2ebc23a (diff)
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts: src/server/game/Battlegrounds/Battleground.cpp src/server/game/Handlers/QuestHandler.cpp src/server/shared/DataStores/DBCFileLoader.h
Diffstat (limited to 'src/server/game/Handlers/QuestHandler.cpp')
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp167
1 files changed, 81 insertions, 86 deletions
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp
index c7bc141dd7f..6ce88249f0f 100644
--- a/src/server/game/Handlers/QuestHandler.cpp
+++ b/src/server/game/Handlers/QuestHandler.cpp
@@ -29,7 +29,6 @@
#include "ObjectAccessor.h"
#include "Group.h"
#include "Battleground.h"
-#include "BattlegroundAV.h"
#include "ScriptMgr.h"
#include "GameObjectAI.h"
@@ -523,7 +522,11 @@ void WorldSession::HandleQuestgiverCompleteQuest(WorldPacket& recvData)
TC_LOG_DEBUG(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_QUESTGIVER_COMPLETE_QUEST npc = %u, questId = %u", uint32(GUID_LOPART(playerGuid)), questId);
- Object* object = ObjectAccessor::GetObjectByTypeMask(*_player, playerGuid, TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT);
+ Quest const* quest = sObjectMgr->GetQuestTemplate(questId);
+ if (!quest)
+ return;
+
+ Object* object = ObjectAccessor::GetObjectByTypeMask(*_player, playerGuid, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT);
if (!object || !object->hasInvolvedQuest(questId))
return;
@@ -534,45 +537,33 @@ void WorldSession::HandleQuestgiverCompleteQuest(WorldPacket& recvData)
return;
}
- if (Quest const* quest = sObjectMgr->GetQuestTemplate(questId))
+ if (!_player->CanSeeStartQuest(quest) && _player->GetQuestStatus(questId) == QUEST_STATUS_NONE)
{
- if (autoCompleteMode && !quest->HasFlag(QUEST_FLAGS_AUTO_SUBMIT))
- {
- TC_LOG_ERROR(LOG_FILTER_NETWORKIO, "Possible hacking attempt: Player %s [playerGuid: %u] tried to complete questId [entry: %u] by auto-submit flag for quest witch not suport it.",
- _player->GetName().c_str(), _player->GetGUIDLow(), questId);
- return;
- }
+ TC_LOG_ERROR(LOG_FILTER_NETWORKIO, "Possible hacking attempt: Player %s [guid: %u] tried to complete quest [entry: %u] without being in possession of the quest!",
+ _player->GetName().c_str(), _player->GetGUIDLow(), questId);
+ return;
+ }
- if (!_player->CanSeeStartQuest(quest) && _player->GetQuestStatus(questId) == QUEST_STATUS_NONE)
- {
- TC_LOG_ERROR(LOG_FILTER_NETWORKIO, "Possible hacking attempt: Player %s [playerGuid: %u] tried to complete questId [entry: %u] without being in possession of the questId!",
- _player->GetName().c_str(), _player->GetGUIDLow(), questId);
- return;
- }
- /// @todo need a virtual function
- if (_player->InBattleground())
- if (Battleground* bg = _player->GetBattleground())
- if (bg->GetTypeID() == BATTLEGROUND_AV)
- bg->ToBattlegroundAV()->HandleQuestComplete(questId, _player);
+ if (Battleground* bg = _player->GetBattleground())
+ bg->HandleQuestComplete(questId, _player);
- if (_player->GetQuestStatus(questId) != QUEST_STATUS_COMPLETE)
- {
- if (quest->IsRepeatable())
- _player->PlayerTalkClass->SendQuestGiverRequestItems(quest, playerGuid, _player->CanCompleteRepeatableQuest(quest), false);
- else
- _player->PlayerTalkClass->SendQuestGiverRequestItems(quest, playerGuid, _player->CanRewardQuest(quest, false), false);
- }
+ if (_player->GetQuestStatus(questId) != QUEST_STATUS_COMPLETE)
+ {
+ if (quest->IsRepeatable())
+ _player->PlayerTalkClass->SendQuestGiverRequestItems(quest, playerGuid, _player->CanCompleteRepeatableQuest(quest), false);
else
- {
- if (quest->GetReqItemsCount()) // some items required
- _player->PlayerTalkClass->SendQuestGiverRequestItems(quest, playerGuid, _player->CanRewardQuest(quest, false), false);
- else // no items required
- _player->PlayerTalkClass->SendQuestGiverOfferReward(quest, playerGuid, !autoCompleteMode);
- }
-
- if (Creature* creature = object->ToCreature())
- sScriptMgr->OnQuestComplete(_player, creature, quest);
+ _player->PlayerTalkClass->SendQuestGiverRequestItems(quest, playerGuid, _player->CanRewardQuest(quest, false), false);
+ }
+ else
+ {
+ if (quest->GetReqItemsCount()) // some items required
+ _player->PlayerTalkClass->SendQuestGiverRequestItems(quest, playerGuid, _player->CanRewardQuest(quest, false), false);
+ else // no items required
+ _player->PlayerTalkClass->SendQuestGiverOfferReward(quest, playerGuid, true);
}
+
+ if (Creature* creature = object->ToCreature())
+ sScriptMgr->OnQuestComplete(_player, creature, quest);
}
void WorldSession::HandleQuestgiverQuestAutoLaunch(WorldPacket& /*recvPacket*/)
@@ -588,66 +579,70 @@ void WorldSession::HandlePushQuestToParty(WorldPacket& recvPacket)
if (!_player->CanShareQuest(questId))
return;
- TC_LOG_DEBUG(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_PUSHQUESTTOPARTY quest = %u", questId);
+ TC_LOG_DEBUG(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_PUSHQUESTTOPARTY questId = %u", questId);
- if (Quest const* quest = sObjectMgr->GetQuestTemplate(questId))
+ Quest const* quest = sObjectMgr->GetQuestTemplate(questId);
+ if (!quest)
+ return;
+
+ Player * const sender = GetPlayer();
+
+ Group* group = sender->GetGroup();
+ if (!group)
+ return;
+
+ for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
{
- if (Group* group = _player->GetGroup())
- {
- for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
- {
- Player* player = itr->GetSource();
+ Player* receiver = itr->GetSource();
- if (!player || player == _player) // skip self
- continue;
+ if (!receiver || receiver == sender)
+ continue;
- if (!player->SatisfyQuestStatus(quest, false))
- {
- _player->SendPushToPartyResponse(player, QUEST_PARTY_MSG_HAVE_QUEST);
- continue;
- }
+ if (!receiver->SatisfyQuestStatus(quest, false))
+ {
+ sender->SendPushToPartyResponse(receiver, QUEST_PARTY_MSG_HAVE_QUEST);
+ continue;
+ }
- if (player->GetQuestStatus(questId) == QUEST_STATUS_COMPLETE)
- {
- _player->SendPushToPartyResponse(player, QUEST_PARTY_MSG_FINISH_QUEST);
- continue;
- }
+ if (receiver->GetQuestStatus(questId) == QUEST_STATUS_COMPLETE)
+ {
+ sender->SendPushToPartyResponse(receiver, QUEST_PARTY_MSG_FINISH_QUEST);
+ continue;
+ }
- if (!player->CanTakeQuest(quest, false))
- {
- _player->SendPushToPartyResponse(player, QUEST_PARTY_MSG_CANT_TAKE_QUEST);
- continue;
- }
+ if (!receiver->CanTakeQuest(quest, false))
+ {
+ sender->SendPushToPartyResponse(receiver, QUEST_PARTY_MSG_CANT_TAKE_QUEST);
+ continue;
+ }
- if (!player->SatisfyQuestLog(false))
- {
- _player->SendPushToPartyResponse(player, QUEST_PARTY_MSG_LOG_FULL);
- continue;
- }
+ if (!receiver->SatisfyQuestLog(false))
+ {
+ sender->SendPushToPartyResponse(receiver, QUEST_PARTY_MSG_LOG_FULL);
+ continue;
+ }
- if (player->GetDivider() != 0)
- {
- _player->SendPushToPartyResponse(player, QUEST_PARTY_MSG_BUSY);
- continue;
- }
+ if (receiver->GetDivider() != 0)
+ {
+ sender->SendPushToPartyResponse(receiver, QUEST_PARTY_MSG_BUSY);
+ continue;
+ }
- _player->SendPushToPartyResponse(player, QUEST_PARTY_MSG_SHARING_QUEST);
+ sender->SendPushToPartyResponse(receiver, QUEST_PARTY_MSG_SHARING_QUEST);
- if (quest->IsAutoAccept() && player->CanAddQuest(quest, true) && player->CanTakeQuest(quest, true))
- {
- player->AddQuest(quest, _player);
- if (player->CanCompleteQuest(questId))
- player->CompleteQuest(questId);
- }
+ if (quest->IsAutoAccept() && receiver->CanAddQuest(quest, true) && receiver->CanTakeQuest(quest, true))
+ {
+ receiver->AddQuest(quest, sender);
+ if (receiver->CanCompleteQuest(questId))
+ receiver->CompleteQuest(questId);
+ }
- if ((quest->IsAutoComplete() && quest->IsRepeatable() && !quest->IsDailyOrWeekly()) || quest->HasFlag(QUEST_FLAGS_AUTOCOMPLETE))
- player->PlayerTalkClass->SendQuestGiverRequestItems(quest, _player->GetGUID(), player->CanCompleteRepeatableQuest(quest), true);
- else
- {
- player->SetDivider(_player->GetGUID());
- player->PlayerTalkClass->SendQuestGiverQuestDetails(quest, _player->GetGUID(), true);
- }
- }
+ if ((quest->IsAutoComplete() && quest->IsRepeatable() && !quest->IsDailyOrWeekly()) || quest->HasFlag(QUEST_FLAGS_AUTOCOMPLETE))
+ receiver->PlayerTalkClass->SendQuestGiverRequestItems(quest, sender->GetGUID(), receiver->CanCompleteRepeatableQuest(quest), true);
+ else
+ {
+ receiver->SetDivider(sender->GetGUID());
+ receiver->PlayerTalkClass->SendQuestGiverQuestDetails(quest, sender->GetGUID(), true);
}
}
}
@@ -669,7 +664,7 @@ void WorldSession::HandleQuestPushResult(WorldPacket& recvPacket)
WorldPacket data(MSG_QUEST_PUSH_RESULT, 8 + 4 + 1);
data << uint64(_player->GetGUID());
data << uint8(msg); // valid values: 0-8
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
_player->SetDivider(0);
}
}