Fix some problem with Guild Bank after switch to client version 3.3.2, also cleanup code. Thx TOM_RUS.
--HG-- branch : trunk
This commit is contained in:
+41
-107
@@ -48,15 +48,12 @@ Guild::Guild()
|
|||||||
m_CreatedMonth = 0;
|
m_CreatedMonth = 0;
|
||||||
m_CreatedDay = 0;
|
m_CreatedDay = 0;
|
||||||
|
|
||||||
m_EventLogLoaded = false;
|
|
||||||
m_GuildBankLoaded = false;
|
|
||||||
m_OnlineMembers = 0;
|
|
||||||
m_GuildBankMoney = 0;
|
m_GuildBankMoney = 0;
|
||||||
m_PurchasedTabs = 0;
|
m_PurchasedTabs = 0;
|
||||||
|
|
||||||
m_GuildEventLogNextGuid = 0;
|
m_GuildEventLogNextGuid = 0;
|
||||||
m_GuildBankEventLogNextGuid_Money = 0;
|
m_GuildBankEventLogNextGuid_Money = 0;
|
||||||
for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; i++)
|
for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; ++i)
|
||||||
m_GuildBankEventLogNextGuid_Item[i] = 0;
|
m_GuildBankEventLogNextGuid_Item[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -786,7 +783,7 @@ void Guild::Query(WorldSession *session)
|
|||||||
data << m_Id;
|
data << m_Id;
|
||||||
data << m_Name;
|
data << m_Name;
|
||||||
|
|
||||||
for (size_t i = 0 ; i < 10; ++i) // show always 10 ranks
|
for (size_t i = 0 ; i < GUILD_RANKS_MAX_COUNT; ++i) // show always 10 ranks
|
||||||
{
|
{
|
||||||
if (i < m_Ranks.size())
|
if (i < m_Ranks.size())
|
||||||
data << m_Ranks[i].Name;
|
data << m_Ranks[i].Name;
|
||||||
@@ -823,14 +820,6 @@ void Guild::UpdateLogoutTime(uint64 guid)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
itr->second.LogoutTime = time(NULL);
|
itr->second.LogoutTime = time(NULL);
|
||||||
|
|
||||||
if (m_OnlineMembers > 0)
|
|
||||||
--m_OnlineMembers;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UnloadGuildBank();
|
|
||||||
UnloadGuildEventLog();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// *************************************************
|
// *************************************************
|
||||||
@@ -839,10 +828,6 @@ void Guild::UpdateLogoutTime(uint64 guid)
|
|||||||
// Display guild eventlog
|
// Display guild eventlog
|
||||||
void Guild::DisplayGuildEventLog(WorldSession *session)
|
void Guild::DisplayGuildEventLog(WorldSession *session)
|
||||||
{
|
{
|
||||||
// Load guild eventlog, if not already done
|
|
||||||
if (!m_EventLogLoaded)
|
|
||||||
LoadGuildEventLogFromDB();
|
|
||||||
|
|
||||||
// Sending result
|
// Sending result
|
||||||
WorldPacket data(MSG_GUILD_EVENT_LOG_QUERY, 0);
|
WorldPacket data(MSG_GUILD_EVENT_LOG_QUERY, 0);
|
||||||
// count, max count == 100
|
// count, max count == 100
|
||||||
@@ -869,10 +854,6 @@ void Guild::DisplayGuildEventLog(WorldSession *session)
|
|||||||
// Load guild eventlog from DB
|
// Load guild eventlog from DB
|
||||||
void Guild::LoadGuildEventLogFromDB()
|
void Guild::LoadGuildEventLogFromDB()
|
||||||
{
|
{
|
||||||
// Return if already loaded
|
|
||||||
if (m_EventLogLoaded)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// 0 1 2 3 4 5
|
// 0 1 2 3 4 5
|
||||||
QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT LogGuid, EventType, PlayerGuid1, PlayerGuid2, NewRank, TimeStamp FROM guild_eventlog WHERE guildid=%u ORDER BY TimeStamp DESC,LogGuid DESC LIMIT %u", m_Id, GUILD_EVENTLOG_MAX_RECORDS);
|
QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT LogGuid, EventType, PlayerGuid1, PlayerGuid2, NewRank, TimeStamp FROM guild_eventlog WHERE guildid=%u ORDER BY TimeStamp DESC,LogGuid DESC LIMIT %u", m_Id, GUILD_EVENTLOG_MAX_RECORDS);
|
||||||
if (!result)
|
if (!result)
|
||||||
@@ -904,18 +885,6 @@ void Guild::LoadGuildEventLogFromDB()
|
|||||||
m_GuildEventLog.push_front(NewEvent);
|
m_GuildEventLog.push_front(NewEvent);
|
||||||
|
|
||||||
} while (result->NextRow());
|
} while (result->NextRow());
|
||||||
|
|
||||||
m_EventLogLoaded = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unload guild eventlog
|
|
||||||
void Guild::UnloadGuildEventLog()
|
|
||||||
{
|
|
||||||
if (!m_EventLogLoaded)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_GuildEventLog.clear();
|
|
||||||
m_EventLogLoaded = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add entry to guild eventlog
|
// Add entry to guild eventlog
|
||||||
@@ -957,7 +926,7 @@ void Guild::DisplayGuildBankContent(WorldSession *session, uint8 TabId)
|
|||||||
data << uint64(GetGuildBankMoney());
|
data << uint64(GetGuildBankMoney());
|
||||||
data << uint8(TabId);
|
data << uint8(TabId);
|
||||||
data << uint32(GetMemberSlotWithdrawRem(session->GetPlayer()->GetGUIDLow(), TabId)); // remaining slots for today
|
data << uint32(GetMemberSlotWithdrawRem(session->GetPlayer()->GetGUIDLow(), TabId)); // remaining slots for today
|
||||||
data << uint8(0); // Tell client this is a tab content packet
|
data << uint8(0); // Tell client that there's no tab info in this packet
|
||||||
|
|
||||||
data << uint8(GUILD_BANK_MAX_SLOTS);
|
data << uint8(GUILD_BANK_MAX_SLOTS);
|
||||||
|
|
||||||
@@ -977,21 +946,20 @@ void Guild::DisplayGuildBankContentUpdate(uint8 TabId, int32 slot1, int32 slot2)
|
|||||||
|
|
||||||
data << uint64(GetGuildBankMoney());
|
data << uint64(GetGuildBankMoney());
|
||||||
data << uint8(TabId);
|
data << uint8(TabId);
|
||||||
// remaining slots for today
|
|
||||||
|
|
||||||
size_t rempos = data.wpos();
|
size_t rempos = data.wpos();
|
||||||
data << uint32(0); // will be filled later
|
data << uint32(0); // item withdraw amount, will be filled later
|
||||||
data << uint8(0); // Tell client this is a tab content packet
|
data << uint8(0); // Tell client that there's no tab info in this packet
|
||||||
|
|
||||||
if (slot2 == -1) // single item in slot1
|
if (slot2 == -1) // single item in slot1
|
||||||
{
|
{
|
||||||
data << uint8(1);
|
data << uint8(1); // item count
|
||||||
|
|
||||||
AppendDisplayGuildBankSlot(data, tab, slot1);
|
AppendDisplayGuildBankSlot(data, tab, slot1);
|
||||||
}
|
}
|
||||||
else // 2 items (in slot1 and slot2)
|
else // 2 items (in slot1 and slot2)
|
||||||
{
|
{
|
||||||
data << uint8(2);
|
data << uint8(2); // item count
|
||||||
|
|
||||||
if (slot1 > slot2)
|
if (slot1 > slot2)
|
||||||
std::swap(slot1,slot2);
|
std::swap(slot1,slot2);
|
||||||
@@ -1025,11 +993,10 @@ void Guild::DisplayGuildBankContentUpdate(uint8 TabId, GuildItemPosCountVec cons
|
|||||||
|
|
||||||
data << uint64(GetGuildBankMoney());
|
data << uint64(GetGuildBankMoney());
|
||||||
data << uint8(TabId);
|
data << uint8(TabId);
|
||||||
// remaining slots for today
|
|
||||||
|
|
||||||
size_t rempos = data.wpos();
|
size_t rempos = data.wpos();
|
||||||
data << uint32(0); // will be filled later
|
data << uint32(0); // item withdraw amount, will be filled later
|
||||||
data << uint8(0); // Tell client this is a tab content packet
|
data << uint8(0); // Tell client that there's no tab info in this packet
|
||||||
|
|
||||||
data << uint8(slots.size()); // updates count
|
data << uint8(slots.size()); // updates count
|
||||||
|
|
||||||
@@ -1065,17 +1032,12 @@ Item* Guild::GetItem(uint8 TabId, uint8 SlotId)
|
|||||||
|
|
||||||
void Guild::DisplayGuildBankTabsInfo(WorldSession *session)
|
void Guild::DisplayGuildBankTabsInfo(WorldSession *session)
|
||||||
{
|
{
|
||||||
// Time to load bank if not already done
|
|
||||||
if (!m_GuildBankLoaded)
|
|
||||||
LoadGuildBankFromDB();
|
|
||||||
|
|
||||||
WorldPacket data(SMSG_GUILD_BANK_LIST, 500);
|
WorldPacket data(SMSG_GUILD_BANK_LIST, 500);
|
||||||
|
|
||||||
data << uint64(GetGuildBankMoney());
|
data << uint64(GetGuildBankMoney());
|
||||||
data << uint8(0); // TabInfo packet must be for TabId 0
|
data << uint8(0); // TabInfo packet must be for TabId 0
|
||||||
//data << uint32(0xFFFFFFFF); // bit 9 must be set for this packet to work
|
data << uint32(GetMemberSlotWithdrawRem(session->GetPlayer()->GetGUIDLow(), 0));
|
||||||
data << uint32(0);
|
data << uint8(1); // Tell client that this packet includes tab info
|
||||||
data << uint8(1); // Tell Client this is a TabInfo packet
|
|
||||||
data << uint8(m_PurchasedTabs); // here is the number of tabs
|
data << uint8(m_PurchasedTabs); // here is the number of tabs
|
||||||
|
|
||||||
for (uint8 i = 0; i < m_PurchasedTabs; ++i)
|
for (uint8 i = 0; i < m_PurchasedTabs; ++i)
|
||||||
@@ -1089,14 +1051,14 @@ void Guild::DisplayGuildBankTabsInfo(WorldSession *session)
|
|||||||
sLog.outDebug("WORLD: Sent (SMSG_GUILD_BANK_LIST)");
|
sLog.outDebug("WORLD: Sent (SMSG_GUILD_BANK_LIST)");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Guild::DisplayGuildBankMoneyUpdate()
|
void Guild::DisplayGuildBankMoneyUpdate(WorldSession *session)
|
||||||
{
|
{
|
||||||
WorldPacket data(SMSG_GUILD_BANK_LIST, 8+1+4+1+1);
|
WorldPacket data(SMSG_GUILD_BANK_LIST, 8+1+4+1+1);
|
||||||
|
|
||||||
data << uint64(GetGuildBankMoney());
|
data << uint64(GetGuildBankMoney());
|
||||||
data << uint8(0); // TabId, default 0
|
data << uint8(0); // TabId, default 0
|
||||||
data << uint32(0); // slot withdrow, default 0
|
data << uint32(GetMemberSlotWithdrawRem(session->GetPlayer()->GetGUIDLow(), 0));
|
||||||
data << uint8(0); // Tell client this is a tab content packet
|
data << uint8(0); // Tell that there's no tab info in this packet
|
||||||
data << uint8(0); // not send items
|
data << uint8(0); // not send items
|
||||||
BroadcastPacket(&data);
|
BroadcastPacket(&data);
|
||||||
|
|
||||||
@@ -1143,17 +1105,11 @@ uint32 Guild::GetBankRights(uint32 rankId, uint8 TabId) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// *************************************************
|
// *************************************************
|
||||||
// Guild bank loading/unloading related
|
// Guild bank loading related
|
||||||
|
|
||||||
// This load should be called when the bank is first accessed by a guild member
|
// This load should be called on startup only
|
||||||
void Guild::LoadGuildBankFromDB()
|
void Guild::LoadGuildBankFromDB()
|
||||||
{
|
{
|
||||||
if (m_GuildBankLoaded)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_GuildBankLoaded = true;
|
|
||||||
LoadGuildBankEventLogFromDB();
|
|
||||||
|
|
||||||
// 0 1 2 3
|
// 0 1 2 3
|
||||||
QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT TabId, TabName, TabIcon, TabText FROM guild_bank_tab WHERE guildid='%u' ORDER BY TabId", m_Id);
|
QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT TabId, TabName, TabIcon, TabText FROM guild_bank_tab WHERE guildid='%u' ORDER BY TabId", m_Id);
|
||||||
if (!result)
|
if (!result)
|
||||||
@@ -1226,29 +1182,6 @@ void Guild::LoadGuildBankFromDB()
|
|||||||
}while (result->NextRow());
|
}while (result->NextRow());
|
||||||
}
|
}
|
||||||
|
|
||||||
// This unload should be called when the last member of the guild gets offline
|
|
||||||
void Guild::UnloadGuildBank()
|
|
||||||
{
|
|
||||||
if (!m_GuildBankLoaded)
|
|
||||||
return;
|
|
||||||
for (uint8 i = 0; i < m_PurchasedTabs ; ++i)
|
|
||||||
{
|
|
||||||
for (uint8 j = 0; j < GUILD_BANK_MAX_SLOTS ; ++j)
|
|
||||||
{
|
|
||||||
if (m_TabListMap[i]->Slots[j])
|
|
||||||
{
|
|
||||||
m_TabListMap[i]->Slots[j]->RemoveFromWorld();
|
|
||||||
delete m_TabListMap[i]->Slots[j];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
delete m_TabListMap[i];
|
|
||||||
}
|
|
||||||
m_TabListMap.clear();
|
|
||||||
|
|
||||||
UnloadGuildBankEventLog();
|
|
||||||
m_GuildBankLoaded = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// *************************************************
|
// *************************************************
|
||||||
// Money deposit/withdraw related
|
// Money deposit/withdraw related
|
||||||
|
|
||||||
@@ -1471,7 +1404,7 @@ void Guild::LoadGuildBankEventLogFromDB()
|
|||||||
|
|
||||||
//uint32 configCount = sWorld.getConfig(CONFIG_GUILD_BANK_EVENT_LOG_COUNT);
|
//uint32 configCount = sWorld.getConfig(CONFIG_GUILD_BANK_EVENT_LOG_COUNT);
|
||||||
//cycle through all purchased guild bank item tabs
|
//cycle through all purchased guild bank item tabs
|
||||||
for (uint32 tabId = 0; tabId < m_PurchasedTabs; tabId++)
|
for (uint32 tabId = 0; tabId < m_PurchasedTabs; ++tabId)
|
||||||
{
|
{
|
||||||
// 0 1 2 3 4 5 6
|
// 0 1 2 3 4 5 6
|
||||||
QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT LogGuid, EventType, PlayerGuid, ItemOrMoney, ItemStackCount, DestTabId, TimeStamp FROM guild_bank_eventlog WHERE guildid='%u' AND TabId='%u' ORDER BY TimeStamp DESC,LogGuid DESC LIMIT %u", m_Id, tabId, GUILD_BANK_MAX_LOGS);
|
QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT LogGuid, EventType, PlayerGuid, ItemOrMoney, ItemStackCount, DestTabId, TimeStamp FROM guild_bank_eventlog WHERE guildid='%u' AND TabId='%u' ORDER BY TimeStamp DESC,LogGuid DESC LIMIT %u", m_Id, tabId, GUILD_BANK_MAX_LOGS);
|
||||||
@@ -1549,14 +1482,6 @@ void Guild::LoadGuildBankEventLogFromDB()
|
|||||||
} while (result->NextRow());
|
} while (result->NextRow());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Guild::UnloadGuildBankEventLog()
|
|
||||||
{
|
|
||||||
m_GuildBankEventLog_Money.clear();
|
|
||||||
|
|
||||||
for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; ++i)
|
|
||||||
m_GuildBankEventLog_Item[i].clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Guild::DisplayGuildBankLogs(WorldSession *session, uint8 TabId)
|
void Guild::DisplayGuildBankLogs(WorldSession *session, uint8 TabId)
|
||||||
{
|
{
|
||||||
if (TabId >= GUILD_BANK_MAX_TABS) // tabs starts in 0
|
if (TabId >= GUILD_BANK_MAX_TABS) // tabs starts in 0
|
||||||
@@ -1682,21 +1607,30 @@ void Guild::AppendDisplayGuildBankSlot( WorldPacket& data, GuildBankTab const *t
|
|||||||
data << uint32(entry);
|
data << uint32(entry);
|
||||||
if (entry)
|
if (entry)
|
||||||
{
|
{
|
||||||
data << (int32) pItem->GetItemRandomPropertyId(); // random item property id +8
|
data << uint32(0); // 3.3.0 (0x8000, 0x8020)
|
||||||
if (pItem->GetItemRandomPropertyId())
|
data << uint32(pItem->GetItemRandomPropertyId()); // random item property id + 8
|
||||||
data << (uint32) pItem->GetItemSuffixFactor(); // SuffixFactor +4
|
|
||||||
|
|
||||||
data << uint32(pItem->GetCount()); // +12 // ITEM_FIELD_STACK_COUNT
|
if (pItem->GetItemRandomPropertyId())
|
||||||
data << uint32(0); // +16 // Unknown value
|
data << uint32(pItem->GetItemSuffixFactor()); // SuffixFactor + 4
|
||||||
|
|
||||||
|
data << uint32(pItem->GetCount()); // +12 ITEM_FIELD_STACK_COUNT
|
||||||
|
data << uint32(0); // +16 Unknown value
|
||||||
data << uint8(abs(pItem->GetSpellCharges())); // spell charges
|
data << uint8(abs(pItem->GetSpellCharges())); // spell charges
|
||||||
if (uint32 Enchant0 = pItem->GetEnchantmentId(PERM_ENCHANTMENT_SLOT))
|
|
||||||
|
uint8 enchCount = 0;
|
||||||
|
size_t enchCountPos = data.wpos();
|
||||||
|
|
||||||
|
data << uint8(enchCount); // number of enchantments
|
||||||
|
for(uint32 i = PERM_ENCHANTMENT_SLOT; i < MAX_ENCHANTMENT_SLOT; ++i)
|
||||||
{
|
{
|
||||||
data << uint8(1); // number of enchantments (max 3) why max 3?
|
if(uint32 enchId = pItem->GetEnchantmentId(EnchantmentSlot(i)))
|
||||||
data << uint8(PERM_ENCHANTMENT_SLOT); // enchantment slot (range: 0:2)
|
{
|
||||||
data << uint32(Enchant0); // enchantment id
|
data << uint8(i);
|
||||||
|
data << uint32(enchId);
|
||||||
|
++enchCount;
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
data << uint8(0); // no enchantments (0)
|
data.put<uint8>(enchCountPos, enchCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1752,7 +1686,7 @@ Item* Guild::_StoreItem( uint8 tab, uint8 slot, Item *pItem, uint32 count, bool
|
|||||||
pItem->SetUInt64Value(ITEM_FIELD_OWNER, 0);
|
pItem->SetUInt64Value(ITEM_FIELD_OWNER, 0);
|
||||||
AddGBankItemToDB(GetId(), tab, slot, pItem->GetGUIDLow(), pItem->GetEntry());
|
AddGBankItemToDB(GetId(), tab, slot, pItem->GetGUIDLow(), pItem->GetEntry());
|
||||||
pItem->FSetState(ITEM_NEW);
|
pItem->FSetState(ITEM_NEW);
|
||||||
pItem->SaveToDB(); // not in onventory and can be save standalone
|
pItem->SaveToDB(); // not in inventory and can be save standalone
|
||||||
|
|
||||||
return pItem;
|
return pItem;
|
||||||
}
|
}
|
||||||
@@ -1760,7 +1694,7 @@ Item* Guild::_StoreItem( uint8 tab, uint8 slot, Item *pItem, uint32 count, bool
|
|||||||
{
|
{
|
||||||
pItem2->SetCount( pItem2->GetCount() + count );
|
pItem2->SetCount( pItem2->GetCount() + count );
|
||||||
pItem2->FSetState(ITEM_CHANGED);
|
pItem2->FSetState(ITEM_CHANGED);
|
||||||
pItem2->SaveToDB(); // not in onventory and can be save standalone
|
pItem2->SaveToDB(); // not in inventory and can be save standalone
|
||||||
|
|
||||||
if (!clone)
|
if (!clone)
|
||||||
{
|
{
|
||||||
@@ -1826,7 +1760,7 @@ uint8 Guild::_CanStoreItem_InSpecificSlot( uint8 tab, uint8 slot, GuildItemPosCo
|
|||||||
uint8 Guild::_CanStoreItem_InTab( uint8 tab, GuildItemPosCountVec &dest, uint32& count, bool merge, Item* pSrcItem, uint8 skip_slot ) const
|
uint8 Guild::_CanStoreItem_InTab( uint8 tab, GuildItemPosCountVec &dest, uint32& count, bool merge, Item* pSrcItem, uint8 skip_slot ) const
|
||||||
{
|
{
|
||||||
assert(pSrcItem);
|
assert(pSrcItem);
|
||||||
for (uint32 j = 0; j < GUILD_BANK_MAX_SLOTS; j++)
|
for (uint32 j = 0; j < GUILD_BANK_MAX_SLOTS; ++j)
|
||||||
{
|
{
|
||||||
// skip specific slot already processed in first called _CanStoreItem_InSpecificSlot
|
// skip specific slot already processed in first called _CanStoreItem_InSpecificSlot
|
||||||
if (j == skip_slot)
|
if (j == skip_slot)
|
||||||
@@ -1906,7 +1840,7 @@ uint8 Guild::CanStoreItem( uint8 tab, uint8 slot, GuildItemPosCountVec &dest, ui
|
|||||||
return EQUIP_ERR_OK;
|
return EQUIP_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
// not specific slot or have spece for partly store only in specific slot
|
// not specific slot or have space for partly store only in specific slot
|
||||||
|
|
||||||
// search stack in tab for merge to
|
// search stack in tab for merge to
|
||||||
if (pItem->GetMaxStackCount() > 1)
|
if (pItem->GetMaxStackCount() > 1)
|
||||||
|
|||||||
+12
-19
@@ -117,15 +117,16 @@ enum GuildEvents
|
|||||||
GE_LEADER_CHANGED = 0x07,
|
GE_LEADER_CHANGED = 0x07,
|
||||||
GE_DISBANDED = 0x08,
|
GE_DISBANDED = 0x08,
|
||||||
GE_TABARDCHANGE = 0x09,
|
GE_TABARDCHANGE = 0x09,
|
||||||
GE_UNK1 = 0x0A, // string, string
|
GE_UNK1 = 0x0A, // string, string EVENT_GUILD_ROSTER_UPDATE
|
||||||
GE_UNK2 = 0x0B,
|
GE_UNK2 = 0x0B, // EVENT_GUILD_ROSTER_UPDATE
|
||||||
GE_SIGNED_ON = 0x0C,
|
GE_SIGNED_ON = 0x0C, // ERR_FRIEND_ONLINE_SS
|
||||||
GE_SIGNED_OFF = 0x0D,
|
GE_SIGNED_OFF = 0x0D, // ERR_FRIEND_OFFLINE_S
|
||||||
GE_UNK3 = 0x0E,
|
GE_UNK3 = 0x0E, // EVENT_GUILDBANKBAGSLOTS_CHANGED
|
||||||
GE_BANKTAB_PURCHASED= 0x0F,
|
GE_BANKTAB_PURCHASED= 0x0F, // EVENT_GUILDBANK_UPDATE_TABS
|
||||||
GE_UNK5 = 0x10,
|
GE_UNK5 = 0x10, // EVENT_GUILDBANK_UPDATE_TABS
|
||||||
GE_UNK6 = 0x11, // string 0000000000002710 is 1 gold
|
GE_UNK6 = 0x11, // EVENT_GUILDBANK_UPDATE_MONEY, string 0000000000002710 is 1 gold
|
||||||
GE_UNK7 = 0x12
|
GE_UNK7 = 0x12, // MSG_GUILD_BANK_MONEY_WITHDRAWN
|
||||||
|
GE_UNK8 = 0x13 // EVENT_GUILDBANK_TEXT_CHANGED
|
||||||
};
|
};
|
||||||
|
|
||||||
enum PetitionTurns
|
enum PetitionTurns
|
||||||
@@ -382,14 +383,13 @@ class Guild
|
|||||||
void UpdateLogoutTime(uint64 guid);
|
void UpdateLogoutTime(uint64 guid);
|
||||||
// Guild EventLog
|
// Guild EventLog
|
||||||
void LoadGuildEventLogFromDB();
|
void LoadGuildEventLogFromDB();
|
||||||
void UnloadGuildEventLog();
|
|
||||||
void DisplayGuildEventLog(WorldSession *session);
|
void DisplayGuildEventLog(WorldSession *session);
|
||||||
void LogGuildEvent(uint8 EventType, uint32 PlayerGuid1, uint32 PlayerGuid2, uint8 NewRank);
|
void LogGuildEvent(uint8 EventType, uint32 PlayerGuid1, uint32 PlayerGuid2, uint8 NewRank);
|
||||||
|
|
||||||
// ** Guild bank **
|
// ** Guild bank **
|
||||||
// Content & item deposit/withdraw
|
// Content & item deposit/withdraw
|
||||||
void DisplayGuildBankContent(WorldSession *session, uint8 TabId);
|
void DisplayGuildBankContent(WorldSession *session, uint8 TabId);
|
||||||
void DisplayGuildBankMoneyUpdate();
|
void DisplayGuildBankMoneyUpdate(WorldSession *session);
|
||||||
|
|
||||||
void SwapItems( Player * pl, uint8 BankTab, uint8 BankTabSlot, uint8 BankTabDst, uint8 BankTabSlotDst, uint32 SplitedAmount);
|
void SwapItems( Player * pl, uint8 BankTab, uint8 BankTabSlot, uint8 BankTabDst, uint8 BankTabSlotDst, uint32 SplitedAmount);
|
||||||
void MoveFromBankToChar( Player * pl, uint8 BankTab, uint8 BankTabSlot, uint8 PlayerBag, uint8 PlayerSlot, uint32 SplitedAmount);
|
void MoveFromBankToChar( Player * pl, uint8 BankTab, uint8 BankTabSlot, uint8 PlayerBag, uint8 PlayerSlot, uint32 SplitedAmount);
|
||||||
@@ -405,11 +405,8 @@ class Guild
|
|||||||
uint32 GetBankRights(uint32 rankId, uint8 TabId) const;
|
uint32 GetBankRights(uint32 rankId, uint8 TabId) const;
|
||||||
bool IsMemberHaveRights(uint32 LowGuid, uint8 TabId,uint32 rights) const;
|
bool IsMemberHaveRights(uint32 LowGuid, uint8 TabId,uint32 rights) const;
|
||||||
bool CanMemberViewTab(uint32 LowGuid, uint8 TabId) const;
|
bool CanMemberViewTab(uint32 LowGuid, uint8 TabId) const;
|
||||||
// Load/unload
|
// Load
|
||||||
void LoadGuildBankFromDB();
|
void LoadGuildBankFromDB();
|
||||||
void UnloadGuildBank();
|
|
||||||
bool IsGuildBankLoaded() const { return m_GuildBankLoaded; }
|
|
||||||
void IncOnlineMemberCount() { ++m_OnlineMembers; }
|
|
||||||
// Money deposit/withdraw
|
// Money deposit/withdraw
|
||||||
void SendMoneyInfo(WorldSession *session, uint32 LowGuid);
|
void SendMoneyInfo(WorldSession *session, uint32 LowGuid);
|
||||||
bool MemberMoneyWithdraw(uint32 amount, uint32 LowGuid);
|
bool MemberMoneyWithdraw(uint32 amount, uint32 LowGuid);
|
||||||
@@ -427,7 +424,6 @@ class Guild
|
|||||||
void LoadBankRightsFromDB(uint32 GuildId);
|
void LoadBankRightsFromDB(uint32 GuildId);
|
||||||
// Guild Bank Event Logs
|
// Guild Bank Event Logs
|
||||||
void LoadGuildBankEventLogFromDB();
|
void LoadGuildBankEventLogFromDB();
|
||||||
void UnloadGuildBankEventLog();
|
|
||||||
void DisplayGuildBankLogs(WorldSession *session, uint8 TabId);
|
void DisplayGuildBankLogs(WorldSession *session, uint8 TabId);
|
||||||
void LogBankEvent(uint8 EventType, uint8 TabId, uint32 PlayerGuidLow, uint32 ItemOrMoney, uint8 ItemStackCount=0, uint8 DestTabId=0);
|
void LogBankEvent(uint8 EventType, uint8 TabId, uint32 PlayerGuidLow, uint32 ItemOrMoney, uint8 ItemStackCount=0, uint8 DestTabId=0);
|
||||||
bool AddGBankItemToDB(uint32 GuildId, uint32 BankTab , uint32 BankTabSlot , uint32 GUIDLow, uint32 Entry );
|
bool AddGBankItemToDB(uint32 GuildId, uint32 BankTab , uint32 BankTabSlot , uint32 GUIDLow, uint32 Entry );
|
||||||
@@ -468,9 +464,6 @@ class Guild
|
|||||||
uint32 m_GuildBankEventLogNextGuid_Money;
|
uint32 m_GuildBankEventLogNextGuid_Money;
|
||||||
uint32 m_GuildBankEventLogNextGuid_Item[GUILD_BANK_MAX_TABS];
|
uint32 m_GuildBankEventLogNextGuid_Item[GUILD_BANK_MAX_TABS];
|
||||||
|
|
||||||
bool m_GuildBankLoaded;
|
|
||||||
bool m_EventLogLoaded;
|
|
||||||
uint32 m_OnlineMembers;
|
|
||||||
uint64 m_GuildBankMoney;
|
uint64 m_GuildBankMoney;
|
||||||
uint8 m_PurchasedTabs;
|
uint8 m_PurchasedTabs;
|
||||||
|
|
||||||
|
|||||||
+10
-13
@@ -891,7 +891,7 @@ void WorldSession::HandleGuildBankQueryTab( WorldPacket & recv_data )
|
|||||||
if (!pGuild)
|
if (!pGuild)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!pGuild->IsGuildBankLoaded() || TabId >= pGuild->GetPurchasedTabs())
|
if (TabId >= pGuild->GetPurchasedTabs())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Let's update the amount of gold the player can withdraw before displaying the content
|
// Let's update the amount of gold the player can withdraw before displaying the content
|
||||||
@@ -925,7 +925,7 @@ void WorldSession::HandleGuildBankDepositMoney( WorldPacket & recv_data )
|
|||||||
if (!pGuild)
|
if (!pGuild)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!pGuild->IsGuildBankLoaded() || !pGuild->GetPurchasedTabs())
|
if (!pGuild->GetPurchasedTabs())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CharacterDatabase.BeginTransaction();
|
CharacterDatabase.BeginTransaction();
|
||||||
@@ -948,7 +948,7 @@ void WorldSession::HandleGuildBankDepositMoney( WorldPacket & recv_data )
|
|||||||
|
|
||||||
pGuild->DisplayGuildBankTabsInfo(this);
|
pGuild->DisplayGuildBankTabsInfo(this);
|
||||||
pGuild->DisplayGuildBankContent(this, 0);
|
pGuild->DisplayGuildBankContent(this, 0);
|
||||||
pGuild->DisplayGuildBankMoneyUpdate();
|
pGuild->DisplayGuildBankMoneyUpdate(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleGuildBankWithdrawMoney( WorldPacket & recv_data )
|
void WorldSession::HandleGuildBankWithdrawMoney( WorldPacket & recv_data )
|
||||||
@@ -973,7 +973,7 @@ void WorldSession::HandleGuildBankWithdrawMoney( WorldPacket & recv_data )
|
|||||||
if(!pGuild)
|
if(!pGuild)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!pGuild->IsGuildBankLoaded() || !pGuild->GetPurchasedTabs())
|
if (!pGuild->GetPurchasedTabs())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (pGuild->GetGuildBankMoney()<money) // not enough money in bank
|
if (pGuild->GetGuildBankMoney()<money) // not enough money in bank
|
||||||
@@ -1001,7 +1001,7 @@ void WorldSession::HandleGuildBankWithdrawMoney( WorldPacket & recv_data )
|
|||||||
pGuild->SendMoneyInfo(this, GetPlayer()->GetGUIDLow());
|
pGuild->SendMoneyInfo(this, GetPlayer()->GetGUIDLow());
|
||||||
pGuild->DisplayGuildBankTabsInfo(this);
|
pGuild->DisplayGuildBankTabsInfo(this);
|
||||||
pGuild->DisplayGuildBankContent(this,0);
|
pGuild->DisplayGuildBankContent(this,0);
|
||||||
pGuild->DisplayGuildBankMoneyUpdate();
|
pGuild->DisplayGuildBankMoneyUpdate(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data )
|
void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data )
|
||||||
@@ -1030,7 +1030,7 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data )
|
|||||||
}
|
}
|
||||||
|
|
||||||
Guild *pGuild = objmgr.GetGuildById(GuildId);
|
Guild *pGuild = objmgr.GetGuildById(GuildId);
|
||||||
if (!pGuild || !pGuild->IsGuildBankLoaded())
|
if (!pGuild)
|
||||||
{
|
{
|
||||||
recv_data.rpos(recv_data.wpos()); // prevent additional spam at rejected packet
|
recv_data.rpos(recv_data.wpos()); // prevent additional spam at rejected packet
|
||||||
return;
|
return;
|
||||||
@@ -1135,7 +1135,7 @@ void WorldSession::HandleGuildBankBuyTab( WorldPacket & recv_data )
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// m_PurchasedTabs = 0 when buying Tab 0, that is why this check can be made
|
// m_PurchasedTabs = 0 when buying Tab 0, that is why this check can be made
|
||||||
if (!pGuild->IsGuildBankLoaded() || TabId != pGuild->GetPurchasedTabs())
|
if (TabId != pGuild->GetPurchasedTabs())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint32 TabCost = GetGuildBankTabPrice(TabId) * GOLD;
|
uint32 TabCost = GetGuildBankTabPrice(TabId) * GOLD;
|
||||||
@@ -1185,7 +1185,7 @@ void WorldSession::HandleGuildBankUpdateTab( WorldPacket & recv_data )
|
|||||||
if (!pGuild)
|
if (!pGuild)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!pGuild->IsGuildBankLoaded() || TabId >= pGuild->GetPurchasedTabs())
|
if (TabId >= pGuild->GetPurchasedTabs())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pGuild->SetGuildBankTabInfo(TabId, Name, IconIndex);
|
pGuild->SetGuildBankTabInfo(TabId, Name, IconIndex);
|
||||||
@@ -1208,9 +1208,6 @@ void WorldSession::HandleGuildBankLogQuery( WorldPacket & recv_data )
|
|||||||
if (!pGuild)
|
if (!pGuild)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!pGuild->IsGuildBankLoaded())
|
|
||||||
return;
|
|
||||||
|
|
||||||
// GUILD_BANK_MAX_TABS send by client for money log
|
// GUILD_BANK_MAX_TABS send by client for money log
|
||||||
if (TabId >= pGuild->GetPurchasedTabs() && TabId != GUILD_BANK_MAX_TABS)
|
if (TabId >= pGuild->GetPurchasedTabs() && TabId != GUILD_BANK_MAX_TABS)
|
||||||
return;
|
return;
|
||||||
@@ -1233,7 +1230,7 @@ void WorldSession::HandleQueryGuildBankTabText(WorldPacket &recv_data)
|
|||||||
if (!pGuild)
|
if (!pGuild)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!pGuild->IsGuildBankLoaded() || TabId >= pGuild->GetPurchasedTabs())
|
if (TabId >= pGuild->GetPurchasedTabs())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pGuild->SendGuildBankTabText(this, TabId);
|
pGuild->SendGuildBankTabText(this, TabId);
|
||||||
@@ -1256,7 +1253,7 @@ void WorldSession::HandleSetGuildBankTabText(WorldPacket &recv_data)
|
|||||||
if (!pGuild)
|
if (!pGuild)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!pGuild->IsGuildBankLoaded() || TabId >= pGuild->GetPurchasedTabs())
|
if (TabId >= pGuild->GetPurchasedTabs())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pGuild->SetGuildBankTabText(TabId, Text);
|
pGuild->SetGuildBankTabText(TabId, Text);
|
||||||
|
|||||||
@@ -3250,6 +3250,9 @@ void ObjectMgr::LoadGuilds()
|
|||||||
delete newguild;
|
delete newguild;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
newguild->LoadGuildEventLogFromDB();
|
||||||
|
newguild->LoadGuildBankEventLogFromDB();
|
||||||
|
newguild->LoadGuildBankFromDB();
|
||||||
AddGuild(newguild);
|
AddGuild(newguild);
|
||||||
|
|
||||||
} while (result->NextRow());
|
} while (result->NextRow());
|
||||||
|
|||||||
Reference in New Issue
Block a user