aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2012-11-26 22:31:21 +0200
committerPerttu Ahola <celeron55@gmail.com>2012-11-26 22:34:59 +0200
commit6b927229f5f9cb9a8163ecec482160975199fa0f (patch)
tree60f5012621d87344b1ed8d2ea35a6126080fff8e /src
parentffad18e42442fed10c312adc989fc62b74e05896 (diff)
downloadminetest-6b927229f5f9cb9a8163ecec482160975199fa0f.tar.gz
minetest-6b927229f5f9cb9a8163ecec482160975199fa0f.tar.bz2
minetest-6b927229f5f9cb9a8163ecec482160975199fa0f.zip
Default server step to 0.1s and sync object/player update intervals to it
Diffstat (limited to 'src')
-rw-r--r--src/client.cpp11
-rw-r--r--src/client.h3
-rw-r--r--src/clientserver.h1
-rw-r--r--src/defaultsettings.cpp2
-rw-r--r--src/environment.cpp8
-rw-r--r--src/environment.h6
-rw-r--r--src/server.cpp3
7 files changed, 27 insertions, 7 deletions
diff --git a/src/client.cpp b/src/client.cpp
index 1936c2ce9..4117a9130 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -267,6 +267,7 @@ Client::Client(
m_time_of_day_set(false),
m_last_time_of_day_f(-1),
m_time_of_day_update_timer(0),
+ m_recommended_send_interval(0.1),
m_removed_sounds_check_timer(0)
{
m_packetcounter_timer = 0.0;
@@ -658,7 +659,7 @@ void Client::step(float dtime)
{
float &counter = m_playerpos_send_timer;
counter += dtime;
- if(counter >= 0.2)
+ if(counter >= m_recommended_send_interval)
{
counter = 0.0;
sendPlayerPos();
@@ -1022,6 +1023,14 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
m_map_seed = readU64(&data[2+1+6]);
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
u32 replysize = 2;
diff --git a/src/client.h b/src/client.h
index 154c8bb00..b4b7af7c3 100644
--- a/src/client.h
+++ b/src/client.h
@@ -382,6 +382,9 @@ private:
float m_last_time_of_day_f;
float m_time_of_day_update_timer;
+ // An interval for generally sending object positions and stuff
+ float m_recommended_send_interval;
+
// Sounds
float m_removed_sounds_check_timer;
// Mapping from server sound ids to our sound ids
diff --git a/src/clientserver.h b/src/clientserver.h
index 65a14ab38..6d4998550 100644
--- a/src/clientserver.h
+++ b/src/clientserver.h
@@ -103,6 +103,7 @@ enum ToClientCommand
[2] u8 deployed version
[3] v3s16 player's position + v3f(0,BS/2,0) floatToInt'd
[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
explicitly sent afterwards
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index 6eaa28410..e9c2ba3b8 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -140,7 +140,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("server_unload_unused_data_timeout", "29");
settings->setDefault("server_map_save_interval", "5.3");
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("mip_map", "false");
settings->setDefault("anisotropic_filter", "false");
diff --git a/src/environment.cpp b/src/environment.cpp
index b8e037376..e70cb39b7 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -329,7 +329,8 @@ ServerEnvironment::ServerEnvironment(ServerMap *map, lua_State *L,
m_send_recommended_timer(0),
m_active_block_interval_overload_skip(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 */
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
*/
diff --git a/src/environment.h b/src/environment.h
index e2028d614..0cc53f9a6 100644
--- a/src/environment.h
+++ b/src/environment.h
@@ -205,9 +205,7 @@ public:
{ return m_gamedef; }
float getSendRecommendedInterval()
- {
- return 0.10;
- }
+ { return m_recommended_send_interval; }
/*
Save players
@@ -367,6 +365,8 @@ private:
// A helper variable for incrementing the latter
float m_game_time_fraction_counter;
core::list<ABMWithState> m_abms;
+ // An interval for generally sending object positions and stuff
+ float m_recommended_send_interval;
};
#ifndef SERVER
diff --git a/src/server.cpp b/src/server.cpp
index 6f80c82f7..cb5447605 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -2224,11 +2224,12 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
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);
writeU8(&reply[2], deployed);
writeV3S16(&reply[2+1], floatToInt(playersao->getPlayer()->getPosition()+v3f(0,BS/2,0), BS));
writeU64(&reply[2+1+6], m_env->getServerMap().getSeed());
+ writeF1000(&reply[2+1+6+8], g_settings->getFloat("dedicated_server_step"));
// Send as reliable
m_con.Send(peer_id, 0, reply, true);