Fix active_object_count and active_object_count_wider not getting updated between...
authorPerttu Ahola <celeron55@gmail.com>
Tue, 29 Nov 2011 15:09:29 +0000 (17:09 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Tue, 29 Nov 2011 17:13:58 +0000 (19:13 +0200)
src/environment.cpp

index 1951996a23135f0330aa6c40f1dc4e313e03e56d..41ba52a6fd364fe7331970bff7a83b1cebd1ca90 100644 (file)
@@ -618,22 +618,6 @@ public:
                        return;
 
                ServerMap *map = &m_env->getServerMap();
-               // Find out how many objects the block contains
-               u32 active_object_count = block->m_static_objects.m_active.size();
-               // Find out how many objects this and all the neighbors contain
-               u32 active_object_count_wider = 0;
-               for(s16 x=-1; x<=1; x++)
-               for(s16 y=-1; y<=1; y++)
-               for(s16 z=-1; z<=1; z++)
-               {
-                       MapBlock *block2 = map->getBlockNoCreateNoEx(
-                                       block->getPos() + v3s16(x,y,z));
-                       if(block2==NULL)
-                               continue;
-                       active_object_count_wider +=
-                                       block2->m_static_objects.m_active.size()
-                                       + block2->m_static_objects.m_stored.size();
-               }
 
                v3s16 p0;
                for(p0.X=0; p0.X<MAP_BLOCKSIZE; p0.X++)
@@ -650,9 +634,28 @@ public:
                                continue;
 
                        for(std::list<ActiveABM>::iterator
-                                       i = j->second.begin(); i != j->second.end(); i++){
+                                       i = j->second.begin(); i != j->second.end(); i++)
+                       {
                                if(myrand() % i->chance != 0)
                                        continue;
+
+                               // Find out how many objects the block contains
+                               u32 active_object_count = block->m_static_objects.m_active.size();
+                               // Find out how many objects this and all the neighbors contain
+                               u32 active_object_count_wider = 0;
+                               for(s16 x=-1; x<=1; x++)
+                               for(s16 y=-1; y<=1; y++)
+                               for(s16 z=-1; z<=1; z++)
+                               {
+                                       MapBlock *block2 = map->getBlockNoCreateNoEx(
+                                                       block->getPos() + v3s16(x,y,z));
+                                       if(block2==NULL)
+                                               continue;
+                                       active_object_count_wider +=
+                                                       block2->m_static_objects.m_active.size()
+                                                       + block2->m_static_objects.m_stored.size();
+                               }
+
                                // Call all the trigger variations
                                i->abm->trigger(m_env, p, n);
                                i->abm->trigger(m_env, p, n,