18#ifndef TRINITYCORE_GUILD_H
19#define TRINITYCORE_GUILD_H
27#include <unordered_map>
28#include <unordered_set>
233 EmblemInfo() : m_style(0), m_color(0), m_borderStyle(0), m_borderColor(0), m_backgroundColor(0) { }
292 void SetStats(
Player* player);
294 bool CheckStats()
const;
296 void SetPublicNote(std::string_view publicNote);
297 void SetOfficerNote(std::string_view officerNote);
309 std::string
const&
GetName()
const {
return m_name; }
324 inline void UpdateLogoutTime();
325 inline bool IsRank(
uint8 rankId)
const {
return m_rankId == rankId; }
330 int32 GetBankWithdrawValue(
uint8 tabId)
const;
353 std::array<int32, GUILD_BANK_MAX_TABS + 1> m_bankWithdraw = {};
380 LogEntry(guildId, guid), m_eventType(eventType), m_playerGuid1(playerGuid1), m_playerGuid2(playerGuid2), m_newRank(newRank) { }
383 LogEntry(guildId, guid, timestamp), m_eventType(eventType), m_playerGuid1(playerGuid1), m_playerGuid2(playerGuid2), m_newRank(newRank) { }
411 return IsMoneyEvent(m_eventType);
415 LogEntry(guildId, guid), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid),
416 m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { }
419 LogEntry(guildId, guid, timestamp), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid),
420 m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { }
437 template <
typename Entry>
444 bool CanInsert()
const {
return m_log.size() < m_maxRecords; }
447 template <
typename... Ts>
448 void LoadEvent(Ts&&... args);
451 template <
typename... Ts>
471 m_guildId(guildId), m_rankId(rankId), m_name(name), m_rights(rights),
479 std::string
const&
GetName()
const {
return m_name; }
480 void SetName(std::string_view name);
483 void SetRights(
uint32 rights);
487 void SetBankMoneyPerDay(
uint32 money);
508 std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS> m_bankTabRightsAndSlots = {};
517 bool LoadItemFromDB(
Field* fields);
520 void SetInfo(std::string_view name, std::string_view icon);
521 void SetText(std::string_view text);
524 std::string
const&
GetName()
const {
return m_name; }
525 std::string
const&
GetIcon()
const {
return m_icon; }
526 std::string
const&
GetText()
const {
return m_text; }
535 std::array<Item*, GUILD_BANK_MAX_SLOTS> m_items = {};
552 virtual bool CheckItem(
uint32& splitedAmount);
558 bool CanStore(
Item* pItem,
bool swap,
bool sendError);
560 bool CloneItem(
uint32 count);
570 void CopySlots(
SlotIds& ids)
const;
572 Item*
GetItem(
bool isCloned =
false)
const {
return isCloned ? m_pClonedItem : m_pItem; }
594 bool IsBank()
const override {
return false; }
595 bool InitItem()
override;
609 bool IsBank()
const override {
return true; }
610 bool InitItem()
override;
611 bool HasStoreRights(
MoveItemData* pOther)
const override;
612 bool HasWithdrawRights(
MoveItemData* pOther)
const override;
624 void CanStoreItemInTab(
Item* pItem,
uint8 skipSlotId,
bool merge,
uint32& count);
634 bool Create(
Player* pLeader, std::string_view name);
640 std::string
const&
GetName()
const {
return m_name; }
641 std::string
const&
GetMOTD()
const {
return m_motd; }
642 std::string
const&
GetInfo()
const {
return m_info; }
647 bool SetName(std::string_view name);
652 void HandleSetMOTD(
WorldSession* session, std::string_view motd);
653 void HandleSetInfo(
WorldSession* session, std::string_view info);
655 void HandleSetLeader(
WorldSession* session, std::string_view name);
656 void HandleSetBankTabInfo(
WorldSession* session,
uint8 tabId, std::string_view name, std::string_view icon);
657 void HandleSetMemberNote(
WorldSession* session, std::string_view note, std::string_view name,
bool isPublic);
658 void HandleSetRankInfo(
WorldSession* session,
uint8 rankId, std::string_view name,
uint32 rights,
uint32 moneyPerDay, std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS>
const& rightsAndSlots);
660 void HandleInviteMember(
WorldSession* session, std::string_view name);
663 void HandleRemoveMember(
WorldSession* session, std::string_view name);
664 void HandleUpdateMemberRank(
WorldSession* session, std::string_view name,
bool demote);
665 void HandleAddNewRank(
WorldSession* session, std::string_view name);
669 bool HandleMemberWithdrawMoney(
WorldSession* session,
uint32 amount,
bool repair =
false);
674 void OnPlayerStatusChange(
Player* player,
uint32 flag,
bool state);
680 void SendBankList(
WorldSession* session =
nullptr,
uint8 tabId = 0,
bool fullUpdate =
false,
SlotIds* slots =
nullptr)
const;
681 void SendBankTabData(
WorldSession* session,
uint8 tabId,
bool sendAllSlots)
const;
689 void LoadRankFromDB(
Field* fields);
690 bool LoadMemberFromDB(
Field* fields);
691 bool LoadEventLogFromDB(
Field* fields);
692 void LoadBankRightFromDB(
Field* fields);
693 void LoadBankTabFromDB(
Field* fields);
694 bool LoadBankEventLogFromDB(
Field* fields);
695 bool LoadBankItemFromDB(
Field* fields);
701 void BroadcastPacket(
WorldPacket const* packet)
const;
708 for (
auto itr = m_members.begin(); itr != m_members.end(); ++itr)
709 if (
Player* player = itr->second.FindConnectedPlayer())
710 if (player != except)
728 void SetBankTabText(
uint8 tabId, std::string_view text);
773 return (itr != m_members.end()) ? &itr->second :
nullptr;
779 return (itr != m_members.end()) ? &itr->second :
nullptr;
784 for (
auto itr = m_members.begin(); itr != m_members.end(); ++itr)
785 if (itr->second.GetName() == name)
794 void _CreateNewBankTab();
800 void _UpdateAccountsNumber();
801 bool _IsLeader(
Player* player)
const;
804 void _SetLeaderGUID(Member& pLeader);
806 void _SetRankBankMoneyPerDay(
uint8 rankId,
uint32 moneyPerDay);
810 int32 _GetRankBankMoneyPerDay(
uint8 rankId)
const;
812 std::string _GetRankName(
uint8 rankId)
const;
814 int32 _GetMemberRemainingSlots(Member
const& member,
uint8 tabId)
const;
815 int32 _GetMemberRemainingMoney(Member
const& member)
const;
824 void _MoveItems(MoveItemData* pSrc, MoveItemData* pDest,
uint32 splitedAmount);
825 bool _DoItemsMove(MoveItemData* pSrc, MoveItemData* pDest,
bool sendError,
uint32 splitedAmount = 0);
827 void _SendBankContentUpdate(MoveItemData* pSrc, MoveItemData* pDest)
const;
828 void _SendBankContentUpdate(
uint8 tabId,
SlotIds slots)
const;
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
@ GE_GUILDBANKBAGSLOTS_CHANGED
@ GE_BANK_TAB_PURCHASED
TODO: Sent when items are moved in gbank - all players with bank open will send tab query.
@ GE_BANK_TAB_AND_MONEY_UPDATED
@ GUILD_EVENT_LOG_GUID_UNDEFINED
@ GUILD_WITHDRAW_SLOT_UNLIMITED
@ GUILD_BANK_MONEY_LOGS_TAB
@ GUILD_WITHDRAW_MONEY_UNLIMITED
@ GUILDMEMBER_STATUS_NONE
@ GUILDMEMBER_STATUS_MOBILE
@ GUILDMEMBER_STATUS_ONLINE
@ GUILD_BANK_RIGHT_PUT_ITEM
@ GUILD_BANK_RIGHT_VIEW_TAB
@ GUILD_BANK_RIGHT_DEPOSIT_ITEM
@ GUILD_BANK_RIGHT_UPDATE_TEXT
constexpr uint64 GUILD_BANK_MONEY_LIMIT
@ GUILD_COMMAND_GUILD_CHAT
@ GUILD_COMMAND_CHANGE_LEADER
@ GUILD_COMMAND_MOVE_ITEM
@ GUILD_COMMAND_PUBLIC_NOTE
@ GUILD_COMMAND_CHANGE_RANK
@ GUILD_COMMAND_EDIT_MOTD
@ ERR_GUILD_WITHDRAW_LIMIT
@ ERR_GUILD_PLAYER_NOT_IN_GUILD
@ ERR_GUILD_PLAYER_NOT_IN_GUILD_S
@ ERR_GUILD_COMMAND_SUCCESS
@ ERR_GUILD_NOT_ENOUGH_MONEY
@ ERR_GUILD_PLAYER_NOT_FOUND_S
@ ERR_GUILD_RANK_TOO_LOW_S
@ ERR_GUILD_IGNORING_YOU_S
@ ERR_GUILD_NAME_EXISTS_S
@ ERR_GUILD_RANK_TOO_HIGH_S
@ ERR_ALREADY_INVITED_TO_GUILD_S
@ ERR_GUILD_ITEM_NOT_FOUND
std::set< uint8 > SlotIds
@ GUILD_BANK_LOG_MOVE_ITEM
@ GUILD_BANK_LOG_WITHDRAW_ITEM
@ GUILD_BANK_LOG_DEPOSIT_MONEY
@ GUILD_BANK_LOG_DEPOSIT_ITEM
@ GUILD_BANK_LOG_WITHDRAW_MONEY
@ GUILD_BANK_LOG_REPAIR_MONEY
@ GUILD_BANK_LOG_MOVE_ITEM2
@ GUILD_BANK_LOG_BUY_SLOT
@ GR_RIGHT_WITHDRAW_GOLD_LOCK
@ GR_RIGHT_CREATE_GUILD_EVENT
@ GR_RIGHT_MODIFY_GUILD_INFO
@ GR_RIGHT_WITHDRAW_REPAIR
@ GUILD_MEMBER_DATA_LEVEL
@ GUILD_MEMBER_DATA_ZONEID
@ ERR_GUILDEMBLEM_NOTGUILDMASTER
@ ERR_GUILDEMBLEM_INVALIDVENDOR
@ ERR_GUILDEMBLEM_INVALID_TABARD_COLORS
@ ERR_GUILDEMBLEM_NOTENOUGHMONEY
@ ERR_GUILDEMBLEM_SUCCESS
@ ERR_GUILDEMBLEM_NOGUILD
@ GUILD_EVENT_LOG_LEAVE_GUILD
@ GUILD_EVENT_LOG_PROMOTE_PLAYER
@ GUILD_EVENT_LOG_UNINVITE_PLAYER
@ GUILD_EVENT_LOG_INVITE_PLAYER
@ GUILD_EVENT_LOG_DEMOTE_PLAYER
@ GUILD_EVENT_LOG_JOIN_GUILD
std::optional< T > Optional
Optional helper class to wrap optional values within.
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
uint32 GetBackgroundColor() const
uint32 GetBorderStyle() const
uint32 GetBorderColor() const
Class used to access individual fields of database query result.
void SetGuildMasterValues()
GuildBankRightsAndSlots(uint8 _tabId, uint8 _rights, uint32 _slots)
void SetSlots(uint32 _slots)
void SetTabId(uint8 _tabId)
void SetRights(uint8 _rights)
GuildBankRightsAndSlots()
GuildBankRightsAndSlots(uint8 _tabId)
GuildBankEventLogTypes m_eventType
ObjectGuid::LowType m_playerGuid
BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId)
static bool IsMoneyEvent(GuildBankEventLogTypes eventType)
bool IsMoneyEvent() const
BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, uint8 tabId, GuildBankEventLogTypes eventType, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId)
bool IsBank() const override
BankMoveItemData(Guild *guild, Player *player, uint8 container, uint8 slotId)
std::string const & GetName() const
std::string const & GetIcon() const
Item * GetItem(uint8 slotId) const
std::string const & GetText() const
ObjectGuid::LowType m_guildId
GuildEventLogTypes m_eventType
ObjectGuid::LowType m_playerGuid2
EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank)
EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank)
ObjectGuid::LowType m_playerGuid1
virtual void SaveToDB(CharacterDatabaseTransaction trans) const =0
uint64 GetTimestamp() const
LogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp)
ObjectGuid::LowType m_guildId
std::list< Entry > & GetGuildLog()
uint32 const m_maxRecords
std::list< Entry > const & GetGuildLog() const
std::string GetOfficerNote() const
std::string const & GetName() const
bool IsRankNotLower(uint8 rankId) const
bool IsSamePlayer(ObjectGuid guid) const
bool IsRank(uint8 rankId) const
uint32 GetAccountId() const
std::string GetPublicNote() const
void SetZoneID(uint32 id)
ObjectGuid::LowType m_guildId
ObjectGuid GetGUID() const
std::string m_officerNote
uint64 GetLogoutTime() const
std::vector< ItemPosCount > m_vec
virtual Item * StoreItem(CharacterDatabaseTransaction trans, Item *pItem)=0
virtual InventoryResult CanStore(Item *pItem, bool swap)=0
Item * GetItem(bool isCloned=false) const
virtual void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData *pFrom, uint32 count) const =0
uint8 GetContainer() const
virtual bool HasWithdrawRights(MoveItemData *) const
virtual bool HasStoreRights(MoveItemData *) const
virtual bool IsBank() const =0
virtual bool InitItem()=0
virtual void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData *pOther, uint32 splitedAmount=0)=0
PlayerMoveItemData(Guild *guild, Player *player, uint8 container, uint8 slotId)
bool IsBank() const override
std::string const & GetName() const
RankInfo(ObjectGuid::LowType guildId, uint8 rankId, std::string_view name, uint32 rights, uint32 money)
int8 GetBankTabRights(uint8 tabId) const
int32 GetBankTabSlotsPerDay(uint8 tabId) const
RankInfo(ObjectGuid::LowType guildId)
ObjectGuid::LowType m_guildId
int32 GetBankMoneyPerDay() const
uint64 GetBankMoney() const
void SetWeakPtr(Trinity::unique_weak_ptr< Guild > weakRef)
ObjectGuid GetLeaderGUID() const
Member * GetMember(ObjectGuid guid)
std::vector< BankTab > m_bankTabs
void BroadcastWorker(Do &_do, Player *except=nullptr)
ObjectGuid::LowType GetId() const
Member * GetMember(std::string_view name)
uint32 GetMemberCount() const
uint8 _GetPurchasedTabsSize() const
std::vector< RankInfo > m_ranks
RankInfo const * GetRankInfo(uint8 rankId) const
std::string const & GetName() const
LogHolder< EventLogEntry > m_eventLog
Member const * GetMember(ObjectGuid guid) const
time_t GetCreatedDate() const
std::unordered_map< uint32, Member > m_members
RankInfo * GetRankInfo(uint8 rankId)
std::string const & GetInfo() const
EmblemInfo const & GetEmblemInfo() const
uint8 _GetRanksSize() const
BankTab * GetBankTab(uint8 tabId)
std::string const & GetMOTD() const
Trinity::unique_weak_ptr< Guild > m_weakRef
uint32 GetMembersCount() const
uint8 _GetLowestRankId() const
Trinity::unique_weak_ptr< Guild > GetWeakPtr() const
BankTab const * GetBankTab(uint8 tabId) const
LowType GetCounter() const
Player session in the World.
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
TC_GAME_API Player * FindConnectedPlayer(ObjectGuid const &)