aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2021-09-19 20:56:13 +0200
committerElias Fleckenstein <eliasfleckenstein@web.de>2021-09-19 20:56:13 +0200
commitc8900e169a1ddceec07a449f1ae7c4322ff02036 (patch)
tree5156605fb473d25786426eb6876ba2e7d3b7507b /src/server
parent950d2c9b3e10cbace9236e820c8119d1abb9e01f (diff)
parente0529da5c84f224c380e6d5e063392cb01f85683 (diff)
downloaddragonfireclient-c8900e169a1ddceec07a449f1ae7c4322ff02036.tar.xz
Merge branch 'master' of https://github.com/minetest/minetest
Diffstat (limited to 'src/server')
-rw-r--r--src/server/mods.cpp8
-rw-r--r--src/server/player_sao.cpp4
-rw-r--r--src/server/serverinventorymgr.cpp4
-rw-r--r--src/server/unit_sao.cpp13
4 files changed, 19 insertions, 10 deletions
diff --git a/src/server/mods.cpp b/src/server/mods.cpp
index 83fa12da9..609d8c346 100644
--- a/src/server/mods.cpp
+++ b/src/server/mods.cpp
@@ -61,12 +61,8 @@ void ServerModManager::loadMods(ServerScripting *script)
infostream << std::endl;
// Load and run "mod" scripts
for (const ModSpec &mod : m_sorted_mods) {
- if (!string_allowed(mod.name, MODNAME_ALLOWED_CHARS)) {
- throw ModError("Error loading mod \"" + mod.name +
- "\": Mod name does not follow naming "
- "conventions: "
- "Only characters [a-z0-9_] are allowed.");
- }
+ mod.checkAndLog();
+
std::string script_path = mod.path + DIR_DELIM + "init.lua";
auto t = porting::getTimeMs();
script->loadMod(script_path, mod.name);
diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp
index 0d31f2e0b..d4d036726 100644
--- a/src/server/player_sao.cpp
+++ b/src/server/player_sao.cpp
@@ -167,7 +167,6 @@ void PlayerSAO::step(float dtime, bool send_recommended)
if (m_breath == 0) {
PlayerHPChangeReason reason(PlayerHPChangeReason::DROWNING);
setHP(m_hp - c.drowning, reason);
- m_env->getGameDef()->SendPlayerHPOrDie(this, reason);
}
}
}
@@ -216,7 +215,6 @@ void PlayerSAO::step(float dtime, bool send_recommended)
s32 newhp = (s32)m_hp - (s32)damage_per_second;
PlayerHPChangeReason reason(PlayerHPChangeReason::NODE_DAMAGE, nodename);
setHP(newhp, reason);
- m_env->getGameDef()->SendPlayerHPOrDie(this, reason);
}
}
@@ -491,6 +489,8 @@ void PlayerSAO::setHP(s32 hp, const PlayerHPChangeReason &reason)
// Update properties on death
if ((hp == 0) != (oldhp == 0))
m_properties_sent = false;
+
+ m_env->getGameDef()->SendPlayerHPOrDie(this, reason);
}
void PlayerSAO::setBreath(const u16 breath, bool send)
diff --git a/src/server/serverinventorymgr.cpp b/src/server/serverinventorymgr.cpp
index 2a80c9bbe..3aee003b4 100644
--- a/src/server/serverinventorymgr.cpp
+++ b/src/server/serverinventorymgr.cpp
@@ -157,8 +157,8 @@ bool ServerInventoryManager::removeDetachedInventory(const std::string &name)
m_env->getGameDef()->sendDetachedInventory(
nullptr, name, player->getPeerId());
- } else {
- // Notify all players about the change
+ } else if (m_env) {
+ // Notify all players about the change as soon ServerEnv exists
m_env->getGameDef()->sendDetachedInventory(
nullptr, name, PEER_ID_INEXISTENT);
}
diff --git a/src/server/unit_sao.cpp b/src/server/unit_sao.cpp
index fa6c8f0f4..acbdd478a 100644
--- a/src/server/unit_sao.cpp
+++ b/src/server/unit_sao.cpp
@@ -124,6 +124,19 @@ void UnitSAO::sendOutdatedData()
void UnitSAO::setAttachment(int parent_id, const std::string &bone, v3f position,
v3f rotation, bool force_visible)
{
+ auto *obj = parent_id ? m_env->getActiveObject(parent_id) : nullptr;
+ if (obj) {
+ // Do checks to avoid circular references
+ // The chain of wanted parent must not refer or contain "this"
+ for (obj = obj->getParent(); obj; obj = obj->getParent()) {
+ if (obj == this) {
+ warningstream << "Mod bug: Attempted to attach object " << m_id << " to parent "
+ << parent_id << " but former is an (in)direct parent of latter." << std::endl;
+ return;
+ }
+ }
+ }
+
// Attachments need to be handled on both the server and client.
// If we just attach on the server, we can only copy the position of the parent.
// Attachments are still sent to clients at an interval so players might see them