Default server step to 0.1s and sync object/player update intervals to it
parent
ffad18e424
commit
6b927229f5
|
@ -194,7 +194,7 @@
|
||||||
# To reduce lag, block transfers are slowed down when a player is building something.
|
# To reduce lag, block transfers are slowed down when a player is building something.
|
||||||
# This determines how long they are slowed down after placing or removing a node.
|
# This determines how long they are slowed down after placing or removing a node.
|
||||||
#full_block_send_enable_min_time_from_building = 2.0
|
#full_block_send_enable_min_time_from_building = 2.0
|
||||||
# Length of a server tick in dedicated server
|
# Length of a server tick and the interval at which objects are generally updated over network
|
||||||
#dedicated_server_step = 0.05
|
#dedicated_server_step = 0.1
|
||||||
# Can be set to true to disable shutting down on invalid world data
|
# Can be set to true to disable shutting down on invalid world data
|
||||||
#ignore_world_load_errors = false
|
#ignore_world_load_errors = false
|
||||||
|
|
|
@ -267,6 +267,7 @@ Client::Client(
|
||||||
m_time_of_day_set(false),
|
m_time_of_day_set(false),
|
||||||
m_last_time_of_day_f(-1),
|
m_last_time_of_day_f(-1),
|
||||||
m_time_of_day_update_timer(0),
|
m_time_of_day_update_timer(0),
|
||||||
|
m_recommended_send_interval(0.1),
|
||||||
m_removed_sounds_check_timer(0)
|
m_removed_sounds_check_timer(0)
|
||||||
{
|
{
|
||||||
m_packetcounter_timer = 0.0;
|
m_packetcounter_timer = 0.0;
|
||||||
|
@ -658,7 +659,7 @@ void Client::step(float dtime)
|
||||||
{
|
{
|
||||||
float &counter = m_playerpos_send_timer;
|
float &counter = m_playerpos_send_timer;
|
||||||
counter += dtime;
|
counter += dtime;
|
||||||
if(counter >= 0.2)
|
if(counter >= m_recommended_send_interval)
|
||||||
{
|
{
|
||||||
counter = 0.0;
|
counter = 0.0;
|
||||||
sendPlayerPos();
|
sendPlayerPos();
|
||||||
|
@ -1022,6 +1023,14 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
|
||||||
m_map_seed = readU64(&data[2+1+6]);
|
m_map_seed = readU64(&data[2+1+6]);
|
||||||
infostream<<"Client: received map seed: "<<m_map_seed<<std::endl;
|
infostream<<"Client: received map seed: "<<m_map_seed<<std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(datasize >= 2+1+6+8+4)
|
||||||
|
{
|
||||||
|
// Get map seed
|
||||||
|
m_recommended_send_interval = readF1000(&data[2+1+6+8]);
|
||||||
|
infostream<<"Client: received recommended send interval "
|
||||||
|
<<m_recommended_send_interval<<std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
// Reply to server
|
// Reply to server
|
||||||
u32 replysize = 2;
|
u32 replysize = 2;
|
||||||
|
|
|
@ -382,6 +382,9 @@ private:
|
||||||
float m_last_time_of_day_f;
|
float m_last_time_of_day_f;
|
||||||
float m_time_of_day_update_timer;
|
float m_time_of_day_update_timer;
|
||||||
|
|
||||||
|
// An interval for generally sending object positions and stuff
|
||||||
|
float m_recommended_send_interval;
|
||||||
|
|
||||||
// Sounds
|
// Sounds
|
||||||
float m_removed_sounds_check_timer;
|
float m_removed_sounds_check_timer;
|
||||||
// Mapping from server sound ids to our sound ids
|
// Mapping from server sound ids to our sound ids
|
||||||
|
|
|
@ -103,6 +103,7 @@ enum ToClientCommand
|
||||||
[2] u8 deployed version
|
[2] u8 deployed version
|
||||||
[3] v3s16 player's position + v3f(0,BS/2,0) floatToInt'd
|
[3] v3s16 player's position + v3f(0,BS/2,0) floatToInt'd
|
||||||
[12] u64 map seed (new as of 2011-02-27)
|
[12] u64 map seed (new as of 2011-02-27)
|
||||||
|
[20] f1000 recommended send interval (in seconds) (new as of 14)
|
||||||
|
|
||||||
NOTE: The position in here is deprecated; position is
|
NOTE: The position in here is deprecated; position is
|
||||||
explicitly sent afterwards
|
explicitly sent afterwards
|
||||||
|
|
|
@ -140,7 +140,7 @@ void set_default_settings(Settings *settings)
|
||||||
settings->setDefault("server_unload_unused_data_timeout", "29");
|
settings->setDefault("server_unload_unused_data_timeout", "29");
|
||||||
settings->setDefault("server_map_save_interval", "5.3");
|
settings->setDefault("server_map_save_interval", "5.3");
|
||||||
settings->setDefault("full_block_send_enable_min_time_from_building", "2.0");
|
settings->setDefault("full_block_send_enable_min_time_from_building", "2.0");
|
||||||
settings->setDefault("dedicated_server_step", "0.05");
|
settings->setDefault("dedicated_server_step", "0.1");
|
||||||
settings->setDefault("ignore_world_load_errors", "false");
|
settings->setDefault("ignore_world_load_errors", "false");
|
||||||
settings->setDefault("mip_map", "false");
|
settings->setDefault("mip_map", "false");
|
||||||
settings->setDefault("anisotropic_filter", "false");
|
settings->setDefault("anisotropic_filter", "false");
|
||||||
|
|
|
@ -329,7 +329,8 @@ ServerEnvironment::ServerEnvironment(ServerMap *map, lua_State *L,
|
||||||
m_send_recommended_timer(0),
|
m_send_recommended_timer(0),
|
||||||
m_active_block_interval_overload_skip(0),
|
m_active_block_interval_overload_skip(0),
|
||||||
m_game_time(0),
|
m_game_time(0),
|
||||||
m_game_time_fraction_counter(0)
|
m_game_time_fraction_counter(0),
|
||||||
|
m_recommended_send_interval(0.1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -940,6 +941,11 @@ void ServerEnvironment::step(float dtime)
|
||||||
/* Step time of day */
|
/* Step time of day */
|
||||||
stepTimeOfDay(dtime);
|
stepTimeOfDay(dtime);
|
||||||
|
|
||||||
|
// Update this one
|
||||||
|
// NOTE: This is kind of funny on a singleplayer game, but doesn't
|
||||||
|
// really matter that much.
|
||||||
|
m_recommended_send_interval = g_settings->getFloat("dedicated_server_step");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Increment game time
|
Increment game time
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -205,9 +205,7 @@ public:
|
||||||
{ return m_gamedef; }
|
{ return m_gamedef; }
|
||||||
|
|
||||||
float getSendRecommendedInterval()
|
float getSendRecommendedInterval()
|
||||||
{
|
{ return m_recommended_send_interval; }
|
||||||
return 0.10;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Save players
|
Save players
|
||||||
|
@ -367,6 +365,8 @@ private:
|
||||||
// A helper variable for incrementing the latter
|
// A helper variable for incrementing the latter
|
||||||
float m_game_time_fraction_counter;
|
float m_game_time_fraction_counter;
|
||||||
core::list<ABMWithState> m_abms;
|
core::list<ABMWithState> m_abms;
|
||||||
|
// An interval for generally sending object positions and stuff
|
||||||
|
float m_recommended_send_interval;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef SERVER
|
#ifndef SERVER
|
||||||
|
|
|
@ -2224,11 +2224,12 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
||||||
Answer with a TOCLIENT_INIT
|
Answer with a TOCLIENT_INIT
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
SharedBuffer<u8> reply(2+1+6+8);
|
SharedBuffer<u8> reply(2+1+6+8+4);
|
||||||
writeU16(&reply[0], TOCLIENT_INIT);
|
writeU16(&reply[0], TOCLIENT_INIT);
|
||||||
writeU8(&reply[2], deployed);
|
writeU8(&reply[2], deployed);
|
||||||
writeV3S16(&reply[2+1], floatToInt(playersao->getPlayer()->getPosition()+v3f(0,BS/2,0), BS));
|
writeV3S16(&reply[2+1], floatToInt(playersao->getPlayer()->getPosition()+v3f(0,BS/2,0), BS));
|
||||||
writeU64(&reply[2+1+6], m_env->getServerMap().getSeed());
|
writeU64(&reply[2+1+6], m_env->getServerMap().getSeed());
|
||||||
|
writeF1000(&reply[2+1+6+8], g_settings->getFloat("dedicated_server_step"));
|
||||||
|
|
||||||
// Send as reliable
|
// Send as reliable
|
||||||
m_con.Send(peer_id, 0, reply, true);
|
m_con.Send(peer_id, 0, reply, true);
|
||||||
|
|
Loading…
Reference in New Issue