aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/luaentity_sao.cpp2
-rw-r--r--src/server/mods.cpp15
-rw-r--r--src/server/unit_sao.cpp5
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()