TrinityCore
Loading...
Searching...
No Matches
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 "Common.h"
22#include "DatabaseEnvFwd.h"
23#include "DBCEnums.h"
24#include "ObjectGuid.h"
25#include "Optional.h"
26#include "RaceMask.h"
27#include "SharedDefines.h"
28#include "UniqueTrackablePtr.h"
29#include <set>
30#include <unordered_map>
31
33class Item;
34class Player;
35class WorldObject;
36class WorldPacket;
37class WorldSession;
38struct ItemPosCount;
40
41namespace WorldPackets
42{
43 namespace Guild
44 {
47 class GuildNews;
48 class SaveGuildEmblem;
49 }
50}
51
67
68constexpr uint64 GUILD_BANK_MONEY_LIMIT = UI64LIT(100000000000);
69
76
77// Base Club/Community roles. Do not change.
79{
80 Owner = 1,
81 Leader = 2,
82 Moderator = 3,
83 Member = 4
84};
85
86// Base Club/Community chat stream types. Do not change.
88{
89 General = 0,
90 Guild = 1,
91 Officer = 2,
92 Other = 3
93};
94
95enum class GuildRankId : uint8
96{
97 GuildMaster = 0
98};
99
100enum class GuildRankOrder : uint8 { };
101
103{
104 GR_RIGHT_NONE = 0x00000000,
109 GR_RIGHT_INVITE = 0x00000010,
110 GR_RIGHT_REMOVE = 0x00000020,
111 GR_RIGHT_ROSTER = 0x00000040,
112 GR_RIGHT_PROMOTE = 0x00000080,
113 GR_RIGHT_DEMOTE = 0x00000100,
114 GR_RIGHT_UNK_200 = 0x00000200,
115 GR_RIGHT_UNK_400 = 0x00000400,
116 GR_RIGHT_UNK_800 = 0x00000800,
117 GR_RIGHT_SETMOTD = 0x00001000,
120 GR_RIGHT_EOFFNOTE = 0x00008000,
122 GR_RIGHT_WITHDRAW_GOLD_LOCK = 0x00020000, // remove money withdraw capacity
123 GR_RIGHT_WITHDRAW_REPAIR = 0x00040000, // withdraw for repair
124 GR_RIGHT_WITHDRAW_GOLD = 0x00080000, // withdraw gold
125 GR_RIGHT_CREATE_GUILD_EVENT = 0x00100000, // wotlk
126 GR_RIGHT_ALL = 0x00DDFFBF
128
148
184
194
208
218
228
237
250
259
261
262// Guild Challenge
263#define GUILD_CHALLENGES_TYPES 6
264
265const uint32 GuildChallengeGoldReward[GUILD_CHALLENGES_TYPES] = { 0, 250, 1000, 500, 250, 500 };
266const uint32 GuildChallengeMaxLevelGoldReward[GUILD_CHALLENGES_TYPES] = { 0, 125, 500, 250, 125, 250 };
268
269// Emblem info
271{
272 public:
273 EmblemInfo() : m_style(0), m_color(0), m_borderStyle(0), m_borderColor(0), m_backgroundColor(0) { }
274
275 bool LoadFromDB(Field* fields);
276 void SaveToDB(ObjectGuid::LowType guildId) const;
277 void ReadPacket(WorldPackets::Guild::SaveGuildEmblem& packet);
279 {
280 return ValidateEmblemColors(m_style, m_color, m_borderStyle, m_borderColor, m_backgroundColor);
281 }
282 static bool ValidateEmblemColors(uint32 style, uint32 color, uint32 borderStyle, uint32 borderColor, uint32 backgroundColor);
283
284 uint32 GetStyle() const { return m_style; }
285 uint32 GetColor() const { return m_color; }
286 uint32 GetBorderStyle() const { return m_borderStyle; }
287 uint32 GetBorderColor() const { return m_borderColor; }
288 uint32 GetBackgroundColor() const { return m_backgroundColor; }
289
290 private:
296};
297
298// Structure for storing guild bank rights and remaining slots together.
300{
301 public:
303 GuildBankRightsAndSlots(uint8 _tabId) : tabId(_tabId), rights(0), slots(0) { }
304 GuildBankRightsAndSlots(uint8 _tabId, int8 _rights, int32 _slots) : tabId(_tabId), rights(_rights), slots(_slots) { }
305
311
312 void SetTabId(uint8 _tabId) { tabId = _tabId; }
313 void SetSlots(int32 _slots) { slots = _slots; }
314 void SetRights(int8 _rights) { rights = _rights; }
315
316 int8 GetTabId() const { return tabId; }
317 int32 GetSlots() const { return slots; }
318 int8 GetRights() const { return rights; }
319
320 private:
324};
325
326using SlotIds = std::set<uint8>;
327
329{
330 public:
331 // Class representing guild member
332 class Member
333 {
334 public:
335 Member(ObjectGuid::LowType guildId, ObjectGuid guid, GuildRankId rankId);
336
337 void SetStats(Player* player);
338 void SetStats(std::string_view name, uint8 level, uint8 race, uint8 _class, uint8 gender, uint32 zoneId, uint32 accountId, uint32 reputation);
339 bool CheckStats() const;
340
341 void SetPublicNote(std::string_view publicNote);
342 void SetOfficerNote(std::string_view officerNote);
343 void SetZoneId(uint32 id) { m_zoneId = id; }
344 void SetAchievementPoints(uint32 val) { m_achievementPoints = val; }
345 void SetLevel(uint8 var) { m_level = var; }
346
347 void AddFlag(uint8 var) { m_flags |= var; }
348 void RemFlag(uint8 var) { m_flags &= ~var; }
350
351 bool LoadFromDB(Field* fields);
352 void SaveToDB(CharacterDatabaseTransaction trans) const;
353
354 ObjectGuid const& GetGUID() const { return m_guid; }
355 std::string_view GetName() const { return m_name; }
356 uint32 GetAccountId() const { return m_accountId; }
357 GuildRankId GetRankId() const { return m_rankId; }
358 uint64 GetLogoutTime() const { return m_logoutTime; }
359 float GetInactiveDays() const;
360 std::string_view GetPublicNote() const { return m_publicNote; }
361 std::string_view GetOfficerNote() const { return m_officerNote; }
362 uint8 GetRace() const { return m_race; }
363 uint8 GetClass() const { return m_class; }
364 uint8 GetGender() const { return m_gender; }
365 uint8 GetLevel() const { return m_level; }
366 uint8 GetFlags() const { return m_flags; }
367 uint32 GetZoneId() const { return m_zoneId; }
368 uint32 GetAchievementPoints() const { return m_achievementPoints; }
369 uint64 GetTotalActivity() const { return m_totalActivity; }
370 uint64 GetWeekActivity() const { return m_weekActivity; }
371 uint32 GetTotalReputation() const { return m_totalReputation; }
372 uint32 GetWeekReputation() const { return m_weekReputation; }
373
374 void SetTrackedCriteriaIds(std::set<uint32> criteriaIds) { m_trackedCriteriaIds = std::move(criteriaIds); }
375 bool IsTrackingCriteriaId(uint32 criteriaId) const { return m_trackedCriteriaIds && m_trackedCriteriaIds->contains(criteriaId); }
376
377 bool IsOnline() const { return (m_flags & GUILDMEMBER_STATUS_ONLINE); }
378
379 void ChangeRank(CharacterDatabaseTransaction trans, GuildRankId newRank);
380
381 inline void UpdateLogoutTime();
382 inline bool IsRank(GuildRankId rankId) const { return m_rankId == rankId; }
383 inline bool IsSamePlayer(ObjectGuid guid) const { return m_guid == guid; }
384
385 void UpdateBankTabWithdrawValue(CharacterDatabaseTransaction trans, uint8 tabId, uint32 amount);
386 void UpdateBankMoneyWithdrawValue(CharacterDatabaseTransaction trans, uint64 amount);
387 uint32 GetBankTabWithdrawValue(uint8 tabId) const { return m_bankWithdraw[tabId]; }
388 uint64 GetBankMoneyWithdrawValue() const { return m_bankWithdrawMoney; }
389 void ResetValues(bool weekly = false);
390
391 Player* FindPlayer() const;
392 Player* FindConnectedPlayer() const;
393
394 private:
396 // Fields from characters table
398 std::string m_name;
407 // Fields from guild_member table
409 std::string m_publicNote;
410 std::string m_officerNote;
411
413
414 std::array<uint32, GUILD_BANK_MAX_TABS> m_bankWithdraw;
421 };
422
423 private:
424 // Base class for event entries
426 {
427 public:
428 LogEntry(ObjectGuid::LowType guildId, uint32 guid);
429 LogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp) : m_guildId(guildId), m_guid(guid), m_timestamp(timestamp) { }
430 virtual ~LogEntry() { }
431
432 uint32 GetGUID() const { return m_guid; }
433 time_t GetTimestamp() const { return m_timestamp; }
434
435 virtual void SaveToDB(CharacterDatabaseTransaction trans) const = 0;
436
437 protected:
441 };
442
443 // Event log entry
444 class EventLogEntry : public LogEntry
445 {
446 public:
447 EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) :
448 LogEntry(guildId, guid), m_eventType(eventType), m_playerGuid1(playerGuid1), m_playerGuid2(playerGuid2), m_newRank(newRank) { }
449
450 EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) :
451 LogEntry(guildId, guid, timestamp), m_eventType(eventType), m_playerGuid1(playerGuid1), m_playerGuid2(playerGuid2), m_newRank(newRank) { }
452
454
455 void SaveToDB(CharacterDatabaseTransaction trans) const override;
456 void WritePacket(WorldPackets::Guild::GuildEventLogQueryResults& packet) const;
457
458 private:
463 };
464
465 // Bank event log entry
467 {
468 public:
470 {
471 return
472 eventType == GUILD_BANK_LOG_DEPOSIT_MONEY ||
473 eventType == GUILD_BANK_LOG_WITHDRAW_MONEY ||
474 eventType == GUILD_BANK_LOG_REPAIR_MONEY ||
476 eventType == GUILD_BANK_LOG_BUY_TAB ||
478 }
479
480 bool IsMoneyEvent() const
481 {
482 return IsMoneyEvent(m_eventType);
483 }
484
485 BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount, uint8 destTabId) :
486 LogEntry(guildId, guid), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid),
487 m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { }
488
489 BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, uint8 tabId, GuildBankEventLogTypes eventType, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount, uint8 destTabId) :
490 LogEntry(guildId, guid, timestamp), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid),
491 m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { }
492
494
495 void SaveToDB(CharacterDatabaseTransaction trans) const override;
496 void WritePacket(WorldPackets::Guild::GuildBankLogQueryResults& packet) const;
497
498 private:
505 };
506
507 // News log entry
508 class NewsLogEntry : public LogEntry
509 {
510 public:
512 LogEntry(guildId, guid), m_type(type), m_playerGuid(playerGuid), m_flags(flags), m_value(value) { }
513
514 NewsLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildNews type, ObjectGuid playerGuid, uint32 flags, uint32 value) :
515 LogEntry(guildId, guid, timestamp), m_type(type), m_playerGuid(playerGuid), m_flags(flags), m_value(value) { }
516
518
519 GuildNews GetType() const { return m_type; }
520 ObjectGuid GetPlayerGuid() const { return m_playerGuid; }
521 uint32 GetValue() const { return m_value; }
522 uint32 GetFlags() const { return m_flags; }
523 void SetSticky(bool sticky)
524 {
525 if (sticky)
526 m_flags |= 1;
527 else
528 m_flags &= ~1;
529 }
530
531 void SaveToDB(CharacterDatabaseTransaction trans) const override;
532 void WritePacket(WorldPackets::Guild::GuildNews& newsPacket) const;
533
534 private:
539 };
540
541 // Class encapsulating work with events collection
542 template <typename Entry>
544 {
545 public:
546 LogHolder();
547
548 // Checks if new log entry can be added to holder
549 bool CanInsert() const { return m_log.size() < m_maxRecords; }
550
551 // Adds event from DB to collection
552 template <typename... Ts>
553 void LoadEvent(Ts&&... args);
554
555 // Adds new event to collection and saves it to DB
556 template <typename... Ts>
557 Entry& AddEvent(CharacterDatabaseTransaction trans, Ts&&... args);
558
559 uint32 GetNextGUID();
560 std::list<Entry>& GetGuildLog() { return m_log; }
561 std::list<Entry> const& GetGuildLog() const { return m_log; }
562
563 private:
564 std::list<Entry> m_log;
567 };
568
569 // Class encapsulating guild rank data
571 {
572 public:
573 RankInfo(): m_guildId(UI64LIT(0)), m_rankId(GuildRankId(0xFF)), m_rankOrder(GuildRankOrder(0)), m_rights(GR_RIGHT_NONE), m_bankMoneyPerDay(0) { }
574 RankInfo(ObjectGuid::LowType guildId) : m_guildId(guildId), m_rankId(GuildRankId(0xFF)), m_rankOrder(GuildRankOrder(0)), m_rights(GR_RIGHT_NONE), m_bankMoneyPerDay(0) { }
575 RankInfo(ObjectGuid::LowType guildId, GuildRankId rankId, GuildRankOrder rankOrder, std::string_view name, uint32 rights, uint32 money) :
576 m_guildId(guildId), m_rankId(rankId), m_rankOrder(rankOrder), m_name(name), m_rights(rights), m_bankMoneyPerDay(money) { }
577
578 void LoadFromDB(Field* fields);
579 void SaveToDB(CharacterDatabaseTransaction trans) const;
580
581 GuildRankId GetId() const { return m_rankId; }
582
583 GuildRankOrder GetOrder() const { return m_rankOrder; }
584 void SetOrder(GuildRankOrder rankOrder) { m_rankOrder = rankOrder; }
585
586 std::string const& GetName() const { return m_name; }
587 void SetName(std::string_view name);
588
589 uint32 GetRights() const { return m_rights; }
590 void SetRights(uint32 rights);
591
593 {
594 return m_rankId != GuildRankId::GuildMaster ? m_bankMoneyPerDay : GUILD_WITHDRAW_MONEY_UNLIMITED;
595 }
596
597 void SetBankMoneyPerDay(uint32 money);
598
599 inline int8 GetBankTabRights(uint8 tabId) const
600 {
601 return tabId < GUILD_BANK_MAX_TABS ? m_bankTabRightsAndSlots[tabId].GetRights() : 0;
602 }
603
605 {
606 return tabId < GUILD_BANK_MAX_TABS ? m_bankTabRightsAndSlots[tabId].GetSlots() : 0;
607 }
608
609 void SetBankTabSlotsAndRights(GuildBankRightsAndSlots rightsAndSlots, bool saveToDB);
610 void CreateMissingTabsIfNeeded(uint8 ranks, CharacterDatabaseTransaction trans, bool logOnCreate = false);
611
612 private:
616 std::string m_name;
619 std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS> m_bankTabRightsAndSlots = {};
620 };
621
623 {
624 public:
625 BankTab(ObjectGuid::LowType guildId, uint8 tabId);
626
627 void LoadFromDB(Field* fields);
628 bool LoadItemFromDB(Field* fields);
629 void Delete(CharacterDatabaseTransaction trans, bool removeItemsFromDB = false);
630
631 void SetInfo(std::string_view name, std::string_view icon);
632 void SetText(std::string_view text);
633 void SendText(Guild const* guild, WorldSession* session) const;
634
635 std::string const& GetName() const { return m_name; }
636 std::string const& GetIcon() const { return m_icon; }
637 std::string const& GetText() const { return m_text; }
638
639 inline Item* GetItem(uint8 slotId) const { return slotId < GUILD_BANK_MAX_SLOTS ? m_items[slotId] : nullptr; }
640 bool SetItem(CharacterDatabaseTransaction trans, uint8 slotId, Item* item);
641
642 private:
645
646 std::array<Item*, GUILD_BANK_MAX_SLOTS> m_items = {};
647 std::string m_name;
648 std::string m_icon;
649 std::string m_text;
650 };
651
652 // Movement data
654 {
655 public:
656 MoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId);
657 virtual ~MoveItemData();
658
659 virtual bool IsBank() const = 0;
660 // Initializes item pointer. Returns true, if item exists, false otherwise.
661 virtual bool InitItem() = 0;
662 // Checks splited amount against item. Splited amount cannot be more that number of items in stack.
663 virtual bool CheckItem(uint32& splitedAmount);
664 // Defines if player has rights to save item in container
665 virtual bool HasStoreRights(MoveItemData* /*pOther*/) const { return true; }
666 // Defines if player has rights to withdraw item from container
667 virtual bool HasWithdrawRights(MoveItemData* /*pOther*/) const { return true; }
668 // Checks if container can store specified item
669 InventoryResult CanStore(Item* pItem, bool swap, bool sendError);
670 // Clones stored item
671 bool CloneItem(uint32 count);
672 // Remove item from container (if splited update items fields)
673 virtual void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData* pOther, uint32 splitedAmount = 0) = 0;
674 // Saves item to container
675 virtual Item* StoreItem(CharacterDatabaseTransaction trans, Item* pItem) = 0;
676 // Log bank event
677 virtual void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData* pFrom, uint32 count) const = 0;
678 // Log GM action
679 virtual void LogAction(MoveItemData* pFrom) const;
680 // Copy slots id from position vector
681 void CopySlots(SlotIds& ids) const;
682 // Sends equip error to player
683 void SendEquipError(InventoryResult result, Item const* item);
684
685 Item* GetItem(bool isCloned = false) const { return isCloned ? m_pClonedItem : m_pItem; }
686 uint8 GetContainer() const { return m_container; }
687 uint8 GetSlotId() const { return m_slotId; }
688
689 protected:
690 virtual InventoryResult CanStore(Item* pItem, bool swap) = 0;
691
698 std::vector<ItemPosCount> m_vec;
699 };
700
702 {
703 public:
704 PlayerMoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId) :
705 MoveItemData(guild, player, container, slotId) { }
706
707 bool IsBank() const override { return false; }
708 bool InitItem() override;
709 void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData* pOther, uint32 splitedAmount = 0) override;
710 Item* StoreItem(CharacterDatabaseTransaction trans, Item* pItem) override;
711 void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData* pFrom, uint32 count) const override;
712
713 protected:
714 InventoryResult CanStore(Item* pItem, bool swap) override;
715 };
716
718 {
719 public:
720 BankMoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId) :
721 MoveItemData(guild, player, container, slotId) { }
722
723 bool IsBank() const override { return true; }
724 bool InitItem() override;
725 bool HasStoreRights(MoveItemData* pOther) const override;
726 bool HasWithdrawRights(MoveItemData* pOther) const override;
727 void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData* pOther, uint32 splitedAmount) override;
728 Item* StoreItem(CharacterDatabaseTransaction trans, Item* pItem) override;
729 void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData* pFrom, uint32 count) const override;
730 void LogAction(MoveItemData* pFrom) const override;
731
732 protected:
733 InventoryResult CanStore(Item* pItem, bool swap) override;
734
735 private:
736 Item* _StoreItem(CharacterDatabaseTransaction trans, BankTab* pTab, Item* pItem, ItemPosCount& pos, bool clone) const;
737 bool _ReserveSpace(uint8 slotId, Item* pItem, Item* pItemDest, uint32& count);
738 void CanStoreItemInTab(Item* pItem, uint8 skipSlotId, bool merge, uint32& count);
739 };
740
741 public:
742 static void SendCommandResult(WorldSession* session, GuildCommandType type, GuildCommandError errCode, std::string_view param = "");
743 static void SendSaveEmblemResult(WorldSession* session, GuildEmblemError errCode);
744
745 Guild();
746 ~Guild();
747
748 bool Create(Player* pLeader, std::string_view name);
749 void Disband();
750
751 void SaveToDB();
752
753 // Getters
754 ObjectGuid::LowType GetId() const { return m_id; }
755 ObjectGuid GetGUID() const { return ObjectGuid::Create<HighGuid::Guild>(m_id); }
756 ObjectGuid GetLeaderGUID() const { return m_leaderGuid; }
757 std::string const& GetName() const { return m_name; }
758 std::string const& GetMOTD() const { return m_motd; }
759 std::string const& GetInfo() const { return m_info; }
760 time_t GetCreatedDate() const { return m_createdDate; }
761 uint64 GetBankMoney() const { return m_bankMoney; }
762
763 bool SetName(std::string_view name);
764
765 // Handle client commands
766 void HandleRoster(WorldSession* session);
767 void HandleQuery(WorldSession* session);
768 void HandleSetAchievementTracking(WorldSession* session, uint32 const* achievementIdsBegin, uint32 const* achievementIdsEnd);
769 void HandleGetAchievementMembers(WorldSession* session, uint32 achievementId) const;
770 void HandleSetMOTD(WorldSession* session, std::string_view motd);
771 void HandleSetInfo(WorldSession* session, std::string_view info);
772 void HandleSetEmblem(WorldSession* session, EmblemInfo const& emblemInfo);
773 void HandleSetNewGuildMaster(WorldSession* session, std::string_view name, bool isSelfPromote);
774 void HandleSetBankTabInfo(WorldSession* session, uint8 tabId, std::string_view name, std::string_view icon);
775 void HandleSetMemberNote(WorldSession* session, std::string_view note, ObjectGuid guid, bool isPublic);
776 void HandleSetRankInfo(WorldSession* session, GuildRankId rankId, std::string_view name, uint32 rights, uint32 moneyPerDay, std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS> const& rightsAndSlots);
777 void HandleBuyBankTab(WorldSession* session, uint8 tabId);
778 void HandleInviteMember(WorldSession* session, std::string_view name);
779 void HandleAcceptMember(WorldSession* session);
780 void HandleLeaveMember(WorldSession* session);
781 void HandleRemoveMember(WorldSession* session, ObjectGuid guid);
782 void HandleUpdateMemberRank(WorldSession* session, ObjectGuid guid, bool demote);
783 void HandleSetMemberRank(WorldSession* session, ObjectGuid guid, ObjectGuid setterGuid, GuildRankOrder rank);
784 void HandleAddNewRank(WorldSession* session, std::string_view name);
785 void HandleRemoveRank(WorldSession* session, GuildRankOrder rankOrder);
786 void HandleShiftRank(WorldSession* session, GuildRankOrder rankOrder, bool shiftUp);
787 void HandleMemberDepositMoney(WorldSession* session, uint64 amount, bool cashFlow = false);
788 bool HandleMemberWithdrawMoney(WorldSession* session, uint64 amount, bool repair = false);
789 void HandleMemberLogout(WorldSession* session);
790 void HandleDelete(WorldSession* session);
791 void HandleGuildPartyRequest(WorldSession* session) const;
792 void HandleNewsSetSticky(WorldSession* session, uint32 newsId, bool sticky);
793 void HandleGuildRequestChallengeUpdate(WorldSession* session) const;
794
795 void UpdateMemberData(Player* player, uint8 dataid, uint32 value);
796 void OnPlayerStatusChange(Player* player, uint32 flag, bool state);
797
798 // Send info to client
799 void SendGuildRankInfo(WorldSession* session) const;
800 void SendEventLog(WorldSession* session) const;
801 void SendBankLog(WorldSession* session, uint8 tabId) const;
802 void SendBankList(WorldSession* session, uint8 tabId, bool fullUpdate) const;
803 void SendBankTabText(WorldSession* session, uint8 tabId) const;
804 void SendPermissions(WorldSession* session) const;
805 void SendMoneyInfo(WorldSession* session) const;
806 void SendLoginInfo(WorldSession* session);
807 void SendNewsUpdate(WorldSession* session) const;
808
809 // Send events
810 void SendEventAwayChanged(ObjectGuid const& memberGuid, bool afk, bool dnd);
811 void SendEventBankMoneyChanged() const;
812 void SendEventMOTD(WorldSession* session, bool broadcast = false) const;
813 void SendEventNewLeader(Member* newLeader, Member* oldLeader, bool isSelfPromoted = false) const;
814 void SendEventPlayerLeft(Member* leaver, Member* remover = nullptr, bool isRemoved = false) const;
815 void SendEventPresenceChanged(WorldSession* session, bool loggedOn, bool broadcast = false) const;
816
817 // Load from DB
818 bool LoadFromDB(Field* fields);
819 void LoadGuildNewsLogFromDB(Field* fields);
820 void LoadRankFromDB(Field* fields);
821 bool LoadMemberFromDB(Field* fields);
822 bool LoadEventLogFromDB(Field* fields);
823 void LoadBankRightFromDB(Field* fields);
824 void LoadBankTabFromDB(Field* fields);
825 bool LoadBankEventLogFromDB(Field* fields);
826 bool LoadBankItemFromDB(Field* fields);
827 bool Validate();
828
829 // Broadcasts
830 void BroadcastToGuild(WorldSession* session, bool officerOnly, std::string_view msg, uint32 language = LANG_UNIVERSAL) const;
831 void BroadcastAddonToGuild(WorldSession* session, bool officerOnly, std::string_view msg, std::string_view prefix, bool isLogged) const;
832 void BroadcastPacketToRank(WorldPacket const* packet, GuildRankId rankId) const;
833 void BroadcastPacket(WorldPacket const* packet) const;
834
835 void MassInviteToEvent(WorldSession* session, uint32 minLevel, uint32 maxLevel, GuildRankOrder minRank);
836
837 template<class Do>
838 void BroadcastWorker(Do&& _do, Player const* except = nullptr) const
839 {
840 for (auto const& [_, member] : m_members)
841 if (Player* player = member.FindConnectedPlayer())
842 if (player != except)
843 _do(player);
844 }
845
846 // Members
847 // Adds member to guild. If rankId == GUILD_RANK_NONE, lowest rank is assigned.
848 bool AddMember(CharacterDatabaseTransaction trans, ObjectGuid guid, Optional<GuildRankId> rankId = {});
849 bool DeleteMember(CharacterDatabaseTransaction trans, ObjectGuid guid, bool isDisbanding = false, bool isKicked = false);
850 bool ChangeMemberRank(CharacterDatabaseTransaction trans, ObjectGuid guid, GuildRankId newRank);
851 bool IsMember(ObjectGuid guid) const;
852 uint32 GetMembersCount() const { return uint32(m_members.size()); }
853 std::unordered_map<ObjectGuid, Member> const& GetMembers() const { return m_members; }
854 uint64 GetMemberAvailableMoneyForRepairItems(ObjectGuid guid) const;
855 std::vector<Player*> GetMembersTrackingCriteria(uint32 criteriaId) const;
856
857 // Bank
858 void SwapItems(Player* player, uint8 tabId, uint8 slotId, uint8 destTabId, uint8 destSlotId, uint32 splitedAmount);
859 void SwapItemsWithInventory(Player* player, bool toChar, uint8 tabId, uint8 slotId, uint8 playerBag, uint8 playerSlotId, uint32 splitedAmount);
860
861 // Bank tabs
862 void SetBankTabText(uint8 tabId, std::string_view text);
863
864 GuildAchievementMgr& GetAchievementMgr() { return *m_achievementMgr; }
865 GuildAchievementMgr const& GetAchievementMgr() const { return *m_achievementMgr; }
866
867 // Pre-6.x guild leveling
869
870 void AddGuildNews(uint8 type, ObjectGuid guid, uint32 flags, uint32 value);
871
872 EmblemInfo const& GetEmblemInfo() const { return m_emblemInfo; }
873 void ResetTimes(bool weekly);
874
875 bool HasAchieved(uint32 achievementId) const;
876 void UpdateCriteria(CriteriaType type, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, WorldObject const* ref, Player* player);
877
878 Trinity::unique_weak_ptr<Guild> GetWeakPtr() const { return m_weakRef; }
879 void SetWeakPtr(Trinity::unique_weak_ptr<Guild> weakRef) { m_weakRef = std::move(weakRef); }
880
881 protected:
883 std::string m_name;
885 std::string m_motd;
886 std::string m_info;
888
892
893 std::vector<RankInfo> m_ranks;
894 std::unordered_map<ObjectGuid, Member> m_members;
895 std::vector<BankTab> m_bankTabs;
896
897 // These are actually ordered lists. The first element is the oldest entry.
899 std::array<LogHolder<BankEventLogEntry>, GUILD_BANK_MAX_TABS + 1> m_bankEventLog = {};
901 std::unique_ptr<GuildAchievementMgr> m_achievementMgr;
902
904
905 private:
906 inline uint8 _GetRanksSize() const { return uint8(m_ranks.size()); }
907 RankInfo const* GetRankInfo(GuildRankId rankId) const;
908 RankInfo* GetRankInfo(GuildRankId rankId);
909 RankInfo const* GetRankInfo(GuildRankOrder rankOrder) const;
910 RankInfo* GetRankInfo(GuildRankOrder rankOrder);
911 bool _HasRankRight(Player const* player, uint32 right) const;
912 public:
913 bool HasAnyRankRight(GuildRankId rankId, GuildRankRights rights) const;
914
915 private:
916 inline GuildRankId _GetLowestRankId() const { return m_ranks.back().GetId(); }
917
918 inline uint8 _GetPurchasedTabsSize() const { return uint8(m_bankTabs.size()); }
919 inline BankTab* GetBankTab(uint8 tabId) { return tabId < m_bankTabs.size() ? &m_bankTabs[tabId] : nullptr; }
920 inline BankTab const* GetBankTab(uint8 tabId) const { return tabId < m_bankTabs.size() ? &m_bankTabs[tabId] : nullptr; }
921
922 public:
923 inline Member const* GetMember(ObjectGuid const& guid) const
924 {
925 auto itr = m_members.find(guid);
926 return (itr != m_members.end()) ? &itr->second : nullptr;
927 }
928
929 private:
930 inline Member* GetMember(ObjectGuid const& guid)
931 {
932 auto itr = m_members.find(guid);
933 return (itr != m_members.end()) ? &itr->second : nullptr;
934 }
935
936 inline Member* GetMember(std::string_view name)
937 {
938 for (auto itr = m_members.begin(); itr != m_members.end(); ++itr)
939 if (itr->second.GetName() == name)
940 return &itr->second;
941
942 return nullptr;
943 }
944
945 static void _DeleteMemberFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType lowguid);
946
947 // Tries to create new bank tab
948 void _CreateNewBankTab(CharacterDatabaseTransaction trans);
949 // Creates default guild ranks with names in given locale
950 void _CreateDefaultGuildRanks(CharacterDatabaseTransaction trans, LocaleConstant loc);
951 // Creates new rank
952 bool _CreateRank(CharacterDatabaseTransaction trans, std::string_view name, uint32 rights);
953 // Update account number when member added/removed from guild
954 void _UpdateAccountsNumber();
955 bool _IsLeader(Player* player) const;
956 void _DeleteBankItems(CharacterDatabaseTransaction trans, bool removeItemsFromDB = false);
957 bool _ModifyBankMoney(CharacterDatabaseTransaction trans, uint64 amount, bool add);
958 void _SetLeader(CharacterDatabaseTransaction trans, Member& leader);
959
960 void _SetRankBankMoneyPerDay(GuildRankId rankId, uint32 moneyPerDay);
961 void _SetRankBankTabRightsAndSlots(GuildRankId rankId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB = true);
962 int8 _GetRankBankTabRights(GuildRankId rankId, uint8 tabId) const;
963 uint32 _GetRankRights(GuildRankId rankId) const;
964 uint32 _GetRankBankMoneyPerDay(GuildRankId rankId) const;
965 int32 _GetRankBankTabSlotsPerDay(GuildRankId rankId, uint8 tabId) const;
966 std::string _GetRankName(GuildRankId rankId) const;
967
968 int32 _GetMemberRemainingSlots(Member const& member, uint8 tabId) const;
969 int64 _GetMemberRemainingMoney(Member const& member) const;
970 void _UpdateMemberWithdrawSlots(CharacterDatabaseTransaction trans, ObjectGuid guid, uint8 tabId);
971 bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, int32 rights) const;
972
973 void _LogEvent(GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2 = UI64LIT(0), uint8 newRank = 0);
974 void _LogBankEvent(CharacterDatabaseTransaction trans, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount = 0, uint8 destTabId = 0);
975
976 Item* _GetItem(uint8 tabId, uint8 slotId) const;
977 void _RemoveItem(CharacterDatabaseTransaction trans, uint8 tabId, uint8 slotId);
978 void _MoveItems(MoveItemData* pSrc, MoveItemData* pDest, uint32 splitedAmount) const;
979 static InventoryResult _DoItemsMove(MoveItemData* pSrc, MoveItemData* pDest, bool sendError, uint32 splitedAmount = 0);
980
981 void _SendBankContentUpdate(MoveItemData* pSrc, MoveItemData* pDest) const;
982 void _SendBankContentUpdate(uint8 tabId, SlotIds slots) const;
983 void SendGuildRanksUpdate(ObjectGuid setterGuid, ObjectGuid targetGuid, GuildRankId rank);
984};
985#endif
LocaleConstant
Definition Common.h:51
CriteriaType
Definition DBCEnums.h:546
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
#define TC_GAME_API
Definition Define.h:129
uint8_t uint8
Definition Define.h:156
int64_t int64
Definition Define.h:149
int8_t int8
Definition Define.h:152
int32_t int32
Definition Define.h:150
uint64_t uint64
Definition Define.h:153
#define UI64LIT(N)
Definition Define.h:139
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
uint16 flags
GuildMisc
Definition Guild.h:53
@ GUILD_RANKS_MIN_COUNT
Definition Guild.h:58
@ GUILD_EVENT_LOG_GUID_UNDEFINED
Definition Guild.h:63
@ GUILD_WITHDRAW_SLOT_UNLIMITED
Definition Guild.h:62
@ TAB_UNDEFINED
Definition Guild.h:64
@ GUILD_BANK_MONEY_LOGS_TAB
Definition Guild.h:56
@ GUILD_WITHDRAW_MONEY_UNLIMITED
Definition Guild.h:61
@ GUILD_OLD_MAX_LEVEL
Definition Guild.h:65
@ GUILD_BANK_MAX_SLOTS
Definition Guild.h:55
@ GUILD_RANKS_MAX_COUNT
Definition Guild.h:59
@ GUILD_BANK_MAX_TABS
Definition Guild.h:54
@ GUILD_RANK_NONE
Definition Guild.h:60
@ GUILD_MASTER_DETHRONE_INACTIVE_DAYS
Definition Guild.h:57
GuildMemberFlags
Definition Guild.h:230
@ GUILDMEMBER_STATUS_AFK
Definition Guild.h:233
@ GUILDMEMBER_STATUS_NONE
Definition Guild.h:231
@ GUILDMEMBER_STATUS_MOBILE
Definition Guild.h:235
@ GUILDMEMBER_STATUS_ONLINE
Definition Guild.h:232
@ GUILDMEMBER_STATUS_DND
Definition Guild.h:234
GuildBankRights
Definition Guild.h:186
@ GUILD_BANK_RIGHT_PUT_ITEM
Definition Guild.h:188
@ GUILD_BANK_RIGHT_VIEW_TAB
Definition Guild.h:187
@ GUILD_BANK_RIGHT_FULL
Definition Guild.h:192
@ GUILD_BANK_RIGHT_DEPOSIT_ITEM
Definition Guild.h:191
@ GUILD_BANK_RIGHT_UPDATE_TEXT
Definition Guild.h:189
constexpr uint64 GUILD_BANK_MONEY_LIMIT
Definition Guild.h:68
#define GUILD_CHALLENGES_TYPES
Definition Guild.h:263
GuildCommandType
Definition Guild.h:130
@ GUILD_COMMAND_GUILD_CHAT
Definition Guild.h:140
@ GUILD_COMMAND_PROMOTE_PLAYER
Definition Guild.h:135
@ GUILD_COMMAND_CHANGE_LEADER
Definition Guild.h:138
@ GUILD_COMMAND_FOUNDER
Definition Guild.h:141
@ GUILD_COMMAND_DEMOTE_PLAYER
Definition Guild.h:136
@ GUILD_COMMAND_LEAVE_GUILD
Definition Guild.h:133
@ GUILD_COMMAND_REPAIR
Definition Guild.h:146
@ GUILD_COMMAND_REMOVE_PLAYER
Definition Guild.h:137
@ GUILD_COMMAND_EDIT_PUBLIC_NOTE
Definition Guild.h:143
@ GUILD_COMMAND_VIEW_TAB
Definition Guild.h:144
@ GUILD_COMMAND_MOVE_ITEM
Definition Guild.h:145
@ GUILD_COMMAND_GET_ROSTER
Definition Guild.h:134
@ GUILD_COMMAND_CREATE_GUILD
Definition Guild.h:131
@ GUILD_COMMAND_CHANGE_RANK
Definition Guild.h:142
@ GUILD_COMMAND_INVITE_PLAYER
Definition Guild.h:132
@ GUILD_COMMAND_EDIT_MOTD
Definition Guild.h:139
const uint32 GuildChallengeMaxLevelGoldReward[GUILD_CHALLENGES_TYPES]
Definition Guild.h:266
GuildCommandError
Definition Guild.h:150
@ ERR_GUILD_BANK_WRONG_TAB
Definition Guild.h:176
@ ERR_GUILD_PERMISSIONS
Definition Guild.h:160
@ ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL
Definition Guild.h:180
@ ERR_GUILD_WITHDRAW_LIMIT
Definition Guild.h:171
@ ERR_ALREADY_IN_GUILD_S
Definition Guild.h:154
@ ERR_GUILD_PLAYER_NOT_IN_GUILD
Definition Guild.h:161
@ ERR_GUILD_PLAYER_NOT_IN_GUILD_S
Definition Guild.h:162
@ ERR_GUILD_RANK_IN_USE
Definition Guild.h:168
@ ERR_GUILD_LEADER_LEAVE
Definition Guild.h:159
@ ERR_GUILD_TOO_MUCH_MONEY
Definition Guild.h:175
@ ERR_GUILD_COMMAND_SUCCESS
Definition Guild.h:151
@ ERR_GUILD_TRIAL_ACCOUNT
Definition Guild.h:179
@ ERR_GUILD_MOVE_STARTING
Definition Guild.h:181
@ ERR_INVITED_TO_GUILD
Definition Guild.h:155
@ ERR_GUILD_RANKS_LOCKED
Definition Guild.h:167
@ ERR_RANK_REQUIRES_AUTHENTICATOR
Definition Guild.h:177
@ ERR_GUILD_NOT_ALLIED
Definition Guild.h:164
@ ERR_GUILD_NOT_ENOUGH_MONEY
Definition Guild.h:172
@ ERR_GUILD_INTERNAL
Definition Guild.h:152
@ ERR_GUILD_BANK_FULL
Definition Guild.h:173
@ ERR_GUILD_PLAYER_NOT_FOUND_S
Definition Guild.h:163
@ ERR_GUILD_RANK_TOO_LOW_S
Definition Guild.h:166
@ ERR_GUILD_REP_TOO_LOW
Definition Guild.h:182
@ ERR_GUILD_IGNORING_YOU_S
Definition Guild.h:169
@ ERR_GUILD_NAME_EXISTS_S
Definition Guild.h:158
@ ERR_ALREADY_IN_GUILD
Definition Guild.h:153
@ ERR_GUILD_RANK_TOO_HIGH_S
Definition Guild.h:165
@ ERR_ALREADY_INVITED_TO_GUILD_S
Definition Guild.h:156
@ ERR_GUILD_NAME_INVALID
Definition Guild.h:157
@ ERR_GUILD_ITEM_NOT_FOUND
Definition Guild.h:174
@ ERR_GUILD_UNK1
Definition Guild.h:170
@ ERR_GUILD_BANK_VOUCHER_FAILED
Definition Guild.h:178
const uint32 GuildChallengeGoldReward[GUILD_CHALLENGES_TYPES]
Definition Guild.h:265
const uint32 GuildChallengesMaxCount[GUILD_CHALLENGES_TYPES]
Definition Guild.h:267
std::set< uint8 > SlotIds
Definition Guild.h:326
uint32 const MinNewsItemLevel
Definition Guild.h:260
GuildNews
Definition Guild.h:239
@ GUILD_NEWS_CREATE
Definition Guild.h:247
@ GUILD_NEWS_LEVEL_UP
Definition Guild.h:246
@ GUILD_NEWS_ITEM_CRAFTED
Definition Guild.h:244
@ GUILD_NEWS_ITEM_LOOTED
Definition Guild.h:243
@ GUILD_NEWS_GUILD_ACHIEVEMENT
Definition Guild.h:240
@ GUILD_NEWS_EVENT
Definition Guild.h:248
@ GUILD_NEWS_ITEM_PURCHASED
Definition Guild.h:245
@ GUILD_NEWS_DUNGEON_ENCOUNTER
Definition Guild.h:242
@ GUILD_NEWS_PLAYER_ACHIEVEMENT
Definition Guild.h:241
GuildRankOrder
Definition Guild.h:100
GuildBankEventLogTypes
Definition Guild.h:196
@ GUILD_BANK_LOG_MOVE_ITEM
Definition Guild.h:199
@ GUILD_BANK_LOG_WITHDRAW_ITEM
Definition Guild.h:198
@ GUILD_BANK_LOG_DEPOSIT_MONEY
Definition Guild.h:200
@ GUILD_BANK_LOG_BUY_TAB
Definition Guild.h:205
@ GUILD_BANK_LOG_DEPOSIT_ITEM
Definition Guild.h:197
@ GUILD_BANK_LOG_WITHDRAW_MONEY
Definition Guild.h:201
@ GUILD_BANK_LOG_WITHDRAW_TO_BUY_TAB
Definition Guild.h:204
@ GUILD_BANK_LOG_CASH_FLOW_DEPOSIT
Definition Guild.h:206
@ GUILD_BANK_LOG_REPAIR_MONEY
Definition Guild.h:202
@ GUILD_BANK_LOG_MOVE_ITEM2
Definition Guild.h:203
ClubStreamType
Definition Guild.h:88
GuildRankRights
Definition Guild.h:103
@ GR_RIGHT_UNK_400
Definition Guild.h:115
@ GR_RIGHT_EOFFNOTE
Definition Guild.h:120
@ GR_RIGHT_GCHATSPEAK
Definition Guild.h:106
@ GR_RIGHT_NONE
Definition Guild.h:104
@ GR_RIGHT_OFFCHATSPEAK
Definition Guild.h:108
@ GR_RIGHT_WITHDRAW_GOLD_LOCK
Definition Guild.h:122
@ GR_RIGHT_ALL
Definition Guild.h:126
@ GR_RIGHT_OFFCHATLISTEN
Definition Guild.h:107
@ GR_RIGHT_GCHATLISTEN
Definition Guild.h:105
@ GR_RIGHT_CREATE_GUILD_EVENT
Definition Guild.h:125
@ GR_RIGHT_SETMOTD
Definition Guild.h:117
@ GR_RIGHT_ROSTER
Definition Guild.h:111
@ GR_RIGHT_MODIFY_GUILD_INFO
Definition Guild.h:121
@ GR_RIGHT_VIEWOFFNOTE
Definition Guild.h:119
@ GR_RIGHT_WITHDRAW_REPAIR
Definition Guild.h:123
@ GR_RIGHT_REMOVE
Definition Guild.h:110
@ GR_RIGHT_UNK_800
Definition Guild.h:116
@ GR_RIGHT_WITHDRAW_GOLD
Definition Guild.h:124
@ GR_RIGHT_INVITE
Definition Guild.h:109
@ GR_RIGHT_EDIT_PUBLIC_NOTE
Definition Guild.h:118
@ GR_RIGHT_DEMOTE
Definition Guild.h:113
@ GR_RIGHT_PROMOTE
Definition Guild.h:112
@ GR_RIGHT_UNK_200
Definition Guild.h:114
ClubRoleIdentifier
Definition Guild.h:79
GuildMemberData
Definition Guild.h:71
@ GUILD_MEMBER_DATA_LEVEL
Definition Guild.h:74
@ GUILD_MEMBER_DATA_ACHIEVEMENT_POINTS
Definition Guild.h:73
@ GUILD_MEMBER_DATA_ZONEID
Definition Guild.h:72
GuildRankId
Definition Guild.h:96
GuildEmblemError
Definition Guild.h:220
@ ERR_GUILDEMBLEM_NOTGUILDMASTER
Definition Guild.h:224
@ ERR_GUILDEMBLEM_INVALIDVENDOR
Definition Guild.h:226
@ ERR_GUILDEMBLEM_INVALID_TABARD_COLORS
Definition Guild.h:222
@ ERR_GUILDEMBLEM_NOTENOUGHMONEY
Definition Guild.h:225
@ ERR_GUILDEMBLEM_SUCCESS
Definition Guild.h:221
@ ERR_GUILDEMBLEM_NOGUILD
Definition Guild.h:223
GuildEventLogTypes
Definition Guild.h:210
@ GUILD_EVENT_LOG_LEAVE_GUILD
Definition Guild.h:216
@ GUILD_EVENT_LOG_PROMOTE_PLAYER
Definition Guild.h:213
@ GUILD_EVENT_LOG_UNINVITE_PLAYER
Definition Guild.h:215
@ GUILD_EVENT_LOG_INVITE_PLAYER
Definition Guild.h:211
@ GUILD_EVENT_LOG_DEMOTE_PLAYER
Definition Guild.h:214
@ GUILD_EVENT_LOG_JOIN_GUILD
Definition Guild.h:212
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)
@ LANG_UNIVERSAL
uint32 const Entry[5]
uint32 m_style
Definition Guild.h:291
uint32 m_backgroundColor
Definition Guild.h:295
uint32 GetStyle() const
Definition Guild.h:284
uint32 GetColor() const
Definition Guild.h:285
bool ValidateEmblemColors() const
Definition Guild.h:278
uint32 m_borderColor
Definition Guild.h:294
uint32 GetBackgroundColor() const
Definition Guild.h:288
uint32 GetBorderStyle() const
Definition Guild.h:286
EmblemInfo()
Definition Guild.h:273
uint32 m_borderStyle
Definition Guild.h:293
uint32 GetBorderColor() const
Definition Guild.h:287
uint32 m_color
Definition Guild.h:292
Class used to access individual fields of database query result.
Definition Field.h:94
int32 GetSlots() const
Definition Guild.h:317
void SetGuildMasterValues()
Definition Guild.h:306
int8 GetRights() const
Definition Guild.h:318
int8 GetTabId() const
Definition Guild.h:316
GuildBankRightsAndSlots(uint8 _tabId, int8 _rights, int32 _slots)
Definition Guild.h:304
void SetTabId(uint8 _tabId)
Definition Guild.h:312
void SetSlots(int32 _slots)
Definition Guild.h:313
GuildBankRightsAndSlots(uint8 _tabId)
Definition Guild.h:303
void SetRights(int8 _rights)
Definition Guild.h:314
BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount, uint8 destTabId)
Definition Guild.h:485
GuildBankEventLogTypes m_eventType
Definition Guild.h:499
BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, uint8 tabId, GuildBankEventLogTypes eventType, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount, uint8 destTabId)
Definition Guild.h:489
ObjectGuid::LowType m_playerGuid
Definition Guild.h:501
static bool IsMoneyEvent(GuildBankEventLogTypes eventType)
Definition Guild.h:469
bool IsMoneyEvent() const
Definition Guild.h:480
bool IsBank() const override
Definition Guild.h:723
BankMoveItemData(Guild *guild, Player *player, uint8 container, uint8 slotId)
Definition Guild.h:720
std::string const & GetName() const
Definition Guild.h:635
std::string const & GetIcon() const
Definition Guild.h:636
std::string m_icon
Definition Guild.h:648
std::string m_name
Definition Guild.h:647
Item * GetItem(uint8 slotId) const
Definition Guild.h:639
uint8 m_tabId
Definition Guild.h:644
std::string const & GetText() const
Definition Guild.h:637
ObjectGuid::LowType m_guildId
Definition Guild.h:643
std::string m_text
Definition Guild.h:649
GuildEventLogTypes m_eventType
Definition Guild.h:459
ObjectGuid::LowType m_playerGuid2
Definition Guild.h:461
EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank)
Definition Guild.h:450
EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank)
Definition Guild.h:447
ObjectGuid::LowType m_playerGuid1
Definition Guild.h:460
virtual void SaveToDB(CharacterDatabaseTransaction trans) const =0
uint32 GetGUID() const
Definition Guild.h:432
virtual ~LogEntry()
Definition Guild.h:430
time_t m_timestamp
Definition Guild.h:440
LogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp)
Definition Guild.h:429
ObjectGuid::LowType m_guildId
Definition Guild.h:438
time_t GetTimestamp() const
Definition Guild.h:433
uint32 m_guid
Definition Guild.h:439
std::list< Entry > & GetGuildLog()
Definition Guild.h:560
uint32 m_nextGUID
Definition Guild.h:566
uint32 const m_maxRecords
Definition Guild.h:565
std::list< Entry > m_log
Definition Guild.h:564
std::list< Entry > const & GetGuildLog() const
Definition Guild.h:561
bool CanInsert() const
Definition Guild.h:549
uint64 m_bankWithdrawMoney
Definition Guild.h:415
void RemFlag(uint8 var)
Definition Guild.h:348
uint8 m_gender
Definition Guild.h:403
ObjectGuid m_guid
Definition Guild.h:397
std::string_view GetPublicNote() const
Definition Guild.h:360
GuildRankId GetRankId() const
Definition Guild.h:357
std::string_view GetName() const
Definition Guild.h:355
bool IsSamePlayer(ObjectGuid guid) const
Definition Guild.h:383
void SetZoneId(uint32 id)
Definition Guild.h:343
uint32 m_weekReputation
Definition Guild.h:420
uint8 GetClass() const
Definition Guild.h:363
uint32 GetTotalReputation() const
Definition Guild.h:371
uint8 GetFlags() const
Definition Guild.h:366
std::string m_name
Definition Guild.h:398
uint32 GetAccountId() const
Definition Guild.h:356
uint32 GetBankTabWithdrawValue(uint8 tabId) const
Definition Guild.h:387
uint64 m_logoutTime
Definition Guild.h:405
uint8 m_class
Definition Guild.h:402
uint8 GetLevel() const
Definition Guild.h:365
std::string_view GetOfficerNote() const
Definition Guild.h:361
uint32 m_achievementPoints
Definition Guild.h:416
uint64 GetWeekActivity() const
Definition Guild.h:370
uint64 m_weekActivity
Definition Guild.h:418
bool IsRank(GuildRankId rankId) const
Definition Guild.h:382
uint64 GetBankMoneyWithdrawValue() const
Definition Guild.h:388
uint64 GetTotalActivity() const
Definition Guild.h:369
void AddFlag(uint8 var)
Definition Guild.h:347
uint8 GetRace() const
Definition Guild.h:362
uint32 m_totalReputation
Definition Guild.h:419
bool IsTrackingCriteriaId(uint32 criteriaId) const
Definition Guild.h:375
void SetLevel(uint8 var)
Definition Guild.h:345
uint64 m_totalActivity
Definition Guild.h:417
uint32 GetZoneId() const
Definition Guild.h:367
uint8 GetGender() const
Definition Guild.h:364
void ResetFlags()
Definition Guild.h:349
void SetTrackedCriteriaIds(std::set< uint32 > criteriaIds)
Definition Guild.h:374
Optional< std::set< uint32 > > m_trackedCriteriaIds
Definition Guild.h:412
void SetAchievementPoints(uint32 val)
Definition Guild.h:344
uint32 m_zoneId
Definition Guild.h:399
uint8 m_race
Definition Guild.h:401
ObjectGuid::LowType m_guildId
Definition Guild.h:395
uint32 m_accountId
Definition Guild.h:406
std::array< uint32, GUILD_BANK_MAX_TABS > m_bankWithdraw
Definition Guild.h:414
uint8 m_level
Definition Guild.h:400
std::string m_officerNote
Definition Guild.h:410
std::string m_publicNote
Definition Guild.h:409
uint32 GetWeekReputation() const
Definition Guild.h:372
uint32 GetAchievementPoints() const
Definition Guild.h:368
bool IsOnline() const
Definition Guild.h:377
uint8 m_flags
Definition Guild.h:404
uint64 GetLogoutTime() const
Definition Guild.h:358
ObjectGuid const & GetGUID() const
Definition Guild.h:354
GuildRankId m_rankId
Definition Guild.h:408
Item * m_pClonedItem
Definition Guild.h:697
Player * m_pPlayer
Definition Guild.h:693
std::vector< ItemPosCount > m_vec
Definition Guild.h:698
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:685
virtual void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData *pFrom, uint32 count) const =0
Guild * m_pGuild
Definition Guild.h:692
uint8 GetSlotId() const
Definition Guild.h:687
uint8 GetContainer() const
Definition Guild.h:686
virtual bool HasWithdrawRights(MoveItemData *) const
Definition Guild.h:667
virtual bool HasStoreRights(MoveItemData *) const
Definition Guild.h:665
virtual bool IsBank() const =0
virtual bool InitItem()=0
virtual void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData *pOther, uint32 splitedAmount=0)=0
ObjectGuid m_playerGuid
Definition Guild.h:536
uint32 GetFlags() const
Definition Guild.h:522
GuildNews GetType() const
Definition Guild.h:519
GuildNews m_type
Definition Guild.h:535
NewsLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildNews type, ObjectGuid playerGuid, uint32 flags, uint32 value)
Definition Guild.h:514
void SetSticky(bool sticky)
Definition Guild.h:523
ObjectGuid GetPlayerGuid() const
Definition Guild.h:520
uint32 GetValue() const
Definition Guild.h:521
NewsLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildNews type, ObjectGuid playerGuid, uint32 flags, uint32 value)
Definition Guild.h:511
PlayerMoveItemData(Guild *guild, Player *player, uint8 container, uint8 slotId)
Definition Guild.h:704
bool IsBank() const override
Definition Guild.h:707
uint32 m_rights
Definition Guild.h:617
void SetOrder(GuildRankOrder rankOrder)
Definition Guild.h:584
GuildRankOrder m_rankOrder
Definition Guild.h:615
std::string const & GetName() const
Definition Guild.h:586
uint32 GetRights() const
Definition Guild.h:589
int8 GetBankTabRights(uint8 tabId) const
Definition Guild.h:599
uint32 GetBankMoneyPerDay() const
Definition Guild.h:592
uint32 m_bankMoneyPerDay
Definition Guild.h:618
int32 GetBankTabSlotsPerDay(uint8 tabId) const
Definition Guild.h:604
RankInfo(ObjectGuid::LowType guildId)
Definition Guild.h:574
std::string m_name
Definition Guild.h:616
GuildRankOrder GetOrder() const
Definition Guild.h:583
GuildRankId GetId() const
Definition Guild.h:581
ObjectGuid::LowType m_guildId
Definition Guild.h:613
GuildRankId m_rankId
Definition Guild.h:614
RankInfo(ObjectGuid::LowType guildId, GuildRankId rankId, GuildRankOrder rankOrder, std::string_view name, uint32 rights, uint32 money)
Definition Guild.h:575
Definition Guild.h:329
GuildRankId _GetLowestRankId() const
Definition Guild.h:916
uint64 GetBankMoney() const
Definition Guild.h:761
void SetWeakPtr(Trinity::unique_weak_ptr< Guild > weakRef)
Definition Guild.h:879
uint64 m_bankMoney
Definition Guild.h:891
ObjectGuid GetLeaderGUID() const
Definition Guild.h:756
std::vector< BankTab > m_bankTabs
Definition Guild.h:895
std::unique_ptr< GuildAchievementMgr > m_achievementMgr
Definition Guild.h:901
ObjectGuid::LowType GetId() const
Definition Guild.h:754
Member * GetMember(std::string_view name)
Definition Guild.h:936
uint32 m_accountsNumber
Definition Guild.h:890
uint8 GetLevel() const
Definition Guild.h:868
time_t m_createdDate
Definition Guild.h:887
uint8 _GetPurchasedTabsSize() const
Definition Guild.h:918
Member * GetMember(ObjectGuid const &guid)
Definition Guild.h:930
std::vector< RankInfo > m_ranks
Definition Guild.h:893
std::string m_name
Definition Guild.h:883
std::unordered_map< ObjectGuid, Member > m_members
Definition Guild.h:894
std::string const & GetName() const
Definition Guild.h:757
ObjectGuid m_leaderGuid
Definition Guild.h:884
void BroadcastWorker(Do &&_do, Player const *except=nullptr) const
Definition Guild.h:838
LogHolder< EventLogEntry > m_eventLog
Definition Guild.h:898
std::unordered_map< ObjectGuid, Member > const & GetMembers() const
Definition Guild.h:853
time_t GetCreatedDate() const
Definition Guild.h:760
LogHolder< NewsLogEntry > m_newsLog
Definition Guild.h:900
std::string const & GetInfo() const
Definition Guild.h:759
EmblemInfo const & GetEmblemInfo() const
Definition Guild.h:872
GuildAchievementMgr & GetAchievementMgr()
Definition Guild.h:864
GuildAchievementMgr const & GetAchievementMgr() const
Definition Guild.h:865
std::string m_motd
Definition Guild.h:885
uint8 _GetRanksSize() const
Definition Guild.h:906
BankTab * GetBankTab(uint8 tabId)
Definition Guild.h:919
std::string const & GetMOTD() const
Definition Guild.h:758
Member const * GetMember(ObjectGuid const &guid) const
Definition Guild.h:923
EmblemInfo m_emblemInfo
Definition Guild.h:889
Trinity::unique_weak_ptr< Guild > m_weakRef
Definition Guild.h:903
std::string m_info
Definition Guild.h:886
uint32 GetMembersCount() const
Definition Guild.h:852
ObjectGuid GetGUID() const
Definition Guild.h:755
Trinity::unique_weak_ptr< Guild > GetWeakPtr() const
Definition Guild.h:878
ObjectGuid::LowType m_id
Definition Guild.h:882
BankTab const * GetBankTab(uint8 tabId) const
Definition Guild.h:920
Definition Item.h:179
uint64 LowType
Definition ObjectGuid.h:321
Trinity::unique_trackable_ptr companion class, replicating what std::weak_ptr is to std::shared_ptr.
Player session in the World.
std::vector< uint32 > AchievementsRequired
Definition Guild.h:257
uint32 ItemID
Definition Guild.h:253
uint8 MinGuildRep
Definition Guild.h:254
Trinity::RaceMask< std::array< int32, 2 > > RaceMask
Definition Guild.h:255
uint64 Cost
Definition Guild.h:256