diff options
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 97 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 8 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.cpp | 23 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.h | 32 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.h | 3 |
6 files changed, 28 insertions, 138 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 565e6e66185..47b46f05752 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -96,7 +96,6 @@ #include "ItemPackets.h" #include "QuestPackets.h" #include "LootPackets.h" -#include <boost/dynamic_bitset.hpp> #define ZONE_UPDATE_INTERVAL (1*IN_MILLISECONDS) @@ -869,7 +868,6 @@ Player::Player(WorldSession* session): Unit(true) isDebugAreaTriggers = false; - _completedQuestBits = new boost::dynamic_bitset<uint8>(QUESTS_COMPLETED_BITS_SIZE * 8); m_WeeklyQuestChanged = false; m_MonthlyQuestChanged = false; m_SeasonalQuestChanged = false; @@ -914,7 +912,6 @@ Player::~Player() delete m_declinedname; delete m_runes; - delete _completedQuestBits; delete m_achievementMgr; delete m_reputationMgr; @@ -14761,14 +14758,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, quest->GetQuestId()); if (uint32 questBit = GetQuestUniqueBitFlag(quest_id)) - { - _completedQuestBits->set(questBit - 1); - - WorldPackets::Quest::SetQuestCompletedBit setCompletedBit; - setCompletedBit.QuestID = quest_id; - setCompletedBit.Bit = questBit; - SendDirectMessage(setCompletedBit.Write()); - } + SetQuestCompletedBit(questBit, true); if (quest->HasFlag(QUEST_FLAGS_FLAGS_PVP)) { @@ -15400,14 +15390,7 @@ void Player::RemoveRewardedQuest(uint32 questId, bool update /*= true*/) } if (uint32 questBit = GetQuestUniqueBitFlag(questId)) - { - _completedQuestBits->reset(questBit - 1); - - WorldPackets::Quest::ClearQuestCompletedBit clearCompletedBit; - clearCompletedBit.QuestID = questId; - clearCompletedBit.Bit = questBit; - SendDirectMessage(clearCompletedBit.Write()); - } + SetQuestCompletedBit(questBit, false); if (update) SendQuestUpdate(questId); @@ -15649,6 +15632,18 @@ void Player::SwapQuestSlot(uint16 slot1, uint16 slot2) } } +void Player::SetQuestCompletedBit(uint32 questBit, bool completed) +{ + if (!questBit) + return; + + uint32 fieldOffset = (questBit - 1) >> 5; + if (fieldOffset >= QUESTS_COMPLETED_BITS_SIZE) + return; + + ApplyModFlag(PLAYER_FIELD_QUEST_COMPLETED + ((questBit - 1) >> 5), 1 << ((questBit - 1) & 31), completed); +} + void Player::AreaExploredOrEventHappens(uint32 questId) { if (questId) @@ -18057,7 +18052,7 @@ void Player::_LoadQuestStatusRewarded(PreparedQueryResult result) // instead add them separately from load daily/weekly/monthly/seasonal if (!quest->IsDailyOrWeekly() && !quest->IsMonthly() && !quest->IsSeasonal()) if (uint32 questBit = GetQuestUniqueBitFlag(quest_id)) - _completedQuestBits->set(questBit - 1); + SetQuestCompletedBit(questBit, true); } m_RewardedQuests.insert(quest_id); @@ -18097,7 +18092,7 @@ void Player::_LoadDailyQuestStatus(PreparedQueryResult result) AddDynamicValue(PLAYER_DYNAMIC_FIELD_DAILY_QUESTS, quest_id); if (uint32 questBit = GetQuestUniqueBitFlag(quest_id)) - _completedQuestBits->set(questBit - 1); + SetQuestCompletedBit(questBit, true); TC_LOG_DEBUG("entities.player.loading", "Daily quest (%u) cooldown for player (%s)", quest_id, GetGUID().ToString().c_str()); } @@ -18123,7 +18118,7 @@ void Player::_LoadWeeklyQuestStatus(PreparedQueryResult result) m_weeklyquests.insert(quest_id); if (uint32 questBit = GetQuestUniqueBitFlag(quest_id)) - _completedQuestBits->set(questBit - 1); + SetQuestCompletedBit(questBit, true); TC_LOG_DEBUG("entities.player.loading", "Weekly quest {%u} cooldown for player (%s)", quest_id, GetGUID().ToString().c_str()); } @@ -18150,7 +18145,7 @@ void Player::_LoadSeasonalQuestStatus(PreparedQueryResult result) m_seasonalquests[event_id].insert(quest_id); if (uint32 questBit = GetQuestUniqueBitFlag(quest_id)) - _completedQuestBits->set(questBit - 1); + SetQuestCompletedBit(questBit, true); TC_LOG_DEBUG("entities.player.loading", "Seasonal quest {%u} cooldown for player (%s)", quest_id, GetGUID().ToString().c_str()); } @@ -18176,7 +18171,7 @@ void Player::_LoadMonthlyQuestStatus(PreparedQueryResult result) m_monthlyquests.insert(quest_id); if (uint32 questBit = GetQuestUniqueBitFlag(quest_id)) - _completedQuestBits->set(questBit - 1); + SetQuestCompletedBit(questBit, true); TC_LOG_DEBUG("entities.player.loading", "Monthly quest {%u} cooldown for player (%s)", quest_id, GetGUID().ToString().c_str()); } @@ -22476,8 +22471,6 @@ void Player::SendInitialPacketsBeforeAddToMap() WorldPackets::Character::InitialSetup initialSetup; initialSetup.ServerExpansionLevel = sWorld->getIntConfig(CONFIG_EXPANSION); - // To-Do: Move this to PLAYER_FIELD_QUEST_COMPLETED - //boost::to_block_range(*_completedQuestBits, std::back_inserter(initialSetup.QuestsCompleted)); SendDirectMessage(initialSetup.Write()); SetMover(this); @@ -22977,22 +22970,9 @@ void Player::SetMonthlyQuestStatus(uint32 quest_id) void Player::ResetDailyQuestStatus() { - std::vector<uint32> dailies = GetDynamicValues(PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); - if (!dailies.empty()) - { - WorldPackets::Quest::ClearQuestCompletedBits clearCompletedBits; - for (uint32 questId : dailies) - { - if (uint32 questBit = GetQuestUniqueBitFlag(questId)) - { - clearCompletedBits.Qbits.push_back(questBit); - _completedQuestBits->reset(questBit - 1); - } - } - - if (!clearCompletedBits.Qbits.empty()) - SendDirectMessage(clearCompletedBits.Write()); - } + for (uint32 questId : GetDynamicValues(PLAYER_DYNAMIC_FIELD_DAILY_QUESTS)) + if (uint32 questBit = GetQuestUniqueBitFlag(questId)) + SetQuestCompletedBit(questBit, false); ClearDynamicValue(PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); @@ -23008,18 +22988,9 @@ void Player::ResetWeeklyQuestStatus() if (m_weeklyquests.empty()) return; - WorldPackets::Quest::ClearQuestCompletedBits clearCompletedBits; for (uint32 questId : m_weeklyquests) - { if (uint32 questBit = GetQuestUniqueBitFlag(questId)) - { - clearCompletedBits.Qbits.push_back(questBit); - _completedQuestBits->reset(questBit - 1); - } - } - - if (!clearCompletedBits.Qbits.empty()) - SendDirectMessage(clearCompletedBits.Write()); + SetQuestCompletedBit(questBit, false); m_weeklyquests.clear(); // DB data deleted in caller @@ -23035,18 +23006,9 @@ void Player::ResetSeasonalQuestStatus(uint16 event_id) if (eventItr->second.empty()) return; - WorldPackets::Quest::ClearQuestCompletedBits clearCompletedBits; for (uint32 questId : eventItr->second) - { if (uint32 questBit = GetQuestUniqueBitFlag(questId)) - { - clearCompletedBits.Qbits.push_back(questBit); - _completedQuestBits->reset(questBit - 1); - } - } - - if (!clearCompletedBits.Qbits.empty()) - SendDirectMessage(clearCompletedBits.Write()); + SetQuestCompletedBit(questBit, false); m_seasonalquests.erase(eventItr); // DB data deleted in caller @@ -23058,18 +23020,9 @@ void Player::ResetMonthlyQuestStatus() if (m_monthlyquests.empty()) return; - WorldPackets::Quest::ClearQuestCompletedBits clearCompletedBits; for (uint32 questId : m_monthlyquests) - { if (uint32 questBit = GetQuestUniqueBitFlag(questId)) - { - clearCompletedBits.Qbits.push_back(questBit); - _completedQuestBits->reset(questBit - 1); - } - } - - if (!clearCompletedBits.Qbits.empty()) - SendDirectMessage(clearCompletedBits.Write()); + SetQuestCompletedBit(questBit, false); m_monthlyquests.clear(); // DB data deleted in caller diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 79ee97e16c9..d0cf22ca24b 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -35,7 +35,6 @@ #include <limits> #include <string> #include <vector> -#include <boost/dynamic_bitset_fwd.hpp> struct CreatureTemplate; struct Mail; @@ -664,8 +663,8 @@ enum QuestSaveType // quest typedef std::map<uint32, QuestSaveType> QuestStatusSaveMap; -// Size (in bytes) of client completed quests bit map -#define QUESTS_COMPLETED_BITS_SIZE 2500 +// Size of client completed quests bit map +#define QUESTS_COMPLETED_BITS_SIZE 625 enum QuestSlotOffsets { @@ -1691,6 +1690,7 @@ class Player : public Unit, public GridObject<Player> void RemoveQuestSlotState(uint16 slot, uint32 state); void SetQuestSlotTimer(uint16 slot, uint32 timer); void SwapQuestSlot(uint16 slot1, uint16 slot2); + void SetQuestCompletedBit(uint32 questBit, bool completed); uint16 GetReqKillOrCastCurrentCount(uint32 quest_id, int32 entry); void AreaExploredOrEventHappens(uint32 questId); @@ -2801,8 +2801,6 @@ class Player : public Unit, public GridObject<Player> RewardedQuestSet m_RewardedQuests; QuestStatusSaveMap m_RewardedQuestsSave; - boost::dynamic_bitset<uint8>* _completedQuestBits; - SkillStatusMap mSkillStatus; ObjectGuid::LowType m_GuildIdInvited; diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index db30e8d2ec0..471d4846f16 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -426,26 +426,3 @@ void WorldPackets::Quest::QuestGiverQueryQuest::Read() _worldPacket >> QuestID; RespondToGiver = _worldPacket.ReadBit(); } - -WorldPacket const* WorldPackets::Quest::SetQuestCompletedBit::Write() -{ - _worldPacket << int32(Bit); - _worldPacket << int32(QuestID); - return &_worldPacket; -} - -WorldPacket const* WorldPackets::Quest::ClearQuestCompletedBit::Write() -{ - _worldPacket << int32(Bit); - _worldPacket << int32(QuestID); - return &_worldPacket; -} - -WorldPacket const* WorldPackets::Quest::ClearQuestCompletedBits::Write() -{ - _worldPacket << uint32(Qbits.size()); - if (!Qbits.empty()) - _worldPacket.append(Qbits.data(), Qbits.size()); - - return &_worldPacket; -} diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 3796649f2c9..9dea2ba1cff 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -405,38 +405,6 @@ namespace WorldPackets int32 QuestID = 0; bool RespondToGiver = false; }; - - class SetQuestCompletedBit final : public ServerPacket - { - public: - SetQuestCompletedBit() : ServerPacket(SMSG_SET_QUEST_COMPLETED_BIT, 4 + 4) { } - - WorldPacket const* Write() override; - - int32 Bit = 0; - int32 QuestID = 0; - }; - - class ClearQuestCompletedBit final : public ServerPacket - { - public: - ClearQuestCompletedBit() : ServerPacket(SMSG_CLEAR_QUEST_COMPLETED_BIT, 4 + 4) { } - - WorldPacket const* Write() override; - - int32 Bit = 0; - int32 QuestID = 0; - }; - - class ClearQuestCompletedBits final : public ServerPacket - { - public: - ClearQuestCompletedBits() : ServerPacket(SMSG_CLEAR_QUEST_COMPLETED_BITS, 4) { } - - WorldPacket const* Write() override; - - std::vector<int32> Qbits; - }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 939ce698a80..0211732d312 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1097,8 +1097,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_COOLDOWNS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_FAR_SIGHT_IMMEDIATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_LOSS_OF_CONTROL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_QUEST_COMPLETED_BIT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_QUEST_COMPLETED_BITS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_SPELL_CHARGES, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_TARGET, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLIENTCACHE_VERSION, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1750,7 +1748,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_PLAY_HOVER_ANIM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_PROFICIENCY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_PROJECTILE_POSITION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_QUEST_COMPLETED_BIT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_RAID_DIFFICULTY, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_SPELL_CHARGES, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_TASK_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 70c377e29f9..5c406e8b1fe 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1010,8 +1010,6 @@ enum OpcodeServer : uint32 SMSG_CLEAR_COOLDOWNS = 0xBADD, SMSG_CLEAR_FAR_SIGHT_IMMEDIATE = 0xBADD, SMSG_CLEAR_LOSS_OF_CONTROL = 0xBADD, - SMSG_CLEAR_QUEST_COMPLETED_BIT = 0xBADD, - SMSG_CLEAR_QUEST_COMPLETED_BITS = 0xBADD, SMSG_CLEAR_SPELL_CHARGES = 0xBADD, SMSG_CLEAR_TARGET = 0x17FA, SMSG_CLIENTCACHE_VERSION = 0x116C, @@ -1701,7 +1699,6 @@ enum OpcodeServer : uint32 SMSG_SET_PROFICIENCY = 0x092A, SMSG_SET_PROJECTILE_POSITION = 0xBADD, SMSG_SET_PROMOTION_RESPONSE = 0xBADD, - SMSG_SET_QUEST_COMPLETED_BIT = 0xBADD, SMSG_SET_RAID_DIFFICULTY = 0x1319, SMSG_SET_SERVER_WOW_TIME = 0xBADD, SMSG_SET_SPELL_CHARGES = 0xBADD, |