diff options
| author | Warpten <vertozor@gmail.com> | 2012-09-09 11:32:14 +0200 |
|---|---|---|
| committer | Warpten <vertozor@gmail.com> | 2012-09-10 12:41:42 +0200 |
| commit | 917ffc030ea2ffaf698d2bd2b1e7967081a27beb (patch) | |
| tree | a24ee9f75be7387315f960da1ee5cab2d6326838 /src/server/game/Guilds | |
| parent | 4f1bad9a5508d1477525f709831beda6546802bb (diff) | |
Core/Guilds: Implemented GuildFinder.
Diffstat (limited to 'src/server/game/Guilds')
| -rw-r--r-- | src/server/game/Guilds/Guild.cpp | 5 | ||||
| -rwxr-xr-x | src/server/game/Guilds/Guild.h | 2 | ||||
| -rw-r--r-- | src/server/game/Guilds/GuildFinderMgr.cpp | 305 | ||||
| -rw-r--r-- | src/server/game/Guilds/GuildFinderMgr.h | 268 |
4 files changed, 580 insertions, 0 deletions
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index e7121b0fa81..92191551858 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -19,6 +19,7 @@ #include "DatabaseEnv.h" #include "Guild.h" #include "GuildMgr.h" +#include "GuildFinderMgr.h" #include "ScriptMgr.h" #include "Chat.h" #include "Config.h" @@ -1190,6 +1191,9 @@ void Guild::Disband() trans->Append(stmt); CharacterDatabase.CommitTransaction(trans); + + sGuildFinderMgr->DeleteGuild(m_id); + sGuildMgr->RemoveGuild(m_id); } @@ -1665,6 +1669,7 @@ void Guild::HandleAcceptMember(WorldSession* session) { _LogEvent(GUILD_EVENT_LOG_JOIN_GUILD, player->GetGUIDLow()); _BroadcastEvent(GE_JOINED, player->GetGUID(), player->GetName()); + sGuildFinderMgr->RemoveMembershipRequest(player->GetGUIDLow(), GUID_LOPART(this->GetGUID())); } } diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index f3e18d8998b..f644e5d3592 100755 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -787,6 +787,8 @@ public: void ResetDailyExperience(); GuildNewsLog& GetNewsLog() { return _newsLog; } + EmblemInfo const& GetEmblemInfo() const { return m_emblemInfo; } + protected: uint32 m_id; std::string m_name; diff --git a/src/server/game/Guilds/GuildFinderMgr.cpp b/src/server/game/Guilds/GuildFinderMgr.cpp new file mode 100644 index 00000000000..71a1a9ded0d --- /dev/null +++ b/src/server/game/Guilds/GuildFinderMgr.cpp @@ -0,0 +1,305 @@ +/* + * Copyright (C) 2008-2012 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 "ObjectMgr.h" +#include "GuildFinderMgr.h" +#include "GuildMgr.h" +#include "World.h" + +GuildFinderMgr::GuildFinderMgr() +{ +} + +GuildFinderMgr::~GuildFinderMgr() +{ +} + +void GuildFinderMgr::LoadFromDB() +{ + LoadGuildSettings(); + LoadMembershipRequests(); +} + +void GuildFinderMgr::LoadGuildSettings() +{ + sLog->outInfo(LOG_FILTER_SERVER_LOADING, "Loading guild finder guild-related settings..."); + // 0 1 2 3 4 5 6 7 + QueryResult result = CharacterDatabase.Query("SELECT gfgs.guildId, gfgs.availability, gfgs.classRoles, gfgs.interests, gfgs.level, gfgs.listed, gfgs.comment, c.race " + "FROM guild_finder_guild_settings gfgs " + "LEFT JOIN guild_member gm ON gm.guildid=gfgs.guildId " + "LEFT JOIN characters c ON c.guid = gm.guid LIMIT 1"); + + if (!result) + { + sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 guild finder guild-related settings. Table `guild_finder_guild_settings` is empty."); + return; + } + + uint32 count = 0; + uint32 oldMSTime = getMSTime(); + do + { + Field* fields = result->Fetch(); + uint32 guildId = fields[0].GetUInt32(); + uint8 availability = fields[1].GetUInt8(); + uint8 classRoles = fields[2].GetUInt8(); + uint8 interests = fields[3].GetUInt8(); + uint8 level = fields[4].GetUInt8(); + bool listed = (fields[5].GetUInt8() != 0); + std::string comment = fields[6].GetString(); + + TeamId guildTeam = TEAM_ALLIANCE; + if (ChrRacesEntry const* raceEntry = sChrRacesStore.LookupEntry(fields[7].GetUInt8())) + if (raceEntry->TeamID == 1) + guildTeam = TEAM_HORDE; + + LFGuildSettings settings(listed, guildTeam, guildId, classRoles, availability, interests, level, comment); + _guildSettings[guildId] = settings; + + ++count; + } while (result->NextRow()); + + sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u guild finder guild-related settings in %u ms.", count, GetMSTimeDiffToNow(oldMSTime)); +} + +void GuildFinderMgr::LoadMembershipRequests() +{ + sLog->outInfo(LOG_FILTER_SERVER_LOADING, "Loading guild finder membership requests..."); + // 0 1 2 3 4 5 6 + QueryResult result = CharacterDatabase.Query("SELECT guildId, playerGuid, availability, classRole, interests, comment, submitTime " + "FROM guild_finder_applicant"); + + if (!result) + { + sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 guild finder membership requests. Table `guild_finder_applicant` is empty."); + return; + } + + uint32 count = 0; + uint32 oldMSTime = getMSTime(); + do + { + Field* fields = result->Fetch(); + uint32 guildId = fields[0].GetUInt32(); + uint32 playerId = fields[1].GetUInt32(); + uint8 availability = fields[2].GetUInt8(); + uint8 classRoles = fields[3].GetUInt8(); + uint8 interests = fields[4].GetUInt8(); + std::string comment = fields[5].GetString(); + uint32 submitTime = fields[6].GetUInt32(); + + MembershipRequest request(playerId, guildId, availability, classRoles, interests, comment, time_t(submitTime)); + + _membershipRequests[guildId].push_back(request); + + ++count; + } while (result->NextRow()); + + sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u guild finder membership requests in %u ms.", count, GetMSTimeDiffToNow(oldMSTime)); +} + +void GuildFinderMgr::AddMembershipRequest(uint32 guildGuid, MembershipRequest const& request) +{ + _membershipRequests[guildGuid].push_back(request); + + SQLTransaction trans = CharacterDatabase.BeginTransaction(); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_GUILD_FINDER_APPLICANT); + stmt->setUInt32(0, request.GetGuildId()); + stmt->setUInt32(1, request.GetPlayerGUID()); + stmt->setUInt8(2, request.GetAvailability()); + stmt->setUInt8(3, request.GetClassRoles()); + stmt->setUInt8(4, request.GetInterests()); + stmt->setString(5, request.GetComment()); + stmt->setUInt32(6, request.GetSubmitTime()); + trans->Append(stmt); + CharacterDatabase.CommitTransaction(trans); + + // Notify the applicant his submittion has been added + if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(request.GetPlayerGUID(), 0, HIGHGUID_PLAYER))) + SendMembershipRequestListUpdate(*player); + + // Notify the guild master and officers the list changed + if (Guild* guild = sGuildMgr->GetGuildById(guildGuid)) + SendApplicantListUpdate(*guild); +} + +void GuildFinderMgr::RemoveMembershipRequest(uint32 playerId, uint32 guildId) +{ + std::vector<MembershipRequest>::iterator itr = _membershipRequests[guildId].begin(); + for(; itr != _membershipRequests[guildId].end(); ++itr) + if (itr->GetPlayerGUID() == playerId) + break; + + if (itr == _membershipRequests[guildId].end()) + return; + + SQLTransaction trans = CharacterDatabase.BeginTransaction(); + + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_FINDER_APPLICANT); + stmt->setUInt32(0, (*itr).GetGuildId()); + stmt->setUInt32(1, (*itr).GetPlayerGUID()); + trans->Append(stmt); + + CharacterDatabase.CommitTransaction(trans); + + _membershipRequests[guildId].erase(itr); + + // Notify the applicant his submittion has been removed + if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(playerId, 0, HIGHGUID_PLAYER))) + SendMembershipRequestListUpdate(*player); + + // Notify the guild master and officers the list changed + if (Guild* guild = sGuildMgr->GetGuildById(guildId)) + SendApplicantListUpdate(*guild); +} + +std::list<MembershipRequest> GuildFinderMgr::GetAllMembershipRequestsForPlayer(uint32 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; + } + } + } + return resultSet; +} + +uint8 GuildFinderMgr::CountRequestsFromPlayer(uint32 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; +} + +LFGuildStore GuildFinderMgr::GetGuildsMatchingSetting(LFGuildPlayer& settings, TeamId faction) +{ + LFGuildStore resultSet; + for (LFGuildStore::const_iterator itr = _guildSettings.begin(); itr != _guildSettings.end(); ++itr) + { + LFGuildSettings const& guildSettings = itr->second; + + if (guildSettings.GetTeam() != faction) + continue; + + if (!(guildSettings.GetAvailability() & settings.GetAvailability())) + continue; + + if (!(guildSettings.GetClassRoles() & settings.GetClassRoles())) + continue; + + if (!(guildSettings.GetInterests() & settings.GetInterests())) + continue; + + if (!(guildSettings.GetLevel() & settings.GetLevel())) + continue; + + resultSet.insert(std::make_pair(itr->first, guildSettings)); + } + + return resultSet; +} + +bool GuildFinderMgr::HasRequest(uint32 playerId, uint32 guildId) +{ + for (std::vector<MembershipRequest>::const_iterator itr = _membershipRequests[guildId].begin(); itr != _membershipRequests[guildId].end(); ++itr) + if (itr->GetPlayerGUID() == playerId) + return true; + return false; +} + +void GuildFinderMgr::SetGuildSettings(uint32 guildGuid, LFGuildSettings const& settings) +{ + _guildSettings[guildGuid] = settings; + + SQLTransaction trans = CharacterDatabase.BeginTransaction(); + + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_GUILD_FINDER_GUILD_SETTINGS); + stmt->setUInt32(0, settings.GetGUID()); + stmt->setUInt8(1, settings.GetAvailability()); + stmt->setUInt8(2, settings.GetClassRoles()); + stmt->setUInt8(3, settings.GetInterests()); + stmt->setUInt8(4, settings.GetLevel()); + stmt->setUInt8(5, settings.IsListed()); + stmt->setString(6, settings.GetComment()); + trans->Append(stmt); + + CharacterDatabase.CommitTransaction(trans); +} + +void GuildFinderMgr::DeleteGuild(uint32 guildId) +{ + std::vector<MembershipRequest>::iterator itr = _membershipRequests[guildId].begin(); + while (itr != _membershipRequests[guildId].end()) + { + SQLTransaction trans = CharacterDatabase.BeginTransaction(); + + uint32 applicant = itr->GetPlayerGUID(); + + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_FINDER_APPLICANT); + stmt->setUInt32(0, itr->GetGuildId()); + stmt->setUInt32(1, applicant); + trans->Append(stmt); + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_FINDER_GUILD_SETTINGS); + stmt->setUInt32(0, (*itr).GetGuildId()); + trans->Append(stmt); + + CharacterDatabase.CommitTransaction(trans); + _membershipRequests[guildId].erase(itr); + + // Notify the applicant his submition has been removed + if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(applicant, 0, HIGHGUID_PLAYER))) + SendMembershipRequestListUpdate(*player); + } + + _membershipRequests.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) + if (Guild* guild = sGuildMgr->GetGuildById(guildId)) + SendApplicantListUpdate(*guild); +} + +void GuildFinderMgr::SendApplicantListUpdate(Guild& guild) +{ + WorldPacket data(SMSG_LF_GUILD_APPLICANT_LIST_UPDATED, 0); + if (Player* player = ObjectAccessor::FindPlayer(guild.GetLeaderGUID())) + player->SendDirectMessage(&data); + guild.BroadcastPacketToRank(&data, GR_OFFICER); +} + +void GuildFinderMgr::SendMembershipRequestListUpdate(Player& player) +{ + WorldPacket data(SMSG_LF_GUILD_APPLICATIONS_LIST_CHANGED, 0); + player.SendDirectMessage(&data); +} diff --git a/src/server/game/Guilds/GuildFinderMgr.h b/src/server/game/Guilds/GuildFinderMgr.h new file mode 100644 index 00000000000..049071dbca9 --- /dev/null +++ b/src/server/game/Guilds/GuildFinderMgr.h @@ -0,0 +1,268 @@ +/* + * Copyright (C) 2008-2012 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 __TRINITY_GUILDFINDER_H +#define __TRINITY_GUILDFINDER_H + +#include <ace/Singleton.h> +#include "Common.h" +#include "World.h" +#include "GuildMgr.h" + +enum GuildFinderOptionsInterest +{ + INTEREST_QUESTING = 0x01, + INTEREST_DUNGEONS = 0x02, + INTEREST_RAIDS = 0x04, + INTEREST_PVP = 0x08, + INTEREST_ROLE_PLAYING = 0x10, + ALL_INTERESTS = INTEREST_QUESTING | INTEREST_DUNGEONS | INTEREST_RAIDS | INTEREST_PVP | INTEREST_ROLE_PLAYING +}; + +enum GuildFinderOptionsAvailability +{ + AVAILABILITY_WEEKDAYS = 0x1, + AVAILABILITY_WEEKENDS = 0x2, + ALL_WEEK = AVAILABILITY_WEEKDAYS | AVAILABILITY_WEEKENDS +}; + +enum GuildFinderOptionsRoles +{ + GUILDFINDER_ROLE_TANK = 0x1, + GUILDFINDER_ROLE_HEALER = 0x2, + GUILDFINDER_ROLE_DPS = 0x4, + GUILDFINDER_ALL_ROLES = GUILDFINDER_ROLE_TANK | GUILDFINDER_ROLE_HEALER | GUILDFINDER_ROLE_DPS +}; + +enum GuildFinderOptionsLevel +{ + ANY_FINDER_LEVEL = 0x1, + MAX_FINDER_LEVEL = 0x2, + ALL_GUILDFINDER_LEVELS = ANY_FINDER_LEVEL | MAX_FINDER_LEVEL +}; + +/// Holds all required informations about a membership request +struct MembershipRequest +{ + public: + MembershipRequest(MembershipRequest const& settings) : _comment(settings.GetComment()) + { + _availability = settings.GetAvailability(); + _classRoles = settings.GetClassRoles(); + _interests = settings.GetInterests(); + _guildId = settings.GetGuildId(); + _playerGUID = settings.GetPlayerGUID(); + _time = settings.GetSubmitTime(); + } + + MembershipRequest(uint32 playerGUID, uint32 guildId, uint32 availability, uint32 classRoles, uint32 interests, std::string& comment, time_t submitTime) : + _playerGUID(playerGUID), _guildId(guildId), _availability(availability), _classRoles(classRoles), + _interests(interests), _time(submitTime), _comment(comment) {} + + MembershipRequest() : _playerGUID(0), _guildId(0), _availability(0), _classRoles(0), + _interests(0), _time(time(NULL)) {} + + uint32 GetGuildId() const { return _guildId; } + uint32 GetPlayerGUID() const { return _playerGUID; } + uint8 GetAvailability() const { return _availability; } + uint8 GetClassRoles() const { return _classRoles; } + uint8 GetInterests() const { return _interests; } + uint8 GetClass() const { return sWorld->GetCharacterNameData(GetPlayerGUID())->m_class; } + uint8 GetLevel() const { return sWorld->GetCharacterNameData(GetPlayerGUID())->m_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->GetCharacterNameData(GetPlayerGUID())->m_name; } + private: + std::string _comment; + + uint32 _guildId; + uint32 _playerGUID; + + uint8 _availability; + uint8 _classRoles; + uint8 _interests; + + time_t _time; +}; + +/// Holds all informations about a player's finder settings. _NOT_ stored in database. +struct LFGuildPlayer +{ + public: + LFGuildPlayer() + { + _guid = 0; + _roles = 0; + _availability = 0; + _interests = 0; + _level = 0; + } + + LFGuildPlayer(uint32 guid, uint8 role, uint8 availability, uint8 interests, uint8 level) + { + _guid = guid; + _roles = role; + _availability = availability; + _interests = interests; + _level = level; + } + + LFGuildPlayer(uint32 guid, uint8 role, uint8 availability, uint8 interests, uint8 level, std::string& comment) : _comment(comment) + { + _guid = guid; + _roles = role; + _availability = availability; + _interests = interests; + _level = level; + } + + LFGuildPlayer(LFGuildPlayer const& settings) : _comment(settings.GetComment()) + { + _guid = settings.GetGUID(); + _roles = settings.GetClassRoles(); + _availability = settings.GetAvailability(); + _interests = settings.GetInterests(); + _level = settings.GetLevel(); + } + + uint32 GetGUID() const { return _guid; } + uint8 GetClassRoles() const { return _roles; } + uint8 GetAvailability() const { return _availability; } + uint8 GetInterests() const { return _interests; } + uint8 GetLevel() const { return _level; } + std::string const& GetComment() const { return _comment; } + + private: + std::string _comment; + uint32 _guid; + uint8 _roles; + uint8 _availability; + uint8 _interests; + uint8 _level; +}; + +/// Holds settings for a guild in the finder system. Saved to database. +struct LFGuildSettings : public LFGuildPlayer +{ + public: + LFGuildSettings() : LFGuildPlayer(), _listed(false), _team(TEAM_ALLIANCE) {} + + LFGuildSettings(bool listed, TeamId team) : LFGuildPlayer(), _listed(listed), _team(team) {} + + LFGuildSettings(bool listed, TeamId team, uint32 guid, uint8 role, uint8 availability, uint8 interests, uint8 level) : _listed(listed), + LFGuildPlayer(guid, role, availability, interests, level), _team(team) {} + + LFGuildSettings(bool listed, TeamId team, uint32 guid, uint8 role, uint8 availability, uint8 interests, uint8 level, std::string& comment) : _listed(listed), + LFGuildPlayer(guid, role, availability, interests, level, comment), _team(team) {} + + LFGuildSettings(LFGuildSettings const& settings) : _listed(settings.IsListed()), _team(settings.GetTeam()), + LFGuildPlayer(settings) {} + + + bool IsListed() const { return _listed; } + void SetListed(bool state) { _listed = state; } + + TeamId GetTeam() const { return _team; } + private: + TeamId _team; + bool _listed; +}; + +typedef std::map<uint32 /* guildGuid */, LFGuildSettings> LFGuildStore; +typedef std::map<uint32 /* guildGuid */, std::vector<MembershipRequest> > MembershipRequestStore; + +class GuildFinderMgr +{ + friend class ACE_Singleton<GuildFinderMgr, ACE_Null_Mutex>; + + private: + GuildFinderMgr(); + ~GuildFinderMgr(); + + LFGuildStore _guildSettings; + + MembershipRequestStore _membershipRequests; + + void LoadGuildSettings(); + void LoadMembershipRequests(); + + public: + void LoadFromDB(); + + /** + * @brief Stores guild settings and begins an asynchronous database insert + * @param guildGuid The guild's database guid. + * @param LFGuildSettings The guild's settings storage. + */ + void SetGuildSettings(uint32 guildGuid, LFGuildSettings const& settings); + + /** + * @brief Returns settings for a guild. + * @param guildGuid The guild's database guid. + */ + LFGuildSettings GetGuildSettings(uint32 guildGuid) { return _guildSettings[guildGuid]; } + + /** + * @brief Files a membership request to a guild + * @param guildGuid The guild's database GUID. + * @param MembershipRequest An object storing all data related to the request. + */ + void AddMembershipRequest(uint32 guildGuid, MembershipRequest const& request); + + /** + * @brief Removes a membership request to a guild. + * @param playerId The player's database guid whose application shall be deleted. + * @param guildId The guild's database guid + */ + void RemoveMembershipRequest(uint32 playerId, uint32 guildId); + + /// wipes everything related to a guild. Used when that guild is disbanded + void DeleteGuild(uint32 guildId); + + /** + * @brief Returns a set of membership requests for a guild + * @param guildGuid The guild's database guid. + */ + std::vector<MembershipRequest> GetAllMembershipRequestsForGuild(uint32 guildGuid) { return _membershipRequests[guildGuid]; } + + /** + * @brief Returns a list of membership requests for a player. + * @param playerGuid The player's database guid. + */ + std::list<MembershipRequest> GetAllMembershipRequestsForPlayer(uint32 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); + + /// Provided a player DB guid and a guild DB guid, determines if a pending request is filed with these keys. + bool HasRequest(uint32 playerId, uint32 guildId); + + /// Counts the amount of pending membership requests, given the player's db guid. + uint8 CountRequestsFromPlayer(uint32 playerId); + + void SendApplicantListUpdate(Guild& guild); + void SendMembershipRequestListUpdate(Player& player); +}; + +#define sGuildFinderMgr ACE_Singleton<GuildFinderMgr, ACE_Null_Mutex>::instance() + +#endif // __TRINITY_GUILDFINDER_H |
