AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
Guild::BankTab Class Reference

Public Member Functions

 BankTab (uint32 guildId, uint8 tabId)
 
void LoadFromDB (Field *fields)
 
bool LoadItemFromDB (Field *fields)
 
void Delete (CharacterDatabaseTransaction trans, bool removeItemsFromDB=false)
 
void SetInfo (std::string_view name, std::string_view icon)
 
void SetText (std::string_view text)
 
void SendText (const Guild *guild, WorldSession *session) const
 
std::string const & GetName () const
 
std::string const & GetIcon () const
 
std::string const & GetText () const
 
ItemGetItem (uint8 slotId) const
 
bool SetItem (CharacterDatabaseTransaction trans, uint8 slotId, Item *pItem)
 

Private Attributes

uint32 m_guildId
 
uint8 m_tabId
 
std::array< Item *, GUILD_BANK_MAX_SLOTSm_items = {}
 
std::string m_name
 
std::string m_icon
 
std::string m_text
 

Detailed Description

Constructor & Destructor Documentation

◆ BankTab()

Guild::BankTab::BankTab ( uint32  guildId,
uint8  tabId 
)
inline
562 : m_guildId(guildId), m_tabId(tabId)
563 {
564 }
uint8 m_tabId
Definition: Guild.h:583
uint32 m_guildId
Definition: Guild.h:582

Member Function Documentation

◆ Delete()

void Guild::BankTab::Delete ( CharacterDatabaseTransaction  trans,
bool  removeItemsFromDB = false 
)
428{
429 for (uint8 slotId = 0; slotId < GUILD_BANK_MAX_SLOTS; ++slotId)
430 if (Item* pItem = m_items[slotId])
431 {
432 pItem->RemoveFromWorld();
433 if (removeItemsFromDB)
434 pItem->DeleteFromDB(trans);
435 delete pItem;
436 pItem = nullptr;
437 }
438}
std::uint8_t uint8
Definition: Define.h:110
@ GUILD_BANK_MAX_SLOTS
Definition: Guild.h:46
Definition: Item.h:214
std::array< Item *, GUILD_BANK_MAX_SLOTS > m_items
Definition: Guild.h:585

References GUILD_BANK_MAX_SLOTS.

◆ GetIcon()

std::string const & Guild::BankTab::GetIcon ( ) const
inline
575{ return m_icon; }
std::string m_icon
Definition: Guild.h:587

References m_icon.

Referenced by Guild::HandleSetBankTabInfo().

◆ GetItem()

Item * Guild::BankTab::GetItem ( uint8  slotId) const
inline
578{ return slotId < GUILD_BANK_MAX_SLOTS ? m_items[slotId] : nullptr; }

References GUILD_BANK_MAX_SLOTS, and m_items.

Referenced by Guild::BankMoveItemData::_StoreItem().

◆ GetName()

std::string const & Guild::BankTab::GetName ( ) const
inline
574{ return m_name; }
std::string m_name
Definition: Guild.h:586

References m_name.

Referenced by Guild::HandleSetBankTabInfo().

◆ GetText()

std::string const & Guild::BankTab::GetText ( ) const
inline
576{ return m_text; }
std::string m_text
Definition: Guild.h:588

References m_text.

◆ LoadFromDB()

void Guild::BankTab::LoadFromDB ( Field fields)
382{
383 m_name = fields[2].Get<std::string>();
384 m_icon = fields[3].Get<std::string>();
385 m_text = fields[4].Get<std::string>();
386}
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition: Field.h:113

References Field::Get(), and Guild::m_name.

◆ LoadItemFromDB()

bool Guild::BankTab::LoadItemFromDB ( Field fields)
389{
390 uint8 slotId = fields[13].Get<uint8>();
391 ObjectGuid::LowType itemGuid = fields[14].Get<uint32>();
392 uint32 itemEntry = fields[15].Get<uint32>();
393 if (slotId >= GUILD_BANK_MAX_SLOTS)
394 {
395 LOG_ERROR("guild", "Invalid slot for item (GUID: {}, id: {}) in guild bank, skipped.", itemGuid, itemEntry);
396 return false;
397 }
398
399 ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemEntry);
400 if (!proto)
401 {
402 LOG_ERROR("guild", "Unknown item (GUID: {}, id: {}) in guild bank, skipped.", itemGuid, itemEntry);
403 return false;
404 }
405
406 Item* pItem = NewItemOrBag(proto);
407 if (!pItem->LoadFromDB(itemGuid, ObjectGuid::Empty, fields, itemEntry))
408 {
409 LOG_ERROR("guild", "Item (GUID {}, id: {}) not found in item_instance, deleting from guild bank!", itemGuid, itemEntry);
410
412 stmt->SetData(0, m_guildId);
413 stmt->SetData (1, m_tabId);
414 stmt->SetData (2, slotId);
415 CharacterDatabase.Execute(stmt);
416
417 delete pItem;
418 return false;
419 }
420
421 pItem->AddToWorld();
422 m_items[slotId] = pItem;
423 return true;
424}
std::uint32_t uint32
Definition: Define.h:108
#define LOG_ERROR(filterType__,...)
Definition: Log.h:159
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition: DatabaseEnv.cpp:21
@ CHAR_DEL_NONEXISTENT_GUILD_BANK_ITEM
Definition: CharacterDatabase.h:33
Item * NewItemOrBag(ItemTemplate const *proto)
Definition: Bag.h:67
#define sObjectMgr
Definition: ObjectMgr.h:1640
Definition: PreparedStatement.h:158
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition: PreparedStatement.h:78
virtual bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field *fields, uint32 entry)
Definition: Item.cpp:421
Definition: ItemTemplate.h:628
virtual void AddToWorld()
Definition: Object.cpp:152
static ObjectGuid const Empty
Definition: ObjectGuid.h:122
uint32 LowType
Definition: ObjectGuid.h:124

References Object::AddToWorld(), CHAR_DEL_NONEXISTENT_GUILD_BANK_ITEM, CharacterDatabase, ObjectGuid::Empty, Field::Get(), GUILD_BANK_MAX_SLOTS, Item::LoadFromDB(), LOG_ERROR, NewItemOrBag(), PreparedStatementBase::SetData(), and sObjectMgr.

◆ SendText()

void Guild::BankTab::SendText ( const Guild guild,
WorldSession session 
) const
504{
506 textQuery.Tab = m_tabId;
507 textQuery.Text = m_text;
508
509 if (session)
510 {
511 LOG_DEBUG("guild", "MSG_QUERY_GUILD_BANK_TEXT [{}]: Tabid: {}, Text: {}"
512 , session->GetPlayerInfo(), m_tabId, m_text);
513 session->SendPacket(textQuery.Write());
514 }
515 else
516 {
517 LOG_DEBUG("guild", "MSG_QUERY_GUILD_BANK_TEXT [Broadcast]: Tabid: {}, Text: {}", m_tabId, m_text);
518 guild->BroadcastPacket(textQuery.Write());
519 }
520}
#define LOG_DEBUG(filterType__,...)
Definition: Log.h:171
void BroadcastPacket(WorldPacket const *packet) const
Definition: Guild.cpp:2119
Definition: GuildPackets.h:567
uint8 Tab
Definition: GuildPackets.h:573
WorldPacket const * Write() override
Definition: GuildPackets.cpp:424
std::string Text
Definition: GuildPackets.h:574
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
Definition: WorldSession.cpp:207
std::string GetPlayerInfo() const
Definition: WorldSession.cpp:184

References Guild::BroadcastPacket(), WorldSession::GetPlayerInfo(), LOG_DEBUG, WorldSession::SendPacket(), WorldPackets::Guild::GuildBankTextQueryResult::Tab, WorldPackets::Guild::GuildBankTextQueryResult::Text, and WorldPackets::Guild::GuildBankTextQueryResult::Write().

◆ SetInfo()

void Guild::BankTab::SetInfo ( std::string_view  name,
std::string_view  icon 
)
441{
442 if ((m_name == name) && (m_icon == icon))
443 return;
444
445 m_name = name;
446 m_icon = icon;
447
449 stmt->SetData(0, m_name);
450 stmt->SetData(1, m_icon);
451 stmt->SetData(2, m_guildId);
452 stmt->SetData (3, m_tabId);
453 CharacterDatabase.Execute(stmt);
454}
@ CHAR_UPD_GUILD_BANK_TAB_INFO
Definition: CharacterDatabase.h:174

References CHAR_UPD_GUILD_BANK_TAB_INFO, CharacterDatabase, Guild::m_name, and PreparedStatementBase::SetData().

Referenced by Guild::HandleSetBankTabInfo().

◆ SetItem()

bool Guild::BankTab::SetItem ( CharacterDatabaseTransaction  trans,
uint8  slotId,
Item pItem 
)
474{
475 if (slotId >= GUILD_BANK_MAX_SLOTS)
476 return false;
477
478 m_items[slotId] = item;
479
481 stmt->SetData(0, m_guildId);
482 stmt->SetData (1, m_tabId);
483 stmt->SetData (2, slotId);
484 CharacterDatabase.ExecuteOrAppend(trans, stmt);
485
486 if (item)
487 {
488 stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD_BANK_ITEM);
489 stmt->SetData(0, m_guildId);
490 stmt->SetData (1, m_tabId);
491 stmt->SetData (2, slotId);
492 stmt->SetData(3, item->GetGUID().GetCounter());
493 CharacterDatabase.ExecuteOrAppend(trans, stmt);
494
495 item->SetGuidValue(ITEM_FIELD_CONTAINED, ObjectGuid::Empty);
496 item->SetGuidValue(ITEM_FIELD_OWNER, ObjectGuid::Empty);
497 item->FSetState(ITEM_NEW);
498 item->SaveToDB(trans); // Not in inventory and can be saved standalone
499 }
500 return true;
501}
@ CHAR_DEL_GUILD_BANK_ITEM
Definition: CharacterDatabase.h:154
@ CHAR_INS_GUILD_BANK_ITEM
Definition: CharacterDatabase.h:153
@ ITEM_NEW
Definition: Item.h:205
@ ITEM_FIELD_OWNER
Definition: UpdateFields.h:35
@ ITEM_FIELD_CONTAINED
Definition: UpdateFields.h:36

References CHAR_DEL_GUILD_BANK_ITEM, CHAR_INS_GUILD_BANK_ITEM, CharacterDatabase, GUILD_BANK_MAX_SLOTS, and PreparedStatementBase::SetData().

Referenced by Guild::BankMoveItemData::_StoreItem().

◆ SetText()

void Guild::BankTab::SetText ( std::string_view  text)
457{
458 if (m_text == text)
459 return;
460
461 m_text = text;
462 utf8truncate(m_text, MAX_GUILD_BANK_TAB_TEXT_LEN); // DB and client size limitation
463
465 stmt->SetData(0, m_text);
466 stmt->SetData(1, m_guildId);
467 stmt->SetData (2, m_tabId);
468 CharacterDatabase.Execute(stmt);
469}
void utf8truncate(std::string &utf8str, size_t len)
Definition: Util.cpp:259
@ CHAR_UPD_GUILD_BANK_TAB_TEXT
Definition: CharacterDatabase.h:178
#define MAX_GUILD_BANK_TAB_TEXT_LEN
Definition: Guild.cpp:41

References CHAR_UPD_GUILD_BANK_TAB_TEXT, CharacterDatabase, MAX_GUILD_BANK_TAB_TEXT_LEN, PreparedStatementBase::SetData(), and utf8truncate().

Member Data Documentation

◆ m_guildId

uint32 Guild::BankTab::m_guildId
private

◆ m_icon

std::string Guild::BankTab::m_icon
private

Referenced by GetIcon().

◆ m_items

std::array<Item*, GUILD_BANK_MAX_SLOTS> Guild::BankTab::m_items = {}
private

Referenced by GetItem().

◆ m_name

std::string Guild::BankTab::m_name
private

Referenced by GetName().

◆ m_tabId

uint8 Guild::BankTab::m_tabId
private

◆ m_text

std::string Guild::BankTab::m_text
private

Referenced by GetText().