diff options
author | ariel- <ariel-@users.noreply.github.com> | 2016-11-19 21:13:05 -0300 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2018-01-21 21:15:26 +0100 |
commit | af4538c5fc218d2349a8e10f97681cb77199b2c6 (patch) | |
tree | 4843fdadf3d60633fa4da9d0a87880682b28002a | |
parent | fe04f2388f785cd7faf05c239543af3a41c28b96 (diff) |
Core/Guild: fix indentation and codestyle
(cherry picked from commit d2bf7237a38a29ff7a75aa1d137ec0b08610fa3c)
-rw-r--r-- | src/server/game/Guilds/Guild.cpp | 36 | ||||
-rw-r--r-- | src/server/game/Guilds/Guild.h | 1219 |
2 files changed, 626 insertions, 629 deletions
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 9858621fe1a..9a2b00d512c 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -40,21 +40,17 @@ #include "World.h" #include "WorldSession.h" -#define MAX_GUILD_BANK_TAB_TEXT_LEN 500 -#define EMBLEM_PRICE 10 * GOLD +size_t const MAX_GUILD_BANK_TAB_TEXT_LEN = 500; -inline uint32 _GetGuildBankTabPrice(uint8 tabId) +uint32 const EMBLEM_PRICE = 10 * GOLD; + +inline uint64 GetGuildBankTabPrice(uint8 tabId) { - switch (tabId) - { - case 0: return 100; - case 1: return 250; - case 2: return 500; - case 3: return 1000; - case 4: return 2500; - case 5: return 5000; - default: return 0; - } + // these prices are in gold units, not copper + static uint64 const tabPrices[GUILD_BANK_MAX_TABS] = { 100, 250, 500, 1000, 2500, 5000, 0, 0 }; + ASSERT(tabId < GUILD_BANK_MAX_TABS); + + return tabPrices[tabId]; } void Guild::SendCommandResult(WorldSession* session, GuildCommandType type, GuildCommandError errCode, std::string const& param) @@ -82,7 +78,7 @@ void Guild::SendSaveEmblemResult(WorldSession* session, GuildEmblemError errCode Guild::LogHolder::~LogHolder() { // Cleanup - for (GuildLog::iterator itr = m_log.begin(); itr != m_log.end(); ++itr) + for (auto itr = m_log.begin(); itr != m_log.end(); ++itr) delete (*itr); } @@ -1603,18 +1599,18 @@ void Guild::HandleBuyBankTab(WorldSession* session, uint8 tabId) if (tabId != _GetPurchasedTabsSize()) return; + if (tabId >= GUILD_BANK_MAX_TABS) + return; + // Do not get money for bank tabs that the GM bought, we had to buy them already. // This is just a speedup check, GetGuildBankTabPrice will return 0. if (tabId < GUILD_BANK_MAX_TABS - 2) // 7th tab is actually the 6th { - uint32 tabCost = _GetGuildBankTabPrice(tabId) * GOLD; - if (!tabCost) - return; - - if (!player->HasEnoughMoney(uint64(tabCost))) // Should not happen, this is checked by client + int64 tabCost = GetGuildBankTabPrice(tabId) * GOLD; + if (!player->HasEnoughMoney(tabCost)) // Should not happen, this is checked by client return; - player->ModifyMoney(-int64(tabCost)); + player->ModifyMoney(-tabCost); } _CreateNewBankTab(); diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index 5e240d06618..9365f586a8d 100644 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -268,54 +268,54 @@ const uint32 GuildChallengesMaxCount[GUILD_CHALLENGES_TYPES] = { 0, 7, // Emblem info class TC_GAME_API EmblemInfo { -public: - EmblemInfo() : m_style(0), m_color(0), m_borderStyle(0), m_borderColor(0), m_backgroundColor(0) { } - - bool LoadFromDB(Field* fields); - void SaveToDB(ObjectGuid::LowType guildId) const; - void ReadPacket(WorldPackets::Guild::SaveGuildEmblem& packet); - bool ValidateEmblemColors() const; - - uint32 GetStyle() const { return m_style; } - uint32 GetColor() const { return m_color; } - uint32 GetBorderStyle() const { return m_borderStyle; } - uint32 GetBorderColor() const { return m_borderColor; } - uint32 GetBackgroundColor() const { return m_backgroundColor; } - -private: - uint32 m_style; - uint32 m_color; - uint32 m_borderStyle; - uint32 m_borderColor; - uint32 m_backgroundColor; + public: + EmblemInfo() : m_style(0), m_color(0), m_borderStyle(0), m_borderColor(0), m_backgroundColor(0) { } + + bool LoadFromDB(Field* fields); + void SaveToDB(ObjectGuid::LowType guildId) const; + void ReadPacket(WorldPackets::Guild::SaveGuildEmblem& packet); + bool ValidateEmblemColors() const; + + uint32 GetStyle() const { return m_style; } + uint32 GetColor() const { return m_color; } + uint32 GetBorderStyle() const { return m_borderStyle; } + uint32 GetBorderColor() const { return m_borderColor; } + uint32 GetBackgroundColor() const { return m_backgroundColor; } + + private: + uint32 m_style; + uint32 m_color; + uint32 m_borderStyle; + uint32 m_borderColor; + uint32 m_backgroundColor; }; // Structure for storing guild bank rights and remaining slots together. class GuildBankRightsAndSlots { -public: - GuildBankRightsAndSlots() : tabId(TAB_UNDEFINED), rights(0), slots(0) { } - GuildBankRightsAndSlots(uint8 _tabId) : tabId(_tabId), rights(0), slots(0) { } - GuildBankRightsAndSlots(uint8 _tabId, int8 _rights, int32 _slots) : tabId(_tabId), rights(_rights), slots(_slots) { } + public: + GuildBankRightsAndSlots() : tabId(TAB_UNDEFINED), rights(0), slots(0) { } + GuildBankRightsAndSlots(uint8 _tabId) : tabId(_tabId), rights(0), slots(0) { } + GuildBankRightsAndSlots(uint8 _tabId, int8 _rights, int32 _slots) : tabId(_tabId), rights(_rights), slots(_slots) { } - void SetGuildMasterValues() - { - rights = GUILD_BANK_RIGHT_FULL; - slots = int32(GUILD_WITHDRAW_SLOT_UNLIMITED); - } + void SetGuildMasterValues() + { + rights = GUILD_BANK_RIGHT_FULL; + slots = int32(GUILD_WITHDRAW_SLOT_UNLIMITED); + } - void SetTabId(uint8 _tabId) { tabId = _tabId; } - void SetSlots(int32 _slots) { slots = _slots; } - void SetRights(int8 _rights) { rights = _rights; } + void SetTabId(uint8 _tabId) { tabId = _tabId; } + void SetSlots(int32 _slots) { slots = _slots; } + void SetRights(int8 _rights) { rights = _rights; } - int8 GetTabId() const { return tabId; } - int32 GetSlots() const { return slots; } - int8 GetRights() const { return rights; } + int8 GetTabId() const { return tabId; } + int32 GetSlots() const { return slots; } + int8 GetRights() const { return rights; } -private: - uint8 tabId; - int8 rights; - int32 slots; + private: + uint8 tabId; + int8 rights; + int32 slots; }; typedef std::vector <GuildBankRightsAndSlots> GuildBankRightsAndSlotsVec; @@ -324,635 +324,636 @@ typedef std::set <uint8> SlotIds; class TC_GAME_API Guild { -private: - // Class representing guild member - class Member - { - public: - Member(ObjectGuid::LowType guildId, ObjectGuid guid, uint8 rankId); - - void SetStats(Player* player); - void SetStats(std::string const& 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 SetZoneId(uint32 id) { m_zoneId = id; } - void SetAchievementPoints(uint32 val) { m_achievementPoints = val; } - void SetLevel(uint8 var) { m_level = var; } - - void AddFlag(uint8 var) { m_flags |= var; } - void RemFlag(uint8 var) { m_flags &= ~var; } - void ResetFlags() { m_flags = GUILDMEMBER_STATUS_NONE; } - - bool LoadFromDB(Field* fields); - void SaveToDB(SQLTransaction& trans) const; - - ObjectGuid const& GetGUID() const { return m_guid; } - std::string const& GetName() const { return m_name; } - uint32 GetAccountId() const { return m_accountId; } - uint8 GetRankId() const { return m_rankId; } - uint64 GetLogoutTime() const { return m_logoutTime; } - std::string GetPublicNote() const { return m_publicNote; } - std::string GetOfficerNote() const { return m_officerNote; } - uint8 GetClass() const { return m_class; } - uint8 GetGender() const { return _gender; } - uint8 GetLevel() const { return m_level; } - uint8 GetFlags() const { return m_flags; } - uint32 GetZoneId() const { return m_zoneId; } - uint32 GetAchievementPoints() const { return m_achievementPoints; } - uint64 GetTotalActivity() const { return m_totalActivity; } - uint64 GetWeekActivity() const { return m_weekActivity; } - uint32 GetTotalReputation() const { return m_totalReputation; } - uint32 GetWeekReputation() const { return m_weekReputation; } - - std::set<uint32> GetTrackedCriteriaIds() const { return m_trackedCriteriaIds; } - void SetTrackedCriteriaIds(std::set<uint32> criteriaIds) { m_trackedCriteriaIds.swap(criteriaIds); } - bool IsTrackingCriteriaId(uint32 criteriaId) const { return m_trackedCriteriaIds.find(criteriaId) != m_trackedCriteriaIds.end(); } - - bool IsOnline() const { return (m_flags & GUILDMEMBER_STATUS_ONLINE); } - - void ChangeRank(uint8 newRank); - - inline void UpdateLogoutTime() { m_logoutTime = ::time(nullptr); } - inline bool IsRank(uint8 rankId) const { return m_rankId == rankId; } - inline bool IsRankNotLower(uint8 rankId) const { return m_rankId <= rankId; } - inline bool IsSamePlayer(ObjectGuid guid) const { return m_guid == guid; } - - void UpdateBankTabWithdrawValue(SQLTransaction& trans, uint8 tabId, uint32 amount); - void UpdateBankMoneyWithdrawValue(SQLTransaction& trans, uint64 amount); - uint32 GetBankTabWithdrawValue(uint8 tabId) const { return m_bankWithdraw[tabId]; }; - uint64 GetBankMoneyWithdrawValue() const { return m_bankWithdrawMoney; }; - void ResetValues(bool weekly = false); - - Player* FindPlayer() const; - Player* FindConnectedPlayer() const; - private: - ObjectGuid::LowType m_guildId; - // Fields from characters table - ObjectGuid m_guid; - std::string m_name; - uint32 m_zoneId; - uint8 m_level; - uint8 m_class; - uint8 _gender; - uint8 m_flags; - uint64 m_logoutTime; - uint32 m_accountId; - // Fields from guild_member table - uint8 m_rankId; - std::string m_publicNote; - std::string m_officerNote; - - std::set<uint32> m_trackedCriteriaIds; - - uint32 m_bankWithdraw[GUILD_BANK_MAX_TABS]; - uint64 m_bankWithdrawMoney; - uint32 m_achievementPoints; - uint64 m_totalActivity; - uint64 m_weekActivity; - uint32 m_totalReputation; - uint32 m_weekReputation; - }; - - // Base class for event entries - class LogEntry - { - public: - LogEntry(ObjectGuid::LowType guildId, uint32 guid) : m_guildId(guildId), m_guid(guid), m_timestamp(::time(nullptr)) { } - LogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp) : m_guildId(guildId), m_guid(guid), m_timestamp(timestamp) { } - virtual ~LogEntry() { } - - uint32 GetGUID() const { return m_guid; } - uint64 GetTimestamp() const { return m_timestamp; } - - virtual void SaveToDB(SQLTransaction& trans) const = 0; - - protected: - ObjectGuid::LowType m_guildId; - uint32 m_guid; - uint64 m_timestamp; - }; - - // Event log entry - class EventLogEntry : public LogEntry - { - public: - EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) : - LogEntry(guildId, guid), m_eventType(eventType), m_playerGuid1(playerGuid1), m_playerGuid2(playerGuid2), m_newRank(newRank) { } - - EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) : - LogEntry(guildId, guid, timestamp), m_eventType(eventType), m_playerGuid1(playerGuid1), m_playerGuid2(playerGuid2), m_newRank(newRank) { } - - ~EventLogEntry() { } - - void SaveToDB(SQLTransaction& trans) const override; - void WritePacket(WorldPackets::Guild::GuildEventLogQueryResults& packet) const; - - private: - GuildEventLogTypes m_eventType; - ObjectGuid::LowType m_playerGuid1; - ObjectGuid::LowType m_playerGuid2; - uint8 m_newRank; - }; - - // Bank event log entry - class BankEventLogEntry : public LogEntry - { - public: - static bool IsMoneyEvent(GuildBankEventLogTypes eventType) + // Class representing guild member + class Member { - return - eventType == GUILD_BANK_LOG_DEPOSIT_MONEY || - eventType == GUILD_BANK_LOG_WITHDRAW_MONEY || - eventType == GUILD_BANK_LOG_REPAIR_MONEY || - eventType == GUILD_BANK_LOG_CASH_FLOW_DEPOSIT; - } - - bool IsMoneyEvent() const + public: + Member(ObjectGuid::LowType guildId, ObjectGuid guid, uint8 rankId); + + void SetStats(Player* player); + void SetStats(std::string const& 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 SetZoneId(uint32 id) { m_zoneId = id; } + void SetAchievementPoints(uint32 val) { m_achievementPoints = val; } + void SetLevel(uint8 var) { m_level = var; } + + void AddFlag(uint8 var) { m_flags |= var; } + void RemFlag(uint8 var) { m_flags &= ~var; } + void ResetFlags() { m_flags = GUILDMEMBER_STATUS_NONE; } + + bool LoadFromDB(Field* fields); + void SaveToDB(SQLTransaction& trans) const; + + ObjectGuid const& GetGUID() const { return m_guid; } + std::string const& GetName() const { return m_name; } + uint32 GetAccountId() const { return m_accountId; } + uint8 GetRankId() const { return m_rankId; } + uint64 GetLogoutTime() const { return m_logoutTime; } + std::string GetPublicNote() const { return m_publicNote; } + std::string GetOfficerNote() const { return m_officerNote; } + uint8 GetClass() const { return m_class; } + uint8 GetGender() const { return _gender; } + uint8 GetLevel() const { return m_level; } + uint8 GetFlags() const { return m_flags; } + uint32 GetZoneId() const { return m_zoneId; } + uint32 GetAchievementPoints() const { return m_achievementPoints; } + uint64 GetTotalActivity() const { return m_totalActivity; } + uint64 GetWeekActivity() const { return m_weekActivity; } + uint32 GetTotalReputation() const { return m_totalReputation; } + uint32 GetWeekReputation() const { return m_weekReputation; } + + std::set<uint32> GetTrackedCriteriaIds() const { return m_trackedCriteriaIds; } + void SetTrackedCriteriaIds(std::set<uint32> criteriaIds) { m_trackedCriteriaIds.swap(criteriaIds); } + bool IsTrackingCriteriaId(uint32 criteriaId) const { return m_trackedCriteriaIds.find(criteriaId) != m_trackedCriteriaIds.end(); } + + bool IsOnline() const { return (m_flags & GUILDMEMBER_STATUS_ONLINE); } + + void ChangeRank(uint8 newRank); + + inline void UpdateLogoutTime() { m_logoutTime = ::time(nullptr); } + inline bool IsRank(uint8 rankId) const { return m_rankId == rankId; } + inline bool IsRankNotLower(uint8 rankId) const { return m_rankId <= rankId; } + inline bool IsSamePlayer(ObjectGuid guid) const { return m_guid == guid; } + + void UpdateBankTabWithdrawValue(SQLTransaction& trans, uint8 tabId, uint32 amount); + void UpdateBankMoneyWithdrawValue(SQLTransaction& trans, uint64 amount); + uint32 GetBankTabWithdrawValue(uint8 tabId) const { return m_bankWithdraw[tabId]; }; + uint64 GetBankMoneyWithdrawValue() const { return m_bankWithdrawMoney; }; + void ResetValues(bool weekly = false); + + Player* FindPlayer() const; + Player* FindConnectedPlayer() const; + + private: + ObjectGuid::LowType m_guildId; + // Fields from characters table + ObjectGuid m_guid; + std::string m_name; + uint32 m_zoneId; + uint8 m_level; + uint8 m_class; + uint8 _gender; + uint8 m_flags; + uint64 m_logoutTime; + uint32 m_accountId; + // Fields from guild_member table + uint8 m_rankId; + std::string m_publicNote; + std::string m_officerNote; + + std::set<uint32> m_trackedCriteriaIds; + + uint32 m_bankWithdraw[GUILD_BANK_MAX_TABS]; + uint64 m_bankWithdrawMoney; + uint32 m_achievementPoints; + uint64 m_totalActivity; + uint64 m_weekActivity; + uint32 m_totalReputation; + uint32 m_weekReputation; + }; + + // Base class for event entries + class LogEntry { - return IsMoneyEvent(m_eventType); - } + public: + LogEntry(ObjectGuid::LowType guildId, uint32 guid) : m_guildId(guildId), m_guid(guid), m_timestamp(::time(nullptr)) { } + LogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp) : m_guildId(guildId), m_guid(guid), m_timestamp(timestamp) { } + virtual ~LogEntry() { } - BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount, uint8 destTabId) : - LogEntry(guildId, guid), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid), - m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { } + uint32 GetGUID() const { return m_guid; } + uint64 GetTimestamp() const { return m_timestamp; } - BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, uint8 tabId, GuildBankEventLogTypes eventType, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount, uint8 destTabId) : - LogEntry(guildId, guid, timestamp), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid), - m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { } + virtual void SaveToDB(SQLTransaction& trans) const = 0; - ~BankEventLogEntry() { } + protected: + ObjectGuid::LowType m_guildId; + uint32 m_guid; + uint64 m_timestamp; + }; - void SaveToDB(SQLTransaction& trans) const override; - void WritePacket(WorldPackets::Guild::GuildBankLogQueryResults& packet) const; + // Event log entry + class EventLogEntry : public LogEntry + { + public: + EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) : + LogEntry(guildId, guid), m_eventType(eventType), m_playerGuid1(playerGuid1), m_playerGuid2(playerGuid2), m_newRank(newRank) { } - private: - GuildBankEventLogTypes m_eventType; - uint8 m_bankTabId; - ObjectGuid::LowType m_playerGuid; - uint64 m_itemOrMoney; - uint16 m_itemStackCount; - uint8 m_destTabId; - }; - - // News log entry - class NewsLogEntry : public LogEntry - { - public: - NewsLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildNews type, ObjectGuid playerGuid, uint32 flags, uint32 value) : - LogEntry(guildId, guid), m_type(type), m_playerGuid(playerGuid), m_flags(flags), m_value(value) { } + EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) : + LogEntry(guildId, guid, timestamp), m_eventType(eventType), m_playerGuid1(playerGuid1), m_playerGuid2(playerGuid2), m_newRank(newRank) { } - NewsLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildNews type, ObjectGuid playerGuid, uint32 flags, uint32 value) : - LogEntry(guildId, guid, timestamp), m_type(type), m_playerGuid(playerGuid), m_flags(flags), m_value(value) { } + ~EventLogEntry() { } - ~NewsLogEntry() { } + void SaveToDB(SQLTransaction& trans) const override; + void WritePacket(WorldPackets::Guild::GuildEventLogQueryResults& packet) const; - GuildNews GetType() const { return m_type; } - ObjectGuid GetPlayerGuid() const { return m_playerGuid; } - uint32 GetValue() const { return m_value; } - uint32 GetFlags() const { return m_flags; } - void SetSticky(bool sticky) - { - if (sticky) - m_flags |= 1; - else - m_flags &= ~1; - } - - void SaveToDB(SQLTransaction& trans) const override; - void WritePacket(WorldPackets::Guild::GuildNews& newsPacket) const; + private: + GuildEventLogTypes m_eventType; + ObjectGuid::LowType m_playerGuid1; + ObjectGuid::LowType m_playerGuid2; + uint8 m_newRank; + }; - private: - GuildNews m_type; - ObjectGuid m_playerGuid; - uint32 m_flags; - uint32 m_value; - }; + // Bank event log entry + class BankEventLogEntry : public LogEntry + { + public: + static bool IsMoneyEvent(GuildBankEventLogTypes eventType) + { + return + eventType == GUILD_BANK_LOG_DEPOSIT_MONEY || + eventType == GUILD_BANK_LOG_WITHDRAW_MONEY || + eventType == GUILD_BANK_LOG_REPAIR_MONEY || + eventType == GUILD_BANK_LOG_CASH_FLOW_DEPOSIT; + } + + bool IsMoneyEvent() const + { + return IsMoneyEvent(m_eventType); + } + + BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount, uint8 destTabId) : + LogEntry(guildId, guid), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid), + m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { } + + BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, uint8 tabId, GuildBankEventLogTypes eventType, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount, uint8 destTabId) : + LogEntry(guildId, guid, timestamp), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid), + m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { } + + ~BankEventLogEntry() { } + + void SaveToDB(SQLTransaction& trans) const override; + void WritePacket(WorldPackets::Guild::GuildBankLogQueryResults& packet) const; + + private: + GuildBankEventLogTypes m_eventType; + uint8 m_bankTabId; + ObjectGuid::LowType m_playerGuid; + uint64 m_itemOrMoney; + uint16 m_itemStackCount; + uint8 m_destTabId; + }; + + // News log entry + class NewsLogEntry : public LogEntry + { + public: + NewsLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildNews type, ObjectGuid playerGuid, uint32 flags, uint32 value) : + LogEntry(guildId, guid), m_type(type), m_playerGuid(playerGuid), m_flags(flags), m_value(value) { } + + NewsLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildNews type, ObjectGuid playerGuid, uint32 flags, uint32 value) : + LogEntry(guildId, guid, timestamp), m_type(type), m_playerGuid(playerGuid), m_flags(flags), m_value(value) { } + + ~NewsLogEntry() { } + + GuildNews GetType() const { return m_type; } + ObjectGuid GetPlayerGuid() const { return m_playerGuid; } + uint32 GetValue() const { return m_value; } + uint32 GetFlags() const { return m_flags; } + void SetSticky(bool sticky) + { + if (sticky) + m_flags |= 1; + else + m_flags &= ~1; + } + + void SaveToDB(SQLTransaction& trans) const override; + void WritePacket(WorldPackets::Guild::GuildNews& newsPacket) const; + + private: + GuildNews m_type; + ObjectGuid m_playerGuid; + uint32 m_flags; + uint32 m_value; + }; + + // Class encapsulating work with events collection + typedef std::list<LogEntry*> GuildLog; + + class LogHolder + { + public: + LogHolder(uint32 maxRecords) : m_maxRecords(maxRecords), m_nextGUID(uint32(GUILD_EVENT_LOG_GUID_UNDEFINED)) { } + ~LogHolder(); + + 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); + // Adds new event to collection and saves it to DB + void AddEvent(SQLTransaction& trans, LogEntry* entry); + uint32 GetNextGUID(); + GuildLog* GetGuildLog() { return &m_log; } + + private: + GuildLog m_log; + uint32 m_maxRecords; + uint32 m_nextGUID; + }; + + // Class encapsulating guild rank data + class RankInfo + { + public: + RankInfo(): m_guildId(UI64LIT(0)), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_NONE), m_bankMoneyPerDay(0) { } + RankInfo(ObjectGuid::LowType guildId) : m_guildId(guildId), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_NONE), m_bankMoneyPerDay(0) { } + RankInfo(ObjectGuid::LowType guildId, uint8 rankId, std::string const& name, uint32 rights, uint32 money) : + m_guildId(guildId), m_rankId(rankId), m_name(name), m_rights(rights), m_bankMoneyPerDay(money) { } - // Class encapsulating work with events collection - typedef std::list<LogEntry*> GuildLog; + void LoadFromDB(Field* fields); + void SaveToDB(SQLTransaction& trans) const; - class LogHolder - { - public: - LogHolder(uint32 maxRecords) : m_maxRecords(maxRecords), m_nextGUID(uint32(GUILD_EVENT_LOG_GUID_UNDEFINED)) { } - ~LogHolder(); - - 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); - // Adds new event to collection and saves it to DB - void AddEvent(SQLTransaction& trans, LogEntry* entry); - uint32 GetNextGUID(); - GuildLog* GetGuildLog() { return &m_log; } + uint8 GetId() const { return m_rankId; } - private: - GuildLog m_log; - uint32 m_maxRecords; - uint32 m_nextGUID; - }; + std::string const& GetName() const { return m_name; } + void SetName(std::string const& name); - // Class encapsulating guild rank data - class RankInfo - { - public: - RankInfo(): m_guildId(UI64LIT(0)), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_NONE), m_bankMoneyPerDay(0) { } - RankInfo(ObjectGuid::LowType guildId) : m_guildId(guildId), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_NONE), m_bankMoneyPerDay(0) { } - RankInfo(ObjectGuid::LowType guildId, uint8 rankId, std::string const& name, uint32 rights, uint32 money) : - m_guildId(guildId), m_rankId(rankId), m_name(name), m_rights(rights), m_bankMoneyPerDay(money) { } + uint32 GetRights() const { return m_rights; } + void SetRights(uint32 rights); - void LoadFromDB(Field* fields); - void SaveToDB(SQLTransaction& trans) const; + uint32 GetBankMoneyPerDay() const + { + return m_rankId != GR_GUILDMASTER ? m_bankMoneyPerDay : GUILD_WITHDRAW_MONEY_UNLIMITED; + } - uint8 GetId() const { return m_rankId; } + void SetBankMoneyPerDay(uint32 money); - std::string const& GetName() const { return m_name; } - void SetName(std::string const& name); + inline int8 GetBankTabRights(uint8 tabId) const + { + return tabId < GUILD_BANK_MAX_TABS ? m_bankTabRightsAndSlots[tabId].GetRights() : 0; + } - uint32 GetRights() const { return m_rights; } - void SetRights(uint32 rights); + inline int32 GetBankTabSlotsPerDay(uint8 tabId) const + { + return tabId < GUILD_BANK_MAX_TABS ? m_bankTabRightsAndSlots[tabId].GetSlots() : 0; + } - uint32 GetBankMoneyPerDay() const - { - return m_rankId != GR_GUILDMASTER ? m_bankMoneyPerDay : GUILD_WITHDRAW_MONEY_UNLIMITED; - } + void SetBankTabSlotsAndRights(GuildBankRightsAndSlots rightsAndSlots, bool saveToDB); + void CreateMissingTabsIfNeeded(uint8 ranks, SQLTransaction& trans, bool logOnCreate = false); - void SetBankMoneyPerDay(uint32 money); + private: + ObjectGuid::LowType m_guildId; + uint8 m_rankId; + std::string m_name; + uint32 m_rights; + uint32 m_bankMoneyPerDay; + GuildBankRightsAndSlots m_bankTabRightsAndSlots[GUILD_BANK_MAX_TABS]; + }; - inline int8 GetBankTabRights(uint8 tabId) const + class BankTab { - return tabId < GUILD_BANK_MAX_TABS ? m_bankTabRightsAndSlots[tabId].GetRights() : 0; - } + public: + BankTab(ObjectGuid::LowType guildId, uint8 tabId); - inline int32 GetBankTabSlotsPerDay(uint8 tabId) const - { - return tabId < GUILD_BANK_MAX_TABS ? m_bankTabRightsAndSlots[tabId].GetSlots() : 0; - } + void LoadFromDB(Field* fields); + bool LoadItemFromDB(Field* fields); + void Delete(SQLTransaction& trans, bool removeItemsFromDB = false); - void SetBankTabSlotsAndRights(GuildBankRightsAndSlots rightsAndSlots, bool saveToDB); - void CreateMissingTabsIfNeeded(uint8 ranks, SQLTransaction& trans, bool logOnCreate = false); + void SetInfo(std::string const& name, std::string const& icon); + void SetText(std::string const& text); + void SendText(Guild const* guild, WorldSession* session) const; - private: - ObjectGuid::LowType m_guildId; - uint8 m_rankId; - std::string m_name; - uint32 m_rights; - uint32 m_bankMoneyPerDay; - GuildBankRightsAndSlots m_bankTabRightsAndSlots[GUILD_BANK_MAX_TABS]; - }; + std::string const& GetName() const { return m_name; } + std::string const& GetIcon() const { return m_icon; } + std::string const& GetText() const { return m_text; } - class BankTab - { - public: - BankTab(ObjectGuid::LowType guildId, uint8 tabId); + inline Item* GetItem(uint8 slotId) const { return slotId < GUILD_BANK_MAX_SLOTS ? m_items[slotId] : nullptr; } + bool SetItem(SQLTransaction& trans, uint8 slotId, Item* item); - void LoadFromDB(Field* fields); - bool LoadItemFromDB(Field* fields); - void Delete(SQLTransaction& trans, bool removeItemsFromDB = false); + private: + ObjectGuid::LowType m_guildId; + uint8 m_tabId; - void SetInfo(std::string const& name, std::string const& icon); - void SetText(std::string const& text); - void SendText(Guild const* guild, WorldSession* session) const; + Item* m_items[GUILD_BANK_MAX_SLOTS]; + std::string m_name; + std::string m_icon; + std::string m_text; + }; - std::string const& GetName() const { return m_name; } - std::string const& GetIcon() const { return m_icon; } - std::string const& GetText() const { return m_text; } + // Movement data + class MoveItemData + { + public: + MoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId); + virtual ~MoveItemData(); + + virtual bool IsBank() const = 0; + // Initializes item pointer. Returns true, if item exists, false otherwise. + virtual bool InitItem() = 0; + // Checks splited amount against item. Splited amount cannot be more that number of items in stack. + virtual bool CheckItem(uint32& splitedAmount); + // Defines if player has rights to save item in container + virtual bool HasStoreRights(MoveItemData* /*pOther*/) const { return true; } + // Defines if player has rights to withdraw item from container + virtual bool HasWithdrawRights(MoveItemData* /*pOther*/) const { return true; } + // Checks if container can store specified item + bool CanStore(Item* pItem, bool swap, bool sendError); + // Clones stored item + bool CloneItem(uint32 count); + // Remove item from container (if splited update items fields) + virtual void RemoveItem(SQLTransaction& trans, MoveItemData* pOther, uint32 splitedAmount = 0) = 0; + // Saves item to container + virtual Item* StoreItem(SQLTransaction& trans, Item* pItem) = 0; + // Log bank event + virtual void LogBankEvent(SQLTransaction& trans, MoveItemData* pFrom, uint32 count) const = 0; + // Log GM action + virtual void LogAction(MoveItemData* pFrom) const; + // Copy slots id from position vector + void CopySlots(SlotIds& ids) const; + + Item* GetItem(bool isCloned = false) const { return isCloned ? m_pClonedItem : m_pItem; } + uint8 GetContainer() const { return m_container; } + uint8 GetSlotId() const { return m_slotId; } + + protected: + virtual InventoryResult CanStore(Item* pItem, bool swap) = 0; + + Guild* m_pGuild; + Player* m_pPlayer; + uint8 m_container; + uint8 m_slotId; + Item* m_pItem; + Item* m_pClonedItem; + std::vector<ItemPosCount> m_vec; + }; + + class PlayerMoveItemData : public MoveItemData + { + public: + PlayerMoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId) : + MoveItemData(guild, player, container, slotId) { } - inline Item* GetItem(uint8 slotId) const { return slotId < GUILD_BANK_MAX_SLOTS ? m_items[slotId] : NULL; } - bool SetItem(SQLTransaction& trans, uint8 slotId, Item* item); + bool IsBank() const override { return false; } + bool InitItem() override; + void RemoveItem(SQLTransaction& trans, MoveItemData* pOther, uint32 splitedAmount = 0) override; + Item* StoreItem(SQLTransaction& trans, Item* pItem) override; + void LogBankEvent(SQLTransaction& trans, MoveItemData* pFrom, uint32 count) const override; - private: - ObjectGuid::LowType m_guildId; - uint8 m_tabId; + protected: + InventoryResult CanStore(Item* pItem, bool swap) override; + }; - Item* m_items[GUILD_BANK_MAX_SLOTS]; - std::string m_name; - std::string m_icon; - std::string m_text; - }; + class BankMoveItemData : public MoveItemData + { + public: + BankMoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId) : + MoveItemData(guild, player, container, slotId) { } + + bool IsBank() const override { return true; } + bool InitItem() override; + bool HasStoreRights(MoveItemData* pOther) const override; + bool HasWithdrawRights(MoveItemData* pOther) const override; + void RemoveItem(SQLTransaction& trans, MoveItemData* pOther, uint32 splitedAmount) override; + Item* StoreItem(SQLTransaction& trans, Item* pItem) override; + void LogBankEvent(SQLTransaction& trans, MoveItemData* pFrom, uint32 count) const override; + void LogAction(MoveItemData* pFrom) const override; + + protected: + InventoryResult CanStore(Item* pItem, bool swap) override; + + private: + Item* _StoreItem(SQLTransaction& trans, BankTab* pTab, Item* pItem, ItemPosCount& pos, bool clone) const; + bool _ReserveSpace(uint8 slotId, Item* pItem, Item* pItemDest, uint32& count); + 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; - // Movement data - class MoveItemData - { public: - MoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId); - virtual ~MoveItemData(); - - virtual bool IsBank() const = 0; - // Initializes item pointer. Returns true, if item exists, false otherwise. - virtual bool InitItem() = 0; - // Checks splited amount against item. Splited amount cannot be more that number of items in stack. - virtual bool CheckItem(uint32& splitedAmount); - // Defines if player has rights to save item in container - virtual bool HasStoreRights(MoveItemData* /*pOther*/) const { return true; } - // Defines if player has rights to withdraw item from container - virtual bool HasWithdrawRights(MoveItemData* /*pOther*/) const { return true; } - // Checks if container can store specified item - bool CanStore(Item* pItem, bool swap, bool sendError); - // Clones stored item - bool CloneItem(uint32 count); - // Remove item from container (if splited update items fields) - virtual void RemoveItem(SQLTransaction& trans, MoveItemData* pOther, uint32 splitedAmount = 0) = 0; - // Saves item to container - virtual Item* StoreItem(SQLTransaction& trans, Item* pItem) = 0; - // Log bank event - virtual void LogBankEvent(SQLTransaction& trans, MoveItemData* pFrom, uint32 count) const = 0; - // Log GM action - virtual void LogAction(MoveItemData* pFrom) const; - // Copy slots id from position vector - void CopySlots(SlotIds& ids) const; - - Item* GetItem(bool isCloned = false) const { return isCloned ? m_pClonedItem : m_pItem; } - uint8 GetContainer() const { return m_container; } - uint8 GetSlotId() const { return m_slotId; } + static void SendCommandResult(WorldSession* session, GuildCommandType type, GuildCommandError errCode, std::string const& param = ""); + static void SendSaveEmblemResult(WorldSession* session, GuildEmblemError errCode); - protected: - virtual InventoryResult CanStore(Item* pItem, bool swap) = 0; - - Guild* m_pGuild; - Player* m_pPlayer; - uint8 m_container; - uint8 m_slotId; - Item* m_pItem; - Item* m_pClonedItem; - std::vector<ItemPosCount> m_vec; - }; - - class PlayerMoveItemData : public MoveItemData - { - public: - PlayerMoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId) : - MoveItemData(guild, player, container, slotId) { } - - bool IsBank() const override { return false; } - bool InitItem() override; - void RemoveItem(SQLTransaction& trans, MoveItemData* pOther, uint32 splitedAmount = 0) override; - Item* StoreItem(SQLTransaction& trans, Item* pItem) override; - void LogBankEvent(SQLTransaction& trans, MoveItemData* pFrom, uint32 count) const override; - protected: - InventoryResult CanStore(Item* pItem, bool swap) override; - }; + Guild(); + ~Guild(); - class BankMoveItemData : public MoveItemData - { - public: - BankMoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId) : - MoveItemData(guild, player, container, slotId) { } - - bool IsBank() const override { return true; } - bool InitItem() override; - bool HasStoreRights(MoveItemData* pOther) const override; - bool HasWithdrawRights(MoveItemData* pOther) const override; - void RemoveItem(SQLTransaction& trans, MoveItemData* pOther, uint32 splitedAmount) override; - Item* StoreItem(SQLTransaction& trans, Item* pItem) override; - void LogBankEvent(SQLTransaction& trans, MoveItemData* pFrom, uint32 count) const override; - void LogAction(MoveItemData* pFrom) const override; + bool Create(Player* pLeader, std::string const& name); + void Disband(); - protected: - InventoryResult CanStore(Item* pItem, bool swap) override; + void SaveToDB(); - private: - Item* _StoreItem(SQLTransaction& trans, BankTab* pTab, Item* pItem, ItemPosCount& pos, bool clone) const; - bool _ReserveSpace(uint8 slotId, Item* pItem, Item* pItemDest, uint32& count); - 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 SendSaveEmblemResult(WorldSession* session, GuildEmblemError errCode); - - Guild(); - ~Guild(); - - bool Create(Player* pLeader, std::string const& name); - void Disband(); - - void SaveToDB(); - - // Getters - ObjectGuid::LowType GetId() const { return m_id; } - ObjectGuid GetGUID() const { return ObjectGuid::Create<HighGuid::Guild>(m_id); } - ObjectGuid GetLeaderGUID() const { return m_leaderGuid; } - std::string const& GetName() const { return m_name; } - std::string const& GetMOTD() const { return m_motd; } - std::string const& GetInfo() const { return m_info; } - time_t GetCreatedDate() const { return m_createdDate; } - uint64 GetBankMoney() const { return m_bankMoney; } - - bool SetName(std::string const& name); - - // Handle client commands - void HandleRoster(WorldSession* session); - void SendQueryResponse(WorldSession* session); - void HandleSetAchievementTracking(WorldSession* session, std::set<uint32> const& achievementIds); - void HandleGetAchievementMembers(WorldSession* session, uint32 achievementId) const; - void HandleSetMOTD(WorldSession* session, std::string const& motd); - void HandleSetInfo(WorldSession* session, std::string const& info); - void HandleSetEmblem(WorldSession* session, const EmblemInfo& emblemInfo); - void HandleSetNewGuildMaster(WorldSession* session, std::string const& name); - 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, uint8 rankId, std::string const& name, uint32 rights, uint32 moneyPerDay, GuildBankRightsAndSlotsVec const& rightsAndSlots); - void HandleBuyBankTab(WorldSession* session, uint8 tabId); - void HandleInviteMember(WorldSession* session, std::string const& 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, uint32 rank); - void HandleAddNewRank(WorldSession* session, std::string const& name); - void HandleRemoveRank(WorldSession* session, uint8 rankId); - void HandleMemberDepositMoney(WorldSession* session, uint64 amount, bool cashFlow = false); - bool HandleMemberWithdrawMoney(WorldSession* session, uint64 amount, bool repair = false); - void HandleMemberLogout(WorldSession* session); - void HandleDelete(WorldSession* session); - void HandleGuildPartyRequest(WorldSession* session) const; - void HandleNewsSetSticky(WorldSession* session, uint32 newsId, bool sticky) const; - void HandleGuildRequestChallengeUpdate(WorldSession* session) const; - - void UpdateMemberData(Player* player, uint8 dataid, uint32 value); - void OnPlayerStatusChange(Player* player, uint32 flag, bool state); - - // Send info to client - void SendGuildRankInfo(WorldSession* session) const; - void SendEventLog(WorldSession* session) const; - void SendBankLog(WorldSession* session, uint8 tabId) const; - void SendBankList(WorldSession* session, uint8 tabId, bool fullUpdate) const; - void SendBankTabText(WorldSession* session, uint8 tabId) const; - void SendPermissions(WorldSession* session) const; - void SendMoneyInfo(WorldSession* session) const; - void SendLoginInfo(WorldSession* session); - void SendNewsUpdate(WorldSession* session) const; - - // Send events - void SendEventBankMoneyChanged() const; - void SendEventMOTD(WorldSession* session, bool broadcast = false) const; - void SendEventNewLeader(Member* newLeader, Member* oldLeader, bool isSelfPromoted = false) const; - void SendEventPlayerLeft(Member* leaver, Member* remover = nullptr, bool isRemoved = false) const; - void SendEventPresenceChanged(WorldSession* session, bool loggedOn, bool broadcast = false) const; - - // Load from DB - bool LoadFromDB(Field* fields); - void LoadGuildNewsLogFromDB(Field* fields) const; - void LoadRankFromDB(Field* fields); - bool LoadMemberFromDB(Field* fields); - bool LoadEventLogFromDB(Field* fields) const; - void LoadBankRightFromDB(Field* fields); - void LoadBankTabFromDB(Field* fields); - bool LoadBankEventLogFromDB(Field* fields); - bool LoadBankItemFromDB(Field* fields); - 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) const; - void BroadcastPacketToRank(WorldPacket const* packet, uint8 rankId) const; - void BroadcastPacket(WorldPacket const* packet) const; - void BroadcastPacketIfTrackingAchievement(WorldPacket const* packet, uint32 criteriaId) const; - - void MassInviteToEvent(WorldSession* session, uint32 minLevel, uint32 maxLevel, uint32 minRank); - - template<class Do> - void BroadcastWorker(Do& _do, Player* except = nullptr) - { - for (Members::iterator itr = m_members.begin(); itr != m_members.end(); ++itr) - if (Player* player = itr->second->FindConnectedPlayer()) - if (player != except) - _do(player); - } + // Getters + ObjectGuid::LowType GetId() const { return m_id; } + ObjectGuid GetGUID() const { return ObjectGuid::Create<HighGuid::Guild>(m_id); } + ObjectGuid GetLeaderGUID() const { return m_leaderGuid; } + std::string const& GetName() const { return m_name; } + std::string const& GetMOTD() const { return m_motd; } + std::string const& GetInfo() const { return m_info; } + time_t GetCreatedDate() const { return m_createdDate; } + uint64 GetBankMoney() const { return m_bankMoney; } + + bool SetName(std::string const& name); + + // Handle client commands + void HandleRoster(WorldSession* session); + void SendQueryResponse(WorldSession* session); + void HandleSetAchievementTracking(WorldSession* session, std::set<uint32> const& achievementIds); + void HandleGetAchievementMembers(WorldSession* session, uint32 achievementId) const; + void HandleSetMOTD(WorldSession* session, std::string const& motd); + void HandleSetInfo(WorldSession* session, std::string const& info); + void HandleSetEmblem(WorldSession* session, const EmblemInfo& emblemInfo); + void HandleSetNewGuildMaster(WorldSession* session, std::string const& name); + 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, uint8 rankId, std::string const& name, uint32 rights, uint32 moneyPerDay, GuildBankRightsAndSlotsVec const& rightsAndSlots); + void HandleBuyBankTab(WorldSession* session, uint8 tabId); + void HandleInviteMember(WorldSession* session, std::string const& 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, uint32 rank); + void HandleAddNewRank(WorldSession* session, std::string const& name); + void HandleRemoveRank(WorldSession* session, uint8 rankId); + void HandleMemberDepositMoney(WorldSession* session, uint64 amount, bool cashFlow = false); + bool HandleMemberWithdrawMoney(WorldSession* session, uint64 amount, bool repair = false); + void HandleMemberLogout(WorldSession* session); + void HandleDelete(WorldSession* session); + void HandleGuildPartyRequest(WorldSession* session) const; + void HandleNewsSetSticky(WorldSession* session, uint32 newsId, bool sticky) const; + void HandleGuildRequestChallengeUpdate(WorldSession* session) const; + + void UpdateMemberData(Player* player, uint8 dataid, uint32 value); + void OnPlayerStatusChange(Player* player, uint32 flag, bool state); + + // Send info to client + void SendGuildRankInfo(WorldSession* session) const; + void SendEventLog(WorldSession* session) const; + void SendBankLog(WorldSession* session, uint8 tabId) const; + void SendBankList(WorldSession* session, uint8 tabId, bool fullUpdate) const; + void SendBankTabText(WorldSession* session, uint8 tabId) const; + void SendPermissions(WorldSession* session) const; + void SendMoneyInfo(WorldSession* session) const; + void SendLoginInfo(WorldSession* session); + void SendNewsUpdate(WorldSession* session) const; + + // Send events + void SendEventBankMoneyChanged() const; + void SendEventMOTD(WorldSession* session, bool broadcast = false) const; + void SendEventNewLeader(Member* newLeader, Member* oldLeader, bool isSelfPromoted = false) const; + void SendEventPlayerLeft(Member* leaver, Member* remover = nullptr, bool isRemoved = false) const; + void SendEventPresenceChanged(WorldSession* session, bool loggedOn, bool broadcast = false) const; + + // Load from DB + bool LoadFromDB(Field* fields); + void LoadGuildNewsLogFromDB(Field* fields) const; + void LoadRankFromDB(Field* fields); + bool LoadMemberFromDB(Field* fields); + bool LoadEventLogFromDB(Field* fields) const; + void LoadBankRightFromDB(Field* fields); + void LoadBankTabFromDB(Field* fields); + bool LoadBankEventLogFromDB(Field* fields); + bool LoadBankItemFromDB(Field* fields); + 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) const; + void BroadcastPacketToRank(WorldPacket const* packet, uint8 rankId) const; + void BroadcastPacket(WorldPacket const* packet) const; + void BroadcastPacketIfTrackingAchievement(WorldPacket const* packet, uint32 criteriaId) const; + + void MassInviteToEvent(WorldSession* session, uint32 minLevel, uint32 maxLevel, uint32 minRank); + + template<class Do> + void BroadcastWorker(Do& _do, Player* except = nullptr) + { + for (Members::iterator itr = m_members.begin(); itr != m_members.end(); ++itr) + if (Player* player = itr->second->FindConnectedPlayer()) + if (player != except) + _do(player); + } - // Members - // Adds member to guild. If rankId == GUILD_RANK_NONE, lowest rank is assigned. - bool AddMember(ObjectGuid guid, uint8 rankId = GUILD_RANK_NONE); - void DeleteMember(ObjectGuid guid, bool isDisbanding = false, bool isKicked = false, bool canDeleteGuild = false); - bool ChangeMemberRank(ObjectGuid guid, uint8 newRank); - bool IsMember(ObjectGuid guid) const; - uint32 GetMembersCount() const { return uint32(m_members.size()); } + // Members + // Adds member to guild. If rankId == GUILD_RANK_NONE, lowest rank is assigned. + bool AddMember(ObjectGuid guid, uint8 rankId = GUILD_RANK_NONE); + void DeleteMember(ObjectGuid guid, bool isDisbanding = false, bool isKicked = false, bool canDeleteGuild = false); + bool ChangeMemberRank(ObjectGuid guid, uint8 newRank); + bool IsMember(ObjectGuid guid) const; + uint32 GetMembersCount() const { return uint32(m_members.size()); } - // Bank - void SwapItems(Player* player, uint8 tabId, uint8 slotId, uint8 destTabId, uint8 destSlotId, uint32 splitedAmount); - void SwapItemsWithInventory(Player* player, bool toChar, uint8 tabId, uint8 slotId, uint8 playerBag, uint8 playerSlotId, uint32 splitedAmount); + // Bank + void SwapItems(Player* player, uint8 tabId, uint8 slotId, uint8 destTabId, uint8 destSlotId, uint32 splitedAmount); + 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); + // Bank tabs + void SetBankTabText(uint8 tabId, std::string const& text); - GuildAchievementMgr& GetAchievementMgr() { return m_achievementMgr; } - GuildAchievementMgr const& GetAchievementMgr() const { return m_achievementMgr; } + GuildAchievementMgr& GetAchievementMgr() { return m_achievementMgr; } + GuildAchievementMgr const& GetAchievementMgr() const { return m_achievementMgr; } - // Pre-6.x guild leveling - uint8 GetLevel() const { return GUILD_OLD_MAX_LEVEL; } + // 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) const; - EmblemInfo const& GetEmblemInfo() const { return m_emblemInfo; } - void ResetTimes(bool weekly); + EmblemInfo const& GetEmblemInfo() const { return m_emblemInfo; } + void ResetTimes(bool weekly); - bool HasAchieved(uint32 achievementId) const; - void UpdateCriteria(CriteriaTypes type, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, Unit* unit, Player* player); + bool HasAchieved(uint32 achievementId) const; + void UpdateCriteria(CriteriaTypes type, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, Unit* unit, Player* player); -protected: - ObjectGuid::LowType m_id; - std::string m_name; - ObjectGuid m_leaderGuid; - std::string m_motd; - std::string m_info; - time_t m_createdDate; + protected: + ObjectGuid::LowType m_id; + std::string m_name; + ObjectGuid m_leaderGuid; + std::string m_motd; + std::string m_info; + time_t m_createdDate; - EmblemInfo m_emblemInfo; - uint32 m_accountsNumber; - uint64 m_bankMoney; + EmblemInfo m_emblemInfo; + uint32 m_accountsNumber; + uint64 m_bankMoney; - Ranks m_ranks; - Members m_members; - BankTabs m_bankTabs; + Ranks m_ranks; + Members m_members; + BankTabs 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; - GuildAchievementMgr m_achievementMgr; + // 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; + GuildAchievementMgr m_achievementMgr; -private: - inline uint8 _GetRanksSize() const { return uint8(m_ranks.size()); } - inline const RankInfo* GetRankInfo(uint8 rankId) const { return rankId < _GetRanksSize() ? &m_ranks[rankId] : NULL; } - inline RankInfo* GetRankInfo(uint8 rankId) { return rankId < _GetRanksSize() ? &m_ranks[rankId] : NULL; } - bool _HasRankRight(Player const* player, uint32 right) const; + private: + inline uint8 _GetRanksSize() const { return uint8(m_ranks.size()); } + inline const RankInfo* GetRankInfo(uint8 rankId) const { return rankId < _GetRanksSize() ? &m_ranks[rankId] : nullptr; } + inline RankInfo* GetRankInfo(uint8 rankId) { return rankId < _GetRanksSize() ? &m_ranks[rankId] : nullptr; } + bool _HasRankRight(Player const* player, uint32 right) const; - inline uint8 _GetLowestRankId() const { return uint8(m_ranks.size() - 1); } + inline uint8 _GetLowestRankId() const { return uint8(m_ranks.size() - 1); } - inline uint8 _GetPurchasedTabsSize() const { return uint8(m_bankTabs.size()); } - inline BankTab* GetBankTab(uint8 tabId) { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : NULL; } - inline const BankTab* GetBankTab(uint8 tabId) const { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : NULL; } + inline uint8 _GetPurchasedTabsSize() const { return uint8(m_bankTabs.size()); } + inline BankTab* GetBankTab(uint8 tabId) { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : nullptr; } + inline const BankTab* GetBankTab(uint8 tabId) const { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : nullptr; } - inline const Member* GetMember(ObjectGuid const& guid) const - { - Members::const_iterator itr = m_members.find(guid); - return itr != m_members.end() ? itr->second : NULL; - } + inline const Member* GetMember(ObjectGuid const& guid) const + { + Members::const_iterator itr = m_members.find(guid); + return itr != m_members.end() ? itr->second : nullptr; + } - inline Member* GetMember(ObjectGuid const& guid) - { - Members::iterator itr = m_members.find(guid); - return itr != m_members.end() ? itr->second : NULL; - } + inline Member* GetMember(ObjectGuid const& guid) + { + Members::iterator itr = m_members.find(guid); + return itr != m_members.end() ? itr->second : nullptr; + } - inline Member* GetMember(std::string const& name) - { - for (Members::iterator itr = m_members.begin(); itr != m_members.end(); ++itr) - if (itr->second->GetName() == name) - return itr->second; + inline Member* GetMember(std::string const& name) + { + for (Members::iterator itr = m_members.begin(); itr != m_members.end(); ++itr) + if (itr->second->GetName() == name) + return itr->second; - return nullptr; - } + return nullptr; + } - static void _DeleteMemberFromDB(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(LocaleConstant loc); - // Creates new rank - bool _CreateRank(std::string const& name, uint32 rights); - // Update account number when member added/removed from guild - void _UpdateAccountsNumber(); - bool _IsLeader(Player* player) const; - void _DeleteBankItems(SQLTransaction& trans, bool removeItemsFromDB = false); - bool _ModifyBankMoney(SQLTransaction& trans, uint64 amount, bool add); - void _SetLeaderGUID(Member* pLeader); - - void _SetRankBankMoneyPerDay(uint8 rankId, uint32 moneyPerDay); - void _SetRankBankTabRightsAndSlots(uint8 rankId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB = true); - int8 _GetRankBankTabRights(uint8 rankId, uint8 tabId) const; - uint32 _GetRankRights(uint8 rankId) const; - uint32 _GetRankBankMoneyPerDay(uint8 rankId) const; - int32 _GetRankBankTabSlotsPerDay(uint8 rankId, uint8 tabId) const; - std::string _GetRankName(uint8 rankId) const; - - int32 _GetMemberRemainingSlots(Member const* member, uint8 tabId) const; - int64 _GetMemberRemainingMoney(Member const* member) const; - void _UpdateMemberWithdrawSlots(SQLTransaction& trans, ObjectGuid guid, uint8 tabId); - bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, int32 rights) const; - - void _LogEvent(GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2 = UI64LIT(0), uint8 newRank = 0); - void _LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount = 0, uint8 destTabId = 0); - - Item* _GetItem(uint8 tabId, uint8 slotId) const; - void _RemoveItem(SQLTransaction& trans, uint8 tabId, uint8 slotId); - void _MoveItems(MoveItemData* pSrc, MoveItemData* pDest, uint32 splitedAmount) const; - static bool _DoItemsMove(MoveItemData* pSrc, MoveItemData* pDest, bool sendError, uint32 splitedAmount = 0); - - void _SendBankContentUpdate(MoveItemData* pSrc, MoveItemData* pDest) const; - void _SendBankContentUpdate(uint8 tabId, SlotIds slots) const; - void SendGuildRanksUpdate(ObjectGuid setterGuid, ObjectGuid targetGuid, uint32 rank); + static void _DeleteMemberFromDB(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(LocaleConstant loc); + // Creates new rank + bool _CreateRank(std::string const& name, uint32 rights); + // Update account number when member added/removed from guild + void _UpdateAccountsNumber(); + bool _IsLeader(Player* player) const; + void _DeleteBankItems(SQLTransaction& trans, bool removeItemsFromDB = false); + bool _ModifyBankMoney(SQLTransaction& trans, uint64 amount, bool add); + void _SetLeaderGUID(Member* pLeader); + + void _SetRankBankMoneyPerDay(uint8 rankId, uint32 moneyPerDay); + void _SetRankBankTabRightsAndSlots(uint8 rankId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB = true); + int8 _GetRankBankTabRights(uint8 rankId, uint8 tabId) const; + uint32 _GetRankRights(uint8 rankId) const; + uint32 _GetRankBankMoneyPerDay(uint8 rankId) const; + int32 _GetRankBankTabSlotsPerDay(uint8 rankId, uint8 tabId) const; + std::string _GetRankName(uint8 rankId) const; + + int32 _GetMemberRemainingSlots(Member const* member, uint8 tabId) const; + int64 _GetMemberRemainingMoney(Member const* member) const; + void _UpdateMemberWithdrawSlots(SQLTransaction& trans, ObjectGuid guid, uint8 tabId); + bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, int32 rights) const; + + void _LogEvent(GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2 = UI64LIT(0), uint8 newRank = 0); + void _LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount = 0, uint8 destTabId = 0); + + Item* _GetItem(uint8 tabId, uint8 slotId) const; + void _RemoveItem(SQLTransaction& trans, uint8 tabId, uint8 slotId); + void _MoveItems(MoveItemData* pSrc, MoveItemData* pDest, uint32 splitedAmount) const; + static bool _DoItemsMove(MoveItemData* pSrc, MoveItemData* pDest, bool sendError, uint32 splitedAmount = 0); + + void _SendBankContentUpdate(MoveItemData* pSrc, MoveItemData* pDest) const; + void _SendBankContentUpdate(uint8 tabId, SlotIds slots) const; + void SendGuildRanksUpdate(ObjectGuid setterGuid, ObjectGuid targetGuid, uint32 rank); }; #endif |