TrinityCore
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
53{
54 GUILD_BANK_MAX_TABS = 8, // send by client for money log also
56 GUILD_BANK_MONEY_LOGS_TAB = 100, // used for money log in DB
66};
67
68constexpr uint64 GUILD_BANK_MONEY_LIMIT = UI64LIT(100000000000);
69
71{
75};
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
130{
147};
148
150{
170 ERR_GUILD_UNK1 = 20, // Forces roster update
184
186{
190
194
196{
208
210{
218
220{
228
230{
235 GUILDMEMBER_STATUS_MOBILE = 0x0008, // remote chat from mobile app
236};
237
239{
242 GUILD_NEWS_DUNGEON_ENCOUNTER = 2, // @todo Implement
247 GUILD_NEWS_CREATE = 7, // @todo Implement
248 GUILD_NEWS_EVENT = 8 // @todo Implement
250
252{
257 std::vector<uint32> AchievementsRequired;
258};
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
307 {
310 }
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 const& 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 GetPublicNote() const { return m_publicNote; }
361 std::string 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;
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 }
477
478 bool IsMoneyEvent() const
479 {
480 return IsMoneyEvent(m_eventType);
481 }
482
483 BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount, uint8 destTabId) :
484 LogEntry(guildId, guid), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid),
485 m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { }
486
487 BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, uint8 tabId, GuildBankEventLogTypes eventType, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount, uint8 destTabId) :
488 LogEntry(guildId, guid, timestamp), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid),
489 m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { }
490
492
493 void SaveToDB(CharacterDatabaseTransaction trans) const override;
494 void WritePacket(WorldPackets::Guild::GuildBankLogQueryResults& packet) const;
495
496 private:
503 };
504
505 // News log entry
506 class NewsLogEntry : public LogEntry
507 {
508 public:
510 LogEntry(guildId, guid), m_type(type), m_playerGuid(playerGuid), m_flags(flags), m_value(value) { }
511
512 NewsLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildNews type, ObjectGuid playerGuid, uint32 flags, uint32 value) :
513 LogEntry(guildId, guid, timestamp), m_type(type), m_playerGuid(playerGuid), m_flags(flags), m_value(value) { }
514
516
517 GuildNews GetType() const { return m_type; }
518 ObjectGuid GetPlayerGuid() const { return m_playerGuid; }
519 uint32 GetValue() const { return m_value; }
520 uint32 GetFlags() const { return m_flags; }
521 void SetSticky(bool sticky)
522 {
523 if (sticky)
524 m_flags |= 1;
525 else
526 m_flags &= ~1;
527 }
528
529 void SaveToDB(CharacterDatabaseTransaction trans) const override;
530 void WritePacket(WorldPackets::Guild::GuildNews& newsPacket) const;
531
532 private:
537 };
538
539 // Class encapsulating work with events collection
540 template <typename Entry>
542 {
543 public:
544 LogHolder();
545
546 // Checks if new log entry can be added to holder
547 bool CanInsert() const { return m_log.size() < m_maxRecords; }
548
549 // Adds event from DB to collection
550 template <typename... Ts>
551 void LoadEvent(Ts&&... args);
552
553 // Adds new event to collection and saves it to DB
554 template <typename... Ts>
555 Entry& AddEvent(CharacterDatabaseTransaction trans, Ts&&... args);
556
557 uint32 GetNextGUID();
558 std::list<Entry>& GetGuildLog() { return m_log; }
559 std::list<Entry> const& GetGuildLog() const { return m_log; }
560
561 private:
562 std::list<Entry> m_log;
565 };
566
567 // Class encapsulating guild rank data
569 {
570 public:
571 RankInfo(): m_guildId(UI64LIT(0)), m_rankId(GuildRankId(0xFF)), m_rankOrder(GuildRankOrder(0)), m_rights(GR_RIGHT_NONE), m_bankMoneyPerDay(0) { }
572 RankInfo(ObjectGuid::LowType guildId) : m_guildId(guildId), m_rankId(GuildRankId(0xFF)), m_rankOrder(GuildRankOrder(0)), m_rights(GR_RIGHT_NONE), m_bankMoneyPerDay(0) { }
573 RankInfo(ObjectGuid::LowType guildId, GuildRankId rankId, GuildRankOrder rankOrder, std::string_view name, uint32 rights, uint32 money) :
574 m_guildId(guildId), m_rankId(rankId), m_rankOrder(rankOrder), m_name(name), m_rights(rights), m_bankMoneyPerDay(money) { }
575
576 void LoadFromDB(Field* fields);
577 void SaveToDB(CharacterDatabaseTransaction trans) const;
578
579 GuildRankId GetId() const { return m_rankId; }
580
581 GuildRankOrder GetOrder() const { return m_rankOrder; }
582 void SetOrder(GuildRankOrder rankOrder) { m_rankOrder = rankOrder; }
583
584 std::string const& GetName() const { return m_name; }
585 void SetName(std::string_view name);
586
587 uint32 GetRights() const { return m_rights; }
588 void SetRights(uint32 rights);
589
591 {
592 return m_rankId != GuildRankId::GuildMaster ? m_bankMoneyPerDay : GUILD_WITHDRAW_MONEY_UNLIMITED;
593 }
594
595 void SetBankMoneyPerDay(uint32 money);
596
597 inline int8 GetBankTabRights(uint8 tabId) const
598 {
599 return tabId < GUILD_BANK_MAX_TABS ? m_bankTabRightsAndSlots[tabId].GetRights() : 0;
600 }
601
603 {
604 return tabId < GUILD_BANK_MAX_TABS ? m_bankTabRightsAndSlots[tabId].GetSlots() : 0;
605 }
606
607 void SetBankTabSlotsAndRights(GuildBankRightsAndSlots rightsAndSlots, bool saveToDB);
608 void CreateMissingTabsIfNeeded(uint8 ranks, CharacterDatabaseTransaction trans, bool logOnCreate = false);
609
610 private:
614 std::string m_name;
617 std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS> m_bankTabRightsAndSlots = {};
618 };
619
621 {
622 public:
623 BankTab(ObjectGuid::LowType guildId, uint8 tabId);
624
625 void LoadFromDB(Field* fields);
626 bool LoadItemFromDB(Field* fields);
627 void Delete(CharacterDatabaseTransaction trans, bool removeItemsFromDB = false);
628
629 void SetInfo(std::string_view name, std::string_view icon);
630 void SetText(std::string_view text);
631 void SendText(Guild const* guild, WorldSession* session) const;
632
633 std::string const& GetName() const { return m_name; }
634 std::string const& GetIcon() const { return m_icon; }
635 std::string const& GetText() const { return m_text; }
636
637 inline Item* GetItem(uint8 slotId) const { return slotId < GUILD_BANK_MAX_SLOTS ? m_items[slotId] : nullptr; }
638 bool SetItem(CharacterDatabaseTransaction trans, uint8 slotId, Item* item);
639
640 private:
643
644 std::array<Item*, GUILD_BANK_MAX_SLOTS> m_items = {};
645 std::string m_name;
646 std::string m_icon;
647 std::string m_text;
648 };
649
650 // Movement data
652 {
653 public:
654 MoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId);
655 virtual ~MoveItemData();
656
657 virtual bool IsBank() const = 0;
658 // Initializes item pointer. Returns true, if item exists, false otherwise.
659 virtual bool InitItem() = 0;
660 // Checks splited amount against item. Splited amount cannot be more that number of items in stack.
661 virtual bool CheckItem(uint32& splitedAmount);
662 // Defines if player has rights to save item in container
663 virtual bool HasStoreRights(MoveItemData* /*pOther*/) const { return true; }
664 // Defines if player has rights to withdraw item from container
665 virtual bool HasWithdrawRights(MoveItemData* /*pOther*/) const { return true; }
666 // Checks if container can store specified item
667 InventoryResult CanStore(Item* pItem, bool swap, bool sendError);
668 // Clones stored item
669 bool CloneItem(uint32 count);
670 // Remove item from container (if splited update items fields)
671 virtual void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData* pOther, uint32 splitedAmount = 0) = 0;
672 // Saves item to container
673 virtual Item* StoreItem(CharacterDatabaseTransaction trans, Item* pItem) = 0;
674 // Log bank event
675 virtual void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData* pFrom, uint32 count) const = 0;
676 // Log GM action
677 virtual void LogAction(MoveItemData* pFrom) const;
678 // Copy slots id from position vector
679 void CopySlots(SlotIds& ids) const;
680 // Sends equip error to player
681 void SendEquipError(InventoryResult result, Item const* item);
682
683 Item* GetItem(bool isCloned = false) const { return isCloned ? m_pClonedItem : m_pItem; }
684 uint8 GetContainer() const { return m_container; }
685 uint8 GetSlotId() const { return m_slotId; }
686
687 protected:
688 virtual InventoryResult CanStore(Item* pItem, bool swap) = 0;
689
696 std::vector<ItemPosCount> m_vec;
697 };
698
700 {
701 public:
702 PlayerMoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId) :
703 MoveItemData(guild, player, container, slotId) { }
704
705 bool IsBank() const override { return false; }
706 bool InitItem() override;
707 void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData* pOther, uint32 splitedAmount = 0) override;
708 Item* StoreItem(CharacterDatabaseTransaction trans, Item* pItem) override;
709 void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData* pFrom, uint32 count) const override;
710
711 protected:
712 InventoryResult CanStore(Item* pItem, bool swap) override;
713 };
714
716 {
717 public:
718 BankMoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId) :
719 MoveItemData(guild, player, container, slotId) { }
720
721 bool IsBank() const override { return true; }
722 bool InitItem() override;
723 bool HasStoreRights(MoveItemData* pOther) const override;
724 bool HasWithdrawRights(MoveItemData* pOther) const override;
725 void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData* pOther, uint32 splitedAmount) override;
726 Item* StoreItem(CharacterDatabaseTransaction trans, Item* pItem) override;
727 void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData* pFrom, uint32 count) const override;
728 void LogAction(MoveItemData* pFrom) const override;
729
730 protected:
731 InventoryResult CanStore(Item* pItem, bool swap) override;
732
733 private:
734 Item* _StoreItem(CharacterDatabaseTransaction trans, BankTab* pTab, Item* pItem, ItemPosCount& pos, bool clone) const;
735 bool _ReserveSpace(uint8 slotId, Item* pItem, Item* pItemDest, uint32& count);
736 void CanStoreItemInTab(Item* pItem, uint8 skipSlotId, bool merge, uint32& count);
737 };
738
739 public:
740 static void SendCommandResult(WorldSession* session, GuildCommandType type, GuildCommandError errCode, std::string_view param = "");
741 static void SendSaveEmblemResult(WorldSession* session, GuildEmblemError errCode);
742
743 Guild();
744 ~Guild();
745
746 bool Create(Player* pLeader, std::string_view name);
747 void Disband();
748
749 void SaveToDB();
750
751 // Getters
752 ObjectGuid::LowType GetId() const { return m_id; }
753 ObjectGuid GetGUID() const { return ObjectGuid::Create<HighGuid::Guild>(m_id); }
754 ObjectGuid GetLeaderGUID() const { return m_leaderGuid; }
755 std::string const& GetName() const { return m_name; }
756 std::string const& GetMOTD() const { return m_motd; }
757 std::string const& GetInfo() const { return m_info; }
758 time_t GetCreatedDate() const { return m_createdDate; }
759 uint64 GetBankMoney() const { return m_bankMoney; }
760
761 bool SetName(std::string_view name);
762
763 // Handle client commands
764 void HandleRoster(WorldSession* session);
765 void SendQueryResponse(WorldSession* session);
766 void HandleSetAchievementTracking(WorldSession* session, uint32 const* achievementIdsBegin, uint32 const* achievementIdsEnd);
767 void HandleGetAchievementMembers(WorldSession* session, uint32 achievementId) const;
768 void HandleSetMOTD(WorldSession* session, std::string_view motd);
769 void HandleSetInfo(WorldSession* session, std::string_view info);
770 void HandleSetEmblem(WorldSession* session, EmblemInfo const& emblemInfo);
771 void HandleSetNewGuildMaster(WorldSession* session, std::string_view name, bool isSelfPromote);
772 void HandleSetBankTabInfo(WorldSession* session, uint8 tabId, std::string_view name, std::string_view icon);
773 void HandleSetMemberNote(WorldSession* session, std::string_view note, ObjectGuid guid, bool isPublic);
774 void HandleSetRankInfo(WorldSession* session, GuildRankId rankId, std::string_view name, uint32 rights, uint32 moneyPerDay, std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS> const& rightsAndSlots);
775 void HandleBuyBankTab(WorldSession* session, uint8 tabId);
776 void HandleInviteMember(WorldSession* session, std::string_view name);
777 void HandleAcceptMember(WorldSession* session);
778 void HandleLeaveMember(WorldSession* session);
779 void HandleRemoveMember(WorldSession* session, ObjectGuid guid);
780 void HandleUpdateMemberRank(WorldSession* session, ObjectGuid guid, bool demote);
781 void HandleSetMemberRank(WorldSession* session, ObjectGuid guid, ObjectGuid setterGuid, GuildRankOrder rank);
782 void HandleAddNewRank(WorldSession* session, std::string_view name);
783 void HandleRemoveRank(WorldSession* session, GuildRankOrder rankOrder);
784 void HandleShiftRank(WorldSession* session, GuildRankOrder rankOrder, bool shiftUp);
785 void HandleMemberDepositMoney(WorldSession* session, uint64 amount, bool cashFlow = false);
786 bool HandleMemberWithdrawMoney(WorldSession* session, uint64 amount, bool repair = false);
787 void HandleMemberLogout(WorldSession* session);
788 void HandleDelete(WorldSession* session);
789 void HandleGuildPartyRequest(WorldSession* session) const;
790 void HandleNewsSetSticky(WorldSession* session, uint32 newsId, bool sticky);
791 void HandleGuildRequestChallengeUpdate(WorldSession* session) const;
792
793 void UpdateMemberData(Player* player, uint8 dataid, uint32 value);
794 void OnPlayerStatusChange(Player* player, uint32 flag, bool state);
795
796 // Send info to client
797 void SendGuildRankInfo(WorldSession* session) const;
798 void SendEventLog(WorldSession* session) const;
799 void SendBankLog(WorldSession* session, uint8 tabId) const;
800 void SendBankList(WorldSession* session, uint8 tabId, bool fullUpdate) const;
801 void SendBankTabText(WorldSession* session, uint8 tabId) const;
802 void SendPermissions(WorldSession* session) const;
803 void SendMoneyInfo(WorldSession* session) const;
804 void SendLoginInfo(WorldSession* session);
805 void SendNewsUpdate(WorldSession* session) const;
806
807 // Send events
808 void SendEventAwayChanged(ObjectGuid const& memberGuid, bool afk, bool dnd);
809 void SendEventBankMoneyChanged() const;
810 void SendEventMOTD(WorldSession* session, bool broadcast = false) const;
811 void SendEventNewLeader(Member* newLeader, Member* oldLeader, bool isSelfPromoted = false) const;
812 void SendEventPlayerLeft(Member* leaver, Member* remover = nullptr, bool isRemoved = false) const;
813 void SendEventPresenceChanged(WorldSession* session, bool loggedOn, bool broadcast = false) const;
814
815 // Load from DB
816 bool LoadFromDB(Field* fields);
817 void LoadGuildNewsLogFromDB(Field* fields);
818 void LoadRankFromDB(Field* fields);
819 bool LoadMemberFromDB(Field* fields);
820 bool LoadEventLogFromDB(Field* fields);
821 void LoadBankRightFromDB(Field* fields);
822 void LoadBankTabFromDB(Field* fields);
823 bool LoadBankEventLogFromDB(Field* fields);
824 bool LoadBankItemFromDB(Field* fields);
825 bool Validate();
826
827 // Broadcasts
828 void BroadcastToGuild(WorldSession* session, bool officerOnly, std::string_view msg, uint32 language = LANG_UNIVERSAL) const;
829 void BroadcastAddonToGuild(WorldSession* session, bool officerOnly, std::string_view msg, std::string_view prefix, bool isLogged) const;
830 void BroadcastPacketToRank(WorldPacket const* packet, GuildRankId rankId) const;
831 void BroadcastPacket(WorldPacket const* packet) const;
832
833 void MassInviteToEvent(WorldSession* session, uint32 minLevel, uint32 maxLevel, GuildRankOrder minRank);
834
835 template<class Do>
836 void BroadcastWorker(Do&& _do, Player const* except = nullptr) const
837 {
838 for (auto const& [_, member] : m_members)
839 if (Player* player = member.FindConnectedPlayer())
840 if (player != except)
841 _do(player);
842 }
843
844 // Members
845 // Adds member to guild. If rankId == GUILD_RANK_NONE, lowest rank is assigned.
846 bool AddMember(CharacterDatabaseTransaction trans, ObjectGuid guid, Optional<GuildRankId> rankId = {});
847 bool DeleteMember(CharacterDatabaseTransaction trans, ObjectGuid guid, bool isDisbanding = false, bool isKicked = false);
848 bool ChangeMemberRank(CharacterDatabaseTransaction trans, ObjectGuid guid, GuildRankId newRank);
849 bool IsMember(ObjectGuid guid) const;
850 uint32 GetMembersCount() const { return uint32(m_members.size()); }
851 std::unordered_map<ObjectGuid, Member> const& GetMembers() const { return m_members; }
852 uint64 GetMemberAvailableMoneyForRepairItems(ObjectGuid guid) const;
853 std::vector<Player*> GetMembersTrackingCriteria(uint32 criteriaId) const;
854
855 // Bank
856 void SwapItems(Player* player, uint8 tabId, uint8 slotId, uint8 destTabId, uint8 destSlotId, uint32 splitedAmount);
857 void SwapItemsWithInventory(Player* player, bool toChar, uint8 tabId, uint8 slotId, uint8 playerBag, uint8 playerSlotId, uint32 splitedAmount);
858
859 // Bank tabs
860 void SetBankTabText(uint8 tabId, std::string_view text);
861
862 GuildAchievementMgr& GetAchievementMgr() { return *m_achievementMgr; }
863 GuildAchievementMgr const& GetAchievementMgr() const { return *m_achievementMgr; }
864
865 // Pre-6.x guild leveling
867
868 void AddGuildNews(uint8 type, ObjectGuid guid, uint32 flags, uint32 value);
869
870 EmblemInfo const& GetEmblemInfo() const { return m_emblemInfo; }
871 void ResetTimes(bool weekly);
872
873 bool HasAchieved(uint32 achievementId) const;
874 void UpdateCriteria(CriteriaType type, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, WorldObject const* ref, Player* player);
875
876 Trinity::unique_weak_ptr<Guild> GetWeakPtr() const { return m_weakRef; }
877 void SetWeakPtr(Trinity::unique_weak_ptr<Guild> weakRef) { m_weakRef = std::move(weakRef); }
878
879 protected:
881 std::string m_name;
883 std::string m_motd;
884 std::string m_info;
886
890
891 std::vector<RankInfo> m_ranks;
892 std::unordered_map<ObjectGuid, Member> m_members;
893 std::vector<BankTab> m_bankTabs;
894
895 // These are actually ordered lists. The first element is the oldest entry.
897 std::array<LogHolder<BankEventLogEntry>, GUILD_BANK_MAX_TABS + 1> m_bankEventLog = {};
899 std::unique_ptr<GuildAchievementMgr> m_achievementMgr;
900
902
903 private:
904 inline uint8 _GetRanksSize() const { return uint8(m_ranks.size()); }
905 RankInfo const* GetRankInfo(GuildRankId rankId) const;
906 RankInfo* GetRankInfo(GuildRankId rankId);
907 RankInfo const* GetRankInfo(GuildRankOrder rankOrder) const;
908 RankInfo* GetRankInfo(GuildRankOrder rankOrder);
909 bool _HasRankRight(Player const* player, uint32 right) const;
910 public:
911 bool HasAnyRankRight(GuildRankId rankId, GuildRankRights rights) const;
912
913 private:
914 inline GuildRankId _GetLowestRankId() const { return m_ranks.back().GetId(); }
915
916 inline uint8 _GetPurchasedTabsSize() const { return uint8(m_bankTabs.size()); }
917 inline BankTab* GetBankTab(uint8 tabId) { return tabId < m_bankTabs.size() ? &m_bankTabs[tabId] : nullptr; }
918 inline BankTab const* GetBankTab(uint8 tabId) const { return tabId < m_bankTabs.size() ? &m_bankTabs[tabId] : nullptr; }
919
920 public:
921 inline Member const* GetMember(ObjectGuid const& guid) const
922 {
923 auto itr = m_members.find(guid);
924 return (itr != m_members.end()) ? &itr->second : nullptr;
925 }
926
927 private:
928 inline Member* GetMember(ObjectGuid const& guid)
929 {
930 auto itr = m_members.find(guid);
931 return (itr != m_members.end()) ? &itr->second : nullptr;
932 }
933
934 inline Member* GetMember(std::string_view name)
935 {
936 for (auto itr = m_members.begin(); itr != m_members.end(); ++itr)
937 if (itr->second.GetName() == name)
938 return &itr->second;
939
940 return nullptr;
941 }
942
943 static void _DeleteMemberFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType lowguid);
944
945 // Tries to create new bank tab
946 void _CreateNewBankTab();
947 // Creates default guild ranks with names in given locale
948 void _CreateDefaultGuildRanks(CharacterDatabaseTransaction trans, LocaleConstant loc);
949 // Creates new rank
950 bool _CreateRank(CharacterDatabaseTransaction trans, std::string_view name, uint32 rights);
951 // Update account number when member added/removed from guild
952 void _UpdateAccountsNumber();
953 bool _IsLeader(Player* player) const;
954 void _DeleteBankItems(CharacterDatabaseTransaction trans, bool removeItemsFromDB = false);
955 bool _ModifyBankMoney(CharacterDatabaseTransaction trans, uint64 amount, bool add);
956 void _SetLeader(CharacterDatabaseTransaction trans, Member& leader);
957
958 void _SetRankBankMoneyPerDay(GuildRankId rankId, uint32 moneyPerDay);
959 void _SetRankBankTabRightsAndSlots(GuildRankId rankId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB = true);
960 int8 _GetRankBankTabRights(GuildRankId rankId, uint8 tabId) const;
961 uint32 _GetRankRights(GuildRankId rankId) const;
962 uint32 _GetRankBankMoneyPerDay(GuildRankId rankId) const;
963 int32 _GetRankBankTabSlotsPerDay(GuildRankId rankId, uint8 tabId) const;
964 std::string _GetRankName(GuildRankId rankId) const;
965
966 int32 _GetMemberRemainingSlots(Member const& member, uint8 tabId) const;
967 int64 _GetMemberRemainingMoney(Member const& member) const;
968 void _UpdateMemberWithdrawSlots(CharacterDatabaseTransaction trans, ObjectGuid guid, uint8 tabId);
969 bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, int32 rights) const;
970
971 void _LogEvent(GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2 = UI64LIT(0), uint8 newRank = 0);
972 void _LogBankEvent(CharacterDatabaseTransaction trans, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount = 0, uint8 destTabId = 0);
973
974 Item* _GetItem(uint8 tabId, uint8 slotId) const;
975 void _RemoveItem(CharacterDatabaseTransaction trans, uint8 tabId, uint8 slotId);
976 void _MoveItems(MoveItemData* pSrc, MoveItemData* pDest, uint32 splitedAmount) const;
977 static InventoryResult _DoItemsMove(MoveItemData* pSrc, MoveItemData* pDest, bool sendError, uint32 splitedAmount = 0);
978
979 void _SendBankContentUpdate(MoveItemData* pSrc, MoveItemData* pDest) const;
980 void _SendBankContentUpdate(uint8 tabId, SlotIds slots) const;
981 void SendGuildRanksUpdate(ObjectGuid setterGuid, ObjectGuid targetGuid, GuildRankId rank);
982};
983#endif
LocaleConstant
Definition: Common.h:48
CriteriaType
Definition: DBCEnums.h:503
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
#define TC_GAME_API
Definition: Define.h:123
uint8_t uint8
Definition: Define.h:144
int64_t int64
Definition: Define.h:137
int8_t int8
Definition: Define.h:140
int32_t int32
Definition: Define.h:138
uint64_t uint64
Definition: Define.h:141
#define UI64LIT(N)
Definition: Define.h:127
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
uint16 flags
Definition: DisableMgr.cpp:49
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_DEPOSIT_ITEM
Definition: Guild.h:197
@ GUILD_BANK_LOG_WITHDRAW_MONEY
Definition: Guild.h:201
@ GUILD_BANK_LOG_UNK1
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
@ GUILD_BANK_LOG_BUY_SLOT
Definition: Guild.h:205
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)
Definition: QuestPools.cpp:50
@ 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:90
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:483
GuildBankEventLogTypes m_eventType
Definition: Guild.h:497
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:487
ObjectGuid::LowType m_playerGuid
Definition: Guild.h:499
static bool IsMoneyEvent(GuildBankEventLogTypes eventType)
Definition: Guild.h:469
bool IsMoneyEvent() const
Definition: Guild.h:478
bool IsBank() const override
Definition: Guild.h:721
BankMoveItemData(Guild *guild, Player *player, uint8 container, uint8 slotId)
Definition: Guild.h:718
std::string const & GetName() const
Definition: Guild.h:633
std::string const & GetIcon() const
Definition: Guild.h:634
std::string m_icon
Definition: Guild.h:646
std::string m_name
Definition: Guild.h:645
Item * GetItem(uint8 slotId) const
Definition: Guild.h:637
uint8 m_tabId
Definition: Guild.h:642
std::string const & GetText() const
Definition: Guild.h:635
ObjectGuid::LowType m_guildId
Definition: Guild.h:641
std::string m_text
Definition: Guild.h:647
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:558
uint32 m_nextGUID
Definition: Guild.h:564
uint32 const m_maxRecords
Definition: Guild.h:563
std::list< Entry > m_log
Definition: Guild.h:562
std::list< Entry > const & GetGuildLog() const
Definition: Guild.h:559
bool CanInsert() const
Definition: Guild.h:547
std::string GetOfficerNote() const
Definition: Guild.h:361
std::string const & GetName() const
Definition: Guild.h:355
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
GuildRankId GetRankId() const
Definition: Guild.h:357
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
std::string GetPublicNote() const
Definition: Guild.h:360
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
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:695
Player * m_pPlayer
Definition: Guild.h:691
std::vector< ItemPosCount > m_vec
Definition: Guild.h:696
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:683
virtual void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData *pFrom, uint32 count) const =0
Guild * m_pGuild
Definition: Guild.h:690
uint8 GetSlotId() const
Definition: Guild.h:685
uint8 GetContainer() const
Definition: Guild.h:684
Item * m_pItem
Definition: Guild.h:694
virtual bool HasWithdrawRights(MoveItemData *) const
Definition: Guild.h:665
virtual bool HasStoreRights(MoveItemData *) const
Definition: Guild.h:663
virtual bool IsBank() const =0
uint8 m_container
Definition: Guild.h:692
virtual bool InitItem()=0
virtual void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData *pOther, uint32 splitedAmount=0)=0
uint32 m_value
Definition: Guild.h:536
ObjectGuid m_playerGuid
Definition: Guild.h:534
uint32 m_flags
Definition: Guild.h:535
uint32 GetFlags() const
Definition: Guild.h:520
GuildNews GetType() const
Definition: Guild.h:517
GuildNews m_type
Definition: Guild.h:533
NewsLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildNews type, ObjectGuid playerGuid, uint32 flags, uint32 value)
Definition: Guild.h:512
void SetSticky(bool sticky)
Definition: Guild.h:521
ObjectGuid GetPlayerGuid() const
Definition: Guild.h:518
uint32 GetValue() const
Definition: Guild.h:519
NewsLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildNews type, ObjectGuid playerGuid, uint32 flags, uint32 value)
Definition: Guild.h:509
PlayerMoveItemData(Guild *guild, Player *player, uint8 container, uint8 slotId)
Definition: Guild.h:702
bool IsBank() const override
Definition: Guild.h:705
uint32 m_rights
Definition: Guild.h:615
void SetOrder(GuildRankOrder rankOrder)
Definition: Guild.h:582
GuildRankOrder m_rankOrder
Definition: Guild.h:613
std::string const & GetName() const
Definition: Guild.h:584
uint32 GetRights() const
Definition: Guild.h:587
int8 GetBankTabRights(uint8 tabId) const
Definition: Guild.h:597
uint32 GetBankMoneyPerDay() const
Definition: Guild.h:590
uint32 m_bankMoneyPerDay
Definition: Guild.h:616
int32 GetBankTabSlotsPerDay(uint8 tabId) const
Definition: Guild.h:602
RankInfo(ObjectGuid::LowType guildId)
Definition: Guild.h:572
std::string m_name
Definition: Guild.h:614
GuildRankOrder GetOrder() const
Definition: Guild.h:581
GuildRankId GetId() const
Definition: Guild.h:579
ObjectGuid::LowType m_guildId
Definition: Guild.h:611
GuildRankId m_rankId
Definition: Guild.h:612
RankInfo(ObjectGuid::LowType guildId, GuildRankId rankId, GuildRankOrder rankOrder, std::string_view name, uint32 rights, uint32 money)
Definition: Guild.h:573
Definition: Guild.h:329
GuildRankId _GetLowestRankId() const
Definition: Guild.h:914
uint64 GetBankMoney() const
Definition: Guild.h:759
void SetWeakPtr(Trinity::unique_weak_ptr< Guild > weakRef)
Definition: Guild.h:877
uint64 m_bankMoney
Definition: Guild.h:889
ObjectGuid GetLeaderGUID() const
Definition: Guild.h:754
std::vector< BankTab > m_bankTabs
Definition: Guild.h:893
std::unique_ptr< GuildAchievementMgr > m_achievementMgr
Definition: Guild.h:899
ObjectGuid::LowType GetId() const
Definition: Guild.h:752
Member * GetMember(std::string_view name)
Definition: Guild.h:934
uint32 m_accountsNumber
Definition: Guild.h:888
uint8 GetLevel() const
Definition: Guild.h:866
time_t m_createdDate
Definition: Guild.h:885
uint8 _GetPurchasedTabsSize() const
Definition: Guild.h:916
Member * GetMember(ObjectGuid const &guid)
Definition: Guild.h:928
std::vector< RankInfo > m_ranks
Definition: Guild.h:891
std::string m_name
Definition: Guild.h:881
std::unordered_map< ObjectGuid, Member > m_members
Definition: Guild.h:892
std::string const & GetName() const
Definition: Guild.h:755
ObjectGuid m_leaderGuid
Definition: Guild.h:882
void BroadcastWorker(Do &&_do, Player const *except=nullptr) const
Definition: Guild.h:836
LogHolder< EventLogEntry > m_eventLog
Definition: Guild.h:896
std::unordered_map< ObjectGuid, Member > const & GetMembers() const
Definition: Guild.h:851
time_t GetCreatedDate() const
Definition: Guild.h:758
LogHolder< NewsLogEntry > m_newsLog
Definition: Guild.h:898
std::string const & GetInfo() const
Definition: Guild.h:757
EmblemInfo const & GetEmblemInfo() const
Definition: Guild.h:870
GuildAchievementMgr & GetAchievementMgr()
Definition: Guild.h:862
GuildAchievementMgr const & GetAchievementMgr() const
Definition: Guild.h:863
std::string m_motd
Definition: Guild.h:883
uint8 _GetRanksSize() const
Definition: Guild.h:904
BankTab * GetBankTab(uint8 tabId)
Definition: Guild.h:917
std::string const & GetMOTD() const
Definition: Guild.h:756
Member const * GetMember(ObjectGuid const &guid) const
Definition: Guild.h:921
EmblemInfo m_emblemInfo
Definition: Guild.h:887
Trinity::unique_weak_ptr< Guild > m_weakRef
Definition: Guild.h:901
std::string m_info
Definition: Guild.h:884
uint32 GetMembersCount() const
Definition: Guild.h:850
ObjectGuid GetGUID() const
Definition: Guild.h:753
Trinity::unique_weak_ptr< Guild > GetWeakPtr() const
Definition: Guild.h:876
ObjectGuid::LowType m_id
Definition: Guild.h:880
BankTab const * GetBankTab(uint8 tabId) const
Definition: Guild.h:918
Definition: Item.h:170
uint64 LowType
Definition: ObjectGuid.h:278
Player session in the World.
Definition: WorldSession.h:963
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
TC_GAME_API Player * FindConnectedPlayer(ObjectGuid const &)
std::unique_ptr< VignetteData > Create(VignetteEntry const *vignetteData, WorldObject const *owner)
Definition: Vignette.cpp:72
Trinity::RaceMask< uint64 > RaceMask
Definition: Guild.h:255
std::vector< uint32 > AchievementsRequired
Definition: Guild.h:257
uint32 ItemID
Definition: Guild.h:253
uint8 MinGuildRep
Definition: Guild.h:254
uint64 Cost
Definition: Guild.h:256