aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-05-11 00:38:08 +0200
committerShauren <shauren.trinity@gmail.com>2021-05-11 00:38:08 +0200
commit3ad389efee4a24e2f94c9eb39aeddf83d320eaf0 (patch)
tree011d207e1620f081febdab5c2c1d044896350a54 /src/server/game
parent2d7411c9fad744ea794fbd7ea7fa89560f68018e (diff)
Core/Quests: Un-deprecate QUEST_SPECIAL_FLAGS_EXPLORATION_OR_EVENT
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Entities/Player/Player.cpp38
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Quests/QuestDef.h1
3 files changed, 21 insertions, 20 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index b01611ff9e3..a0d00acce80 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -15059,6 +15059,9 @@ bool Player::CanCompleteQuest(uint32 quest_id, uint32 ignoredQuestObjectiveId /*
}
}
+ if (qInfo->HasSpecialFlag(QUEST_SPECIAL_FLAGS_EXPLORATION_OR_EVENT) && !q_status.Explored)
+ return false;
+
if (qInfo->GetLimitTime() && q_status.Timer == 0)
return false;
@@ -15306,7 +15309,9 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
QuestStatus oldStatus = questStatusData.Status;
// check for repeatable quests status reset
+ questStatusData.Slot = log_slot;
questStatusData.Status = QUEST_STATUS_INCOMPLETE;
+ questStatusData.Explored = false;
GiveQuestSourceItem(quest);
AdjustQuestObjectiveProgress(quest);
@@ -15360,7 +15365,6 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
caster->CastSpell(this, spellInfo->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK).SetCastDifficulty(spellInfo->Difficulty));
}
- questStatusData.Slot = log_slot;
SetQuestSlot(log_slot, quest_id, qtime);
m_QuestStatusSave[quest_id] = QUEST_DEFAULT_SAVE_TYPE;
@@ -16701,23 +16705,16 @@ void Player::AreaExploredOrEventHappens(uint32 questId)
{
if (questId)
{
- uint16 log_slot = FindQuestSlot(questId);
- if (log_slot < MAX_QUEST_LOG_SIZE)
+ if (QuestStatusData* status = Trinity::Containers::MapGetValuePtr(m_QuestStatus, questId))
{
- TC_LOG_ERROR("entities.player.quest", "Player::AreaExploredOrEventHappens:Deprecated function called for quest %u", questId);
- /** @todo
- This function was previously used for area triggers but now those are a part of quest objective system
- Currently this function is used to complete quests with no objectives (needs verifying) so probably rename it?
-
- QuestStatusData& q_status = m_QuestStatus[questId];
-
- if (!q_status.Explored)
+ // Dont complete failed quest
+ if (!status->Explored && status->Status != QUEST_STATUS_FAILED)
{
- q_status.Explored = true;
+ status->Explored = true;
m_QuestStatusSave[questId] = QUEST_DEFAULT_SAVE_TYPE;
SendQuestComplete(questId);
- }**/
+ }
}
if (CanCompleteQuest(questId))
CompleteQuest(questId);
@@ -17193,12 +17190,12 @@ bool Player::IsQuestObjectiveProgressBarComplete(uint16 slot, Quest const* quest
return false;
}
-void Player::SendQuestComplete(Quest const* quest) const
+void Player::SendQuestComplete(uint32 questId) const
{
- if (quest)
+ if (questId)
{
WorldPackets::Quest::QuestUpdateComplete data;
- data.QuestID = quest->GetQuestId();
+ data.QuestID = questId;
SendDirectMessage(data.Write());
}
}
@@ -19301,8 +19298,8 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
{
uint16 slot = 0;
- //// 0 1 2
- //QueryResult* result = CharacterDatabase.PQuery("SELECT quest, status, timer WHERE guid = '%u' AND status <> 0", GetGUIDLow());
+ //// 0 1 2 3
+ //QueryResult* result = CharacterDatabase.PQuery("SELECT quest, status, explored, timer WHERE guid = '%u' AND status <> 0", GetGUIDLow());
if (result)
{
@@ -19328,6 +19325,8 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
GetName().c_str(), GetGUID().ToString().c_str(), quest_id, qstatus);
}
+ questStatusData.Explored = (fields[2].GetUInt8() > 0);
+
time_t quest_time = fields[2].GetInt64();
if (quest->GetLimitTime() && !GetQuestRewardStatus(quest_id))
@@ -21029,7 +21028,8 @@ void Player::_SaveQuestStatus(CharacterDatabaseTransaction& trans)
stmt->setUInt64(0, GetGUID().GetCounter());
stmt->setUInt32(1, statusItr->first);
stmt->setUInt8(2, uint8(qData.Status));
- stmt->setInt64(3, qData.Timer / IN_MILLISECONDS + GameTime::GetGameTime());
+ stmt->setBool(3, qData.Explored);
+ stmt->setInt64(4, qData.Timer / IN_MILLISECONDS + GameTime::GetGameTime());
trans->Append(stmt);
// Save objectives
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index ceaf1fc8b5a..f8b18c5e826 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1550,7 +1550,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
bool IsQuestObjectiveCompletable(uint16 slot, Quest const* quest, QuestObjective const& objective) const;
bool IsQuestObjectiveComplete(uint16 slot, Quest const* quest, QuestObjective const& objective) const;
bool IsQuestObjectiveProgressBarComplete(uint16 slot, Quest const* quest) const;
- void SendQuestComplete(Quest const* quest) const;
+ void SendQuestComplete(uint32 questId) const;
void SendQuestReward(Quest const* quest, Creature const* questGiver, uint32 xp, bool hideChatMessage) const;
void SendQuestFailed(uint32 questID, InventoryResult reason = EQUIP_ERR_OK) const;
void SendQuestTimerFailed(uint32 questID) const;
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index 9b74cbb978e..5ef9c68ea30 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -713,6 +713,7 @@ struct QuestStatusData
uint16 Slot = MAX_QUEST_LOG_SIZE;
QuestStatus Status = QUEST_STATUS_NONE;
uint32 Timer = 0;
+ bool Explored = false;
};
#endif