mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/PacketIO: Updated garrison, guild and inspect packets
This commit is contained in:
@@ -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());
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user