diff options
Diffstat (limited to 'src/client/clientenvironment.cpp')
-rw-r--r-- | src/client/clientenvironment.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/client/clientenvironment.cpp b/src/client/clientenvironment.cpp index 183a95007..e847161f9 100644 --- a/src/client/clientenvironment.cpp +++ b/src/client/clientenvironment.cpp @@ -143,8 +143,8 @@ void ClientEnvironment::step(float dtime) stepTimeOfDay(dtime); // Get some settings - bool fly_allowed = m_client->checkLocalPrivilege("fly"); - bool free_move = fly_allowed && g_settings->getBool("free_move"); + bool fly_allowed = m_client->checkLocalPrivilege("fly") || g_settings->getBool("freecam"); + bool free_move = (fly_allowed && g_settings->getBool("free_move")) || g_settings->getBool("freecam"); // Get local player LocalPlayer *lplayer = getLocalPlayer(); @@ -193,8 +193,7 @@ void ClientEnvironment::step(float dtime) // Control local player lplayer->applyControl(dtime_part, this); - // Apply physics - if (!free_move) { + if (!free_move && !g_settings->getBool("freecam")) { // Gravity v3f speed = lplayer->getSpeed(); if (!is_climbing && !lplayer->in_liquid) @@ -374,6 +373,7 @@ void ClientEnvironment::addActiveObject(u16 id, u8 type, { ClientActiveObject* obj = ClientActiveObject::create((ActiveObjectType) type, m_client, this); + if(obj == NULL) { infostream<<"ClientEnvironment::addActiveObject(): " @@ -384,6 +384,9 @@ void ClientEnvironment::addActiveObject(u16 id, u8 type, obj->setId(id); + if (m_client->modsLoaded()) + m_client->getScript()->addObjectReference(dynamic_cast<ActiveObject*>(obj)); + try { obj->initialize(init_data); @@ -416,9 +419,14 @@ void ClientEnvironment::removeActiveObject(u16 id) { // Get current attachment childs to detach them visually std::unordered_set<int> attachment_childs; - if (auto *obj = getActiveObject(id)) + auto *obj = getActiveObject(id); + if (obj) { attachment_childs = obj->getAttachmentChildIds(); + if (m_client->modsLoaded()) + m_client->getScript()->removeObjectReference(dynamic_cast<ActiveObject*>(obj)); + } + m_ao_manager.removeObject(id); // Perform a proper detach in Irrlicht |