Core/Quests: Fix adding and removing quests
Closes #31812 Signed-off-by: luis <[email protected]>
This commit is contained in:
@@ -14833,7 +14833,9 @@ bool Player::CanRewardQuest(Quest const* quest, LootItemType rewardType, uint32
|
|||||||
|
|
||||||
void Player::AddQuest(Quest const* quest, Object* questGiver)
|
void Player::AddQuest(Quest const* quest, Object* questGiver)
|
||||||
{
|
{
|
||||||
uint16 log_slot = FindQuestSlot(0);
|
uint16 log_slot = 0;
|
||||||
|
while (GetQuestSlotQuestId(log_slot) && log_slot < MAX_QUEST_LOG_SIZE)
|
||||||
|
++log_slot;
|
||||||
|
|
||||||
if (log_slot >= MAX_QUEST_LOG_SIZE) // Player does not have any free slot in the quest log
|
if (log_slot >= MAX_QUEST_LOG_SIZE) // Player does not have any free slot in the quest log
|
||||||
return;
|
return;
|
||||||
@@ -15491,8 +15493,9 @@ bool Player::SatisfyQuestMaxLevel(Quest const* qInfo, bool msg) const
|
|||||||
bool Player::SatisfyQuestLog(bool msg) const
|
bool Player::SatisfyQuestLog(bool msg) const
|
||||||
{
|
{
|
||||||
// exist free slot
|
// exist free slot
|
||||||
if (FindQuestSlot(0) < MAX_QUEST_LOG_SIZE)
|
for (uint32 log_slot = 0; log_slot < MAX_QUEST_LOG_SIZE; ++log_slot)
|
||||||
return true;
|
if (!GetQuestSlotQuestId(log_slot))
|
||||||
|
return true;
|
||||||
|
|
||||||
if (msg)
|
if (msg)
|
||||||
{
|
{
|
||||||
@@ -16457,7 +16460,9 @@ void Player::SetQuestSlot(uint16 slot, uint32 quest_id)
|
|||||||
{
|
{
|
||||||
auto playerData = m_values.ModifyValue(&Player::m_playerData);
|
auto playerData = m_values.ModifyValue(&Player::m_playerData);
|
||||||
auto questLogField = playerData.ModifyValue(&UF::PlayerData::QuestLog, slot);
|
auto questLogField = playerData.ModifyValue(&UF::PlayerData::QuestLog, slot);
|
||||||
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::QuestID), quest_id);
|
auto questLogQuestIdField = questLogField.ModifyValue(&UF::QuestLog::QuestID);
|
||||||
|
uint32 oldQuestId = questLogQuestIdField.GetValue();
|
||||||
|
SetUpdateFieldValue(questLogQuestIdField, quest_id);
|
||||||
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::StateFlags), 0);
|
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::StateFlags), 0);
|
||||||
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::EndTime), 0);
|
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::EndTime), 0);
|
||||||
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::ObjectiveFlags), 0);
|
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::ObjectiveFlags), 0);
|
||||||
@@ -16466,8 +16471,8 @@ void Player::SetQuestSlot(uint16 slot, uint32 quest_id)
|
|||||||
|
|
||||||
if (quest_id)
|
if (quest_id)
|
||||||
SetUpdateFieldValue(playerData.ModifyValue(&UF::PlayerData::QuestLogQuestIdToIndex, quest_id), slot);
|
SetUpdateFieldValue(playerData.ModifyValue(&UF::PlayerData::QuestLogQuestIdToIndex, quest_id), slot);
|
||||||
else
|
if (oldQuestId)
|
||||||
RemoveMapUpdateFieldValue(playerData.ModifyValue(&UF::PlayerData::QuestLogQuestIdToIndex), quest_id);
|
RemoveMapUpdateFieldValue(playerData.ModifyValue(&UF::PlayerData::QuestLogQuestIdToIndex), oldQuestId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::SetQuestSlotCounter(uint16 slot, uint8 counter, uint16 count)
|
void Player::SetQuestSlotCounter(uint16 slot, uint8 counter, uint16 count)
|
||||||
|
|||||||
Reference in New Issue
Block a user