From 00cfea3b46ba96227a010dbfa3dab931a95ef2b8 Mon Sep 17 00:00:00 2001 From: NoFantasy Date: Wed, 16 Sep 2009 13:57:47 +0200 Subject: [PATCH] [8506] Add check for IsAutoComplete() in SendPreparedQuest(). For cases where quest is repeatable but has Method!=0, QuestDetails must be sent instead of RequestItems. Some additional code cleanup. Signed-off-by: NoFantasy --- src/game/Player.cpp | 34 ++++++++++++++++++---------------- src/shared/revision_nr.h | 2 +- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index a9bcf0082..a6c3fe136 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -12131,34 +12131,36 @@ void Player::PrepareQuestMenu( uint64 guid ) } } -void Player::SendPreparedQuest( uint64 guid ) +void Player::SendPreparedQuest(uint64 guid) { QuestMenu& questMenu = PlayerTalkClass->GetQuestMenu(); - if( questMenu.Empty() ) + + if (questMenu.Empty()) return; - QuestMenuItem const& qmi0 = questMenu.GetItem( 0 ); + QuestMenuItem const& qmi0 = questMenu.GetItem(0); uint32 status = qmi0.m_qIcon; // single element case - if ( questMenu.MenuItemCount() == 1 ) + if (questMenu.MenuItemCount() == 1) { // Auto open -- maybe also should verify there is no greeting uint32 quest_id = qmi0.m_qId; Quest const* pQuest = objmgr.GetQuestTemplate(quest_id); - if ( pQuest ) + if (pQuest) { - if( status == DIALOG_STATUS_UNK2 && !GetQuestRewardStatus( quest_id ) ) - PlayerTalkClass->SendQuestGiverRequestItems( pQuest, guid, CanRewardQuest(pQuest, false), true ); - else if( status == DIALOG_STATUS_UNK2 ) - PlayerTalkClass->SendQuestGiverRequestItems( pQuest, guid, CanRewardQuest(pQuest, false), true ); - // Send completable on repeatable quest if player don't have quest - else if( pQuest->IsRepeatable() && !pQuest->IsDaily() ) - PlayerTalkClass->SendQuestGiverRequestItems( pQuest, guid, CanCompleteRepeatableQuest(pQuest), true ); + if (status == DIALOG_STATUS_UNK2 && !GetQuestRewardStatus(quest_id)) + PlayerTalkClass->SendQuestGiverRequestItems(pQuest, guid, CanRewardQuest(pQuest, false), true); + else if (status == DIALOG_STATUS_UNK2) + PlayerTalkClass->SendQuestGiverRequestItems(pQuest, guid, CanRewardQuest(pQuest, false), true); + // Send completable on repeatable and autoCompletable quest if player don't have quest + // TODO: verify if check for !pQuest->IsDaily() is really correct (possibly not) + else if (pQuest->IsAutoComplete() && pQuest->IsRepeatable() && !pQuest->IsDaily()) + PlayerTalkClass->SendQuestGiverRequestItems(pQuest, guid, CanCompleteRepeatableQuest(pQuest), true); else - PlayerTalkClass->SendQuestGiverQuestDetails( pQuest, guid, true ); + PlayerTalkClass->SendQuestGiverQuestDetails(pQuest, guid, true); } } // multiply entries @@ -12171,11 +12173,11 @@ void Player::SendPreparedQuest( uint64 guid ) // need pet case for some quests Creature *pCreature = ObjectAccessor::GetCreatureOrPetOrVehicle(*this,guid); - if( pCreature ) + if (pCreature) { uint32 textid = pCreature->GetNpcTextId(); GossipText const* gossiptext = objmgr.GetGossipText(textid); - if( !gossiptext ) + if (!gossiptext) { qe._Delay = 0; //TEXTEMOTE_MESSAGE; //zyg: player emote qe._Emote = 0; //TEXTEMOTE_HELLO; //zyg: NPC emote @@ -12217,7 +12219,7 @@ void Player::SendPreparedQuest( uint64 guid ) } } } - PlayerTalkClass->SendQuestGiverQuestList( qe, title, guid ); + PlayerTalkClass->SendQuestGiverQuestList(qe, title, guid); } } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 134d4456d..833cca0de 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 "8505" + #define REVISION_NR "8506" #endif // __REVISION_NR_H__