diff options
-rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 20 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 |
4 files changed, 23 insertions, 7 deletions
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index c6b75392e26..6ae0b678972 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -1924,7 +1924,7 @@ void QuestLog::WriteCreate(ByteBuffer& data, Player const* owner, Player const* data << uint32(StateFlags); data << uint32(EndTime); data << uint32(AcceptTime); - data << uint32(Field_10); + data << uint32(ObjectiveFlags); for (std::size_t i = 0; i < 24; ++i) { data << int16(ObjectiveProgress[i]); @@ -1962,7 +1962,7 @@ void QuestLog::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player cons } if (changesMask[5]) { - data << uint32(Field_10); + data << uint32(ObjectiveFlags); } } if (changesMask[6]) @@ -1983,7 +1983,7 @@ void QuestLog::ClearChangesMask() Base::ClearChangesMask(StateFlags); Base::ClearChangesMask(EndTime); Base::ClearChangesMask(AcceptTime); - Base::ClearChangesMask(Field_10); + Base::ClearChangesMask(ObjectiveFlags); Base::ClearChangesMask(ObjectiveProgress); _changesMask.ResetAll(); } diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 35cd04e5bff..cf79965d3ef 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -411,7 +411,7 @@ struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<31> UpdateField<uint32, 0, 2> StateFlags; UpdateField<uint32, 0, 3> EndTime; UpdateField<uint32, 0, 4> AcceptTime; - UpdateField<uint32, 0, 5> Field_10; + UpdateField<uint32, 0, 5> ObjectiveFlags; UpdateFieldArray<int16, 24, 6, 7> ObjectiveProgress; void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index c1fd2dd26f3..d1887e61763 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -16756,6 +16756,20 @@ void Player::SetQuestSlotTimer(uint16 slot, uint32 timer) .ModifyValue(&UF::QuestLog::EndTime), timer); } +void Player::SetQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex) +{ + SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData) + .ModifyValue(&UF::PlayerData::QuestLog, slot) + .ModifyValue(&UF::QuestLog::ObjectiveFlags), 1 << objectiveIndex); +} + +void Player::RemoveQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex) +{ + RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData) + .ModifyValue(&UF::PlayerData::QuestLog, slot) + .ModifyValue(&UF::QuestLog::ObjectiveFlags), 1 << objectiveIndex); +} + void Player::SetQuestCompletedBit(uint32 questBit, bool completed) { if (!questBit) @@ -17457,9 +17471,9 @@ void Player::SetQuestObjectiveData(QuestObjective const& objective, int32 data) if (!objective.IsStoringFlag()) SetQuestSlotCounter(log_slot, objective.StorageIndex, status.ObjectiveData[objective.StorageIndex]); else if (data) - SetQuestSlotState(log_slot, 256 << objective.StorageIndex); + SetQuestSlotObjectiveFlag(log_slot, objective.StorageIndex); else - RemoveQuestSlotState(log_slot, 256 << objective.StorageIndex); + RemoveQuestSlotObjectiveFlag(log_slot, objective.StorageIndex); } } @@ -19655,7 +19669,7 @@ void Player::_LoadQuestStatusObjectives(PreparedQueryResult result) if (!objectiveItr->IsStoringFlag()) SetQuestSlotCounter(slot, objectiveIndex, data); else if (data) - SetQuestSlotState(slot, 256 << objectiveIndex); + SetQuestSlotObjectiveFlag(slot, objectiveIndex); } else TC_LOG_ERROR("entities.player", "Player::_LoadQuestStatusObjectives: Player '%s' (%s) has quest %d out of range objective index %u.", GetName().c_str(), GetGUID().ToString().c_str(), questID, objectiveIndex); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 52aedc6c55b..feda7a0cb2c 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1413,6 +1413,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SetQuestSlotState(uint16 slot, uint32 state); void RemoveQuestSlotState(uint16 slot, uint32 state); void SetQuestSlotTimer(uint16 slot, uint32 timer); + void SetQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex); + void RemoveQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex); void SetQuestCompletedBit(uint32 questBit, bool completed); uint16 GetReqKillOrCastCurrentCount(uint32 quest_id, int32 entry) const; |