2 * Copyright (C) 2005-2013 MaNGOS <http://getmangos.com/>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include "ObjectGuid.h"
23 #include "Database/DatabaseEnv.h"
24 #include "Policies/SingletonImp.h"
25 #include "ProgressBar.h"
28 INSTANTIATE_SINGLETON_1(GuildMgr
);
36 for (GuildMap::iterator itr
= m_GuildMap
.begin(); itr
!= m_GuildMap
.end(); ++itr
)
40 void GuildMgr::AddGuild(Guild
* guild
)
42 m_GuildMap
[guild
->GetId()] = guild
;
45 void GuildMgr::RemoveGuild(uint32 guildId
)
47 m_GuildMap
.erase(guildId
);
50 void GuildMgr::RemoveGuild(ObjectGuid guildGuid
)
52 if (!guildGuid
.IsGuild())
55 RemoveGuild(guildGuid
.GetCounter());
58 Guild
* GuildMgr::GetGuildById(uint32 guildId
) const
60 GuildMap::const_iterator itr
= m_GuildMap
.find(guildId
);
61 if (itr
!= m_GuildMap
.end())
67 Guild
* GuildMgr::GetGuildByGuid(ObjectGuid guildGuid
) const
69 if (!guildGuid
.IsGuild())
72 return GetGuildById(guildGuid
.GetCounter());
75 Guild
* GuildMgr::GetGuildByName(std::string
const& name
) const
77 for (GuildMap::const_iterator itr
= m_GuildMap
.begin(); itr
!= m_GuildMap
.end(); ++itr
)
78 if (itr
->second
->GetName() == name
)
84 Guild
* GuildMgr::GetGuildByLeader(ObjectGuid
const& guid
) const
86 for (GuildMap::const_iterator itr
= m_GuildMap
.begin(); itr
!= m_GuildMap
.end(); ++itr
)
87 if (itr
->second
->GetLeaderGuid() == guid
)
93 std::string
GuildMgr::GetGuildNameById(uint32 guildId
) const
95 GuildMap::const_iterator itr
= m_GuildMap
.find(guildId
);
96 if (itr
!= m_GuildMap
.end())
97 return itr
->second
->GetName();
102 std::string
GuildMgr::GetGuildNameByGuid(ObjectGuid guildGuid
) const
104 if (!guildGuid
.IsGuild())
107 return GetGuildNameById(guildGuid
.GetCounter());
110 void GuildMgr::LoadGuilds()
115 QueryResult
* result
= CharacterDatabase
.Query("SELECT guild.guildid,guild.name,leaderguid,EmblemStyle,EmblemColor,BorderStyle,BorderColor,"
117 "BackgroundColor,info,motd,createdate,BankMoney,(SELECT COUNT(guild_bank_tab.guildid) FROM guild_bank_tab WHERE guild_bank_tab.guildid = guild.guildid) "
118 "FROM guild ORDER BY guildid ASC");
127 sLog
.outString(">> Loaded %u guild definitions", count
);
133 QueryResult
* guildRanksResult
= CharacterDatabase
.Query("SELECT guildid,rid,rname,rights,BankMoneyPerDay FROM guild_rank ORDER BY guildid ASC, rid ASC");
135 // load guild members
137 QueryResult
* guildMembersResult
= CharacterDatabase
.Query("SELECT guildid,guild_member.guid,rank,pnote,offnote,BankResetTimeMoney,BankRemMoney,"
139 "BankResetTimeTab0,BankRemSlotsTab0,BankResetTimeTab1,BankRemSlotsTab1,BankResetTimeTab2,BankRemSlotsTab2,"
141 "BankResetTimeTab3,BankRemSlotsTab3,BankResetTimeTab4,BankRemSlotsTab4,BankResetTimeTab5,BankRemSlotsTab5,"
143 "characters.name, characters.level, characters.class, characters.zone, characters.logout_time, characters.account "
144 "FROM guild_member LEFT JOIN characters ON characters.guid = guild_member.guid ORDER BY guildid ASC");
146 // load guild bank tab rights
148 QueryResult
* guildBankTabRightsResult
= CharacterDatabase
.Query("SELECT guildid,TabId,rid,gbright,SlotPerDay FROM guild_bank_right ORDER BY guildid ASC, TabId ASC");
150 BarGoLink
bar(result
->GetRowCount());
154 // Field *fields = result->Fetch();
159 Guild
* newGuild
= new Guild
;
160 if (!newGuild
->LoadGuildFromDB(result
) ||
161 !newGuild
->LoadRanksFromDB(guildRanksResult
) ||
162 !newGuild
->LoadMembersFromDB(guildMembersResult
) ||
163 !newGuild
->LoadBankRightsFromDB(guildBankTabRightsResult
) ||
164 !newGuild
->CheckGuildStructure()
172 newGuild
->LoadGuildEventLogFromDB();
173 newGuild
->LoadGuildBankEventLogFromDB();
174 newGuild
->LoadGuildBankFromDB();
177 while (result
->NextRow());
180 delete guildRanksResult
;
181 delete guildMembersResult
;
182 delete guildBankTabRightsResult
;
184 // delete unused LogGuid records in guild_eventlog and guild_bank_eventlog table
185 // you can comment these lines if you don't plan to change CONFIG_UINT32_GUILD_EVENT_LOG_COUNT and CONFIG_UINT32_GUILD_BANK_EVENT_LOG_COUNT
186 CharacterDatabase
.PExecute("DELETE FROM guild_eventlog WHERE LogGuid > '%u'", sWorld
.getConfig(CONFIG_UINT32_GUILD_EVENT_LOG_COUNT
));
187 CharacterDatabase
.PExecute("DELETE FROM guild_bank_eventlog WHERE LogGuid > '%u'", sWorld
.getConfig(CONFIG_UINT32_GUILD_BANK_EVENT_LOG_COUNT
));
190 sLog
.outString(">> Loaded %u guild definitions", count
);