diff options
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 306 | ||||
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 17 | ||||
| -rw-r--r-- | src/server/game/Guilds/Guild.cpp | 200 | ||||
| -rw-r--r-- | src/server/game/Guilds/Guild.h | 5 |
4 files changed, 302 insertions, 226 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 731414626cd..d107ff5cced 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -3450,33 +3450,47 @@ void ObjectMgr::BuildPlayerLevelInfo(uint8 race, uint8 _class, uint8 level, Play void ObjectMgr::LoadGuilds() { Guild *newGuild; - uint32 count = 0; - // 0 1 2 3 4 5 6 - QueryResult result = CharacterDatabase.Query("SELECT guild.guildid,guild.name,leaderguid,EmblemStyle,EmblemColor,BorderStyle,BorderColor," - // 7 8 9 10 11 12 - "BackgroundColor,info,motd,createdate,BankMoney,COUNT(guild_bank_tab.guildid) " - "FROM guild LEFT JOIN guild_bank_tab ON guild.guildid = guild_bank_tab.guildid GROUP BY guild.guildid ORDER BY guildid ASC"); + QueryCallback<int> callback[MAX_OBJMGR_QUERY_CALLBACK]; - if (!result) - { + SQLQueryHolder generalHolder; + generalHolder.SetSize(MAX_OBJMGR_QUERY_CALLBACK); - barGoLink bar(1); + SQLQueryHolder guildEventHolder; + guildEventHolder.SetSize(MAX_OBJMGR_QUERY_CALLBACK); - bar.step(); + SQLQueryHolder guildBankEventHolder; + guildBankEventHolder.SetSize(MAX_OBJMGR_QUERY_CALLBACK); - sLog.outString(); - sLog.outString(">> Loaded %u guild definitions", count); - return; - } + SQLQueryHolder guildBankHolder; + guildBankHolder.SetSize(MAX_OBJMGR_QUERY_CALLBACK); + + + // 0 1 2 3 4 5 6 + guildEventHolder.SetQuery(OBJMGR_QUERY_CALLBACK_GUILDEVENTS, "SELECT LogGuid, EventType, PlayerGuid1, PlayerGuid2, NewRank, TimeStamp, guildid FROM guild_eventlog ORDER BY TimeStamp DESC, LogGuid DESC"); + + // 0 1 2 3 4 5 6 7 8 + guildBankEventHolder.SetQuery(OBJMGR_QUERY_CALLBACK_GUILDBANKEVENTS, "SELECT LogGuid, EventType, PlayerGuid, ItemOrMoney, ItemStackCount, DestTabId, TimeStamp, guildid, TabId FROM guild_bank_eventlog ORDER BY TimeStamp DESC,LogGuid DESC"); + + // 0 1 2 3 4 + guildBankHolder.SetQuery(OBJMGR_QUERY_CALLBACK_GUILDBANKS, "SELECT TabId, TabName, TabIcon, TabText, guildid FROM guild_bank_tab ORDER BY TabId"); + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + guildBankHolder.SetQuery(OBJMGR_QUERY_CALLBACK_GUILDBANK_ITEMS, "SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, TabId, SlotId, item_guid, item_entry, guildid FROM guild_bank_item JOIN item_instance ON item_guid = guid"); + + + // 0 1 2 3 4 5 6 + generalHolder.SetQuery(OBJMGR_QUERY_CALLBACK_GUILDS, "SELECT guild.guildid,guild.name,leaderguid,EmblemStyle,EmblemColor,BorderStyle,BorderColor," + // 7 8 9 10 11 12 + "BackgroundColor,info,motd,createdate,BankMoney,COUNT(guild_bank_tab.guildid) " + "FROM guild LEFT JOIN guild_bank_tab ON guild.guildid = guild_bank_tab.guildid GROUP BY guild.guildid ORDER BY guildid ASC"); // load guild ranks // 0 1 2 3 4 - QueryResult guildRanksResult = CharacterDatabase.Query("SELECT guildid,rid,rname,rights,BankMoneyPerDay FROM guild_rank ORDER BY guildid ASC, rid ASC"); + generalHolder.SetQuery(OBJMGR_QUERY_CALLBACK_GUILDRANKS, "SELECT guildid,rid,rname,rights,BankMoneyPerDay FROM guild_rank ORDER BY guildid ASC, rid ASC"); // load guild members // 0 1 2 3 4 5 6 - QueryResult guildMembersResult = CharacterDatabase.Query("SELECT guildid,guild_member.guid,rank,pnote,offnote,BankResetTimeMoney,BankRemMoney," + generalHolder.SetQuery(OBJMGR_QUERY_CALLBACK_GUILDMEMBERS, "SELECT guildid,guild_member.guid,rank,pnote,offnote,BankResetTimeMoney,BankRemMoney," // 7 8 9 10 11 12 "BankResetTimeTab0,BankRemSlotsTab0,BankResetTimeTab1,BankRemSlotsTab1,BankResetTimeTab2,BankRemSlotsTab2," // 13 14 15 16 17 18 @@ -3487,16 +3501,42 @@ void ObjectMgr::LoadGuilds() // load guild bank tab rights // 0 1 2 3 4 - QueryResult guildBankTabRightsResult = CharacterDatabase.Query("SELECT guildid,TabId,rid,gbright,SlotPerDay FROM guild_bank_right ORDER BY guildid ASC, TabId ASC"); + generalHolder.SetQuery(OBJMGR_QUERY_CALLBACK_GUILDBANKTABRIGHTS, "SELECT guildid,TabId,rid,gbright,SlotPerDay FROM guild_bank_right ORDER BY guildid ASC, TabId ASC"); + + + + QueryResultHolderFuture generalHolderFuture = CharacterDatabase.DelayQueryHolder(&generalHolder); + QueryResultHolderFuture guildEventHolderFuture = CharacterDatabase.DelayQueryHolder(&guildEventHolder); + QueryResultHolderFuture guildBankEventHolderFuture = CharacterDatabase.DelayQueryHolder(&guildBankEventHolder); + QueryResultHolderFuture guildBankHolderFuture = CharacterDatabase.DelayQueryHolder(&guildBankHolder); + + while(!generalHolderFuture.ready()) + Sleep(5); + + QueryResult result = generalHolder.GetResult(OBJMGR_QUERY_CALLBACK_GUILDS); + QueryResult guildRanksResult = generalHolder.GetResult(OBJMGR_QUERY_CALLBACK_GUILDRANKS); + QueryResult guildMembersResult = generalHolder.GetResult(OBJMGR_QUERY_CALLBACK_GUILDMEMBERS); + QueryResult guildBankTabRightsResult = generalHolder.GetResult(OBJMGR_QUERY_CALLBACK_GUILDBANKTABRIGHTS); + + if (!result) + { + barGoLink bar(1); + + bar.step(); + + sLog.outString(); + sLog.outString(">> Loaded 0 guild definitions"); + return; + } barGoLink bar(result->GetRowCount()); + uint32 maxid = 0; do { //Field *fields = result->Fetch(); bar.step(); - ++count; newGuild = new Guild; if (!newGuild->LoadGuildFromDB(result) || @@ -3510,20 +3550,242 @@ void ObjectMgr::LoadGuilds() delete newGuild; continue; } - newGuild->LoadGuildEventLogFromDB(); - newGuild->LoadGuildBankEventLogFromDB(); - newGuild->LoadGuildBankFromDB(); + + newGuild->m_TabListMap.resize(newGuild->GetPurchasedTabs()); + AddGuild(newGuild); + if(maxid < newGuild->GetId()) + maxid = newGuild->GetId(); + } while (result->NextRow()); + std::vector<Guild*> GuildVector(maxid + 1); + + for(GuildMap::iterator itr = mGuildMap.begin(); itr != mGuildMap.end(); ++itr) + GuildVector[itr->second->GetId()] = (*itr).second; + + UNORDERED_MAP<ObjectMgrQueryCallbacks, QueryResultHolderFuture*> callbackMap; + callbackMap[OBJMGR_QUERY_CALLBACK_GUILDEVENTS] = &guildEventHolderFuture; + callbackMap[OBJMGR_QUERY_CALLBACK_GUILDBANKEVENTS] = &guildBankEventHolderFuture; + callbackMap[OBJMGR_QUERY_CALLBACK_GUILDBANKS] = &guildBankHolderFuture; + + UNORDERED_MAP<ObjectMgrQueryCallbacks, QueryResultHolderFuture*>::iterator callbackItr = callbackMap.begin(); + while(!callbackMap.empty()) + { + if(callbackItr->second->ready()) + { + switch(callbackItr->first) + { + case OBJMGR_QUERY_CALLBACK_GUILDEVENTS: + { + QueryResult result = guildEventHolder.GetResult(OBJMGR_QUERY_CALLBACK_GUILDEVENTS); + + LoadGuildEvents(GuildVector, result); + break; + } + case OBJMGR_QUERY_CALLBACK_GUILDBANKEVENTS: + { + QueryResult result = guildBankEventHolder.GetResult(OBJMGR_QUERY_CALLBACK_GUILDBANKEVENTS); + + LoadGuildBankEvents(GuildVector, result); + break; + } + case OBJMGR_QUERY_CALLBACK_GUILDBANKS: + { + QueryResult result = guildBankHolder.GetResult(OBJMGR_QUERY_CALLBACK_GUILDBANKS); + QueryResult itemResult = guildBankHolder.GetResult(OBJMGR_QUERY_CALLBACK_GUILDBANK_ITEMS); + + LoadGuildBanks(GuildVector, result, itemResult); + break; + } + } + + callbackMap.erase(callbackItr++); + } + else + ++callbackItr; + + if(callbackItr == callbackMap.end()) + { + callbackItr = callbackMap.begin(); + Sleep(5); + } + } + //delete unused LogGuid records in guild_eventlog and guild_bank_eventlog table //you can comment these lines if you don't plan to change CONFIG_GUILD_EVENT_LOG_COUNT and CONFIG_GUILD_BANK_EVENT_LOG_COUNT CharacterDatabase.PQuery("DELETE FROM guild_eventlog WHERE LogGuid > '%u'", sWorld.getIntConfig(CONFIG_GUILD_EVENT_LOG_COUNT)); CharacterDatabase.PQuery("DELETE FROM guild_bank_eventlog WHERE LogGuid > '%u'", sWorld.getIntConfig(CONFIG_GUILD_BANK_EVENT_LOG_COUNT)); sLog.outString(); - sLog.outString(">> Loaded %u guild definitions", count); + sLog.outString(">> Loaded %u guild definitions", mGuildMap.size()); +} + +void ObjectMgr::LoadGuildEvents(std::vector<Guild*>& GuildVector, QueryResult& result) +{ + if(result) + { + do + { + Field *fields = result->Fetch(); + uint32 guildid = fields[6].GetUInt32(); + + if(!GuildVector[guildid]->m_GuildEventLogNextGuid) + GuildVector[guildid]->m_GuildEventLogNextGuid = fields[0].GetUInt32(); + + if(GuildVector[guildid]->m_GuildEventLog.size() < GUILD_EVENTLOG_MAX_RECORDS) + { + GuildEventLogEntry NewEvent; + NewEvent.EventType = fields[1].GetUInt8(); + NewEvent.PlayerGuid1 = fields[2].GetUInt32(); + NewEvent.PlayerGuid2 = fields[3].GetUInt32(); + NewEvent.NewRank = fields[4].GetUInt8(); + NewEvent.TimeStamp = fields[5].GetUInt64(); + + GuildVector[guildid]->m_GuildEventLog.push_front(NewEvent); + } + } + while(result->NextRow()); + } +} + +void ObjectMgr::LoadGuildBankEvents(std::vector<Guild*>& GuildVector, QueryResult& result) +{ + if(result) + { + do + { + Field *fields = result->Fetch(); + uint32 logGuid = fields[0].GetUInt32(); + uint32 guildid = fields[7].GetUInt32(); + uint8 TabId = fields[8].GetUInt8(); + + if(TabId < GuildVector[guildid]->GetPurchasedTabs() || TabId == GUILD_BANK_MONEY_LOGS_TAB) + { + bool canInsert; + + if(TabId != GUILD_BANK_MONEY_LOGS_TAB) + { + if(!GuildVector[guildid]->m_GuildBankEventLogNextGuid_Item[TabId]) + GuildVector[guildid]->m_GuildBankEventLogNextGuid_Item[TabId] = logGuid; + } + else + { + if(!GuildVector[guildid]->m_GuildBankEventLogNextGuid_Money) + GuildVector[guildid]->m_GuildBankEventLogNextGuid_Money = logGuid; + } + + if(TabId != GUILD_BANK_MONEY_LOGS_TAB) + canInsert = GuildVector[guildid]->m_GuildBankEventLog_Item[TabId].size() < GUILD_BANK_MAX_LOGS; + else + canInsert = GuildVector[guildid]->m_GuildBankEventLog_Money.size() < GUILD_BANK_MAX_LOGS; + + if(canInsert) + { + GuildBankEventLogEntry NewEvent; + NewEvent.EventType = fields[1].GetUInt8(); + NewEvent.PlayerGuid = fields[2].GetUInt32(); + NewEvent.ItemOrMoney = fields[3].GetUInt32(); + NewEvent.ItemStackCount = fields[4].GetUInt8(); + NewEvent.DestTabId = fields[5].GetUInt8(); + NewEvent.TimeStamp = fields[6].GetUInt64(); + + if(TabId != GUILD_BANK_MONEY_LOGS_TAB) + { + if(NewEvent.isMoneyEvent()) + { + CharacterDatabase.PExecute("UPDATE guild_bank_eventlog SET TabId='%u' WHERE guildid='%u' AND TabId='%u' AND LogGuid='%u'", GUILD_BANK_MONEY_LOGS_TAB, guildid, TabId, logGuid); + sLog.outError("GuildBankEventLog ERROR: MoneyEvent LogGuid %u for Guild %u had incorrectly set its TabId to %u, correcting it to %u TabId", logGuid, guildid, TabId, GUILD_BANK_MONEY_LOGS_TAB); + continue; + } + else + GuildVector[guildid]->m_GuildBankEventLog_Item[TabId].push_front(NewEvent); + } + else + { + if(!NewEvent.isMoneyEvent()) + sLog.outError("GuildBankEventLog ERROR: MoneyEvent LogGuid %u for Guild %u is not MoneyEvent - ignoring...", logGuid, guildid); + else + GuildVector[guildid]->m_GuildBankEventLog_Money.push_front(NewEvent); + } + } + } + } + while(result->NextRow()); + } +} + +void ObjectMgr::LoadGuildBanks(std::vector<Guild*>& GuildVector, QueryResult& result, QueryResult& itemResult) +{ + if(result) + { + do + { + Field *fields = result->Fetch(); + uint32 TabId = fields[0].GetUInt32(); + uint32 guildid = fields[4].GetUInt32(); + + if(TabId < GuildVector[guildid]->GetPurchasedTabs()) + { + GuildBankTab *NewTab = new GuildBankTab; + + NewTab->Name = fields[1].GetCppString(); + NewTab->Icon = fields[2].GetCppString(); + NewTab->Text = fields[3].GetCppString(); + + GuildVector[guildid]->m_TabListMap[TabId] = NewTab; + } + } + while(result->NextRow()); + } + + if(itemResult) + { + do + { + Field *itemfields = itemResult->Fetch(); + + uint8 TabId = itemfields[11].GetUInt8(); + uint8 SlotId = itemfields[12].GetUInt8(); + uint32 ItemGuid = itemfields[13].GetUInt32(); + uint32 ItemEntry = itemfields[14].GetUInt32(); + uint32 guildid = itemfields[15].GetUInt32(); + + if (TabId >= GuildVector[guildid]->GetPurchasedTabs()) + { + sLog.outError("Guild::LoadGuildBankFromDB: Invalid tab for item (GUID: %u id: #%u) in guild bank, skipped.", ItemGuid,ItemEntry); + continue; + } + + if (SlotId >= GUILD_BANK_MAX_SLOTS) + { + sLog.outError("Guild::LoadGuildBankFromDB: Invalid slot for item (GUID: %u id: #%u) in guild bank, skipped.", ItemGuid,ItemEntry); + continue; + } + + ItemPrototype const *proto = sObjectMgr.GetItemPrototype(ItemEntry); + + if (!proto) + { + sLog.outError("Guild::LoadGuildBankFromDB: Unknown item (GUID: %u id: #%u) in guild bank, skipped.", ItemGuid,ItemEntry); + continue; + } + + Item *pItem = NewItemOrBag(proto); + if (!pItem->LoadFromDB(ItemGuid, 0, itemResult, ItemEntry)) + { + CharacterDatabase.PExecute("DELETE FROM guild_bank_item WHERE guildid='%u' AND TabId='%u' AND SlotId='%u'", guildid, uint32(TabId), uint32(SlotId)); + sLog.outError("Item GUID %u not found in item_instance, deleting from Guild Bank!", ItemGuid); + delete pItem; + continue; + } + + pItem->AddToWorld(); + GuildVector[guildid]->m_TabListMap[TabId]->Slots[SlotId] = pItem; + } + while(itemResult->NextRow()); + } } void ObjectMgr::LoadArenaTeams() diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 4cd610143be..e06f3279292 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -359,6 +359,20 @@ extern LanguageDesc lang_description[LANGUAGES_COUNT]; class PlayerDumpReader; +enum ObjectMgrQueryCallbacks +{ + OBJMGR_QUERY_CALLBACK_GUILDEVENTS, + OBJMGR_QUERY_CALLBACK_GUILDBANKEVENTS, + OBJMGR_QUERY_CALLBACK_GUILDBANKS, + OBJMGR_QUERY_CALLBACK_GUILDBANK_ITEMS, + OBJMGR_QUERY_CALLBACK_GUILDS, + OBJMGR_QUERY_CALLBACK_GUILDRANKS, + OBJMGR_QUERY_CALLBACK_GUILDMEMBERS, + OBJMGR_QUERY_CALLBACK_GUILDBANKTABRIGHTS, + + MAX_OBJMGR_QUERY_CALLBACK +}; + class ObjectMgr { friend class PlayerDumpReader; @@ -594,6 +608,9 @@ class ObjectMgr } void LoadGuilds(); + void LoadGuildEvents(std::vector<Guild*>& GuildVector, QueryResult& result); + void LoadGuildBankEvents(std::vector<Guild*>& GuildVector, QueryResult& result); + void LoadGuildBanks(std::vector<Guild*>& GuildVector, QueryResult& result, QueryResult& itemResult); void LoadArenaTeams(); void LoadGroups(); void LoadQuests(); diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 54a4e7b537a..127f3cd604b 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -872,42 +872,6 @@ void Guild::DisplayGuildEventLog(WorldSession *session) sLog.outDebug("WORLD: Sent (MSG_GUILD_EVENT_LOG_QUERY)"); } -// Load guild eventlog from DB -void Guild::LoadGuildEventLogFromDB() -{ - // 0 1 2 3 4 5 - QueryResult 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) - return; - bool isNextLogGuidSet = false; - //uint32 configCount = sWorld.getIntConfig(CONFIG_GUILD_EVENT_LOG_COUNT); - // First event in list will be the oldest and the latest event is last event in list - do - { - Field *fields = result->Fetch(); - if (!isNextLogGuidSet) - { - m_GuildEventLogNextGuid = fields[0].GetUInt32(); - isNextLogGuidSet = true; - } - // Fill entry - GuildEventLogEntry NewEvent; - NewEvent.EventType = fields[1].GetUInt8(); - NewEvent.PlayerGuid1 = fields[2].GetUInt32(); - NewEvent.PlayerGuid2 = fields[3].GetUInt32(); - NewEvent.NewRank = fields[4].GetUInt8(); - NewEvent.TimeStamp = fields[5].GetUInt64(); - - // There can be a problem if more events have same TimeStamp the ORDER can be broken when fields[0].GetUInt32() == configCount, but - // events with same timestamp can appear when there is lag, and we naivly suppose that mangos isn't laggy - // but if problem appears, player will see set of guild events that have same timestamp in bad order - - // Add entry to list - m_GuildEventLog.push_front(NewEvent); - - } while (result->NextRow()); -} - // Add entry to guild eventlog void Guild::LogGuildEvent(uint8 EventType, uint32 PlayerGuid1, uint32 PlayerGuid2, uint8 NewRank) { @@ -1122,87 +1086,6 @@ uint32 Guild::GetBankRights(uint32 rankId, uint8 TabId) const } // ************************************************* -// Guild bank loading related - -// This load should be called on startup only -void Guild::LoadGuildBankFromDB() -{ - // 0 1 2 3 - QueryResult result = CharacterDatabase.PQuery("SELECT TabId, TabName, TabIcon, TabText FROM guild_bank_tab WHERE guildid='%u' ORDER BY TabId", m_Id); - if (!result) - { - m_TabListMap.clear(); - return; - } - - do - { - Field *fields = result->Fetch(); - uint8 tabId = fields[0].GetUInt8(); - if (tabId >= GetPurchasedTabs()) - { - sLog.outError("Table `guild_bank_tab` have not purchased tab %u for guild %u, skipped", tabId, m_Id); - continue; - } - - GuildBankTab *NewTab = new GuildBankTab; - - NewTab->Name = fields[1].GetCppString(); - NewTab->Icon = fields[2].GetCppString(); - NewTab->Text = fields[3].GetCppString(); - - m_TabListMap[tabId] = NewTab; - } while (result->NextRow()); - - // data needs to be at first place for Item::LoadFromDB - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 - result = CharacterDatabase.PQuery("SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, TabId, SlotId, item_guid, item_entry FROM guild_bank_item JOIN item_instance ON item_guid = guid WHERE guildid='%u' ORDER BY TabId", m_Id); - if (!result) - return; - - do - { - Field *fields = result->Fetch(); - uint8 TabId = fields[11].GetUInt8(); - uint8 SlotId = fields[12].GetUInt8(); - uint32 ItemGuid = fields[13].GetUInt32(); - uint32 ItemEntry = fields[14].GetUInt32(); - - if (TabId >= GetPurchasedTabs()) - { - sLog.outError("Guild::LoadGuildBankFromDB: Invalid tab for item (GUID: %u id: #%u) in guild bank, skipped.", ItemGuid,ItemEntry); - continue; - } - - if (SlotId >= GUILD_BANK_MAX_SLOTS) - { - sLog.outError("Guild::LoadGuildBankFromDB: Invalid slot for item (GUID: %u id: #%u) in guild bank, skipped.", ItemGuid,ItemEntry); - continue; - } - - ItemPrototype const *proto = sObjectMgr.GetItemPrototype(ItemEntry); - - if (!proto) - { - sLog.outError("Guild::LoadGuildBankFromDB: Unknown item (GUID: %u id: #%u) in guild bank, skipped.", ItemGuid,ItemEntry); - continue; - } - - Item *pItem = NewItemOrBag(proto); - if (!pItem->LoadFromDB(ItemGuid, 0, result, ItemEntry)) - { - CharacterDatabase.PExecute("DELETE FROM guild_bank_item WHERE guildid='%u' AND TabId='%u' AND SlotId='%u'", m_Id, uint32(TabId), uint32(SlotId)); - sLog.outError("Item GUID %u not found in item_instance, deleting from Guild Bank!", ItemGuid); - delete pItem; - continue; - } - - pItem->AddToWorld(); - m_TabListMap[TabId]->Slots[SlotId] = pItem; - }while (result->NextRow()); -} - -// ************************************************* // Money deposit/withdraw related void Guild::SendMoneyInfo(WorldSession *session, uint32 LowGuid) @@ -1428,89 +1311,6 @@ bool Guild::LoadBankRightsFromDB(QueryResult guildBankTabRightsResult) // ************************************************* // Bank log related -void Guild::LoadGuildBankEventLogFromDB() -{ - // Money log is in TabId = GUILD_BANK_MONEY_LOGS_TAB - - //uint32 configCount = sWorld.getIntConfig(CONFIG_GUILD_BANK_EVENT_LOG_COUNT); - //cycle through all purchased guild bank item tabs - for (uint32 tabId = 0; tabId < uint32(GetPurchasedTabs()); ++tabId) - { - // 0 1 2 3 4 5 6 - QueryResult 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); - if (!result) - continue; - - bool isNextLogGuidSet = false; - do - { - Field *fields = result->Fetch(); - - GuildBankEventLogEntry NewEvent; - NewEvent.EventType = fields[1].GetUInt8(); - NewEvent.PlayerGuid = fields[2].GetUInt32(); - NewEvent.ItemOrMoney = fields[3].GetUInt32(); - NewEvent.ItemStackCount = fields[4].GetUInt16(); - NewEvent.DestTabId = fields[5].GetUInt8(); - NewEvent.TimeStamp = fields[6].GetUInt64(); - - //if newEvent is moneyEvent, move it to moneyEventTab in DB and report error - if (NewEvent.isMoneyEvent()) - { - uint32 logGuid = fields[0].GetUInt32(); - CharacterDatabase.PExecute("UPDATE guild_bank_eventlog SET TabId='%u' WHERE guildid='%u' AND TabId='%u' AND LogGuid='%u'", GUILD_BANK_MONEY_LOGS_TAB, m_Id, tabId, logGuid); - sLog.outError("GuildBankEventLog ERROR: MoneyEvent LogGuid %u for Guild %u had incorrectly set its TabId to %u, correcting it to %u TabId", logGuid, m_Id, tabId, GUILD_BANK_MONEY_LOGS_TAB); - continue; - } - else - //add event to list - //events are ordered from oldest (in beginning) to latest (in the end) - m_GuildBankEventLog_Item[tabId].push_front(NewEvent); - - if (!isNextLogGuidSet) - { - m_GuildBankEventLogNextGuid_Item[tabId] = fields[0].GetUInt32(); - //we don't have to do m_GuildBankEventLogNextGuid_Item[tabId] %= configCount; - it will be done when creating new record - isNextLogGuidSet = true; - } - } while (result->NextRow()); - } - - //special handle for guild bank money log - // 0 1 2 3 4 5 6 - QueryResult 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, GUILD_BANK_MONEY_LOGS_TAB, GUILD_BANK_MAX_LOGS); - if (!result) - return; - - bool isNextMoneyLogGuidSet = false; - do - { - Field *fields = result->Fetch(); - if (!isNextMoneyLogGuidSet) - { - m_GuildBankEventLogNextGuid_Money = fields[0].GetUInt32(); - //we don't have to do m_GuildBankEventLogNextGuid_Money %= configCount; - it will be done when creating new record - isNextMoneyLogGuidSet = true; - } - GuildBankEventLogEntry NewEvent; - - NewEvent.EventType = fields[1].GetUInt8(); - NewEvent.PlayerGuid = fields[2].GetUInt32(); - NewEvent.ItemOrMoney = fields[3].GetUInt32(); - NewEvent.ItemStackCount = fields[4].GetUInt16(); - NewEvent.DestTabId = fields[5].GetUInt8(); - NewEvent.TimeStamp = fields[6].GetUInt64(); - - //if newEvent is not moneyEvent, then report error - if (!NewEvent.isMoneyEvent()) - sLog.outError("GuildBankEventLog ERROR: MoneyEvent LogGuid %u for Guild %u is not MoneyEvent - ignoring...", fields[0].GetUInt32(), m_Id); - else - //add event to list - //events are ordered from oldest (in beginning) to latest (in the end) - m_GuildBankEventLog_Money.push_front(NewEvent); - - } while (result->NextRow()); -} void Guild::DisplayGuildBankLogs(WorldSession *session, uint8 TabId) { diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index 7cc3e4b8b79..cfa2bfa6255 100644 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -286,6 +286,7 @@ struct RankInfo class Guild { + friend class ObjectMgr; public: Guild(); ~Guild(); @@ -385,7 +386,6 @@ class Guild void UpdateLogoutTime(uint64 guid); // Guild EventLog - void LoadGuildEventLogFromDB(); void DisplayGuildEventLog(WorldSession *session); void LogGuildEvent(uint8 EventType, uint32 PlayerGuid1, uint32 PlayerGuid2, uint8 NewRank); @@ -408,8 +408,6 @@ class Guild uint32 GetBankRights(uint32 rankId, uint8 TabId) const; bool IsMemberHaveRights(uint32 LowGuid, uint8 TabId,uint32 rights) const; bool CanMemberViewTab(uint32 LowGuid, uint8 TabId) const; - // Load - void LoadGuildBankFromDB(); // Money deposit/withdraw void SendMoneyInfo(WorldSession *session, uint32 LowGuid); bool MemberMoneyWithdraw(uint32 amount, uint32 LowGuid, SQLTransaction& trans); @@ -426,7 +424,6 @@ class Guild // rights per day bool LoadBankRightsFromDB(QueryResult guildBankTabRightsResult); // Guild Bank Event Logs - void LoadGuildBankEventLogFromDB(); void DisplayGuildBankLogs(WorldSession *session, uint8 TabId); void LogBankEvent(SQLTransaction& trans, uint8 EventType, uint8 TabId, uint32 PlayerGuidLow, uint32 ItemOrMoney, uint16 ItemStackCount=0, uint8 DestTabId=0); bool AddGBankItemToDB(uint32 GuildId, uint32 BankTab , uint32 BankTabSlot , uint32 GUIDLow, uint32 Entry, SQLTransaction& trans); |
