From bcf38a2ad19116b50d0456bdd6f79d0d218e39d1 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sat, 15 Aug 2015 14:03:36 -0400 Subject: SEnv: Remove static_exists from ActiveObjects in deleted blocks --- src/environment.cpp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'src/environment.cpp') diff --git a/src/environment.cpp b/src/environment.cpp index 5bed11476..dbbfc6f1f 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -1424,6 +1424,33 @@ void ServerEnvironment::getRemovedActiveObjects(v3s16 pos, s16 radius, } } +void ServerEnvironment::setStaticForActiveObjectsInBlock( + v3s16 blockpos, bool static_exists, v3s16 static_block) +{ + MapBlock *block = m_map->getBlockNoCreateNoEx(blockpos); + if (!block) + return; + + for (std::map::iterator + so_it = block->m_static_objects.m_active.begin(); + so_it != block->m_static_objects.m_active.end(); ++so_it) { + // Get the ServerActiveObject counterpart to this StaticObject + std::map::iterator ao_it; + ao_it = m_active_objects.find(so_it->first); + if (ao_it == m_active_objects.end()) { + // If this ever happens, there must be some kind of nasty bug. + errorstream << "ServerEnvironment::setStaticForObjectsInBlock(): " + "Object from MapBlock::m_static_objects::m_active not found " + "in m_active_objects"; + continue; + } + + ServerActiveObject *sao = ao_it->second; + sao->m_static_exists = static_exists; + sao->m_static_block = static_block; + } +} + ActiveObjectMessage ServerEnvironment::getActiveObjectMessage() { if(m_active_object_messages.empty()) @@ -1960,7 +1987,6 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete) } } - #ifndef SERVER #include "clientsimpleobject.h" -- cgit v1.2.3