diff options
author | Kahrl <kahrl@gmx.net> | 2012-01-24 00:00:26 +0100 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-02-05 12:06:55 +0200 |
commit | 88cdd3a363668cfb2fd07b5381cce29738aed0bf (patch) | |
tree | 445cfa71f50e87045b44c7674dc3f3eacf9b2e15 /src/serverremoteplayer.cpp | |
parent | e15de8b70dc13e24aefca7fdd2a17be5f150ae49 (diff) | |
download | minetest-88cdd3a363668cfb2fd07b5381cce29738aed0bf.tar.gz minetest-88cdd3a363668cfb2fd07b5381cce29738aed0bf.tar.bz2 minetest-88cdd3a363668cfb2fd07b5381cce29738aed0bf.zip |
Players stay in environment even when dead, damage flash and fall damage fixes
Don't set m_removed on dead players (dead players are indicated by hp == 0). Local
damage flash is shown whatever the cause was (even from Lua set_hp). PlayerCAO
damage flash matches duration of local damage flash. Fall damage is dealt much more consistently (this is done by disallowing jumping when speed.Y is very negative, up to now jumping could sometimes negate fall damage)
Diffstat (limited to 'src/serverremoteplayer.cpp')
-rw-r--r-- | src/serverremoteplayer.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/serverremoteplayer.cpp b/src/serverremoteplayer.cpp index b4dbbdb1b..728ffe026 100644 --- a/src/serverremoteplayer.cpp +++ b/src/serverremoteplayer.cpp @@ -34,7 +34,6 @@ ServerRemotePlayer::ServerRemotePlayer(ServerEnvironment *env): m_wield_index(0), m_inventory_not_sent(false), m_hp_not_sent(false), - m_respawn_active(false), m_is_in_environment(false), m_time_from_last_punch(0), m_position_not_sent(false) @@ -159,6 +158,8 @@ std::string ServerRemotePlayer::getClientInitializationData() writeV3F1000(os, getPosition()); // yaw writeF1000(os, getYaw()); + // dead + writeU8(os, getHP() == 0); return os.str(); } @@ -247,6 +248,19 @@ void ServerRemotePlayer::setHP(s16 hp_) if(hp != oldhp) m_hp_not_sent = true; + + // On death or reincarnation send an active object message + if((hp == 0) != (oldhp == 0)) + { + std::ostringstream os(std::ios::binary); + // command (2 = update death state) + writeU8(os, 2); + // dead? + writeU8(os, hp == 0); + // create message and add to list + ActiveObjectMessage aom(getId(), false, os.str()); + m_messages_out.push_back(aom); + } } s16 ServerRemotePlayer::getHP() { |