forked from Mirrorlandia_minetest/minetest
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
This commit is contained in:
parent
167df02e3d
commit
6c37e89f08
@ -37,6 +37,9 @@ local function initialize_builtin_statbars(player)
|
|||||||
|
|
||||||
if (hud_ids[name] == nil) then
|
if (hud_ids[name] == nil) then
|
||||||
hud_ids[name] = {}
|
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
|
end
|
||||||
|
|
||||||
if player:hud_get_flags().healthbar and
|
if player:hud_get_flags().healthbar and
|
||||||
|
17
src/hud.cpp
17
src/hud.cpp
@ -414,6 +414,23 @@ void Hud::drawHotbar(u16 playeritem) {
|
|||||||
drawItems(secondpos, hotbar_itemcount, hotbar_itemcount/2, mainlist, playeritem + 1, 0);
|
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));
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3357,6 +3357,10 @@ void Server::SendHUDSetFlags(u16 peer_id, u32 flags, u32 mask)
|
|||||||
|
|
||||||
// Write command
|
// Write command
|
||||||
writeU16(os, TOCLIENT_HUD_SET_FLAGS);
|
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, flags);
|
||||||
writeU32(os, mask);
|
writeU32(os, mask);
|
||||||
|
|
||||||
@ -4591,6 +4595,7 @@ bool Server::hudSetFlags(Player *player, u32 flags, u32 mask) {
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
SendHUDSetFlags(player->peer_id, flags, mask);
|
SendHUDSetFlags(player->peer_id, flags, mask);
|
||||||
|
player->hud_flags = flags;
|
||||||
|
|
||||||
m_script->player_event(player->getPlayerSAO(),"hud_changed");
|
m_script->player_event(player->getPlayerSAO(),"hud_changed");
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user