diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-06-19 23:56:40 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-06-19 23:56:40 +0200 |
commit | 42f6bb4d37ae3a28cecddc6e82e5b4455aa29a16 (patch) | |
tree | f8e6ecc2248b7b95d7314fc07e01b6fc22e71840 /src | |
parent | 0de1adf2812a4fa896dc5cd21314e596b44457b9 (diff) |
Core/PacketIO: Updated garrison, guild and inspect packets
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Garrison/Garrison.cpp | 25 | ||||
-rw-r--r-- | src/server/game/Garrison/Garrison.h | 9 | ||||
-rw-r--r-- | src/server/game/Guilds/Guild.cpp | 46 | ||||
-rw-r--r-- | src/server/game/Server/Packets/GarrisonPackets.cpp | 139 | ||||
-rw-r--r-- | src/server/game/Server/Packets/GarrisonPackets.h | 52 | ||||
-rw-r--r-- | src/server/game/Server/Packets/GuildPackets.cpp | 42 | ||||
-rw-r--r-- | src/server/game/Server/Packets/GuildPackets.h | 10 | ||||
-rw-r--r-- | src/server/game/Server/Packets/InspectPackets.cpp | 46 | ||||
-rw-r--r-- | src/server/game/Server/Packets/InspectPackets.h | 8 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 36 |
10 files changed, 260 insertions, 153 deletions
diff --git a/src/server/game/Garrison/Garrison.cpp b/src/server/game/Garrison/Garrison.cpp index 233fc1fa311..970dd893f1d 100644 --- a/src/server/game/Garrison/Garrison.cpp +++ b/src/server/game/Garrison/Garrison.cpp @@ -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()); diff --git a/src/server/game/Garrison/Garrison.h b/src/server/game/Garrison/Garrison.h index 2aa38ee6ad3..750ed64639a 100644 --- a/src/server/game/Garrison/Garrison.h +++ b/src/server/game/Garrison/Garrison.h @@ -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; diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 9c217ea6888..b09b75be882 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -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; diff --git a/src/server/game/Server/Packets/GarrisonPackets.cpp b/src/server/game/Server/Packets/GarrisonPackets.cpp index 0618cd041ad..0f84d6a393c 100644 --- a/src/server/game/Server/Packets/GarrisonPackets.cpp +++ b/src/server/game/Server/Packets/GarrisonPackets.cpp @@ -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; } -WorldPacket const* WorldPackets::Garrison::GetGarrisonInfoResult::Write() +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonTalent const& talent) { - _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; + data << int32(talent.GarrTalentID); + data << int32(talent.ResearchStartTime); + data << int32(talent.Flags); - for (GarrisonMission const* mission : Missions) - _worldPacket << *mission; + return data; +} - for (GarrisonMissionAreaBonus const* areaBonus : MissionAreaBonuses) - _worldPacket << *areaBonus; +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); - if (!ArchivedMissions.empty()) - _worldPacket.append(ArchivedMissions.data(), ArchivedMissions.size()); + data.FlushBits(); - for (bool canStartMission : CanStartMission) - _worldPacket.WriteBit(canStartMission); + return data; +} - _worldPacket.FlushBits(); +WorldPacket const* WorldPackets::Garrison::GetGarrisonInfoResult::Write() +{ + _worldPacket << int32(FactionIndex); + _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); diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h index 2b92ab1311f..15134c55535 100644 --- a/src/server/game/Server/Packets/GarrisonPackets.h +++ b/src/server/game/Server/Packets/GarrisonPackets.h @@ -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,26 +125,43 @@ namespace WorldPackets time_t StartTime = time_t(0); }; - class GetGarrisonInfoResult final : public ServerPacket + struct GarrisonTalent { - public: - GetGarrisonInfoResult() : ServerPacket(SMSG_GET_GARRISON_INFO_RESULT) { } - - WorldPacket const* Write() override; + int32 GarrTalentID = 0; + time_t ResearchStartTime = time_t(0); + int32 Flags = 0; + }; + struct GarrisonInfo + { + int32 GarrTypeID = 0; uint32 GarrSiteID = 0; uint32 GarrSiteLevelID = 0; - uint32 FactionIndex = 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: + GetGarrisonInfoResult() : ServerPacket(SMSG_GET_GARRISON_INFO_RESULT) { } + + WorldPacket const* Write() override; + + uint32 FactionIndex = 0; + std::vector<GarrisonInfo> Garrisons; + }; + struct GarrisonRemoteBuildingInfo { GarrisonRemoteBuildingInfo() : GarrPlotInstanceID(0), GarrBuildingID(0) { } @@ -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; }; diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp index 8cc97ca2557..a5a897c3eac 100644 --- a/src/server/game/Server/Packets/GuildPackets.cpp +++ b/src/server/game/Server/Packets/GuildPackets.cpp @@ -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; diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h index 34d7981dcb1..2e1d60578d1 100644 --- a/src/server/game/Server/Packets/GuildPackets.h +++ b/src/server/game/Server/Packets/GuildPackets.h @@ -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; diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp index 8f8ce7b2caa..fe81ac6c048 100644 --- a/src/server/game/Server/Packets/InspectPackets.cpp +++ b/src/server/game/Server/Packets/InspectPackets.cpp @@ -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; diff --git a/src/server/game/Server/Packets/InspectPackets.h b/src/server/game/Server/Packets/InspectPackets.h index 46d169ec69d..e02e59b5e28 100644 --- a/src/server/game/Server/Packets/InspectPackets.h +++ b/src/server/game/Server/Packets/InspectPackets.h @@ -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; }; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index f4c246068a1..6885423d5dc 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -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); |