AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
Guild::BankMoveItemData Class Reference
Inheritance diagram for Guild::BankMoveItemData:
Guild::MoveItemData

Public Member Functions

 BankMoveItemData (Guild *guild, Player *player, uint8 container, uint8 slotId)
 
bool IsBank () const override
 
bool InitItem () override
 
bool HasStoreRights (MoveItemData *pOther) const override
 
bool HasWithdrawRights (MoveItemData *pOther) const override
 
void RemoveItem (CharacterDatabaseTransaction trans, MoveItemData *pOther, uint32 splitedAmount) override
 
ItemStoreItem (CharacterDatabaseTransaction trans, Item *pItem) override
 
void LogBankEvent (CharacterDatabaseTransaction trans, MoveItemData *pFrom, uint32 count) const override
 
void LogAction (MoveItemData *pFrom) const override
 
- Public Member Functions inherited from Guild::MoveItemData
 MoveItemData (Guild *guild, Player *player, uint8 container, uint8 slotId)
 
virtual ~MoveItemData ()
 
virtual bool CheckItem (uint32 &splitedAmount)
 
bool CanStore (Item *pItem, bool swap, bool sendError)
 
bool CloneItem (uint32 count)
 
void CopySlots (SlotIds &ids) const
 
ItemGetItem (bool isCloned=false) const
 
uint8 GetContainer () const
 
uint8 GetSlotId () const
 

Protected Member Functions

InventoryResult CanStore (Item *pItem, bool swap) override
 

Private Member Functions

Item_StoreItem (CharacterDatabaseTransaction trans, BankTab *pTab, Item *pItem, ItemPosCount &pos, bool clone) const
 
bool _ReserveSpace (uint8 slotId, Item *pItem, Item *pItemDest, uint32 &count)
 
void CanStoreItemInTab (Item *pItem, uint8 skipSlotId, bool merge, uint32 &count)
 

Additional Inherited Members

- Protected Attributes inherited from Guild::MoveItemData
Guildm_pGuild
 
Playerm_pPlayer
 
uint8 m_container
 
uint8 m_slotId
 
Itemm_pItem
 
Itemm_pClonedItem
 
ItemPosCountVec m_vec
 

Detailed Description

Constructor & Destructor Documentation

◆ BankMoveItemData()

Guild::BankMoveItemData::BankMoveItemData ( Guild guild,
Player player,
uint8  container,
uint8  slotId 
)
inline
654 :
655 MoveItemData(guild, player, container, slotId) { }
MoveItemData(Guild *guild, Player *player, uint8 container, uint8 slotId)
Definition Guild.h:592

Member Function Documentation

◆ _ReserveSpace()

bool Guild::BankMoveItemData::_ReserveSpace ( uint8  slotId,
Item pItem,
Item pItemDest,
uint32 count 
)
private
950{
951 uint32 requiredSpace = pItem->GetMaxStackCount();
952 if (pItemDest)
953 {
954 // Make sure source and destination items match and destination item has space for more stacks.
955 if (pItemDest->GetEntry() != pItem->GetEntry() || pItemDest->GetCount() >= pItem->GetMaxStackCount())
956 return false;
957 requiredSpace -= pItemDest->GetCount();
958 }
959 // Let's not be greedy, reserve only required space
960 requiredSpace = std::min(requiredSpace, count);
961
962 // Reserve space
963 ItemPosCount pos(slotId, requiredSpace);
964 if (!pos.isContainedIn(m_vec))
965 {
966 m_vec.push_back(pos);
967 count -= requiredSpace;
968 }
969 return true;
970}
std::uint32_t uint32
Definition Define.h:107
ItemPosCountVec m_vec
Definition Guild.h:633
uint32 GetCount() const
Definition Item.h:272
uint32 GetMaxStackCount() const
Definition Item.h:274
uint32 GetEntry() const
Definition Object.h:117
Definition Player.h:751

References Item::GetCount(), Object::GetEntry(), Item::GetMaxStackCount(), and ItemPosCount::isContainedIn().

◆ _StoreItem()

Item * Guild::BankMoveItemData::_StoreItem ( CharacterDatabaseTransaction  trans,
BankTab pTab,
Item pItem,
ItemPosCount pos,
bool  clone 
) const
private
917{
918 uint8 slotId = uint8(pos.pos);
919 uint32 count = pos.count;
920 if (Item* pItemDest = pTab->GetItem(slotId))
921 {
922 pItemDest->SetCount(pItemDest->GetCount() + count);
923 pItemDest->FSetState(ITEM_CHANGED);
924 pItemDest->SaveToDB(trans);
925 if (!clone)
926 {
927 pItem->RemoveFromWorld();
928 pItem->DeleteFromDB(trans);
929 delete pItem;
930 }
931 return pItemDest;
932 }
933
934 if (clone)
935 pItem = pItem->CloneItem(count);
936 else
937 pItem->SetCount(count);
938
939 if (pItem && pTab->SetItem(trans, slotId, pItem))
940 return pItem;
941
942 return nullptr;
943}
std::uint8_t uint8
Definition Define.h:109
@ ITEM_CHANGED
Definition Item.h:210
Definition Item.h:220
Item * CloneItem(uint32 count, Player const *player=nullptr) const
Definition Item.cpp:1118
void SetCount(uint32 value)
Definition Item.h:273
static void DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid)
Definition Item.cpp:518
virtual void RemoveFromWorld()
Definition Object.cpp:155
uint32 count
Definition Player.h:755
uint16 pos
Definition Player.h:754

References Item::CloneItem(), ItemPosCount::count, Item::DeleteFromDB(), Guild::BankTab::GetItem(), ITEM_CHANGED, ItemPosCount::pos, Object::RemoveFromWorld(), Item::SetCount(), and Guild::BankTab::SetItem().

◆ CanStore()

InventoryResult Guild::BankMoveItemData::CanStore ( Item pItem,
bool  swap 
)
overrideprotectedvirtual

Implements Guild::MoveItemData.

993{
994 LOG_DEBUG("guild", "GUILD STORAGE: CanStore() tab = {}, slot = {}, item = {}, count = {}",
995 m_container, m_slotId, pItem->GetEntry(), pItem->GetCount());
996 uint32 count = pItem->GetCount();
997 // Soulbound items cannot be moved
998 if (pItem->IsSoulBound())
1000
1001 // Prevent swapping limited duration items into guild bank
1002 if (pItem->GetTemplate()->Duration > 0)
1004
1005 // Make sure destination bank tab exists
1008
1009 // Slot explicitely specified. Check it.
1010 if (m_slotId != NULL_SLOT)
1011 {
1012 Item* pItemDest = m_pGuild->_GetItem(m_container, m_slotId);
1013 // Ignore swapped item (this slot will be empty after move)
1014 if ((pItemDest == pItem) || swap)
1015 pItemDest = nullptr;
1016
1017 if (!_ReserveSpace(m_slotId, pItem, pItemDest, count))
1019
1020 if (count == 0)
1021 return EQUIP_ERR_OK;
1022 }
1023
1024 // Slot was not specified or it has not enough space for all the items in stack
1025 // Search for stacks to merge with
1026 if (pItem->GetMaxStackCount() > 1)
1027 {
1028 CanStoreItemInTab(pItem, m_slotId, true, count);
1029 if (count == 0)
1030 return EQUIP_ERR_OK;
1031 }
1032
1033 // Search free slot for item
1034 CanStoreItemInTab(pItem, m_slotId, false, count);
1035 if (count == 0)
1036 return EQUIP_ERR_OK;
1037
1038 return EQUIP_ERR_BANK_FULL;
1039}
@ EQUIP_ERR_BANK_FULL
Definition Item.h:98
@ EQUIP_ERR_CANT_DROP_SOULBOUND
Definition Item.h:71
@ EQUIP_ERR_OK
Definition Item.h:47
@ EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG
Definition Item.h:62
@ EQUIP_ERR_ITEM_CANT_STACK
Definition Item.h:66
@ EQUIP_ERR_ITEMS_CANT_BE_SWAPPED
Definition Item.h:68
@ NULL_SLOT
Definition Item.h:41
#define LOG_DEBUG(filterType__,...)
Definition Log.h:157
bool _ReserveSpace(uint8 slotId, Item *pItem, Item *pItemDest, uint32 &count)
Definition Guild.cpp:949
void CanStoreItemInTab(Item *pItem, uint8 skipSlotId, bool merge, uint32 &count)
Definition Guild.cpp:972
uint8 m_slotId
Definition Guild.h:630
Guild * m_pGuild
Definition Guild.h:627
uint8 m_container
Definition Guild.h:629
uint8 _GetPurchasedTabsSize() const
Definition Guild.h:816
Item * _GetItem(uint8 tabId, uint8 slotId) const
Definition Guild.cpp:2665
ItemTemplate const * GetTemplate() const
Definition Item.cpp:544
bool IsSoulBound() const
Definition Item.h:236
uint32 Duration
Definition ItemTemplate.h:686

References ItemTemplate::Duration, EQUIP_ERR_BANK_FULL, EQUIP_ERR_CANT_DROP_SOULBOUND, EQUIP_ERR_ITEM_CANT_STACK, EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG, EQUIP_ERR_ITEMS_CANT_BE_SWAPPED, EQUIP_ERR_OK, Item::GetCount(), Object::GetEntry(), Item::GetMaxStackCount(), Item::GetTemplate(), Item::IsSoulBound(), LOG_DEBUG, and NULL_SLOT.

◆ CanStoreItemInTab()

void Guild::BankMoveItemData::CanStoreItemInTab ( Item pItem,
uint8  skipSlotId,
bool  merge,
uint32 count 
)
private
973{
974 for (uint8 slotId = 0; (slotId < GUILD_BANK_MAX_SLOTS) && (count > 0); ++slotId)
975 {
976 // Skip slot already processed in CanStore (when destination slot was specified)
977 if (slotId == skipSlotId)
978 continue;
979
980 Item* pItemDest = m_pGuild->_GetItem(m_container, slotId);
981 if (pItemDest == pItem)
982 pItemDest = nullptr;
983
984 // If merge skip empty, if not merge skip non-empty
985 if ((pItemDest != nullptr) != merge)
986 continue;
987
988 _ReserveSpace(slotId, pItem, pItemDest, count);
989 }
990}
@ GUILD_BANK_MAX_SLOTS
Definition Guild.h:43

References GUILD_BANK_MAX_SLOTS.

◆ HasStoreRights()

bool Guild::BankMoveItemData::HasStoreRights ( MoveItemData pOther) const
overridevirtual

Reimplemented from Guild::MoveItemData.

828{
829 ASSERT(pOther);
830 // Do not check rights if item is being swapped within the same bank tab
831 if (pOther->IsBank() && pOther->GetContainer() == m_container)
832 return true;
834}
#define ASSERT
Definition Errors.h:68
@ GUILD_BANK_RIGHT_DEPOSIT_ITEM
Definition Guild.h:191
Player * m_pPlayer
Definition Guild.h:628
bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, uint32 rights) const
Definition Guild.cpp:2621
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114

References ASSERT, Guild::MoveItemData::GetContainer(), GUILD_BANK_RIGHT_DEPOSIT_ITEM, and Guild::MoveItemData::IsBank().

◆ HasWithdrawRights()

bool Guild::BankMoveItemData::HasWithdrawRights ( MoveItemData pOther) const
overridevirtual

Reimplemented from Guild::MoveItemData.

837{
838 ASSERT(pOther);
839 // Do not check rights if item is being swapped within the same bank tab
840 if (pOther->IsBank() && pOther->GetContainer() == m_container)
841 return true;
842
843 int32 slots = 0;
844 if (Member const* member = m_pGuild->GetMember(m_pPlayer->GetGUID()))
846
847 return slots != 0;
848}
std::int32_t int32
Definition Define.h:103
int32 _GetMemberRemainingSlots(Member const &member, uint8 tabId) const
Definition Guild.cpp:2581
const Member * GetMember(ObjectGuid guid) const
Definition Guild.h:381

References ASSERT, Guild::MoveItemData::GetContainer(), and Guild::MoveItemData::IsBank().

◆ InitItem()

bool Guild::BankMoveItemData::InitItem ( )
overridevirtual

Implements Guild::MoveItemData.

822{
824 return (m_pItem != nullptr);
825}
Item * m_pItem
Definition Guild.h:631

◆ IsBank()

bool Guild::BankMoveItemData::IsBank ( ) const
inlineoverridevirtual

Implements Guild::MoveItemData.

657{ return true; }

◆ LogAction()

void Guild::BankMoveItemData::LogAction ( MoveItemData pFrom) const
overridevirtual

Reimplemented from Guild::MoveItemData.

905{
908 {
909 LOG_GM(m_pPlayer->GetSession()->GetAccountId(), "GM {} (Account: {}) deposit item: {} (Entry: {} Count: {}) to guild bank named: {} (Guild ID: {})",
911 pFrom->GetItem()->GetTemplate()->Name1, pFrom->GetItem()->GetEntry(), pFrom->GetItem()->GetCount(),
913 }
914}
#define LOG_GM(accountId__,...)
Definition Log.h:164
virtual void LogAction(MoveItemData *pFrom) const
Definition Guild.cpp:746
uint32 GetId() const
Definition Guild.h:686
std::string const & GetName() const
Definition Guild.h:688
WorldSession * GetSession() const
Definition Player.h:2020
std::string const & GetName() const
Definition Object.h:528
bool HasPermission(uint32 permissionId)
Definition WorldSession.cpp:1551
uint32 GetAccountId() const
Definition WorldSession.h:453
@ RBAC_PERM_LOG_GM_TRADE
Definition RBAC.h:62

References Item::GetCount(), Object::GetEntry(), Guild::MoveItemData::GetItem(), Item::GetTemplate(), Guild::MoveItemData::IsBank(), LOG_GM, Guild::MoveItemData::LogAction(), ItemTemplate::Name1, and rbac::RBAC_PERM_LOG_GM_TRADE.

◆ LogBankEvent()

void Guild::BankMoveItemData::LogBankEvent ( CharacterDatabaseTransaction  trans,
MoveItemData pFrom,
uint32  count 
) const
overridevirtual

Implements Guild::MoveItemData.

892{
893 ASSERT(pFrom->GetItem());
894 if (pFrom->IsBank())
895 // Bank -> Bank
896 m_pGuild->_LogBankEvent(trans, GUILD_BANK_LOG_MOVE_ITEM, pFrom->GetContainer(), m_pPlayer->GetGUID(),
897 pFrom->GetItem()->GetEntry(), count, m_container);
898 else
899 // Char -> Bank
901 pFrom->GetItem()->GetEntry(), count);
902}
@ GUILD_BANK_LOG_MOVE_ITEM
Definition Guild.h:199
@ GUILD_BANK_LOG_DEPOSIT_ITEM
Definition Guild.h:197
void _LogBankEvent(CharacterDatabaseTransaction trans, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid playerGuid, uint32 itemOrMoney, uint16 itemStackCount=0, uint8 destTabId=0)
Definition Guild.cpp:2644
uint32 GetEntry() const
Definition ObjectGuid.h:144

References ASSERT, Guild::MoveItemData::GetContainer(), Object::GetEntry(), Guild::MoveItemData::GetItem(), GUILD_BANK_LOG_DEPOSIT_ITEM, GUILD_BANK_LOG_MOVE_ITEM, and Guild::MoveItemData::IsBank().

◆ RemoveItem()

void Guild::BankMoveItemData::RemoveItem ( CharacterDatabaseTransaction  trans,
MoveItemData pOther,
uint32  splitedAmount 
)
overridevirtual

Implements Guild::MoveItemData.

851{
853 if (splitedAmount)
854 {
855 m_pItem->SetCount(m_pItem->GetCount() - splitedAmount);
857 m_pItem->SaveToDB(trans);
858 }
859 else
860 {
862 m_pItem = nullptr;
863 }
864 // Decrease amount of player's remaining items (if item is moved to different tab or to player)
865 if (!pOther->IsBank() || pOther->GetContainer() != m_container)
867}
void _RemoveItem(CharacterDatabaseTransaction trans, uint8 tabId, uint8 slotId)
Definition Guild.cpp:2672
void _UpdateMemberWithdrawSlots(CharacterDatabaseTransaction trans, ObjectGuid guid, uint8 tabId)
Definition Guild.cpp:2610
virtual void SaveToDB(CharacterDatabaseTransaction trans)
Definition Item.cpp:336
void FSetState(ItemUpdateState state)
Definition Item.h:330

References ASSERT, Guild::MoveItemData::GetContainer(), Guild::MoveItemData::IsBank(), and ITEM_CHANGED.

◆ StoreItem()

Item * Guild::BankMoveItemData::StoreItem ( CharacterDatabaseTransaction  trans,
Item pItem 
)
overridevirtual

Implements Guild::MoveItemData.

870{
871 if (!pItem)
872 return nullptr;
873
874 BankTab* pTab = m_pGuild->GetBankTab(m_container);
875 if (!pTab)
876 return nullptr;
877
878 Item* pLastItem = pItem;
879 for (ItemPosCountVec::const_iterator itr = m_vec.begin(); itr != m_vec.end(); )
880 {
881 ItemPosCount pos(*itr);
882 ++itr;
883
884 LOG_DEBUG("guild", "GUILD STORAGE: StoreItem tab = {}, slot = {}, item = {}, count = {}",
885 m_container, m_slotId, pItem->GetEntry(), pItem->GetCount());
886 pLastItem = _StoreItem(trans, pTab, pItem, pos, itr != m_vec.end());
887 }
888 return pLastItem;
889}
Item * _StoreItem(CharacterDatabaseTransaction trans, BankTab *pTab, Item *pItem, ItemPosCount &pos, bool clone) const
Definition Guild.cpp:916
BankTab * GetBankTab(uint8 tabId)
Definition Guild.h:817

References Item::GetCount(), Object::GetEntry(), and LOG_DEBUG.


The documentation for this class was generated from the following files: