aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsapier <Sapier at GMX dot net>2014-05-11 00:35:31 +0200
committersapier <Sapier at GMX dot net>2014-05-11 22:34:44 +0200
commit6c37e89f08f962eaba788a31f5d3c798ceaa65e6 (patch)
tree3332dd691a5820b472fb4a2c649c860fee9bb340
parent167df02e3d69dd0e8c8915944e6bab00417b15d5 (diff)
Fix old client showing duplicated health bar on new server
Fix client not showing hearts and bubbles on connecting to old server Fix server not remembering hud flags correctly
-rw-r--r--builtin/game/statbars.lua3
-rw-r--r--src/hud.cpp17
-rw-r--r--src/server.cpp5
3 files changed, 25 insertions, 0 deletions
diff --git a/builtin/game/statbars.lua b/builtin/game/statbars.lua
index ccc192ba4..c0d49332f 100644
--- a/builtin/game/statbars.lua
+++ b/builtin/game/statbars.lua
@@ -37,6 +37,9 @@ local function initialize_builtin_statbars(player)
if (hud_ids[name] == nil) then
hud_ids[name] = {}
+ -- flags are not transmitted to client on connect, we need to make sure
+ -- our current flags are transmitted by sending them actively
+ player:hud_set_flags(player:hud_get_flags())
end
if player:hud_get_flags().healthbar and
diff --git a/src/hud.cpp b/src/hud.cpp
index f1d7a3258..7b601ec87 100644
--- a/src/hud.cpp
+++ b/src/hud.cpp
@@ -414,6 +414,23 @@ void Hud::drawHotbar(u16 playeritem) {
drawItems(secondpos, hotbar_itemcount, hotbar_itemcount/2, mainlist, playeritem + 1, 0);
}
}
+
+ //////////////////////////// compatibility code to be removed //////////////
+ // this is ugly as hell but there's no other way to keep compatibility to
+ // old servers
+ if ( player->hud_flags & HUD_FLAG_HEALTHBAR_VISIBLE)
+ drawStatbar(v2s32(floor(0.5 * (float) m_screensize.X + 0.5),
+ floor(1 * (float) m_screensize.Y + 0.5)),
+ HUD_CORNER_UPPER, 0, "heart.png",
+ player->hp, v2s32((-10*24)-25,-(48+24+10)), v2s32(24,24));
+
+ if ((player->hud_flags & HUD_FLAG_BREATHBAR_VISIBLE) &&
+ (player->getBreath() < 11))
+ drawStatbar(v2s32(floor(0.5 * (float) m_screensize.X + 0.5),
+ floor(1 * (float) m_screensize.Y + 0.5)),
+ HUD_CORNER_UPPER, 0, "heart.png",
+ player->getBreath(), v2s32(25,-(48+24+10)), v2s32(24,24));
+ ////////////////////////////////////////////////////////////////////////////
}
diff --git a/src/server.cpp b/src/server.cpp
index 22efca670..d29512d87 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -3357,6 +3357,10 @@ void Server::SendHUDSetFlags(u16 peer_id, u32 flags, u32 mask)
// Write command
writeU16(os, TOCLIENT_HUD_SET_FLAGS);
+
+ //////////////////////////// compatibility code to be removed //////////////
+ flags &= ~(HUD_FLAG_HEALTHBAR_VISIBLE | HUD_FLAG_BREATHBAR_VISIBLE);
+ ////////////////////////////////////////////////////////////////////////////
writeU32(os, flags);
writeU32(os, mask);
@@ -4591,6 +4595,7 @@ bool Server::hudSetFlags(Player *player, u32 flags, u32 mask) {
return false;
SendHUDSetFlags(player->peer_id, flags, mask);
+ player->hud_flags = flags;
m_script->player_event(player->getPlayerSAO(),"hud_changed");
return true;