Skip to content

Commit

Permalink
Fix old client showing duplicated health bar on new server
Browse files Browse the repository at this point in the history
Fix client not showing hearts and bubbles on connecting to old server
Fix server not remembering hud flags correctly
  • Loading branch information
sapier authored and sapier committed May 11, 2014
1 parent 167df02 commit 6c37e89
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 0 deletions.
3 changes: 3 additions & 0 deletions builtin/game/statbars.lua
Expand Up @@ -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
Expand Down
17 changes: 17 additions & 0 deletions src/hud.cpp
Expand Up @@ -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));
////////////////////////////////////////////////////////////////////////////
}


Expand Down
5 changes: 5 additions & 0 deletions src/server.cpp
Expand Up @@ -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);

Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 6c37e89

Please sign in to comment.