aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Guilds/Guild.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Guilds/Guild.h')
-rw-r--r--src/server/game/Guilds/Guild.h131
1 files changed, 64 insertions, 67 deletions
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index 8167d04b31e..075acebb06e 100644
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -24,7 +24,9 @@
#include "Optional.h"
#include "RaceMask.h"
#include "SharedDefines.h"
+#include <set>
#include <unordered_map>
+#include <unordered_set>
class Item;
class Player;
@@ -296,9 +298,7 @@ class GuildBankRightsAndSlots
int32 slots;
};
-typedef std::vector <GuildBankRightsAndSlots> GuildBankRightsAndSlotsVec;
-
-typedef std::set <uint8> SlotIds;
+using SlotIds = std::set<uint8>;
class TC_GAME_API Guild
{
@@ -310,11 +310,11 @@ class TC_GAME_API Guild
Member(ObjectGuid::LowType guildId, ObjectGuid guid, GuildRankId rankId);
void SetStats(Player* player);
- void SetStats(std::string const& name, uint8 level, uint8 _class, uint8 gender, uint32 zoneId, uint32 accountId, uint32 reputation);
+ void SetStats(std::string_view name, uint8 level, uint8 _class, uint8 gender, uint32 zoneId, uint32 accountId, uint32 reputation);
bool CheckStats() const;
- void SetPublicNote(std::string const& publicNote);
- void SetOfficerNote(std::string const& officerNote);
+ void SetPublicNote(std::string_view publicNote);
+ void SetOfficerNote(std::string_view officerNote);
void SetZoneId(uint32 id) { m_zoneId = id; }
void SetAchievementPoints(uint32 val) { m_achievementPoints = val; }
void SetLevel(uint8 var) { m_level = var; }
@@ -385,7 +385,7 @@ class TC_GAME_API Guild
std::set<uint32> m_trackedCriteriaIds;
- uint32 m_bankWithdraw[GUILD_BANK_MAX_TABS];
+ std::array<uint32, GUILD_BANK_MAX_TABS> m_bankWithdraw;
uint64 m_bankWithdrawMoney;
uint32 m_achievementPoints;
uint64 m_totalActivity;
@@ -510,27 +510,30 @@ class TC_GAME_API Guild
};
// Class encapsulating work with events collection
- typedef std::list<LogEntry*> GuildLog;
-
+ template <typename Entry>
class LogHolder
{
public:
- LogHolder(uint32 maxRecords) : m_maxRecords(maxRecords), m_nextGUID(uint32(GUILD_EVENT_LOG_GUID_UNDEFINED)) { }
- ~LogHolder();
+ LogHolder();
+
+ // Checks if new log entry can be added to holder
+ bool CanInsert() const { return m_log.size() < m_maxRecords; }
- uint8 GetSize() const { return uint8(m_log.size()); }
- // Checks if new log entry can be added to holder when loading from DB
- inline bool CanInsert() const { return m_log.size() < m_maxRecords; }
// Adds event from DB to collection
- void LoadEvent(LogEntry* entry);
+ template <typename... Ts>
+ void LoadEvent(Ts&&... args);
+
// Adds new event to collection and saves it to DB
- void AddEvent(CharacterDatabaseTransaction& trans, LogEntry* entry);
+ template <typename... Ts>
+ Entry& AddEvent(CharacterDatabaseTransaction trans, Ts&&... args);
+
uint32 GetNextGUID();
- GuildLog* GetGuildLog() { return &m_log; }
+ std::list<Entry>& GetGuildLog() { return m_log; }
+ std::list<Entry> const& GetGuildLog() const { return m_log; }
private:
- GuildLog m_log;
- uint32 m_maxRecords;
+ std::list<Entry> m_log;
+ uint32 const m_maxRecords;
uint32 m_nextGUID;
};
@@ -540,7 +543,7 @@ class TC_GAME_API Guild
public:
RankInfo(): m_guildId(UI64LIT(0)), m_rankId(GuildRankId(0xFF)), m_rankOrder(GuildRankOrder(0)), m_rights(GR_RIGHT_NONE), m_bankMoneyPerDay(0) { }
RankInfo(ObjectGuid::LowType guildId) : m_guildId(guildId), m_rankId(GuildRankId(0xFF)), m_rankOrder(GuildRankOrder(0)), m_rights(GR_RIGHT_NONE), m_bankMoneyPerDay(0) { }
- RankInfo(ObjectGuid::LowType guildId, GuildRankId rankId, GuildRankOrder rankOrder, std::string const& name, uint32 rights, uint32 money) :
+ RankInfo(ObjectGuid::LowType guildId, GuildRankId rankId, GuildRankOrder rankOrder, std::string_view name, uint32 rights, uint32 money) :
m_guildId(guildId), m_rankId(rankId), m_rankOrder(rankOrder), m_name(name), m_rights(rights), m_bankMoneyPerDay(money) { }
void LoadFromDB(Field* fields);
@@ -552,7 +555,7 @@ class TC_GAME_API Guild
void SetOrder(GuildRankOrder rankOrder) { m_rankOrder = rankOrder; }
std::string const& GetName() const { return m_name; }
- void SetName(std::string const& name);
+ void SetName(std::string_view name);
uint32 GetRights() const { return m_rights; }
void SetRights(uint32 rights);
@@ -584,7 +587,7 @@ class TC_GAME_API Guild
std::string m_name;
uint32 m_rights;
uint32 m_bankMoneyPerDay;
- GuildBankRightsAndSlots m_bankTabRightsAndSlots[GUILD_BANK_MAX_TABS];
+ std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS> m_bankTabRightsAndSlots = {};
};
class BankTab
@@ -596,8 +599,8 @@ class TC_GAME_API Guild
bool LoadItemFromDB(Field* fields);
void Delete(CharacterDatabaseTransaction& trans, bool removeItemsFromDB = false);
- void SetInfo(std::string const& name, std::string const& icon);
- void SetText(std::string const& text);
+ void SetInfo(std::string_view name, std::string_view icon);
+ void SetText(std::string_view text);
void SendText(Guild const* guild, WorldSession* session) const;
std::string const& GetName() const { return m_name; }
@@ -611,7 +614,7 @@ class TC_GAME_API Guild
ObjectGuid::LowType m_guildId;
uint8 m_tabId;
- Item* m_items[GUILD_BANK_MAX_SLOTS];
+ std::array<Item*, GUILD_BANK_MAX_SLOTS> m_items = {};
std::string m_name;
std::string m_icon;
std::string m_text;
@@ -706,18 +709,14 @@ class TC_GAME_API Guild
void CanStoreItemInTab(Item* pItem, uint8 skipSlotId, bool merge, uint32& count);
};
- typedef std::unordered_map<ObjectGuid, Member*> Members;
- typedef std::vector<RankInfo> Ranks;
- typedef std::vector<BankTab*> BankTabs;
-
public:
- static void SendCommandResult(WorldSession* session, GuildCommandType type, GuildCommandError errCode, std::string const& param = "");
+ static void SendCommandResult(WorldSession* session, GuildCommandType type, GuildCommandError errCode, std::string_view param = "");
static void SendSaveEmblemResult(WorldSession* session, GuildEmblemError errCode);
Guild();
~Guild();
- bool Create(Player* pLeader, std::string const& name);
+ bool Create(Player* pLeader, std::string_view name);
void Disband();
void SaveToDB();
@@ -732,28 +731,28 @@ class TC_GAME_API Guild
time_t GetCreatedDate() const { return m_createdDate; }
uint64 GetBankMoney() const { return m_bankMoney; }
- bool SetName(std::string const& name);
+ bool SetName(std::string_view name);
// Handle client commands
void HandleRoster(WorldSession* session);
void SendQueryResponse(WorldSession* session, ObjectGuid const& playerGuid);
void HandleSetAchievementTracking(WorldSession* session, uint32 const* achievementIdsBegin, uint32 const* achievementIdsEnd);
void HandleGetAchievementMembers(WorldSession* session, uint32 achievementId) const;
- void HandleSetMOTD(WorldSession* session, std::string const& motd);
- void HandleSetInfo(WorldSession* session, std::string const& info);
+ void HandleSetMOTD(WorldSession* session, std::string_view motd);
+ void HandleSetInfo(WorldSession* session, std::string_view info);
void HandleSetEmblem(WorldSession* session, EmblemInfo const& emblemInfo);
- void HandleSetNewGuildMaster(WorldSession* session, std::string const& name, bool isSelfPromote);
- void HandleSetBankTabInfo(WorldSession* session, uint8 tabId, std::string const& name, std::string const& icon);
- void HandleSetMemberNote(WorldSession* session, std::string const& note, ObjectGuid guid, bool isPublic);
- void HandleSetRankInfo(WorldSession* session, GuildRankId rankId, std::string const& name, uint32 rights, uint32 moneyPerDay, GuildBankRightsAndSlotsVec const& rightsAndSlots);
+ void HandleSetNewGuildMaster(WorldSession* session, std::string_view name, bool isSelfPromote);
+ void HandleSetBankTabInfo(WorldSession* session, uint8 tabId, std::string_view name, std::string_view icon);
+ void HandleSetMemberNote(WorldSession* session, std::string_view note, ObjectGuid guid, bool isPublic);
+ void HandleSetRankInfo(WorldSession* session, GuildRankId rankId, std::string_view name, uint32 rights, uint32 moneyPerDay, std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS> const& rightsAndSlots);
void HandleBuyBankTab(WorldSession* session, uint8 tabId);
- void HandleInviteMember(WorldSession* session, std::string const& name);
+ void HandleInviteMember(WorldSession* session, std::string_view name);
void HandleAcceptMember(WorldSession* session);
void HandleLeaveMember(WorldSession* session);
void HandleRemoveMember(WorldSession* session, ObjectGuid guid);
void HandleUpdateMemberRank(WorldSession* session, ObjectGuid guid, bool demote);
void HandleSetMemberRank(WorldSession* session, ObjectGuid guid, ObjectGuid setterGuid, GuildRankOrder rank);
- void HandleAddNewRank(WorldSession* session, std::string const& name);
+ void HandleAddNewRank(WorldSession* session, std::string_view name);
void HandleRemoveRank(WorldSession* session, GuildRankOrder rankOrder);
void HandleShiftRank(WorldSession* session, GuildRankOrder rankOrder, bool shiftUp);
void HandleMemberDepositMoney(WorldSession* session, uint64 amount, bool cashFlow = false);
@@ -761,7 +760,7 @@ class TC_GAME_API Guild
void HandleMemberLogout(WorldSession* session);
void HandleDelete(WorldSession* session);
void HandleGuildPartyRequest(WorldSession* session) const;
- void HandleNewsSetSticky(WorldSession* session, uint32 newsId, bool sticky) const;
+ void HandleNewsSetSticky(WorldSession* session, uint32 newsId, bool sticky);
void HandleGuildRequestChallengeUpdate(WorldSession* session) const;
void UpdateMemberData(Player* player, uint8 dataid, uint32 value);
@@ -788,10 +787,10 @@ class TC_GAME_API Guild
// Load from DB
bool LoadFromDB(Field* fields);
- void LoadGuildNewsLogFromDB(Field* fields) const;
+ void LoadGuildNewsLogFromDB(Field* fields);
void LoadRankFromDB(Field* fields);
bool LoadMemberFromDB(Field* fields);
- bool LoadEventLogFromDB(Field* fields) const;
+ bool LoadEventLogFromDB(Field* fields);
void LoadBankRightFromDB(Field* fields);
void LoadBankTabFromDB(Field* fields);
bool LoadBankEventLogFromDB(Field* fields);
@@ -799,8 +798,8 @@ class TC_GAME_API Guild
bool Validate();
// 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, bool isLogged) const;
+ void BroadcastToGuild(WorldSession* session, bool officerOnly, std::string_view msg, uint32 language = LANG_UNIVERSAL) const;
+ void BroadcastAddonToGuild(WorldSession* session, bool officerOnly, std::string_view msg, std::string_view prefix, bool isLogged) const;
void BroadcastPacketToRank(WorldPacket const* packet, GuildRankId rankId) const;
void BroadcastPacket(WorldPacket const* packet) const;
void BroadcastPacketIfTrackingAchievement(WorldPacket const* packet, uint32 criteriaId) const;
@@ -811,7 +810,7 @@ class TC_GAME_API Guild
void BroadcastWorker(Do& _do, Player* except = nullptr)
{
for (auto itr = m_members.begin(); itr != m_members.end(); ++itr)
- if (Player* player = itr->second->FindConnectedPlayer())
+ if (Player* player = itr->second.FindConnectedPlayer())
if (player != except)
_do(player);
}
@@ -829,7 +828,7 @@ class TC_GAME_API Guild
void SwapItemsWithInventory(Player* player, bool toChar, uint8 tabId, uint8 slotId, uint8 playerBag, uint8 playerSlotId, uint32 splitedAmount);
// Bank tabs
- void SetBankTabText(uint8 tabId, std::string const& text);
+ void SetBankTabText(uint8 tabId, std::string_view text);
GuildAchievementMgr& GetAchievementMgr() { return m_achievementMgr; }
GuildAchievementMgr const& GetAchievementMgr() const { return m_achievementMgr; }
@@ -837,7 +836,7 @@ class TC_GAME_API Guild
// Pre-6.x guild leveling
uint8 GetLevel() const { return GUILD_OLD_MAX_LEVEL; }
- void AddGuildNews(uint8 type, ObjectGuid guid, uint32 flags, uint32 value) const;
+ void AddGuildNews(uint8 type, ObjectGuid guid, uint32 flags, uint32 value);
EmblemInfo const& GetEmblemInfo() const { return m_emblemInfo; }
void ResetTimes(bool weekly);
@@ -857,14 +856,14 @@ class TC_GAME_API Guild
uint32 m_accountsNumber;
uint64 m_bankMoney;
- Ranks m_ranks;
- Members m_members;
- BankTabs m_bankTabs;
+ std::vector<RankInfo> m_ranks;
+ std::unordered_map<ObjectGuid, Member> m_members;
+ std::vector<BankTab> m_bankTabs;
// These are actually ordered lists. The first element is the oldest entry.
- LogHolder* m_eventLog;
- LogHolder* m_bankEventLog[GUILD_BANK_MAX_TABS + 1];
- LogHolder* m_newsLog;
+ LogHolder<EventLogEntry> m_eventLog;
+ std::array<LogHolder<BankEventLogEntry>, GUILD_BANK_MAX_TABS + 1> m_bankEventLog = {};
+ LogHolder<NewsLogEntry> m_newsLog;
GuildAchievementMgr m_achievementMgr;
private:
@@ -878,46 +877,44 @@ class TC_GAME_API Guild
inline GuildRankId _GetLowestRankId() const { return m_ranks.back().GetId(); }
inline uint8 _GetPurchasedTabsSize() const { return uint8(m_bankTabs.size()); }
- inline BankTab* GetBankTab(uint8 tabId) { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : nullptr; }
- inline BankTab const* GetBankTab(uint8 tabId) const { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : nullptr; }
+ inline BankTab* GetBankTab(uint8 tabId) { return tabId < m_bankTabs.size() ? &m_bankTabs[tabId] : nullptr; }
+ inline BankTab const* GetBankTab(uint8 tabId) const { return tabId < m_bankTabs.size() ? &m_bankTabs[tabId] : nullptr; }
inline Member const* GetMember(ObjectGuid const& guid) const
{
auto itr = m_members.find(guid);
- return itr != m_members.end() ? itr->second : nullptr;
+ return (itr != m_members.end()) ? &itr->second : nullptr;
}
inline Member* GetMember(ObjectGuid const& guid)
{
auto itr = m_members.find(guid);
- return itr != m_members.end() ? itr->second : nullptr;
+ return (itr != m_members.end()) ? &itr->second : nullptr;
}
- inline Member* GetMember(std::string const& name)
+ inline Member* GetMember(std::string_view name)
{
for (auto itr = m_members.begin(); itr != m_members.end(); ++itr)
- if (itr->second->GetName() == name)
- return itr->second;
+ if (itr->second.GetName() == name)
+ return &itr->second;
return nullptr;
}
static void _DeleteMemberFromDB(CharacterDatabaseTransaction& trans, ObjectGuid::LowType lowguid);
- // Creates log holders (either when loading or when creating guild)
- void _CreateLogHolders();
// Tries to create new bank tab
void _CreateNewBankTab();
// Creates default guild ranks with names in given locale
void _CreateDefaultGuildRanks(CharacterDatabaseTransaction& trans, LocaleConstant loc);
// Creates new rank
- bool _CreateRank(CharacterDatabaseTransaction& trans, std::string const& name, uint32 rights);
+ bool _CreateRank(CharacterDatabaseTransaction& trans, std::string_view name, uint32 rights);
// Update account number when member added/removed from guild
void _UpdateAccountsNumber();
bool _IsLeader(Player* player) const;
void _DeleteBankItems(CharacterDatabaseTransaction& trans, bool removeItemsFromDB = false);
bool _ModifyBankMoney(CharacterDatabaseTransaction& trans, uint64 amount, bool add);
- void _SetLeader(CharacterDatabaseTransaction& trans, Member* leader);
+ void _SetLeader(CharacterDatabaseTransaction trans, Member& leader);
void _SetRankBankMoneyPerDay(GuildRankId rankId, uint32 moneyPerDay);
void _SetRankBankTabRightsAndSlots(GuildRankId rankId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB = true);
@@ -927,8 +924,8 @@ class TC_GAME_API Guild
int32 _GetRankBankTabSlotsPerDay(GuildRankId rankId, uint8 tabId) const;
std::string _GetRankName(GuildRankId rankId) const;
- int32 _GetMemberRemainingSlots(Member const* member, uint8 tabId) const;
- int64 _GetMemberRemainingMoney(Member const* member) const;
+ int32 _GetMemberRemainingSlots(Member const& member, uint8 tabId) const;
+ int64 _GetMemberRemainingMoney(Member const& member) const;
void _UpdateMemberWithdrawSlots(CharacterDatabaseTransaction& trans, ObjectGuid guid, uint8 tabId);
bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, int32 rights) const;