]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/environment.cpp
Make shift the default descent control on ladders and when flying
[dragonfireclient.git] / src / environment.cpp
index 571980498da615808c7dd14a6304d15d211e3f30..b88f55dead838a51b25f3c0a89c50fad8e9ddde7 100644 (file)
@@ -326,6 +326,7 @@ ServerEnvironment::ServerEnvironment(ServerMap *map, lua_State *L,
        m_emerger(emerger),
        m_random_spawn_timer(3),
        m_send_recommended_timer(0),
+       m_active_block_interval_overload_skip(0),
        m_game_time(0),
        m_game_time_fraction_counter(0)
 {
@@ -1086,7 +1087,8 @@ void ServerEnvironment::step(float dtime)
                                                i = elapsed_timers.begin();
                                                i != elapsed_timers.end(); i++){
                                        n = block->getNodeNoEx(i->first);
-                                       if(scriptapi_node_on_timer(m_lua,i->first,n,i->second.elapsed))
+                                       p = i->first + block->getPosRelative();
+                                       if(scriptapi_node_on_timer(m_lua,p,n,i->second.elapsed))
                                                block->setNodeTimer(i->first,NodeTimer(i->second.timeout,0));
                                }
                        }
@@ -1095,7 +1097,12 @@ void ServerEnvironment::step(float dtime)
        
        const float abm_interval = 1.0;
        if(m_active_block_modifier_interval.step(dtime, abm_interval))
-       {
+       do{ // breakable
+               if(m_active_block_interval_overload_skip > 0){
+                       ScopeProfiler sp(g_profiler, "SEnv: ABM overload skips");
+                       m_active_block_interval_overload_skip--;
+                       break;
+               }
                ScopeProfiler sp(g_profiler, "SEnv: modify in blocks avg /1s", SPT_AVG);
                TimeTaker timer("modify in active blocks");
                
@@ -1128,8 +1135,9 @@ void ServerEnvironment::step(float dtime)
                        infostream<<"WARNING: active block modifiers took "
                                        <<time_ms<<"ms (longer than "
                                        <<max_time_ms<<"ms)"<<std::endl;
+                       m_active_block_interval_overload_skip = (time_ms / max_time_ms) + 1;
                }
-       }
+       }while(0);
        
        /*
                Step script environment (run global on_step())