diff --git a/basic_materials/locale/basic_materials.it.tr b/basic_materials/locale/basic_materials.it.tr new file mode 100644 index 0000000..aae0b3b --- /dev/null +++ b/basic_materials/locale/basic_materials.it.tr @@ -0,0 +1,34 @@ +# textdomain: basic_materials +# Author: Salvo 'LtWorf' Tomaselli +Silicon lump=Grumo di silicio +Simple Integrated Circuit=Circuito integrato semplice +Simple Motor=Motore semplice +Heating element=Elemento riscaldante +Simple energy crystal=Cristallo di energia semplice + +Spool of steel wire=Bobina di filo d'acciaio +Spool of copper wire=Bobina di filo di rame +Spool of silver wire=Bobina di filo d'argento +Spool of gold wire=Bobina di filo d'oro +Steel Strip=Striscia d'acciaio +Copper Strip=Striscia di rame +Steel Bar=Barra d'acciaio +Chainlinks (brass)=Catena (ottone) +Chainlinks (steel)=Catena (acciaio) +Brass Ingot=Lingotto di ottone +Steel gear=Ingranaggio d'acciaio +Padlock=Catenaccio +Chain (steel, hanging)=Catena (acciaio, pendente) +Chain (brass, hanging)=Catena (ottone, pendente) +Brass Block=Blocco di ottone + +Oil extract=Estratto d'olio +Unprocessed paraffin=Paraffina grezza +Uncooked Terracotta Base=Argilla cruda +Wet Cement=Cemento umido +Cement=Cemento +Concrete Block=Blocco di calcestruzzo + +Plastic sheet=Foglio di plastica +Plastic strips=Striscia di plastica +Empty wire spool=Rocchetto vuoto diff --git a/compost/init.lua b/compost/init.lua index 71fc59d..561e1c9 100644 --- a/compost/init.lua +++ b/compost/init.lua @@ -2,6 +2,8 @@ local S = minetest.get_translator("compost") compost = {} +local CYCLE_TIME = 10 + -- Version for compatibility checks compost.version = 1.0 @@ -74,43 +76,58 @@ end) local function next_state(pos, elapsed) local node = minetest.get_node(pos) + if node.name == "compost:wood_barrel_1" then - minetest.set_node(pos, {name = "compost:wood_barrel_2"}) - return true - end - if node.name == "compost:wood_barrel_2" then - minetest.set_node(pos, {name = "compost:wood_barrel_3"}) + minetest.swap_node(pos, {name = "compost:wood_barrel_2"}) + elseif node.name == "compost:wood_barrel_2" then + minetest.swap_node(pos, {name = "compost:wood_barrel_3"}) + elseif node.name == "compost:wood_barrel_3" then return false end - return false + return true +end + +local function start_composter(pos) + local meta = minetest.get_meta(pos) + local num = meta:get_int("num") or 0 + if num >= 4 then + -- 4 leaves for one compost node + meta:set_int("num", num - 4) + minetest.swap_node(pos, {name = "compost:wood_barrel_1"}) + minetest.get_node_timer(pos):start(CYCLE_TIME) + end +end + +local function add_item(pos, stack) + local meta = minetest.get_meta(pos) + local num = meta:get_int("num") or 0 + + if num < 4 then + -- add futher leaves + meta:set_int("num", num + stack:get_count()) + stack:set_count(0) + end + + start_composter(pos) + return stack end local function minecart_hopper_additem(pos, stack) if compost.can_compost(stack:get_name()) then - local meta = minetest.get_meta(pos) - -- 4 leaves for one compost node - local num = (meta:get_int("num") or 0) + stack:get_count() - if num >= 4 then - num = num - 4 - minetest.set_node(pos, {name = "compost:wood_barrel_1"}) - -- speed up the process by means of a timer - minetest.get_node_timer(pos):start(10) - end - meta:set_int("num", num) - stack:set_count(0) - return stack + return add_item(pos, stack) end return stack end local function minecart_hopper_takeitem(pos, num) local node = minetest.get_node(pos) - minetest.set_node(pos, {name = "compost:wood_barrel"}) + minetest.swap_node(pos, {name = "compost:wood_barrel"}) + start_composter(pos) return ItemStack("compost:compost") end local function minecart_hopper_untakeitem(pos, in_dir, stack) - minetest.set_node(pos, {name = "compost:wood_barrel_2"}) + minetest.swap_node(pos, {name = "compost:wood_barrel_2"}) end minetest.register_node("compost:wood_barrel", { @@ -132,14 +149,16 @@ minetest.register_node("compost:wood_barrel", { on_punch = function(pos, node, puncher, pointed_thing) local wielded_item = puncher:get_wielded_item():get_name() if compost.can_compost(wielded_item) then - minetest.set_node(pos, {name = "compost:wood_barrel_1"}) + minetest.swap_node(pos, {name = "compost:wood_barrel_1"}) local w = puncher:get_wielded_item() if not(minetest.setting_getbool("creative_mode")) then w:take_item(1) puncher:set_wielded_item(w) end + minetest.get_node_timer(pos):start(CYCLE_TIME) end end, + on_timer = next_state, minecart_hopper_additem = minecart_hopper_additem, minecart_hopper_untakeitem = minecart_hopper_untakeitem, }) @@ -206,30 +225,13 @@ minetest.register_node("compost:wood_barrel_3", { on_punch = function(pos, node, player, pointed_thing) local p = {x = pos.x + math.random(0, 5)/5 - 0.5, y = pos.y+1, z = pos.z + math.random(0, 5)/5 - 0.5} minetest.add_item(p, {name = "compost:compost"}) - minetest.set_node(pos, {name = "compost:wood_barrel"}) + minetest.swap_node(pos, {name = "compost:wood_barrel"}) end, + on_timer = next_state, minecart_hopper_takeitem = minecart_hopper_takeitem, minecart_hopper_untakeitem = minecart_hopper_untakeitem, }) -minetest.register_abm({ - nodenames = {"compost:wood_barrel_1"}, - interval = 40, - chance = 5, - action = function(pos, node, active_object_count, active_object_count_wider) - minetest.set_node(pos, {name = "compost:wood_barrel_2"}) - end, -}) - -minetest.register_abm({ - nodenames = {"compost:wood_barrel_2"}, - interval = 40, - chance = 5, - action = function(pos, node, active_object_count, active_object_count_wider) - minetest.set_node(pos, {name = "compost:wood_barrel_3"}) - end, -}) - minetest.register_craft({ output = "compost:wood_barrel", recipe = { @@ -279,7 +281,8 @@ if minetest.global_exists("techage") then on_pull_item = function(pos, in_dir, num) local node = minetest.get_node(pos) if node.name == "compost:wood_barrel_3" then - minetest.set_node(pos, {name = "compost:wood_barrel"}) + minetest.swap_node(pos, {name = "compost:wood_barrel"}) + start_composter(pos) return ItemStack("compost:compost") end return nil @@ -287,22 +290,13 @@ if minetest.global_exists("techage") then on_push_item = function(pos, in_dir, stack) local node = minetest.get_node(pos) if node.name == "compost:wood_barrel" and compost.can_compost(stack:get_name()) then - local meta = minetest.get_meta(pos) - -- 4 leaves for one compost node - local num = (meta:get_int("num") or 0) + 1 - if num >= 4 then - num = 0 - minetest.set_node(pos, {name = "compost:wood_barrel_1"}) - -- speed up the process by means of a timer - minetest.get_node_timer(pos):start(10) - end - meta:set_int("num", num) - return true + stack = add_item(pos, stack) + return stack:get_count() == 0 end return false end, on_unpull_item = function(pos, in_dir, stack) - minetest.set_node(pos, {name = "compost:wood_barrel_2"}) + minetest.swap_node(pos, {name = "compost:wood_barrel_2"}) return true end, }) diff --git a/hyperloop/elevator.lua b/hyperloop/elevator.lua index c07b551..3b26b42 100644 --- a/hyperloop/elevator.lua +++ b/hyperloop/elevator.lua @@ -368,6 +368,9 @@ local function on_arrival_floor(tDeparture, tArrival, player_name, snd) if player ~= nil then tArrival.pos.y = tArrival.pos.y - kPLAYER_OVER_GROUND player:set_pos(tArrival.pos) + if tArrival.attributes then + player:set_nametag_attributes(tArrival.attributes) + end tArrival.pos.y = tArrival.pos.y + kPLAYER_OVER_GROUND end minetest.sound_stop(snd) @@ -375,8 +378,15 @@ local function on_arrival_floor(tDeparture, tArrival, player_name, snd) end local function on_travel(tDeparture, tArrival, player_name, seconds) + local player = minetest.get_player_by_name(player_name) door_command(tDeparture.pos, tDeparture.facedir, "darken", false) door_command(tArrival.pos, tArrival.facedir, "darken", false) + if player ~= nil then + tArrival.attributes = player:get_nametag_attributes() + player:set_nametag_attributes({text = " "}) + else + tArrival.attributes = nil + end local snd = minetest.sound_play("ele_norm", { pos = tDeparture.pos, gain = 0.5, diff --git a/hyperloop/i18n.py b/hyperloop/i18n.py new file mode 100644 index 0000000..ece4e4c --- /dev/null +++ b/hyperloop/i18n.py @@ -0,0 +1,458 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# Script to generate the template file and update the translation files. +# Copy the script into the mod or modpack root folder and run it there. +# +# Copyright (C) 2019 Joachim Stolberg, 2020 FaceDeer, 2020 Louis Royer +# LGPLv2.1+ +# +# See https://github.com/minetest-tools/update_translations for +# potential future updates to this script. + +from __future__ import print_function +import os, fnmatch, re, shutil, errno +from sys import argv as _argv +from sys import stderr as _stderr + +# Running params +params = {"recursive": False, + "help": False, + "mods": False, + "verbose": False, + "folders": [], + "no-old-file": False, + "break-long-lines": False, + "sort": False +} +# Available CLI options +options = {"recursive": ['--recursive', '-r'], + "help": ['--help', '-h'], + "mods": ['--installed-mods', '-m'], + "verbose": ['--verbose', '-v'], + "no-old-file": ['--no-old-file', '-O'], + "break-long-lines": ['--break-long-lines', '-b'], + "sort": ['--sort', '-s'] +} + +# Strings longer than this will have extra space added between +# them in the translation files to make it easier to distinguish their +# beginnings and endings at a glance +doublespace_threshold = 80 + +def set_params_folders(tab: list): + '''Initialize params["folders"] from CLI arguments.''' + # Discarding argument 0 (tool name) + for param in tab[1:]: + stop_param = False + for option in options: + if param in options[option]: + stop_param = True + break + if not stop_param: + params["folders"].append(os.path.abspath(param)) + +def set_params(tab: list): + '''Initialize params from CLI arguments.''' + for option in options: + for option_name in options[option]: + if option_name in tab: + params[option] = True + break + +def print_help(name): + '''Prints some help message.''' + print(f'''SYNOPSIS + {name} [OPTIONS] [PATHS...] +DESCRIPTION + {', '.join(options["help"])} + prints this help message + {', '.join(options["recursive"])} + run on all subfolders of paths given + {', '.join(options["mods"])} + run on locally installed modules + {', '.join(options["no-old-file"])} + do not create *.old files + {', '.join(options["sort"])} + sort output strings alphabetically + {', '.join(options["break-long-lines"])} + add extra line breaks before and after long strings + {', '.join(options["verbose"])} + add output information +''') + + +def main(): + '''Main function''' + set_params(_argv) + set_params_folders(_argv) + if params["help"]: + print_help(_argv[0]) + elif params["recursive"] and params["mods"]: + print("Option --installed-mods is incompatible with --recursive") + else: + # Add recursivity message + print("Running ", end='') + if params["recursive"]: + print("recursively ", end='') + # Running + if params["mods"]: + print(f"on all locally installed modules in {os.path.abspath('~/.minetest/mods/')}") + run_all_subfolders("~/.minetest/mods") + elif len(params["folders"]) >= 2: + print("on folder list:", params["folders"]) + for f in params["folders"]: + if params["recursive"]: + run_all_subfolders(f) + else: + update_folder(f) + elif len(params["folders"]) == 1: + print("on folder", params["folders"][0]) + if params["recursive"]: + run_all_subfolders(params["folders"][0]) + else: + update_folder(params["folders"][0]) + else: + print("on folder", os.path.abspath("./")) + if params["recursive"]: + run_all_subfolders(os.path.abspath("./")) + else: + update_folder(os.path.abspath("./")) + +#group 2 will be the string, groups 1 and 3 will be the delimiters (" or ') +#See https://stackoverflow.com/questions/46967465/regex-match-text-in-either-single-or-double-quote +pattern_lua_s = re.compile(r'[\.=^\t,{\(\s]N?S\(\s*(["\'])((?:\\\1|(?:(?!\1)).)*)(\1)[\s,\)]', re.DOTALL) +pattern_lua_fs = re.compile(r'[\.=^\t,{\(\s]N?FS\(\s*(["\'])((?:\\\1|(?:(?!\1)).)*)(\1)[\s,\)]', re.DOTALL) +pattern_lua_bracketed_s = re.compile(r'[\.=^\t,{\(\s]N?S\(\s*\[\[(.*?)\]\][\s,\)]', re.DOTALL) +pattern_lua_bracketed_fs = re.compile(r'[\.=^\t,{\(\s]N?FS\(\s*\[\[(.*?)\]\][\s,\)]', re.DOTALL) + +# Handles "concatenation" .. " of strings" +pattern_concat = re.compile(r'["\'][\s]*\.\.[\s]*["\']', re.DOTALL) + +pattern_tr = re.compile(r'(.*?[^@])=(.*)') +pattern_name = re.compile(r'^name[ ]*=[ ]*([^ \n]*)') +pattern_tr_filename = re.compile(r'\.tr$') +pattern_po_language_code = re.compile(r'(.*)\.po$') + +#attempt to read the mod's name from the mod.conf file. Returns None on failure +def get_modname(folder): + try: + with open(os.path.join(folder, "mod.conf"), "r", encoding='utf-8') as mod_conf: + for line in mod_conf: + match = pattern_name.match(line) + if match: + return match.group(1) + except FileNotFoundError: + pass + return None + +#If there are already .tr files in /locale, returns a list of their names +def get_existing_tr_files(folder): + out = [] + for root, dirs, files in os.walk(os.path.join(folder, 'locale/')): + for name in files: + if pattern_tr_filename.search(name): + out.append(name) + return out + +# A series of search and replaces that massage a .po file's contents into +# a .tr file's equivalent +def process_po_file(text): + # The first three items are for unused matches + text = re.sub(r'#~ msgid "', "", text) + text = re.sub(r'"\n#~ msgstr ""\n"', "=", text) + text = re.sub(r'"\n#~ msgstr "', "=", text) + # comment lines + text = re.sub(r'#.*\n', "", text) + # converting msg pairs into "=" pairs + text = re.sub(r'msgid "', "", text) + text = re.sub(r'"\nmsgstr ""\n"', "=", text) + text = re.sub(r'"\nmsgstr "', "=", text) + # various line breaks and escape codes + text = re.sub(r'"\n"', "", text) + text = re.sub(r'"\n', "\n", text) + text = re.sub(r'\\"', '"', text) + text = re.sub(r'\\n', '@n', text) + # remove header text + text = re.sub(r'=Project-Id-Version:.*\n', "", text) + # remove double-spaced lines + text = re.sub(r'\n\n', '\n', text) + return text + +# Go through existing .po files and, if a .tr file for that language +# *doesn't* exist, convert it and create it. +# The .tr file that results will subsequently be reprocessed so +# any "no longer used" strings will be preserved. +# Note that "fuzzy" tags will be lost in this process. +def process_po_files(folder, modname): + for root, dirs, files in os.walk(os.path.join(folder, 'locale/')): + for name in files: + code_match = pattern_po_language_code.match(name) + if code_match == None: + continue + language_code = code_match.group(1) + tr_name = modname + "." + language_code + ".tr" + tr_file = os.path.join(root, tr_name) + if os.path.exists(tr_file): + if params["verbose"]: + print(f"{tr_name} already exists, ignoring {name}") + continue + fname = os.path.join(root, name) + with open(fname, "r", encoding='utf-8') as po_file: + if params["verbose"]: + print(f"Importing translations from {name}") + text = process_po_file(po_file.read()) + with open(tr_file, "wt", encoding='utf-8') as tr_out: + tr_out.write(text) + +# from https://stackoverflow.com/questions/600268/mkdir-p-functionality-in-python/600612#600612 +# Creates a directory if it doesn't exist, silently does +# nothing if it already exists +def mkdir_p(path): + try: + os.makedirs(path) + except OSError as exc: # Python >2.5 + if exc.errno == errno.EEXIST and os.path.isdir(path): + pass + else: raise + +# Converts the template dictionary to a text to be written as a file +# dKeyStrings is a dictionary of localized string to source file sets +# dOld is a dictionary of existing translations and comments from +# the previous version of this text +def strings_to_text(dkeyStrings, dOld, mod_name, header_comments): + lOut = [f"# textdomain: {mod_name}\n"] + if header_comments is not None: + lOut.append(header_comments) + + dGroupedBySource = {} + + for key in dkeyStrings: + sourceList = list(dkeyStrings[key]) + if params["sort"]: + sourceList.sort() + sourceString = "\n".join(sourceList) + listForSource = dGroupedBySource.get(sourceString, []) + listForSource.append(key) + dGroupedBySource[sourceString] = listForSource + + lSourceKeys = list(dGroupedBySource.keys()) + lSourceKeys.sort() + for source in lSourceKeys: + localizedStrings = dGroupedBySource[source] + if params["sort"]: + localizedStrings.sort() + lOut.append("") + lOut.append(source) + lOut.append("") + for localizedString in localizedStrings: + val = dOld.get(localizedString, {}) + translation = val.get("translation", "") + comment = val.get("comment") + if params["break-long-lines"] and len(localizedString) > doublespace_threshold and not lOut[-1] == "": + lOut.append("") + if comment != None: + lOut.append(comment) + lOut.append(f"{localizedString}={translation}") + if params["break-long-lines"] and len(localizedString) > doublespace_threshold: + lOut.append("") + + + unusedExist = False + for key in dOld: + if key not in dkeyStrings: + val = dOld[key] + translation = val.get("translation") + comment = val.get("comment") + # only keep an unused translation if there was translated + # text or a comment associated with it + if translation != None and (translation != "" or comment): + if not unusedExist: + unusedExist = True + lOut.append("\n\n##### not used anymore #####\n") + if params["break-long-lines"] and len(key) > doublespace_threshold and not lOut[-1] == "": + lOut.append("") + if comment != None: + lOut.append(comment) + lOut.append(f"{key}={translation}") + if params["break-long-lines"] and len(key) > doublespace_threshold: + lOut.append("") + return "\n".join(lOut) + '\n' + +# Writes a template.txt file +# dkeyStrings is the dictionary returned by generate_template +def write_template(templ_file, dkeyStrings, mod_name): + # read existing template file to preserve comments + existing_template = import_tr_file(templ_file) + + text = strings_to_text(dkeyStrings, existing_template[0], mod_name, existing_template[2]) + mkdir_p(os.path.dirname(templ_file)) + with open(templ_file, "wt", encoding='utf-8') as template_file: + template_file.write(text) + + +# Gets all translatable strings from a lua file +def read_lua_file_strings(lua_file): + lOut = [] + with open(lua_file, encoding='utf-8') as text_file: + text = text_file.read() + #TODO remove comments here + + text = re.sub(pattern_concat, "", text) + + strings = [] + for s in pattern_lua_s.findall(text): + strings.append(s[1]) + for s in pattern_lua_bracketed_s.findall(text): + strings.append(s) + for s in pattern_lua_fs.findall(text): + strings.append(s[1]) + for s in pattern_lua_bracketed_fs.findall(text): + strings.append(s) + + for s in strings: + s = re.sub(r'"\.\.\s+"', "", s) + s = re.sub("@[^@=0-9]", "@@", s) + s = s.replace('\\"', '"') + s = s.replace("\\'", "'") + s = s.replace("\n", "@n") + s = s.replace("\\n", "@n") + s = s.replace("=", "@=") + lOut.append(s) + return lOut + +# Gets strings from an existing translation file +# returns both a dictionary of translations +# and the full original source text so that the new text +# can be compared to it for changes. +# Returns also header comments in the third return value. +def import_tr_file(tr_file): + dOut = {} + text = None + header_comment = None + if os.path.exists(tr_file): + with open(tr_file, "r", encoding='utf-8') as existing_file : + # save the full text to allow for comparison + # of the old version with the new output + text = existing_file.read() + existing_file.seek(0) + # a running record of the current comment block + # we're inside, to allow preceeding multi-line comments + # to be retained for a translation line + latest_comment_block = None + for line in existing_file.readlines(): + line = line.rstrip('\n') + if line[:3] == "###": + if header_comment is None: + # Save header comments + header_comment = latest_comment_block + # Stip textdomain line + tmp_h_c = "" + for l in header_comment.split('\n'): + if not l.startswith("# textdomain:"): + tmp_h_c += l + '\n' + header_comment = tmp_h_c + + # Reset comment block if we hit a header + latest_comment_block = None + continue + if line[:1] == "#": + # Save the comment we're inside + if not latest_comment_block: + latest_comment_block = line + else: + latest_comment_block = latest_comment_block + "\n" + line + continue + match = pattern_tr.match(line) + if match: + # this line is a translated line + outval = {} + outval["translation"] = match.group(2) + if latest_comment_block: + # if there was a comment, record that. + outval["comment"] = latest_comment_block + latest_comment_block = None + dOut[match.group(1)] = outval + return (dOut, text, header_comment) + +# Walks all lua files in the mod folder, collects translatable strings, +# and writes it to a template.txt file +# Returns a dictionary of localized strings to source file sets +# that can be used with the strings_to_text function. +def generate_template(folder, mod_name): + dOut = {} + for root, dirs, files in os.walk(folder): + for name in files: + if fnmatch.fnmatch(name, "*.lua"): + fname = os.path.join(root, name) + found = read_lua_file_strings(fname) + if params["verbose"]: + print(f"{fname}: {str(len(found))} translatable strings") + + for s in found: + sources = dOut.get(s, set()) + sources.add(f"### {os.path.basename(fname)} ###") + dOut[s] = sources + + if len(dOut) == 0: + return None + templ_file = os.path.join(folder, "locale/template.txt") + write_template(templ_file, dOut, mod_name) + return dOut + +# Updates an existing .tr file, copying the old one to a ".old" file +# if any changes have happened +# dNew is the data used to generate the template, it has all the +# currently-existing localized strings +def update_tr_file(dNew, mod_name, tr_file): + if params["verbose"]: + print(f"updating {tr_file}") + + tr_import = import_tr_file(tr_file) + dOld = tr_import[0] + textOld = tr_import[1] + + textNew = strings_to_text(dNew, dOld, mod_name, tr_import[2]) + + if textOld and textOld != textNew: + print(f"{tr_file} has changed.") + if not params["no-old-file"]: + shutil.copyfile(tr_file, f"{tr_file}.old") + + with open(tr_file, "w", encoding='utf-8') as new_tr_file: + new_tr_file.write(textNew) + +# Updates translation files for the mod in the given folder +def update_mod(folder): + modname = get_modname(folder) + if modname is not None: + process_po_files(folder, modname) + print(f"Updating translations for {modname}") + data = generate_template(folder, modname) + if data == None: + print(f"No translatable strings found in {modname}") + else: + for tr_file in get_existing_tr_files(folder): + update_tr_file(data, modname, os.path.join(folder, "locale/", tr_file)) + else: + print(f"\033[31mUnable to find modname in folder {folder}.\033[0m", file=_stderr) + exit(1) + +# Determines if the folder being pointed to is a mod or a mod pack +# and then runs update_mod accordingly +def update_folder(folder): + is_modpack = os.path.exists(os.path.join(folder, "modpack.txt")) or os.path.exists(os.path.join(folder, "modpack.conf")) + if is_modpack: + subfolders = [f.path for f in os.scandir(folder) if f.is_dir()] + for subfolder in subfolders: + update_mod(subfolder + "/") + else: + update_mod(folder) + print("Done.") + +def run_all_subfolders(folder): + for modfolder in [f.path for f in os.scandir(folder) if f.is_dir()]: + update_folder(modfolder + "/") + + +main() diff --git a/hyperloop/init.lua b/hyperloop/init.lua index 7c5f73a..2d4cff9 100644 --- a/hyperloop/init.lua +++ b/hyperloop/init.lua @@ -40,10 +40,10 @@ hyperloop = {} -- Version for compatibility checks, see history -hyperloop.version = 2.05 +hyperloop.version = 2.06 if minetest.global_exists("techage") and techage.version < 0.06 then - minetest.log("error", "[hyperloop] Hyperloop requires techage version 0.06 or newer!") + error("[hyperloop] Hyperloop requires techage version 0.06 or newer!") return end @@ -59,7 +59,7 @@ else end if tubelib2.version < 1.7 then - minetest.log("error", "Hyperloop requires tubelib2 version 1.7 or newer!!!") + error("Hyperloop requires tubelib2 version 1.7 or newer!!!") else -- Configuration settings hyperloop.wifi_enabled = minetest.settings:get_bool("hyperloop_wifi_enabled") diff --git a/hyperloop/intllib.sh b/hyperloop/intllib.sh deleted file mode 100755 index b831fc2..0000000 --- a/hyperloop/intllib.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -../intllib/tools/xgettext.sh ./booking.lua ./door.lua ./lcd.lua ./tube.lua ./booking_node.lua ./elevator.lua ./map.lua ./seat.lua ./utils.lua ./data_base.lua ./init.lua ./waypoint.lua ./network.lua ./station.lua ./wifi.lua ./deco.lua ./junction.lua ./recipes.lua ./tubecrowbar.lua ./recipes.lua diff --git a/hyperloop/locale/de.mo b/hyperloop/locale/de.mo deleted file mode 100644 index b3e4892..0000000 Binary files a/hyperloop/locale/de.mo and /dev/null differ diff --git a/hyperloop/locale/de.po b/hyperloop/locale/de.po deleted file mode 100644 index 24228a2..0000000 --- a/hyperloop/locale/de.po +++ /dev/null @@ -1,314 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-22 11:22+0100\n" -"PO-Revision-Date: 2018-12-22 11:23+0100\n" -"Last-Translator: \n" -"Language-Team: \n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.6\n" - -#: booking.lua -msgid "Station data is corrupted. Please rebuild the station!" -msgstr "Stationsdaten sind beschädigt. Bitte die Station neu bauen!" - -#: booking.lua -msgid "Station is still blocked. Please try again in a few seconds!" -msgstr "" -"Die Station ist noch blockiert. Bitte versuche es in ein paar Sekunden " -"wieder!" - -#: door.lua -msgid "The Booking Machine for this station is missing!" -msgstr "Der Fahrkartenautomat für die Station fehlt!" - -#: lcd.lua -msgid "Hyperloop Display" -msgstr "Hyperloop Bildschirm" - -#: lcd.lua seat.lua -msgid " | | << Hyperloop >> | be anywhere" -msgstr " | | << Hyperloop >> | be anywhere" - -#: tube.lua -msgid "Junction at " -msgstr "Anschlussstelle bei " - -#: tube.lua -msgid "There is no station/junction on this level. " -msgstr "Es gibt keine Station/Anschlussstelle auf dieser Höhe. " - -#: tube.lua -msgid "Do you really want to start a new network?!" -msgstr "Willst du wirklich ein neues Liniennetz beginnen?!" - -#: tube.lua -msgid "Hyperloop Tube" -msgstr "Hyperloop Röhre" - -#: booking_node.lua elevator.lua -msgid "Select your destination" -msgstr "Wähle dein Ziel" - -#: booking_node.lua elevator.lua -msgid "Destination" -msgstr "Ziel" - -#: booking_node.lua -msgid "Distance" -msgstr "Entfernung" - -#: booking_node.lua -msgid "Local Info" -msgstr "Zusatzinfo" - -#: booking_node.lua -msgid "" -"Please enter the station name to\n" -"which this booking machine belongs." -msgstr "" -"Bitte gib den Stationsnamen ein\n" -"zu dem dieser Fahrkartenautomat gehört." - -#: booking_node.lua -msgid "Station name" -msgstr "Stationsname" - -#: booking_node.lua -msgid "Additional station information" -msgstr "Zusätzliche Stationsinformationen" - -#: booking_node.lua -msgid "Station has already a booking machine!" -msgstr "Station hat bereits einen Fahrkartenautomat!" - -#: booking_node.lua -msgid "Invalid station name!" -msgstr "Ungültiger Stationsname!" - -#: booking_node.lua -msgid "Hyperloop Booking Machine" -msgstr "Hyperloop Fahrkartenautomat" - -#: elevator.lua -msgid "Hyperloop Elevator Shaft" -msgstr "Hyperloop Aufzugsschacht" - -#: elevator.lua -msgid "Floor" -msgstr "Stockwerk" - -#: elevator.lua -msgid "(current position)" -msgstr "(aktuelle Position)" - -#: elevator.lua -msgid "Hyperloop Elevator" -msgstr "Hyperloop Aufzug" - -#: elevator.lua -msgid "Please insert floor name" -msgstr "Gib den Stockwerknamen ein" - -#: elevator.lua -msgid "Floor name" -msgstr "Stockwerkname" - -#: elevator.lua -msgid "Base" -msgstr "Basis" - -#: elevator.lua wifi.lua -msgid "Save" -msgstr "Speichern" - -#: map.lua -msgid "Dist." -msgstr "Entf." - -#: map.lua -msgid "Station/Junction" -msgstr "Station/Anschlussstelle" - -#: map.lua -msgid "Position" -msgstr "Position" - -#: map.lua -msgid "Owner" -msgstr "Besitzer" - -#: map.lua -msgid "Conn. with" -msgstr "Verb. mit" - -#: map.lua -msgid "Close" -msgstr "Schließen" - -#: map.lua -msgid "Hyperloop Station Book" -msgstr "Hyperloop Stationsbuch" - -#: seat.lua -msgid "Thank you | for | travelling | with | Hyperloop." -msgstr "Thank you | for | travelling | with | Hyperloop." - -#: seat.lua -msgid " | Welcome at | | " -msgstr " | Willkommen | in | | " - -#: seat.lua -msgid "[Hyperloop] No booking entered!" -msgstr "[Hyperloop] Keine Buchung eingegeben!" - -#: seat.lua -msgid "Destination:" -msgstr "Ziel:" - -#: seat.lua -msgid "Distance:" -msgstr "Entfernung:" - -#: seat.lua -msgid "Arrival in:" -msgstr "Ankunft in:" - -#: seat.lua -msgid "Hyperloop Pod Seat" -msgstr "Hyperloop Sitz" - -#: waypoint.lua -msgid "Hyperloop Waypoint" -msgstr "Hyperloop Wegpunkt" - -#: station.lua -msgid "Station completed. Now place the Booking Machine!" -msgstr "Station fertig. Setze nun den Fahrkartenautomat!" - -#: station.lua -msgid "Area is protected!" -msgstr "Die Area ist geschützt!" - -#: station.lua -msgid "Not enough space to build the station!" -msgstr "Nicht ausreichend Platz um die Station zu errichten!" - -#: station.lua -msgid "Hyperloop Station Pod Builder" -msgstr "Hyperloop Stations Ersteller" - -#: station.lua -msgid "Hyperloop Pod Shell" -msgstr "Hyperloop Kabinenwand" - -#: station.lua recipes.lua -msgid "Hypersteel Ingot" -msgstr "Hypersteel Barren" - -#: station.lua -msgid "Blue Wool" -msgstr "Blaue Wolle" - -#: station.lua -msgid "Glass" -msgstr "Glas" - -#: station.lua -msgid "Not enough inventory items to build the station!" -msgstr "Nicht ausreichend Inventory Items um die Station zu bauen!" - -#: station.lua -msgid "Destroy Station" -msgstr "Zerstöre Station" - -#: station.lua -msgid "Build Station" -msgstr "Baue Station" - -#: station.lua -msgid "Hyperloop Station Block" -msgstr "Hyperloop Stations Block" - -#: station.lua -msgid "Station" -msgstr "Station" - -#: wifi.lua -msgid "Enter channel string" -msgstr "Kanalname eingeben" - -#: wifi.lua -msgid "Hyperloop WiFi Tube" -msgstr "Hyperloop Wifi Röhre" - -#: deco.lua -msgid "Hyperloop Promo Poster " -msgstr "Hyperloop Werbeposter " - -#: deco.lua -msgid "Hyperloop Station Sign" -msgstr "Hyperloop Stationszeichen" - -#: deco.lua -msgid "Hyperloop Station Sign Right" -msgstr "Hyperloop Stationszeichen rechts" - -#: deco.lua -msgid "Hyperloop Station Sign Left" -msgstr "Hyperloop Stationszeichen links" - -#: junction.lua -msgid "Station connected with " -msgstr "Station verbunden mit " - -#: junction.lua -msgid "Junction connected with " -msgstr "Anschlussstelle verbunden mit " - -#: junction.lua -msgid "Hyperloop Junction Block" -msgstr "Hyperloop Anschlussstelle" - -#: junction.lua -msgid "Junction" -msgstr "Anschlussstelle" - -#: junction.lua -msgid "Hyperloop Pillar" -msgstr "Hyperloop Stütze" - -#: tubecrowbar.lua -msgid "[Crowbar Help]\n" -msgstr "[Brecheisen Hilfe]\n" - -#: tubecrowbar.lua -msgid " left: remove node\n" -msgstr " links: entferne Block\n" - -#: tubecrowbar.lua -msgid " right: repair tube/shaft line\n" -msgstr " rechts: repariere Röhre/Schacht\n" - -#: tubecrowbar.lua -msgid "You don't have the necessary privs!" -msgstr "Du hast nicht die notwendigen Rechte!" - -#: tubecrowbar.lua -msgid "Hyperloop Tube Crowbar" -msgstr "Hyperloop Brecheisen" - -#~ msgid "Tube connection missing!" -#~ msgstr "Anschluss an eine Röhre fehlt!" - -#~ msgid "Hypersteel Pod Shell" -#~ msgstr "Hyperloop Kabinenwand" diff --git a/hyperloop/locale/hyperloop.de.tr b/hyperloop/locale/hyperloop.de.tr index 77eccaa..fc27f03 100644 --- a/hyperloop/locale/hyperloop.de.tr +++ b/hyperloop/locale/hyperloop.de.tr @@ -1,111 +1,142 @@ # textdomain: hyperloop + ### booking.lua ### + Station data is corrupted. Please rebuild the station!=Stationsdaten sind beschädigt. Bitte die Station neu bauen! Station is still blocked. Please try again in a few seconds!=Die Station ist noch blockiert. Bitte versuche es in ein paar Sekunden wieder! ### booking_node.lua ### -Additional station information=Zusätzliche Stationsinformationen -Hyperloop Booking Machine=Hyperloop Fahrkartenautomat -Invalid station name!=Ungültiger Stationsname! -Please enter the station name to@nwhich this booking machine belongs.=Bitte gib den Stationsnamen ein@nzu dem dieser Fahrkartenautomat gehört. -Station has already a booking machine!=Station hat bereits einen Fahrkartenautomat! -Station name=Stationsname +Please enter the station name to@nwhich this booking machine belongs.=Bitte gib den Stationsnamen ein@nzu dem dieser Fahrkartenautomat gehört. +Station name=Stationsname +Additional station information=Zusätzliche Stationsinformationen +Station has already a booking machine!=Station hat bereits einen Fahrkartenautomat! +Invalid station name!=Ungültiger Stationsname! +Hyperloop Booking Machine=Hyperloop Fahrkartenautomat + +### booking_node.lua ### ### elevator.lua ### + Select your destination=Wähle dein Ziel +### booking_node.lua ### ### migrate.lua ### + = ### deco.lua ### + Hyperloop Promo Poster =Hyperloop Werbeposter Hyperloop Station Sign=Hyperloop Stationszeichen -Hyperloop Station Sign Left=Hyperloop Stationszeichen links Hyperloop Station Sign Right=Hyperloop Stationszeichen rechts +Hyperloop Station Sign Left=Hyperloop Stationszeichen links ### door.lua ### -Hyperloop Door Bottom=Hyperloop Tür Unterteil -Hyperloop Door Top=Hyperloop Tür Oberteil + The Booking Machine for this station is missing!=Der Fahrkartenautomat für die Station fehlt! +Hyperloop Door Top=Hyperloop Tür Oberteil +Hyperloop Door Bottom=Hyperloop Tür Unterteil ### elevator.lua ### -(current position)=(aktuelle Position) -Base=Basis + +Hyperloop Elevator Shaft=Hyperloop Aufzugsschacht Destination=Ziel Floor=Stockwerk -Floor name=Stockwerkname +(current position)=(aktuelle Position) Hyperloop Elevator=Hyperloop Aufzug -Hyperloop Elevator Shaft=Hyperloop Aufzugsschacht Please insert floor name=Gib den Stockwerknamen ein +Floor name=Stockwerkname +Base=Basis +### elevator.lua ### ### wifi.lua ### + Save=Speichern ### junction.lua ### + +Station connected with =Station verbunden mit +Junction connected with =Anschlussstelle verbunden mit Hyperloop Junction Block=Hyperloop Anschlussstelle Hyperloop Pillar=Hyperloop Stütze -Junction connected with =Anschlussstelle verbunden mit -Station connected with =Station verbunden mit +### junction.lua ### ### migrate.lua ### + Junction=Anschlussstelle -Hyperloop Legacy Tube=Hyperloop veraltetes Rohr -unknown=unbekant ### lcd.lua ### + Hyperloop Display=Hyperloop Bildschirm ### map.lua ### -Close=Schließen -Conn. with=Verb. mit + Dist.=Entf. -Hyperloop Station Book=Hyperloop Stationsbuch -Owner=Besitzer -Position=Position Station/Junction=Station/Anschlussstelle +Position=Position +Owner=Besitzer +Conn. with=Verb. mit +Close=Schließen +Hyperloop Station Book=Hyperloop Stationsbuch + +### migrate.lua ### + +Hyperloop Legacy Tube=Hyperloop veraltetes Rohr +unknown=unbekant + +### recipes.lua ### +### station.lua ### + +Hypersteel Ingot=Hyperstahl Barren ### seat.lua ### -Hyperloop Pod Seat=Hyperloop Sitz + [Hyperloop] No booking entered!=[Hyperloop] Keine Buchung eingegeben! +Hyperloop Pod Seat=Hyperloop Sitz ### station.lua ### -Hypersteel Ingot=Hyperstahl Barren -Area is protected!=Die Area ist geschützt! -Blue Wool=Blaue Wolle -Build Station=Baue Station -Destroy Station=Zerstöre Station -Glass=Glas -Hyperloop Pod Shell=Hyperloop Kabinenwand -Hyperloop Station Block=Hyperloop Stations Block -Hyperloop Station Pod Builder=Hyperloop Stations Ersteller -Not enough inventory items to build the station!=Nicht ausreichend Inventory Items um die Station zu bauen! -Not enough space to build the station!=Nicht ausreichend Platz um die Station zu errichten! -Station=Station + Station completed. Now place the Booking Machine!=Station fertig. Setze nun den Fahrkartenautomat! +Area is protected!=Die Area ist geschützt! +Not enough space to build the station!=Nicht ausreichend Platz um die Station zu errichten! +Hyperloop Station Pod Builder=Hyperloop Stations Ersteller +Hyperloop Pod Shell=Hyperloop Kabinenwand +Blue Wool=Blaue Wolle +Glass=Glas +Not enough inventory items to build the station!=Nicht ausreichend Inventory Items um die Station zu bauen! +Destroy Station=Zerstöre Station +Build Station=Baue Station +Hyperloop Station Block=Hyperloop Stations Block +Station=Station ### tube.lua ### -Do you really want to start a new network?!=Willst du wirklich ein neues Liniennetz beginnen?! -Hyperloop Tube=Hyperloop Röhre + Junction at =Anschlussstelle bei -Open end at =Offenes Ende bei Station '=Station ' Station at =Station bei +Open end at =Offenes Ende bei There is no station/junction on this level. =Es gibt keine Station/Anschlussstelle auf dieser Höhe. +Do you really want to start a new network?!=Willst du wirklich ein neues Liniennetz beginnen?! +Hyperloop Tube=Hyperloop Röhre ### tubecrowbar.lua ### + +[Hyperloop] Error: Tube is too long!=[Hyperloop] Fehler: Röhre ist zu lang! +[Crowbar Help]@n=[Brecheisen Hilfe]@n left: remove node@n= links: entferne Block@n right: repair tube/shaft line@n= rechts: repariere Röhre/Schacht@n -Hyperloop Tube Crowbar=Hyperloop Brecheisen -Repair via WorldEdit placed Hyperloop tubes by reusing WorldEdit pos1/pos2=Reparatur über WorldEdit platzierte Hyperloop-Röhren durch Wiederverwendung von WorldEdit pos1/pos2 -Rights to remove tube nodes by means of the crowbar=Rechte zur Entfernung von Rohrknoten mit Hilfe der Brechstange You don't have the necessary privs!=Du hast nicht die notwendigen Rechte! -[Crowbar Help]@n=[Brecheisen Hilfe]@n +Hyperloop Tube Crowbar=Hyperloop Brecheisen +Rights to remove tube nodes by means of the crowbar=Rechte zur Entfernung von Rohrknoten mit Hilfe der Brechstange +Repair via WorldEdit placed Hyperloop tubes by reusing WorldEdit pos1/pos2=Reparatur über WorldEdit platzierte Hyperloop-Röhren durch Wiederverwendung von WorldEdit pos1/pos2 ### waypoint.lua ### + Hyperloop Waypoint=Hyperloop Wegpunkt ### wifi.lua ### + Enter channel string=Kanalname eingeben Hyperloop WiFi Tube=Hyperloop Wifi Röhre diff --git a/hyperloop/locale/template.pot b/hyperloop/locale/template.pot deleted file mode 100644 index e477bf9..0000000 --- a/hyperloop/locale/template.pot +++ /dev/null @@ -1,304 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-22 11:22+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#: booking.lua -msgid "Station data is corrupted. Please rebuild the station!" -msgstr "" - -#: booking.lua -msgid "Station is still blocked. Please try again in a few seconds!" -msgstr "" - -#: door.lua -msgid "The Booking Machine for this station is missing!" -msgstr "" - -#: lcd.lua -msgid "Hyperloop Display" -msgstr "" - -#: lcd.lua seat.lua -msgid " | | << Hyperloop >> | be anywhere" -msgstr "" - -#: tube.lua -msgid "Junction at " -msgstr "" - -#: tube.lua -msgid "There is no station/junction on this level. " -msgstr "" - -#: tube.lua -msgid "Do you really want to start a new network?!" -msgstr "" - -#: tube.lua -msgid "Hyperloop Tube" -msgstr "" - -#: booking_node.lua elevator.lua -msgid "Select your destination" -msgstr "" - -#: booking_node.lua elevator.lua -msgid "Destination" -msgstr "" - -#: booking_node.lua -msgid "Distance" -msgstr "" - -#: booking_node.lua -msgid "Local Info" -msgstr "" - -#: booking_node.lua -msgid "" -"Please enter the station name to\n" -"which this booking machine belongs." -msgstr "" - -#: booking_node.lua -msgid "Station name" -msgstr "" - -#: booking_node.lua -msgid "Additional station information" -msgstr "" - -#: booking_node.lua -msgid "Station has already a booking machine!" -msgstr "" - -#: booking_node.lua -msgid "Invalid station name!" -msgstr "" - -#: booking_node.lua -msgid "Hyperloop Booking Machine" -msgstr "" - -#: elevator.lua -msgid "Hyperloop Elevator Shaft" -msgstr "" - -#: elevator.lua -msgid "Floor" -msgstr "" - -#: elevator.lua -msgid "(current position)" -msgstr "" - -#: elevator.lua -msgid "Hyperloop Elevator" -msgstr "" - -#: elevator.lua -msgid "Please insert floor name" -msgstr "" - -#: elevator.lua -msgid "Floor name" -msgstr "" - -#: elevator.lua -msgid "Base" -msgstr "" - -#: elevator.lua wifi.lua -msgid "Save" -msgstr "" - -#: map.lua -msgid "Dist." -msgstr "" - -#: map.lua -msgid "Station/Junction" -msgstr "" - -#: map.lua -msgid "Position" -msgstr "" - -#: map.lua -msgid "Owner" -msgstr "" - -#: map.lua -msgid "Conn. with" -msgstr "" - -#: map.lua -msgid "Close" -msgstr "" - -#: map.lua -msgid "Hyperloop Station Book" -msgstr "" - -#: seat.lua -msgid "Thank you | for | travelling | with | Hyperloop." -msgstr "" - -#: seat.lua -msgid " | Welcome at | | " -msgstr "" - -#: seat.lua -msgid "[Hyperloop] No booking entered!" -msgstr "" - -#: seat.lua -msgid "Destination:" -msgstr "" - -#: seat.lua -msgid "Distance:" -msgstr "" - -#: seat.lua -msgid "Arrival in:" -msgstr "" - -#: seat.lua -msgid "Hyperloop Pod Seat" -msgstr "" - -#: waypoint.lua -msgid "Hyperloop Waypoint" -msgstr "" - -#: station.lua -msgid "Station completed. Now place the Booking Machine!" -msgstr "" - -#: station.lua -msgid "Area is protected!" -msgstr "" - -#: station.lua -msgid "Not enough space to build the station!" -msgstr "" - -#: station.lua -msgid "Hyperloop Station Pod Builder" -msgstr "" - -#: station.lua -msgid "Hyperloop Pod Shell" -msgstr "" - -#: station.lua recipes.lua -msgid "Hypersteel Ingot" -msgstr "" - -#: station.lua -msgid "Blue Wool" -msgstr "" - -#: station.lua -msgid "Glass" -msgstr "" - -#: station.lua -msgid "Not enough inventory items to build the station!" -msgstr "" - -#: station.lua -msgid "Destroy Station" -msgstr "" - -#: station.lua -msgid "Build Station" -msgstr "" - -#: station.lua -msgid "Hyperloop Station Block" -msgstr "" - -#: station.lua -msgid "Station" -msgstr "" - -#: wifi.lua -msgid "Enter channel string" -msgstr "" - -#: wifi.lua -msgid "Hyperloop WiFi Tube" -msgstr "" - -#: deco.lua -msgid "Hyperloop Promo Poster " -msgstr "" - -#: deco.lua -msgid "Hyperloop Station Sign" -msgstr "" - -#: deco.lua -msgid "Hyperloop Station Sign Right" -msgstr "" - -#: deco.lua -msgid "Hyperloop Station Sign Left" -msgstr "" - -#: junction.lua -msgid "Station connected with " -msgstr "" - -#: junction.lua -msgid "Junction connected with " -msgstr "" - -#: junction.lua -msgid "Hyperloop Junction Block" -msgstr "" - -#: junction.lua -msgid "Junction" -msgstr "" - -#: junction.lua -msgid "Hyperloop Pillar" -msgstr "" - -#: tubecrowbar.lua -msgid "[Crowbar Help]\n" -msgstr "" - -#: tubecrowbar.lua -msgid " left: remove node\n" -msgstr "" - -#: tubecrowbar.lua -msgid " right: repair tube/shaft line\n" -msgstr "" - -#: tubecrowbar.lua -msgid "You don't have the necessary privs!" -msgstr "" - -#: tubecrowbar.lua -msgid "Hyperloop Tube Crowbar" -msgstr "" diff --git a/hyperloop/locale/template.txt b/hyperloop/locale/template.txt index 8b7b478..e35c7e3 100644 --- a/hyperloop/locale/template.txt +++ b/hyperloop/locale/template.txt @@ -1,6 +1,7 @@ # textdomain: hyperloop + ### booking.lua ### Station data is corrupted. Please rebuild the station!= @@ -8,14 +9,12 @@ Station is still blocked. Please try again in a few seconds!= ### booking_node.lua ### -Additional station information= -Hyperloop Booking Machine= -Invalid station name!= - Please enter the station name to@nwhich this booking machine belongs.= - -Station has already a booking machine!= Station name= +Additional station information= +Station has already a booking machine!= +Invalid station name!= +Hyperloop Booking Machine= ### booking_node.lua ### ### elevator.lua ### @@ -31,25 +30,25 @@ Select your destination= Hyperloop Promo Poster = Hyperloop Station Sign= -Hyperloop Station Sign Left= Hyperloop Station Sign Right= +Hyperloop Station Sign Left= ### door.lua ### -Hyperloop Door Bottom= -Hyperloop Door Top= The Booking Machine for this station is missing!= +Hyperloop Door Top= +Hyperloop Door Bottom= ### elevator.lua ### -(current position)= -Base= +Hyperloop Elevator Shaft= Destination= Floor= -Floor name= +(current position)= Hyperloop Elevator= -Hyperloop Elevator Shaft= Please insert floor name= +Floor name= +Base= ### elevator.lua ### ### wifi.lua ### @@ -58,10 +57,10 @@ Save= ### junction.lua ### +Station connected with = +Junction connected with = Hyperloop Junction Block= Hyperloop Pillar= -Junction connected with = -Station connected with = ### junction.lua ### ### migrate.lua ### @@ -72,20 +71,15 @@ Junction= Hyperloop Display= -### lcd.lua ### -### seat.lua ### - - | | << Hyperloop >> | be anywhere= - ### map.lua ### -Close= -Conn. with= Dist.= -Hyperloop Station Book= -Owner= -Position= Station/Junction= +Position= +Owner= +Conn. with= +Close= +Hyperloop Station Book= ### migrate.lua ### @@ -99,50 +93,44 @@ Hypersteel Ingot= ### seat.lua ### - | Welcome at | | = -Arrival in:= -Destination:= -Distance:= -Hyperloop Pod Seat= -Thank you | for | travelling | with | Hyperloop.= [Hyperloop] No booking entered!= +Hyperloop Pod Seat= ### station.lua ### -Area is protected!= -Blue Wool= -Build Station= -Destroy Station= -Glass= -Hyperloop Pod Shell= -Hyperloop Station Block= -Hyperloop Station Pod Builder= -Not enough inventory items to build the station!= -Not enough space to build the station!= -Station= Station completed. Now place the Booking Machine!= +Area is protected!= +Not enough space to build the station!= +Hyperloop Station Pod Builder= +Hyperloop Pod Shell= +Blue Wool= +Glass= +Not enough inventory items to build the station!= +Destroy Station= +Build Station= +Hyperloop Station Block= +Station= ### tube.lua ### -Do you really want to start a new network?!= -Hyperloop Tube= Junction at = -Open end at = Station '= Station at = +Open end at = There is no station/junction on this level. = +Do you really want to start a new network?!= +Hyperloop Tube= ### tubecrowbar.lua ### +[Hyperloop] Error: Tube is too long!= +[Crowbar Help]@n= left: remove node@n= right: repair tube/shaft line@n= -Hyperloop Tube Crowbar= - -Repair via WorldEdit placed Hyperloop tubes by reusing WorldEdit pos1/pos2= - -Rights to remove tube nodes by means of the crowbar= You don't have the necessary privs!= -[Crowbar Help]@n= +Hyperloop Tube Crowbar= +Rights to remove tube nodes by means of the crowbar= +Repair via WorldEdit placed Hyperloop tubes by reusing WorldEdit pos1/pos2= ### waypoint.lua ### diff --git a/hyperloop/seat.lua b/hyperloop/seat.lua index 839d9ff..95ee396 100644 --- a/hyperloop/seat.lua +++ b/hyperloop/seat.lua @@ -75,6 +75,10 @@ local function on_arrival(tDeparture, tArrival, player_name, sound) local yaw = hyperloop.facedir_to_rad(tArrival.facedir) - offs player:set_look_yaw(yaw) end + -- set player name again + if tArrival.attributes then + player:set_nametag_attributes(tArrival.attributes) + end end -- play arrival sound minetest.sound_stop(sound) @@ -156,7 +160,10 @@ local function on_start_travel(pos, node, clicker) clicker:set_pos(pos) -- rotate player to look in move direction clicker:set_look_horizontal(hyperloop.facedir_to_rad(tDeparture.facedir)) - + -- hide player name + tArrival.attributes = clicker:get_nametag_attributes() + clicker:set_nametag_attributes({text = " "}) + -- activate display local dist = hyperloop.distance(pos, tArrival.pos) local text = I("Destination:").." | "..string.sub(tArrival.name, 1, 13).." | "..I("Distance:").." | ".. diff --git a/hyperloop/tubecrowbar.lua b/hyperloop/tubecrowbar.lua index 4e9f1ee..a359e9e 100644 --- a/hyperloop/tubecrowbar.lua +++ b/hyperloop/tubecrowbar.lua @@ -39,6 +39,10 @@ local function repair_tubes(itemstack, placer, pointed_thing) local dir1, dir2, fpos1, fpos2, fdir1, fdir2, cnt1, cnt2 = Shaft:tool_repair_tube(pos, placer, pointed_thing) if fpos1 and fpos2 then + if cnt1 + cnt2 >= Shaft.max_tube_length then + minetest.chat_send_player(placer:get_player_name(), string.char(0x1b) .. + "(c@#ff0000)" .. S("[Hyperloop] Error: Tube is too long!")) + end minetest.chat_send_player(placer:get_player_name(), chat_message(dir1, cnt1, fpos1, fdir1)) minetest.chat_send_player(placer:get_player_name(), chat_message(dir2, cnt2, fpos2, fdir2)) minetest.sound_play({ @@ -51,6 +55,10 @@ local function repair_tubes(itemstack, placer, pointed_thing) local dir1, dir2, fpos1, fpos2, fdir1, fdir2, cnt1, cnt2 = Tube:tool_repair_tube(pos, placer, pointed_thing) if fpos1 and fpos2 then + if cnt1 + cnt2 >= Shaft.max_tube_length then + minetest.chat_send_player(placer:get_player_name(), string.char(0x1b) .. + "(c@#ff0000)" .. S("[Hyperloop] Error: Tube is too long!")) + end minetest.chat_send_player(placer:get_player_name(), chat_message(dir1, cnt1, fpos1, fdir1)) minetest.chat_send_player(placer:get_player_name(), chat_message(dir2, cnt2, fpos2, fdir2)) minetest.sound_play({ diff --git a/minecart/lib.lua b/minecart/lib.lua index 9d78e51..efdcf72 100644 --- a/minecart/lib.lua +++ b/minecart/lib.lua @@ -62,11 +62,13 @@ function minecart.get_node_lvm(pos) local param2_data = vm:get_param2_data() local area = VoxelArea:new({MinEdge = MinEdge, MaxEdge = MaxEdge}) local idx = area:indexp(pos) - node = { - name = minetest.get_name_from_content_id(data[idx]), - param2 = param2_data[idx] - } - return node + if data[idx] and param2_data[idx] then + return { + name = minetest.get_name_from_content_id(data[idx]), + param2 = param2_data[idx] + } + end + return {name="ignore", param2=0} end function minecart.stopped(vel, tolerance) diff --git a/minecart/monitoring.lua b/minecart/monitoring.lua index daeb2e4..a77d89e 100644 --- a/minecart/monitoring.lua +++ b/minecart/monitoring.lua @@ -133,13 +133,14 @@ local function monitoring() local pos = entity.object:get_pos() local vel = entity.object:get_velocity() local rot = entity.object:get_rotation() - if not minetest.get_node_or_nil(pos) then -- unloaded area - lib.unload_cart(pos, vel, entity, item) - item.stopped = minecart.stopped(vel) + if pos and vel and rot then + if not minetest.get_node_or_nil(pos) then -- unloaded area + lib.unload_cart(pos, vel, entity, item) + item.stopped = minecart.stopped(vel) + end + -- store last pos from cart + item.last_pos, item.last_vel, item.last_pitch, item.last_yaw = pos, vel, rot.x, rot.y end - -- store last pos from cart - item.last_pos, item.last_vel, item.last_pitch, item.last_yaw = pos, vel, rot.x, rot.y - else -- no cart running local pos, vel, pitch, yaw = get_pos_vel_pitch_yaw(item) if pos and vel then diff --git a/signs_bot/README.md b/signs_bot/README.md index ce5abfa..b7831c5 100644 --- a/signs_bot/README.md +++ b/signs_bot/README.md @@ -3,9 +3,9 @@ Signs Bot [signs_bot] **A robot controlled by signs.** -Browse on: ![GitHub](https://github.com/joe7575/signs_bot) +Browse on: [GitHub](https://github.com/joe7575/signs_bot) -Download: ![GitHub](https://github.com/joe7575/signs_bot/archive/master.zip) +Download: [GitHub](https://github.com/joe7575/signs_bot/archive/master.zip) ![Signs Bot](https://github.com/joe7575/signs_bot/blob/master/screenshot.png) @@ -105,7 +105,7 @@ For all Inventory commands applies: If the inventory stack specified by i repeat -- start of a loop block, is a number 1..999 end -- end of a loop block call