Page MenuHome1F616EMO Bugtracker

No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None
diff --git a/twi_cmds/init.lua b/twi_cmds/init.lua
index 37e6c52..0ffe56a 100644
--- a/twi_cmds/init.lua
+++ b/twi_cmds/init.lua
@@ -1,53 +1,85 @@
-- twi_mods/twi_cmds/init.lua
-- commands
-- Copyright (C) 2024 1F616EMO
-- SPDX-License-Identifier: LGPL-3.0-or-later
local S = core.get_translator("twi_cmds")
+local cooldowns_expire = {}
+
+function do_settime_cmd(name, time_desc, time_value, time_sound)
+ local now = os.time()
+ if cooldowns_expire[name] and now < cooldowns_expire[name] then
+ return false, S("Be patient! Try this command again in @1 seconds.", cooldowns_expire[name] - now)
+ end
+
+ local current_time = core.get_timeofday()
+ if math.abs(current_time - time_value) < 0.042 then
+ return false, S("Be patient!")
+ end
+
+ cooldowns_expire[name] = now + 60
+
+ core.set_timeofday(time_value)
+ core.sound_play(time_sound, { gain = 1.0 })
+ core.log("action", name .. " set time to " .. time_desc)
+
+ for _, player in ipairs(core.get_connected_players()) do
+ local name = player:get_player_name()
+ background_music.set_start_play_gap(name, 2)
+ background_music.decide_and_play(player, true)
+ end
+
+ return true, S("Successfully set time to " .. time_desc .. ".")
+end
+
core.register_chatcommand("day", {
privs = { basic_settime = true },
description = S("Set time to day"),
func = function(name)
- local current_time = core.get_timeofday()
- local new_time = 0.3125
- if math.abs(current_time - new_time) < 0.042 then
- return false, S("Be patient!")
- end
- core.set_timeofday(new_time)
- core.log("action", name .. " set time to day")
- for _, player in ipairs(core.get_connected_players()) do
- local name = player:get_player_name()
- background_music.set_start_play_gap(name, 2)
- background_music.decide_and_play(player, true)
- end
- core.sound_play("ui_morning", { gain = 1.0 })
- return true, S("Successfully set time to day.")
+ return do_settime_cmd(name, "day", 0.3125, "ui_morning")
+ end,
+})
+
+core.register_chatcommand("night", {
+ privs = { basic_settime = true },
+ description = S("Set time to night"),
+ func = function(name)
+ return do_settime_cmd(name, "night", 0.8958, "ui_owl")
end,
})
core.register_privilege("basic_settime", {
description = S("Can set time to day using /day"),
give_to_singleplayer = true,
})
core.register_on_newplayer(function(player)
-- Assume new players have privs properly set
local meta = player:get_meta()
meta:set_int("twi_cmds_basic_settime", 1)
end)
core.register_on_joinplayer(function(player)
local meta = player:get_meta()
if meta:get_int("twi_cmds_basic_settime") == 1 then
return
end
local name = player:get_player_name()
local privs = core.get_player_privs(name)
if not privs.basic_settime then
privs.basic_settime = true
core.set_player_privs(name, privs)
end
meta:set_int("twi_cmds_basic_settime", 1)
end)
+
+modlib.minetest.register_globalstep(60, function()
+ local now = os.time()
+ for name, expire in pairs(cooldowns_expire) do
+ if now >= expire or not core.get_player_by_name(name) then
+ cooldowns_expire[name] = nil
+ end
+ end
+end)
diff --git a/twi_cmds/mod.conf b/twi_cmds/mod.conf
index 0706aa0..65a718d 100644
--- a/twi_cmds/mod.conf
+++ b/twi_cmds/mod.conf
@@ -1 +1,2 @@
name = twi_cmds
+depends = modlib

File Metadata

Mime Type
text/x-diff
Expires
Wed, Jun 10, 5:55 PM (3 w, 1 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
c8/fb/25d9f7d51e22f18ecb764d90fd2e
Default Alt Text
(3 KB)

Event Timeline