aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-11-15 00:13:35 +0100
committerShauren <shauren.trinity@gmail.com>2015-11-15 00:13:35 +0100
commitc63b03313104da4b40df55afbc8ed09649b5f75f (patch)
treeff692d272865b6edee4aa911dc2a4943b0093048 /src
parent2a9a68877a66f9c0e2c175fde70cfb23da538b78 (diff)
Core/PacketIO: Updated and enabled guild finder opcodes
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Guilds/Guild.cpp2
-rw-r--r--src/server/game/Guilds/Guild.h3
-rw-r--r--src/server/game/Guilds/GuildFinderMgr.cpp181
-rw-r--r--src/server/game/Guilds/GuildFinderMgr.h22
-rw-r--r--src/server/game/Handlers/GuildFinderHandler.cpp450
-rw-r--r--src/server/game/Server/Packets/GuildFinderPackets.cpp174
-rw-r--r--src/server/game/Server/Packets/GuildFinderPackets.h237
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp29
-rw-r--r--src/server/game/Server/WorldSession.h28
-rw-r--r--src/server/scripts/Commands/cs_guild.cpp2
10 files changed, 680 insertions, 448 deletions
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index e7347a00732..b128458137f 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -2509,7 +2509,7 @@ void Guild::BroadcastAddonToGuild(WorldSession* session, bool officerOnly, std::
}
}
-void Guild::BroadcastPacketToRank(WorldPacket* packet, uint8 rankId) const
+void Guild::BroadcastPacketToRank(WorldPacket const* packet, uint8 rankId) const
{
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
if (itr->second->IsRank(rankId))
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index 8dc9a98365b..697ae25a856 100644
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -766,7 +766,6 @@ public:
std::string const& GetName() const { return m_name; }
std::string const& GetMOTD() const { return m_motd; }
std::string const& GetInfo() const { return m_info; }
- uint32 GetMemberCount() const { return uint32(m_members.size()); }
time_t GetCreatedDate() const { return m_createdDate; }
uint64 GetBankMoney() const { return m_bankMoney; }
@@ -836,7 +835,7 @@ public:
// Broadcasts
void BroadcastToGuild(WorldSession* session, bool officerOnly, std::string const& msg, uint32 language = LANG_UNIVERSAL) const;
void BroadcastAddonToGuild(WorldSession* session, bool officerOnly, std::string const& msg, std::string const& prefix) const;
- void BroadcastPacketToRank(WorldPacket* packet, uint8 rankId) const;
+ void BroadcastPacketToRank(WorldPacket const* packet, uint8 rankId) const;
void BroadcastPacket(WorldPacket const* packet) const;
void BroadcastPacketIfTrackingAchievement(WorldPacket const* packet, uint32 criteriaId) const;
diff --git a/src/server/game/Guilds/GuildFinderMgr.cpp b/src/server/game/Guilds/GuildFinderMgr.cpp
index 3eec50efbc8..1e93e1f0eb6 100644
--- a/src/server/game/Guilds/GuildFinderMgr.cpp
+++ b/src/server/game/Guilds/GuildFinderMgr.cpp
@@ -18,6 +18,7 @@
#include "ObjectMgr.h"
#include "GuildFinderMgr.h"
#include "GuildMgr.h"
+#include "GuildFinderPackets.h"
#include "World.h"
GuildFinderMgr::GuildFinderMgr()
@@ -103,7 +104,8 @@ void GuildFinderMgr::LoadMembershipRequests()
MembershipRequest request(playerId, guildId, availability, classRoles, interests, comment, time_t(submitTime));
- _membershipRequests[guildId].push_back(request);
+ _membershipRequestsByGuild[guildId][playerId] = request;
+ _membershipRequestsByPlayer[playerId][guildId] = request;
++count;
} while (result->NextRow());
@@ -113,7 +115,8 @@ void GuildFinderMgr::LoadMembershipRequests()
void GuildFinderMgr::AddMembershipRequest(ObjectGuid const& guildGuid, MembershipRequest const& request)
{
- _membershipRequests[guildGuid].push_back(request);
+ _membershipRequestsByGuild[guildGuid][request.GetPlayerGUID()] = request;
+ _membershipRequestsByPlayer[request.GetPlayerGUID()][guildGuid] = request;
SQLTransaction trans = CharacterDatabase.BeginTransaction();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_GUILD_FINDER_APPLICANT);
@@ -138,102 +141,102 @@ void GuildFinderMgr::AddMembershipRequest(ObjectGuid const& guildGuid, Membershi
void GuildFinderMgr::RemoveAllMembershipRequestsFromPlayer(ObjectGuid const& playerId)
{
- for (MembershipRequestStore::iterator itr = _membershipRequests.begin(); itr != _membershipRequests.end(); ++itr)
- {
- std::vector<MembershipRequest>::iterator itr2 = itr->second.begin();
- for (; itr2 != itr->second.end(); ++itr2)
- if (itr2->GetPlayerGUID() == playerId)
- break;
-
- if (itr2 == itr->second.end())
- continue;
+ auto playerItr = _membershipRequestsByPlayer.find(playerId);
+ if (playerItr == _membershipRequestsByPlayer.end())
+ return;
- SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ for (auto& guildRequestPair : playerItr->second)
+ {
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_FINDER_APPLICANT);
- stmt->setUInt64(0, itr2->GetGuildGuid().GetCounter());
- stmt->setUInt64(1, itr2->GetPlayerGUID().GetCounter());
+ stmt->setUInt64(0, guildRequestPair.first.GetCounter());
+ stmt->setUInt64(1, playerId.GetCounter());
trans->Append(stmt);
- CharacterDatabase.CommitTransaction(trans);
- itr->second.erase(itr2);
-
// Notify the guild master and officers the list changed
- if (Guild* guild = sGuildMgr->GetGuildByGuid(itr->first))
+ if (Guild* guild = sGuildMgr->GetGuildByGuid(guildRequestPair.first))
SendApplicantListUpdate(guild);
+
+ auto guildItr = _membershipRequestsByGuild.find(guildRequestPair.first);
+ if (guildItr == _membershipRequestsByGuild.end())
+ continue;
+
+ guildItr->second.erase(playerId);
+ if (guildItr->second.empty())
+ _membershipRequestsByGuild.erase(guildItr);
}
+
+ CharacterDatabase.CommitTransaction(trans);
+
+ _membershipRequestsByPlayer.erase(playerItr);
}
void GuildFinderMgr::RemoveMembershipRequest(ObjectGuid const& playerId, ObjectGuid const& guildId)
{
- std::vector<MembershipRequest>::iterator itr = _membershipRequests[guildId].begin();
- for (; itr != _membershipRequests[guildId].end(); ++itr)
- if (itr->GetPlayerGUID() == playerId)
- break;
+ auto guildItr = _membershipRequestsByGuild.find(guildId);
+ if (guildItr != _membershipRequestsByGuild.end())
+ {
+ guildItr->second.erase(playerId);
+ if (guildItr->second.empty())
+ _membershipRequestsByGuild.erase(guildItr);
+ }
- if (itr == _membershipRequests[guildId].end())
- return;
+ auto playerItr = _membershipRequestsByPlayer.find(playerId);
+ if (playerItr != _membershipRequestsByPlayer.end())
+ {
+ playerItr->second.erase(guildId);
+ if (playerItr->second.empty())
+ _membershipRequestsByPlayer.erase(playerItr);
+ }
SQLTransaction trans = CharacterDatabase.BeginTransaction();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_FINDER_APPLICANT);
- stmt->setUInt64(0, itr->GetGuildGuid().GetCounter());
- stmt->setUInt64(1, itr->GetPlayerGUID().GetCounter());
+ stmt->setUInt64(0, guildId.GetCounter());
+ stmt->setUInt64(1, playerId.GetCounter());
trans->Append(stmt);
CharacterDatabase.CommitTransaction(trans);
// Notify the applicant his submittion has been removed
- if (Player* player = ObjectAccessor::FindPlayer(itr->GetPlayerGUID()))
+ if (Player* player = ObjectAccessor::FindPlayer(playerId))
SendMembershipRequestListUpdate(player);
// Notify the guild master and officers the list changed
if (Guild* guild = sGuildMgr->GetGuildByGuid(guildId))
SendApplicantListUpdate(guild);
-
- _membershipRequests[guildId].erase(itr);
}
-std::list<MembershipRequest> GuildFinderMgr::GetAllMembershipRequestsForPlayer(ObjectGuid const& playerGuid)
+std::vector<MembershipRequest const*> GuildFinderMgr::GetAllMembershipRequestsForPlayer(ObjectGuid const& playerGuid)
{
- std::list<MembershipRequest> resultSet;
- for (MembershipRequestStore::const_iterator itr = _membershipRequests.begin(); itr != _membershipRequests.end(); ++itr)
- {
- std::vector<MembershipRequest> const& guildReqs = itr->second;
- for (std::vector<MembershipRequest>::const_iterator itr2 = guildReqs.begin(); itr2 != guildReqs.end(); ++itr2)
- {
- if (itr2->GetPlayerGUID() == playerGuid)
- {
- resultSet.push_back(*itr2);
- break;
- }
- }
- }
+ std::vector<MembershipRequest const*> resultSet;
+ auto playerItr = _membershipRequestsByPlayer.find(playerGuid);
+ if (playerItr == _membershipRequestsByPlayer.end())
+ return resultSet;
+
+ resultSet.reserve(playerItr->second.size());
+ for (auto const& guildRequestPair : playerItr->second)
+ resultSet.push_back(&guildRequestPair.second);
+
return resultSet;
}
uint8 GuildFinderMgr::CountRequestsFromPlayer(ObjectGuid const& playerId)
{
- uint8 result = 0;
- for (MembershipRequestStore::const_iterator itr = _membershipRequests.begin(); itr != _membershipRequests.end(); ++itr)
- {
- for (std::vector<MembershipRequest>::const_iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2)
- {
- if (itr2->GetPlayerGUID() != playerId)
- continue;
- ++result;
- break;
- }
- }
- return result;
+ auto playerItr = _membershipRequestsByPlayer.find(playerId);
+ return playerItr != _membershipRequestsByPlayer.end() ? playerItr->second.size() : 0;
}
-LFGuildStore GuildFinderMgr::GetGuildsMatchingSetting(LFGuildPlayer& settings, TeamId faction)
+std::vector<LFGuildSettings const*> GuildFinderMgr::GetGuildsMatchingSetting(LFGuildPlayer& settings, TeamId faction)
{
- LFGuildStore resultSet;
+ std::vector<LFGuildSettings const*> resultSet;
for (LFGuildStore::const_iterator itr = _guildSettings.begin(); itr != _guildSettings.end(); ++itr)
{
LFGuildSettings const& guildSettings = itr->second;
+ if (!guildSettings.IsListed())
+ continue;
+
if (guildSettings.GetTeam() != faction)
continue;
@@ -249,7 +252,7 @@ LFGuildStore GuildFinderMgr::GetGuildsMatchingSetting(LFGuildPlayer& settings, T
if (!(guildSettings.GetLevel() & settings.GetLevel()))
continue;
- resultSet.insert(std::make_pair(itr->first, guildSettings));
+ resultSet.push_back(&itr->second);
}
return resultSet;
@@ -257,10 +260,11 @@ LFGuildStore GuildFinderMgr::GetGuildsMatchingSetting(LFGuildPlayer& settings, T
bool GuildFinderMgr::HasRequest(ObjectGuid const& playerId, ObjectGuid const& guildId)
{
- for (std::vector<MembershipRequest>::const_iterator itr = _membershipRequests[guildId].begin(); itr != _membershipRequests[guildId].end(); ++itr)
- if (itr->GetPlayerGUID() == playerId)
- return true;
- return false;
+ auto guildItr = _membershipRequestsByGuild.find(guildId);
+ if (guildItr == _membershipRequestsByGuild.end())
+ return false;
+
+ return guildItr->second.count(playerId) > 0;
}
void GuildFinderMgr::SetGuildSettings(ObjectGuid const& guildGuid, LFGuildSettings const& settings)
@@ -284,30 +288,38 @@ void GuildFinderMgr::SetGuildSettings(ObjectGuid const& guildGuid, LFGuildSettin
void GuildFinderMgr::DeleteGuild(ObjectGuid const& guildId)
{
- std::vector<MembershipRequest>::iterator itr = _membershipRequests[guildId].begin();
- while (itr != _membershipRequests[guildId].end())
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ auto guildItr = _membershipRequestsByGuild.find(guildId);
+ if (guildItr != _membershipRequestsByGuild.end())
{
- SQLTransaction trans = CharacterDatabase.BeginTransaction();
-
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_FINDER_APPLICANT);
- stmt->setUInt64(0, itr->GetGuildGuid().GetCounter());
- stmt->setUInt64(1, itr->GetPlayerGUID().GetCounter());
- trans->Append(stmt);
+ for (auto playerRequestPair : guildItr->second)
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_FINDER_APPLICANT);
+ stmt->setUInt64(0, guildId.GetCounter());
+ stmt->setUInt64(1, playerRequestPair.first.GetCounter());
+ trans->Append(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_FINDER_GUILD_SETTINGS);
- stmt->setUInt64(0, itr->GetGuildGuid().GetCounter());
- trans->Append(stmt);
+ auto playerItr = _membershipRequestsByPlayer.find(playerRequestPair.first);
+ if (playerItr != _membershipRequestsByPlayer.end())
+ {
+ playerItr->second.erase(guildId);
+ if (playerItr->second.empty())
+ _membershipRequestsByPlayer.erase(playerItr);
+ }
- CharacterDatabase.CommitTransaction(trans);
+ // Notify the applicant his submition has been removed
+ if (Player* player = ObjectAccessor::FindPlayer(playerRequestPair.first))
+ SendMembershipRequestListUpdate(player);
+ }
+ }
- // Notify the applicant his submition has been removed
- if (Player* player = ObjectAccessor::FindPlayer(itr->GetPlayerGUID()))
- SendMembershipRequestListUpdate(player);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_FINDER_GUILD_SETTINGS);
+ stmt->setUInt64(0, guildId.GetCounter());
+ trans->Append(stmt);
- ++itr;
- }
+ CharacterDatabase.CommitTransaction(trans);
- _membershipRequests.erase(guildId);
+ _membershipRequestsByGuild.erase(guildId);
_guildSettings.erase(guildId);
// Notify the guild master the list changed (even if he's not a GM any more, not sure if needed)
@@ -317,14 +329,13 @@ void GuildFinderMgr::DeleteGuild(ObjectGuid const& guildId)
void GuildFinderMgr::SendApplicantListUpdate(Guild* guild)
{
- WorldPacket data(SMSG_LF_GUILD_APPLICANT_LIST_CHANGED, 0);
+ WorldPackets::GuildFinder::LFGuildApplicantListChanged applicantListChanged;
+ guild->BroadcastPacketToRank(applicantListChanged.Write(), GR_OFFICER);
if (Player* player = ObjectAccessor::FindPlayer(guild->GetLeaderGUID()))
- player->SendDirectMessage(&data);
- guild->BroadcastPacketToRank(&data, GR_OFFICER);
+ player->SendDirectMessage(applicantListChanged.GetRawPacket());
}
void GuildFinderMgr::SendMembershipRequestListUpdate(Player* player)
{
- WorldPacket data(SMSG_LF_GUILD_APPLICATIONS_LIST_CHANGED, 0);
- player->SendDirectMessage(&data);
+ player->SendDirectMessage(WorldPackets::GuildFinder::LFGuildApplicationsListChanged().Write());
}
diff --git a/src/server/game/Guilds/GuildFinderMgr.h b/src/server/game/Guilds/GuildFinderMgr.h
index 377af655aeb..1f799753e00 100644
--- a/src/server/game/Guilds/GuildFinderMgr.h
+++ b/src/server/game/Guilds/GuildFinderMgr.h
@@ -20,7 +20,6 @@
#include "Common.h"
#include "ObjectGuid.h"
-#include "World.h"
#include "GuildMgr.h"
enum GuildFinderOptionsInterest
@@ -81,12 +80,9 @@ struct MembershipRequest
uint8 GetAvailability() const { return _availability; }
uint8 GetClassRoles() const { return _classRoles; }
uint8 GetInterests() const { return _interests; }
- uint8 GetClass() const { return sWorld->GetCharacterInfo(GetPlayerGUID())->Class; }
- uint8 GetLevel() const { return sWorld->GetCharacterInfo(GetPlayerGUID())->Level; }
time_t GetSubmitTime() const { return _time; }
time_t GetExpiryTime() const { return time_t(_time + 30 * 24 * 3600); } // Adding 30 days
std::string const& GetComment() const { return _comment; }
- std::string const& GetName() const { return sWorld->GetCharacterInfo(GetPlayerGUID())->Name; }
private:
std::string _comment;
@@ -182,8 +178,7 @@ struct LFGuildSettings : public LFGuildPlayer
TeamId _team;
};
-typedef std::map<ObjectGuid /* guildGuid */, LFGuildSettings> LFGuildStore;
-typedef std::map<ObjectGuid /* guildGuid */, std::vector<MembershipRequest> > MembershipRequestStore;
+typedef std::unordered_map<ObjectGuid /* guildGuid */, LFGuildSettings> LFGuildStore;
class GuildFinderMgr
{
@@ -193,7 +188,8 @@ class GuildFinderMgr
LFGuildStore _guildSettings;
- MembershipRequestStore _membershipRequests;
+ std::unordered_map<ObjectGuid /*guildGUID*/, std::unordered_map<ObjectGuid /*playerGUID*/, MembershipRequest>> _membershipRequestsByGuild;
+ std::unordered_map<ObjectGuid /*playerGUID*/, std::unordered_map<ObjectGuid /*guildGUID*/, MembershipRequest>> _membershipRequestsByPlayer;
void LoadGuildSettings();
void LoadMembershipRequests();
@@ -212,7 +208,7 @@ class GuildFinderMgr
* @brief Returns settings for a guild.
* @param guildGuid The guild's database guid.
*/
- LFGuildSettings GetGuildSettings(ObjectGuid const& guildGuid) { return _guildSettings[guildGuid]; }
+ LFGuildSettings const& GetGuildSettings(ObjectGuid const& guildGuid) { return _guildSettings[guildGuid]; }
/**
* @brief Files a membership request to a guild
@@ -241,20 +237,24 @@ class GuildFinderMgr
* @brief Returns a set of membership requests for a guild
* @param guildGuid The guild's database guid.
*/
- std::vector<MembershipRequest> GetAllMembershipRequestsForGuild(ObjectGuid const& guildGuid) { return _membershipRequests[guildGuid]; }
+ std::unordered_map<ObjectGuid, MembershipRequest> const* GetAllMembershipRequestsForGuild(ObjectGuid const& guildGuid)
+ {
+ auto itr = _membershipRequestsByGuild.find(guildGuid);
+ return itr != _membershipRequestsByGuild.end() ? &itr->second : nullptr;
+ }
/**
* @brief Returns a list of membership requests for a player.
* @param playerGuid The player's database guid.
*/
- std::list<MembershipRequest> GetAllMembershipRequestsForPlayer(ObjectGuid const& playerGuid);
+ std::vector<MembershipRequest const*> GetAllMembershipRequestsForPlayer(ObjectGuid const& playerGuid);
/**
* @brief Returns a store of guilds matching the settings provided, using bitmask operators.
* @param settings The player's finder settings
* @param teamId The player's faction (TEAM_ALLIANCE or TEAM_HORDE)
*/
- LFGuildStore GetGuildsMatchingSetting(LFGuildPlayer& settings, TeamId faction);
+ std::vector<LFGuildSettings const*> GetGuildsMatchingSetting(LFGuildPlayer& settings, TeamId faction);
/// Provided a player guid and a guild guid, determines if a pending request is filed with these keys.
bool HasRequest(ObjectGuid const& playerId, ObjectGuid const& guildId);
diff --git a/src/server/game/Handlers/GuildFinderHandler.cpp b/src/server/game/Handlers/GuildFinderHandler.cpp
index 714be0c51bc..b8b3e29557c 100644
--- a/src/server/game/Handlers/GuildFinderHandler.cpp
+++ b/src/server/game/Handlers/GuildFinderHandler.cpp
@@ -21,403 +21,200 @@
#include "SharedDefines.h"
#include "GuildFinderMgr.h"
#include "GuildMgr.h"
+#include "GuildFinderPackets.h"
+#include "World.h"
-void WorldSession::HandleGuildFinderAddRecruit(WorldPacket& recvPacket)
+void WorldSession::HandleGuildFinderAddRecruit(WorldPackets::GuildFinder::LFGuildAddRecruit& lfGuildAddRecruit)
{
- if (sGuildFinderMgr->GetAllMembershipRequestsForPlayer(GetPlayer()->GetGUID()).size() == 10)
+ if (sGuildFinderMgr->CountRequestsFromPlayer(GetPlayer()->GetGUID()) >= 10)
return;
- uint32 classRoles = 0;
- uint32 availability = 0;
- uint32 guildInterests = 0;
-
- recvPacket >> classRoles >> guildInterests >> availability;
-
- ObjectGuid guid;
- guid[3] = recvPacket.ReadBit();
- guid[0] = recvPacket.ReadBit();
- guid[6] = recvPacket.ReadBit();
- guid[1] = recvPacket.ReadBit();
- uint16 commentLength = recvPacket.ReadBits(11);
- guid[5] = recvPacket.ReadBit();
- guid[4] = recvPacket.ReadBit();
- guid[7] = recvPacket.ReadBit();
- uint8 nameLength = recvPacket.ReadBits(7);
- guid[2] = recvPacket.ReadBit();
-
- recvPacket.ReadByteSeq(guid[4]);
- recvPacket.ReadByteSeq(guid[5]);
- std::string comment = recvPacket.ReadString(commentLength);
- std::string playerName = recvPacket.ReadString(nameLength);
- recvPacket.ReadByteSeq(guid[7]);
- recvPacket.ReadByteSeq(guid[2]);
- recvPacket.ReadByteSeq(guid[0]);
- recvPacket.ReadByteSeq(guid[6]);
- recvPacket.ReadByteSeq(guid[1]);
- recvPacket.ReadByteSeq(guid[3]);
-
- if (!guid.IsGuild())
+ if (!lfGuildAddRecruit.GuildGUID.IsGuild())
return;
- if (!(classRoles & GUILDFINDER_ALL_ROLES) || classRoles > GUILDFINDER_ALL_ROLES)
+ if (!(lfGuildAddRecruit.ClassRoles & GUILDFINDER_ALL_ROLES) || lfGuildAddRecruit.ClassRoles > GUILDFINDER_ALL_ROLES)
return;
- if (!(availability & AVAILABILITY_ALWAYS) || availability > AVAILABILITY_ALWAYS)
+ if (!(lfGuildAddRecruit.Availability & AVAILABILITY_ALWAYS) || lfGuildAddRecruit.Availability > AVAILABILITY_ALWAYS)
return;
- if (!(guildInterests & ALL_INTERESTS) || guildInterests > ALL_INTERESTS)
+ if (!(lfGuildAddRecruit.PlayStyle & ALL_INTERESTS) || lfGuildAddRecruit.PlayStyle > ALL_INTERESTS)
return;
- MembershipRequest request = MembershipRequest(GetPlayer()->GetGUID(), guid, availability, classRoles, guildInterests, comment, time(NULL));
- sGuildFinderMgr->AddMembershipRequest(guid, request);
+ MembershipRequest request = MembershipRequest(GetPlayer()->GetGUID(), lfGuildAddRecruit.GuildGUID, lfGuildAddRecruit.Availability,
+ lfGuildAddRecruit.ClassRoles, lfGuildAddRecruit.PlayStyle, lfGuildAddRecruit.Comment, time(NULL));
+ sGuildFinderMgr->AddMembershipRequest(lfGuildAddRecruit.GuildGUID, request);
}
-void WorldSession::HandleGuildFinderBrowse(WorldPacket& recvPacket)
+void WorldSession::HandleGuildFinderBrowse(WorldPackets::GuildFinder::LFGuildBrowse& lfGuildBrowse)
{
- uint32 classRoles = 0;
- uint32 availability = 0;
- uint32 guildInterests = 0;
- uint32 playerLevel = 0; // Raw player level (1-85), do they use MAX_FINDER_LEVEL when on level 85 ?
-
- recvPacket >> classRoles >> availability >> guildInterests >> playerLevel;
-
- if (!(classRoles & GUILDFINDER_ALL_ROLES) || classRoles > GUILDFINDER_ALL_ROLES)
+ if (!(lfGuildBrowse.ClassRoles & GUILDFINDER_ALL_ROLES) || lfGuildBrowse.ClassRoles > GUILDFINDER_ALL_ROLES)
return;
- if (!(availability & AVAILABILITY_ALWAYS) || availability > AVAILABILITY_ALWAYS)
+ if (!(lfGuildBrowse.Availability & AVAILABILITY_ALWAYS) || lfGuildBrowse.Availability > AVAILABILITY_ALWAYS)
return;
- if (!(guildInterests & ALL_INTERESTS) || guildInterests > ALL_INTERESTS)
+ if (!(lfGuildBrowse.PlayStyle & ALL_INTERESTS) || lfGuildBrowse.PlayStyle > ALL_INTERESTS)
return;
- if (playerLevel > sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL) || playerLevel < 1)
+ if (lfGuildBrowse.CharacterLevel > sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL) || lfGuildBrowse.CharacterLevel < 1)
return;
Player* player = GetPlayer();
- LFGuildPlayer settings(player->GetGUID(), classRoles, availability, guildInterests, ANY_FINDER_LEVEL);
- LFGuildStore guildList = sGuildFinderMgr->GetGuildsMatchingSetting(settings, player->GetTeamId());
- uint32 guildCount = guildList.size();
-
- if (guildCount == 0)
- {
- WorldPacket packet(SMSG_LF_GUILD_BROWSE, 0);
- player->SendDirectMessage(&packet);
- return;
- }
+ LFGuildPlayer settings(player->GetGUID(), lfGuildBrowse.ClassRoles, lfGuildBrowse.Availability, lfGuildBrowse.PlayStyle, ANY_FINDER_LEVEL);
+ std::vector<LFGuildSettings const*> guildList = sGuildFinderMgr->GetGuildsMatchingSetting(settings, player->GetTeamId());
- ByteBuffer bufferData(65 * guildCount);
- WorldPacket data(SMSG_LF_GUILD_BROWSE, 3 + guildCount * 65); // Estimated size
- data.WriteBits(guildCount, 19);
+ WorldPackets::GuildFinder::LFGuildBrowseResult lfGuildBrowseResult;
+ lfGuildBrowseResult.Post.resize(guildList.size());
- for (LFGuildStore::const_iterator itr = guildList.begin(); itr != guildList.end(); ++itr)
+ for (std::size_t i = 0; i < guildList.size(); ++i)
{
- LFGuildSettings guildSettings = itr->second;
- Guild* guild = sGuildMgr->GetGuildByGuid(itr->first);
- ASSERT(guild);
-
- ObjectGuid guildGUID = guild->GetGUID();
-
- data.WriteBit(guildGUID[7]);
- data.WriteBit(guildGUID[5]);
- data.WriteBits(guild->GetName().size(), 8);
- data.WriteBit(guildGUID[0]);
- data.WriteBits(guildSettings.GetComment().size(), 11);
- data.WriteBit(guildGUID[4]);
- data.WriteBit(guildGUID[1]);
- data.WriteBit(guildGUID[2]);
- data.WriteBit(guildGUID[6]);
- data.WriteBit(guildGUID[3]);
-
- bufferData << uint32(guild->GetEmblemInfo().GetColor());
- bufferData << uint32(guild->GetEmblemInfo().GetBorderStyle()); // Guessed
- bufferData << uint32(guild->GetEmblemInfo().GetStyle());
-
- bufferData.WriteString(guildSettings.GetComment());
-
- bufferData << uint8(0); // Unk
-
- bufferData.WriteByteSeq(guildGUID[5]);
-
- bufferData << uint32(guildSettings.GetInterests());
-
- bufferData.WriteByteSeq(guildGUID[6]);
- bufferData.WriteByteSeq(guildGUID[4]);
-
- bufferData << uint32(guild->GetLevel());
-
- bufferData.WriteString(guild->GetName());
-
- bufferData << uint32(guild->GetAchievementMgr().GetAchievementPoints());
-
- bufferData.WriteByteSeq(guildGUID[7]);
-
- bufferData << uint8(sGuildFinderMgr->HasRequest(player->GetGUID(), guild->GetGUID())); // Request pending
-
- bufferData.WriteByteSeq(guildGUID[2]);
- bufferData.WriteByteSeq(guildGUID[0]);
-
- bufferData << uint32(guildSettings.GetAvailability());
-
- bufferData.WriteByteSeq(guildGUID[1]);
-
- bufferData << uint32(guild->GetEmblemInfo().GetBackgroundColor());
- bufferData << uint32(0); // Unk Int 2 (+ 128) // Always 0 or 1
- bufferData << uint32(guild->GetEmblemInfo().GetBorderColor());
- bufferData << uint32(guildSettings.GetClassRoles());
-
- bufferData.WriteByteSeq(guildGUID[3]);
- bufferData << uint32(guild->GetMembersCount());
+ LFGuildSettings const* guildSettings = guildList[i];
+ WorldPackets::GuildFinder::LFGuildBrowseData& guildData = lfGuildBrowseResult.Post[i];
+ Guild* guild = ASSERT_NOTNULL(sGuildMgr->GetGuildByGuid(guildSettings->GetGUID()));
+
+ guildData.GuildName = guild->GetName();
+ guildData.GuildGUID = guild->GetGUID();
+ guildData.GuildVirtualRealm = GetVirtualRealmAddress();
+ guildData.GuildMembers = guild->GetMembersCount();
+ guildData.GuildAchievementPoints = guild->GetAchievementMgr().GetAchievementPoints();
+ guildData.PlayStyle = guildSettings->GetInterests();
+ guildData.Availability = guildSettings->GetAvailability();
+ guildData.ClassRoles = guildSettings->GetClassRoles();
+ guildData.LevelRange = guildSettings->GetLevel();
+ guildData.EmblemStyle = guild->GetEmblemInfo().GetStyle();
+ guildData.EmblemColor = guild->GetEmblemInfo().GetColor();
+ guildData.BorderStyle = guild->GetEmblemInfo().GetBorderStyle();
+ guildData.BorderColor = guild->GetEmblemInfo().GetBorderColor();
+ guildData.Background = guild->GetEmblemInfo().GetBackgroundColor();
+ guildData.Comment = guildSettings->GetComment();
+ guildData.Cached = 0;
+ guildData.MembershipRequested = sGuildFinderMgr->HasRequest(player->GetGUID(), guild->GetGUID());
}
- data.FlushBits();
- data.append(bufferData);
-
- player->SendDirectMessage(&data);
+ player->SendDirectMessage(lfGuildBrowseResult.Write());
}
-void WorldSession::HandleGuildFinderDeclineRecruit(WorldPacket& recvPacket)
+void WorldSession::HandleGuildFinderDeclineRecruit(WorldPackets::GuildFinder::LFGuildDeclineRecruit& lfGuildDeclineRecruit)
{
if (!GetPlayer()->GetGuild())
- {
- recvPacket.rfinish();
return;
- }
- ObjectGuid playerGuid;
-
- playerGuid[1] = recvPacket.ReadBit();
- playerGuid[4] = recvPacket.ReadBit();
- playerGuid[5] = recvPacket.ReadBit();
- playerGuid[2] = recvPacket.ReadBit();
- playerGuid[6] = recvPacket.ReadBit();
- playerGuid[7] = recvPacket.ReadBit();
- playerGuid[0] = recvPacket.ReadBit();
- playerGuid[3] = recvPacket.ReadBit();
-
- recvPacket.ReadByteSeq(playerGuid[5]);
- recvPacket.ReadByteSeq(playerGuid[7]);
- recvPacket.ReadByteSeq(playerGuid[2]);
- recvPacket.ReadByteSeq(playerGuid[3]);
- recvPacket.ReadByteSeq(playerGuid[4]);
- recvPacket.ReadByteSeq(playerGuid[1]);
- recvPacket.ReadByteSeq(playerGuid[0]);
- recvPacket.ReadByteSeq(playerGuid[6]);
-
- if (!playerGuid.IsPlayer())
+ if (!lfGuildDeclineRecruit.RecruitGUID.IsPlayer())
return;
- sGuildFinderMgr->RemoveMembershipRequest(playerGuid, GetPlayer()->GetGuild()->GetGUID());
+ sGuildFinderMgr->RemoveMembershipRequest(lfGuildDeclineRecruit.RecruitGUID, GetPlayer()->GetGuild()->GetGUID());
}
-void WorldSession::HandleGuildFinderGetApplications(WorldPacket& /*recvPacket*/)
+void WorldSession::HandleGuildFinderGetApplications(WorldPackets::GuildFinder::LFGuildGetApplications& /*lfGuildGetApplications*/)
{
- TC_LOG_DEBUG("network", "WORLD: Received CMSG_LF_GUILD_GET_APPLICATIONS"); // Empty opcode
-
- std::list<MembershipRequest> applicatedGuilds = sGuildFinderMgr->GetAllMembershipRequestsForPlayer(GetPlayer()->GetGUID());
- uint32 applicationsCount = applicatedGuilds.size();
- WorldPacket data(SMSG_LF_GUILD_APPLICATIONS, 7 + 54 * applicationsCount);
- data.WriteBits(applicationsCount, 20);
+ std::vector<MembershipRequest const*> applicatedGuilds = sGuildFinderMgr->GetAllMembershipRequestsForPlayer(GetPlayer()->GetGUID());
+ WorldPackets::GuildFinder::LFGuildApplications lfGuildApplications;
+ lfGuildApplications.Application.resize(applicatedGuilds.size());
+ lfGuildApplications.NumRemaining = 10 - sGuildFinderMgr->CountRequestsFromPlayer(GetPlayer()->GetGUID());
- if (applicationsCount > 0)
+ for (std::size_t i = 0; i < applicatedGuilds.size(); ++i)
{
- ByteBuffer bufferData(54 * applicationsCount);
- for (std::list<MembershipRequest>::const_iterator itr = applicatedGuilds.begin(); itr != applicatedGuilds.end(); ++itr)
- {
- Guild* guild = sGuildMgr->GetGuildByGuid(itr->GetGuildGuid());
- ASSERT(guild);
- LFGuildSettings guildSettings = sGuildFinderMgr->GetGuildSettings(itr->GetGuildGuid());
- MembershipRequest request = *itr;
-
- ObjectGuid guildGuid = ObjectGuid(guild->GetGUID());
-
- data.WriteBit(guildGuid[1]);
- data.WriteBit(guildGuid[0]);
- data.WriteBit(guildGuid[5]);
- data.WriteBits(request.GetComment().size(), 11);
- data.WriteBit(guildGuid[3]);
- data.WriteBit(guildGuid[7]);
- data.WriteBit(guildGuid[4]);
- data.WriteBit(guildGuid[6]);
- data.WriteBit(guildGuid[2]);
- data.WriteBits(guild->GetName().size(), 8);
-
- bufferData.WriteByteSeq(guildGuid[2]);
- bufferData.WriteString(request.GetComment());
- bufferData.WriteByteSeq(guildGuid[5]);
- bufferData.WriteString(guild->GetName());
-
- bufferData << uint32(guildSettings.GetAvailability());
- bufferData << uint32(request.GetExpiryTime() - time(NULL)); // Time left to application expiry (seconds)
-
- bufferData.WriteByteSeq(guildGuid[0]);
- bufferData.WriteByteSeq(guildGuid[6]);
- bufferData.WriteByteSeq(guildGuid[3]);
- bufferData.WriteByteSeq(guildGuid[7]);
-
- bufferData << uint32(guildSettings.GetClassRoles());
-
- bufferData.WriteByteSeq(guildGuid[4]);
- bufferData.WriteByteSeq(guildGuid[1]);
-
- bufferData << uint32(time(NULL) - request.GetSubmitTime()); // Time since application (seconds)
- bufferData << uint32(guildSettings.GetInterests());
- }
-
- data.FlushBits();
- data.append(bufferData);
+ MembershipRequest const* application = applicatedGuilds[i];
+ WorldPackets::GuildFinder::LFGuildApplicationData& applicationData = lfGuildApplications.Application[i];
+
+ Guild* guild = ASSERT_NOTNULL(sGuildMgr->GetGuildByGuid(application->GetGuildGuid()));
+ LFGuildSettings const& guildSettings = sGuildFinderMgr->GetGuildSettings(application->GetGuildGuid());
+
+ applicationData.GuildGUID = application->GetGuildGuid();
+ applicationData.GuildVirtualRealm = GetVirtualRealmAddress();
+ applicationData.GuildName = guild->GetName();
+ applicationData.ClassRoles = guildSettings.GetClassRoles();
+ applicationData.PlayStyle = guildSettings.GetInterests();
+ applicationData.Availability = guildSettings.GetAvailability();
+ applicationData.SecondsSinceCreated = time(NULL) - application->GetSubmitTime();
+ applicationData.SecondsUntilExpiration = application->GetExpiryTime() - time(NULL);
+ applicationData.Comment = application->GetComment();
}
- data << uint32(10 - sGuildFinderMgr->CountRequestsFromPlayer(GetPlayer()->GetGUID())); // Applications count left
- GetPlayer()->SendDirectMessage(&data);
+ GetPlayer()->SendDirectMessage(lfGuildApplications.Write());
}
-// Lists all recruits for a guild - Misses times
-void WorldSession::HandleGuildFinderGetRecruits(WorldPacket& recvPacket)
+void WorldSession::HandleGuildFinderGetGuildPost(WorldPackets::GuildFinder::LFGuildGetGuildPost& /*lfGuildGetGuildPost*/)
{
- uint32 unkTime = 0;
- recvPacket >> unkTime;
-
Player* player = GetPlayer();
+
Guild* guild = player->GetGuild();
- if (!guild)
+ if (!guild) // Player must be in guild
return;
- std::vector<MembershipRequest> recruitsList = sGuildFinderMgr->GetAllMembershipRequestsForGuild(guild->GetGUID());
- uint32 recruitCount = recruitsList.size();
-
- ByteBuffer dataBuffer(53 * recruitCount);
- WorldPacket data(SMSG_LF_GUILD_RECRUITS, 7 + 26 * recruitCount + 53 * recruitCount);
- data.WriteBits(recruitCount, 20);
-
- for (std::vector<MembershipRequest>::const_iterator itr = recruitsList.begin(); itr != recruitsList.end(); ++itr)
+ WorldPackets::GuildFinder::LFGuildPost lfGuildPost;
+ if (guild->GetLeaderGUID() == player->GetGUID())
{
- MembershipRequest request = *itr;
- ObjectGuid playerGuid = request.GetPlayerGUID();
-
- data.WriteBits(request.GetComment().size(), 11);
- data.WriteBit(playerGuid[2]);
- data.WriteBit(playerGuid[4]);
- data.WriteBit(playerGuid[3]);
- data.WriteBit(playerGuid[7]);
- data.WriteBit(playerGuid[0]);
- data.WriteBits(request.GetName().size(), 7);
- data.WriteBit(playerGuid[5]);
- data.WriteBit(playerGuid[1]);
- data.WriteBit(playerGuid[6]);
-
- dataBuffer.WriteByteSeq(playerGuid[4]);
-
- dataBuffer << int32(time(NULL) <= request.GetExpiryTime());
-
- dataBuffer.WriteByteSeq(playerGuid[3]);
- dataBuffer.WriteByteSeq(playerGuid[0]);
- dataBuffer.WriteByteSeq(playerGuid[1]);
-
- dataBuffer << int32(request.GetLevel());
-
- dataBuffer.WriteByteSeq(playerGuid[6]);
- dataBuffer.WriteByteSeq(playerGuid[7]);
- dataBuffer.WriteByteSeq(playerGuid[2]);
-
- dataBuffer << int32(time(NULL) - request.GetSubmitTime()); // Time in seconds since application submitted.
- dataBuffer << int32(request.GetAvailability());
- dataBuffer << int32(request.GetClassRoles());
- dataBuffer << int32(request.GetInterests());
- dataBuffer << int32(request.GetExpiryTime() - time(NULL)); // TIme in seconds until application expires.
-
- dataBuffer.WriteString(request.GetName());
- dataBuffer.WriteString(request.GetComment());
-
- dataBuffer << int32(request.GetClass());
-
- dataBuffer.WriteByteSeq(playerGuid[5]);
+ LFGuildSettings const& settings = sGuildFinderMgr->GetGuildSettings(guild->GetGUID());
+ lfGuildPost.Post = boost::in_place();
+ lfGuildPost.Post->Active = settings.IsListed();
+ lfGuildPost.Post->PlayStyle = settings.GetInterests();
+ lfGuildPost.Post->Availability = settings.GetAvailability();
+ lfGuildPost.Post->ClassRoles = settings.GetClassRoles();
+ lfGuildPost.Post->LevelRange = settings.GetLevel();
+ lfGuildPost.Post->Comment = settings.GetComment();
}
- data.FlushBits();
- data.append(dataBuffer);
- data << uint32(time(NULL)); // Unk time
-
- player->SendDirectMessage(&data);
+ player->SendDirectMessage(lfGuildPost.Write());
}
-void WorldSession::HandleGuildFinderPostRequest(WorldPacket& /*recvPacket*/)
+// Lists all recruits for a guild - Misses times
+void WorldSession::HandleGuildFinderGetRecruits(WorldPackets::GuildFinder::LFGuildGetRecruits& /*lfGuildGetRecruits*/)
{
Player* player = GetPlayer();
-
Guild* guild = player->GetGuild();
- if (!guild) // Player must be in guild
+ if (!guild)
return;
- bool isGuildMaster = guild->GetLeaderGUID() == player->GetGUID();
-
- LFGuildSettings settings = sGuildFinderMgr->GetGuildSettings(guild->GetGUID());
-
- WorldPacket data(SMSG_LF_GUILD_POST, 35);
- data.WriteBit(isGuildMaster); // Guessed
-
- if (isGuildMaster)
+ time_t now = time(nullptr);
+ WorldPackets::GuildFinder::LFGuildRecruits lfGuildRecruits;
+ lfGuildRecruits.UpdateTime = now;
+ if (std::unordered_map<ObjectGuid, MembershipRequest> const* recruitsList = sGuildFinderMgr->GetAllMembershipRequestsForGuild(guild->GetGUID()))
{
- data.WriteBits(settings.GetComment().size(), 11);
- data.WriteBit(settings.IsListed());
- data << uint32(settings.GetLevel());
- data.WriteString(settings.GetComment());
- data << uint32(0); // Unk Int32
- data << uint32(settings.GetAvailability());
- data << uint32(settings.GetClassRoles());
- data << uint32(settings.GetInterests());
+ lfGuildRecruits.Recruits.resize(recruitsList->size());
+ std::size_t i = 0;
+ for (auto const& recruitRequestPair : *recruitsList)
+ {
+ WorldPackets::GuildFinder::LFGuildRecruitData& recruitData = lfGuildRecruits.Recruits[i++];
+ recruitData.RecruitGUID = recruitRequestPair.first;
+ recruitData.RecruitVirtualRealm = GetVirtualRealmAddress();
+ recruitData.Comment = recruitRequestPair.second.GetComment();
+ recruitData.ClassRoles = recruitRequestPair.second.GetClassRoles();
+ recruitData.PlayStyle = recruitRequestPair.second.GetInterests();
+ recruitData.Availability = recruitRequestPair.second.GetAvailability();
+ recruitData.SecondsSinceCreated = now - recruitRequestPair.second.GetSubmitTime();
+ recruitData.SecondsUntilExpiration = recruitRequestPair.second.GetExpiryTime() - now;
+ if (CharacterInfo const* charInfo = sWorld->GetCharacterInfo(recruitRequestPair.first))
+ {
+ recruitData.Name = charInfo->Name;
+ recruitData.CharacterClass = charInfo->Class;
+ recruitData.CharacterGender = charInfo->Sex;
+ recruitData.CharacterLevel = charInfo->Level;
+ }
+ }
}
- else
- data.FlushBits();
- player->SendDirectMessage(&data);
+
+ player->SendDirectMessage(lfGuildRecruits.Write());
}
-void WorldSession::HandleGuildFinderRemoveRecruit(WorldPacket& recvPacket)
+void WorldSession::HandleGuildFinderRemoveRecruit(WorldPackets::GuildFinder::LFGuildRemoveRecruit& lfGuildRemoveRecruit)
{
- ObjectGuid guildGuid;
-
- guildGuid[0] = recvPacket.ReadBit();
- guildGuid[4] = recvPacket.ReadBit();
- guildGuid[3] = recvPacket.ReadBit();
- guildGuid[5] = recvPacket.ReadBit();
- guildGuid[7] = recvPacket.ReadBit();
- guildGuid[6] = recvPacket.ReadBit();
- guildGuid[2] = recvPacket.ReadBit();
- guildGuid[1] = recvPacket.ReadBit();
-
- recvPacket.ReadByteSeq(guildGuid[4]);
- recvPacket.ReadByteSeq(guildGuid[0]);
- recvPacket.ReadByteSeq(guildGuid[3]);
- recvPacket.ReadByteSeq(guildGuid[6]);
- recvPacket.ReadByteSeq(guildGuid[5]);
- recvPacket.ReadByteSeq(guildGuid[1]);
- recvPacket.ReadByteSeq(guildGuid[2]);
- recvPacket.ReadByteSeq(guildGuid[7]);
-
- if (!guildGuid.IsGuild())
+ if (!lfGuildRemoveRecruit.GuildGUID.IsGuild())
return;
- sGuildFinderMgr->RemoveMembershipRequest(GetPlayer()->GetGUID(), guildGuid);
+ sGuildFinderMgr->RemoveMembershipRequest(GetPlayer()->GetGUID(), lfGuildRemoveRecruit.GuildGUID);
}
// Sent any time a guild master sets an option in the interface and when listing / unlisting his guild
-void WorldSession::HandleGuildFinderSetGuildPost(WorldPacket& recvPacket)
+void WorldSession::HandleGuildFinderSetGuildPost(WorldPackets::GuildFinder::LFGuildSetGuildPost& lfGuildSetGuildPost)
{
- uint32 classRoles = 0;
- uint32 availability = 0;
- uint32 guildInterests = 0;
- uint32 level = 0;
-
- recvPacket >> level >> availability >> guildInterests >> classRoles;
// Level sent is zero if untouched, force to any (from interface). Idk why
- if (!level)
- level = ANY_FINDER_LEVEL;
-
- uint16 length = recvPacket.ReadBits(11);
- bool listed = recvPacket.ReadBit();
- std::string comment = recvPacket.ReadString(length);
+ if (!lfGuildSetGuildPost.LevelRange)
+ lfGuildSetGuildPost.LevelRange = ANY_FINDER_LEVEL;
- if (!(classRoles & GUILDFINDER_ALL_ROLES) || classRoles > GUILDFINDER_ALL_ROLES)
+ if (!(lfGuildSetGuildPost.ClassRoles & GUILDFINDER_ALL_ROLES) || lfGuildSetGuildPost.ClassRoles > GUILDFINDER_ALL_ROLES)
return;
- if (!(availability & AVAILABILITY_ALWAYS) || availability > AVAILABILITY_ALWAYS)
+ if (!(lfGuildSetGuildPost.Availability & AVAILABILITY_ALWAYS) || lfGuildSetGuildPost.Availability > AVAILABILITY_ALWAYS)
return;
- if (!(guildInterests & ALL_INTERESTS) || guildInterests > ALL_INTERESTS)
+ if (!(lfGuildSetGuildPost.PlayStyle & ALL_INTERESTS) || lfGuildSetGuildPost.PlayStyle > ALL_INTERESTS)
return;
- if (!(level & ALL_GUILDFINDER_LEVELS) || level > ALL_GUILDFINDER_LEVELS)
+ if (!(lfGuildSetGuildPost.LevelRange & ALL_GUILDFINDER_LEVELS) || lfGuildSetGuildPost.LevelRange > ALL_GUILDFINDER_LEVELS)
return;
Player* player = GetPlayer();
@@ -430,6 +227,7 @@ void WorldSession::HandleGuildFinderSetGuildPost(WorldPacket& recvPacket)
if (guild->GetLeaderGUID() != player->GetGUID())
return;
- LFGuildSettings settings(listed, player->GetTeamId(), guild->GetGUID(), classRoles, availability, guildInterests, level, comment);
+ LFGuildSettings settings(lfGuildSetGuildPost.Active, player->GetTeamId(), guild->GetGUID(), lfGuildSetGuildPost.ClassRoles,
+ lfGuildSetGuildPost.Availability, lfGuildSetGuildPost.PlayStyle, lfGuildSetGuildPost.LevelRange, lfGuildSetGuildPost.Comment);
sGuildFinderMgr->SetGuildSettings(guild->GetGUID(), settings);
}
diff --git a/src/server/game/Server/Packets/GuildFinderPackets.cpp b/src/server/game/Server/Packets/GuildFinderPackets.cpp
new file mode 100644
index 00000000000..db7ac6556ed
--- /dev/null
+++ b/src/server/game/Server/Packets/GuildFinderPackets.cpp
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "GuildFinderPackets.h"
+#include "PacketUtilities.h"
+
+void WorldPackets::GuildFinder::LFGuildAddRecruit::Read()
+{
+ _worldPacket >> GuildGUID;
+ _worldPacket >> PlayStyle;
+ _worldPacket >> Availability;
+ _worldPacket >> ClassRoles;
+ Comment = _worldPacket.ReadString(_worldPacket.ReadBits(10));
+}
+
+void WorldPackets::GuildFinder::LFGuildBrowse::Read()
+{
+ _worldPacket >> PlayStyle;
+ _worldPacket >> Availability;
+ _worldPacket >> ClassRoles;
+ _worldPacket >> CharacterLevel;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::GuildFinder::LFGuildBrowseData const& guildData)
+{
+ data.WriteBits(guildData.GuildName.length(), 7);
+ data.WriteBits(guildData.Comment.length(), 10);
+ data << guildData.GuildGUID;
+ data << uint32(guildData.GuildVirtualRealm);
+ data << int32(guildData.GuildMembers);
+ data << int32(guildData.GuildAchievementPoints);
+ data << int32(guildData.PlayStyle);
+ data << int32(guildData.Availability);
+ data << int32(guildData.ClassRoles);
+ data << int32(guildData.LevelRange);
+ data << int32(guildData.EmblemStyle);
+ data << int32(guildData.EmblemColor);
+ data << int32(guildData.BorderStyle);
+ data << int32(guildData.BorderColor);
+ data << int32(guildData.Background);
+ data << int8(guildData.Cached);
+ data << int8(guildData.MembershipRequested);
+ data.WriteString(guildData.GuildName);
+ data.WriteString(guildData.Comment);
+ return data;
+}
+
+WorldPacket const* WorldPackets::GuildFinder::LFGuildBrowseResult::Write()
+{
+ _worldPacket << uint32(Post.size());
+ for (LFGuildBrowseData const& guildData : Post)
+ _worldPacket << guildData;
+
+ return &_worldPacket;
+}
+
+void WorldPackets::GuildFinder::LFGuildDeclineRecruit::Read()
+{
+ _worldPacket >> RecruitGUID;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::GuildFinder::LFGuildApplicationData const& application)
+{
+ data << application.GuildGUID;
+ data << uint32(application.GuildVirtualRealm);
+ data << int32(application.ClassRoles);
+ data << int32(application.PlayStyle);
+ data << int32(application.Availability);
+ data << uint32(application.SecondsSinceCreated);
+ data << uint32(application.SecondsUntilExpiration);
+ data.WriteBits(application.GuildName.length(), 7);
+ data.WriteBits(application.Comment.length(), 10);
+ data.FlushBits();
+ data.WriteString(application.GuildName);
+ data.WriteString(application.Comment);
+ return data;
+}
+
+WorldPacket const* WorldPackets::GuildFinder::LFGuildApplications::Write()
+{
+ _worldPacket << uint32(Application.size());
+ _worldPacket << int32(NumRemaining);
+ for (LFGuildApplicationData const& application : Application)
+ _worldPacket << application;
+
+ return &_worldPacket;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::GuildFinder::GuildPostData const& post)
+{
+ data.WriteBit(post.Active);
+ data.WriteBits(post.Comment.length(), 10);
+ data << int32(post.PlayStyle);
+ data << int32(post.Availability);
+ data << int32(post.ClassRoles);
+ data << int32(post.LevelRange);
+ data << uint32(post.SecondsRemaining);
+ data.WriteString(post.Comment);
+ return data;
+}
+
+WorldPacket const* WorldPackets::GuildFinder::LFGuildPost::Write()
+{
+ _worldPacket.WriteBit(Post.is_initialized());
+ _worldPacket.FlushBits();
+ if (Post)
+ _worldPacket << *Post;
+
+ return &_worldPacket;
+}
+
+void WorldPackets::GuildFinder::LFGuildGetRecruits::Read()
+{
+ _worldPacket >> LastUpdate;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::GuildFinder::LFGuildRecruitData const& recruit)
+{
+ data << recruit.RecruitGUID;
+ data << uint32(recruit.RecruitVirtualRealm);
+ data << int32(recruit.CharacterClass);
+ data << int32(recruit.CharacterGender);
+ data << int32(recruit.CharacterLevel);
+ data << int32(recruit.ClassRoles);
+ data << int32(recruit.PlayStyle);
+ data << int32(recruit.Availability);
+ data << uint32(recruit.SecondsSinceCreated);
+ data << uint32(recruit.SecondsUntilExpiration);
+ data.WriteBits(recruit.Name.length(), 6);
+ data.WriteBits(recruit.Comment.length(), 10);
+ data.FlushBits();
+ data.WriteString(recruit.Name);
+ data.WriteString(recruit.Comment);
+ return data;
+}
+
+WorldPacket const* WorldPackets::GuildFinder::LFGuildRecruits::Write()
+{
+ _worldPacket << uint32(Recruits.size());
+ _worldPacket << uint32(UpdateTime);
+ for (LFGuildRecruitData const& recruit : Recruits)
+ _worldPacket << recruit;
+
+ return &_worldPacket;
+}
+
+void WorldPackets::GuildFinder::LFGuildRemoveRecruit::Read()
+{
+ _worldPacket >> GuildGUID;
+}
+
+void WorldPackets::GuildFinder::LFGuildSetGuildPost::Read()
+{
+ _worldPacket >> PlayStyle;
+ _worldPacket >> Availability;
+ _worldPacket >> ClassRoles;
+ _worldPacket >> LevelRange;
+ Active = _worldPacket.ReadBit();
+ Comment = _worldPacket.ReadString(_worldPacket.ReadBits(10));
+}
diff --git a/src/server/game/Server/Packets/GuildFinderPackets.h b/src/server/game/Server/Packets/GuildFinderPackets.h
new file mode 100644
index 00000000000..02b4e5de29c
--- /dev/null
+++ b/src/server/game/Server/Packets/GuildFinderPackets.h
@@ -0,0 +1,237 @@
+/*
+ * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GuildFinderPackets_h__
+#define GuildFinderPackets_h__
+
+#include "Packet.h"
+#include "ObjectGuid.h"
+
+namespace WorldPackets
+{
+ namespace GuildFinder
+ {
+ class LFGuildAddRecruit final : public ClientPacket
+ {
+ public:
+ LFGuildAddRecruit(WorldPacket&& packet) : ClientPacket(CMSG_LF_GUILD_ADD_RECRUIT, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid GuildGUID;
+ int32 Availability = 0;
+ int32 ClassRoles = 0;
+ int32 PlayStyle = 0;
+ std::string Comment;
+ };
+
+ class LFGuildApplicationsListChanged final : public ServerPacket
+ {
+ public:
+ LFGuildApplicationsListChanged() : ServerPacket(SMSG_LF_GUILD_APPLICATIONS_LIST_CHANGED, 0) { }
+
+ WorldPacket const* Write() override { return &_worldPacket; }
+ };
+
+ class LFGuildApplicantListChanged final : public ServerPacket
+ {
+ public:
+ LFGuildApplicantListChanged() : ServerPacket(SMSG_LF_GUILD_APPLICANT_LIST_CHANGED, 0) { }
+
+ WorldPacket const* Write() override { return &_worldPacket; }
+ };
+
+ class LFGuildBrowse final : public ClientPacket
+ {
+ public:
+ LFGuildBrowse(WorldPacket&& packet) : ClientPacket(CMSG_LF_GUILD_BROWSE, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 CharacterLevel = 0;
+ int32 Availability = 0;
+ int32 ClassRoles = 0;
+ int32 PlayStyle = 0;
+ };
+
+ struct LFGuildBrowseData
+ {
+ std::string GuildName;
+ ObjectGuid GuildGUID;
+ uint32 GuildVirtualRealm = 0;
+ int32 GuildMembers = 0;
+ int32 GuildAchievementPoints = 0;
+ int32 PlayStyle = 0;
+ int32 Availability = 0;
+ int32 ClassRoles = 0;
+ int32 LevelRange = 0;
+ int32 EmblemStyle = 0;
+ int32 EmblemColor = 0;
+ int32 BorderStyle = 0;
+ int32 BorderColor = 0;
+ int32 Background = 0;
+ std::string Comment;
+ int8 Cached = 0;
+ int8 MembershipRequested = 0;
+ };
+
+ class LFGuildBrowseResult final : public ServerPacket
+ {
+ public:
+ LFGuildBrowseResult() : ServerPacket(SMSG_LF_GUILD_BROWSE) { }
+
+ WorldPacket const* Write() override;
+
+ std::vector<LFGuildBrowseData> Post;
+ };
+
+ class LFGuildDeclineRecruit final : public ClientPacket
+ {
+ public:
+ LFGuildDeclineRecruit(WorldPacket&& packet) : ClientPacket(CMSG_LF_GUILD_DECLINE_RECRUIT, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid RecruitGUID;
+ };
+
+ class LFGuildGetApplications final : public ClientPacket
+ {
+ public:
+ LFGuildGetApplications(WorldPacket&& packet) : ClientPacket(CMSG_LF_GUILD_GET_APPLICATIONS, std::move(packet)) { }
+
+ void Read() override { }
+ };
+
+ struct LFGuildApplicationData
+ {
+ ObjectGuid GuildGUID;
+ uint32 GuildVirtualRealm = 0;
+ std::string GuildName;
+ int32 ClassRoles = 0;
+ int32 PlayStyle = 0;
+ int32 Availability = 0;
+ uint32 SecondsSinceCreated = 0;
+ uint32 SecondsUntilExpiration = 0;
+ std::string Comment;
+ };
+
+ class LFGuildApplications final : public ServerPacket
+ {
+ public:
+ LFGuildApplications() : ServerPacket(SMSG_LF_GUILD_APPLICATIONS) { }
+
+ WorldPacket const* Write() override;
+
+ std::vector<LFGuildApplicationData> Application;
+ int32 NumRemaining = 0;
+ };
+
+ class LFGuildGetGuildPost final : public ClientPacket
+ {
+ public:
+ LFGuildGetGuildPost(WorldPacket&& packet) : ClientPacket(CMSG_LF_GUILD_GET_GUILD_POST, std::move(packet)) { }
+
+ void Read() override { }
+ };
+
+ struct GuildPostData
+ {
+ bool Active = false;
+ int32 PlayStyle = 0;
+ int32 Availability = 0;
+ int32 ClassRoles = 0;
+ int32 LevelRange = 0;
+ time_t SecondsRemaining = time_t(0);
+ std::string Comment;
+ };
+
+ class LFGuildPost final : public ServerPacket
+ {
+ public:
+ LFGuildPost() : ServerPacket(SMSG_LF_GUILD_POST, 1 + 1 + 4 + 4 + 4 + 4 + 4 + 255) { }
+
+ WorldPacket const* Write() override;
+
+ Optional<GuildPostData> Post;
+ };
+
+ class LFGuildGetRecruits final : public ClientPacket
+ {
+ public:
+ LFGuildGetRecruits(WorldPacket&& packet) : ClientPacket(CMSG_LF_GUILD_GET_RECRUITS, std::move(packet)) { }
+
+ void Read() override;
+
+ uint32 LastUpdate = 0;
+ };
+
+ struct LFGuildRecruitData
+ {
+ ObjectGuid RecruitGUID;
+ std::string Name;
+ uint32 RecruitVirtualRealm = 0;
+ std::string Comment;
+ int32 CharacterClass = 0;
+ int32 CharacterGender = 0;
+ int32 CharacterLevel = 0;
+ int32 ClassRoles = 0;
+ int32 PlayStyle = 0;
+ int32 Availability = 0;
+ uint32 SecondsSinceCreated = 0;
+ uint32 SecondsUntilExpiration = 0;
+ };
+
+ class LFGuildRecruits final : public ServerPacket
+ {
+ public:
+ LFGuildRecruits() : ServerPacket(SMSG_LF_GUILD_RECRUITS) { }
+
+ WorldPacket const* Write() override;
+
+ std::vector<LFGuildRecruitData> Recruits;
+ time_t UpdateTime = time_t(0);
+ };
+
+ class LFGuildRemoveRecruit final : public ClientPacket
+ {
+ public:
+ LFGuildRemoveRecruit(WorldPacket&& packet) : ClientPacket(CMSG_LF_GUILD_REMOVE_RECRUIT, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid GuildGUID;
+ };
+
+ class LFGuildSetGuildPost final : public ClientPacket
+ {
+ public:
+ LFGuildSetGuildPost(WorldPacket&& packet) : ClientPacket(CMSG_LF_GUILD_SET_GUILD_POST, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 Availability = 0;
+ int32 PlayStyle = 0;
+ int32 ClassRoles = 0;
+ int32 LevelRange = 0;
+ bool Active = false;
+ std::string Comment;
+ };
+ }
+}
+
+#endif // GuildFinderPackets_h__
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 6acb1cfb3a3..e37d9c7818c 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -36,6 +36,7 @@
#include "Packets/GameObjectPackets.h"
#include "Packets/GarrisonPackets.h"
#include "Packets/GuildPackets.h"
+#include "Packets/GuildFinderPackets.h"
#include "Packets/PartyPackets.h"
#include "Packets/InspectPackets.h"
#include "Packets/InstancePackets.h"
@@ -483,14 +484,14 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_LFG_LIST_LEAVE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_LFG_LIST_SEARCH, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_LFG_LIST_UPDATE_REQUEST, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_ADD_RECRUIT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderAddRecruit );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_BROWSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderBrowse );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_DECLINE_RECRUIT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderDeclineRecruit );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_GET_APPLICATIONS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderGetApplications);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_GET_GUILD_POST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderPostRequest );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_GET_RECRUITS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderGetRecruits );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_REMOVE_RECRUIT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderRemoveRecruit );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_SET_GUILD_POST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderSetGuildPost );
+ DEFINE_HANDLER(CMSG_LF_GUILD_ADD_RECRUIT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::GuildFinder::LFGuildAddRecruit, &WorldSession::HandleGuildFinderAddRecruit);
+ DEFINE_HANDLER(CMSG_LF_GUILD_BROWSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::GuildFinder::LFGuildBrowse, &WorldSession::HandleGuildFinderBrowse);
+ DEFINE_HANDLER(CMSG_LF_GUILD_DECLINE_RECRUIT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::GuildFinder::LFGuildDeclineRecruit, &WorldSession::HandleGuildFinderDeclineRecruit);
+ DEFINE_HANDLER(CMSG_LF_GUILD_GET_APPLICATIONS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::GuildFinder::LFGuildGetApplications, &WorldSession::HandleGuildFinderGetApplications);
+ DEFINE_HANDLER(CMSG_LF_GUILD_GET_GUILD_POST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::GuildFinder::LFGuildGetGuildPost, &WorldSession::HandleGuildFinderGetGuildPost);
+ DEFINE_HANDLER(CMSG_LF_GUILD_GET_RECRUITS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::GuildFinder::LFGuildGetRecruits, &WorldSession::HandleGuildFinderGetRecruits);
+ DEFINE_HANDLER(CMSG_LF_GUILD_REMOVE_RECRUIT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::GuildFinder::LFGuildRemoveRecruit, &WorldSession::HandleGuildFinderRemoveRecruit);
+ DEFINE_HANDLER(CMSG_LF_GUILD_SET_GUILD_POST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::GuildFinder::LFGuildSetGuildPost, &WorldSession::HandleGuildFinderSetGuildPost);
DEFINE_HANDLER(CMSG_LIST_INVENTORY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::Hello, &WorldSession::HandleListInventoryOpcode);
DEFINE_HANDLER(CMSG_LOADING_SCREEN_NOTIFY, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::LoadingScreenNotify, &WorldSession::HandleLoadScreenOpcode);
DEFINE_HANDLER(CMSG_LOAD_SELECTED_TROPHY, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
@@ -1290,13 +1291,13 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_SLOT_INVALID, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_TELEPORT_DENIED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_UPDATE_STATUS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_APPLICANT_LIST_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_APPLICATIONS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_APPLICATIONS_LIST_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_BROWSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_APPLICANT_LIST_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_APPLICATIONS, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_APPLICATIONS_LIST_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_BROWSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_COMMAND_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_POST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_RECRUITS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_POST, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_RECRUITS, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_CHARACTER_COPY_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 3134ad331b1..4c55c93567e 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -308,6 +308,18 @@ namespace WorldPackets
class GuildSetAchievementTracking;
}
+ namespace GuildFinder
+ {
+ class LFGuildAddRecruit;
+ class LFGuildBrowse;
+ class LFGuildDeclineRecruit;
+ class LFGuildGetApplications;
+ class LFGuildGetGuildPost;
+ class LFGuildGetRecruits;
+ class LFGuildRemoveRecruit;
+ class LFGuildSetGuildPost;
+ }
+
namespace Inspect
{
class Inspect;
@@ -1237,14 +1249,14 @@ class WorldSession
void HandleGuildChallengeUpdateRequest(WorldPackets::Guild::GuildChallengeUpdateRequest& packet);
void HandleDeclineGuildInvites(WorldPackets::Guild::DeclineGuildInvites& packet);
- void HandleGuildFinderAddRecruit(WorldPacket& recvPacket);
- void HandleGuildFinderBrowse(WorldPacket& recvPacket);
- void HandleGuildFinderDeclineRecruit(WorldPacket& recvPacket);
- void HandleGuildFinderGetApplications(WorldPacket& recvPacket);
- void HandleGuildFinderGetRecruits(WorldPacket& recvPacket);
- void HandleGuildFinderPostRequest(WorldPacket& recvPacket);
- void HandleGuildFinderRemoveRecruit(WorldPacket& recvPacket);
- void HandleGuildFinderSetGuildPost(WorldPacket& recvPacket);
+ void HandleGuildFinderAddRecruit(WorldPackets::GuildFinder::LFGuildAddRecruit& lfGuildAddRecruit);
+ void HandleGuildFinderBrowse(WorldPackets::GuildFinder::LFGuildBrowse& lfGuildBrowse);
+ void HandleGuildFinderDeclineRecruit(WorldPackets::GuildFinder::LFGuildDeclineRecruit& lfGuildDeclineRecruit);
+ void HandleGuildFinderGetApplications(WorldPackets::GuildFinder::LFGuildGetApplications& lfGuildGetApplications);
+ void HandleGuildFinderGetGuildPost(WorldPackets::GuildFinder::LFGuildGetGuildPost& lfGuildGetGuildPost);
+ void HandleGuildFinderGetRecruits(WorldPackets::GuildFinder::LFGuildGetRecruits& lfGuildGetRecruits);
+ void HandleGuildFinderRemoveRecruit(WorldPackets::GuildFinder::LFGuildRemoveRecruit& lfGuildRemoveRecruit);
+ void HandleGuildFinderSetGuildPost(WorldPackets::GuildFinder::LFGuildSetGuildPost& lfGuildSetGuildPost);
void HandleEnableTaxiNodeOpcode(WorldPackets::Taxi::EnableTaxiNode& enableTaxiNode);
void HandleTaxiNodeStatusQueryOpcode(WorldPackets::Taxi::TaxiNodeStatusQuery& taxiNodeStatusQuery);
diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp
index 7375dd48f49..3c685593ada 100644
--- a/src/server/scripts/Commands/cs_guild.cpp
+++ b/src/server/scripts/Commands/cs_guild.cpp
@@ -276,7 +276,7 @@ public:
strftime(createdDateStr, 20, "%Y-%m-%d %H:%M:%S", localtime_r(&createdDate, &localTm));
handler->PSendSysMessage(LANG_GUILD_INFO_CREATION_DATE, createdDateStr); // Creation Date
- handler->PSendSysMessage(LANG_GUILD_INFO_MEMBER_COUNT, guild->GetMemberCount()); // Number of Members
+ handler->PSendSysMessage(LANG_GUILD_INFO_MEMBER_COUNT, guild->GetMembersCount()); // Number of Members
handler->PSendSysMessage(LANG_GUILD_INFO_BANK_GOLD, guild->GetBankMoney() / 100 / 100); // Bank Gold (in gold coins)
handler->PSendSysMessage(LANG_GUILD_INFO_LEVEL, guild->GetLevel()); // Level
handler->PSendSysMessage(LANG_GUILD_INFO_MOTD, guild->GetMOTD().c_str()); // Message of the Day