]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/content_cao.cpp
Implement urlencode and urldecode
[dragonfireclient.git] / src / content_cao.cpp
index bbee0bc8350243ddb182cd41107495361ab79a90..640ab6c7302ae9162785299c5936a553297356d7 100644 (file)
@@ -1210,6 +1210,12 @@ class GenericCAO : public ClientActiveObject
                        m_yaw += dtime * m_prop.automatic_rotate * 180 / M_PI;
                        updateNodePos();
                }
+
+               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();
+               }
        }
 
        void updateTexturePos()
@@ -1643,6 +1649,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);
@@ -1687,12 +1695,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)
@@ -1734,8 +1748,29 @@ class GenericCAO : public ClientActiveObject
                {
                        /*s16 damage =*/ readS16(is);
                        s16 result_hp = readS16(is);
-                       
+
+                       // Use this instead of the send damage to not interfere with prediction
+                       s16 damage = m_hp - result_hp;
+
                        m_hp = result_hp;
+
+                       if (damage > 0) {
+                               if (m_hp <= 0) {
+                                       // TODO: Execute defined fast response
+                                       // As there is no definition, make a smoke puff
+                                       ClientSimpleObject *simple = createSmokePuff(
+                                                       m_smgr, m_env, m_position,
+                                                       m_prop.visual_size * BS);
+                                       m_env->addSimpleObject(simple);
+                               } else {
+                                       // TODO: Execute defined fast response
+                                       // Flashing shall suffice as there is no definition
+                                       m_reset_textures_timer = 0.05;
+                                       if(damage >= 2)
+                                               m_reset_textures_timer += 0.05 * damage;
+                                       updateTextures("^[brighten");
+                               }
+                       }
                }
                else if(cmd == GENERIC_CMD_UPDATE_ARMOR_GROUPS)
                {