aboutsummaryrefslogtreecommitdiff
path: root/src/script
diff options
context:
space:
mode:
authorAuke Kok <sofar@foo-projects.org>2016-03-06 12:02:21 -0800
committerest31 <MTest31@outlook.com>2016-03-09 01:45:23 +0100
commit4e59fcf5c1e40dee764317a1190dceadc3a77829 (patch)
treebe216e4eb402e8529ff7a001839077f22c74d8ac /src/script
parent3ce6642a26d43fd368c24cdfc5460557258fb44f (diff)
downloadminetest-4e59fcf5c1e40dee764317a1190dceadc3a77829.tar.gz
minetest-4e59fcf5c1e40dee764317a1190dceadc3a77829.tar.bz2
minetest-4e59fcf5c1e40dee764317a1190dceadc3a77829.zip
Add consistent monotonic day counter - get_day_count()
I've written several experimental bits of code that revolve around the need for a consistent calendar, but implementing one is extremely hard in mods due to time changes and mods overriding core.get_timeofday(), which will conflict. The second part of the problem is that doing this from a mod requires constant maintenance of a settings file. An implementation in core is trivial, however, and solves all of these problems at virtually no cost: No extra branches in server steps, and a single branch when minetest.set_time_of_day(), which is entirely reasonable. We store the day_count value in env_meta.txt. The use case is obvious: This change allows mods to create an actual virtual calendar, or properly account for seasonal changes, etc.. We add a "/days" chatcommand that displays the current day count. No permissions are needed. It can only retrieve the day count, not modify it.
Diffstat (limited to 'src/script')
-rw-r--r--src/script/lua_api/l_env.cpp10
-rw-r--r--src/script/lua_api/l_env.h3
2 files changed, 13 insertions, 0 deletions
diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp
index f4ddc2afc..af89da9a1 100644
--- a/src/script/lua_api/l_env.cpp
+++ b/src/script/lua_api/l_env.cpp
@@ -561,6 +561,15 @@ int ModApiEnvMod::l_get_timeofday(lua_State *L)
return 1;
}
+// get_day_count() -> int
+int ModApiEnvMod::l_get_day_count(lua_State *L)
+{
+ GET_ENV_PTR;
+
+ lua_pushnumber(L, env->getDayCount());
+ return 1;
+}
+
// get_gametime()
int ModApiEnvMod::l_get_gametime(lua_State *L)
{
@@ -1055,6 +1064,7 @@ void ModApiEnvMod::Initialize(lua_State *L, int top)
API_FCT(set_timeofday);
API_FCT(get_timeofday);
API_FCT(get_gametime);
+ API_FCT(get_day_count);
API_FCT(find_node_near);
API_FCT(find_nodes_in_area);
API_FCT(find_nodes_in_area_under_air);
diff --git a/src/script/lua_api/l_env.h b/src/script/lua_api/l_env.h
index 0e385ffef..89dd7978f 100644
--- a/src/script/lua_api/l_env.h
+++ b/src/script/lua_api/l_env.h
@@ -113,6 +113,9 @@ private:
// get_gametime()
static int l_get_gametime(lua_State *L);
+ // get_day_count() -> int
+ static int l_get_day_count(lua_State *L);
+
// find_node_near(pos, radius, nodenames) -> pos or nil
// nodenames: eg. {"ignore", "group:tree"} or "default:dirt"
static int l_find_node_near(lua_State *L);