]> git.lizzy.rs Git - lmz_opening_hours.git/blobdiff - init.lua
Merge pull request #1 from MinetestEDU/lmz-20210303
[lmz_opening_hours.git] / init.lua
index 9101ea3e88fa410e98b27ab7cdc8fdbfe932e536..76367b757d14b7901bb40e560e6345f49ae30050 100644 (file)
--- a/init.lua
+++ b/init.lua
@@ -1,5 +1,12 @@
+-- Description: Configure and enforce server opening hours
+-- Author: Elias Fleckenstein
+-- Author: Isidor Zeuner
+-- For license see LICENSE
+-- -------------------------------------------------------------------
+
 local modname = minetest.get_current_modname()
 local storage = minetest.get_mod_storage()
+local S = minetest.get_translator("lmz_opening_hours")
 
 opening_hours = {}
 
@@ -102,6 +109,11 @@ local function load_data()
        elseif not opening_hours.version then
                opening_hours = opening_hours_default
        end
+       for k, v in pairs(opening_hours) do
+               if k ~= "exception_today" then
+                       opening_hours[k] = tonumber(v)
+               end
+       end
 end
 
 local function reset_execption()
@@ -147,7 +159,7 @@ local function tick(dtime)
        if 0 < minutes_remaining
        and minutes_remaining <= opening_hours.warn_offset then
                if warn_cooldown <= 0 then
-                       minetest.chat_send_all(minetest.colorize("#FF4D00", "Der Server schießt in " .. minutes_remaining .. " Minuten."))
+                       minetest.chat_send_all(minetest.colorize("#FF4D00", S("The server will close in @1 minutes.", minutes_remaining)))
                        warn_cooldown = tonumber(opening_hours.warn_interval) * 60
                else
                        warn_cooldown = warn_cooldown - dtime
@@ -156,7 +168,7 @@ local function tick(dtime)
                for _, player in pairs(minetest.get_connected_players()) do
                        local name = player:get_player_name()
                        if not minetest.check_player_privs(name, {server = true}) then
-                               minetest.kick_player(name, "Der Server schließt!")
+                               minetest.kick_player(name, S("The server is closing!"))
                        end
                end
        end
@@ -171,9 +183,9 @@ local function on_join(name)
        local now_time = d.hour * 60 + d.min
        local diff = start_time - now_time
        if diff > 0 then
-               return "Besuch erfolgte außerhalb der Öffnungszeiten. Der Server hat in " .. math.ceil(diff / 60) .. " Stunde(n) wieder geöffnet."
+               return S("You visited outside of the opening hours") .. ". " .. S("The server will open again in @1 hours", math.ceil(diff / 60)) .. "."
        elseif end_time <= now_time then
-               return "Besuch erfolgte außerhalb der Öffnungszeiten. Der Server hat bereits geschlossen und hat Morgen wieder geöffnet."
+               return S("You visited outside of the opening hours") .. ". " .. S("The server has already closed and will open again tomorrow") .. "."
        end
 end
 
@@ -222,61 +234,84 @@ local function show_gui(name)
        local lab_e_colon_y = fld_e_y - inline_off
        local o = opening_hours
        local day_abbreviations = {
-               [0] = "So.",
-               [1] = "Mo.",
-               [2] = "Di.",
-               [3] = "Mi.",
-               [4] = "Do.",
-               [5] = "Fr.",
-               [6] = "Sa."
+               [0] = S("Su."),
+               [1] = S("Mo."),
+               [2] = S("Tu."),
+               [3] = S("We."),
+               [4] = S("Th."),
+               [5] = S("Fr."),
+               [6] = S("Sa.")
        }
+       local player_info = minetest.get_player_information(name)
+       local warning_config_translation_string = S(
+               "@1 minutes before closing, warn the players every @2 minutes.",
+               "<warn_offset>",
+               "<warn_interval>"
+       )
+       local warning_config = minetest.get_translated_string(
+               player_info.lang_code,
+               warning_config_translation_string
+       ) .. "<"
+       local formspec_warning = ""
+       local warning_x = 0.34
+       for fragment in warning_config:gmatch("([^<>]+<?)") do
+               local label = fragment:match("<$")
+               if label then
+                       fragment = fragment:gsub("<$", "")
+               end
+               if label then
+                       formspec_warning = formspec_warning ..
+                       "label[" .. warning_x .. "," .. lab_close_y .. ";" .. fragment .. "]"
+                       warning_x = warning_x + 0.125 * fragment:len()
+               else
+                       formspec_warning = formspec_warning ..
+                       "field[" .. (warning_x + 0.2) .. "," .. fld_close_y .. ";" .. fld_sz .. ";fld_" .. fragment .. ";;" .. o[fragment] .. "]"
+                       warning_x = warning_x + 0.6
+               end
+       end
        local formspec_business_days = ""
        for day = 1, 5, 1 do
                formspec_business_days = formspec_business_days
                .. "label[" .. x["day" .. day].lab .. "," .. lab_b_y .. ";" .. day_abbreviations[day] .. "]"
-               .. "field[" .. x["day" .. day].fld_f_hour .. "," .. fld_b_y .. ";" .. fld_sz .. ";fld_day" .. day .. "_start_hour;von;" .. string.format("%02d", o["day" .. day .. "_start_hour"]) .. "]"
+               .. "field[" .. x["day" .. day].fld_f_hour .. "," .. fld_b_y .. ";" .. fld_sz .. ";fld_day" .. day .. "_start_hour;" .. S("from") .. ";" .. string.format("%02d", o["day" .. day .. "_start_hour"]) .. "]"
                .. "label[" .. x["day" .. day].lab_f_colon .. "," .. lab_b_colon_y .. ";:]"
                .. "field[" .. x["day" .. day].fld_f_minute .. "," .. fld_b_y .. ";" .. fld_sz .. ";fld_day" .. day .. "_start_minute;;" .. string.format("%02d", o["day" .. day .. "_start_minute"]) .. "]"
-               .. "field[" .. x["day" .. day].fld_t_hour .. "," .. fld_b_y .. ";" .. fld_sz .. ";fld_day" .. day .. "_end_hour;bis;" .. string.format("%02d", o["day" .. day .. "_end_hour"]) .. "]"
+               .. "field[" .. x["day" .. day].fld_t_hour .. "," .. fld_b_y .. ";" .. fld_sz .. ";fld_day" .. day .. "_end_hour;" .. S("to") .. ";" .. string.format("%02d", o["day" .. day .. "_end_hour"]) .. "]"
                .. "label[" .. x["day" .. day].lab_t_colon .. "," .. lab_b_colon_y .. ";:]"
                .. "field[" .. x["day" .. day].fld_t_minute .. "," .. fld_b_y .. ";" .. fld_sz .. ";fld_day" .. day .. "_end_minute;;" .. string.format("%02d", o["day" .. day .. "_end_minute"]) .. "]"
        end
        local formspec_weekend = ""
        for col = 1, 2, 1 do
-               day = (5 + col) % 7
+               local day = (5 + col) % 7
                formspec_weekend = formspec_weekend
                .. "label[" .. x["day" .. col].lab .. "," .. lab_w_y .. ";" .. day_abbreviations[day] .. "]"
-               .. "field[" .. x["day" .. col].fld_f_hour .. "," .. fld_w_y .. ";" .. fld_sz .. ";fld_day" .. day .. "_start_hour;von;" .. string.format("%02d", o["day" .. day .. "_start_hour"]) .. "]"
+               .. "field[" .. x["day" .. col].fld_f_hour .. "," .. fld_w_y .. ";" .. fld_sz .. ";fld_day" .. day .. "_start_hour;" .. S("from") .. ";" .. string.format("%02d", o["day" .. day .. "_start_hour"]) .. "]"
                .. "label[" .. x["day" .. col].lab_f_colon .. "," .. lab_w_colon_y .. ";:]"
                .. "field[" .. x["day" .. col].fld_f_minute .. "," .. fld_w_y .. ";" .. fld_sz .. ";fld_day" .. day .. "_start_minute;;" .. string.format("%02d", o["day" .. day .. "_start_minute"]) .. "]"
-               .. "field[" .. x["day" .. col].fld_t_hour .. "," .. fld_w_y .. ";" .. fld_sz .. ";fld_day" .. day .. "_end_hour;bis;" .. string.format("%02d", o["day" .. day .. "_end_hour"]) .. "]"
+               .. "field[" .. x["day" .. col].fld_t_hour .. "," .. fld_w_y .. ";" .. fld_sz .. ";fld_day" .. day .. "_end_hour;" .. S("to") .. ";" .. string.format("%02d", o["day" .. day .. "_end_hour"]) .. "]"
                .. "label[" .. x["day" .. col].lab_t_colon .. "," .. lab_w_colon_y .. ";:]"
                .. "field[" .. x["day" .. col].fld_t_minute .. "," .. fld_w_y .. ";" .. fld_sz .. ";fld_day" .. day .. "_end_minute;;" .. string.format("%02d", o["day" .. day .. "_end_minute"]) .. "]"
        end
        local formspec_exception = (o.exception_today
                        and ""
-                               .. "label[" .. x.day1.lab .. "," .. lab_e_y .. ";Heute]"
-                               .. "field[" .. x.day1.fld_f_hour .. "," .. fld_e_y .. ";" .. fld_sz .. ";fld_exception_start_hour;von;" .. string.format("%02d", o.exception_start_hour) .. "]"
+                               .. "label[" .. x.day1.lab .. "," .. lab_e_y .. ";" .. S("Today") .. "]"
+                               .. "field[" .. x.day1.fld_f_hour .. "," .. fld_e_y .. ";" .. fld_sz .. ";fld_exception_start_hour;" .. S("from") .. ";" .. string.format("%02d", o.exception_start_hour) .. "]"
                                .. "label[" .. x.day1.lab_f_colon .. "," .. lab_e_colon_y .. ";:]"
                                .. "field[" .. x.day1.fld_f_minute .. "," .. fld_e_y .. ";" .. fld_sz .. ";fld_exception_start_minute;;" .. string.format("%02d", o.exception_start_minute) .. "]"
-                               .. "field[" .. x.day1.fld_t_hour .. "," .. fld_e_y .. ";" .. fld_sz .. ";fld_exception_end_hour;bis;" .. string.format("%02d", o.exception_end_hour) .. "]"
+                               .. "field[" .. x.day1.fld_t_hour .. "," .. fld_e_y .. ";" .. fld_sz .. ";fld_exception_end_hour;" .. S("to") .. ";" .. string.format("%02d", o.exception_end_hour) .. "]"
                                .. "label[" .. x.day1.lab_t_colon .. "," .. lab_e_colon_y .. ";:]"
                                .. "field[" .. x.day1.fld_t_minute .. "," .. fld_e_y .. ";" .. fld_sz .. ";fld_exception_end_minute;;" .. string.format("%02d", o.exception_end_minute) .. "]"
-                       or "image_button[0.34,4.5296922410056;4.205,0.7835;;add_exception;Ausnahmeregelung hinzufügen]"
+                       or "image_button[0.34,4.5296922410056;4.205,0.7835;;add_exception;" .. S("Add exception") .. "]"
                )
        local formspec = "size[18.01,7.9267895878525]"
-       .. "label[-0.14,-0.23840485478977;Öffnungszeiten]"
+       .. "label[-0.14,-0.23840485478977;" .. S("Opening hours") .. "]"
        .. formspec_business_days
        .. formspec_weekend
        .. formspec_exception
-       .. "label[" .. x.day1.lab .. ",5.4833116601647;Einstellungen]"
-       .. "label[0.34," .. lab_close_y .. ";Spieler ]"
-       .. "field[1.6," .. fld_close_y .. ";" .. fld_sz .. ";fld_warn_offset;;" .. o.warn_offset .. "]"
-       .. "label[2.18," .. lab_close_y .. ";Minuten vor Ablauf der Zeit alle]"
-       .. "field[6.0," .. fld_close_y .. ";" .. fld_sz .. ";fld_warn_interval;;" .. o.warn_interval .. "]"
-       .. "label[6.6," .. lab_close_y .. ";Minuten warnen.]"
-       .. "image_button[5.14,7.6072821846554;2.605,0.7835;;save;Speichern]"
-       .. "image_button_exit[7.62,7.6072821846554;2.605,0.7835;;close;Schließen]"
+       .. "label[" .. x.day1.lab .. ",5.4833116601647;" .. S("Settings") .. "]"
+       .. formspec_warning
+       .. "image_button[5.14,7.6072821846554;2.605,0.7835;;save;" .. S("Save") .. "]"
+       .. "image_button_exit[7.62,7.6072821846554;2.605,0.7835;;close;" .. S("Close") .. "]"
        minetest.show_formspec(name, "lmz_opening_hours:gui", formspec)
 end
 
@@ -332,8 +367,22 @@ load_data()
 minetest.register_globalstep(tick)
 minetest.register_on_shutdown(save_data)
 minetest.register_on_prejoinplayer(on_join)
-minetest.register_chatcommand("opening_hours", {privs = {server = true}, description = "Die Öffnungszeiten konfigurieren", func = show_gui})
-minetest.register_chatcommand("öffnungszeiten", {privs = {server = true}, description = "Die Öffnungszeiten konfigurieren", func = show_gui})
+minetest.register_chatcommand(
+       "opening_hours",
+       {
+               privs = {server = true},
+               description = S("Configure the opening hours"),
+               func = show_gui
+       }
+)
+minetest.register_chatcommand(
+       "öffnungszeiten",
+       {
+               privs = {server = true},
+               description = S("Configure the opening hours"),
+               func = show_gui
+       }
+)
 minetest.register_on_player_receive_fields(progress_gui_input)