Fix rtt >= 0.0f assertion and free_move crash

This commit is contained in:
SmallJoker 2018-06-24 14:35:29 +02:00
parent 6b72d8d090
commit 1d1cf000c0
3 changed files with 14 additions and 13 deletions

@ -1167,7 +1167,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan
// a overflow is quite unlikely but as it'd result in major // a overflow is quite unlikely but as it'd result in major
// rtt miscalculation we handle it here // rtt miscalculation we handle it here
float rtt; float rtt = 0.0f;
if (current_time > p.absolute_send_time) { if (current_time > p.absolute_send_time) {
rtt = (current_time - p.absolute_send_time) / 1000.0f; rtt = (current_time - p.absolute_send_time) / 1000.0f;
} else if (p.totaltime > 0) { } else if (p.totaltime > 0) {
@ -1176,6 +1176,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan
// Let peer calculate stuff according to it // Let peer calculate stuff according to it
// (avg_rtt and resend_timeout) // (avg_rtt and resend_timeout)
if (rtt != 0.0f)
dynamic_cast<UDPPeer *>(peer)->reportRTT(rtt); dynamic_cast<UDPPeer *>(peer)->reportRTT(rtt);
} }
// put bytes for max bandwidth calculation // put bytes for max bandwidth calculation

@ -76,22 +76,18 @@ Player::Player(const char *name, IItemDefManager *idef):
hud_hotbar_itemcount = HUD_HOTBAR_ITEMCOUNT_DEFAULT; hud_hotbar_itemcount = HUD_HOTBAR_ITEMCOUNT_DEFAULT;
m_player_settings.readGlobalSettings(); m_player_settings.readGlobalSettings();
g_settings->registerChangedCallback("free_move", &Player::settingsChangedCallback, // Register player setting callbacks
&m_player_settings); for (const std::string &name : m_player_settings.setting_names)
g_settings->registerChangedCallback("fast_move", &Player::settingsChangedCallback, g_settings->registerChangedCallback(name,
&m_player_settings);
g_settings->registerChangedCallback("continuous_forward",
&Player::settingsChangedCallback, &m_player_settings); &Player::settingsChangedCallback, &m_player_settings);
g_settings->registerChangedCallback("always_fly_fast",
&Player::settingsChangedCallback, &m_player_settings);
g_settings->registerChangedCallback("aux1_descends",
&Player::settingsChangedCallback, &m_player_settings);
g_settings->registerChangedCallback(
"noclip", &Player::settingsChangedCallback, &m_player_settings);
} }
Player::~Player() Player::~Player()
{ {
// m_player_settings becomes invalid, remove callbacks
for (const std::string &name : m_player_settings.setting_names)
g_settings->deregisterChangedCallback(name,
&Player::settingsChangedCallback, &m_player_settings);
clearHud(); clearHud();
} }

@ -93,6 +93,10 @@ struct PlayerSettings
bool aux1_descends = false; bool aux1_descends = false;
bool noclip = false; bool noclip = false;
const std::string setting_names[6] = {
"free_move", "fast_move", "continuous_forward", "always_fly_fast",
"aux1_descends", "noclip"
};
void readGlobalSettings(); void readGlobalSettings();
}; };