diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-07-13 16:53:50 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-07-13 17:08:40 +0200 |
commit | 63212069380ac31b2ff56829458ad33c74bcdc5c (patch) | |
tree | 539888152342683f5cc09329dbf938be36c1750b /src | |
parent | 776b0a3c8585afedce65b1e0a63b431231a13cd1 (diff) | |
parent | db85bad1ff349d2e710de34d2a3dd8ae2a2a07a8 (diff) |
Merge branch '6.x' of https://github.com/TrinityCore/TrinityCore into legion
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/CreatureAI.h | 8 | ||||
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 37 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 46 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Object.h | 32 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 55 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 4 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
9 files changed, 125 insertions, 71 deletions
diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index f175050e107..a2c5bb0db3e 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -127,6 +127,14 @@ class TC_GAME_API CreatureAI : public UnitAI virtual void SummonedCreatureDespawn(Creature* /*summon*/) { } virtual void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) { } + // Called when the creature successfully summons a gameobject + virtual void JustSummonedGameobject(GameObject* /*gameobject*/) { } + virtual void SummonedGameobjectDespawn(GameObject* /*gameobject*/) { } + + // Called when the creature successfully registers a dynamicobject + virtual void JustRegisteredDynObject(DynamicObject* /*dynObject*/) { } + virtual void JustUnregisteredDynObject(DynamicObject* /*dynObject*/) { } + // Called when hit by a spell virtual void SpellHit(Unit* /*caster*/, SpellInfo const* /*spell*/) { } diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 1ca20e0c4cc..eb7b3ec9d85 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -34,7 +34,6 @@ #include "UpdateFieldFlags.h" #include "World.h" #include "Transport.h" -#include <boost/dynamic_bitset.hpp> GameObject::GameObject() : WorldObject(false), MapObject(), m_model(NULL), m_goValue(), m_AI(NULL), _animKitId(0) @@ -2303,16 +2302,16 @@ void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* t bool forcedFlags = GetGoType() == GAMEOBJECT_TYPE_CHEST && GetGOInfo()->chest.usegrouplootrules && HasLootRecipient(); bool targetIsGM = target->IsGameMaster(); - boost::dynamic_bitset<uint32> updateMask(m_valuesCount); + std::size_t blockCount = UpdateMask::GetBlockCount(m_valuesCount); uint32* flags = GameObjectUpdateFieldFlags; uint32 visibleFlag = UF_FLAG_PUBLIC; if (GetOwnerGUID() == target->GetGUID()) visibleFlag |= UF_FLAG_OWNER; - *data << uint8(updateMask.num_blocks()); + *data << uint8(blockCount); std::size_t maskPos = data->wpos(); - data->resize(data->size() + updateMask.num_blocks() * sizeof(uint32)); + data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType)); for (uint16 index = 0; index < m_valuesCount; ++index) { @@ -2320,7 +2319,7 @@ void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* t ((updateType == UPDATETYPE_VALUES ? _changesMask[index] : m_uint32Values[index]) && (flags[index] & visibleFlag)) || (index == GAMEOBJECT_FLAGS && forcedFlags)) { - updateMask.set(index); + UpdateMask::SetUpdateBit(data->contents() + maskPos, index); if (index == OBJECT_DYNAMIC_FLAGS) { @@ -2394,8 +2393,6 @@ void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* t *data << m_uint32Values[index]; // other cases } } - - boost::to_block_range(updateMask, reinterpret_cast<uint32*>(data->contents() + maskPos)); } void GameObject::GetRespawnPosition(float &x, float &y, float &z, float* ori /* = NULL*/) const diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 2372318ad2d..5acfa65ee7b 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -33,7 +33,6 @@ #include "TradeData.h" #include "GameTables.h" #include "CollectionMgr.h" -#include <boost/dynamic_bitset.hpp> void AddItemsSetItem(Player* player, Item* item) { @@ -1244,14 +1243,14 @@ void Item::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player* if (!target) return; - boost::dynamic_bitset<uint32> updateMask(_dynamicValuesCount); + std::size_t blockCount = UpdateMask::GetBlockCount(_dynamicValuesCount); uint32* flags = nullptr; uint32 visibleFlag = GetDynamicUpdateFieldData(target, flags); - *data << uint8(updateMask.num_blocks()); + *data << uint8(blockCount); std::size_t maskPos = data->wpos(); - data->resize(data->size() + updateMask.num_blocks() * sizeof(uint32)); + data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType)); for (uint16 index = 0; index < _dynamicValuesCount; ++index) { @@ -1259,43 +1258,45 @@ void Item::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player* if (_fieldNotifyFlags & flags[index] || ((updateType == UPDATETYPE_VALUES ? _dynamicChangesMask[index] : !values.empty()) && (flags[index] & visibleFlag))) { - updateMask.set(index); + UpdateMask::SetUpdateBit(data->contents() + maskPos, index); - boost::dynamic_bitset<uint32> arrayMask(values.size()); - *data << uint16(arrayMask.num_blocks()); - std::size_t fieldMaskPos = data->wpos(); - data->resize(data->size() + arrayMask.num_blocks() * sizeof(uint32)); + std::size_t arrayBlockCount = UpdateMask::GetBlockCount(values.size()); + *data << uint16(UpdateMask::EncodeDynamicFieldChangeType(arrayBlockCount, _dynamicChangesMask[index], updateType)); + if (_dynamicChangesMask[index] == UpdateMask::VALUE_AND_SIZE_CHANGED && updateType == UPDATETYPE_VALUES) + *data << uint32(values.size()); + + std::size_t arrayMaskPos = data->wpos(); + data->resize(data->size() + arrayBlockCount * sizeof(UpdateMask::BlockType)); if (index != ITEM_DYNAMIC_FIELD_MODIFIERS) { for (std::size_t v = 0; v < values.size(); ++v) { if (updateType == UPDATETYPE_VALUES ? _dynamicChangesArrayMask[index][v] : values[v]) { - arrayMask.set(v); + UpdateMask::SetUpdateBit(data->contents() + arrayMaskPos, v); *data << uint32(values[v]); } } - } else { // in case of ITEM_DYNAMIC_FIELD_MODIFIERS it is ITEM_FIELD_MODIFIERS_MASK that controls index of each value, not updatemask // so we just have to write this starting from 0 index - for (std::size_t v = 0, m = 0; v < values.size(); ++v) + uint32 m = 0; + for (std::size_t v = 0; v < values.size(); ++v) { - if (values[v] || _dynamicChangesArrayMask[index][v]) + if (values[v]) { - arrayMask.set(m++); + UpdateMask::SetUpdateBit(data->contents() + arrayMaskPos, m++); *data << uint32(values[v]); } } - } - boost::to_block_range(arrayMask, reinterpret_cast<uint32*>(data->contents() + fieldMaskPos)); + if (_changesMask[ITEM_FIELD_MODIFIERS_MASK] && updateType == UPDATETYPE_VALUES) + data->put(arrayMaskPos - sizeof(m), m); + } } } - - boost::to_block_range(updateMask, reinterpret_cast<uint32*>(data->contents() + maskPos)); } void Item::AddToObjectUpdate() diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index d61fdf09c93..d6157b43dde 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -45,7 +45,6 @@ #include "BattlefieldMgr.h" #include "GameObjectPackets.h" #include "MiscPackets.h" -#include <boost/dynamic_bitset.hpp> Object::Object() { @@ -764,27 +763,25 @@ void Object::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* targe if (!target) return; - boost::dynamic_bitset<uint32> updateMask(m_valuesCount); + std::size_t blockCount = UpdateMask::GetBlockCount(m_valuesCount); uint32* flags = NULL; uint32 visibleFlag = GetUpdateFieldData(target, flags); ASSERT(flags); - *data << uint8(updateMask.num_blocks()); + *data << uint8(blockCount); std::size_t maskPos = data->wpos(); - data->resize(data->size() + updateMask.num_blocks() * sizeof(uint32)); + data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType)); for (uint16 index = 0; index < m_valuesCount; ++index) { if (_fieldNotifyFlags & flags[index] || ((updateType == UPDATETYPE_VALUES ? _changesMask[index] : m_uint32Values[index]) && (flags[index] & visibleFlag))) { - updateMask.set(index); + UpdateMask::SetUpdateBit(data->contents() + maskPos, index); *data << m_uint32Values[index]; } } - - boost::to_block_range(updateMask, reinterpret_cast<uint32*>(data->contents() + maskPos)); } void Object::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const @@ -792,14 +789,14 @@ void Object::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player if (!target) return; - boost::dynamic_bitset<uint32> updateMask(_dynamicValuesCount); + std::size_t blockCount = UpdateMask::GetBlockCount(_dynamicValuesCount); uint32* flags = nullptr; uint32 visibleFlag = GetDynamicUpdateFieldData(target, flags); - *data << uint8(updateMask.num_blocks()); + *data << uint8(blockCount); std::size_t maskPos = data->wpos(); - data->resize(data->size() + updateMask.num_blocks() * sizeof(uint32)); + data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType)); for (uint16 index = 0; index < _dynamicValuesCount; ++index) { @@ -807,26 +804,25 @@ void Object::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player if (_fieldNotifyFlags & flags[index] || ((updateType == UPDATETYPE_VALUES ? _dynamicChangesMask[index] : !values.empty()) && (flags[index] & visibleFlag))) { - updateMask.set(index); + UpdateMask::SetUpdateBit(data->contents() + maskPos, index); + + std::size_t arrayBlockCount = UpdateMask::GetBlockCount(values.size()); + *data << uint16(UpdateMask::EncodeDynamicFieldChangeType(arrayBlockCount, _dynamicChangesMask[index], updateType)); + if (_dynamicChangesMask[index] == UpdateMask::VALUE_AND_SIZE_CHANGED && updateType == UPDATETYPE_VALUES) + *data << uint32(values.size()); - boost::dynamic_bitset<uint32> arrayMask(values.size()); - *data << uint16(arrayMask.num_blocks()); - std::size_t fieldMaskPos = data->wpos(); - data->resize(data->size() + arrayMask.num_blocks() * sizeof(uint32)); + std::size_t arrayMaskPos = data->wpos(); + data->resize(data->size() + arrayBlockCount * sizeof(UpdateMask::BlockType)); for (std::size_t v = 0; v < values.size(); ++v) { if (updateType == UPDATETYPE_VALUES ? _dynamicChangesArrayMask[index][v] : values[v]) { - arrayMask.set(v); + UpdateMask::SetUpdateBit(data->contents() + arrayMaskPos, v); *data << uint32(values[v]); } } - - boost::to_block_range(arrayMask, reinterpret_cast<uint32*>(data->contents() + fieldMaskPos)); } } - - boost::to_block_range(updateMask, reinterpret_cast<uint32*>(data->contents() + maskPos)); } void Object::AddToObjectUpdateIfNeeded() @@ -1378,7 +1374,7 @@ void Object::RemoveDynamicValue(uint16 index, uint32 value) if (values[i] == value) { values[i] = 0; - _dynamicChangesMask[index] = 1; + _dynamicChangesMask[index] = UpdateMask::VALUE_CHANGED; _dynamicChangesArrayMask[index][i] = 1; AddToObjectUpdateIfNeeded(); @@ -1393,7 +1389,7 @@ void Object::ClearDynamicValue(uint16 index) if (!_dynamicValues[index].empty()) { _dynamicValues[index].clear(); - _dynamicChangesMask[index] = 1; + _dynamicChangesMask[index] = UpdateMask::VALUE_AND_SIZE_CHANGED; _dynamicChangesArrayMask[index].clear(); AddToObjectUpdateIfNeeded(); @@ -1404,9 +1400,13 @@ void Object::SetDynamicValue(uint16 index, uint16 offset, uint32 value) { ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false)); + UpdateMask::DynamicFieldChangeType changeType = UpdateMask::VALUE_CHANGED; std::vector<uint32>& values = _dynamicValues[index]; if (values.size() <= offset) + { values.resize(offset + 1); + changeType = UpdateMask::VALUE_AND_SIZE_CHANGED; + } if (_dynamicChangesArrayMask[index].size() <= offset) _dynamicChangesArrayMask[index].resize((offset / 32 + 1) * 32); @@ -1414,7 +1414,7 @@ void Object::SetDynamicValue(uint16 index, uint16 offset, uint32 value) if (values[offset] != value) { values[offset] = value; - _dynamicChangesMask[index] = 1; + _dynamicChangesMask[index] = changeType; _dynamicChangesArrayMask[index][offset] = 1; AddToObjectUpdateIfNeeded(); diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index e0aedc79c7f..a78caf15e44 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -92,6 +92,36 @@ class ZoneScript; typedef std::unordered_map<Player*, UpdateData> UpdateDataMapType; +namespace UpdateMask +{ + typedef uint32 BlockType; + + enum DynamicFieldChangeType : uint16 + { + VALUE_CHANGED = 0x7FFF, + VALUE_AND_SIZE_CHANGED = 0x8000 + }; + + inline std::size_t GetBlockCount(std::size_t bitCount) + { + using BitsPerBlock = std::integral_constant<std::size_t, sizeof(BlockType) * 8>; + return (bitCount + BitsPerBlock::value - 1) / BitsPerBlock::value; + } + + inline std::size_t EncodeDynamicFieldChangeType(std::size_t blockCount, DynamicFieldChangeType changeType, uint8 updateType) + { + return blockCount | ((changeType & VALUE_AND_SIZE_CHANGED) * (3 - updateType /*this part evaluates to 0 if update type is not VALUES*/)); + } + + template<typename T> + inline void SetUpdateBit(T* data, std::size_t bitIndex) + { + static_assert(std::is_integral<T>::value && std::is_unsigned<T>::value, "Type used for SetUpdateBit data arg is not an unsigned integer"); + using BitsPerBlock = std::integral_constant<std::size_t, sizeof(T) * 8>; + data[bitIndex / BitsPerBlock::value] |= T(1) << (bitIndex % BitsPerBlock::value); + } +} + // Helper class used to iterate object dynamic fields while interpreting them as a structure instead of raw int array template<class T> class DynamicFieldStructuredView @@ -301,7 +331,7 @@ class TC_GAME_API Object std::vector<uint32>* _dynamicValues; std::vector<uint8> _changesMask; - std::vector<uint8> _dynamicChangesMask; + std::vector<UpdateMask::DynamicFieldChangeType> _dynamicChangesMask; std::vector<uint8>* _dynamicChangesArrayMask; uint16 m_valuesCount; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 4288b9aef12..c836fda5435 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -52,7 +52,6 @@ class Pet; class PlayerMenu; class PlayerSocial; class SpellCastTargets; -class UpdateMask; class PlayerAI; typedef std::deque<Mail*> PlayerMails; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index b535e2225ac..1dde054a0a6 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -70,7 +70,6 @@ #include "VehiclePackets.h" #include "LootPackets.h" #include "PartyPackets.h" -#include <boost/dynamic_bitset.hpp> #include <cmath> float baseMoveSpeed[MAX_MOVE_TYPE] = @@ -4673,24 +4672,31 @@ void Unit::ApplyStatPercentBuffMod(Stats stat, float val, bool apply) void Unit::_RegisterDynObject(DynamicObject* dynObj) { m_dynObj.push_back(dynObj); + if (GetTypeId() == TYPEID_UNIT && IsAIEnabled) + ToCreature()->AI()->JustRegisteredDynObject(dynObj); } void Unit::_UnregisterDynObject(DynamicObject* dynObj) { m_dynObj.remove(dynObj); + if (GetTypeId() == TYPEID_UNIT && IsAIEnabled) + ToCreature()->AI()->JustUnregisteredDynObject(dynObj); } -DynamicObject* Unit::GetDynObject(uint32 spellId) +DynamicObject* Unit::GetDynObject(uint32 spellId) const { - if (m_dynObj.empty()) - return NULL; - for (DynObjectList::const_iterator i = m_dynObj.begin(); i != m_dynObj.end();++i) - { - DynamicObject* dynObj = *i; - if (dynObj->GetSpellId() == spellId) - return dynObj; - } - return NULL; + std::vector<DynamicObject*> dynamicobjects = GetDynObjects(spellId); + return dynamicobjects.empty() ? nullptr : dynamicobjects.front(); +} + +std::vector<DynamicObject*> Unit::GetDynObjects(uint32 spellId) const +{ + std::vector<DynamicObject*> dynamicobjects; + for (DynObjectList::const_iterator i = m_dynObj.begin(); i != m_dynObj.end(); ++i) + if ((*i)->GetSpellId() == spellId) + dynamicobjects.push_back(*i); + + return dynamicobjects; } void Unit::RemoveDynObject(uint32 spellId) @@ -4718,11 +4724,18 @@ void Unit::RemoveAllDynObjects() GameObject* Unit::GetGameObject(uint32 spellId) const { + std::vector<GameObject*> gameobjects = GetGameObjects(spellId); + return gameobjects.empty() ? nullptr : gameobjects.front(); +} + +std::vector<GameObject*> Unit::GetGameObjects(uint32 spellId) const +{ + std::vector<GameObject*> gameobjects; for (GameObjectList::const_iterator i = m_gameObj.begin(); i != m_gameObj.end(); ++i) if ((*i)->GetSpellId() == spellId) - return *i; + gameobjects.push_back(*i); - return NULL; + return gameobjects; } void Unit::AddGameObject(GameObject* gameObj) @@ -4741,6 +4754,9 @@ void Unit::AddGameObject(GameObject* gameObj) // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existing cases) GetSpellHistory()->StartCooldown(createBySpell, 0, nullptr, true); } + + if (GetTypeId() == TYPEID_UNIT && ToCreature()->IsAIEnabled) + ToCreature()->AI()->JustSummonedGameobject(gameObj); } void Unit::RemoveGameObject(GameObject* gameObj, bool del) @@ -4773,6 +4789,9 @@ void Unit::RemoveGameObject(GameObject* gameObj, bool del) m_gameObj.remove(gameObj); + if (GetTypeId() == TYPEID_UNIT && ToCreature()->IsAIEnabled) + ToCreature()->AI()->SummonedGameobjectDespawn(gameObj); + if (del) { gameObj->SetRespawnTime(0); @@ -15678,7 +15697,7 @@ void Unit::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) else if (GetTypeId() == TYPEID_PLAYER) valCount = PLAYER_FIELD_END_NOT_SELF; - boost::dynamic_bitset<uint32> updateMask(valCount); + std::size_t blockCount = UpdateMask::GetBlockCount(valCount); Player* plr = GetCharmerOrOwnerPlayerOrPlayerItself(); if (GetOwnerGUID() == target->GetGUID()) @@ -15693,9 +15712,9 @@ void Unit::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) Creature const* creature = ToCreature(); - *data << uint8(updateMask.num_blocks()); + *data << uint8(blockCount); std::size_t maskPos = data->wpos(); - data->resize(data->size() + updateMask.num_blocks() * sizeof(uint32)); + data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType)); for (uint16 index = 0; index < valCount; ++index) { @@ -15704,7 +15723,7 @@ void Unit::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) ((updateType == UPDATETYPE_VALUES ? _changesMask[index] : m_uint32Values[index]) && (flags[index] & visibleFlag)) || (index == UNIT_FIELD_AURASTATE && HasFlag(UNIT_FIELD_AURASTATE, PER_CASTER_AURA_STATE_MASK))) { - updateMask.set(index); + UpdateMask::SetUpdateBit(data->contents() + maskPos, index); if (index == UNIT_NPC_FLAGS) { @@ -15819,8 +15838,6 @@ void Unit::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) } } } - - boost::to_block_range(updateMask, reinterpret_cast<uint32*>(data->contents() + maskPos)); } void Unit::DestroyForPlayer(Player* target) const diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index f991720b1eb..e219d04908f 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -2038,11 +2038,13 @@ class TC_GAME_API Unit : public WorldObject // DynamicObject management void _RegisterDynObject(DynamicObject* dynObj); void _UnregisterDynObject(DynamicObject* dynObj); - DynamicObject* GetDynObject(uint32 spellId); + DynamicObject* GetDynObject(uint32 spellId) const; + std::vector<DynamicObject*> GetDynObjects(uint32 spellId) const; void RemoveDynObject(uint32 spellId); void RemoveAllDynObjects(); GameObject* GetGameObject(uint32 spellId) const; + std::vector<GameObject*> GetGameObjects(uint32 spellId) const; void AddGameObject(GameObject* gameObj); void RemoveGameObject(GameObject* gameObj, bool del); void RemoveGameObject(uint32 spellid, bool del); diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index bae5da71a9e..381b9093e3a 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -603,7 +603,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_QUERY_CREATURE, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Query::QueryCreature, &WorldSession::HandleCreatureQuery); DEFINE_HANDLER(CMSG_QUERY_GAME_OBJECT, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Query::QueryGameObject, &WorldSession::HandleGameObjectQueryOpcode); DEFINE_HANDLER(CMSG_QUERY_GARRISON_CREATURE_NAME, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_QUERY_GUILD_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::QueryGuildInfo, &WorldSession::HandleGuildQueryOpcode); + DEFINE_HANDLER(CMSG_QUERY_GUILD_INFO, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Guild::QueryGuildInfo, &WorldSession::HandleGuildQueryOpcode); DEFINE_HANDLER(CMSG_QUERY_INSPECT_ACHIEVEMENTS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Inspect::QueryInspectAchievements, &WorldSession::HandleQueryInspectAchievements); DEFINE_HANDLER(CMSG_QUERY_NEXT_MAIL_TIME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Mail::MailQueryNextMailTime, &WorldSession::HandleQueryNextMailTime); DEFINE_HANDLER(CMSG_QUERY_NPC_TEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Query::QueryNPCText, &WorldSession::HandleNpcTextQueryOpcode); |