Core/Guilds
* Item moves within the same guild bank tab will not be logged * Updated and enabled CMSG_GUILD_BANK_QUERY_TEXT, CMSG_GUILD_EVENT_LOG_QUERY, CMSG_SET_GUILD_BANK_TEXT, SMSG_GUILD_BANK_LOG_QUERY_RESULT, SMSG_GUILD_BANK_QUERY_TEXT_RESULT and SMSG_GUILD_EVENT_LOG_QUERY_RESULT
This commit is contained in:
1 parent
c157e2643a
commit
353ebad6b9
6 files changed
+169
-90
No files matched your search
@@ -99,9 +99,13 @@ inline void Guild::LogHolder::AddEvent(SQLTransaction& trans, LogEntry* entry)
|
||||
// Writes information about all events into packet.
|
||||
inline void Guild::LogHolder::WritePacket(WorldPacket& data) const
|
||||
{
|
||||
data << uint8(m_log.size());
|
||||
ByteBuffer buffer;
|
||||
data.WriteBits(m_log.size(), 23);
|
||||
for (GuildLog::const_iterator itr = m_log.begin(); itr != m_log.end(); ++itr)
|
||||
(*itr)->WritePacket(data);
|
||||
(*itr)->WritePacket(data, buffer);
|
||||
|
||||
data.FlushBits();
|
||||
data.append(buffer);
|
||||
}
|
||||
|
||||
inline uint32 Guild::LogHolder::GetNextGUID()
|
||||
@@ -138,20 +142,56 @@ void Guild::EventLogEntry::SaveToDB(SQLTransaction& trans) const
|
||||
CharacterDatabase.ExecuteOrAppend(trans, stmt);
|
||||
}
|
||||
|
||||
void Guild::EventLogEntry::WritePacket(WorldPacket& data) const
|
||||
void Guild::EventLogEntry::WritePacket(WorldPacket& data, ByteBuffer& content) const
|
||||
{
|
||||
// Event type
|
||||
data << uint8(m_eventType);
|
||||
// Player 1
|
||||
data << uint64(MAKE_NEW_GUID(m_playerGuid1, 0, HIGHGUID_PLAYER));
|
||||
// Player 2 not for left/join guild events
|
||||
if (m_eventType != GUILD_EVENT_LOG_JOIN_GUILD && m_eventType != GUILD_EVENT_LOG_LEAVE_GUILD)
|
||||
data << uint64(MAKE_NEW_GUID(m_playerGuid2, 0, HIGHGUID_PLAYER));
|
||||
// New Rank - only for promote/demote guild events
|
||||
if (m_eventType == GUILD_EVENT_LOG_PROMOTE_PLAYER || m_eventType == GUILD_EVENT_LOG_DEMOTE_PLAYER)
|
||||
data << uint8(m_newRank);
|
||||
ObjectGuid guid1 = MAKE_NEW_GUID(m_playerGuid1, 0, HIGHGUID_PLAYER);
|
||||
ObjectGuid guid2 = MAKE_NEW_GUID(m_playerGuid2, 0, HIGHGUID_PLAYER);
|
||||
|
||||
data.WriteBit(guid1[2]);
|
||||
data.WriteBit(guid1[4]);
|
||||
data.WriteBit(guid2[7]);
|
||||
data.WriteBit(guid2[6]);
|
||||
data.WriteBit(guid1[3]);
|
||||
data.WriteBit(guid2[3]);
|
||||
data.WriteBit(guid2[5]);
|
||||
data.WriteBit(guid1[7]);
|
||||
data.WriteBit(guid1[5]);
|
||||
data.WriteBit(guid1[0]);
|
||||
data.WriteBit(guid2[4]);
|
||||
data.WriteBit(guid2[2]);
|
||||
data.WriteBit(guid2[0]);
|
||||
data.WriteBit(guid2[1]);
|
||||
data.WriteBit(guid1[1]);
|
||||
data.WriteBit(guid1[6]);
|
||||
|
||||
content.WriteByteSeq(guid2[3]);
|
||||
content.WriteByteSeq(guid2[2]);
|
||||
content.WriteByteSeq(guid2[5]);
|
||||
|
||||
// New Rank
|
||||
content << uint8(m_newRank);
|
||||
|
||||
content.WriteByteSeq(guid2[4]);
|
||||
content.WriteByteSeq(guid1[0]);
|
||||
content.WriteByteSeq(guid1[4]);
|
||||
|
||||
// Event timestamp
|
||||
data << uint32(::time(NULL) - m_timestamp);
|
||||
content << uint32(::time(NULL) - m_timestamp);
|
||||
|
||||
content.WriteByteSeq(guid1[7]);
|
||||
content.WriteByteSeq(guid1[3]);
|
||||
content.WriteByteSeq(guid2[0]);
|
||||
content.WriteByteSeq(guid2[6]);
|
||||
content.WriteByteSeq(guid2[7]);
|
||||
content.WriteByteSeq(guid1[5]);
|
||||
|
||||
// Event type
|
||||
content << uint8(m_eventType);
|
||||
|
||||
content.WriteByteSeq(guid2[1]);
|
||||
content.WriteByteSeq(guid1[2]);
|
||||
content.WriteByteSeq(guid1[6]);
|
||||
content.WriteByteSeq(guid1[1]);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@@ -181,20 +221,52 @@ void Guild::BankEventLogEntry::SaveToDB(SQLTransaction& trans) const
|
||||
CharacterDatabase.ExecuteOrAppend(trans, stmt);
|
||||
}
|
||||
|
||||
void Guild::BankEventLogEntry::WritePacket(WorldPacket& data) const
|
||||
void Guild::BankEventLogEntry::WritePacket(WorldPacket& data, ByteBuffer& content) const
|
||||
{
|
||||
data << uint8(m_eventType);
|
||||
data << uint64(MAKE_NEW_GUID(m_playerGuid, 0, HIGHGUID_PLAYER));
|
||||
data << uint32(m_itemOrMoney);
|
||||
// if ( m_eventType != 4 || m_eventType != 5 || m_eventType != 6 || m_eventType != 8 || m_eventType != 9 )
|
||||
if (m_eventType < GUILD_BANK_LOG_DEPOSIT_MONEY)
|
||||
{
|
||||
data << uint32(m_itemStackCount);
|
||||
if (m_eventType == GUILD_BANK_LOG_MOVE_ITEM || m_eventType == GUILD_BANK_LOG_MOVE_ITEM2)
|
||||
data << uint8(m_destTabId);
|
||||
}
|
||||
ObjectGuid logGuid = MAKE_NEW_GUID(m_playerGuid, 0, HIGHGUID_PLAYER);
|
||||
|
||||
data << uint32(time(NULL) - m_timestamp);
|
||||
bool hasItem = m_eventType == GUILD_BANK_LOG_DEPOSIT_ITEM || m_eventType == GUILD_BANK_LOG_WITHDRAW_ITEM ||
|
||||
m_eventType == GUILD_BANK_LOG_MOVE_ITEM || m_eventType == GUILD_BANK_LOG_MOVE_ITEM2;
|
||||
|
||||
bool itemMoved = (m_eventType == GUILD_BANK_LOG_MOVE_ITEM || m_eventType == GUILD_BANK_LOG_MOVE_ITEM2);
|
||||
|
||||
bool hasStack = (hasItem && m_itemStackCount > 1) || itemMoved;
|
||||
|
||||
data.WriteBit(IsMoneyEvent());
|
||||
data.WriteBit(logGuid[4]);
|
||||
data.WriteBit(logGuid[1]);
|
||||
data.WriteBit(hasItem);
|
||||
data.WriteBit(hasStack);
|
||||
data.WriteBit(logGuid[2]);
|
||||
data.WriteBit(logGuid[5]);
|
||||
data.WriteBit(logGuid[3]);
|
||||
data.WriteBit(logGuid[6]);
|
||||
data.WriteBit(logGuid[0]);
|
||||
data.WriteBit(itemMoved);
|
||||
data.WriteBit(logGuid[7]);
|
||||
|
||||
content.WriteByteSeq(logGuid[6]);
|
||||
content.WriteByteSeq(logGuid[1]);
|
||||
content.WriteByteSeq(logGuid[5]);
|
||||
if (hasStack)
|
||||
content << uint32(m_itemStackCount);
|
||||
|
||||
content << uint8(m_eventType);
|
||||
content.WriteByteSeq(logGuid[2]);
|
||||
content.WriteByteSeq(logGuid[4]);
|
||||
content.WriteByteSeq(logGuid[0]);
|
||||
content.WriteByteSeq(logGuid[7]);
|
||||
content.WriteByteSeq(logGuid[3]);
|
||||
if (hasItem)
|
||||
content << uint32(m_itemOrMoney);
|
||||
|
||||
content << uint32(time(NULL) - m_timestamp);
|
||||
|
||||
if (IsMoneyEvent())
|
||||
content << uint64(m_itemOrMoney);
|
||||
|
||||
if (itemMoved)
|
||||
content << uint8(m_destTabId);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@@ -403,12 +475,12 @@ void Guild::BankTab::SetText(const std::string& text)
|
||||
|
||||
// Sets/removes contents of specified slot.
|
||||
// If pItem == NULL contents are removed.
|
||||
bool Guild::BankTab::SetItem(SQLTransaction& trans, uint8 slotId, Item* pItem)
|
||||
bool Guild::BankTab::SetItem(SQLTransaction& trans, uint8 slotId, Item* item)
|
||||
{
|
||||
if (slotId >= GUILD_BANK_MAX_SLOTS)
|
||||
return false;
|
||||
|
||||
m_items[slotId] = pItem;
|
||||
m_items[slotId] = item;
|
||||
|
||||
PreparedStatement* stmt = NULL;
|
||||
|
||||
@@ -418,28 +490,29 @@ bool Guild::BankTab::SetItem(SQLTransaction& trans, uint8 slotId, Item* pItem)
|
||||
stmt->setUInt8 (2, slotId);
|
||||
CharacterDatabase.ExecuteOrAppend(trans, stmt);
|
||||
|
||||
if (pItem)
|
||||
if (item)
|
||||
{
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD_BANK_ITEM);
|
||||
stmt->setUInt32(0, m_guildId);
|
||||
stmt->setUInt8 (1, m_tabId);
|
||||
stmt->setUInt8 (2, slotId);
|
||||
stmt->setUInt32(3, pItem->GetGUIDLow());
|
||||
stmt->setUInt32(3, item->GetGUIDLow());
|
||||
CharacterDatabase.ExecuteOrAppend(trans, stmt);
|
||||
|
||||
pItem->SetUInt64Value(ITEM_FIELD_CONTAINED, 0);
|
||||
pItem->SetUInt64Value(ITEM_FIELD_OWNER, 0);
|
||||
pItem->FSetState(ITEM_NEW);
|
||||
pItem->SaveToDB(trans); // Not in inventory and can be saved standalone
|
||||
item->SetUInt64Value(ITEM_FIELD_CONTAINED, 0);
|
||||
item->SetUInt64Value(ITEM_FIELD_OWNER, 0);
|
||||
item->FSetState(ITEM_NEW);
|
||||
item->SaveToDB(trans); // Not in inventory and can be saved standalone
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void Guild::BankTab::SendText(const Guild* guild, WorldSession* session) const
|
||||
void Guild::BankTab::SendText(Guild const* guild, WorldSession* session) const
|
||||
{
|
||||
WorldPacket data(MSG_QUERY_GUILD_BANK_TEXT, 1 + m_text.size() + 1);
|
||||
data << uint8(m_tabId);
|
||||
data << m_text;
|
||||
WorldPacket data(SMSG_GUILD_BANK_QUERY_TEXT_RESULT, 1 + m_text.size() + 1);
|
||||
data.WriteBits(m_text.length(), 14);
|
||||
data << uint32(m_tabId);
|
||||
data.WriteString(m_text);
|
||||
|
||||
if (session)
|
||||
session->SendPacket(&data);
|
||||
@@ -1882,10 +1955,10 @@ void Guild::HandleGuildPartyRequest(WorldSession* session)
|
||||
// Send data to client
|
||||
void Guild::SendEventLog(WorldSession* session) const
|
||||
{
|
||||
WorldPacket data(MSG_GUILD_EVENT_LOG_QUERY, 1 + m_eventLog->GetSize() * (1 + 8 + 4));
|
||||
WorldPacket data(SMSG_GUILD_EVENT_LOG_QUERY_RESULT, 1 + m_eventLog->GetSize() * (1 + 8 + 4));
|
||||
m_eventLog->WritePacket(data);
|
||||
session->SendPacket(&data);
|
||||
sLog->outDebug(LOG_FILTER_GUILD, "WORLD: Sent (MSG_GUILD_EVENT_LOG_QUERY)");
|
||||
sLog->outDebug(LOG_FILTER_GUILD, "WORLD: Sent (SMSG_GUILD_EVENT_LOG_QUERY_RESULT)");
|
||||
}
|
||||
|
||||
void Guild::SendBankLog(WorldSession* session, uint8 tabId) const
|
||||
@@ -1893,12 +1966,15 @@ void Guild::SendBankLog(WorldSession* session, uint8 tabId) const
|
||||
// GUILD_BANK_MAX_TABS send by client for money log
|
||||
if (tabId < _GetPurchasedTabsSize() || tabId == GUILD_BANK_MAX_TABS)
|
||||
{
|
||||
const LogHolder* pLog = m_bankEventLog[tabId];
|
||||
WorldPacket data(MSG_GUILD_BANK_LOG_QUERY, pLog->GetSize() * (4 * 4 + 1) + 1 + 1);
|
||||
data << uint8(tabId);
|
||||
pLog->WritePacket(data);
|
||||
LogHolder const* log = m_bankEventLog[tabId];
|
||||
WorldPacket data(SMSG_GUILD_BANK_LOG_QUERY_RESULT, log->GetSize() * (4 * 4 + 1) + 1 + 1);
|
||||
data.WriteBit(GetLevel() >= 5 && tabId == GUILD_BANK_MAX_TABS); // has Cash Flow perk
|
||||
log->WritePacket(data);
|
||||
data << uint32(tabId);
|
||||
//if (tabId == GUILD_BANK_MAX_TABS && hasCashFlow)
|
||||
// data << uint64(cashFlowContribution);
|
||||
session->SendPacket(&data);
|
||||
sLog->outDebug(LOG_FILTER_GUILD, "WORLD: Sent (MSG_GUILD_BANK_LOG_QUERY)");
|
||||
sLog->outDebug(LOG_FILTER_GUILD, "WORLD: Sent (SMSG_GUILD_BANK_LOG_QUERY_RESULT) for tab %u", tabId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1989,8 +2065,8 @@ void Guild::SendBankList(WorldSession* session, uint8 tabId, bool withContent, b
|
||||
|
||||
void Guild::SendBankTabText(WorldSession* session, uint8 tabId) const
|
||||
{
|
||||
if (const BankTab* pTab = GetBankTab(tabId))
|
||||
pTab->SendText(this, session);
|
||||
if (BankTab const* tab = GetBankTab(tabId))
|
||||
tab->SendText(this, session);
|
||||
}
|
||||
|
||||
void Guild::SendPermissions(WorldSession* session) const
|
||||
@@ -2769,6 +2845,10 @@ void Guild::_LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventTyp
|
||||
if (tabId > GUILD_BANK_MAX_TABS)
|
||||
return;
|
||||
|
||||
// not logging moves within the same tab
|
||||
if (eventType == GUILD_BANK_LOG_MOVE_ITEM && tabId == destTabId)
|
||||
return;
|
||||
|
||||
uint8 dbTabId = tabId;
|
||||
if (BankEventLogEntry::IsMoneyEvent(eventType))
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user