diff --git a/src/game/Player.cpp b/src/game/Player.cpp index e83b25766..97d8a182d 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -1093,8 +1093,8 @@ void Player::Update( uint32 p_time ) if( q_status.m_timer <= p_time ) { uint32 quest_id = *iter; - ++iter; // current iter will be removed in FailTimedQuest - FailTimedQuest( quest_id ); + ++iter; // current iter will be removed in FailQuest + FailQuest(quest_id); } else { @@ -12790,41 +12790,30 @@ void Player::RewardQuest( Quest const *pQuest, uint32 reward, Object* questGiver SetCanDelayTeleport(false); } -void Player::FailQuest( uint32 quest_id ) +void Player::FailQuest(uint32 questId) { - if( quest_id ) + if (Quest const* pQuest = objmgr.GetQuestTemplate(questId)) { - IncompleteQuest( quest_id ); + SetQuestStatus(questId, QUEST_STATUS_FAILED); - uint16 log_slot = FindQuestSlot( quest_id ); - if( log_slot < MAX_QUEST_LOG_SIZE) + uint16 log_slot = FindQuestSlot(questId); + + if (log_slot < MAX_QUEST_LOG_SIZE) { - SetQuestSlotTimer(log_slot, 1 ); - SetQuestSlotState(log_slot,QUEST_STATE_FAIL); + SetQuestSlotTimer(log_slot, 1); + SetQuestSlotState(log_slot, QUEST_STATE_FAIL); } - SendQuestFailed( quest_id ); - } -} -void Player::FailTimedQuest( uint32 quest_id ) -{ - if( quest_id ) - { - QuestStatusData& q_status = mQuestStatus[quest_id]; - - q_status.m_timer = 0; - if (q_status.uState != QUEST_NEW) - q_status.uState = QUEST_CHANGED; - - IncompleteQuest( quest_id ); - - uint16 log_slot = FindQuestSlot( quest_id ); - if( log_slot < MAX_QUEST_LOG_SIZE) + if (pQuest->HasFlag(QUEST_MANGOS_FLAGS_TIMED)) { - SetQuestSlotTimer(log_slot, 1 ); - SetQuestSlotState(log_slot,QUEST_STATE_FAIL); + QuestStatusData& q_status = mQuestStatus[questId]; + + q_status.m_timer = 0; + + SendQuestTimerFailed(questId); } - SendQuestTimerFailed( quest_id ); + else + SendQuestFailed(questId); } } @@ -13273,21 +13262,22 @@ bool Player::CanShareQuest(uint32 quest_id) const return false; } -void Player::SetQuestStatus( uint32 quest_id, QuestStatus status ) +void Player::SetQuestStatus(uint32 quest_id, QuestStatus status) { - Quest const* qInfo = objmgr.GetQuestTemplate(quest_id); - if( qInfo ) + if (Quest const* qInfo = objmgr.GetQuestTemplate(quest_id)) { - if( status == QUEST_STATUS_NONE || status == QUEST_STATUS_INCOMPLETE || status == QUEST_STATUS_COMPLETE ) + if (status == QUEST_STATUS_NONE || status == QUEST_STATUS_INCOMPLETE || status == QUEST_STATUS_COMPLETE || status == QUEST_STATUS_FAILED) { - if( qInfo->HasFlag( QUEST_MANGOS_FLAGS_TIMED ) ) + if (qInfo->HasFlag(QUEST_MANGOS_FLAGS_TIMED)) m_timedquests.erase(qInfo->GetQuestId()); } QuestStatusData& q_status = mQuestStatus[quest_id]; q_status.m_status = status; - if (q_status.uState != QUEST_NEW) q_status.uState = QUEST_CHANGED; + + if (q_status.uState != QUEST_NEW) + q_status.uState = QUEST_CHANGED; } UpdateForQuestWorldObjects(); @@ -15128,16 +15118,20 @@ void Player::_LoadQuestStatus(QueryResult *result) questStatusData.uState = QUEST_UNCHANGED; // add to quest log - if( slot < MAX_QUEST_LOG_SIZE && - ( questStatusData.m_status == QUEST_STATUS_INCOMPLETE || - questStatusData.m_status == QUEST_STATUS_COMPLETE && - (!questStatusData.m_rewarded || pQuest->IsDaily()) ) ) + if (slot < MAX_QUEST_LOG_SIZE && + ((questStatusData.m_status == QUEST_STATUS_INCOMPLETE || + questStatusData.m_status == QUEST_STATUS_COMPLETE || + questStatusData.m_status == QUEST_STATUS_FAILED) && + (!questStatusData.m_rewarded || pQuest->IsDaily()))) { SetQuestSlot(slot, quest_id, quest_time); - if(questStatusData.m_status == QUEST_STATUS_COMPLETE) + if (questStatusData.m_status == QUEST_STATUS_COMPLETE) SetQuestSlotState(slot, QUEST_STATE_COMPLETE); + if (questStatusData.m_status == QUEST_STATUS_FAILED) + SetQuestSlotState(slot, QUEST_STATE_FAIL); + for(uint8 idx = 0; idx < QUEST_OBJECTIVES_COUNT; ++idx) if(questStatusData.m_creatureOrGOcount[idx]) SetQuestSlotCounter(slot, idx, questStatusData.m_creatureOrGOcount[idx]); diff --git a/src/game/Player.h b/src/game/Player.h index 659c8465b..0782088e2 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1280,7 +1280,6 @@ class MANGOS_DLL_SPEC Player : public Unit void IncompleteQuest( uint32 quest_id ); void RewardQuest( Quest const *pQuest, uint32 reward, Object* questGiver, bool announce = true ); void FailQuest( uint32 quest_id ); - void FailTimedQuest( uint32 quest_id ); bool SatisfyQuestSkillOrClass( Quest const* qInfo, bool msg ); bool SatisfyQuestLevel( Quest const* qInfo, bool msg ); bool SatisfyQuestLog( bool msg ); diff --git a/src/game/QuestDef.h b/src/game/QuestDef.h index 6a751c8bc..999e8de7a 100644 --- a/src/game/QuestDef.h +++ b/src/game/QuestDef.h @@ -97,6 +97,7 @@ enum QuestStatus QUEST_STATUS_UNAVAILABLE = 2, QUEST_STATUS_INCOMPLETE = 3, QUEST_STATUS_AVAILABLE = 4, + QUEST_STATUS_FAILED = 5, MAX_QUEST_STATUS }; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 521b0bdf2..c5dca9ee7 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 "8354" + #define REVISION_NR "8355" #endif // __REVISION_NR_H__