mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 22:37:03 +00:00
[8355] Implement QUEST_STATUS_FAILED and simplify related code.
Use FailQuest for all quests that can fail and remove no longer needed function FailedTimedQuest. Signed-off-by: NoFantasy <nofantasy@nf.no>
This commit is contained in:
parent
74a9624cc3
commit
88cf55928c
4 changed files with 36 additions and 42 deletions
|
|
@ -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]);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue