aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Guilds/GuildMgr.cpp
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2012-11-04 20:17:37 +0100
committerSpp <spp@jorge.gr>2012-11-04 20:17:37 +0100
commit06eff945065b65cf707837eca6c940ecbf8c7122 (patch)
tree1f47345347b13ad58cf8bcf5792711df88883758 /src/server/game/Guilds/GuildMgr.cpp
parentc6ce7bc9fd7a44acc18b50ec9aa933b96ff8799d (diff)
parenta5a9503bbe80068863bc129afcb41e5ea02cd8b3 (diff)
Merge branch 'master' into 4.3.4
Note: Will need extra Guild-Related commit to make it work again (Added some extra data beside the merge) Conflicts: src/server/game/Battlefield/BattlefieldHandler.cpp src/server/game/Entities/Player/Player.h src/server/game/Guilds/Guild.cpp src/server/game/Guilds/Guild.h src/server/game/Guilds/GuildMgr.cpp src/server/game/Guilds/GuildMgr.h src/server/game/Handlers/AuctionHouseHandler.cpp src/server/game/Handlers/BattleGroundHandler.cpp src/server/game/Handlers/CharacterHandler.cpp src/server/game/Handlers/ChatHandler.cpp src/server/game/Handlers/GroupHandler.cpp src/server/game/Handlers/GuildHandler.cpp src/server/game/Handlers/ItemHandler.cpp src/server/game/Handlers/LootHandler.cpp src/server/game/Handlers/MailHandler.cpp src/server/game/Handlers/MovementHandler.cpp src/server/game/Handlers/NPCHandler.cpp src/server/game/Handlers/PetHandler.cpp src/server/game/Handlers/PetitionsHandler.cpp src/server/game/Handlers/QueryHandler.cpp src/server/game/Handlers/QuestHandler.cpp src/server/game/Handlers/SkillHandler.cpp src/server/game/Handlers/SpellHandler.cpp src/server/game/Handlers/TaxiHandler.cpp src/server/game/Handlers/VehicleHandler.cpp src/server/game/Server/WorldSession.h src/server/shared/Database/Implementation/CharacterDatabase.cpp src/server/shared/Database/Implementation/CharacterDatabase.h
Diffstat (limited to 'src/server/game/Guilds/GuildMgr.cpp')
-rw-r--r--src/server/game/Guilds/GuildMgr.cpp71
1 files changed, 32 insertions, 39 deletions
diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp
index 0f421c7c432..38a5699510e 100644
--- a/src/server/game/Guilds/GuildMgr.cpp
+++ b/src/server/game/Guilds/GuildMgr.cpp
@@ -18,10 +18,8 @@
#include "Common.h"
#include "GuildMgr.h"
-GuildMgr::GuildMgr()
-{
- NextGuildId = 1;
-}
+GuildMgr::GuildMgr() : NextGuildId(1)
+{ }
GuildMgr::~GuildMgr()
{
@@ -114,19 +112,6 @@ uint32 GuildMgr::GetXPForGuildLevel(uint8 level) const
return 0;
}
-void GuildMgr::ResetExperienceCaps()
-{
- CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_RESET_TODAY_EXPERIENCE));
-
- for (GuildContainer::iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
- itr->second->ResetDailyExperience();
-}
-
-void GuildMgr::ResetReputationCaps()
-{
- /// @TODO: Implement
-}
-
void GuildMgr::LoadGuilds()
{
// 1. Load all guilds
@@ -158,6 +143,7 @@ void GuildMgr::LoadGuilds()
delete guild;
continue;
}
+
AddGuild(guild);
++count;
@@ -209,23 +195,18 @@ void GuildMgr::LoadGuilds()
// Delete orphaned guild member entries before loading the valid ones
CharacterDatabase.DirectExecute("DELETE gm FROM guild_member gm LEFT JOIN guild g ON gm.guildId = g.guildId WHERE g.guildId IS NULL");
+ CharacterDatabase.DirectExecute("DELETE gm FROM guild_member_withdraw gm LEFT JOIN guild_member g ON gm.guid = g.guid WHERE g.guid IS NULL");
- // 0 1 2 3 4 5 6
- QueryResult result = CharacterDatabase.Query("SELECT gm.guildid, gm.guid, rank, pnote, offnote, BankResetTimeMoney, BankRemMoney, "
- // 7 8 9 10 11 12
- "BankResetTimeTab0, BankRemSlotsTab0, BankResetTimeTab1, BankRemSlotsTab1, BankResetTimeTab2, BankRemSlotsTab2, "
- // 13 14 15 16 17 18
- "BankResetTimeTab3, BankRemSlotsTab3, BankResetTimeTab4, BankRemSlotsTab4, BankResetTimeTab5, BankRemSlotsTab5, "
- // 19 20 21 22
- "BankResetTimeTab6, BankRemSlotsTab6, BankResetTimeTab7, BankRemSlotsTab7, "
- // 23 24 25 26 27 28
- "c.name, c.level, c.class, c.zone, c.account, c.logout_time "
- "FROM guild_member gm LEFT JOIN characters c ON c.guid = gm.guid ORDER BY guildid ASC");
+ // 0 1 2 3 4 5 6 7 8 9 10
+ QueryResult result = CharacterDatabase.Query("SELECT guildid, gm.guid, rank, pnote, offnote, w.tab0, w.tab1, w.tab2, w.tab3, w.tab4, w.tab5, "
+ // 11 12 13 14 15 16 17 18 19
+ "w.tab6, w.tab7, w.money, c.name, c.level, c.class, c.zone, c.account, c.logout_time "
+ "FROM guild_member gm "
+ "LEFT JOIN guild_member_withdraw w ON gm.guid = w.guid "
+ "LEFT JOIN characters c ON c.guid = gm.guid ORDER BY guildid ASC");
if (!result)
- {
sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 guild members. DB table `guild_member` is empty.");
- }
else
{
uint32 count = 0;
@@ -254,7 +235,7 @@ void GuildMgr::LoadGuilds()
// Delete orphaned guild bank right entries before loading the valid ones
CharacterDatabase.DirectExecute("DELETE gbr FROM guild_bank_right gbr LEFT JOIN guild g ON gbr.guildId = g.guildId WHERE g.guildId IS NULL");
- // 0 1 2 3 4
+ // 0 1 2 3 4
QueryResult result = CharacterDatabase.Query("SELECT guildid, TabId, rid, gbright, SlotPerDay FROM guild_bank_right ORDER BY guildid ASC, TabId ASC");
if (!result)
@@ -448,18 +429,20 @@ void GuildMgr::LoadGuilds()
sLog->outInfo(LOG_FILTER_GENERAL, "Validating data of loaded guilds...");
{
uint32 oldMSTime = getMSTime();
+ std::set<Guild*> rm; // temporary storage to avoid modifying GuildStore with RemoveGuild() while iterating
for (GuildContainer::iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
{
Guild* guild = itr->second;
- if (guild)
- {
- if (!guild->Validate())
- {
- RemoveGuild(guild->GetId());
- delete guild;
- }
- }
+ if (guild && !guild->Validate())
+ rm.insert(guild);
+ }
+
+ for (std::set<Guild*>::iterator itr = rm.begin(); itr != rm.end(); ++itr)
+ {
+ Guild* guild = *itr;
+ RemoveGuild(guild->GetId());
+ delete guild;
}
sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Validated data of loaded guilds in %u ms", GetMSTimeDiffToNow(oldMSTime));
@@ -565,3 +548,13 @@ void GuildMgr::LoadGuildRewards()
sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u guild reward definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
+
+void GuildMgr::ResetTimes(bool week)
+{
+ CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_RESET_TODAY_EXPERIENCE));
+ CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_MEMBER_WITHDRAW));
+
+ for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
+ if (Guild* guild = itr->second)
+ guild->ResetTimes(week);
+}