aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Guilds/Guild.cpp11
-rwxr-xr-xsrc/server/game/Guilds/Guild.h2
-rw-r--r--src/server/game/Guilds/GuildMgr.cpp6
-rw-r--r--src/server/game/Guilds/GuildMgr.h2
-rw-r--r--src/server/game/World/World.cpp11
-rwxr-xr-xsrc/server/game/World/World.h2
-rw-r--r--src/server/worldserver/worldserver.conf.dist8
7 files changed, 42 insertions, 0 deletions
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 4b193b62b2b..595ad77feeb 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -1119,6 +1119,15 @@ void Guild::Disband()
sGuildMgr->RemoveGuild(m_id);
}
+void Guild::SaveToDB()
+{
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+
+ m_achievementMgr.SaveToDB(trans);
+
+ CharacterDatabase.CommitTransaction(trans);
+}
+
///////////////////////////////////////////////////////////////////////////////
// HANDLE CLIENT COMMANDS
void Guild::HandleRoster(WorldSession* session /*= NULL*/)
@@ -1833,6 +1842,8 @@ void Guild::HandleMemberLogout(WorldSession* session)
member->UpdateLogoutTime();
}
_BroadcastEvent(GE_SIGNED_OFF, player->GetGUID(), player->GetName());
+
+ SaveToDB();
}
void Guild::HandleDisband(WorldSession* session)
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index 67888f636ff..565420052ec 100755
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -623,6 +623,8 @@ public:
bool Create(Player* pLeader, const std::string& name);
void Disband();
+ void SaveToDB();
+
// Getters
uint32 GetId() const { return m_id; }
uint64 GetGUID() const { return MAKE_NEW_GUID(m_id, 0, HIGHGUID_GUILD); }
diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp
index 473fe32ec27..04b0cfeaa39 100644
--- a/src/server/game/Guilds/GuildMgr.cpp
+++ b/src/server/game/Guilds/GuildMgr.cpp
@@ -39,6 +39,12 @@ void GuildMgr::RemoveGuild(uint32 guildId)
GuildStore.erase(guildId);
}
+void GuildMgr::SaveGuilds()
+{
+ for (GuildContainer::iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
+ itr->second->SaveToDB();
+}
+
uint32 GuildMgr::GenerateGuildId()
{
if (NextGuildId >= 0xFFFFFFFE)
diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h
index d9c18a8026d..4b999c9231a 100644
--- a/src/server/game/Guilds/GuildMgr.h
+++ b/src/server/game/Guilds/GuildMgr.h
@@ -40,6 +40,8 @@ public:
void AddGuild(Guild* guild);
void RemoveGuild(uint32 guildId);
+ void SaveGuilds();
+
uint32 GenerateGuildId();
void SetNextGuildId(uint32 Id) { NextGuildId = Id; }
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 936b2d3629b..6fc74dd5e1e 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1197,6 +1197,9 @@ void World::LoadConfigSettings(bool reload)
// MySQL ping time interval
m_int_configs[CONFIG_DB_PING_INTERVAL] = ConfigMgr::GetIntDefault("MaxPingTime", 30);
+ // Guild save interval
+ m_int_configs[CONFIG_GUILD_SAVE_INTERVAL] = ConfigMgr::GetIntDefault("GuildSaveInterval", 15);
+
// misc
m_bool_configs[CONFIG_PDUMP_NO_PATHS] = ConfigMgr::GetBoolDefault("PlayerDump.DisallowPaths", true);
m_bool_configs[CONFIG_PDUMP_NO_OVERWRITE] = ConfigMgr::GetBoolDefault("PlayerDump.DisallowOverwrite", true);
@@ -1679,6 +1682,8 @@ void World::SetInitialWorldSettings()
m_timers[WUPDATE_PINGDB].SetInterval(getIntConfig(CONFIG_DB_PING_INTERVAL)*MINUTE*IN_MILLISECONDS); // Mysql ping time in minutes
+ m_timers[WUPDATE_GUILDSAVE].SetInterval(getIntConfig(CONFIG_GUILD_SAVE_INTERVAL) * MINUTE * IN_MILLISECONDS);
+
//to set mailtimer to return mails every day between 4 and 5 am
//mailtimer is increased when updating auctions
//one second is 1000 -(tested on win system)
@@ -2035,6 +2040,12 @@ void World::Update(uint32 diff)
WorldDatabase.KeepAlive();
}
+ if (m_timers[WUPDATE_GUILDSAVE].Passed())
+ {
+ m_timers[WUPDATE_GUILDSAVE].Reset();
+ sGuildMgr->SaveGuilds();
+ }
+
// update the instance reset times
sInstanceSaveMgr->Update();
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 841ae2530ca..b25444f4865 100755
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -86,6 +86,7 @@ enum WorldTimers
WUPDATE_MAILBOXQUEUE,
WUPDATE_DELETECHARS,
WUPDATE_PINGDB,
+ WUPDATE_GUILDSAVE,
WUPDATE_COUNT
};
@@ -335,6 +336,7 @@ enum WorldIntConfigs
CONFIG_WINTERGRASP_BATTLETIME,
CONFIG_WINTERGRASP_NOBATTLETIME,
CONFIG_WINTERGRASP_RESTART_AFTER_CRASH,
+ CONFIG_GUILD_SAVE_INTERVAL,
INT_CONFIG_VALUE_COUNT
};
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index fbd45bec8e1..a720255ad21 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -392,6 +392,14 @@ CleanCharacterDB = 0
PersistentCharacterCleanFlags = 0
#
+# GuildSaveInterval
+# Description: Time (in minutes) between guild experience saves
+# Default: 15
+#
+
+GuildSaveInterval = 15
+
+#
###################################################################################################
###################################################################################################