diff options
| -rwxr-xr-x | src/server/game/Achievements/AchievementMgr.cpp | 437 | ||||
| -rwxr-xr-x | src/server/game/Entities/Object/Object.h | 56 | ||||
| -rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 6 | ||||
| -rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 304 | ||||
| -rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 43 | ||||
| -rwxr-xr-x | src/server/game/Handlers/GroupHandler.cpp | 40 | ||||
| -rwxr-xr-x | src/server/game/Handlers/GuildHandler.cpp | 16 | ||||
| -rwxr-xr-x | src/server/game/Handlers/ItemHandler.cpp | 32 | ||||
| -rwxr-xr-x | src/server/game/Handlers/MiscHandler.cpp | 47 | ||||
| -rwxr-xr-x | src/server/game/Handlers/MovementHandler.cpp | 37 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
| -rwxr-xr-x | src/server/game/Server/WorldSession.h | 6 | ||||
| -rwxr-xr-x | src/server/shared/Database/PreparedStatement.cpp | 9 | ||||
| -rw-r--r-- | src/server/shared/Packets/ByteBuffer.cpp | 85 | ||||
| -rwxr-xr-x | src/server/shared/Packets/ByteBuffer.h | 198 |
15 files changed, 537 insertions, 781 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index dafcd88433f..34b38ff1d35 100755 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -426,28 +426,27 @@ void AchievementMgr<Guild>::RemoveCriteriaProgress(const AchievementCriteriaEntr if (criteriaProgress == m_criteriaProgress.end()) return; - uint8 guidBytes[8]; - *reinterpret_cast<uint64*>(&guidBytes[0]) = GetOwner()->GetGUID(); + ObjectGuid guid = GetOwner()->GetGUID(); WorldPacket data(SMSG_GUILD_CRITERIA_DELETED, 4 + 8); - data.WriteBit(guidBytes[6]); - data.WriteBit(guidBytes[5]); - data.WriteBit(guidBytes[7]); - data.WriteBit(guidBytes[0]); - data.WriteBit(guidBytes[1]); - data.WriteBit(guidBytes[3]); - data.WriteBit(guidBytes[2]); - data.WriteBit(guidBytes[4]); - - data.WriteByteSeq(guidBytes[2]); - data.WriteByteSeq(guidBytes[3]); - data.WriteByteSeq(guidBytes[4]); - data.WriteByteSeq(guidBytes[1]); - data.WriteByteSeq(guidBytes[7]); + data.WriteBit(guid[6]); + data.WriteBit(guid[5]); + data.WriteBit(guid[7]); + data.WriteBit(guid[0]); + data.WriteBit(guid[1]); + data.WriteBit(guid[3]); + data.WriteBit(guid[2]); + data.WriteBit(guid[4]); + + data.WriteByteSeq(guid[2]); + data.WriteByteSeq(guid[3]); + data.WriteByteSeq(guid[4]); + data.WriteByteSeq(guid[1]); + data.WriteByteSeq(guid[7]); data << uint32(entry->ID); - data.WriteByteSeq(guidBytes[5]); - data.WriteByteSeq(guidBytes[0]); - data.WriteByteSeq(guidBytes[6]); + data.WriteByteSeq(guid[5]); + data.WriteByteSeq(guid[0]); + data.WriteByteSeq(guid[6]); SendPacket(&data); @@ -844,30 +843,28 @@ void AchievementMgr<T>::Reset() template<> void AchievementMgr<Guild>::Reset() { - uint8 guidBytes[8]; - *reinterpret_cast<uint64*>(&guidBytes[0]) = GetOwner()->GetGUID(); - + ObjectGuid guid = GetOwner()->GetGUID(); for (CompletedAchievementMap::const_iterator iter = m_completedAchievements.begin(); iter != m_completedAchievements.end(); ++iter) { WorldPacket data(SMSG_GUILD_ACHIEVEMENT_DELETED, 4); - data.WriteBit(guidBytes[4]); - data.WriteBit(guidBytes[1]); - data.WriteBit(guidBytes[2]); - data.WriteBit(guidBytes[3]); - data.WriteBit(guidBytes[0]); - data.WriteBit(guidBytes[7]); - data.WriteBit(guidBytes[5]); - data.WriteBit(guidBytes[6]); + data.WriteBit(guid[4]); + data.WriteBit(guid[1]); + data.WriteBit(guid[2]); + data.WriteBit(guid[3]); + data.WriteBit(guid[0]); + data.WriteBit(guid[7]); + data.WriteBit(guid[5]); + data.WriteBit(guid[6]); data << uint32(iter->first); - data.WriteByteSeq(guidBytes[5]); - data.WriteByteSeq(guidBytes[1]); - data.WriteByteSeq(guidBytes[3]); - data.WriteByteSeq(guidBytes[6]); - data.WriteByteSeq(guidBytes[0]); - data.WriteByteSeq(guidBytes[7]); + data.WriteByteSeq(guid[5]); + data.WriteByteSeq(guid[1]); + data.WriteByteSeq(guid[3]); + data.WriteByteSeq(guid[6]); + data.WriteByteSeq(guid[0]); + data.WriteByteSeq(guid[7]); data << uint32(secsToTimeBitFields(iter->second.date)); - data.WriteByteSeq(guidBytes[4]); - data.WriteByteSeq(guidBytes[2]); + data.WriteByteSeq(guid[4]); + data.WriteByteSeq(guid[2]); SendPacket(&data); } @@ -936,29 +933,28 @@ void AchievementMgr<T>::SendAchievementEarned(AchievementEntry const* achievemen template<> void AchievementMgr<Guild>::SendAchievementEarned(AchievementEntry const* achievement) const { - uint8 guidBytes[8]; - *reinterpret_cast<uint64*>(&guidBytes[0]) = GetOwner()->GetGUID(); + ObjectGuid guid = GetOwner()->GetGUID(); WorldPacket data(SMSG_GUILD_ACHIEVEMENT_EARNED, 8+4+8); - data.WriteByteMask(guidBytes[3]); - data.WriteByteMask(guidBytes[1]); - data.WriteByteMask(guidBytes[0]); - data.WriteByteMask(guidBytes[7]); - data.WriteByteMask(guidBytes[4]); - data.WriteByteMask(guidBytes[6]); - data.WriteByteMask(guidBytes[2]); - data.WriteByteMask(guidBytes[5]); - - data.WriteByteSeq(guidBytes[2]); + data.WriteBit(guid[3]); + data.WriteBit(guid[1]); + data.WriteBit(guid[0]); + data.WriteBit(guid[7]); + data.WriteBit(guid[4]); + data.WriteBit(guid[6]); + data.WriteBit(guid[2]); + data.WriteBit(guid[5]); + + data.WriteByteSeq(guid[2]); data << uint32(secsToTimeBitFields(time(NULL))); - data.WriteByteSeq(guidBytes[0]); - data.WriteByteSeq(guidBytes[4]); - data.WriteByteSeq(guidBytes[1]); - data.WriteByteSeq(guidBytes[3]); + data.WriteByteSeq(guid[0]); + data.WriteByteSeq(guid[4]); + data.WriteByteSeq(guid[1]); + data.WriteByteSeq(guid[3]); data << uint32(achievement->ID); - data.WriteByteSeq(guidBytes[7]); - data.WriteByteSeq(guidBytes[5]); - data.WriteByteSeq(guidBytes[6]); + data.WriteByteSeq(guid[7]); + data.WriteByteSeq(guid[5]); + data.WriteByteSeq(guid[6]); SendPacket(&data); } @@ -994,50 +990,48 @@ void AchievementMgr<Guild>::SendCriteriaUpdate(AchievementCriteriaEntry const* e //will send response to criteria progress request WorldPacket data(SMSG_GUILD_CRITERIA_DATA, 3 + 1 + 1 + 8 + 8 + 4 + 4 + 4 + 4 + 4); - uint8 criteriaProgress[8]; - uint8 criteriaGuid[8]; - *reinterpret_cast<uint64*>(&criteriaProgress[0]) = progress->counter; - *reinterpret_cast<uint64*>(&criteriaGuid[0]) = progress->CompletedGUID; + ObjectGuid counter = progress->counter; // for accessing every byte individually + ObjectGuid guid = progress->CompletedGUID; data.WriteBits(1, 21); - data.WriteBit(criteriaProgress[4]); - data.WriteBit(criteriaProgress[1]); - data.WriteBit(criteriaGuid[2]); - data.WriteBit(criteriaProgress[3]); - data.WriteBit(criteriaGuid[1]); - data.WriteBit(criteriaProgress[5]); - data.WriteBit(criteriaProgress[0]); - data.WriteBit(criteriaGuid[3]); - data.WriteBit(criteriaProgress[2]); - data.WriteBit(criteriaGuid[7]); - data.WriteBit(criteriaGuid[5]); - data.WriteBit(criteriaGuid[0]); - data.WriteBit(criteriaProgress[6]); - data.WriteBit(criteriaGuid[6]); - data.WriteBit(criteriaProgress[7]); - data.WriteBit(criteriaGuid[4]); - - data.WriteByteSeq(criteriaGuid[5]); + data.WriteBit(counter[4]); + data.WriteBit(counter[1]); + data.WriteBit(guid[2]); + data.WriteBit(counter[3]); + data.WriteBit(guid[1]); + data.WriteBit(counter[5]); + data.WriteBit(counter[0]); + data.WriteBit(guid[3]); + data.WriteBit(counter[2]); + data.WriteBit(guid[7]); + data.WriteBit(guid[5]); + data.WriteBit(guid[0]); + data.WriteBit(counter[6]); + data.WriteBit(guid[6]); + data.WriteBit(counter[7]); + data.WriteBit(guid[4]); + + data.WriteByteSeq(guid[5]); data << uint32(progress->date); // unknown date - data.WriteByteSeq(criteriaProgress[3]); - data.WriteByteSeq(criteriaProgress[7]); + data.WriteByteSeq(counter[3]); + data.WriteByteSeq(counter[7]); data << uint32(progress->date); // unknown date - data.WriteByteSeq(criteriaProgress[6]); - data.WriteByteSeq(criteriaGuid[4]); - data.WriteByteSeq(criteriaGuid[1]); - data.WriteByteSeq(criteriaProgress[4]); - data.WriteByteSeq(criteriaGuid[3]); - data.WriteByteSeq(criteriaProgress[0]); - data.WriteByteSeq(criteriaGuid[2]); - data.WriteByteSeq(criteriaProgress[1]); - data.WriteByteSeq(criteriaGuid[6]); + data.WriteByteSeq(counter[6]); + data.WriteByteSeq(guid[4]); + data.WriteByteSeq(guid[1]); + data.WriteByteSeq(counter[4]); + data.WriteByteSeq(guid[3]); + data.WriteByteSeq(counter[0]); + data.WriteByteSeq(guid[2]); + data.WriteByteSeq(counter[1]); + data.WriteByteSeq(guid[6]); data << uint32(progress->date); // last update time (not packed!) data << uint32(entry->ID); - data.WriteByteSeq(criteriaProgress[5]); + data.WriteByteSeq(counter[5]); data << uint32(0); - data.WriteByteSeq(criteriaGuid[7]); - data.WriteByteSeq(criteriaProgress[2]); - data.WriteByteSeq(criteriaGuid[0]); + data.WriteByteSeq(guid[7]); + data.WriteByteSeq(counter[2]); + data.WriteByteSeq(guid[0]); SendPacket(&data); } @@ -2364,54 +2358,53 @@ void AchievementMgr<T>::SendAllAchievementData(Player* /*receiver*/) const size_t numCriteria = m_criteriaProgress.size(); size_t numAchievements = std::count_if(m_completedAchievements.begin(), m_completedAchievements.end(), isVisible); ByteBuffer criteriaData(numCriteria * (4 + 4 + 4 + 4 + 8 + 8)); - uint8 guidBytes[8]; - uint8 progressBytes[8]; - *reinterpret_cast<uint64*>(&guidBytes[0]) = GetOwner()->GetGUID(); + ObjectGuid guid = GetOwner()->GetGUID(); + ObjectGuid counter; WorldPacket data(SMSG_ALL_ACHIEVEMENT_DATA, 4 + numAchievements * (4 + 4) + 4 + numCriteria * (4 + 4 + 4 + 4 + 8 + 8)); data.WriteBits(21, numCriteria); for (CriteriaProgressMap::const_iterator itr = m_criteriaProgress.begin(); itr != m_criteriaProgress.end(); ++itr) { - *reinterpret_cast<uint64*>(&progressBytes[0]) = itr->second.counter; - - data.WriteBit(guidBytes[4]); - data.WriteBit(progressBytes[3]); - data.WriteBit(guidBytes[5]); - data.WriteBit(progressBytes[0]); - data.WriteBit(progressBytes[6]); - data.WriteBit(guidBytes[3]); - data.WriteBit(guidBytes[0]); - data.WriteBit(progressBytes[4]); - data.WriteBit(guidBytes[2]); - data.WriteBit(progressBytes[7]); - data.WriteBit(guidBytes[7]); + counter = itr->second.counter; + + data.WriteBit(guid[4]); + data.WriteBit(counter[3]); + data.WriteBit(guid[5]); + data.WriteBit(counter[0]); + data.WriteBit(counter[6]); + data.WriteBit(guid[3]); + data.WriteBit(guid[0]); + data.WriteBit(counter[4]); + data.WriteBit(guid[2]); + data.WriteBit(counter[7]); + data.WriteBit(guid[7]); data.WriteBits(0, 2); - data.WriteBit(guidBytes[6]); - data.WriteBit(progressBytes[2]); - data.WriteBit(progressBytes[1]); - data.WriteBit(progressBytes[5]); - data.WriteBit(guidBytes[1]); - - criteriaData.WriteByteSeq(guidBytes[3]); - criteriaData.WriteByteSeq(progressBytes[5]); - criteriaData.WriteByteSeq(progressBytes[6]); - criteriaData.WriteByteSeq(guidBytes[4]); - criteriaData.WriteByteSeq(guidBytes[6]); - criteriaData.WriteByteSeq(progressBytes[2]); + data.WriteBit(guid[6]); + data.WriteBit(counter[2]); + data.WriteBit(counter[1]); + data.WriteBit(counter[5]); + data.WriteBit(guid[1]); + + criteriaData.WriteByteSeq(guid[3]); + criteriaData.WriteByteSeq(counter[5]); + criteriaData.WriteByteSeq(counter[6]); + criteriaData.WriteByteSeq(guid[4]); + criteriaData.WriteByteSeq(guid[6]); + criteriaData.WriteByteSeq(counter[2]); criteriaData << uint32(0); // timer 2 - criteriaData.WriteByteSeq(guidBytes[2]); + criteriaData.WriteByteSeq(guid[2]); criteriaData << uint32(itr->first); // criteria id - criteriaData.WriteByteSeq(guidBytes[5]); - criteriaData.WriteByteSeq(progressBytes[0]); - criteriaData.WriteByteSeq(progressBytes[3]); - criteriaData.WriteByteSeq(progressBytes[1]); - criteriaData.WriteByteSeq(progressBytes[4]); - criteriaData.WriteByteSeq(guidBytes[0]); - criteriaData.WriteByteSeq(guidBytes[7]); - criteriaData.WriteByteSeq(progressBytes[7]); + criteriaData.WriteByteSeq(guid[5]); + criteriaData.WriteByteSeq(counter[0]); + criteriaData.WriteByteSeq(counter[3]); + criteriaData.WriteByteSeq(counter[1]); + criteriaData.WriteByteSeq(counter[4]); + criteriaData.WriteByteSeq(guid[0]); + criteriaData.WriteByteSeq(guid[7]); + criteriaData.WriteByteSeq(counter[7]); criteriaData << uint32(0); // timer 1 criteriaData << uint32(secsToTimeBitFields(itr->second.date)); // criteria date - criteriaData.WriteByteSeq(guidBytes[1]); + criteriaData.WriteByteSeq(guid[1]); } data.WriteBits(numAchievements, 23); @@ -2454,75 +2447,75 @@ void AchievementMgr<T>::SendAchievementInfo(Player* receiver, uint32 achievement template<> void AchievementMgr<Player>::SendAchievementInfo(Player* receiver, uint32 /*achievementId = 0 */) const { - uint8 guidBytes[8]; - uint8 progressBytes[8]; + ObjectGuid guid = GetOwner()->GetGUID(); + ObjectGuid counter; VisibleAchievementPred isVisible; size_t numCriteria = m_criteriaProgress.size(); size_t numAchievements = std::count_if(m_completedAchievements.begin(), m_completedAchievements.end(), isVisible); ByteBuffer criteriaData(numCriteria * (0)); - *reinterpret_cast<uint64*>(&guidBytes[0]) = GetOwner()->GetGUID(); WorldPacket data(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, 1 + 8 + 3 + 3 + numAchievements * (4 + 4) + numCriteria * (0)); - data.WriteBit(guidBytes[7]); - data.WriteBit(guidBytes[4]); - data.WriteBit(guidBytes[1]); + data.WriteBit(guid[7]); + data.WriteBit(guid[4]); + data.WriteBit(guid[1]); data.WriteBits(numAchievements, 23); - data.WriteBit(guidBytes[0]); - data.WriteBit(guidBytes[3]); + data.WriteBit(guid[0]); + data.WriteBit(guid[3]); data.WriteBits(numCriteria, 21); - data.WriteBit(guidBytes[2]); + data.WriteBit(guid[2]); for (CriteriaProgressMap::const_iterator itr = m_criteriaProgress.begin(); itr != m_criteriaProgress.end(); ++itr) { - *reinterpret_cast<uint64*>(&progressBytes[0]) = itr->second.counter; - data.WriteBit(progressBytes[5]); - data.WriteBit(progressBytes[3]); - data.WriteBit(guidBytes[1]); - data.WriteBit(guidBytes[4]); - data.WriteBit(guidBytes[2]); - data.WriteBit(progressBytes[6]); - data.WriteBit(guidBytes[0]); - data.WriteBit(progressBytes[4]); - data.WriteBit(progressBytes[1]); - data.WriteBit(progressBytes[2]); - data.WriteBit(guidBytes[3]); - data.WriteBit(guidBytes[7]); + counter = itr->second.counter; + + data.WriteBit(counter[5]); + data.WriteBit(counter[3]); + data.WriteBit(guid[1]); + data.WriteBit(guid[4]); + data.WriteBit(guid[2]); + data.WriteBit(counter[6]); + data.WriteBit(guid[0]); + data.WriteBit(counter[4]); + data.WriteBit(counter[1]); + data.WriteBit(counter[2]); + data.WriteBit(guid[3]); + data.WriteBit(guid[7]); data.WriteBits(0, 2); // criteria progress flags - data.WriteBit(progressBytes[0]); - data.WriteBit(guidBytes[5]); - data.WriteBit(guidBytes[6]); - data.WriteBit(progressBytes[7]); + data.WriteBit(counter[0]); + data.WriteBit(guid[5]); + data.WriteBit(guid[6]); + data.WriteBit(counter[7]); - criteriaData.WriteByteSeq(guidBytes[3]); - criteriaData.WriteByteSeq(progressBytes[4]); + criteriaData.WriteByteSeq(guid[3]); + criteriaData.WriteByteSeq(counter[4]); criteriaData << uint32(0); // timer 1 - criteriaData.WriteByteSeq(guidBytes[1]); + criteriaData.WriteByteSeq(guid[1]); criteriaData << uint32(secsToTimeBitFields(itr->second.date)); - criteriaData.WriteByteSeq(progressBytes[3]); - criteriaData.WriteByteSeq(progressBytes[7]); - criteriaData.WriteByteSeq(guidBytes[5]); - criteriaData.WriteByteSeq(progressBytes[0]); - criteriaData.WriteByteSeq(guidBytes[4]); - criteriaData.WriteByteSeq(guidBytes[2]); - criteriaData.WriteByteSeq(guidBytes[6]); - criteriaData.WriteByteSeq(guidBytes[7]); - criteriaData.WriteByteSeq(progressBytes[6]); + criteriaData.WriteByteSeq(counter[3]); + criteriaData.WriteByteSeq(counter[7]); + criteriaData.WriteByteSeq(guid[5]); + criteriaData.WriteByteSeq(counter[0]); + criteriaData.WriteByteSeq(guid[4]); + criteriaData.WriteByteSeq(guid[2]); + criteriaData.WriteByteSeq(guid[6]); + criteriaData.WriteByteSeq(guid[7]); + criteriaData.WriteByteSeq(counter[6]); criteriaData << uint32(itr->first); criteriaData << uint32(0); // timer 2 - criteriaData.WriteByteSeq(progressBytes[1]); - criteriaData.WriteByteSeq(progressBytes[5]); - criteriaData.WriteByteSeq(guidBytes[0]); - criteriaData.WriteByteSeq(progressBytes[2]); + criteriaData.WriteByteSeq(counter[1]); + criteriaData.WriteByteSeq(counter[5]); + criteriaData.WriteByteSeq(guid[0]); + criteriaData.WriteByteSeq(counter[2]); } - data.WriteBit(guidBytes[6]); - data.WriteBit(guidBytes[5]); + data.WriteBit(guid[6]); + data.WriteBit(guid[5]); data.append(criteriaData); - data.WriteByteSeq(guidBytes[1]); - data.WriteByteSeq(guidBytes[6]); - data.WriteByteSeq(guidBytes[3]); - data.WriteByteSeq(guidBytes[0]); - data.WriteByteSeq(guidBytes[2]); + data.WriteByteSeq(guid[1]); + data.WriteByteSeq(guid[6]); + data.WriteByteSeq(guid[3]); + data.WriteByteSeq(guid[0]); + data.WriteByteSeq(guid[2]); for (CompletedAchievementMap::const_iterator itr = m_completedAchievements.begin(); itr != m_completedAchievements.end(); ++itr) { @@ -2533,9 +2526,9 @@ void AchievementMgr<Player>::SendAchievementInfo(Player* receiver, uint32 /*achi data << uint32(secsToTimeBitFields(itr->second.date)); } - data.WriteByteSeq(guidBytes[7]); - data.WriteByteSeq(guidBytes[4]); - data.WriteByteSeq(guidBytes[5]); + data.WriteByteSeq(guid[7]); + data.WriteByteSeq(guid[4]); + data.WriteByteSeq(guid[5]); receiver->GetSession()->SendPacket(&data); } @@ -2554,8 +2547,8 @@ void AchievementMgr<Guild>::SendAchievementInfo(Player* receiver, uint32 achieve return; } - uint8 criteriaProgress[8]; - uint8 criteriaGuid[8]; + ObjectGuid counter; + ObjectGuid guid; uint32 numCriteria = 0; ByteBuffer criteriaData(criteria->size() * (8 + 8 + 4 + 4 + 4)); ByteBuffer criteriaBits(criteria->size() * (8 + 8) / 8); @@ -2578,47 +2571,47 @@ void AchievementMgr<Guild>::SendAchievementInfo(Player* receiver, uint32 achieve if (progress == m_criteriaProgress.end()) continue; - *reinterpret_cast<uint64*>(&criteriaProgress[0]) = progress->second.counter; - *reinterpret_cast<uint64*>(&criteriaGuid[0]) = progress->second.CompletedGUID; - - criteriaBits.WriteBit(criteriaProgress[4]); - criteriaBits.WriteBit(criteriaProgress[1]); - criteriaBits.WriteBit(criteriaGuid[2]); - criteriaBits.WriteBit(criteriaProgress[3]); - criteriaBits.WriteBit(criteriaGuid[1]); - criteriaBits.WriteBit(criteriaProgress[5]); - criteriaBits.WriteBit(criteriaProgress[0]); - criteriaBits.WriteBit(criteriaGuid[3]); - criteriaBits.WriteBit(criteriaProgress[2]); - criteriaBits.WriteBit(criteriaGuid[7]); - criteriaBits.WriteBit(criteriaGuid[5]); - criteriaBits.WriteBit(criteriaGuid[0]); - criteriaBits.WriteBit(criteriaProgress[6]); - criteriaBits.WriteBit(criteriaGuid[6]); - criteriaBits.WriteBit(criteriaProgress[7]); - criteriaBits.WriteBit(criteriaGuid[4]); - - criteriaData.WriteByteSeq(criteriaGuid[5]); + counter = progress->second.counter; + guid = progress->second.CompletedGUID; + + criteriaBits.WriteBit(counter[4]); + criteriaBits.WriteBit(counter[1]); + criteriaBits.WriteBit(guid[2]); + criteriaBits.WriteBit(counter[3]); + criteriaBits.WriteBit(guid[1]); + criteriaBits.WriteBit(counter[5]); + criteriaBits.WriteBit(counter[0]); + criteriaBits.WriteBit(guid[3]); + criteriaBits.WriteBit(counter[2]); + criteriaBits.WriteBit(guid[7]); + criteriaBits.WriteBit(guid[5]); + criteriaBits.WriteBit(guid[0]); + criteriaBits.WriteBit(counter[6]); + criteriaBits.WriteBit(guid[6]); + criteriaBits.WriteBit(counter[7]); + criteriaBits.WriteBit(guid[4]); + + criteriaData.WriteByteSeq(guid[5]); criteriaData << uint32(progress->second.date); // unknown date - criteriaData.WriteByteSeq(criteriaProgress[3]); - criteriaData.WriteByteSeq(criteriaProgress[7]); + criteriaData.WriteByteSeq(counter[3]); + criteriaData.WriteByteSeq(counter[7]); criteriaData << uint32(progress->second.date); // unknown date - criteriaData.WriteByteSeq(criteriaProgress[6]); - criteriaData.WriteByteSeq(criteriaGuid[4]); - criteriaData.WriteByteSeq(criteriaGuid[1]); - criteriaData.WriteByteSeq(criteriaProgress[4]); - criteriaData.WriteByteSeq(criteriaGuid[3]); - criteriaData.WriteByteSeq(criteriaProgress[0]); - criteriaData.WriteByteSeq(criteriaGuid[2]); - criteriaData.WriteByteSeq(criteriaProgress[1]); - criteriaData.WriteByteSeq(criteriaGuid[6]); + criteriaData.WriteByteSeq(counter[6]); + criteriaData.WriteByteSeq(guid[4]); + criteriaData.WriteByteSeq(guid[1]); + criteriaData.WriteByteSeq(counter[4]); + criteriaData.WriteByteSeq(guid[3]); + criteriaData.WriteByteSeq(counter[0]); + criteriaData.WriteByteSeq(guid[2]); + criteriaData.WriteByteSeq(counter[1]); + criteriaData.WriteByteSeq(guid[6]); criteriaData << uint32(progress->second.date); // last update time (not packed!) criteriaData << uint32(criteriaId); - criteriaData.WriteByteSeq(criteriaProgress[5]); + criteriaData.WriteByteSeq(counter[5]); criteriaData << uint32(0); - criteriaData.WriteByteSeq(criteriaGuid[7]); - criteriaData.WriteByteSeq(criteriaProgress[2]); - criteriaData.WriteByteSeq(criteriaGuid[0]); + criteriaData.WriteByteSeq(guid[7]); + criteriaData.WriteByteSeq(counter[2]); + criteriaData.WriteByteSeq(guid[0]); } WorldPacket data(SMSG_GUILD_CRITERIA_DATA, criteriaBits.size() + criteriaData.size()); diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 1a04f7b3053..01ad11ba2df 100755 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -119,6 +119,62 @@ class Transport; typedef UNORDERED_MAP<Player*, UpdateData> UpdateDataMapType; +//! Structure to ease conversions from single 64 bit integer guid into individual bytes, for packet sending purposes +//! Nuke this out when porting ObjectGuid from MaNGOS, but preserve the per-byte storage +struct ObjectGuid +{ + public: + ObjectGuid() { _data.u64 = 0i64; } + ObjectGuid(uint64 guid) { _data.u64 = guid; } + ObjectGuid(ObjectGuid const& other) { _data.u64 = other._data.u64; } + + uint8& operator[](uint32 index) + { + ASSERT(index < sizeof(uint64)); + +#if TRINITY_ENDIAN == TRINITY_LITTLEENDIAN + return _data.byte[index]; +#else + return _data.byte[7 - index]; +#endif + } + + uint8 const& operator[](uint32 index) const + { + ASSERT(index < sizeof(uint64)); + +#if TRINITY_ENDIAN == TRINITY_LITTLEENDIAN + return _data.byte[index]; +#else + return _data.byte[7 - index]; +#endif + } + + operator uint64() + { + return _data.u64; + } + + ObjectGuid& operator=(uint64 guid) + { + _data.u64 = guid; + return *this; + } + + ObjectGuid& operator=(ObjectGuid const& other) + { + _data.u64 = other._data.u64; + return *this; + } + + private: + union + { + uint64 u64; + uint8 byte[8]; + } _data; +}; + class Object { public: diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 988404b1829..558106c956d 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1842,10 +1842,8 @@ bool Player::BuildEnumData(PreparedQueryResult result, ByteBuffer* dataBuffer, B // "characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, characters.data, character_banned.guid, character_declinedname.genitive " Field* fields = result->Fetch(); - uint8 guid[8]; - uint8 guildGuid[8]; - *reinterpret_cast<uint64*>(&guid[0]) = MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER); + ObjectGuid guid = MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER); std::string name = fields[1].GetString(); uint8 plrRace = fields[2].GetUInt8(); uint8 plrClass = fields[3].GetUInt8(); @@ -1862,7 +1860,7 @@ bool Player::BuildEnumData(PreparedQueryResult result, ByteBuffer* dataBuffer, B float y = fields[11].GetFloat(); float z = fields[12].GetFloat(); uint32 guildId = fields[13].GetUInt32(); - *reinterpret_cast<uint64*>(&guildGuid[0]) = MAKE_NEW_GUID(guildId, 0, guildId ? HIGHGUID_GUILD : 0); + ObjectGuid guildGuid = MAKE_NEW_GUID(guildId, 0, guildId ? HIGHGUID_GUILD : 0); uint32 playerFlags = fields[14].GetUInt32(); uint32 atLoginFlags = fields[15].GetUInt16(); Tokens equipment(fields[19].GetString(), ' '); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 599c79dedbd..9f064640a75 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12733,14 +12733,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_RUN: data.Initialize(SMSG_SPLINE_MOVE_SET_RUN_SPEED, 1 + 8 + 4); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[0]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[0]); data.WriteByteSeq(bytes[6]); data.WriteByteSeq(bytes[7]); @@ -12755,14 +12755,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_RUN_BACK: data.Initialize(SMSG_SPLINE_MOVE_SET_RUN_BACK_SPEED, 1 + 8 + 4); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[2]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[2]); data.WriteByteSeq(bytes[1]); data.WriteByteSeq(bytes[7]); @@ -12777,14 +12777,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_SWIM: data.Initialize(SMSG_SPLINE_MOVE_SET_SWIM_SPEED, 1 + 8 + 4); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[6]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[6]); data.WriteByteSeq(bytes[0]); data.WriteByteSeq(bytes[3]); @@ -12798,14 +12798,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_SWIM_BACK: data.Initialize(SMSG_SPLINE_MOVE_SET_SWIM_BACK_SPEED, 1 + 8 + 4); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[7]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[7]); data.WriteByteSeq(bytes[1]); data.WriteByteSeq(bytes[0]); @@ -12819,14 +12819,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_TURN_RATE: data.Initialize(SMSG_SPLINE_MOVE_SET_TURN_RATE, 1 + 8 + 4); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[2]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[2]); data.WriteByteSeq(bytes[2]); data.WriteByteSeq(bytes[4]); @@ -12840,14 +12840,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_FLIGHT: data.Initialize(SMSG_SPLINE_MOVE_SET_FLIGHT_SPEED, 1 + 8 + 4); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[1]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[1]); data << float(GetSpeed(mtype)); @@ -12862,14 +12862,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_FLIGHT_BACK: data.Initialize(SMSG_SPLINE_MOVE_SET_FLIGHT_BACK_SPEED, 1 + 8 + 4); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[3]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[3]); data.WriteByteSeq(bytes[5]); data.WriteByteSeq(bytes[6]); @@ -12883,14 +12883,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_PITCH_RATE: data.Initialize(SMSG_SPLINE_MOVE_SET_PITCH_RATE, 1 + 8 + 4); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[1]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[1]); data.WriteByteSeq(bytes[0]); data.WriteByteSeq(bytes[1]); @@ -12937,14 +12937,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) { case MOVE_WALK: data.Initialize(SMSG_MOVE_SET_WALK_SPEED, 1 + 8 + 4 + 4 ); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[3]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[3]); data.WriteByteSeq(bytes[3]); data.WriteByteSeq(bytes[1]); @@ -12959,14 +12959,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_RUN: data.Initialize(SMSG_MOVE_SET_RUN_SPEED, 1 + 8 + 4 + 4 ); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[6]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[6]); data.WriteByteSeq(bytes[1]); @@ -12983,14 +12983,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_RUN_BACK: data.Initialize(SMSG_MOVE_SET_RUN_BACK_SPEED, 1 + 8 + 4 + 4 ); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[5]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[5]); data << float(GetSpeed(mtype)); @@ -13006,14 +13006,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_SWIM: data.Initialize(SMSG_MOVE_SET_SWIM_SPEED, 1 + 8 + 4 + 4 ); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[0]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[0]); data.WriteByteSeq(bytes[6]); data.WriteByteSeq(bytes[4]); @@ -13028,14 +13028,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_SWIM_BACK: data.Initialize(SMSG_MOVE_SET_SWIM_BACK_SPEED, 1 + 8 + 4 + 4 ); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[0]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[0]); data.WriteByteSeq(bytes[6]); data.WriteByteSeq(bytes[3]); @@ -13050,14 +13050,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_TURN_RATE: data.Initialize(SMSG_MOVE_SET_TURN_RATE, 1 + 8 + 4 + 4 ); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[4]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[4]); data << float(GetSpeed(mtype)); @@ -13073,14 +13073,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_FLIGHT: data.Initialize(SMSG_MOVE_SET_FLIGHT_SPEED, 1 + 8 + 4 + 4 ); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[3]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[3]); data << float(GetSpeed(mtype)); @@ -13096,14 +13096,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_FLIGHT_BACK: data.Initialize(SMSG_MOVE_SET_FLIGHT_BACK_SPEED, 1 + 8 + 4 + 4 ); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[7]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[7]); data.WriteByteSeq(bytes[0]); data << float(GetSpeed(mtype)); @@ -13118,14 +13118,14 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) break; case MOVE_PITCH_RATE: data.Initialize(SMSG_MOVE_SET_PITCH_RATE, 1 + 8 + 4 + 4 ); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[1]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[1]); data.WriteByteSeq(bytes[0]); data << uint32(0); @@ -17031,14 +17031,14 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ) uint64 guid = GetGUID(); uint8* bytes = (uint8*)&guid; - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[7]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[7]); data.WriteByteSeq(bytes[0]); data << float(speedXY); @@ -17371,14 +17371,14 @@ void Unit::JumpTo(float speedXY, float speedZ, bool forward) uint64 guid = GetGUID(); uint8* bytes = (uint8*)&guid; - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[4]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[7]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[7]); data.WriteByteSeq(bytes[0]); data << float(speedXY); diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 0461379b91b..94b40b921e9 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -751,33 +751,35 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket & recv_data) SendPacket(&data); } -void WorldSession::HandlePlayerLoginOpcode(WorldPacket & recv_data) +void WorldSession::HandlePlayerLoginOpcode(WorldPacket& recvData) { if (PlayerLoading() || GetPlayer() != NULL) { - sLog->outError("Player tryes to login again, AccountId = %d", GetAccountId()); + sLog->outError("Player tries to login again, AccountId = %d", GetAccountId()); return; } m_playerLoading = true; - uint64 playerGuid = 0; + ObjectGuid playerGuid; sLog->outStaticDebug("WORLD: Recvd Player Logon Message"); - - BitStream mask = recv_data.ReadBitStream(8); - - ByteBuffer bytes(8, true); - - recv_data.ReadXorByte(mask[6], bytes[5]); - recv_data.ReadXorByte(mask[0], bytes[0]); - recv_data.ReadXorByte(mask[4], bytes[3]); - recv_data.ReadXorByte(mask[1], bytes[4]); - recv_data.ReadXorByte(mask[2], bytes[7]); - recv_data.ReadXorByte(mask[5], bytes[2]); - recv_data.ReadXorByte(mask[7], bytes[6]); - recv_data.ReadXorByte(mask[3], bytes[1]); - - playerGuid = BitConverter::ToUInt64(bytes); + playerGuid[2] = recvData.ReadBit(); + playerGuid[3] = recvData.ReadBit(); + playerGuid[0] = recvData.ReadBit(); + playerGuid[6] = recvData.ReadBit(); + playerGuid[4] = recvData.ReadBit(); + playerGuid[5] = recvData.ReadBit(); + playerGuid[1] = recvData.ReadBit(); + playerGuid[7] = recvData.ReadBit(); + + recvData.ReadByteSeq(playerGuid[2]); + recvData.ReadByteSeq(playerGuid[7]); + recvData.ReadByteSeq(playerGuid[0]); + recvData.ReadByteSeq(playerGuid[3]); + recvData.ReadByteSeq(playerGuid[5]); + recvData.ReadByteSeq(playerGuid[6]); + recvData.ReadByteSeq(playerGuid[1]); + recvData.ReadByteSeq(playerGuid[4]); sLog->outDebug(LOG_FILTER_NETWORKIO, "Character (Guid: %u) logging in", GUID_LOPART(playerGuid)); @@ -802,9 +804,10 @@ void WorldSession::HandlePlayerLoginOpcode(WorldPacket & recv_data) void WorldSession::HandleLoadScreenOpcode(WorldPacket& recvPacket) { sLog->outStaticDebug("WORLD: Recvd CMSG_LOAD_SCREEN"); - uint8 unkMask; // Loading start: 0x80, loading end: 0x0 uint32 mapID; - recvPacket >> unkMask >> mapID; + + recvPacket >> mapID; + recvPacket.ReadBit(); // TODO: Do something with this packet } diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index 626221e9696..494a8471a6a 100755 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -62,18 +62,18 @@ void WorldSession::SendPartyResult(PartyOperation operation, const std::string& void WorldSession::HandleGroupInviteOpcode(WorldPacket & recv_data) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GROUP_INVITE"); - - BytesGuid guid; - guid.guid = 0; - - recv_data.ReadByteMask(guid.bytes[6]); - recv_data.ReadByteMask(guid.bytes[5]); - recv_data.ReadByteMask(guid.bytes[0]); - recv_data.ReadByteMask(guid.bytes[3]); - recv_data.ReadByteMask(guid.bytes[4]); - recv_data.ReadByteMask(guid.bytes[7]); - recv_data.ReadByteMask(guid.bytes[1]); - recv_data.ReadByteMask(guid.bytes[2]); + + //BytesGuid guid; + //guid.guid = 0; + + //recv_data.ReadByteMask(guid.bytes[6]); + //recv_data.ReadByteMask(guid.bytes[5]); + //recv_data.ReadByteMask(guid.bytes[0]); + //recv_data.ReadByteMask(guid.bytes[3]); + //recv_data.ReadByteMask(guid.bytes[4]); + //recv_data.ReadByteMask(guid.bytes[7]); + //recv_data.ReadByteMask(guid.bytes[1]); + //recv_data.ReadByteMask(guid.bytes[2]); recv_data.read_skip<uint32>(); recv_data.read_skip<uint32>(); @@ -82,16 +82,16 @@ void WorldSession::HandleGroupInviteOpcode(WorldPacket & recv_data) recv_data >> membername; recv_data.read_skip<uint32>(); - recv_data.ReadByteSeq(guid.bytes[0]); - recv_data.ReadByteSeq(guid.bytes[7]); - recv_data.ReadByteSeq(guid.bytes[4]); - recv_data.ReadByteSeq(guid.bytes[1]); - recv_data.ReadByteSeq(guid.bytes[2]); - recv_data.ReadByteSeq(guid.bytes[6]); - recv_data.ReadByteSeq(guid.bytes[5]); + //recv_data.ReadByteSeq(guid.bytes[0]); + //recv_data.ReadByteSeq(guid.bytes[7]); + //recv_data.ReadByteSeq(guid.bytes[4]); + //recv_data.ReadByteSeq(guid.bytes[1]); + //recv_data.ReadByteSeq(guid.bytes[2]); + //recv_data.ReadByteSeq(guid.bytes[6]); + //recv_data.ReadByteSeq(guid.bytes[5]); std::string string0; recv_data >> string0; - recv_data.ReadByteSeq(guid.bytes[3]); + //recv_data.ReadByteSeq(guid.bytes[3]); // attempt add selected player diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp index 7117c4f4bea..9d91feabcf6 100755 --- a/src/server/game/Handlers/GuildHandler.cpp +++ b/src/server/game/Handlers/GuildHandler.cpp @@ -46,7 +46,7 @@ void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket) uint64 guildGuid, playerGuid; recvPacket >> guildGuid >> playerGuid; - + // If guild doesn't exist or player is not part of the guild send error if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid)) if (guild->IsMember(playerGuid)) @@ -129,20 +129,8 @@ void WorldSession::HandleGuildRosterOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_ROSTER"); - BitStream mask = recvPacket.ReadBitStream(8); - ByteBuffer bytes(8, true); - - recvPacket.ReadXorByte(mask[0], bytes[7]); - recvPacket.ReadXorByte(mask[3], bytes[5]); - recvPacket.ReadXorByte(mask[4], bytes[4]); - recvPacket.ReadXorByte(mask[5], bytes[0]); - recvPacket.ReadXorByte(mask[6], bytes[1]); - recvPacket.ReadXorByte(mask[1], bytes[2]); - recvPacket.ReadXorByte(mask[2], bytes[6]); - recvPacket.ReadXorByte(mask[7], bytes[3]); - - uint64 guildGuid = BitConverter::ToUInt64(bytes); + uint64 guildGuid = 0; if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid)) if (guild->IsMember(GetPlayer()->GetGUID())) diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 1e29ea2621e..0bdff9016f7 100755 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -744,14 +744,14 @@ void WorldSession::SendListInventory(uint64 vendorGuid) if (!items) { WorldPacket data(SMSG_LIST_INVENTORY, 8 + 1 + 1); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[4]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[4]); data.WriteByteSeq(bytes[2]); data.WriteByteSeq(bytes[3]); @@ -771,14 +771,14 @@ void WorldSession::SendListInventory(uint64 vendorGuid) WorldPacket data(SMSG_LIST_INVENTORY, 8 + 1 + itemCount * 8 * 4); - data.WriteByteMask(bytes[5]); - data.WriteByteMask(bytes[6]); - data.WriteByteMask(bytes[1]); - data.WriteByteMask(bytes[2]); - data.WriteByteMask(bytes[3]); - data.WriteByteMask(bytes[0]); - data.WriteByteMask(bytes[7]); - data.WriteByteMask(bytes[4]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[1]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[4]); data.WriteByteSeq(bytes[2]); data.WriteByteSeq(bytes[3]); diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 1c02d2082b8..1ff10abc36b 100755 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -1098,22 +1098,23 @@ void WorldSession::HandleMoveTimeSkippedOpcode(WorldPacket & recv_data) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_MOVE_TIME_SKIPPED"); - BitStream mask = recv_data.ReadBitStream(8); + recv_data.rfinish(); + return; uint32 time; recv_data >> time; - ByteBuffer bytes(8, true); - recv_data.ReadXorByte(mask[0], bytes[1]); - recv_data.ReadXorByte(mask[1], bytes[4]); - recv_data.ReadXorByte(mask[7], bytes[2]); - recv_data.ReadXorByte(mask[5], bytes[5]); - recv_data.ReadXorByte(mask[3], bytes[0]); - recv_data.ReadXorByte(mask[6], bytes[7]); - recv_data.ReadXorByte(mask[2], bytes[6]); - recv_data.ReadXorByte(mask[4], bytes[3]); + //ByteBuffer bytes(8, true); + //recv_data.ReadXorByte(mask[0], bytes[1]); + //recv_data.ReadXorByte(mask[1], bytes[4]); + //recv_data.ReadXorByte(mask[7], bytes[2]); + //recv_data.ReadXorByte(mask[5], bytes[5]); + //recv_data.ReadXorByte(mask[3], bytes[0]); + //recv_data.ReadXorByte(mask[6], bytes[7]); + //recv_data.ReadXorByte(mask[2], bytes[6]); + //recv_data.ReadXorByte(mask[4], bytes[3]); - uint64 guid = BitConverter::ToUInt64(bytes); + //uint64 guid = BitConverter::ToUInt64(bytes); //TODO! @@ -1763,14 +1764,15 @@ void WorldSession::HandleInstanceLockResponse(WorldPacket& recvPacket) void WorldSession::HandleRequestHotfix(WorldPacket& recvPacket) { + recvPacket.rfinish(); + return; + uint32 type, count; recvPacket >> type >> count; ByteBuffer* guidBytes = new ByteBuffer[count]; - BitStream* mask = new BitStream[count]; for (uint32 i = 0; i < count; ++i) { - mask[i] = recvPacket.ReadBitStream(8); guidBytes[i].resize(8); // damn c++ not allowing to use non-default constructor with new[] } @@ -1779,15 +1781,15 @@ void WorldSession::HandleRequestHotfix(WorldPacket& recvPacket) for (uint32 i = 0; i < count; ++i) { recvPacket >> entry; - recvPacket.ReadXorByte(mask[i][7], guidBytes[i][2]); - recvPacket.ReadXorByte(mask[i][4], guidBytes[i][6]); - recvPacket.ReadXorByte(mask[i][1], guidBytes[i][3]); - recvPacket.ReadXorByte(mask[i][2], guidBytes[i][0]); - recvPacket.ReadXorByte(mask[i][3], guidBytes[i][5]); - recvPacket.ReadXorByte(mask[i][0], guidBytes[i][7]); - recvPacket.ReadXorByte(mask[i][6], guidBytes[i][1]); - recvPacket.ReadXorByte(mask[i][5], guidBytes[i][4]); - guid = BitConverter::ToUInt64(guidBytes[i]); + //recvPacket.ReadXorByte(mask[i][7], guidBytes[i][2]); + //recvPacket.ReadXorByte(mask[i][4], guidBytes[i][6]); + //recvPacket.ReadXorByte(mask[i][1], guidBytes[i][3]); + //recvPacket.ReadXorByte(mask[i][2], guidBytes[i][0]); + //recvPacket.ReadXorByte(mask[i][3], guidBytes[i][5]); + //recvPacket.ReadXorByte(mask[i][0], guidBytes[i][7]); + //recvPacket.ReadXorByte(mask[i][6], guidBytes[i][1]); + //recvPacket.ReadXorByte(mask[i][5], guidBytes[i][4]); + //guid = BitConverter::ToUInt64(guidBytes[i]); switch (type) { @@ -1803,7 +1805,6 @@ void WorldSession::HandleRequestHotfix(WorldPacket& recvPacket) } delete[] guidBytes; - delete[] mask; } void WorldSession::HandleUpdateMissileTrajectory(WorldPacket& recvPacket) diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 598dafb200a..57afc614545 100755 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -192,22 +192,14 @@ void WorldSession::HandleMoveTeleportAck(WorldPacket& recv_data) { sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_MOVE_TELEPORT_ACK"); - BitStream mask = recv_data.ReadBitStream(8); + recv_data.rfinish(); + return; uint32 flags, time; recv_data >> flags >> time; - ByteBuffer bytes(8, true); - recv_data.ReadXorByte(mask[6], bytes[1]); - recv_data.ReadXorByte(mask[0], bytes[3]); - recv_data.ReadXorByte(mask[1], bytes[2]); - recv_data.ReadXorByte(mask[7], bytes[0]); - recv_data.ReadXorByte(mask[5], bytes[6]); - recv_data.ReadXorByte(mask[3], bytes[4]); - recv_data.ReadXorByte(mask[2], bytes[7]); - recv_data.ReadXorByte(mask[4], bytes[5]); - uint64 guid = BitConverter::ToUInt64(bytes); + uint64 guid = 0; sLog->outStaticDebug("Guid " UI64FMTD, guid); sLog->outStaticDebug("Flags %u, time %u", flags, time/IN_MILLISECONDS); @@ -618,11 +610,8 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi) if (sequence == NULL) return; - BytesGuid guid; - BytesGuid tguid; - - guid.guid = 0; - tguid.guid = 0; + ObjectGuid guid; + ObjectGuid tguid; for (uint32 i = 0; i < MSE_COUNT; i++) { @@ -630,7 +619,7 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi) if (element >= MSEGuidByte0 && element <= MSEGuidByte7) { - data.ReadByteMask(guid.bytes[element - MSEGuidByte0]); + guid[element - MSEGuidByte0] = data.ReadBit(); continue; } @@ -638,13 +627,13 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi) element <= MSETransportGuidByte7) { if (HaveTransportData) - data.ReadByteMask(tguid.bytes[element - MSETransportGuidByte0]); + tguid[element - MSETransportGuidByte0] = data.ReadBit(); continue; } if (element >= MSEGuidByte0_2 && element <= MSEGuidByte7_2) { - data.ReadByteSeq(guid.bytes[element - MSEGuidByte0_2]); + data.ReadByteSeq(guid[element - MSEGuidByte0_2]); continue; } @@ -652,7 +641,7 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi) element <= MSETransportGuidByte7_2) { if (HaveTransportData) - data.ReadByteSeq(tguid.bytes[element - MSETransportGuidByte0_2]); + data.ReadByteSeq(tguid[element - MSETransportGuidByte0_2]); continue; } @@ -763,8 +752,8 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi) } } - mi->guid = guid.guid; - mi->t_guid = tguid.guid; + mi->guid = guid; + mi->t_guid = tguid; if (HaveTransportData && mi->pos.m_positionX != mi->t_pos.m_positionX) if (GetPlayer()->GetTransport()) @@ -866,7 +855,7 @@ void WorldSession::WriteMovementInfo(WorldPacket &data, MovementInfo* mi) if (element >= MSEGuidByte0 && element <= MSEGuidByte7) { - data.WriteByteMask(guid[element - MSEGuidByte0]); + data.WriteBit(guid[element - MSEGuidByte0]); continue; } @@ -874,7 +863,7 @@ void WorldSession::WriteMovementInfo(WorldPacket &data, MovementInfo* mi) element <= MSETransportGuidByte7) { if (HaveTransportData) - data.WriteByteMask(tguid[element - MSETransportGuidByte0]); + data.WriteBit(tguid[element - MSETransportGuidByte0]); continue; } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 844aae93ad4..f458f5a73dd 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -381,7 +381,7 @@ void InitOpcodes() //DEFINE_OPCODE_HANDLER(CMSG_LFG_TELEPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgTeleportOpcode ); //DEFINE_OPCODE_HANDLER(CMSG_LIST_INVENTORY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleListInventoryOpcode ); //DEFINE_OPCODE_HANDLER(CMSG_LOAD_DANCES, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); - //DEFINE_OPCODE_HANDLER(CMSG_LOAD_SCREEN, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleLoadScreenOpcode ); + DEFINE_OPCODE_HANDLER(CMSG_LOAD_SCREEN, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleLoadScreenOpcode ); //DEFINE_OPCODE_HANDLER(CMSG_LOGOUT_CANCEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLogoutCancelOpcode ); //DEFINE_OPCODE_HANDLER(CMSG_LOGOUT_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLogoutRequestOpcode ); //DEFINE_OPCODE_HANDLER(CMSG_LOG_DISCONNECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess ); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 7495a57f399..5d7d6b2d775 100755 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -84,12 +84,6 @@ struct AccountData std::string Data; }; -union BytesGuid -{ - uint8 bytes[8]; - uint64 guid; -}; - enum PartyOperation { PARTY_OP_INVITE = 0, diff --git a/src/server/shared/Database/PreparedStatement.cpp b/src/server/shared/Database/PreparedStatement.cpp index 58aa2bd3aa0..ae69fc5f913 100755 --- a/src/server/shared/Database/PreparedStatement.cpp +++ b/src/server/shared/Database/PreparedStatement.cpp @@ -230,11 +230,16 @@ void MySQLPreparedStatement::ClearParameters() } } +static bool ParementerIndexAssertFail(uint32 stmtIndex, uint8 index, uint32 paramCount) +{ + sLog->outError("Attempted to bind parameter %u%s on a PreparedStatement %u (statement has only %u parameters)", uint32(index) + 1, (index == 1 ? "st" : (index == 2 ? "nd" : (index == 3 ? "rd" : "nd"))), stmtIndex, paramCount); + return false; +} + //- Bind on mysql level bool MySQLPreparedStatement::CheckValidIndex(uint8 index) { - if (index >= m_paramCount) - return false; + ASSERT(index < m_paramCount || ParementerIndexAssertFail(m_stmt->m_index, index, m_paramCount)); if (m_paramsSet[index]) sLog->outSQLDriver("[WARNING] Prepared Statement (id: %u) trying to bind value on already bound index (%u).", m_stmt->m_index, index); diff --git a/src/server/shared/Packets/ByteBuffer.cpp b/src/server/shared/Packets/ByteBuffer.cpp deleted file mode 100644 index adb58936c75..00000000000 --- a/src/server/shared/Packets/ByteBuffer.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "ByteBuffer.h" - -void BitStream::Clear() -{ - _data.clear(); - _rpos = _wpos = 0; -} - -uint8 BitStream::GetBit(uint32 bit) -{ - ASSERT(_data.size() > bit); - return _data[bit]; -} - -uint8 BitStream::ReadBit() -{ - ASSERT(_data.size() < _rpos); - uint8 b = _data[_rpos]; - ++_rpos; - return b; -} - -void BitStream::WriteBit(uint32 bit) -{ - _data.push_back(bit ? uint8(1) : uint8(0)); - ++_wpos; -} - -template <typename T> void BitStream::WriteBits(T value, size_t bits) -{ - for (int32 i = bits-1; i >= 0; --i) - WriteBit((value >> i) & 1); -} - -bool BitStream::Empty() -{ - return _data.empty(); -} - -void BitStream::Reverse() -{ - uint32 len = GetLength(); - std::vector<uint8> b = _data; - Clear(); - - for(uint32 i = len; i > 0; --i) - WriteBit(b[i-1]); -} - -void BitStream::Print() -{ - if (!sLog->IsOutDebug()) - return; - std::stringstream ss; - ss << "BitStream: "; - for (uint32 i = 0; i < GetLength(); ++i) - ss << uint32(GetBit(i)) << " "; - - sLog->outDebug(LOG_FILTER_NETWORKIO, "%s", ss.str().c_str()); -} - -ByteBuffer::ByteBuffer(size_t res, bool init): _rpos(0), _wpos(0), _bitpos(8), _curbitval(0) -{ - if (init) - _storage.resize(res, 0); - else - _storage.reserve(res); -} diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h index b78d78c69f2..c08f794c5fa 100755 --- a/src/server/shared/Packets/ByteBuffer.h +++ b/src/server/shared/Packets/ByteBuffer.h @@ -77,60 +77,21 @@ class ByteBufferSourceException : public ByteBufferException } }; -class BitStream -{ - public: - BitStream(): _rpos(0), _wpos(0) {} - - BitStream(uint32 val, size_t len): _rpos(0), _wpos(0) - { - WriteBits(val, len); - } - - BitStream(BitStream const& bs) : _data(bs._data), _rpos(bs._rpos), _wpos(bs._wpos) {} - - void Clear(); - uint8 GetBit(uint32 bit); - uint8 ReadBit(); - void WriteBit(uint32 bit); - template <typename T> void WriteBits(T value, size_t bits); - bool Empty(); - void Reverse(); - void Print(); - - size_t GetLength() { return _data.size(); } - uint32 GetReadPosition() { return _rpos; } - uint32 GetWritePosition() { return _wpos; } - void SetReadPos(uint32 pos) { _rpos = pos; } - - uint8 const& operator[](uint32 const pos) const - { - return _data[pos]; - } - - uint8& operator[] (uint32 const pos) - { - return _data[pos]; - } - - private: - std::vector<uint8> _data; - uint32 _rpos, _wpos; -}; - class ByteBuffer { public: const static size_t DEFAULT_SIZE = 0x1000; // constructor - ByteBuffer(): _rpos(0), _wpos(0), _bitpos(8), _curbitval(0) + ByteBuffer() : _rpos(0), _wpos(0), _bitpos(8), _curbitval(0) { _storage.reserve(DEFAULT_SIZE); } - // constructor - ByteBuffer(size_t res, bool init = false); + ByteBuffer(size_t reserve) : _rpos(0), _wpos(0), _bitpos(8), _curbitval(0) + { + _storage.reserve(reserve); + } // copy constructor ByteBuffer(const ByteBuffer &buf) : _rpos(buf._rpos), _wpos(buf._wpos), @@ -205,43 +166,13 @@ class ByteBuffer return value; } - BitStream ReadBitStream(uint32 len) - { - BitStream b; - for (uint32 i = 0; i < len; ++i) - b.WriteBit(ReadBit()); - return b; - } - - void ReadByteMask(uint8& b) - { - b = ReadBit() ? 1 : 0; - } - + // Reads a byte (if needed) in-place void ReadByteSeq(uint8& b) { if (b != 0) b ^= read<uint8>(); } - uint8 ReadXorByte() - { - return ReadUInt8() ^ 1; - } - - void ReadXorByte(uint32 bit, uint8& byte) - { - if (!bit) - byte = 0; - else - byte = uint8(ReadUInt8() ^ bit); - } - - void WriteByteMask(uint8 b) - { - WriteBit(b); - } - void WriteByteSeq(uint8 b) { if (b != 0) @@ -505,69 +436,6 @@ class ByteBuffer } } - uint8 ReadUInt8() - { - uint8 u = 0; - (*this) >> u; - return u; - } - - uint16 ReadUInt16() - { - uint16 u = 0; - (*this) >> u; - return u; - } - - uint32 ReadUInt32() - { - uint32 u = 0; - (*this) >> u; - return u; - } - - uint64 ReadUInt64() - { - uint64 u = 0; - (*this) >> u; - return u; - } - - int8 ReadInt8() - { - int8 u = 0; - (*this) >> u; - return u; - } - - int16 ReadInt16() - { - int16 u = 0; - (*this) >> u; - return u; - } - - int32 ReadInt32() - { - uint32 u = 0; - (*this) >> u; - return u; - } - - int64 ReadInt64() - { - int64 u = 0; - (*this) >> u; - return u; - } - - std::string ReadString() - { - std::string s; - (*this) >> s; - return s; - } - std::string ReadString(uint32 length) { char* buffer = new char[length + 1]; @@ -578,20 +446,6 @@ class ByteBuffer return retval; } - bool ReadBoolean() - { - uint8 b = 0; - (*this) >> b; - return b > 0 ? true : false; - } - - float ReadSingle() - { - float f = 0; - (*this) >> f; - return f; - } - const uint8 *contents() const { return &_storage[0]; } size_t size() const { return _storage.size(); } @@ -844,7 +698,6 @@ inline ByteBuffer &operator>>(ByteBuffer &b, std::map<K, V> &m) return b; } -// TODO: Make a ByteBuffer.cpp and move all this inlining to it. template<> inline std::string ByteBuffer::read<std::string>() { std::string tmp; @@ -871,44 +724,5 @@ inline void ByteBuffer::read_skip<std::string>() read_skip<char*>(); } -class BitConverter -{ - public: - static uint8 ToUInt8(ByteBuffer const& buff, size_t start = 0) - { - return buff.read<uint8>(start); - } - - static uint16 ToUInt16(ByteBuffer const& buff, size_t start = 0) - { - return buff.read<uint16>(start); - } - - static uint32 ToUInt32(ByteBuffer const& buff, size_t start = 0) - { - return buff.read<uint32>(start); - } - - static uint64 ToUInt64(ByteBuffer const& buff, size_t start = 0) - { - return buff.read<uint64>(start); - } - - static int16 ToInt16(ByteBuffer const& buff, size_t start = 0) - { - return buff.read<int16>(start); - } - - static int32 ToInt32(ByteBuffer const& buff, size_t start = 0) - { - return buff.read<int32>(start); - } - - static int64 ToInt64(ByteBuffer const& buff, size_t start = 0) - { - return buff.read<int64>(start); - } -}; - #endif |
