aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Player.cpp72
-rw-r--r--src/game/Player.h1
-rw-r--r--src/game/QuestDef.h1
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
};