diff options
author | sapier <Sapier at GMX dot net> | 2014-05-11 00:35:31 +0200 |
---|---|---|
committer | sapier <Sapier at GMX dot net> | 2014-05-11 22:34:44 +0200 |
commit | 6c37e89f08f962eaba788a31f5d3c798ceaa65e6 (patch) | |
tree | 3332dd691a5820b472fb4a2c649c860fee9bb340 | |
parent | 167df02e3d69dd0e8c8915944e6bab00417b15d5 (diff) | |
download | minetest-6c37e89f08f962eaba788a31f5d3c798ceaa65e6.tar.gz minetest-6c37e89f08f962eaba788a31f5d3c798ceaa65e6.tar.bz2 minetest-6c37e89f08f962eaba788a31f5d3c798ceaa65e6.zip |
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.lua | 3 | ||||
-rw-r--r-- | src/hud.cpp | 17 | ||||
-rw-r--r-- | src/server.cpp | 5 |
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; |