TrinityCore
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Guild.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef TRINITYCORE_GUILD_H
19#define TRINITYCORE_GUILD_H
20
21#include "DatabaseEnvFwd.h"
22#include "ObjectGuid.h"
23#include "Optional.h"
24#include "SharedDefines.h"
25#include "UniqueTrackablePtr.h"
26#include <set>
27#include <unordered_map>
28#include <unordered_set>
29
30class Item;
31class Player;
32class WorldPacket;
33class WorldSession;
34struct ItemPosCount;
37
38namespace WorldPackets
39{
40 namespace Guild
41 {
44 class SaveGuildEmblem;
45 }
46}
47
49{
50 GUILD_BANK_MAX_TABS = 6, // send by client for money log also
52 GUILD_BANK_MONEY_LOGS_TAB = 100, // used for money log in DB
60};
61
62constexpr uint64 GUILD_BANK_MONEY_LIMIT = UI64LIT(0x7FFFFFFFFFFFF);
63
65{
68};
69
71{
72 // These ranks can be modified, but they cannot be deleted
77 GR_INITIATE = 4
78 // When promoting member server does: rank--
79 // When demoting member server does: rank++
80};
81
83{
84 GR_RIGHT_EMPTY = 0x00000040,
98 GR_RIGHT_WITHDRAW_GOLD_LOCK = 0x00020000, // remove money withdraw capacity
99 GR_RIGHT_WITHDRAW_REPAIR = 0x00040000, // withdraw for repair
100 GR_RIGHT_WITHDRAW_GOLD = 0x00080000, // withdraw gold
101 GR_RIGHT_CREATE_GUILD_EVENT = 0x00100000, // wotlk
102 GR_RIGHT_ALL = 0x001DF1FF
104
106{
123};
124
126{
146 ERR_GUILD_UNK1 = 20, // Forces roster update
151};
152
154{
175};
176
178{
182
186
188{
199
201{
209
211{
219
221{
226 GUILDMEMBER_STATUS_MOBILE = 0x0008, // remote chat from mobile app
227};
228
229// Emblem info
231{
232 public:
233 EmblemInfo() : m_style(0), m_color(0), m_borderStyle(0), m_borderColor(0), m_backgroundColor(0) { }
234
235 void LoadFromDB(Field* fields);
236 void SaveToDB(ObjectGuid::LowType guildId) const;
237 void ReadPacket(WorldPackets::Guild::SaveGuildEmblem& packet);
238
239 uint32 GetStyle() const { return m_style; }
240 uint32 GetColor() const { return m_color; }
241 uint32 GetBorderStyle() const { return m_borderStyle; }
242 uint32 GetBorderColor() const { return m_borderColor; }
243 uint32 GetBackgroundColor() const { return m_backgroundColor; }
244
245 private:
251};
252
253// Structure for storing guild bank rights and remaining slots together.
255{
256 public:
258 GuildBankRightsAndSlots(uint8 _tabId) : tabId(_tabId), rights(0), slots(0) { }
259 GuildBankRightsAndSlots(uint8 _tabId, uint8 _rights, uint32 _slots) : tabId(_tabId), rights(_rights), slots(_slots) { }
260
262 {
265 }
266
267 void SetTabId(uint8 _tabId) { tabId = _tabId; }
268 void SetSlots(uint32 _slots) { slots = _slots; }
269 void SetRights(uint8 _rights) { rights = _rights; }
270
271 int8 GetTabId() const { return tabId; }
272 int32 GetSlots() const { return slots; }
273 int8 GetRights() const { return rights; }
274
275 private:
279};
280
281using SlotIds = std::set<uint8>;
282
284{
285 private:
286 // Class representing guild member
287 class Member
288 {
289 public:
290 Member(ObjectGuid::LowType guildId, ObjectGuid guid, uint8 rankId);
291
292 void SetStats(Player* player);
293 void SetStats(std::string_view name, uint8 level, uint8 _class, uint8 gender, uint32 zoneId, uint32 accountId);
294 bool CheckStats() const;
295
296 void SetPublicNote(std::string_view publicNote);
297 void SetOfficerNote(std::string_view officerNote);
298 void SetZoneID(uint32 id) { m_zoneId = id; }
299 void SetLevel(uint8 var) { m_level = var; }
300
301 void AddFlag(uint8 var) { m_flags |= var; }
302 void RemFlag(uint8 var) { m_flags &= ~var; }
304
305 bool LoadFromDB(Field* fields);
306 void SaveToDB(CharacterDatabaseTransaction trans) const;
307
308 ObjectGuid GetGUID() const { return m_guid; }
309 std::string const& GetName() const { return m_name; }
310 uint32 GetAccountId() const { return m_accountId; }
311 uint8 GetRankId() const { return m_rankId; }
312 uint64 GetLogoutTime() const { return m_logoutTime; }
313 std::string GetPublicNote() const { return m_publicNote; }
314 std::string GetOfficerNote() const { return m_officerNote; }
315 uint8 GetClass() const { return m_class; }
316 uint8 GetGender() const { return m_gender; }
317 uint8 GetLevel() const { return m_level; }
318 uint8 GetFlags() const { return m_flags; }
319 uint32 GetZoneId() const { return m_zoneId; }
320 bool IsOnline() const { return (m_flags & GUILDMEMBER_STATUS_ONLINE); }
321
322 void ChangeRank(CharacterDatabaseTransaction trans, uint8 newRank);
323
324 inline void UpdateLogoutTime();
325 inline bool IsRank(uint8 rankId) const { return m_rankId == rankId; }
326 inline bool IsRankNotLower(uint8 rankId) const { return m_rankId <= rankId; }
327 inline bool IsSamePlayer(ObjectGuid guid) const { return m_guid == guid; }
328
329 void UpdateBankWithdrawValue(CharacterDatabaseTransaction trans, uint8 tabId, uint32 amount);
330 int32 GetBankWithdrawValue(uint8 tabId) const;
331 void ResetValues();
332
333 Player* FindPlayer() const;
335
336 private:
338 // Fields from characters table
340 std::string m_name;
348 // Fields from guild_member table
350 std::string m_publicNote;
351 std::string m_officerNote;
352
353 std::array<int32, GUILD_BANK_MAX_TABS + 1> m_bankWithdraw = {};
354 };
355
356 // Base class for event entries
358 {
359 public:
360 LogEntry(ObjectGuid::LowType guildId, uint32 guid);
361 LogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp) : m_guildId(guildId), m_guid(guid), m_timestamp(timestamp) { }
362 virtual ~LogEntry() { }
363
364 uint32 GetGUID() const { return m_guid; }
365 uint64 GetTimestamp() const { return m_timestamp; }
366
367 virtual void SaveToDB(CharacterDatabaseTransaction trans) const = 0;
368
369 protected:
373 };
374
375 // Event log entry
376 class EventLogEntry : public LogEntry
377 {
378 public:
379 EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) :
380 LogEntry(guildId, guid), m_eventType(eventType), m_playerGuid1(playerGuid1), m_playerGuid2(playerGuid2), m_newRank(newRank) { }
381
382 EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) :
383 LogEntry(guildId, guid, timestamp), m_eventType(eventType), m_playerGuid1(playerGuid1), m_playerGuid2(playerGuid2), m_newRank(newRank) { }
384
386
387 void SaveToDB(CharacterDatabaseTransaction trans) const override;
388 void WritePacket(WorldPackets::Guild::GuildEventLogQueryResults& packet) const;
389
390 private:
395 };
396
397 // Bank event log entry
399 {
400 public:
402 {
403 return
404 eventType == GUILD_BANK_LOG_DEPOSIT_MONEY ||
405 eventType == GUILD_BANK_LOG_WITHDRAW_MONEY ||
406 eventType == GUILD_BANK_LOG_REPAIR_MONEY;
407 }
408
409 bool IsMoneyEvent() const
410 {
411 return IsMoneyEvent(m_eventType);
412 }
413
414 BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) :
415 LogEntry(guildId, guid), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid),
416 m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { }
417
418 BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, uint8 tabId, GuildBankEventLogTypes eventType, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 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) { }
421
423
424 void SaveToDB(CharacterDatabaseTransaction trans) const override;
425 void WritePacket(WorldPackets::Guild::GuildBankLogQueryResults& packet) const;
426
427 private:
434 };
435
436 // Class encapsulating work with events collection
437 template <typename Entry>
439 {
440 public:
441 LogHolder();
442
443 // Checks if new log entry can be added to holder
444 bool CanInsert() const { return m_log.size() < m_maxRecords; }
445
446 // Adds event from DB to collection
447 template <typename... Ts>
448 void LoadEvent(Ts&&... args);
449
450 // Adds new event to collection and saves it to DB
451 template <typename... Ts>
452 void AddEvent(CharacterDatabaseTransaction trans, Ts&&... args);
453
454 uint32 GetNextGUID();
455 std::list<Entry>& GetGuildLog() { return m_log; }
456 std::list<Entry> const& GetGuildLog() const { return m_log; }
457
458 private:
459 std::list<Entry> m_log;
462 };
463
464 // Class encapsulating guild rank data
466 {
467 public:
468 RankInfo(): m_guildId(0), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_EMPTY), m_bankMoneyPerDay(0) { }
469 RankInfo(ObjectGuid::LowType guildId) : m_guildId(guildId), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_EMPTY), m_bankMoneyPerDay(0) { }
470 RankInfo(ObjectGuid::LowType guildId, uint8 rankId, std::string_view name, uint32 rights, uint32 money) :
471 m_guildId(guildId), m_rankId(rankId), m_name(name), m_rights(rights),
472 m_bankMoneyPerDay(rankId != GR_GUILDMASTER ? money : GUILD_WITHDRAW_MONEY_UNLIMITED) { }
473
474 void LoadFromDB(Field* fields);
475 void SaveToDB(CharacterDatabaseTransaction trans) const;
476
477 uint8 GetId() const { return m_rankId; }
478
479 std::string const& GetName() const { return m_name; }
480 void SetName(std::string_view name);
481
482 uint32 GetRights() const { return m_rights; }
483 void SetRights(uint32 rights);
484
485 int32 GetBankMoneyPerDay() const { return m_bankMoneyPerDay; }
486
487 void SetBankMoneyPerDay(uint32 money);
488
489 inline int8 GetBankTabRights(uint8 tabId) const
490 {
491 return tabId < GUILD_BANK_MAX_TABS ? m_bankTabRightsAndSlots[tabId].GetRights() : 0;
492 }
493
495 {
496 return tabId < GUILD_BANK_MAX_TABS ? m_bankTabRightsAndSlots[tabId].GetSlots() : 0;
497 }
498
499 void SetBankTabSlotsAndRights(GuildBankRightsAndSlots rightsAndSlots, bool saveToDB);
500 void CreateMissingTabsIfNeeded(uint8 ranks, CharacterDatabaseTransaction trans, bool logOnCreate = false);
501
502 private:
505 std::string m_name;
508 std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS> m_bankTabRightsAndSlots = {};
509 };
510
512 {
513 public:
514 BankTab(ObjectGuid::LowType guildId, uint8 tabId);
515
516 void LoadFromDB(Field* fields);
517 bool LoadItemFromDB(Field* fields);
518 void Delete(CharacterDatabaseTransaction trans, bool removeItemsFromDB = false);
519
520 void SetInfo(std::string_view name, std::string_view icon);
521 void SetText(std::string_view text);
522 void SendText(Guild const* guild, WorldSession* session) const;
523
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; }
527
528 inline Item* GetItem(uint8 slotId) const { return slotId < GUILD_BANK_MAX_SLOTS ? m_items[slotId] : nullptr; }
529 bool SetItem(CharacterDatabaseTransaction trans, uint8 slotId, Item* pItem);
530
531 private:
534
535 std::array<Item*, GUILD_BANK_MAX_SLOTS> m_items = {};
536 std::string m_name;
537 std::string m_icon;
538 std::string m_text;
539 };
540
541 // Movement data
543 {
544 public:
545 MoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId);
546 virtual ~MoveItemData();
547
548 virtual bool IsBank() const = 0;
549 // Initializes item pointer. Returns true, if item exists, false otherwise.
550 virtual bool InitItem() = 0;
551 // Checks splited amount against item. Splited amount cannot be more that number of items in stack.
552 virtual bool CheckItem(uint32& splitedAmount);
553 // Defines if player has rights to save item in container
554 virtual bool HasStoreRights(MoveItemData* /*pOther*/) const { return true; }
555 // Defines if player has rights to withdraw item from container
556 virtual bool HasWithdrawRights(MoveItemData* /*pOther*/) const { return true; }
557 // Checks if container can store specified item
558 bool CanStore(Item* pItem, bool swap, bool sendError);
559 // Clones stored item
560 bool CloneItem(uint32 count);
561 // Remove item from container (if splited update items fields)
562 virtual void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData* pOther, uint32 splitedAmount = 0) = 0;
563 // Saves item to container
564 virtual Item* StoreItem(CharacterDatabaseTransaction trans, Item* pItem) = 0;
565 // Log bank event
566 virtual void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData* pFrom, uint32 count) const = 0;
567 // Log GM action
568 virtual void LogAction(MoveItemData* pFrom) const;
569 // Copy slots id from position vector
570 void CopySlots(SlotIds& ids) const;
571
572 Item* GetItem(bool isCloned = false) const { return isCloned ? m_pClonedItem : m_pItem; }
573 uint8 GetContainer() const { return m_container; }
574 uint8 GetSlotId() const { return m_slotId; }
575
576 protected:
577 virtual InventoryResult CanStore(Item* pItem, bool swap) = 0;
578
585 std::vector<ItemPosCount> m_vec;
586 };
587
589 {
590 public:
591 PlayerMoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId) :
592 MoveItemData(guild, player, container, slotId) { }
593
594 bool IsBank() const override { return false; }
595 bool InitItem() override;
596 void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData* pOther, uint32 splitedAmount = 0) override;
597 Item* StoreItem(CharacterDatabaseTransaction trans, Item* pItem) override;
598 void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData* pFrom, uint32 count) const override;
599 protected:
600 InventoryResult CanStore(Item* pItem, bool swap) override;
601 };
602
604 {
605 public:
606 BankMoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId) :
607 MoveItemData(guild, player, container, slotId) { }
608
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;
613 void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData* pOther, uint32 splitedAmount) override;
614 Item* StoreItem(CharacterDatabaseTransaction trans, Item* pItem) override;
615 void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData* pFrom, uint32 count) const override;
616 void LogAction(MoveItemData* pFrom) const override;
617
618 protected:
619 InventoryResult CanStore(Item* pItem, bool swap) override;
620
621 private:
622 Item* _StoreItem(CharacterDatabaseTransaction trans, BankTab* pTab, Item* pItem, ItemPosCount& pos, bool clone) const;
623 bool _ReserveSpace(uint8 slotId, Item* pItem, Item* pItemDest, uint32& count);
624 void CanStoreItemInTab(Item* pItem, uint8 skipSlotId, bool merge, uint32& count);
625 };
626
627 public:
628 static void SendCommandResult(WorldSession* session, GuildCommandType type, GuildCommandError errCode, std::string_view param = "");
629 static void SendSaveEmblemResult(WorldSession* session, GuildEmblemError errCode);
630
631 Guild();
632 ~Guild();
633
634 bool Create(Player* pLeader, std::string_view name);
635 void Disband();
636
637 // Getters
638 ObjectGuid::LowType GetId() const { return m_id; }
639 ObjectGuid GetLeaderGUID() const { return m_leaderGuid; }
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; }
643 uint32 GetMemberCount() const { return m_members.size(); }
644 time_t GetCreatedDate() const { return m_createdDate; }
645 uint64 GetBankMoney() const { return m_bankMoney; }
646
647 bool SetName(std::string_view name);
648
649 // Handle client commands
650 void HandleRoster(WorldSession* session);
651 void HandleQuery(WorldSession* session);
652 void HandleSetMOTD(WorldSession* session, std::string_view motd);
653 void HandleSetInfo(WorldSession* session, std::string_view info);
654 void HandleSetEmblem(WorldSession* session, EmblemInfo const& emblemInfo);
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);
659 void HandleBuyBankTab(WorldSession* session, uint8 tabId);
660 void HandleInviteMember(WorldSession* session, std::string_view name);
661 void HandleAcceptMember(WorldSession* session);
662 void HandleLeaveMember(WorldSession* session);
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);
666 void HandleRemoveRank(WorldSession* session, uint8 rankId);
667 void HandleRemoveLowestRank(WorldSession* session);
668 void HandleMemberDepositMoney(WorldSession* session, uint32 amount);
669 bool HandleMemberWithdrawMoney(WorldSession* session, uint32 amount, bool repair = false);
670 void HandleMemberLogout(WorldSession* session);
671 void HandleDisband(WorldSession* session);
672
673 void UpdateMemberData(Player* player, uint8 dataid, uint32 value);
674 void OnPlayerStatusChange(Player* player, uint32 flag, bool state);
675
676 // Send info to client
677 void SendInfo(WorldSession* session) const;
678 void SendEventLog(WorldSession* session) const;
679 void SendBankLog(WorldSession* session, uint8 tabId) const;
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;
682 void SendBankTabText(WorldSession* session, uint8 tabId) const;
683 void SendPermissions(WorldSession* session) const;
684 void SendMoneyInfo(WorldSession* session) const;
685 void SendLoginInfo(WorldSession* session);
686
687 // Load from DB
688 bool LoadFromDB(Field* fields);
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);
696 bool Validate();
697
698 // Broadcasts
699 void BroadcastToGuild(WorldSession* session, bool officerOnly, std::string_view msg, uint32 language = LANG_UNIVERSAL) const;
700 void BroadcastPacketToRank(WorldPacket const* packet, uint8 rankId) const;
701 void BroadcastPacket(WorldPacket const* packet) const;
702
703 void MassInviteToEvent(WorldSession* session, uint32 minLevel, uint32 maxLevel, uint32 minRank);
704
705 template<class Do>
706 void BroadcastWorker(Do& _do, Player* except = nullptr)
707 {
708 for (auto itr = m_members.begin(); itr != m_members.end(); ++itr)
709 if (Player* player = itr->second.FindConnectedPlayer())
710 if (player != except)
711 _do(player);
712 }
713
714 // Members
715 // Adds member to guild. If rankId == GUILD_RANK_NONE, lowest rank is assigned.
716 bool AddMember(CharacterDatabaseTransaction trans, ObjectGuid guid, uint8 rankId = GUILD_RANK_NONE);
717 bool DeleteMember(CharacterDatabaseTransaction trans, ObjectGuid guid, bool isDisbanding = false, bool isKicked = false);
718 bool ChangeMemberRank(CharacterDatabaseTransaction trans, ObjectGuid guid, uint8 newRank);
719 bool IsMember(ObjectGuid guid) const;
720 uint32 GetMembersCount() const { return uint32(m_members.size()); }
721 uint64 GetMemberAvailableMoneyForRepairItems(ObjectGuid guid) const;
722
723 // Bank
724 void SwapItems(Player* player, uint8 tabId, uint8 slotId, uint8 destTabId, uint8 destSlotId, uint32 splitedAmount);
725 void SwapItemsWithInventory(Player* player, bool toChar, uint8 tabId, uint8 slotId, uint8 playerBag, uint8 playerSlotId, uint32 splitedAmount);
726
727 // Bank tabs
728 void SetBankTabText(uint8 tabId, std::string_view text);
729
730 EmblemInfo const& GetEmblemInfo() const { return m_emblemInfo; }
731 void ResetTimes();
732
733 Trinity::unique_weak_ptr<Guild> GetWeakPtr() const { return m_weakRef; }
734 void SetWeakPtr(Trinity::unique_weak_ptr<Guild> weakRef) { m_weakRef = std::move(weakRef); }
735
736 protected:
738 std::string m_name;
740 std::string m_motd;
741 std::string m_info;
743
747
748 std::vector<RankInfo> m_ranks;
749 std::unordered_map<uint32, Member> m_members;
750 std::vector<BankTab> m_bankTabs;
751
752 // These are actually ordered lists. The first element is the oldest entry.
754 std::array<LogHolder<BankEventLogEntry>, GUILD_BANK_MAX_TABS + 1> m_bankEventLog = {};
755
757
758 private:
759 inline uint8 _GetRanksSize() const { return uint8(m_ranks.size()); }
760 inline RankInfo const* GetRankInfo(uint8 rankId) const { return rankId < _GetRanksSize() ? &m_ranks[rankId] : nullptr; }
761 inline RankInfo* GetRankInfo(uint8 rankId) { return rankId < _GetRanksSize() ? &m_ranks[rankId] : nullptr; }
762 bool _HasRankRight(Player* player, uint32 right) const;
763
764 inline uint8 _GetLowestRankId() const { return uint8(m_ranks.size() - 1); }
765
766 inline uint8 _GetPurchasedTabsSize() const { return uint8(m_bankTabs.size()); }
767 inline BankTab* GetBankTab(uint8 tabId) { return tabId < m_bankTabs.size() ? &m_bankTabs[tabId] : nullptr; }
768 inline BankTab const* GetBankTab(uint8 tabId) const { return tabId < m_bankTabs.size() ? &m_bankTabs[tabId] : nullptr; }
769
770 inline Member const* GetMember(ObjectGuid guid) const
771 {
772 auto itr = m_members.find(guid.GetCounter());
773 return (itr != m_members.end()) ? &itr->second : nullptr;
774 }
775
777 {
778 auto itr = m_members.find(guid.GetCounter());
779 return (itr != m_members.end()) ? &itr->second : nullptr;
780 }
781
782 inline Member* GetMember(std::string_view name)
783 {
784 for (auto itr = m_members.begin(); itr != m_members.end(); ++itr)
785 if (itr->second.GetName() == name)
786 return &itr->second;
787
788 return nullptr;
789 }
790
791 static void _DeleteMemberFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType lowguid);
792
793 // Tries to create new bank tab
794 void _CreateNewBankTab();
795 // Creates default guild ranks with names in given locale
796 void _CreateDefaultGuildRanks(CharacterDatabaseTransaction trans, LocaleConstant loc);
797 // Creates new rank
798 bool _CreateRank(CharacterDatabaseTransaction trans, std::string_view name, uint32 rights);
799 // Update account number when member added/removed from guild
800 void _UpdateAccountsNumber();
801 bool _IsLeader(Player* player) const;
802 void _DeleteBankItems(CharacterDatabaseTransaction trans, bool removeItemsFromDB = false);
803 bool _ModifyBankMoney(CharacterDatabaseTransaction trans, uint64 amount, bool add);
804 void _SetLeaderGUID(Member& pLeader);
805
806 void _SetRankBankMoneyPerDay(uint8 rankId, uint32 moneyPerDay);
807 void _SetRankBankTabRightsAndSlots(uint8 rankId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB = true);
808 int8 _GetRankBankTabRights(uint8 rankId, uint8 tabId) const;
809 uint32 _GetRankRights(uint8 rankId) const;
810 int32 _GetRankBankMoneyPerDay(uint8 rankId) const;
811 int32 _GetRankBankTabSlotsPerDay(uint8 rankId, uint8 tabId) const;
812 std::string _GetRankName(uint8 rankId) const;
813
814 int32 _GetMemberRemainingSlots(Member const& member, uint8 tabId) const;
815 int32 _GetMemberRemainingMoney(Member const& member) const;
816 void _UpdateMemberWithdrawSlots(CharacterDatabaseTransaction trans, ObjectGuid guid, uint8 tabId);
817 bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, uint32 rights) const;
818
819 void _LogEvent(GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2 = 0, uint8 newRank = 0);
820 void _LogBankEvent(CharacterDatabaseTransaction trans, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount = 0, uint8 destTabId = 0);
821
822 Item* _GetItem(uint8 tabId, uint8 slotId) const;
823 void _RemoveItem(CharacterDatabaseTransaction trans, uint8 tabId, uint8 slotId);
824 void _MoveItems(MoveItemData* pSrc, MoveItemData* pDest, uint32 splitedAmount);
825 bool _DoItemsMove(MoveItemData* pSrc, MoveItemData* pDest, bool sendError, uint32 splitedAmount = 0);
826
827 void _SendBankContentUpdate(MoveItemData* pSrc, MoveItemData* pDest) const;
828 void _SendBankContentUpdate(uint8 tabId, SlotIds slots) const;
829
830 void _BroadcastEvent(GuildEvents guildEvent, ObjectGuid guid, Optional<std::string_view> param1 = {}, Optional<std::string_view> param2 = {}, Optional<std::string_view> param3 = {}) const;
831};
832#endif
LocaleConstant
Definition: Common.h:48
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
#define TC_GAME_API
Definition: Define.h:114
uint8_t uint8
Definition: Define.h:135
int8_t int8
Definition: Define.h:131
int32_t int32
Definition: Define.h:129
uint64_t uint64
Definition: Define.h:132
#define UI64LIT(N)
Definition: Define.h:118
uint16_t uint16
Definition: Define.h:134
uint32_t uint32
Definition: Define.h:133
GuildEvents
Definition: Guild.h:154
@ GE_LEFT
Definition: Guild.h:159
@ GE_LEADER_IS
Definition: Guild.h:161
@ GE_TABARDCHANGE
Definition: Guild.h:164
@ GE_REMOVED
Definition: Guild.h:160
@ GE_JOINED
Definition: Guild.h:158
@ GE_RANK_DELETED
Definition: Guild.h:166
@ GE_GUILDBANKBAGSLOTS_CHANGED
Definition: Guild.h:169
@ GE_PROMOTION
Definition: Guild.h:155
@ GE_BANK_TAB_UPDATED
Definition: Guild.h:171
@ GE_BANK_MONEY_SET
Definition: Guild.h:172
@ GE_DISBANDED
Definition: Guild.h:163
@ GE_BANK_TEXT_CHANGED
Definition: Guild.h:174
@ GE_SIGNED_OFF
Definition: Guild.h:168
@ GE_MOTD
Definition: Guild.h:157
@ GE_BANK_TAB_PURCHASED
TODO: Sent when items are moved in gbank - all players with bank open will send tab query.
Definition: Guild.h:170
@ GE_LEADER_CHANGED
Definition: Guild.h:162
@ GE_SIGNED_ON
Definition: Guild.h:167
@ GE_DEMOTION
Definition: Guild.h:156
@ GE_BANK_TAB_AND_MONEY_UPDATED
Definition: Guild.h:173
@ GE_RANK_UPDATED
Definition: Guild.h:165
GuildMisc
Definition: Guild.h:49
@ GUILD_RANKS_MIN_COUNT
Definition: Guild.h:53
@ GUILD_EVENT_LOG_GUID_UNDEFINED
Definition: Guild.h:58
@ GUILD_WITHDRAW_SLOT_UNLIMITED
Definition: Guild.h:57
@ TAB_UNDEFINED
Definition: Guild.h:59
@ GUILD_BANK_MONEY_LOGS_TAB
Definition: Guild.h:52
@ GUILD_WITHDRAW_MONEY_UNLIMITED
Definition: Guild.h:56
@ GUILD_BANK_MAX_SLOTS
Definition: Guild.h:51
@ GUILD_RANKS_MAX_COUNT
Definition: Guild.h:54
@ GUILD_BANK_MAX_TABS
Definition: Guild.h:50
@ GUILD_RANK_NONE
Definition: Guild.h:55
GuildMemberFlags
Definition: Guild.h:221
@ GUILDMEMBER_STATUS_AFK
Definition: Guild.h:224
@ GUILDMEMBER_STATUS_NONE
Definition: Guild.h:222
@ GUILDMEMBER_STATUS_MOBILE
Definition: Guild.h:226
@ GUILDMEMBER_STATUS_ONLINE
Definition: Guild.h:223
@ GUILDMEMBER_STATUS_DND
Definition: Guild.h:225
GuildBankRights
Definition: Guild.h:178
@ GUILD_BANK_RIGHT_PUT_ITEM
Definition: Guild.h:180
@ GUILD_BANK_RIGHT_VIEW_TAB
Definition: Guild.h:179
@ GUILD_BANK_RIGHT_FULL
Definition: Guild.h:184
@ GUILD_BANK_RIGHT_DEPOSIT_ITEM
Definition: Guild.h:183
@ GUILD_BANK_RIGHT_UPDATE_TEXT
Definition: Guild.h:181
constexpr uint64 GUILD_BANK_MONEY_LIMIT
Definition: Guild.h:62
GuildCommandType
Definition: Guild.h:106
@ GUILD_COMMAND_GUILD_CHAT
Definition: Guild.h:116
@ GUILD_COMMAND_CHANGE_LEADER
Definition: Guild.h:114
@ GUILD_COMMAND_FOUNDER
Definition: Guild.h:117
@ GUILD_COMMAND_INVITE
Definition: Guild.h:108
@ GUILD_COMMAND_REPAIR
Definition: Guild.h:122
@ GUILD_COMMAND_VIEW_TAB
Definition: Guild.h:120
@ GUILD_COMMAND_MOVE_ITEM
Definition: Guild.h:121
@ GUILD_COMMAND_QUIT
Definition: Guild.h:109
@ GUILD_COMMAND_CREATE
Definition: Guild.h:107
@ GUILD_COMMAND_PROMOTE
Definition: Guild.h:111
@ GUILD_COMMAND_DEMOTE
Definition: Guild.h:112
@ GUILD_COMMAND_PUBLIC_NOTE
Definition: Guild.h:119
@ GUILD_COMMAND_CHANGE_RANK
Definition: Guild.h:118
@ GUILD_COMMAND_REMOVE
Definition: Guild.h:113
@ GUILD_COMMAND_ROSTER
Definition: Guild.h:110
@ GUILD_COMMAND_EDIT_MOTD
Definition: Guild.h:115
GuildCommandError
Definition: Guild.h:126
@ ERR_GUILD_PERMISSIONS
Definition: Guild.h:136
@ ERR_GUILD_WITHDRAW_LIMIT
Definition: Guild.h:147
@ ERR_ALREADY_IN_GUILD_S
Definition: Guild.h:130
@ ERR_GUILD_PLAYER_NOT_IN_GUILD
Definition: Guild.h:137
@ ERR_GUILD_PLAYER_NOT_IN_GUILD_S
Definition: Guild.h:138
@ ERR_GUILD_RANK_IN_USE
Definition: Guild.h:144
@ ERR_GUILD_LEADER_LEAVE
Definition: Guild.h:135
@ ERR_GUILD_COMMAND_SUCCESS
Definition: Guild.h:127
@ ERR_INVITED_TO_GUILD
Definition: Guild.h:131
@ ERR_GUILD_RANKS_LOCKED
Definition: Guild.h:143
@ ERR_GUILD_NOT_ALLIED
Definition: Guild.h:140
@ ERR_GUILD_NOT_ENOUGH_MONEY
Definition: Guild.h:148
@ ERR_GUILD_INTERNAL
Definition: Guild.h:128
@ ERR_GUILD_BANK_FULL
Definition: Guild.h:149
@ ERR_GUILD_PLAYER_NOT_FOUND_S
Definition: Guild.h:139
@ ERR_GUILD_RANK_TOO_LOW_S
Definition: Guild.h:142
@ ERR_GUILD_IGNORING_YOU_S
Definition: Guild.h:145
@ ERR_GUILD_NAME_EXISTS_S
Definition: Guild.h:134
@ ERR_ALREADY_IN_GUILD
Definition: Guild.h:129
@ ERR_GUILD_RANK_TOO_HIGH_S
Definition: Guild.h:141
@ ERR_ALREADY_INVITED_TO_GUILD_S
Definition: Guild.h:132
@ ERR_GUILD_NAME_INVALID
Definition: Guild.h:133
@ ERR_GUILD_ITEM_NOT_FOUND
Definition: Guild.h:150
@ ERR_GUILD_UNK1
Definition: Guild.h:146
std::set< uint8 > SlotIds
Definition: Guild.h:281
GuildDefaultRanks
Definition: Guild.h:71
@ GR_MEMBER
Definition: Guild.h:76
@ GR_GUILDMASTER
Definition: Guild.h:73
@ GR_INITIATE
Definition: Guild.h:77
@ GR_OFFICER
Definition: Guild.h:74
@ GR_VETERAN
Definition: Guild.h:75
GuildBankEventLogTypes
Definition: Guild.h:188
@ GUILD_BANK_LOG_MOVE_ITEM
Definition: Guild.h:191
@ GUILD_BANK_LOG_WITHDRAW_ITEM
Definition: Guild.h:190
@ GUILD_BANK_LOG_DEPOSIT_MONEY
Definition: Guild.h:192
@ GUILD_BANK_LOG_DEPOSIT_ITEM
Definition: Guild.h:189
@ GUILD_BANK_LOG_WITHDRAW_MONEY
Definition: Guild.h:193
@ GUILD_BANK_LOG_UNK1
Definition: Guild.h:196
@ GUILD_BANK_LOG_REPAIR_MONEY
Definition: Guild.h:194
@ GUILD_BANK_LOG_MOVE_ITEM2
Definition: Guild.h:195
@ GUILD_BANK_LOG_BUY_SLOT
Definition: Guild.h:197
GuildRankRights
Definition: Guild.h:83
@ GR_RIGHT_EMPTY
Definition: Guild.h:84
@ GR_RIGHT_EOFFNOTE
Definition: Guild.h:96
@ GR_RIGHT_GCHATSPEAK
Definition: Guild.h:86
@ GR_RIGHT_OFFCHATSPEAK
Definition: Guild.h:88
@ GR_RIGHT_WITHDRAW_GOLD_LOCK
Definition: Guild.h:98
@ GR_RIGHT_ALL
Definition: Guild.h:102
@ GR_RIGHT_EPNOTE
Definition: Guild.h:94
@ GR_RIGHT_OFFCHATLISTEN
Definition: Guild.h:87
@ GR_RIGHT_GCHATLISTEN
Definition: Guild.h:85
@ GR_RIGHT_CREATE_GUILD_EVENT
Definition: Guild.h:101
@ GR_RIGHT_SETMOTD
Definition: Guild.h:93
@ GR_RIGHT_MODIFY_GUILD_INFO
Definition: Guild.h:97
@ GR_RIGHT_VIEWOFFNOTE
Definition: Guild.h:95
@ GR_RIGHT_WITHDRAW_REPAIR
Definition: Guild.h:99
@ GR_RIGHT_REMOVE
Definition: Guild.h:90
@ GR_RIGHT_WITHDRAW_GOLD
Definition: Guild.h:100
@ GR_RIGHT_INVITE
Definition: Guild.h:89
@ GR_RIGHT_DEMOTE
Definition: Guild.h:92
@ GR_RIGHT_PROMOTE
Definition: Guild.h:91
GuildMemberData
Definition: Guild.h:65
@ GUILD_MEMBER_DATA_LEVEL
Definition: Guild.h:67
@ GUILD_MEMBER_DATA_ZONEID
Definition: Guild.h:66
GuildEmblemError
Definition: Guild.h:211
@ ERR_GUILDEMBLEM_NOTGUILDMASTER
Definition: Guild.h:215
@ ERR_GUILDEMBLEM_INVALIDVENDOR
Definition: Guild.h:217
@ ERR_GUILDEMBLEM_INVALID_TABARD_COLORS
Definition: Guild.h:213
@ ERR_GUILDEMBLEM_NOTENOUGHMONEY
Definition: Guild.h:216
@ ERR_GUILDEMBLEM_SUCCESS
Definition: Guild.h:212
@ ERR_GUILDEMBLEM_NOGUILD
Definition: Guild.h:214
GuildEventLogTypes
Definition: Guild.h:201
@ GUILD_EVENT_LOG_LEAVE_GUILD
Definition: Guild.h:207
@ GUILD_EVENT_LOG_PROMOTE_PLAYER
Definition: Guild.h:204
@ GUILD_EVENT_LOG_UNINVITE_PLAYER
Definition: Guild.h:206
@ GUILD_EVENT_LOG_INVITE_PLAYER
Definition: Guild.h:202
@ GUILD_EVENT_LOG_DEMOTE_PLAYER
Definition: Guild.h:205
@ GUILD_EVENT_LOG_JOIN_GUILD
Definition: Guild.h:203
InventoryResult
Definition: ItemDefines.h:25
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition: Optional.h:25
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
Definition: QuestPools.cpp:51
@ LANG_UNIVERSAL
uint32 m_style
Definition: Guild.h:246
uint32 m_backgroundColor
Definition: Guild.h:250
uint32 GetStyle() const
Definition: Guild.h:239
uint32 GetColor() const
Definition: Guild.h:240
uint32 m_borderColor
Definition: Guild.h:249
uint32 GetBackgroundColor() const
Definition: Guild.h:243
uint32 GetBorderStyle() const
Definition: Guild.h:241
EmblemInfo()
Definition: Guild.h:233
uint32 m_borderStyle
Definition: Guild.h:248
uint32 GetBorderColor() const
Definition: Guild.h:242
uint32 m_color
Definition: Guild.h:247
Class used to access individual fields of database query result.
Definition: Field.h:92
int32 GetSlots() const
Definition: Guild.h:272
void SetGuildMasterValues()
Definition: Guild.h:261
int8 GetRights() const
Definition: Guild.h:273
int8 GetTabId() const
Definition: Guild.h:271
GuildBankRightsAndSlots(uint8 _tabId, uint8 _rights, uint32 _slots)
Definition: Guild.h:259
void SetSlots(uint32 _slots)
Definition: Guild.h:268
void SetTabId(uint8 _tabId)
Definition: Guild.h:267
void SetRights(uint8 _rights)
Definition: Guild.h:269
GuildBankRightsAndSlots(uint8 _tabId)
Definition: Guild.h:258
GuildBankEventLogTypes m_eventType
Definition: Guild.h:428
ObjectGuid::LowType m_playerGuid
Definition: Guild.h:430
BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId)
Definition: Guild.h:414
static bool IsMoneyEvent(GuildBankEventLogTypes eventType)
Definition: Guild.h:401
bool IsMoneyEvent() const
Definition: Guild.h:409
BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, uint8 tabId, GuildBankEventLogTypes eventType, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId)
Definition: Guild.h:418
bool IsBank() const override
Definition: Guild.h:609
BankMoveItemData(Guild *guild, Player *player, uint8 container, uint8 slotId)
Definition: Guild.h:606
std::string const & GetName() const
Definition: Guild.h:524
std::string const & GetIcon() const
Definition: Guild.h:525
std::string m_icon
Definition: Guild.h:537
std::string m_name
Definition: Guild.h:536
Item * GetItem(uint8 slotId) const
Definition: Guild.h:528
uint8 m_tabId
Definition: Guild.h:533
std::string const & GetText() const
Definition: Guild.h:526
ObjectGuid::LowType m_guildId
Definition: Guild.h:532
std::string m_text
Definition: Guild.h:538
GuildEventLogTypes m_eventType
Definition: Guild.h:391
ObjectGuid::LowType m_playerGuid2
Definition: Guild.h:393
EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank)
Definition: Guild.h:382
EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank)
Definition: Guild.h:379
ObjectGuid::LowType m_playerGuid1
Definition: Guild.h:392
virtual void SaveToDB(CharacterDatabaseTransaction trans) const =0
uint32 GetGUID() const
Definition: Guild.h:364
virtual ~LogEntry()
Definition: Guild.h:362
uint64 GetTimestamp() const
Definition: Guild.h:365
LogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp)
Definition: Guild.h:361
ObjectGuid::LowType m_guildId
Definition: Guild.h:370
uint32 m_guid
Definition: Guild.h:371
uint64 m_timestamp
Definition: Guild.h:372
std::list< Entry > & GetGuildLog()
Definition: Guild.h:455
uint32 m_nextGUID
Definition: Guild.h:461
uint32 const m_maxRecords
Definition: Guild.h:460
std::list< Entry > m_log
Definition: Guild.h:459
std::list< Entry > const & GetGuildLog() const
Definition: Guild.h:456
bool CanInsert() const
Definition: Guild.h:444
std::string GetOfficerNote() const
Definition: Guild.h:314
std::string const & GetName() const
Definition: Guild.h:309
void RemFlag(uint8 var)
Definition: Guild.h:302
uint8 m_gender
Definition: Guild.h:344
ObjectGuid m_guid
Definition: Guild.h:339
bool IsRankNotLower(uint8 rankId) const
Definition: Guild.h:326
bool IsSamePlayer(ObjectGuid guid) const
Definition: Guild.h:327
bool IsRank(uint8 rankId) const
Definition: Guild.h:325
uint8 GetClass() const
Definition: Guild.h:315
uint8 GetFlags() const
Definition: Guild.h:318
std::string m_name
Definition: Guild.h:340
uint32 GetAccountId() const
Definition: Guild.h:310
std::string GetPublicNote() const
Definition: Guild.h:313
void SetZoneID(uint32 id)
Definition: Guild.h:298
uint64 m_logoutTime
Definition: Guild.h:346
uint8 m_class
Definition: Guild.h:343
uint8 GetLevel() const
Definition: Guild.h:317
void AddFlag(uint8 var)
Definition: Guild.h:301
void SetLevel(uint8 var)
Definition: Guild.h:299
uint32 GetZoneId() const
Definition: Guild.h:319
uint8 GetGender() const
Definition: Guild.h:316
void ResetFlags()
Definition: Guild.h:303
uint32 m_zoneId
Definition: Guild.h:341
uint8 m_rankId
Definition: Guild.h:349
ObjectGuid::LowType m_guildId
Definition: Guild.h:337
uint8 GetRankId() const
Definition: Guild.h:311
uint32 m_accountId
Definition: Guild.h:347
ObjectGuid GetGUID() const
Definition: Guild.h:308
uint8 m_level
Definition: Guild.h:342
std::string m_officerNote
Definition: Guild.h:351
std::string m_publicNote
Definition: Guild.h:350
bool IsOnline() const
Definition: Guild.h:320
uint8 m_flags
Definition: Guild.h:345
uint64 GetLogoutTime() const
Definition: Guild.h:312
Item * m_pClonedItem
Definition: Guild.h:584
Player * m_pPlayer
Definition: Guild.h:580
std::vector< ItemPosCount > m_vec
Definition: Guild.h:585
virtual Item * StoreItem(CharacterDatabaseTransaction trans, Item *pItem)=0
virtual InventoryResult CanStore(Item *pItem, bool swap)=0
Item * GetItem(bool isCloned=false) const
Definition: Guild.h:572
virtual void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData *pFrom, uint32 count) const =0
Guild * m_pGuild
Definition: Guild.h:579
uint8 GetSlotId() const
Definition: Guild.h:574
uint8 GetContainer() const
Definition: Guild.h:573
Item * m_pItem
Definition: Guild.h:583
virtual bool HasWithdrawRights(MoveItemData *) const
Definition: Guild.h:556
virtual bool HasStoreRights(MoveItemData *) const
Definition: Guild.h:554
virtual bool IsBank() const =0
uint8 m_container
Definition: Guild.h:581
virtual bool InitItem()=0
virtual void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData *pOther, uint32 splitedAmount=0)=0
PlayerMoveItemData(Guild *guild, Player *player, uint8 container, uint8 slotId)
Definition: Guild.h:591
bool IsBank() const override
Definition: Guild.h:594
uint32 m_rights
Definition: Guild.h:506
uint8 GetId() const
Definition: Guild.h:477
std::string const & GetName() const
Definition: Guild.h:479
uint32 GetRights() const
Definition: Guild.h:482
RankInfo(ObjectGuid::LowType guildId, uint8 rankId, std::string_view name, uint32 rights, uint32 money)
Definition: Guild.h:470
int8 GetBankTabRights(uint8 tabId) const
Definition: Guild.h:489
uint32 m_bankMoneyPerDay
Definition: Guild.h:507
int32 GetBankTabSlotsPerDay(uint8 tabId) const
Definition: Guild.h:494
RankInfo(ObjectGuid::LowType guildId)
Definition: Guild.h:469
std::string m_name
Definition: Guild.h:505
ObjectGuid::LowType m_guildId
Definition: Guild.h:503
uint8 m_rankId
Definition: Guild.h:504
int32 GetBankMoneyPerDay() const
Definition: Guild.h:485
Definition: Guild.h:284
uint64 GetBankMoney() const
Definition: Guild.h:645
void SetWeakPtr(Trinity::unique_weak_ptr< Guild > weakRef)
Definition: Guild.h:734
uint64 m_bankMoney
Definition: Guild.h:746
ObjectGuid GetLeaderGUID() const
Definition: Guild.h:639
Member * GetMember(ObjectGuid guid)
Definition: Guild.h:776
std::vector< BankTab > m_bankTabs
Definition: Guild.h:750
void BroadcastWorker(Do &_do, Player *except=nullptr)
Definition: Guild.h:706
ObjectGuid::LowType GetId() const
Definition: Guild.h:638
Member * GetMember(std::string_view name)
Definition: Guild.h:782
uint32 GetMemberCount() const
Definition: Guild.h:643
uint32 m_accountsNumber
Definition: Guild.h:745
time_t m_createdDate
Definition: Guild.h:742
uint8 _GetPurchasedTabsSize() const
Definition: Guild.h:766
std::vector< RankInfo > m_ranks
Definition: Guild.h:748
std::string m_name
Definition: Guild.h:738
RankInfo const * GetRankInfo(uint8 rankId) const
Definition: Guild.h:760
std::string const & GetName() const
Definition: Guild.h:640
ObjectGuid m_leaderGuid
Definition: Guild.h:739
LogHolder< EventLogEntry > m_eventLog
Definition: Guild.h:753
Member const * GetMember(ObjectGuid guid) const
Definition: Guild.h:770
time_t GetCreatedDate() const
Definition: Guild.h:644
std::unordered_map< uint32, Member > m_members
Definition: Guild.h:749
RankInfo * GetRankInfo(uint8 rankId)
Definition: Guild.h:761
std::string const & GetInfo() const
Definition: Guild.h:642
EmblemInfo const & GetEmblemInfo() const
Definition: Guild.h:730
std::string m_motd
Definition: Guild.h:740
uint8 _GetRanksSize() const
Definition: Guild.h:759
BankTab * GetBankTab(uint8 tabId)
Definition: Guild.h:767
std::string const & GetMOTD() const
Definition: Guild.h:641
EmblemInfo m_emblemInfo
Definition: Guild.h:744
Trinity::unique_weak_ptr< Guild > m_weakRef
Definition: Guild.h:756
std::string m_info
Definition: Guild.h:741
uint32 GetMembersCount() const
Definition: Guild.h:720
uint8 _GetLowestRankId() const
Definition: Guild.h:764
Trinity::unique_weak_ptr< Guild > GetWeakPtr() const
Definition: Guild.h:733
ObjectGuid::LowType m_id
Definition: Guild.h:737
BankTab const * GetBankTab(uint8 tabId) const
Definition: Guild.h:768
Definition: Item.h:62
LowType GetCounter() const
Definition: ObjectGuid.h:158
uint32 LowType
Definition: ObjectGuid.h:134
Definition: Player.h:915
Player session in the World.
Definition: WorldSession.h:456
void LoadFromDB()
Definition: AddonMgr.cpp:40
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
TC_GAME_API Player * FindConnectedPlayer(ObjectGuid const &)