diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Player.cpp | 72 | ||||
-rw-r--r-- | src/game/Player.h | 1 | ||||
-rw-r--r-- | src/game/QuestDef.h | 1 |
3 files changed, 34 insertions, 40 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 6e758df7a77..45159fadb6d 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -1151,8 +1151,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 { @@ -13189,41 +13189,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; + if (pQuest->HasFlag(QUEST_MANGOS_FLAGS_TIMED)) + { + QuestStatusData& q_status = mQuestStatus[questId]; - IncompleteQuest( quest_id ); + q_status.m_timer = 0; - uint16 log_slot = FindQuestSlot( quest_id ); - if( log_slot < MAX_QUEST_LOG_SIZE) - { - SetQuestSlotTimer(log_slot, 1 ); - SetQuestSlotState(log_slot,QUEST_STATE_FAIL); + SendQuestTimerFailed(questId); } - SendQuestTimerFailed( quest_id ); + else + SendQuestFailed(questId); } } @@ -13672,21 +13661,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_TRINITY_FLAGS_TIMED ) ) + if (qInfo->HasFlag(QUEST_TRINITY_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(); @@ -15631,16 +15621,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 cc0cc83b3b0..9196d9daad8 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1222,7 +1222,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 412c66cf9fd..264acff95b8 100644 --- a/src/game/QuestDef.h +++ b/src/game/QuestDef.h @@ -99,6 +99,7 @@ enum QuestStatus //QUEST_STATUS_UNAVAILABLE = 2, QUEST_STATUS_INCOMPLETE = 3, //QUEST_STATUS_AVAILABLE = 4, + QUEST_STATUS_FAILED = 5, MAX_QUEST_STATUS }; |