X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fcontent_sao.cpp;h=4ee92f4d34255408e83f1159cfadb73f359fb26b;hb=58e6d25e033c76dc91aaac18fdeda92ac23fe0e1;hp=347e8892949c5d48fcc0898dc33f81dd9d6e3d02;hpb=4e1f50035e860a00636ca5d804c267119df99601;p=oweals%2Fminetest.git diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 347e88929..4ee92f4d3 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -191,7 +191,7 @@ public: } ItemSAO(ServerEnvironment *env, v3f pos, - const std::string itemstring): + const std::string &itemstring): ServerActiveObject(env, pos), m_itemstring(itemstring), m_itemstring_changed(false), @@ -350,7 +350,7 @@ private: ItemSAO proto_ItemSAO(NULL, v3f(0,0,0), ""); ServerActiveObject* createItemSAO(ServerEnvironment *env, v3f pos, - const std::string itemstring) + const std::string &itemstring) { return new ItemSAO(env, pos, itemstring); } @@ -527,8 +527,9 @@ void LuaEntitySAO::step(float dtime, bool send_recommended) m_velocity += dtime * m_acceleration; } - if(m_prop.automatic_face_movement_dir){ - m_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI; + if((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; } } @@ -942,6 +943,7 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_, m_player(player_), m_peer_id(peer_id_), m_inventory(NULL), + m_damage(0), m_last_good_position(0,0,0), m_time_from_last_punch(0), m_nocheat_dig_pos(32767, 32767, 32767), @@ -967,6 +969,8 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_, m_physics_override_speed(1), m_physics_override_jump(1), m_physics_override_gravity(1), + m_physics_override_sneak(true), + m_physics_override_sneak_glitch(true), m_physics_override_sent(false) { assert(m_player); @@ -1023,6 +1027,8 @@ void PlayerSAO::removingFromEnvironment() { m_player->setPlayerSAO(NULL); m_player->peer_id = 0; + m_env->savePlayer(m_player->getName()); + m_env->removePlayer(m_player->getName()); } } @@ -1058,7 +1064,9 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version) os<hp; } +s16 PlayerSAO::readDamage() +{ + s16 damage = m_damage; + m_damage = 0; + return damage; +} + void PlayerSAO::setHP(s16 hp) { s16 oldhp = m_player->hp; @@ -1335,19 +1344,15 @@ void PlayerSAO::setHP(s16 hp) m_player->hp = hp; - if(hp != oldhp) + if(hp != oldhp) { m_hp_not_sent = true; + if(oldhp > hp) + m_damage += oldhp - hp; + } - // On death or reincarnation send an active object message + // Update properties on death if((hp == 0) != (oldhp == 0)) - { - // Will send new is_visible value based on (getHP()!=0) m_properties_sent = false; - // Send new HP - std::string str = gob_cmd_punched(0, getHP()); - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push_back(aom); - } } u16 PlayerSAO::getBreath() const