Add basic support for QUEST_FLAGS_PARTY_ACCEPT (2). by NoFantasy

--HG--
branch : trunk
This commit is contained in:
n0n4m3
2009-12-19 18:08:07 +01:00
parent ef2cbee517
commit e1e11ed43e
3 changed files with 80 additions and 1 deletions
+27
View File
@@ -14507,6 +14507,33 @@ void Player::SendCanTakeQuestResponse( uint32 msg )
sLog.outDebug("WORLD: Sent SMSG_QUESTGIVER_QUEST_INVALID"); sLog.outDebug("WORLD: Sent SMSG_QUESTGIVER_QUEST_INVALID");
} }
void Player::SendQuestConfirmAccept(const Quest* pQuest, Player* pReceiver)
{
if (pReceiver)
{
std::string strTitle = pQuest->GetTitle();
int loc_idx = pReceiver->GetSession()->GetSessionDbLocaleIndex();
if (loc_idx >= 0)
{
if (const QuestLocale* pLocale = objmgr.GetQuestLocale(pQuest->GetQuestId()))
{
if (pLocale->Title.size() > loc_idx && !pLocale->Title[loc_idx].empty())
strTitle = pLocale->Title[loc_idx];
}
}
WorldPacket data(SMSG_QUEST_CONFIRM_ACCEPT, (4 + strTitle.size() + 8));
data << uint32(pQuest->GetQuestId());
data << strTitle;
data << uint64(GetGUID());
pReceiver->GetSession()->SendPacket(&data);
sLog.outDebug("WORLD: Sent SMSG_QUEST_CONFIRM_ACCEPT");
}
}
void Player::SendPushToPartyResponse( Player *pPlayer, uint32 msg ) void Player::SendPushToPartyResponse( Player *pPlayer, uint32 msg )
{ {
if( pPlayer ) if( pPlayer )
+1
View File
@@ -1338,6 +1338,7 @@ class MANGOS_DLL_SPEC Player : public Unit
void SendQuestFailed( uint32 quest_id ); void SendQuestFailed( uint32 quest_id );
void SendQuestTimerFailed( uint32 quest_id ); void SendQuestTimerFailed( uint32 quest_id );
void SendCanTakeQuestResponse( uint32 msg ); void SendCanTakeQuestResponse( uint32 msg );
void SendQuestConfirmAccept(Quest const* pQuest, Player* pReceiver);
void SendPushToPartyResponse( Player *pPlayer, uint32 msg ); void SendPushToPartyResponse( Player *pPlayer, uint32 msg );
void SendQuestUpdateAddItem( Quest const* pQuest, uint32 item_idx, uint32 count ); void SendQuestUpdateAddItem( Quest const* pQuest, uint32 item_idx, uint32 count );
void SendQuestUpdateAddCreatureOrGo( Quest const* pQuest, uint64 guid, uint32 creatureOrGO_idx, uint32 old_count, uint32 add_count ); void SendQuestUpdateAddCreatureOrGo( Quest const* pQuest, uint64 guid, uint32 creatureOrGO_idx, uint32 old_count, uint32 add_count );
+52 -1
View File
@@ -158,6 +158,30 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode( WorldPacket & recv_data )
{ {
_player->AddQuest( qInfo, pObject ); _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 ) ) if ( _player->CanCompleteQuest( quest ) )
_player->CompleteQuest( quest ); _player->CompleteQuest( quest );
@@ -375,7 +399,34 @@ void WorldSession::HandleQuestConfirmAccept(WorldPacket& recv_data)
uint32 quest; uint32 quest;
recv_data >> 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) void WorldSession::HandleQuestgiverCompleteQuest(WorldPacket& recv_data)