Core/PacketIO: Updated garrison, guild and inspect packets

This commit is contained in:
Shauren
2016-06-19 23:56:40 +02:00
parent 0de1adf281
commit 42f6bb4d37
10 changed files with 267 additions and 160 deletions

View File

@@ -339,6 +339,7 @@ Garrison::Plot const* Garrison::GetPlot(uint32 garrPlotInstanceId) const
void Garrison::LearnBlueprint(uint32 garrBuildingId)
{
WorldPackets::Garrison::GarrisonLearnBlueprintResult learnBlueprintResult;
learnBlueprintResult.GarrTypeID = GARRISON_TYPE_GARRISON;
learnBlueprintResult.BuildingID = garrBuildingId;
learnBlueprintResult.Result = GARRISON_SUCCESS;
@@ -355,6 +356,7 @@ void Garrison::LearnBlueprint(uint32 garrBuildingId)
void Garrison::UnlearnBlueprint(uint32 garrBuildingId)
{
WorldPackets::Garrison::GarrisonUnlearnBlueprintResult unlearnBlueprintResult;
unlearnBlueprintResult.GarrTypeID = GARRISON_TYPE_GARRISON;
unlearnBlueprintResult.BuildingID = garrBuildingId;
unlearnBlueprintResult.Result = GARRISON_SUCCESS;
@@ -371,6 +373,7 @@ void Garrison::UnlearnBlueprint(uint32 garrBuildingId)
void Garrison::PlaceBuilding(uint32 garrPlotInstanceId, uint32 garrBuildingId)
{
WorldPackets::Garrison::GarrisonPlaceBuildingResult placeBuildingResult;
placeBuildingResult.GarrTypeID = GARRISON_TYPE_GARRISON;
placeBuildingResult.Result = CheckBuildingPlacement(garrPlotInstanceId, garrBuildingId);
if (placeBuildingResult.Result == GARRISON_SUCCESS)
{
@@ -403,6 +406,7 @@ void Garrison::PlaceBuilding(uint32 garrPlotInstanceId, uint32 garrBuildingId)
if (oldBuildingId)
{
WorldPackets::Garrison::GarrisonBuildingRemoved buildingRemoved;
buildingRemoved.GarrTypeID = GARRISON_TYPE_GARRISON;
buildingRemoved.Result = GARRISON_SUCCESS;
buildingRemoved.GarrPlotInstanceID = garrPlotInstanceId;
buildingRemoved.GarrBuildingID = oldBuildingId;
@@ -418,6 +422,7 @@ void Garrison::PlaceBuilding(uint32 garrPlotInstanceId, uint32 garrBuildingId)
void Garrison::CancelBuildingConstruction(uint32 garrPlotInstanceId)
{
WorldPackets::Garrison::GarrisonBuildingRemoved buildingRemoved;
buildingRemoved.GarrTypeID = GARRISON_TYPE_GARRISON;
buildingRemoved.Result = CheckBuildingRemoval(garrPlotInstanceId);
if (buildingRemoved.Result == GARRISON_SUCCESS)
{
@@ -445,6 +450,7 @@ void Garrison::CancelBuildingConstruction(uint32 garrPlotInstanceId)
ASSERT(restored);
WorldPackets::Garrison::GarrisonPlaceBuildingResult placeBuildingResult;
placeBuildingResult.GarrTypeID = GARRISON_TYPE_GARRISON;
placeBuildingResult.Result = GARRISON_SUCCESS;
placeBuildingResult.BuildingInfo.GarrPlotInstanceID = garrPlotInstanceId;
placeBuildingResult.BuildingInfo.GarrBuildingID = restored;
@@ -487,6 +493,7 @@ void Garrison::ActivateBuilding(uint32 garrPlotInstanceId)
void Garrison::AddFollower(uint32 garrFollowerId)
{
WorldPackets::Garrison::GarrisonAddFollowerResult addFollowerResult;
addFollowerResult.GarrTypeID = GARRISON_TYPE_GARRISON;
GarrFollowerEntry const* followerEntry = sGarrFollowerStore.LookupEntry(garrFollowerId);
if (_followerIds.count(garrFollowerId) || !followerEntry)
{
@@ -528,20 +535,24 @@ Garrison::Follower const* Garrison::GetFollower(uint64 dbId) const
void Garrison::SendInfo()
{
WorldPackets::Garrison::GetGarrisonInfoResult garrisonInfo;
garrisonInfo.GarrSiteID = _siteLevel->SiteID;
garrisonInfo.GarrSiteLevelID = _siteLevel->ID;
garrisonInfo.FactionIndex = GetFaction();
garrisonInfo.NumFollowerActivationsRemaining = _followerActivationsRemainingToday;
garrisonInfo.Garrisons.emplace_back();
WorldPackets::Garrison::GarrisonInfo& garrison = garrisonInfo.Garrisons.back();
garrison.GarrTypeID = GARRISON_TYPE_GARRISON;
garrison.GarrSiteID = _siteLevel->SiteID;
garrison.GarrSiteLevelID = _siteLevel->ID;
garrison.NumFollowerActivationsRemaining = _followerActivationsRemainingToday;
for (auto& p : _plots)
{
Plot& plot = p.second;
garrisonInfo.Plots.push_back(&plot.PacketInfo);
garrison.Plots.push_back(&plot.PacketInfo);
if (plot.BuildingInfo.PacketInfo)
garrisonInfo.Buildings.push_back(plot.BuildingInfo.PacketInfo.get_ptr());
garrison.Buildings.push_back(plot.BuildingInfo.PacketInfo.get_ptr());
}
for (auto const& p : _followers)
garrisonInfo.Followers.push_back(&p.second.PacketInfo);
garrison.Followers.push_back(&p.second.PacketInfo);
_owner->SendDirectMessage(garrisonInfo.Write());
}
@@ -567,6 +578,7 @@ void Garrison::SendRemoteInfo() const
void Garrison::SendBlueprintAndSpecializationData()
{
WorldPackets::Garrison::GarrisonRequestBlueprintAndSpecializationDataResult data;
data.GarrTypeID = GARRISON_TYPE_GARRISON;
data.BlueprintsKnown = &_knownBuildings;
_owner->SendDirectMessage(data.Write());
}
@@ -797,6 +809,7 @@ void Garrison::Plot::DeleteGameObject(Map* map)
void Garrison::Plot::ClearBuildingInfo(Player* owner)
{
WorldPackets::Garrison::GarrisonPlotPlaced plotPlaced;
plotPlaced.GarrTypeID = GARRISON_TYPE_GARRISON;
plotPlaced.PlotInfo = &PacketInfo;
owner->SendDirectMessage(plotPlaced.Write());

View File

@@ -21,6 +21,12 @@
#include "Player.h"
#include "GarrisonPackets.h"
enum GarrisonType
{
GARRISON_TYPE_GARRISON = 2,
GARRISON_TYPE_CLASS_ORDER = 3
};
enum GarrisonFactionIndex
{
GARRISON_FACTION_INDEX_HORDE = 0,
@@ -74,7 +80,8 @@ enum GarrisonFollowerStatus
{
FOLLOWER_STATUS_FAVORITE = 0x01,
FOLLOWER_STATUS_EXHAUSTED = 0x02,
FOLLOWER_STATUS_INACTIVE = 0x04
FOLLOWER_STATUS_INACTIVE = 0x04,
FOLLOWER_STATUS_TROOP = 0x08
};
class GameObject;

View File

@@ -3214,21 +3214,16 @@ void Guild::_SendBankContentUpdate(uint8 tabId, SlotIds slots) const
if (tabItem)
{
uint32 enchants = 0;
for (uint32 ench = 0; ench < MAX_ENCHANTMENT_SLOT; ++ench)
if (tabItem->GetEnchantmentId(EnchantmentSlot(ench)))
++enchants;
itemInfo.SocketEnchant.reserve(enchants);
for (uint32 ench = 0; ench < MAX_ENCHANTMENT_SLOT; ++ench)
for (std::size_t i = 0; i < tabItem->GetDynamicValues(ITEM_DYNAMIC_FIELD_GEMS).size(); ++i)
{
if (uint32 enchantId = tabItem->GetEnchantmentId(EnchantmentSlot(ench)))
{
WorldPackets::Guild::GuildBankItemInfo::GuildBankSocketEnchant socketEnchant;
socketEnchant.SocketEnchantID = int32(enchantId);
socketEnchant.SocketIndex = int32(ench);
itemInfo.SocketEnchant.push_back(socketEnchant);
}
uint32 gemItemId = tabItem->GetDynamicValue(ITEM_DYNAMIC_FIELD_GEMS, i);
if (!gemItemId)
continue;
WorldPackets::Item::ItemGemInstanceData gem;
gem.Slot = i;
gem.Item.ItemID = gemItemId;
itemInfo.SocketEnchant.push_back(gem);
}
}
@@ -3302,21 +3297,16 @@ void Guild::SendBankList(WorldSession* session, uint8 tabId, bool fullUpdate) co
itemInfo.OnUseEnchantmentID = 0/*int32(tabItem->GetItemSuffixFactor())*/;
itemInfo.Flags = 0;
uint32 enchants = 0;
for (uint32 ench = 0; ench < MAX_ENCHANTMENT_SLOT; ++ench)
if (tabItem->GetEnchantmentId(EnchantmentSlot(ench)))
++enchants;
itemInfo.SocketEnchant.reserve(enchants);
for (uint32 ench = 0; ench < MAX_ENCHANTMENT_SLOT; ++ench)
for (std::size_t i = 0; i < tabItem->GetDynamicValues(ITEM_DYNAMIC_FIELD_GEMS).size(); ++i)
{
if (uint32 enchantId = tabItem->GetEnchantmentId(EnchantmentSlot(ench)))
{
WorldPackets::Guild::GuildBankItemInfo::GuildBankSocketEnchant socketEnchant;
socketEnchant.SocketEnchantID = int32(enchantId);
socketEnchant.SocketIndex = int32(ench);
itemInfo.SocketEnchant.push_back(socketEnchant);
}
uint32 gemItemId = tabItem->GetDynamicValue(ITEM_DYNAMIC_FIELD_GEMS, i);
if (!gemItemId)
continue;
WorldPackets::Item::ItemGemInstanceData gem;
gem.Slot = i;
gem.Item.ItemID = gemItemId;
itemInfo.SocketEnchant.push_back(gem);
}
itemInfo.Locked = false;

View File

@@ -16,6 +16,7 @@
*/
#include "GarrisonPackets.h"
#include "DB2Structure.h"
WorldPacket const* WorldPackets::Garrison::GarrisonCreateResult::Write()
{
@@ -64,9 +65,11 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonFollowe
data << uint32(follower.ItemLevelWeapon);
data << uint32(follower.ItemLevelArmor);
data << uint32(follower.Xp);
data << uint32(follower.Durability);
data << uint32(follower.CurrentBuildingID);
data << uint32(follower.CurrentMissionID);
data << uint32(follower.AbilityID.size());
data << uint32(follower.ZoneSupportSpellID);
data << uint32(follower.FollowerStatus);
for (GarrAbilityEntry const* ability : follower.AbilityID)
data << uint32(ability->ID);
@@ -88,6 +91,21 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonMission
data << uint32(mission.TravelDuration);
data << uint32(mission.MissionDuration);
data << uint32(mission.MissionState);
data << uint32(mission.Unknown1);
data << uint32(mission.Unknown2);
return data;
}
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonMissionReward const& missionRewardItem)
{
data << int32(missionRewardItem.ItemID);
data << uint32(missionRewardItem.Quantity);
data << int32(missionRewardItem.CurrencyID);
data << uint32(missionRewardItem.CurrencyQuantity);
data << uint32(missionRewardItem.FollowerXP);
data << uint32(missionRewardItem.BonusAbilityID);
data << int32(missionRewardItem.Unknown);
return data;
}
@@ -100,51 +118,86 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonMission
return data;
}
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonTalent const& talent)
{
data << int32(talent.GarrTalentID);
data << int32(talent.ResearchStartTime);
data << int32(talent.Flags);
return data;
}
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonInfo const& garrison)
{
ASSERT(garrison.Missions.size() == garrison.MissionRewards.size());
ASSERT(garrison.Missions.size() == garrison.MissionOvermaxRewards.size());
ASSERT(garrison.Missions.size() == garrison.CanStartMission.size());
data << int32(garrison.GarrTypeID);
data << int32(garrison.GarrSiteID);
data << int32(garrison.GarrSiteLevelID);
data << uint32(garrison.Buildings.size());
data << uint32(garrison.Plots.size());
data << uint32(garrison.Followers.size());
data << uint32(garrison.Missions.size());
data << uint32(garrison.MissionRewards.size());
data << uint32(garrison.MissionOvermaxRewards.size());
data << uint32(garrison.MissionAreaBonuses.size());
data << uint32(garrison.Talents.size());
data << uint32(garrison.CanStartMission.size());
data << uint32(garrison.ArchivedMissions.size());
data << int32(garrison.NumFollowerActivationsRemaining);
data << uint32(garrison.NumMissionsStartedToday);
for (WorldPackets::Garrison::GarrisonBuildingInfo const* building : garrison.Buildings)
data << *building;
for (WorldPackets::Garrison::GarrisonPlotInfo* plot : garrison.Plots)
data << *plot;
for (WorldPackets::Garrison::GarrisonFollower const* follower : garrison.Followers)
data << *follower;
for (WorldPackets::Garrison::GarrisonMission const* mission : garrison.Missions)
data << *mission;
for (std::vector<WorldPackets::Garrison::GarrisonMissionReward> const& missionReward : garrison.MissionRewards)
{
data << uint32(missionReward.size());
for (WorldPackets::Garrison::GarrisonMissionReward const& missionRewardItem : missionReward)
data << missionRewardItem;
}
for (std::vector<WorldPackets::Garrison::GarrisonMissionReward> const& missionReward : garrison.MissionOvermaxRewards)
{
data << uint32(missionReward.size());
for (WorldPackets::Garrison::GarrisonMissionReward const& missionRewardItem : missionReward)
data << missionRewardItem;
}
for (WorldPackets::Garrison::GarrisonMissionAreaBonus const* areaBonus : garrison.MissionAreaBonuses)
data << *areaBonus;
for (WorldPackets::Garrison::GarrisonTalent const& talent : garrison.Talents)
data << talent;
if (!garrison.ArchivedMissions.empty())
data.append(garrison.ArchivedMissions.data(), garrison.ArchivedMissions.size());
for (bool canStartMission : garrison.CanStartMission)
data.WriteBit(canStartMission);
data.FlushBits();
return data;
}
WorldPacket const* WorldPackets::Garrison::GetGarrisonInfoResult::Write()
{
_worldPacket.reserve(4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 +
Buildings.size() * sizeof(GarrisonBuildingInfo) +
Plots.size() * sizeof(GarrisonPlotInfo) +
Followers.size() * (sizeof(GarrisonFollower) + 5 * 4) +
Missions.size() * sizeof(GarrisonMission) +
MissionAreaBonuses.size() * sizeof(GarrisonMissionAreaBonus) +
ArchivedMissions.size() * 4 +
CanStartMission.size());
_worldPacket << int32(GarrSiteID);
_worldPacket << int32(GarrSiteLevelID);
_worldPacket << int32(FactionIndex);
_worldPacket << uint32(Buildings.size());
_worldPacket << uint32(Plots.size());
_worldPacket << uint32(Followers.size());
_worldPacket << uint32(Missions.size());
_worldPacket << uint32(CanStartMission.size());
_worldPacket << uint32(MissionAreaBonuses.size());
_worldPacket << uint32(ArchivedMissions.size());
_worldPacket << int32(NumFollowerActivationsRemaining);
for (GarrisonBuildingInfo const* building : Buildings)
_worldPacket << *building;
for (GarrisonPlotInfo* plot : Plots)
_worldPacket << *plot;
for (GarrisonFollower const* follower : Followers)
_worldPacket << *follower;
for (GarrisonMission const* mission : Missions)
_worldPacket << *mission;
for (GarrisonMissionAreaBonus const* areaBonus : MissionAreaBonuses)
_worldPacket << *areaBonus;
if (!ArchivedMissions.empty())
_worldPacket.append(ArchivedMissions.data(), ArchivedMissions.size());
for (bool canStartMission : CanStartMission)
_worldPacket.WriteBit(canStartMission);
_worldPacket.FlushBits();
_worldPacket << uint32(Garrisons.size());
for (GarrisonInfo const& garrison : Garrisons)
_worldPacket << garrison;
return &_worldPacket;
}
@@ -185,6 +238,7 @@ void WorldPackets::Garrison::GarrisonPurchaseBuilding::Read()
WorldPacket const* WorldPackets::Garrison::GarrisonPlaceBuildingResult::Write()
{
_worldPacket << int32(GarrTypeID);
_worldPacket << uint32(Result);
_worldPacket << BuildingInfo;
_worldPacket.WriteBit(PlayActivationCinematic);
@@ -201,6 +255,7 @@ void WorldPackets::Garrison::GarrisonCancelConstruction::Read()
WorldPacket const* WorldPackets::Garrison::GarrisonBuildingRemoved::Write()
{
_worldPacket << int32(GarrTypeID);
_worldPacket << uint32(Result);
_worldPacket << uint32(GarrPlotInstanceID);
_worldPacket << uint32(GarrBuildingID);
@@ -210,6 +265,7 @@ WorldPacket const* WorldPackets::Garrison::GarrisonBuildingRemoved::Write()
WorldPacket const* WorldPackets::Garrison::GarrisonLearnBlueprintResult::Write()
{
_worldPacket << int32(GarrTypeID);
_worldPacket << uint32(Result);
_worldPacket << uint32(BuildingID);
@@ -218,6 +274,7 @@ WorldPacket const* WorldPackets::Garrison::GarrisonLearnBlueprintResult::Write()
WorldPacket const* WorldPackets::Garrison::GarrisonUnlearnBlueprintResult::Write()
{
_worldPacket << int32(GarrTypeID);
_worldPacket << uint32(Result);
_worldPacket << uint32(BuildingID);
@@ -226,6 +283,7 @@ WorldPacket const* WorldPackets::Garrison::GarrisonUnlearnBlueprintResult::Write
WorldPacket const* WorldPackets::Garrison::GarrisonRequestBlueprintAndSpecializationDataResult::Write()
{
_worldPacket << int32(GarrTypeID);
_worldPacket << uint32(BlueprintsKnown ? BlueprintsKnown->size() : 0);
_worldPacket << uint32(SpecializationsKnown ? SpecializationsKnown->size() : 0);
if (BlueprintsKnown)
@@ -258,6 +316,7 @@ WorldPacket const* WorldPackets::Garrison::GarrisonBuildingLandmarks::Write()
WorldPacket const* WorldPackets::Garrison::GarrisonPlotPlaced::Write()
{
_worldPacket << int32(GarrTypeID);
_worldPacket << *PlotInfo;
return &_worldPacket;
@@ -272,6 +331,7 @@ WorldPacket const* WorldPackets::Garrison::GarrisonPlotRemoved::Write()
WorldPacket const* WorldPackets::Garrison::GarrisonAddFollowerResult::Write()
{
_worldPacket << int32(GarrTypeID);
_worldPacket << uint32(Result);
_worldPacket << Follower;
@@ -281,6 +341,7 @@ WorldPacket const* WorldPackets::Garrison::GarrisonAddFollowerResult::Write()
WorldPacket const* WorldPackets::Garrison::GarrisonRemoveFollowerResult::Write()
{
_worldPacket << uint64(FollowerDBID);
_worldPacket << int32(GarrTypeID);
_worldPacket << uint32(Result);
_worldPacket << uint32(Destroyed);

View File

@@ -85,9 +85,11 @@ namespace WorldPackets
uint32 ItemLevelWeapon = 0;
uint32 ItemLevelArmor = 0;
uint32 Xp = 0;
uint32 Durability = 0;
uint32 CurrentBuildingID = 0;
uint32 CurrentMissionID = 0;
std::list<GarrAbilityEntry const*> AbilityID;
uint32 ZoneSupportSpellID = 0;
uint32 FollowerStatus = 0;
std::string CustomName;
};
@@ -102,6 +104,19 @@ namespace WorldPackets
uint32 TravelDuration = 0;
uint32 MissionDuration = 0;
uint32 MissionState = 0;
uint32 Unknown1 = 0;
uint32 Unknown2 = 0;
};
struct GarrisonMissionReward
{
int32 ItemID = 0;
uint32 Quantity = 0;
int32 CurrencyID = 0;
uint32 CurrencyQuantity = 0;
uint32 FollowerXP = 0;
uint32 BonusAbilityID = 0;
int32 Unknown = 0;
};
struct GarrisonMissionAreaBonus
@@ -110,6 +125,32 @@ namespace WorldPackets
time_t StartTime = time_t(0);
};
struct GarrisonTalent
{
int32 GarrTalentID = 0;
time_t ResearchStartTime = time_t(0);
int32 Flags = 0;
};
struct GarrisonInfo
{
int32 GarrTypeID = 0;
uint32 GarrSiteID = 0;
uint32 GarrSiteLevelID = 0;
uint32 NumFollowerActivationsRemaining = 0;
uint32 NumMissionsStartedToday = 0; // might mean something else, but sending 0 here enables follower abilities "Increase success chance of the first mission of the day by %."
std::vector<GarrisonPlotInfo*> Plots;
std::vector<GarrisonBuildingInfo const*> Buildings;
std::vector<GarrisonFollower const*> Followers;
std::vector<GarrisonMission const*> Missions;
std::vector<std::vector<GarrisonMissionReward>> MissionRewards;
std::vector<std::vector<GarrisonMissionReward>> MissionOvermaxRewards;
std::vector<GarrisonMissionAreaBonus const*> MissionAreaBonuses;
std::vector<GarrisonTalent> Talents;
std::vector<bool> CanStartMission;
std::vector<int32> ArchivedMissions;
};
class GetGarrisonInfoResult final : public ServerPacket
{
public:
@@ -117,17 +158,8 @@ namespace WorldPackets
WorldPacket const* Write() override;
uint32 GarrSiteID = 0;
uint32 GarrSiteLevelID = 0;
uint32 FactionIndex = 0;
uint32 NumFollowerActivationsRemaining = 0;
std::vector<GarrisonPlotInfo*> Plots;
std::vector<GarrisonBuildingInfo const*> Buildings;
std::vector<GarrisonFollower const*> Followers;
std::vector<GarrisonMission const*> Missions;
std::vector<GarrisonMissionAreaBonus const*> MissionAreaBonuses;
std::vector<bool> CanStartMission;
std::vector<int32> ArchivedMissions;
std::vector<GarrisonInfo> Garrisons;
};
struct GarrisonRemoteBuildingInfo
@@ -174,6 +206,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
int32 GarrTypeID = 0;
uint32 Result = 0;
GarrisonBuildingInfo BuildingInfo;
bool PlayActivationCinematic = false;
@@ -197,6 +230,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
int32 GarrTypeID = 0;
uint32 Result = 0;
uint32 GarrPlotInstanceID = 0;
uint32 GarrBuildingID = 0;
@@ -209,6 +243,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
int32 GarrTypeID = 0;
uint32 BuildingID = 0;
uint32 Result = 0;
};
@@ -220,6 +255,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
int32 GarrTypeID = 0;
uint32 BuildingID = 0;
uint32 Result = 0;
};
@@ -239,6 +275,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
int32 GarrTypeID = 0;
std::unordered_set<uint32> const* SpecializationsKnown = nullptr;
std::unordered_set<uint32> const* BlueprintsKnown = nullptr;
};
@@ -277,6 +314,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
int32 GarrTypeID = 0;
GarrisonPlotInfo* PlotInfo = nullptr;
};
@@ -297,6 +335,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
int32 GarrTypeID = 0;
GarrisonFollower Follower;
uint32 Result = 0;
};
@@ -309,6 +348,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
uint64 FollowerDBID = 0;
int32 GarrTypeID = 0;
uint32 Result = 0;
uint32 Destroyed = 0;
};

View File

@@ -42,21 +42,19 @@ WorldPacket const* WorldPackets::Guild::QueryGuildInfoResponse::Write()
_worldPacket << uint32(Info->BorderStyle);
_worldPacket << uint32(Info->BorderColor);
_worldPacket << uint32(Info->BackgroundColor);
_worldPacket.WriteBits(Info->GuildName.size(), 7);
_worldPacket.FlushBits();
for (GuildInfo::GuildInfoRank const& rank : Info->Ranks)
{
_worldPacket << uint32(rank.RankID);
_worldPacket << uint32(rank.RankOrder);
_worldPacket.WriteBits(rank.RankName.size(), 7);
_worldPacket.FlushBits();
_worldPacket.WriteString(rank.RankName);
}
_worldPacket.WriteBits(Info->GuildName.size(), 7);
_worldPacket.FlushBits();
_worldPacket.WriteString(Info->GuildName);
}
@@ -599,6 +597,8 @@ WorldPacket const* WorldPackets::Guild::GuildBankQueryResults::Write()
_worldPacket << WithdrawalsRemaining;
_worldPacket << uint32(TabInfo.size());
_worldPacket << uint32(ItemInfo.size());
_worldPacket.WriteBit(FullUpdate);
_worldPacket.FlushBits();
for (GuildBankTabInfo const& tab : TabInfo)
{
@@ -619,21 +619,14 @@ WorldPacket const* WorldPackets::Guild::GuildBankQueryResults::Write()
_worldPacket << item.EnchantmentID;
_worldPacket << item.Charges;
_worldPacket << item.OnUseEnchantmentID;
_worldPacket << uint32(item.SocketEnchant.size());
_worldPacket << item.Flags;
for (GuildBankItemInfo::GuildBankSocketEnchant const& socketEnchant : item.SocketEnchant)
{
_worldPacket << socketEnchant.SocketIndex;
_worldPacket << socketEnchant.SocketEnchantID;
}
_worldPacket.WriteBits(item.SocketEnchant.size(), 2);
_worldPacket.WriteBit(item.Locked);
_worldPacket.FlushBits();
}
_worldPacket.WriteBit(FullUpdate);
_worldPacket.FlushBits();
for (Item::ItemGemInstanceData const& socketEnchant : item.SocketEnchant)
_worldPacket << socketEnchant;
}
return &_worldPacket;
}
@@ -667,6 +660,8 @@ WorldPacket const* WorldPackets::Guild::GuildBankLogQueryResults::Write()
{
_worldPacket << Tab;
_worldPacket << uint32(Entry.size());
_worldPacket.WriteBit(WeeklyBonusMoney.is_initialized());
_worldPacket.FlushBits();
for (GuildBankLogEntry const& logEntry : Entry)
{
@@ -693,9 +688,6 @@ WorldPacket const* WorldPackets::Guild::GuildBankLogQueryResults::Write()
_worldPacket << *logEntry.OtherTab;
}
_worldPacket.WriteBit(WeeklyBonusMoney.is_initialized());
_worldPacket.FlushBits();
if (WeeklyBonusMoney)
_worldPacket << *WeeklyBonusMoney;
@@ -722,11 +714,7 @@ WorldPacket const* WorldPackets::Guild::GuildBankTextQueryResult::Write()
void WorldPackets::Guild::GuildBankSetTabText::Read()
{
_worldPacket >> Tab;
_worldPacket.ResetBitPos();
uint32 tabTextLen = _worldPacket.ReadBits(14);
TabText = _worldPacket.ReadString(tabTextLen);
TabText = _worldPacket.ReadString(_worldPacket.ReadBits(14));
}
void WorldPackets::Guild::GuildQueryNews::Read()
@@ -782,16 +770,16 @@ void WorldPackets::Guild::GuildSetGuildMaster::Read()
WorldPacket const* WorldPackets::Guild::GuildChallengeUpdate::Write()
{
for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
for (int32 i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
_worldPacket << int32(CurrentCount[i]);
for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
for (int32 i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
_worldPacket << int32(MaxCount[i]);
for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
for (int32 i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
_worldPacket << int32(MaxLevelGold[i]);
for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
for (int32 i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
_worldPacket << int32(Gold[i]);
return &_worldPacket;

View File

@@ -780,12 +780,6 @@ namespace WorldPackets
struct GuildBankItemInfo
{
struct GuildBankSocketEnchant
{
int32 SocketIndex = 0;
int32 SocketEnchantID = 0;
};
WorldPackets::Item::ItemInstance Item;
int32 Slot = 0;
int32 Count = 0;
@@ -794,7 +788,7 @@ namespace WorldPackets
int32 OnUseEnchantmentID = 0;
int32 Flags = 0;
bool Locked = false;
std::vector<GuildBankSocketEnchant> SocketEnchant;
std::vector<Item::ItemGemInstanceData> SocketEnchant;
};
struct GuildBankTabInfo
@@ -972,7 +966,7 @@ namespace WorldPackets
class GuildChallengeUpdate final : public ServerPacket
{
public:
GuildChallengeUpdate() : ServerPacket(SMSG_GUILD_CHALLENGE_UPDATE, 120) { }
GuildChallengeUpdate() : ServerPacket(SMSG_GUILD_CHALLENGE_UPDATE, 96) { }
WorldPacket const* Write() override;

View File

@@ -34,16 +34,19 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectEnchantDa
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectItemData const& itemData)
{
data << itemData.CreatorGUID;
data << itemData.Item;
data << uint8(itemData.Index);
data << itemData.Item;
data.WriteBit(itemData.Usable);
data.WriteBits(itemData.Enchants.size(), 4);
data.WriteBits(itemData.Gems.size(), 2);
data.FlushBits();
for (auto const& gem : itemData.Gems)
data << gem;
data << uint32(itemData.Enchants.size());
for (size_t i = 0; i < itemData.Enchants.size(); ++i)
data << itemData.Enchants[i];
data.WriteBit(itemData.Usable);
data.FlushBits();
return data;
}
@@ -65,36 +68,45 @@ WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint
Usable = true; /// @todo
for (uint8 i = 0; i < MAX_ENCHANTMENT_SLOT; ++i)
{
if (uint32 enchId = item->GetEnchantmentId(EnchantmentSlot(i)))
Enchants.emplace_back(enchId, i);
for (std::size_t i = 0; i < item->GetDynamicValues(ITEM_DYNAMIC_FIELD_GEMS).size(); ++i)
{
uint32 gemItemId = item->GetDynamicValue(ITEM_DYNAMIC_FIELD_GEMS, i);
if (!gemItemId)
continue;
WorldPackets::Item::ItemGemInstanceData gem;
gem.Slot = i;
gem.Item.ItemID = gemItemId;
Gems.push_back(gem);
}
}
WorldPacket const* WorldPackets::Inspect::InspectResult::Write()
{
_worldPacket << InspecteeGUID;
_worldPacket << uint32(Items.size());
_worldPacket << uint32(Glyphs.size());
_worldPacket << uint32(Talents.size());
_worldPacket << uint32(PvpTalents.size());
_worldPacket << int32(ClassID);
_worldPacket << int32(SpecializationID);
_worldPacket << int32(GenderID);
for (size_t i = 0; i < Items.size(); ++i)
_worldPacket << Items[i];
for (size_t i = 0; i < Glyphs.size(); ++i)
_worldPacket << uint16(Glyphs[i]);
for (size_t i = 0; i < Talents.size(); ++i)
_worldPacket << uint16(Talents[i]);
if (!Glyphs.empty())
_worldPacket.append(Glyphs.data(), Glyphs.size());
if (!Talents.empty())
_worldPacket.append(Talents.data(), Talents.size());
if (!PvpTalents.empty())
_worldPacket.append(PvpTalents.data(), PvpTalents.size());
_worldPacket.WriteBit(GuildData.is_initialized());
_worldPacket.FlushBits();
for (size_t i = 0; i < Items.size(); ++i)
_worldPacket << Items[i];
if (GuildData)
_worldPacket << *GuildData;

View File

@@ -54,6 +54,7 @@ namespace WorldPackets
uint8 Index = 0;
bool Usable = false;
std::vector<InspectEnchantData> Enchants;
std::vector<Item::ItemGemInstanceData> Gems;
};
struct InspectGuildData
@@ -70,13 +71,14 @@ namespace WorldPackets
WorldPacket const* Write() override;
ObjectGuid InspecteeGUID;
std::vector<InspectItemData> Items;
std::vector<uint16> Glyphs;
std::vector<uint16> Talents;
std::vector<uint16> PvpTalents;
int32 ClassID = CLASS_NONE;
int32 GenderID = GENDER_NONE;
std::vector<uint16> Talents;
std::vector<uint16> Glyphs;
Optional<InspectGuildData> GuildData;
ObjectGuid InspecteeGUID;
int32 SpecializationID = 0;
};

View File

@@ -391,7 +391,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_GUILD_BANK_LOG_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankLogQuery, &WorldSession::HandleGuildBankLogQuery);
DEFINE_HANDLER(CMSG_GUILD_BANK_QUERY_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankQueryTab, &WorldSession::HandleGuildBankQueryTab);
DEFINE_HANDLER(CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankRemainingWithdrawMoneyQuery, &WorldSession::HandleGuildBankMoneyWithdrawn);
DEFINE_HANDLER(CMSG_GUILD_BANK_SET_TAB_TEXT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankSetTabText, &WorldSession::HandleGuildBankSetTabText);
DEFINE_HANDLER(CMSG_GUILD_BANK_SET_TAB_TEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankSetTabText, &WorldSession::HandleGuildBankSetTabText);
DEFINE_HANDLER(CMSG_GUILD_BANK_SWAP_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankSwapItems, &WorldSession::HandleGuildBankSwapItems);
DEFINE_HANDLER(CMSG_GUILD_BANK_TEXT_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankTextQuery, &WorldSession::HandleGuildBankTextQuery);
DEFINE_HANDLER(CMSG_GUILD_BANK_UPDATE_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankUpdateTab, &WorldSession::HandleGuildBankUpdateTab);
@@ -409,7 +409,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_GUILD_INVITE_BY_NAME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildInviteByName, &WorldSession::HandleGuildInviteByName);
DEFINE_HANDLER(CMSG_GUILD_LEAVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildLeave, &WorldSession::HandleGuildLeave);
DEFINE_HANDLER(CMSG_GUILD_MEMBER_SEND_SOR_REQUEST, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GUILD_NEWS_UPDATE_STICKY, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Guild::GuildNewsUpdateSticky, &WorldSession::HandleGuildNewsUpdateSticky);
DEFINE_HANDLER(CMSG_GUILD_NEWS_UPDATE_STICKY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildNewsUpdateSticky, &WorldSession::HandleGuildNewsUpdateSticky);
DEFINE_HANDLER(CMSG_GUILD_OFFICER_REMOVE_MEMBER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildOfficerRemoveMember, &WorldSession::HandleGuildOfficerRemoveMember);
DEFINE_HANDLER(CMSG_GUILD_PERMISSIONS_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildPermissionsQuery, &WorldSession::HandleGuildPermissionsQuery);
DEFINE_HANDLER(CMSG_GUILD_PROMOTE_MEMBER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildPromoteMember, &WorldSession::HandleGuildPromoteMember);
@@ -421,7 +421,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_GUILD_SET_ACHIEVEMENT_TRACKING, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildSetAchievementTracking, &WorldSession::HandleGuildSetAchievementTracking);
DEFINE_HANDLER(CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Achievement::GuildSetFocusedAchievement, &WorldSession::HandleGuildSetFocusedAchievement);
DEFINE_HANDLER(CMSG_GUILD_SET_GUILD_MASTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildSetGuildMaster, &WorldSession::HandleGuildSetGuildMaster);
DEFINE_HANDLER(CMSG_GUILD_SET_MEMBER_NOTE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildSetMemberNote, &WorldSession::HandleGuildSetMemberNote);
DEFINE_HANDLER(CMSG_GUILD_SET_MEMBER_NOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildSetMemberNote, &WorldSession::HandleGuildSetMemberNote);
DEFINE_HANDLER(CMSG_GUILD_SET_RANK_PERMISSIONS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildSetRankPermissions, &WorldSession::HandleGuildSetRankPermissions);
DEFINE_HANDLER(CMSG_GUILD_SHIFT_RANK, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GUILD_UPDATE_INFO_TEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildUpdateInfoText, &WorldSession::HandleGuildUpdateInfoText);
@@ -1103,12 +1103,12 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_SPEED_SET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_TIME_SET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_TIME_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_ADD_FOLLOWER_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_ADD_FOLLOWER_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_ADD_MISSION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_BUILDING_ACTIVATED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_BUILDING_LANDMARKS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_BUILDING_REMOVED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_BUILDING_REMOVED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_BUILDING_SET_ACTIVE_SPECIALIZATION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_CLEAR_ALL_FOLLOWERS_EXHAUSTION, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_COMPLETE_MISSION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
@@ -1121,7 +1121,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_FOLLOWER_CHANGED_XP, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_IS_UPGRADEABLE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_LANDING_PAGE_SHIPMENT_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_LEARN_BLUEPRINT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_LEARN_BLUEPRINT_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_LEARN_SPECIALIZATION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_LIST_FOLLOWERS_CHEAT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_LIST_MISSIONS_CHEAT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
@@ -1133,8 +1133,8 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_OPEN_MISSION_NPC, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_OPEN_RECRUITMENT_NPC, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_OPEN_TRADESKILL_NPC, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_PLACE_BUILDING_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_PLOT_PLACED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_PLACE_BUILDING_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_PLOT_PLACED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_PLOT_REMOVED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_RECALL_PORTAL_LAST_USED_TIME, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_RECALL_PORTAL_USED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
@@ -1142,15 +1142,15 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_RECRUIT_FOLLOWER_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_REMOTE_INFO, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_REMOVE_FOLLOWER_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_REMOVE_FOLLOWER_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_START_MISSION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_UPGRADE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_DISPLAYED_TROPHY_LIST_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_GARRISON_INFO_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_GARRISON_INFO_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_SHIPMENT_INFO_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_TROPHY_LIST_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
@@ -1170,12 +1170,12 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_DELETED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_EARNED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_MEMBERS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_LOG_QUERY_RESULTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_QUERY_RESULTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_LOG_QUERY_RESULTS, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_QUERY_RESULTS, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_TEXT_QUERY_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_TEXT_QUERY_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CHALLENGE_COMPLETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CHALLENGE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CHALLENGE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CHANGE_NAME_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_COMMAND_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CRITERIA_DELETED, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -1228,7 +1228,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INIT_WORLD_STATES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSPECT_HONOR_STATS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSPECT_PVP, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSPECT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSPECT_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_END, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
@@ -1506,7 +1506,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_CREATURE_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GAME_OBJECT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GARRISON_CREATURE_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GUILD_INFO_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GUILD_INFO_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_ITEM_TEXT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_NPC_TEXT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PAGE_TEXT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);