diff options
Diffstat (limited to 'src/server/game/Guilds/Guild.h')
-rw-r--r-- | src/server/game/Guilds/Guild.h | 131 |
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; |