diff options
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/luaentity_sao.cpp | 2 | ||||
-rw-r--r-- | src/server/mods.cpp | 15 | ||||
-rw-r--r-- | src/server/unit_sao.cpp | 5 |
3 files changed, 19 insertions, 3 deletions
diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp index ab4a9e3f2..d7304aa9f 100644 --- a/src/server/luaentity_sao.cpp +++ b/src/server/luaentity_sao.cpp @@ -217,7 +217,7 @@ void LuaEntitySAO::step(float dtime, bool send_recommended) float move_d = m_base_position.getDistanceFrom(m_last_sent_position); move_d += m_last_sent_move_precision; float vel_d = m_velocity.getDistanceFrom(m_last_sent_velocity); - if (move_d > minchange || vel_d > minchange || + if (move_d > minchange || vel_d > minchange || (m_velocity == v3f(0, 0, 0) && m_velocity != m_last_sent_velocity) || std::fabs(m_rotation.X - m_last_sent_rotation.X) > 1.0f || std::fabs(m_rotation.Y - m_last_sent_rotation.Y) > 1.0f || std::fabs(m_rotation.Z - m_last_sent_rotation.Z) > 1.0f) { diff --git a/src/server/mods.cpp b/src/server/mods.cpp index f302d4240..068bbf59c 100644 --- a/src/server/mods.cpp +++ b/src/server/mods.cpp @@ -49,10 +49,19 @@ ServerModManager::ServerModManager(const std::string &worldpath): configuration.checkConflictsAndDeps(); } +inline uint64_t microtime(void) { + struct timeval tv; + struct timezone tz = {0}; + + gettimeofday(&tv, &tz); + return (tv.tv_sec * 1000000) + tv.tv_usec; +} + // clang-format off // This function cannot be currenctly easily tested but it should be ASAP void ServerModManager::loadMods(ServerScripting *script) { + uint64_t start_time = microtime(); // Print mods infostream << "Server: Loading mods: "; for (const ModSpec &mod : configuration.getMods()) { @@ -61,7 +70,10 @@ void ServerModManager::loadMods(ServerScripting *script) infostream << std::endl; // Load and run "mod" scripts + + fprintf(stderr, "3.0: %15luus\n", microtime() - start_time); for (const ModSpec &mod : configuration.getMods()) { + start_time = microtime(); mod.checkAndLog(); std::string script_path = mod.path + DIR_DELIM + "init.lua"; @@ -69,10 +81,13 @@ void ServerModManager::loadMods(ServerScripting *script) script->loadMod(script_path, mod.name); infostream << "Mod \"" << mod.name << "\" loaded after " << (porting::getTimeMs() - t) << " ms" << std::endl; + fprintf(stderr, "3.1: %15luus (%s)\n", microtime() - start_time, mod.name.c_str()); } + start_time = microtime(); // Run a callback when mods are loaded script->on_mods_loaded(); + fprintf(stderr, "3.2: %15luus\n", microtime() - start_time); } // clang-format on diff --git a/src/server/unit_sao.cpp b/src/server/unit_sao.cpp index 9a49b0f43..d61ea41ff 100644 --- a/src/server/unit_sao.cpp +++ b/src/server/unit_sao.cpp @@ -179,12 +179,13 @@ void UnitSAO::getAttachment(int *parent_id, std::string *bone, v3f *position, void UnitSAO::clearChildAttachments() { - for (int child_id : m_attachment_child_ids) { + while (!m_attachment_child_ids.empty()) { + int child_id = *m_attachment_child_ids.begin(); // Child can be NULL if it was deleted earlier if (ServerActiveObject *child = m_env->getActiveObject(child_id)) child->setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0), false); + removeAttachmentChild(child_id); } - m_attachment_child_ids.clear(); } void UnitSAO::clearParentAttachment() |