]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/content_cao.cpp
Revert "Fix settings to honor numeric conversion errors"
[dragonfireclient.git] / src / content_cao.cpp
index bb8dad032eb7777e61305b8c00c56cd9e82133f2..840103cc74644f7406ae98e569258b4c7bdad3e7 100644 (file)
@@ -957,10 +957,11 @@ class GenericCAO : public ClientActiveObject
                }
                else if(m_prop.visual == "mesh"){
                        infostream<<"GenericCAO::addToScene(): mesh"<<std::endl;
-                       scene::IAnimatedMesh *mesh = smgr->getMesh(m_prop.mesh.c_str());
+                       scene::IAnimatedMesh *mesh = m_gamedef->getMesh(m_prop.mesh);
                        if(mesh)
                        {
                                m_animated_meshnode = smgr->addAnimatedMeshSceneNode(mesh, NULL);
+                               mesh->drop(); // The scene node took hold of it
                                m_animated_meshnode->animateJoints(); // Needed for some animations
                                m_animated_meshnode->setScale(v3f(m_prop.visual_size.X,
                                                m_prop.visual_size.Y,
@@ -1211,8 +1212,9 @@ class GenericCAO : public ClientActiveObject
                        updateNodePos();
                }
 
-               if (getParent() == NULL && m_prop.automatic_face_movement_dir){
-                       m_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI;
+               if (getParent() == NULL && m_prop.automatic_face_movement_dir &&
+                               (fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001)){
+                       m_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI + m_prop.automatic_face_movement_dir_offset;
                        updateNodePos();
                }
        }
@@ -1648,6 +1650,8 @@ class GenericCAO : public ClientActiveObject
                        m_acceleration = readV3F1000(is);
                        if(fabs(m_prop.automatic_rotate) < 0.001)
                                m_yaw = readF1000(is);
+                       else
+                               readF1000(is);
                        bool do_interpolate = readU8(is);
                        bool is_end_position = readU8(is);
                        float update_interval = readF1000(is);
@@ -1692,12 +1696,18 @@ class GenericCAO : public ClientActiveObject
                        float override_speed = readF1000(is);
                        float override_jump = readF1000(is);
                        float override_gravity = readF1000(is);
+                       // these are sent inverted so we get true when the server sends nothing
+                       bool sneak = !readU8(is);
+                       bool sneak_glitch = !readU8(is);
+                       
                        if(m_is_local_player)
                        {
                                LocalPlayer *player = m_env->getLocalPlayer();
                                player->physics_override_speed = override_speed;
                                player->physics_override_jump = override_jump;
                                player->physics_override_gravity = override_gravity;
+                               player->physics_override_sneak = sneak;
+                               player->physics_override_sneak_glitch = sneak_glitch;
                        }
                }
                else if(cmd == GENERIC_CMD_SET_ANIMATION)