@@ -249,7 +249,8 @@ Client::Client(
249
249
m_removed_sounds_check_timer(0 ),
250
250
m_state(LC_Created),
251
251
m_localdb(NULL ),
252
- m_script(NULL )
252
+ m_script(NULL ),
253
+ m_mod_storage_save_timer(10 .0f )
253
254
{
254
255
// Add local player
255
256
m_env.setLocalPlayer (new LocalPlayer (this , playername));
@@ -730,6 +731,18 @@ void Client::step(float dtime)
730
731
}
731
732
}
732
733
734
+ m_mod_storage_save_timer -= dtime;
735
+ if (m_mod_storage_save_timer <= 0 .0f ) {
736
+ verbosestream << " Saving registered mod storages." << std::endl;
737
+ m_mod_storage_save_timer = g_settings->getFloat (" server_map_save_interval" );
738
+ for (UNORDERED_MAP<std::string, ModMetadata *>::const_iterator
739
+ it = m_mod_storages.begin (); it != m_mod_storages.end (); ++it) {
740
+ if (it->second ->isModified ()) {
741
+ it->second ->save (getModStoragePath ());
742
+ }
743
+ }
744
+ }
745
+
733
746
// Write server map
734
747
if (m_localdb && m_localdb_save_interval.step (dtime,
735
748
m_cache_save_interval)) {
@@ -1998,3 +2011,31 @@ scene::IAnimatedMesh* Client::getMesh(const std::string &filename)
1998
2011
smgr->getMeshCache ()->removeMesh (mesh);
1999
2012
return mesh;
2000
2013
}
2014
+
2015
+ bool Client::registerModStorage (ModMetadata *storage)
2016
+ {
2017
+ if (m_mod_storages.find (storage->getModName ()) != m_mod_storages.end ()) {
2018
+ errorstream << " Unable to register same mod storage twice. Storage name: "
2019
+ << storage->getModName () << std::endl;
2020
+ return false ;
2021
+ }
2022
+
2023
+ m_mod_storages[storage->getModName ()] = storage;
2024
+ return true ;
2025
+ }
2026
+
2027
+ void Client::unregisterModStorage (const std::string &name)
2028
+ {
2029
+ UNORDERED_MAP<std::string, ModMetadata *>::const_iterator it = m_mod_storages.find (name);
2030
+ if (it != m_mod_storages.end ()) {
2031
+ // Save unconditionaly on unregistration
2032
+ it->second ->save (getModStoragePath ());
2033
+ m_mod_storages.erase (name);
2034
+ }
2035
+ }
2036
+
2037
+ std::string Client::getModStoragePath () const
2038
+ {
2039
+ return porting::path_user + DIR_DELIM + " client" + DIR_DELIM + " mod_storage" ;
2040
+ }
2041
+
0 commit comments