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)
|
||||
{
|
||||
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
|
||||
return;
|
||||
@@ -15491,8 +15493,9 @@ bool Player::SatisfyQuestMaxLevel(Quest const* qInfo, bool msg) const
|
||||
bool Player::SatisfyQuestLog(bool msg) const
|
||||
{
|
||||
// exist free slot
|
||||
if (FindQuestSlot(0) < MAX_QUEST_LOG_SIZE)
|
||||
return true;
|
||||
for (uint32 log_slot = 0; log_slot < MAX_QUEST_LOG_SIZE; ++log_slot)
|
||||
if (!GetQuestSlotQuestId(log_slot))
|
||||
return true;
|
||||
|
||||
if (msg)
|
||||
{
|
||||
@@ -16457,7 +16460,9 @@ void Player::SetQuestSlot(uint16 slot, uint32 quest_id)
|
||||
{
|
||||
auto playerData = m_values.ModifyValue(&Player::m_playerData);
|
||||
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::EndTime), 0);
|
||||
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::ObjectiveFlags), 0);
|
||||
@@ -16466,8 +16471,8 @@ void Player::SetQuestSlot(uint16 slot, uint32 quest_id)
|
||||
|
||||
if (quest_id)
|
||||
SetUpdateFieldValue(playerData.ModifyValue(&UF::PlayerData::QuestLogQuestIdToIndex, quest_id), slot);
|
||||
else
|
||||
RemoveMapUpdateFieldValue(playerData.ModifyValue(&UF::PlayerData::QuestLogQuestIdToIndex), quest_id);
|
||||
if (oldQuestId)
|
||||
RemoveMapUpdateFieldValue(playerData.ModifyValue(&UF::PlayerData::QuestLogQuestIdToIndex), oldQuestId);
|
||||
}
|
||||
|
||||
void Player::SetQuestSlotCounter(uint16 slot, uint8 counter, uint16 count)
|
||||
|
||||
Reference in New Issue
Block a user