Core/PacketIO: Updated and enabled guild finder opcodes
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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)
|
||||
auto playerItr = _membershipRequestsByPlayer.find(playerId);
|
||||
if (playerItr == _membershipRequestsByPlayer.end())
|
||||
return;
|
||||
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
for (auto& guildRequestPair : playerItr->second)
|
||||
{
|
||||
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;
|
||||
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
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();
|
||||
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);
|
||||
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_FINDER_APPLICANT);
|
||||
stmt->setUInt64(0, itr->GetGuildGuid().GetCounter());
|
||||
stmt->setUInt64(1, itr->GetPlayerGUID().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);
|
||||
}
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_FINDER_GUILD_SETTINGS);
|
||||
stmt->setUInt64(0, itr->GetGuildGuid().GetCounter());
|
||||
trans->Append(stmt);
|
||||
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
|
||||
// Notify the applicant his submition has been removed
|
||||
if (Player* player = ObjectAccessor::FindPlayer(itr->GetPlayerGUID()))
|
||||
SendMembershipRequestListUpdate(player);
|
||||
|
||||
++itr;
|
||||
// Notify the applicant his submition has been removed
|
||||
if (Player* player = ObjectAccessor::FindPlayer(playerRequestPair.first))
|
||||
SendMembershipRequestListUpdate(player);
|
||||
}
|
||||
}
|
||||
|
||||
_membershipRequests.erase(guildId);
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_FINDER_GUILD_SETTINGS);
|
||||
stmt->setUInt64(0, guildId.GetCounter());
|
||||
trans->Append(stmt);
|
||||
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
|
||||
_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());
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -21,321 +21,116 @@
|
||||
#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();
|
||||
LFGuildPlayer settings(player->GetGUID(), lfGuildBrowse.ClassRoles, lfGuildBrowse.Availability, lfGuildBrowse.PlayStyle, ANY_FINDER_LEVEL);
|
||||
std::vector<LFGuildSettings const*> guildList = sGuildFinderMgr->GetGuildsMatchingSetting(settings, player->GetTeamId());
|
||||
|
||||
if (guildCount == 0)
|
||||
WorldPackets::GuildFinder::LFGuildBrowseResult lfGuildBrowseResult;
|
||||
lfGuildBrowseResult.Post.resize(guildList.size());
|
||||
|
||||
for (std::size_t i = 0; i < guildList.size(); ++i)
|
||||
{
|
||||
WorldPacket packet(SMSG_LF_GUILD_BROWSE, 0);
|
||||
player->SendDirectMessage(&packet);
|
||||
return;
|
||||
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());
|
||||
}
|
||||
|
||||
ByteBuffer bufferData(65 * guildCount);
|
||||
WorldPacket data(SMSG_LF_GUILD_BROWSE, 3 + guildCount * 65); // Estimated size
|
||||
data.WriteBits(guildCount, 19);
|
||||
|
||||
for (LFGuildStore::const_iterator itr = guildList.begin(); itr != guildList.end(); ++itr)
|
||||
{
|
||||
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());
|
||||
}
|
||||
|
||||
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())
|
||||
return;
|
||||
|
||||
sGuildFinderMgr->RemoveMembershipRequest(playerGuid, GetPlayer()->GetGuild()->GetGUID());
|
||||
if (!lfGuildDeclineRecruit.RecruitGUID.IsPlayer())
|
||||
return;
|
||||
|
||||
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::vector<MembershipRequest const*> applicatedGuilds = sGuildFinderMgr->GetAllMembershipRequestsForPlayer(GetPlayer()->GetGUID());
|
||||
WorldPackets::GuildFinder::LFGuildApplications lfGuildApplications;
|
||||
lfGuildApplications.Application.resize(applicatedGuilds.size());
|
||||
lfGuildApplications.NumRemaining = 10 - sGuildFinderMgr->CountRequestsFromPlayer(GetPlayer()->GetGUID());
|
||||
|
||||
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);
|
||||
|
||||
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;
|
||||
MembershipRequest const* application = applicatedGuilds[i];
|
||||
WorldPackets::GuildFinder::LFGuildApplicationData& applicationData = lfGuildApplications.Application[i];
|
||||
|
||||
ObjectGuid guildGuid = ObjectGuid(guild->GetGUID());
|
||||
Guild* guild = ASSERT_NOTNULL(sGuildMgr->GetGuildByGuid(application->GetGuildGuid()));
|
||||
LFGuildSettings const& guildSettings = sGuildFinderMgr->GetGuildSettings(application->GetGuildGuid());
|
||||
|
||||
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);
|
||||
}
|
||||
data << uint32(10 - sGuildFinderMgr->CountRequestsFromPlayer(GetPlayer()->GetGUID())); // Applications count left
|
||||
|
||||
GetPlayer()->SendDirectMessage(&data);
|
||||
}
|
||||
|
||||
// Lists all recruits for a guild - Misses times
|
||||
void WorldSession::HandleGuildFinderGetRecruits(WorldPacket& recvPacket)
|
||||
{
|
||||
uint32 unkTime = 0;
|
||||
recvPacket >> unkTime;
|
||||
|
||||
Player* player = GetPlayer();
|
||||
Guild* guild = player->GetGuild();
|
||||
if (!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)
|
||||
{
|
||||
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]);
|
||||
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.FlushBits();
|
||||
data.append(dataBuffer);
|
||||
data << uint32(time(NULL)); // Unk time
|
||||
|
||||
player->SendDirectMessage(&data);
|
||||
GetPlayer()->SendDirectMessage(lfGuildApplications.Write());
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildFinderPostRequest(WorldPacket& /*recvPacket*/)
|
||||
void WorldSession::HandleGuildFinderGetGuildPost(WorldPackets::GuildFinder::LFGuildGetGuildPost& /*lfGuildGetGuildPost*/)
|
||||
{
|
||||
Player* player = GetPlayer();
|
||||
|
||||
@@ -343,81 +138,83 @@ void WorldSession::HandleGuildFinderPostRequest(WorldPacket& /*recvPacket*/)
|
||||
if (!guild) // Player must be in 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)
|
||||
WorldPackets::GuildFinder::LFGuildPost lfGuildPost;
|
||||
if (guild->GetLeaderGUID() == player->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());
|
||||
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();
|
||||
}
|
||||
else
|
||||
data.FlushBits();
|
||||
player->SendDirectMessage(&data);
|
||||
|
||||
player->SendDirectMessage(lfGuildPost.Write());
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildFinderRemoveRecruit(WorldPacket& recvPacket)
|
||||
// Lists all recruits for a guild - Misses times
|
||||
void WorldSession::HandleGuildFinderGetRecruits(WorldPackets::GuildFinder::LFGuildGetRecruits& /*lfGuildGetRecruits*/)
|
||||
{
|
||||
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())
|
||||
Player* player = GetPlayer();
|
||||
Guild* guild = player->GetGuild();
|
||||
if (!guild)
|
||||
return;
|
||||
|
||||
sGuildFinderMgr->RemoveMembershipRequest(GetPlayer()->GetGUID(), guildGuid);
|
||||
time_t now = time(nullptr);
|
||||
WorldPackets::GuildFinder::LFGuildRecruits lfGuildRecruits;
|
||||
lfGuildRecruits.UpdateTime = now;
|
||||
if (std::unordered_map<ObjectGuid, MembershipRequest> const* recruitsList = sGuildFinderMgr->GetAllMembershipRequestsForGuild(guild->GetGUID()))
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
player->SendDirectMessage(lfGuildRecruits.Write());
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildFinderRemoveRecruit(WorldPackets::GuildFinder::LFGuildRemoveRecruit& lfGuildRemoveRecruit)
|
||||
{
|
||||
if (!lfGuildRemoveRecruit.GuildGUID.IsGuild())
|
||||
return;
|
||||
|
||||
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;
|
||||
if (!lfGuildSetGuildPost.LevelRange)
|
||||
lfGuildSetGuildPost.LevelRange = ANY_FINDER_LEVEL;
|
||||
|
||||
uint16 length = recvPacket.ReadBits(11);
|
||||
bool listed = recvPacket.ReadBit();
|
||||
std::string comment = recvPacket.ReadString(length);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
@@ -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__
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user