From 4db7fb4a3be9de29460919ff2dc042e0812f31bd Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Wed, 10 Feb 2021 11:02:34 +0000 Subject: [PATCH 001/110] Replace 'minetest.' with 'core.' in builtin --- builtin/common/information_formspecs.lua | 2 +- builtin/game/item.lua | 2 +- builtin/game/statbars.lua | 4 ++-- builtin/mainmenu/dlg_config_world.lua | 2 +- builtin/mainmenu/dlg_contentstore.lua | 18 +++++++++--------- builtin/mainmenu/dlg_create_world.lua | 2 +- builtin/mainmenu/pkgmgr.lua | 6 +++--- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/builtin/common/information_formspecs.lua b/builtin/common/information_formspecs.lua index 8afa5bc87..3e2f1f079 100644 --- a/builtin/common/information_formspecs.lua +++ b/builtin/common/information_formspecs.lua @@ -115,7 +115,7 @@ core.register_on_player_receive_fields(function(player, formname, fields) return end - local event = minetest.explode_table_event(fields.list) + local event = core.explode_table_event(fields.list) if event.type ~= "INV" then local name = player:get_player_name() core.show_formspec(name, "__builtin:help_cmds", diff --git a/builtin/game/item.lua b/builtin/game/item.lua index 881aff52e..b68177c22 100644 --- a/builtin/game/item.lua +++ b/builtin/game/item.lua @@ -678,7 +678,7 @@ end -- Item definition defaults -- -local default_stack_max = tonumber(minetest.settings:get("default_stack_max")) or 99 +local default_stack_max = tonumber(core.settings:get("default_stack_max")) or 99 core.nodedef_default = { -- Item properties diff --git a/builtin/game/statbars.lua b/builtin/game/statbars.lua index d192029c5..db5087a16 100644 --- a/builtin/game/statbars.lua +++ b/builtin/game/statbars.lua @@ -84,8 +84,8 @@ local function update_builtin_statbars(player) end if hud.id_breathbar and (not show_breathbar or breath == breath_max) then - minetest.after(1, function(player_name, breath_bar) - local player = minetest.get_player_by_name(player_name) + core.after(1, function(player_name, breath_bar) + local player = core.get_player_by_name(player_name) if player then player:hud_remove(breath_bar) end diff --git a/builtin/mainmenu/dlg_config_world.lua b/builtin/mainmenu/dlg_config_world.lua index 2cf70c9c9..9bdf92a74 100644 --- a/builtin/mainmenu/dlg_config_world.lua +++ b/builtin/mainmenu/dlg_config_world.lua @@ -74,7 +74,7 @@ local function get_formspec(data) "label[1.75,0;" .. data.worldspec.name .. "]" if mod.is_modpack or mod.type == "game" then - local info = minetest.formspec_escape( + local info = core.formspec_escape( core.get_content_info(mod.path).description) if info == "" then if mod.is_modpack then diff --git a/builtin/mainmenu/dlg_contentstore.lua b/builtin/mainmenu/dlg_contentstore.lua index 7328f3358..b0736a4fd 100644 --- a/builtin/mainmenu/dlg_contentstore.lua +++ b/builtin/mainmenu/dlg_contentstore.lua @@ -15,7 +15,7 @@ --with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -if not minetest.get_http_api then +if not core.get_http_api then function create_store_dlg() return messagebox("store", fgettext("ContentDB is not available when Minetest was compiled without cURL")) @@ -27,7 +27,7 @@ end -- before the package list is ordered based on installed state. local store = { packages = {}, packages_full = {}, packages_full_unordered = {} } -local http = minetest.get_http_api() +local http = core.get_http_api() -- Screenshot local screenshot_dir = core.get_cache_path() .. DIR_DELIM .. "cdb" @@ -152,7 +152,7 @@ local function start_install(package) end local function queue_download(package) - local max_concurrent_downloads = tonumber(minetest.settings:get("contentdb_max_concurrent_downloads")) + local max_concurrent_downloads = tonumber(core.settings:get("contentdb_max_concurrent_downloads")) if number_downloading < max_concurrent_downloads then start_install(package) else @@ -320,7 +320,7 @@ function install_dialog.get_formspec() selected_game_idx = i end - games[i] = minetest.formspec_escape(games[i].name) + games[i] = core.formspec_escape(games[i].name) end local selected_game = pkgmgr.games[selected_game_idx] @@ -331,7 +331,7 @@ function install_dialog.get_formspec() local formatted_deps = {} for _, dep in pairs(install_dialog.dependencies) do formatted_deps[#formatted_deps + 1] = "#fff" - formatted_deps[#formatted_deps + 1] = minetest.formspec_escape(dep.name) + formatted_deps[#formatted_deps + 1] = core.formspec_escape(dep.name) if dep.installed then formatted_deps[#formatted_deps + 1] = "#ccf" formatted_deps[#formatted_deps + 1] = fgettext("Already installed") @@ -402,7 +402,7 @@ function install_dialog.handle_submit(this, fields) end if fields.will_install_deps ~= nil then - install_dialog.will_install_deps = minetest.is_yes(fields.will_install_deps) + install_dialog.will_install_deps = core.is_yes(fields.will_install_deps) return true end @@ -553,7 +553,7 @@ function store.load() end end - local timeout = tonumber(minetest.settings:get("curl_file_download_timeout")) + local timeout = tonumber(core.settings:get("curl_file_download_timeout")) local response = http.fetch_sync({ url = url, timeout = timeout }) if not response.succeeded then return @@ -793,8 +793,8 @@ function store.get_formspec(dlgdata) -- title formspec[#formspec + 1] = "label[1.875,0.1;" formspec[#formspec + 1] = core.formspec_escape( - minetest.colorize(mt_color_green, package.title) .. - minetest.colorize("#BFBFBF", " by " .. package.author)) + core.colorize(mt_color_green, package.title) .. + core.colorize("#BFBFBF", " by " .. package.author)) formspec[#formspec + 1] = "]" -- buttons diff --git a/builtin/mainmenu/dlg_create_world.lua b/builtin/mainmenu/dlg_create_world.lua index 5931496c1..1938747fe 100644 --- a/builtin/mainmenu/dlg_create_world.lua +++ b/builtin/mainmenu/dlg_create_world.lua @@ -443,7 +443,7 @@ local function create_world_buttonhandler(this, fields) end if fields["mgv6_biomes"] then - local entry = minetest.formspec_escape(fields["mgv6_biomes"]) + local entry = core.formspec_escape(fields["mgv6_biomes"]) for b=1, #mgv6_biomes do if entry == mgv6_biomes[b][1] then local ftable = core.settings:get_flags("mgv6_spflags") diff --git a/builtin/mainmenu/pkgmgr.lua b/builtin/mainmenu/pkgmgr.lua index bfb5d269a..19127d8d3 100644 --- a/builtin/mainmenu/pkgmgr.lua +++ b/builtin/mainmenu/pkgmgr.lua @@ -459,7 +459,7 @@ function pkgmgr.enable_mod(this, toset) if not toset then -- Mod(s) were disabled, so no dependencies need to be enabled table.sort(toggled_mods) - minetest.log("info", "Following mods were disabled: " .. + core.log("info", "Following mods were disabled: " .. table.concat(toggled_mods, ", ")) return end @@ -496,7 +496,7 @@ function pkgmgr.enable_mod(this, toset) enabled_mods[name] = true local mod_to_enable = list[mod_ids[name]] if not mod_to_enable then - minetest.log("warning", "Mod dependency \"" .. name .. + core.log("warning", "Mod dependency \"" .. name .. "\" not found!") else if mod_to_enable.enabled == false then @@ -517,7 +517,7 @@ function pkgmgr.enable_mod(this, toset) -- Log the list of enabled mods table.sort(toggled_mods) - minetest.log("info", "Following mods were enabled: " .. + core.log("info", "Following mods were enabled: " .. table.concat(toggled_mods, ", ")) end From 375bcd65c1903957e3a640cefffcc8df164b78bd Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Fri, 12 Feb 2021 20:54:06 +0100 Subject: [PATCH 002/110] Send attachments instantly before set_pos (#10235) --- src/server.cpp | 3 +++ src/server/luaentity_sao.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/server.cpp b/src/server.cpp index af4eb17e2..81cdd1f8d 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1821,6 +1821,9 @@ void Server::SendMovePlayer(session_t peer_id) PlayerSAO *sao = player->getPlayerSAO(); assert(sao); + // Send attachment updates instantly to the client prior updating position + sao->sendOutdatedData(); + NetworkPacket pkt(TOCLIENT_MOVE_PLAYER, sizeof(v3f) + sizeof(f32) * 2, peer_id); pkt << sao->getBasePosition() << sao->getLookPitch() << sao->getRotation().Y; diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp index c7277491a..5f35aaed8 100644 --- a/src/server/luaentity_sao.cpp +++ b/src/server/luaentity_sao.cpp @@ -492,6 +492,9 @@ void LuaEntitySAO::sendPosition(bool do_interpolate, bool is_movement_end) if(isAttached()) return; + // Send attachment updates instantly to the client prior updating position + sendOutdatedData(); + m_last_sent_move_precision = m_base_position.getDistanceFrom( m_last_sent_position); m_last_sent_position_timer = 0; From f018737b0646e0961a46a74765945d6039e47b88 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 14 Feb 2021 11:28:02 +0100 Subject: [PATCH 003/110] Fix segfault with invalid texture strings and minimap enabled closes #10949 --- src/client/tile.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/client/tile.cpp b/src/client/tile.cpp index aad956ada..f2639757e 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -2224,9 +2224,14 @@ video::SColor TextureSource::getTextureAverageColor(const std::string &name) video::IVideoDriver *driver = RenderingEngine::get_video_driver(); video::SColor c(0, 0, 0, 0); video::ITexture *texture = getTexture(name); + if (!texture) + return c; video::IImage *image = driver->createImage(texture, core::position2d(0, 0), texture->getOriginalSize()); + if (!image) + return c; + u32 total = 0; u32 tR = 0; u32 tG = 0; From 7832b6843e73410e15677d1324d582b4b7c7e824 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Mon, 15 Feb 2021 20:41:19 +0100 Subject: [PATCH 004/110] Server-side authority for attached players (#10952) The server must have authority about attachments. This commit ignores any player movement packets as long they're attached. --- src/network/serverpackethandler.cpp | 8 ++++++-- src/server/luaentity_sao.cpp | 10 +++------ src/server/player_sao.cpp | 32 ++++++----------------------- 3 files changed, 15 insertions(+), 35 deletions(-) diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 270b8e01f..ddc6f4e47 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -488,8 +488,12 @@ void Server::process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao, pitch = modulo360f(pitch); yaw = wrapDegrees_0_360(yaw); - playersao->setBasePosition(position); - player->setSpeed(speed); + if (!playersao->isAttached()) { + // Only update player positions when moving freely + // to not interfere with attachment handling + playersao->setBasePosition(position); + player->setSpeed(speed); + } playersao->setLookPitch(pitch); playersao->setPlayerYaw(yaw); playersao->setFov(fov); diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp index 5f35aaed8..3bcbe107b 100644 --- a/src/server/luaentity_sao.cpp +++ b/src/server/luaentity_sao.cpp @@ -146,15 +146,11 @@ void LuaEntitySAO::step(float dtime, bool send_recommended) // Each frame, parent position is copied if the object is attached, otherwise it's calculated normally // If the object gets detached this comes into effect automatically from the last known origin - if(isAttached()) - { - v3f pos = m_env->getActiveObject(m_attachment_parent_id)->getBasePosition(); - m_base_position = pos; + if (auto *parent = getParent()) { + m_base_position = parent->getBasePosition(); m_velocity = v3f(0,0,0); m_acceleration = v3f(0,0,0); - } - else - { + } else { if(m_prop.physical){ aabb3f box = m_prop.collisionbox; box.MinEdge *= BS; diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp index 110d2010d..0d31f2e0b 100644 --- a/src/server/player_sao.cpp +++ b/src/server/player_sao.cpp @@ -260,10 +260,13 @@ void PlayerSAO::step(float dtime, bool send_recommended) // otherwise it's calculated normally. // If the object gets detached this comes into effect automatically from // the last known origin. - if (isAttached()) { - v3f pos = m_env->getActiveObject(m_attachment_parent_id)->getBasePosition(); + if (auto *parent = getParent()) { + v3f pos = parent->getBasePosition(); m_last_good_position = pos; setBasePosition(pos); + + if (m_player) + m_player->setSpeed(v3f()); } if (!send_recommended) @@ -570,34 +573,11 @@ void PlayerSAO::setMaxSpeedOverride(const v3f &vel) bool PlayerSAO::checkMovementCheat() { if (m_is_singleplayer || + isAttached() || g_settings->getBool("disable_anticheat")) { m_last_good_position = m_base_position; return false; } - if (UnitSAO *parent = dynamic_cast(getParent())) { - v3f attachment_pos; - { - int parent_id; - std::string bone; - v3f attachment_rot; - bool force_visible; - getAttachment(&parent_id, &bone, &attachment_pos, &attachment_rot, &force_visible); - } - - v3f parent_pos = parent->getBasePosition(); - f32 diff = m_base_position.getDistanceFromSQ(parent_pos) - attachment_pos.getLengthSQ(); - const f32 maxdiff = 4.0f * BS; // fair trade-off value for various latencies - - if (diff > maxdiff * maxdiff) { - setBasePosition(parent_pos); - actionstream << "Server: " << m_player->getName() - << " moved away from parent; diff=" << sqrtf(diff) / BS - << " resetting position." << std::endl; - return true; - } - // Player movement is locked to the entity. Skip further checks - return false; - } bool cheated = false; /* From a8f6befd398cb8f962f3bb1fab092d6355bfe015 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Wed, 17 Feb 2021 18:53:44 +0000 Subject: [PATCH 005/110] Fix short_description fallback order (#10943) --- builtin/game/register.lua | 4 ---- doc/lua_api.txt | 13 +++++++------ games/devtest/mods/unittests/itemdescription.lua | 11 +++++++++-- src/script/common/c_content.cpp | 6 ++++-- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/builtin/game/register.lua b/builtin/game/register.lua index b006957e9..1cff85813 100644 --- a/builtin/game/register.lua +++ b/builtin/game/register.lua @@ -118,10 +118,6 @@ function core.register_item(name, itemdef) end itemdef.name = name - -- default short_description to first line of description - itemdef.short_description = itemdef.short_description or - (itemdef.description or ""):gsub("\n.*","") - -- Apply defaults and add to registered_* table if itemdef.type == "node" then -- Use the nodebox as selection box if it's not set manually diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 7b7825614..a09b98924 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -6039,18 +6039,18 @@ an itemstring, a table or `nil`. stack). * `set_metadata(metadata)`: (DEPRECATED) Returns true. * `get_description()`: returns the description shown in inventory list tooltips. - * The engine uses the same as this function for item descriptions. + * The engine uses this when showing item descriptions in tooltips. * Fields for finding the description, in order: * `description` in item metadata (See [Item Metadata].) * `description` in item definition * item name -* `get_short_description()`: returns the short description. +* `get_short_description()`: returns the short description or nil. * Unlike the description, this does not include new lines. - * The engine uses the same as this function for short item descriptions. * Fields for finding the short description, in order: * `short_description` in item metadata (See [Item Metadata].) * `short_description` in item definition - * first line of the description (See `get_description()`.) + * first line of the description (From item meta or def, see `get_description()`.) + * Returns nil if none of the above are set * `clear()`: removes all items from the stack, making it empty. * `replace(item)`: replace the contents of this stack. * `item` can also be an itemstring or table. @@ -7171,8 +7171,9 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and short_description = "Steel Axe", -- Must not contain new lines. - -- Defaults to the first line of description. - -- See also: `get_short_description` in [`ItemStack`] + -- Defaults to nil. + -- Use an [`ItemStack`] to get the short description, eg: + -- ItemStack(itemname):get_short_description() groups = {}, -- key = name, value = rating; rating = 1..3. diff --git a/games/devtest/mods/unittests/itemdescription.lua b/games/devtest/mods/unittests/itemdescription.lua index 1d0826545..d6ee6551a 100644 --- a/games/devtest/mods/unittests/itemdescription.lua +++ b/games/devtest/mods/unittests/itemdescription.lua @@ -26,15 +26,22 @@ minetest.register_chatcommand("item_description", { }) function unittests.test_short_desc() + local function get_short_description(item) + return ItemStack(item):get_short_description() + end + local stack = ItemStack("unittests:colorful_pick") assert(stack:get_short_description() == "Colorful Pickaxe") - assert(stack:get_short_description() == minetest.registered_items["unittests:colorful_pick"].short_description) + assert(get_short_description("unittests:colorful_pick") == "Colorful Pickaxe") + assert(minetest.registered_items["unittests:colorful_pick"].short_description == nil) assert(stack:get_description() == full_description) assert(stack:get_description() == minetest.registered_items["unittests:colorful_pick"].description) stack:get_meta():set_string("description", "Hello World") - assert(stack:get_short_description() == "Colorful Pickaxe") + assert(stack:get_short_description() == "Hello World") assert(stack:get_description() == "Hello World") + assert(get_short_description(stack) == "Hello World") + assert(get_short_description("unittests:colorful_pick") == "Colorful Pickaxe") stack:get_meta():set_string("short_description", "Foo Bar") assert(stack:get_short_description() == "Foo Bar") diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index ecab7baa1..2f9fbd74b 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -140,8 +140,10 @@ void push_item_definition_full(lua_State *L, const ItemDefinition &i) lua_setfield(L, -2, "name"); lua_pushstring(L, i.description.c_str()); lua_setfield(L, -2, "description"); - lua_pushstring(L, i.short_description.c_str()); - lua_setfield(L, -2, "short_description"); + if (!i.short_description.empty()) { + lua_pushstring(L, i.short_description.c_str()); + lua_setfield(L, -2, "short_description"); + } lua_pushstring(L, type.c_str()); lua_setfield(L, -2, "type"); lua_pushstring(L, i.inventory_image.c_str()); From f85e9ab9254e2ae4ac13170f9edea00fb8d931a2 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Wed, 17 Feb 2021 19:51:28 +0000 Subject: [PATCH 006/110] Add nametag background setting and object property (#10937) --- .clang-format | 1 + builtin/settingtypes.txt | 4 ++ doc/lua_api.txt | 18 +++-- games/devtest/mods/testentities/visuals.lua | 16 ++++- src/activeobjectmgr.h | 3 +- src/client/camera.cpp | 33 ++++----- src/client/camera.h | 47 +++++++++---- src/client/content_cao.cpp | 12 ++-- src/defaultsettings.cpp | 1 + src/object_properties.cpp | 22 ++++++ src/object_properties.h | 2 + src/script/common/c_content.cpp | 18 +++++ src/script/common/helper.cpp | 24 ++++--- src/script/common/helper.h | 3 +- src/script/lua_api/l_object.cpp | 29 +++++++- src/util/Optional.h | 77 +++++++++++++++++++++ src/util/serialize.h | 2 +- 17 files changed, 254 insertions(+), 58 deletions(-) create mode 100644 src/util/Optional.h diff --git a/.clang-format b/.clang-format index dc7380ffd..0db8ab167 100644 --- a/.clang-format +++ b/.clang-format @@ -29,3 +29,4 @@ AlignAfterOpenBracket: DontAlign ContinuationIndentWidth: 16 ConstructorInitializerIndentWidth: 16 BreakConstructorInitializers: AfterColon +AlwaysBreakTemplateDeclarations: Yes diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 8b6227b37..f800f71ab 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -451,6 +451,10 @@ keymap_decrease_viewing_range_min (View range decrease key) key - [**Basic] +# Whether nametag backgrounds should be shown by default. +# Mods may still set a background. +show_nametag_backgrounds (Show nametag backgrounds by default) bool true + # Enable vertex buffer objects. # This should greatly improve graphics performance. enable_vbo (VBO) bool true diff --git a/doc/lua_api.txt b/doc/lua_api.txt index a09b98924..a9c3bcdd9 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -6274,15 +6274,21 @@ object you are working with still exists. * `get_nametag_attributes()` * returns a table with the attributes of the nametag of an object * { - color = {a=0..255, r=0..255, g=0..255, b=0..255}, text = "", + color = {a=0..255, r=0..255, g=0..255, b=0..255}, + bgcolor = {a=0..255, r=0..255, g=0..255, b=0..255}, } * `set_nametag_attributes(attributes)` * sets the attributes of the nametag of an object * `attributes`: { - color = ColorSpec, text = "My Nametag", + color = ColorSpec, + -- ^ Text color + bgcolor = ColorSpec or false, + -- ^ Sets background color of nametag + -- `false` will cause the background to be set automatically based on user settings + -- Default: false } #### Lua entity only (no-op for other objects) @@ -6956,9 +6962,13 @@ Player properties need to be saved manually. -- For all other objects, a nil or empty string removes the nametag. -- To hide a nametag, set its color alpha to zero. That will disable it entirely. - nametag_color = , - -- Sets color of nametag + -- Sets text color of nametag + + nametag_bgcolor = , + -- Sets background color of nametag + -- `false` will cause the background to be set automatically based on user settings. + -- Default: false infotext = "", -- By default empty, text to be shown when pointed at object diff --git a/games/devtest/mods/testentities/visuals.lua b/games/devtest/mods/testentities/visuals.lua index e3b758329..e382ec44c 100644 --- a/games/devtest/mods/testentities/visuals.lua +++ b/games/devtest/mods/testentities/visuals.lua @@ -103,23 +103,35 @@ minetest.register_entity("testentities:nametag", { on_activate = function(self, staticdata) if staticdata ~= "" then - self.color = minetest.deserialize(staticdata).color + local data = minetest.deserialize(staticdata) + self.color = data.color + self.bgcolor = data.bgcolor else self.color = { r = math.random(0, 255), g = math.random(0, 255), b = math.random(0, 255), } + + if math.random(0, 10) > 5 then + self.bgcolor = { + r = math.random(0, 255), + g = math.random(0, 255), + b = math.random(0, 255), + a = math.random(0, 255), + } + end end assert(self.color) self.object:set_properties({ nametag = tostring(math.random(1000, 10000)), nametag_color = self.color, + nametag_bgcolor = self.bgcolor, }) end, get_staticdata = function(self) - return minetest.serialize({ color = self.color }) + return minetest.serialize({ color = self.color, bgcolor = self.bgcolor }) end, }) diff --git a/src/activeobjectmgr.h b/src/activeobjectmgr.h index 95e7d3344..aa0538e60 100644 --- a/src/activeobjectmgr.h +++ b/src/activeobjectmgr.h @@ -25,7 +25,8 @@ with this program; if not, write to the Free Software Foundation, Inc., class TestClientActiveObjectMgr; class TestServerActiveObjectMgr; -template class ActiveObjectMgr +template +class ActiveObjectMgr { friend class ::TestClientActiveObjectMgr; friend class ::TestServerActiveObjectMgr; diff --git a/src/client/camera.cpp b/src/client/camera.cpp index 9a08254b4..350b685e1 100644 --- a/src/client/camera.cpp +++ b/src/client/camera.cpp @@ -79,6 +79,7 @@ Camera::Camera(MapDrawControl &draw_control, Client *client): m_cache_fov = std::fmax(g_settings->getFloat("fov"), 45.0f); m_arm_inertia = g_settings->getBool("arm_inertia"); m_nametags.clear(); + m_show_nametag_backgrounds = g_settings->getBool("show_nametag_backgrounds"); } Camera::~Camera() @@ -696,18 +697,14 @@ void Camera::drawNametags() v2u32 screensize = driver->getScreenSize(); for (const Nametag *nametag : m_nametags) { - if (nametag->nametag_color.getAlpha() == 0) { - // Enforce hiding nametag, - // because if freetype is enabled, a grey - // shadow can remain. - continue; - } - v3f pos = nametag->parent_node->getAbsolutePosition() + nametag->nametag_pos * BS; + // Nametags are hidden in GenericCAO::updateNametag() + + v3f pos = nametag->parent_node->getAbsolutePosition() + nametag->pos * BS; f32 transformed_pos[4] = { pos.X, pos.Y, pos.Z, 1.0f }; trans.multiplyWith1x4Matrix(transformed_pos); if (transformed_pos[3] > 0) { std::wstring nametag_colorless = - unescape_translate(utf8_to_wide(nametag->nametag_text)); + unescape_translate(utf8_to_wide(nametag->text)); core::dimension2d textsize = font->getDimension( nametag_colorless.c_str()); f32 zDiv = transformed_pos[3] == 0.0f ? 1.0f : @@ -720,26 +717,22 @@ void Camera::drawNametags() core::rect size(0, 0, textsize.Width, textsize.Height); core::rect bg_size(-2, 0, textsize.Width+2, textsize.Height); - video::SColor textColor = nametag->nametag_color; - - bool darkBackground = textColor.getLuminance() > 186; - video::SColor backgroundColor = darkBackground - ? video::SColor(50, 50, 50, 50) - : video::SColor(50, 255, 255, 255); - driver->draw2DRectangle(backgroundColor, bg_size + screen_pos); + auto bgcolor = nametag->getBgColor(m_show_nametag_backgrounds); + if (bgcolor.getAlpha() != 0) + driver->draw2DRectangle(bgcolor, bg_size + screen_pos); font->draw( - translate_string(utf8_to_wide(nametag->nametag_text)).c_str(), - size + screen_pos, textColor); + translate_string(utf8_to_wide(nametag->text)).c_str(), + size + screen_pos, nametag->textcolor); } } } Nametag *Camera::addNametag(scene::ISceneNode *parent_node, - const std::string &nametag_text, video::SColor nametag_color, - const v3f &pos) + const std::string &text, video::SColor textcolor, + Optional bgcolor, const v3f &pos) { - Nametag *nametag = new Nametag(parent_node, nametag_text, nametag_color, pos); + Nametag *nametag = new Nametag(parent_node, text, textcolor, bgcolor, pos); m_nametags.push_back(nametag); return nametag; } diff --git a/src/client/camera.h b/src/client/camera.h index 16a1961be..6fd8d9aa7 100644 --- a/src/client/camera.h +++ b/src/client/camera.h @@ -25,27 +25,47 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include "util/Optional.h" class LocalPlayer; struct MapDrawControl; class Client; class WieldMeshSceneNode; -struct Nametag { +struct Nametag +{ + scene::ISceneNode *parent_node; + std::string text; + video::SColor textcolor; + Optional bgcolor; + v3f pos; + Nametag(scene::ISceneNode *a_parent_node, - const std::string &a_nametag_text, - const video::SColor &a_nametag_color, - const v3f &a_nametag_pos): + const std::string &text, + const video::SColor &textcolor, + const Optional &bgcolor, + const v3f &pos): parent_node(a_parent_node), - nametag_text(a_nametag_text), - nametag_color(a_nametag_color), - nametag_pos(a_nametag_pos) + text(text), + textcolor(textcolor), + bgcolor(bgcolor), + pos(pos) { } - scene::ISceneNode *parent_node; - std::string nametag_text; - video::SColor nametag_color; - v3f nametag_pos; + + video::SColor getBgColor(bool use_fallback) const + { + if (bgcolor) + return bgcolor.value(); + else if (!use_fallback) + return video::SColor(0, 0, 0, 0); + else if (textcolor.getLuminance() > 186) + // Dark background for light text + return video::SColor(50, 50, 50, 50); + else + // Light background for dark text + return video::SColor(50, 255, 255, 255); + } }; enum CameraMode {CAMERA_MODE_FIRST, CAMERA_MODE_THIRD, CAMERA_MODE_THIRD_FRONT}; @@ -164,8 +184,8 @@ public: } Nametag *addNametag(scene::ISceneNode *parent_node, - const std::string &nametag_text, video::SColor nametag_color, - const v3f &pos); + const std::string &text, video::SColor textcolor, + Optional bgcolor, const v3f &pos); void removeNametag(Nametag *nametag); @@ -245,4 +265,5 @@ private: bool m_arm_inertia; std::list m_nametags; + bool m_show_nametag_backgrounds; }; diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index c65977b44..97ae9afc4 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -934,7 +934,7 @@ void GenericCAO::updateNametag() if (m_is_local_player) // No nametag for local player return; - if (m_prop.nametag.empty()) { + if (m_prop.nametag.empty() || m_prop.nametag_color.getAlpha() == 0) { // Delete nametag if (m_nametag) { m_client->getCamera()->removeNametag(m_nametag); @@ -952,12 +952,14 @@ void GenericCAO::updateNametag() if (!m_nametag) { // Add nametag m_nametag = m_client->getCamera()->addNametag(node, - m_prop.nametag, m_prop.nametag_color, pos); + m_prop.nametag, m_prop.nametag_color, + m_prop.nametag_bgcolor, pos); } else { // Update nametag - m_nametag->nametag_text = m_prop.nametag; - m_nametag->nametag_color = m_prop.nametag_color; - m_nametag->nametag_pos = pos; + m_nametag->text = m_prop.nametag; + m_nametag->textcolor = m_prop.nametag_color; + m_nametag->bgcolor = m_prop.nametag_bgcolor; + m_nametag->pos = pos; } } diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 41c4922a4..cda953082 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -240,6 +240,7 @@ void set_default_settings() #endif settings->setDefault("enable_particles", "true"); settings->setDefault("arm_inertia", "true"); + settings->setDefault("show_nametag_backgrounds", "true"); settings->setDefault("enable_minimap", "true"); settings->setDefault("minimap_shape_round", "true"); diff --git a/src/object_properties.cpp b/src/object_properties.cpp index f31773060..2eebc27d6 100644 --- a/src/object_properties.cpp +++ b/src/object_properties.cpp @@ -24,6 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/basic_macros.h" #include +static const video::SColor NULL_BGCOLOR{0, 1, 1, 1}; + ObjectProperties::ObjectProperties() { textures.emplace_back("unknown_object.png"); @@ -62,6 +64,13 @@ std::string ObjectProperties::dump() os << ", nametag=" << nametag; os << ", nametag_color=" << "\"" << nametag_color.getAlpha() << "," << nametag_color.getRed() << "," << nametag_color.getGreen() << "," << nametag_color.getBlue() << "\" "; + + if (nametag_bgcolor) + os << ", nametag_bgcolor=" << "\"" << nametag_color.getAlpha() << "," << nametag_color.getRed() + << "," << nametag_color.getGreen() << "," << nametag_color.getBlue() << "\" "; + else + os << ", nametag_bgcolor=null "; + os << ", selectionbox=" << PP(selectionbox.MinEdge) << "," << PP(selectionbox.MaxEdge); os << ", pointable=" << pointable; os << ", static_save=" << static_save; @@ -121,6 +130,13 @@ void ObjectProperties::serialize(std::ostream &os) const writeU8(os, shaded); writeU8(os, show_on_minimap); + if (!nametag_bgcolor) + writeARGB8(os, NULL_BGCOLOR); + else if (nametag_bgcolor.value().getAlpha() == 0) + writeARGB8(os, video::SColor(0, 0, 0, 0)); + else + writeARGB8(os, nametag_bgcolor.value()); + // Add stuff only at the bottom. // Never remove anything, because we don't want new versions of this } @@ -182,5 +198,11 @@ void ObjectProperties::deSerialize(std::istream &is) if (is.eof()) return; show_on_minimap = tmp; + + auto bgcolor = readARGB8(is); + if (bgcolor != NULL_BGCOLOR) + nametag_bgcolor = bgcolor; + else + nametag_bgcolor = nullopt; } catch (SerializationError &e) {} } diff --git a/src/object_properties.h b/src/object_properties.h index adb483527..db28eebfd 100644 --- a/src/object_properties.h +++ b/src/object_properties.h @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include "util/Optional.h" struct ObjectProperties { @@ -53,6 +54,7 @@ struct ObjectProperties s8 glow = 0; std::string nametag = ""; video::SColor nametag_color = video::SColor(255, 255, 255, 255); + Optional nametag_bgcolor = nullopt; f32 automatic_face_movement_max_rotation_per_sec = -1.0f; std::string infotext; //! For dropped items, this contains item information. diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 2f9fbd74b..6995f6b61 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -312,6 +312,17 @@ void read_object_properties(lua_State *L, int index, prop->nametag_color = color; } lua_pop(L, 1); + lua_getfield(L, -1, "nametag_bgcolor"); + if (!lua_isnil(L, -1)) { + if (lua_toboolean(L, -1)) { + video::SColor color; + if (read_color(L, -1, &color)) + prop->nametag_bgcolor = color; + } else { + prop->nametag_bgcolor = nullopt; + } + } + lua_pop(L, 1); lua_getfield(L, -1, "automatic_face_movement_max_rotation_per_sec"); if (lua_isnumber(L, -1)) { @@ -403,6 +414,13 @@ void push_object_properties(lua_State *L, ObjectProperties *prop) lua_setfield(L, -2, "nametag"); push_ARGB8(L, prop->nametag_color); lua_setfield(L, -2, "nametag_color"); + if (prop->nametag_bgcolor) { + push_ARGB8(L, prop->nametag_bgcolor.value()); + lua_setfield(L, -2, "nametag_bgcolor"); + } else { + lua_pushboolean(L, false); + lua_setfield(L, -2, "nametag_bgcolor"); + } lua_pushnumber(L, prop->automatic_face_movement_max_rotation_per_sec); lua_setfield(L, -2, "automatic_face_movement_max_rotation_per_sec"); lua_pushlstring(L, prop->infotext.c_str(), prop->infotext.size()); diff --git a/src/script/common/helper.cpp b/src/script/common/helper.cpp index 488144790..fbf24e1b7 100644 --- a/src/script/common/helper.cpp +++ b/src/script/common/helper.cpp @@ -50,22 +50,26 @@ bool LuaHelper::isNaN(lua_State *L, int idx) /* * Read template functions */ -template <> bool LuaHelper::readParam(lua_State *L, int index) +template <> +bool LuaHelper::readParam(lua_State *L, int index) { return lua_toboolean(L, index) != 0; } -template <> s16 LuaHelper::readParam(lua_State *L, int index) +template <> +s16 LuaHelper::readParam(lua_State *L, int index) { return lua_tonumber(L, index); } -template <> int LuaHelper::readParam(lua_State *L, int index) +template <> +int LuaHelper::readParam(lua_State *L, int index) { return luaL_checkint(L, index); } -template <> float LuaHelper::readParam(lua_State *L, int index) +template <> +float LuaHelper::readParam(lua_State *L, int index) { if (isNaN(L, index)) throw LuaError("NaN value is not allowed."); @@ -73,7 +77,8 @@ template <> float LuaHelper::readParam(lua_State *L, int index) return (float)luaL_checknumber(L, index); } -template <> v2s16 LuaHelper::readParam(lua_State *L, int index) +template <> +v2s16 LuaHelper::readParam(lua_State *L, int index) { v2s16 p; CHECK_POS_TAB(index); @@ -88,7 +93,8 @@ template <> v2s16 LuaHelper::readParam(lua_State *L, int index) return p; } -template <> v2f LuaHelper::readParam(lua_State *L, int index) +template <> +v2f LuaHelper::readParam(lua_State *L, int index) { v2f p; CHECK_POS_TAB(index); @@ -103,7 +109,8 @@ template <> v2f LuaHelper::readParam(lua_State *L, int index) return p; } -template <> v3f LuaHelper::readParam(lua_State *L, int index) +template <> +v3f LuaHelper::readParam(lua_State *L, int index) { v3f p; CHECK_POS_TAB(index); @@ -122,7 +129,8 @@ template <> v3f LuaHelper::readParam(lua_State *L, int index) return p; } -template <> std::string LuaHelper::readParam(lua_State *L, int index) +template <> +std::string LuaHelper::readParam(lua_State *L, int index) { size_t length; std::string result; diff --git a/src/script/common/helper.h b/src/script/common/helper.h index 7a794dc9b..6491e73cf 100644 --- a/src/script/common/helper.h +++ b/src/script/common/helper.h @@ -38,7 +38,8 @@ protected: * @param index Lua Index to read * @return read value from Lua */ - template static T readParam(lua_State *L, int index); + template + static T readParam(lua_State *L, int index); /** * Read a value using a template type T from Lua State L and index diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index 07aa3f7c9..8ae99b929 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -737,6 +737,18 @@ int ObjectRef::l_set_nametag_attributes(lua_State *L) } lua_pop(L, 1); + lua_getfield(L, -1, "bgcolor"); + if (!lua_isnil(L, -1)) { + if (lua_toboolean(L, -1)) { + video::SColor color; + if (read_color(L, -1, &color)) + prop->nametag_bgcolor = color; + } else { + prop->nametag_bgcolor = nullopt; + } + } + lua_pop(L, 1); + std::string nametag = getstringfield_default(L, 2, "text", ""); prop->nametag = nametag; @@ -758,13 +770,24 @@ int ObjectRef::l_get_nametag_attributes(lua_State *L) if (!prop) return 0; - video::SColor color = prop->nametag_color; - lua_newtable(L); - push_ARGB8(L, color); + + push_ARGB8(L, prop->nametag_color); lua_setfield(L, -2, "color"); + + if (prop->nametag_bgcolor) { + push_ARGB8(L, prop->nametag_bgcolor.value()); + lua_setfield(L, -2, "bgcolor"); + } else { + lua_pushboolean(L, false); + lua_setfield(L, -2, "bgcolor"); + } + lua_pushstring(L, prop->nametag.c_str()); lua_setfield(L, -2, "text"); + + + return 1; } diff --git a/src/util/Optional.h b/src/util/Optional.h new file mode 100644 index 000000000..9c2842b43 --- /dev/null +++ b/src/util/Optional.h @@ -0,0 +1,77 @@ +/* +Minetest +Copyright (C) 2021 rubenwardy + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include "debug.h" + +struct nullopt_t +{ +}; +constexpr nullopt_t nullopt{}; + +/** + * An implementation of optional for C++11, which aims to be + * compatible with a subset of std::optional features. + * + * Unfortunately, Minetest doesn't use C++17 yet. + * + * @tparam T The type to be stored + */ +template +class Optional +{ + bool m_has_value = false; + T m_value; + +public: + Optional() noexcept {} + Optional(nullopt_t) noexcept {} + Optional(const T &value) noexcept : m_has_value(true), m_value(value) {} + Optional(const Optional &other) noexcept : + m_has_value(other.m_has_value), m_value(other.m_value) + { + } + + void operator=(nullopt_t) noexcept { m_has_value = false; } + + void operator=(const Optional &other) noexcept + { + m_has_value = other.m_has_value; + m_value = other.m_value; + } + + T &value() + { + FATAL_ERROR_IF(!m_has_value, "optional doesn't have value"); + return m_value; + } + + const T &value() const + { + FATAL_ERROR_IF(!m_has_value, "optional doesn't have value"); + return m_value; + } + + const T &value_or(const T &def) const { return m_has_value ? m_value : def; } + + bool has_value() const noexcept { return m_has_value; } + + explicit operator bool() const { return m_has_value; } +}; diff --git a/src/util/serialize.h b/src/util/serialize.h index b3ec28eab..15bdd050d 100644 --- a/src/util/serialize.h +++ b/src/util/serialize.h @@ -290,7 +290,7 @@ inline void writeS8(u8 *data, s8 i) inline void writeS16(u8 *data, s16 i) { - writeU16(data, (u16)i); + writeU16(data, (u16)i); } inline void writeS32(u8 *data, s32 i) From b2ab5fd1615ac5f907e43992d0905a56cddf798f Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein <54945686+EliasFleckenstein03@users.noreply.github.com> Date: Thu, 18 Feb 2021 15:39:04 +0100 Subject: [PATCH 007/110] Replace deprecated call to add_player_velocity in builtin (#10968) --- builtin/game/knockback.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builtin/game/knockback.lua b/builtin/game/knockback.lua index b5c4cbc5a..a937aa186 100644 --- a/builtin/game/knockback.lua +++ b/builtin/game/knockback.lua @@ -42,5 +42,5 @@ core.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool return -- barely noticeable, so don't even send end - player:add_player_velocity(kdir) + player:add_velocity(kdir) end) From e441ab9675238b9530cf6ab1911fa9b5fd4ae13e Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Fri, 19 Feb 2021 18:45:36 +0000 Subject: [PATCH 008/110] Fix world-aligned node rendering at bottom (#10742) --- src/client/mapblock_mesh.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/client/mapblock_mesh.cpp b/src/client/mapblock_mesh.cpp index d78a86b2d..167e1e3ec 100644 --- a/src/client/mapblock_mesh.cpp +++ b/src/client/mapblock_mesh.cpp @@ -404,7 +404,7 @@ static void getNodeVertexDirs(const v3s16 &dir, v3s16 *vertex_dirs) static void getNodeTextureCoords(v3f base, const v3f &scale, const v3s16 &dir, float *u, float *v) { - if (dir.X > 0 || dir.Y > 0 || dir.Z < 0) + if (dir.X > 0 || dir.Y != 0 || dir.Z < 0) base -= scale; if (dir == v3s16(0,0,1)) { *u = -base.X - 1; @@ -422,8 +422,8 @@ static void getNodeTextureCoords(v3f base, const v3f &scale, const v3s16 &dir, f *u = base.X + 1; *v = -base.Z - 2; } else if (dir == v3s16(0,-1,0)) { - *u = base.X; - *v = base.Z; + *u = base.X + 1; + *v = base.Z + 1; } } From c12e9cdcba6b4183de6df4fd05f61a06f804642c Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Fri, 19 Feb 2021 18:59:48 +0000 Subject: [PATCH 009/110] Fail gracefully if main_menu_script has bad value (#10938) Builtin: Move :close() before dofile --- builtin/init.lua | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/builtin/init.lua b/builtin/init.lua index 75bb3db85..89b1fdc64 100644 --- a/builtin/init.lua +++ b/builtin/init.lua @@ -39,9 +39,20 @@ if INIT == "game" then assert(not core.get_http_api) elseif INIT == "mainmenu" then local mm_script = core.settings:get("main_menu_script") + local custom_loaded = false if mm_script and mm_script ~= "" then - dofile(mm_script) - else + local testfile = io.open(mm_script, "r") + if testfile then + testfile:close() + dofile(mm_script) + custom_loaded = true + core.log("info", "Loaded custom main menu script: "..mm_script) + else + core.log("error", "Failed to load custom main menu script: "..mm_script) + core.log("info", "Falling back to default main menu script") + end + end + if not custom_loaded then dofile(core.get_mainmenu_path() .. DIR_DELIM .. "init.lua") end elseif INIT == "async" then From 051e4c2b00a30c496b5545a6f0b01c9a14e937a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Sun, 21 Feb 2021 20:02:23 +0100 Subject: [PATCH 010/110] Fix wrong reported item counts for inventory actions using Shift-Move (#10930) --- games/devtest/mods/chest/init.lua | 16 +++++++++++++-- src/inventorymanager.cpp | 33 +++++++++++++++++++++++++++---- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/games/devtest/mods/chest/init.lua b/games/devtest/mods/chest/init.lua index fc92bfdd1..5798c13e7 100644 --- a/games/devtest/mods/chest/init.lua +++ b/games/devtest/mods/chest/init.lua @@ -23,6 +23,18 @@ minetest.register_node("chest:chest", { local inv = meta:get_inventory() return inv:is_empty("main") end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.chat_send_player(player:get_player_name(), "Allow put: " .. stack:to_string()) + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.chat_send_player(player:get_player_name(), "Allow take: " .. stack:to_string()) + return stack:get_count() + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.chat_send_player(player:get_player_name(), "On put: " .. stack:to_string()) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.chat_send_player(player:get_player_name(), "On take: " .. stack:to_string()) + end, }) - - diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp index 635bd2e4b..554708e8e 100644 --- a/src/inventorymanager.cpp +++ b/src/inventorymanager.cpp @@ -301,6 +301,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame if (!list_to->getItem(dest_i).empty()) { to_i = dest_i; apply(mgr, player, gamedef); + assert(move_count <= count); count -= move_count; } } @@ -352,10 +353,12 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame bool allow_swap = !list_to->itemFits(to_i, src_item, &restitem) && restitem.count == src_item.count && !caused_by_move_somewhere; + move_count = src_item.count - restitem.count; // Shift-click: Cannot fill this stack, proceed with next slot - if (caused_by_move_somewhere && restitem.count == src_item.count) + if (caused_by_move_somewhere && move_count == 0) { return; + } if (allow_swap) { // Swap will affect the entire stack if it can performed. @@ -384,9 +387,16 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame src_can_take_count = dst_can_put_count = 0; } else { // Take from one inventory, put into another + int src_item_count = src_item.count; + if (caused_by_move_somewhere) + // When moving somewhere: temporarily use the actual movable stack + // size to ensure correct callback execution. + src_item.count = move_count; dst_can_put_count = allowPut(src_item, player); src_can_take_count = allowTake(src_item, player); - + if (caused_by_move_somewhere) + // Reset source item count + src_item.count = src_item_count; bool swap_expected = allow_swap; allow_swap = allow_swap && (src_can_take_count == -1 || src_can_take_count >= src_item.count) @@ -416,12 +426,17 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame count = src_can_take_count; if (dst_can_put_count != -1 && count > dst_can_put_count) count = dst_can_put_count; + /* Limit according to source item count */ if (count > list_from->getItem(from_i).count) count = list_from->getItem(from_i).count; /* If no items will be moved, don't go further */ if (count == 0) { + if (caused_by_move_somewhere) + // Set move count to zero, as no items have been moved + move_count = 0; + // Undo client prediction. See 'clientApply' if (from_inv.type == InventoryLocation::PLAYER) list_from->setModified(); @@ -438,6 +453,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame <<" list=\""<mode = MinimapModeDef{MINIMAP_TYPE_OFF, gettext("Minimap hidden"), 0, 0, ""}; m_current_mode_index = 0; } @@ -330,25 +330,26 @@ void Minimap::addMode(MinimapModeDef mode) if (mode.label == "") { switch (mode.type) { case MINIMAP_TYPE_OFF: - mode.label = N_("Minimap hidden"); + mode.label = gettext("Minimap hidden"); break; case MINIMAP_TYPE_SURFACE: - mode.label = N_("Minimap in surface mode, Zoom x%d"); + mode.label = gettext("Minimap in surface mode, Zoom x%d"); if (mode.map_size > 0) zoom = 256 / mode.map_size; break; case MINIMAP_TYPE_RADAR: - mode.label = N_("Minimap in radar mode, Zoom x%d"); + mode.label = gettext("Minimap in radar mode, Zoom x%d"); if (mode.map_size > 0) zoom = 512 / mode.map_size; break; case MINIMAP_TYPE_TEXTURE: - mode.label = N_("Minimap in texture mode"); + mode.label = gettext("Minimap in texture mode"); break; default: break; } } + // else: Custom labels need mod-provided client-side translation if (zoom >= 0) { char label_buf[1024]; From 1539c377de9b94af57eab1ac52bd698fb1c97e1b Mon Sep 17 00:00:00 2001 From: Bernd Ritter Date: Sun, 31 Jan 2021 14:51:25 +0000 Subject: [PATCH 012/110] Translated using Weblate (German) Currently translated at 99.6% (1348 of 1353 strings) --- po/de/minetest.po | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index 0a202df74..bd0aaca7e 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: German (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-06-15 22:41+0000\n" -"Last-Translator: Wuzzy \n" +"PO-Revision-Date: 2021-02-01 05:52+0000\n" +"Last-Translator: Bernd Ritter \n" "Language-Team: German \n" "Language: de\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.1\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -7001,6 +7001,14 @@ msgid "" "If set to 0, MSAA is disabled.\n" "A restart is required after changing this option." msgstr "" +"Benutze multi-sample antialiasing (MSAA) um Blockecken zu glätten.\n" +"Dieser Algorithmus glättet das 3D-Sichtfeld während das Bild scharf bleibt,\n" +"beeinträchtigt jedoch nicht die Textureninnenflächen\n" +"(was sich insbesondere bei transparenten Texturen bemerkbar macht).\n" +"Sichtbare Lücken erscheinen zwischen Blöcken wenn Shader ausgeschaltet sind.." +"\n" +"Wenn der Wert auf 0 steht, ist MSAA deaktiviert..\n" +"Ein Neustart ist erforderlich, nachdem diese Option geändert worden ist.." #: src/settings_translation_file.cpp msgid "Use trilinear filtering when scaling textures." From 25e8e2dcdf0af53326bdf79d2860ae8733ac305f Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 30 Jan 2021 21:40:01 +0000 Subject: [PATCH 013/110] Translated using Weblate (German) Currently translated at 99.6% (1348 of 1353 strings) --- po/de/minetest.po | 263 ++++++++++++++++++++++++---------------------- 1 file changed, 135 insertions(+), 128 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index bd0aaca7e..f98bf8f2a 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" "PO-Revision-Date: 2021-02-01 05:52+0000\n" -"Last-Translator: Bernd Ritter \n" +"Last-Translator: sfan5 \n" "Language-Team: German \n" "Language: de\n" @@ -52,11 +52,11 @@ msgstr "Protokollversion stimmt nicht überein. " #: builtin/mainmenu/common.lua msgid "Server enforces protocol version $1. " -msgstr "Server erfordert Protokollversion $1. " +msgstr "Der Server erfordert Protokollversion $1. " #: builtin/mainmenu/common.lua msgid "Server supports protocol versions between $1 and $2. " -msgstr "Server unterstützt Protokollversionen zwischen $1 und $2. " +msgstr "Der Server unterstützt die Protokollversionen von $1 bis $2. " #: builtin/mainmenu/common.lua msgid "We only support protocol version $1." @@ -103,8 +103,8 @@ msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "characters [a-z0-9_] are allowed." msgstr "" -"Fehler beim Aktivieren der Mod „$1“, da sie unerlaubte Zeichen enthält. Nur " -"die folgenden Zeichen sind erlaubt: [a-z0-9_]." +"Die Modifikation „$1“ konnte nicht aktiviert werden, da sie unzulässige " +"Zeichen enthält. Nur die folgenden Zeichen sind erlaubt: [a-z0-9_]." #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" @@ -124,7 +124,7 @@ msgstr "Keine Spielbeschreibung verfügbar." #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" -msgstr "Keine harten Abhängigkeiten" +msgstr "Keine notwendigen Abhängigkeiten" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." @@ -145,7 +145,7 @@ msgstr "Speichern" #: builtin/mainmenu/dlg_config_world.lua msgid "World:" -msgstr "Welt:" +msgstr "Weltname:" #: builtin/mainmenu/dlg_config_world.lua msgid "enabled" @@ -153,52 +153,51 @@ msgstr "Aktiviert" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "„$1“ existiert bereits. Wollen Sie es überschreiben?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "$1 und $2 Abhängigkeiten werden installiert." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 von $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 laden herunter,\n" +"$2 warten" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Herunterladen …" +msgstr "$1 laden herunter…" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 benötigte Abhängigkeiten konnten nicht gefunden werden." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 wird installiert und $2 Abhängigkeiten werden übersprungen." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "Alle Pakete" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "Taste bereits in Benutzung" +msgstr "Bereits installiert" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Zurück zum Hauptmenü" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Spiel hosten" +msgstr "Basis-Spiel:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" @@ -223,14 +222,12 @@ msgid "Install" msgstr "Installieren" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Installieren" +msgstr "$1 installieren" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Optionale Abhängigkeiten:" +msgstr "Fehlende Abhängigkeiten installieren" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -239,33 +236,31 @@ msgstr "Mods" #: builtin/mainmenu/dlg_contentstore.lua msgid "No packages could be retrieved" -msgstr "Es konnten keine Pakete empfangen werden" +msgstr "Es konnten keine Pakete abgerufen werden" #: builtin/mainmenu/dlg_contentstore.lua msgid "No results" msgstr "Keine Treffer" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Aktualisieren" +msgstr "Keine Updates" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Not found" -msgstr "Ton verstummen" +msgstr "Nicht gefunden" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Überschreiben" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Bitte prüfen Sie ob das Basis-Spiel richtig ist." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "Eingereiht" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -281,11 +276,11 @@ msgstr "Aktualisieren" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Alle aktualisieren [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Mehr Informationen im Webbrowser anschauen" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -378,7 +373,7 @@ msgstr "Seen" #: builtin/mainmenu/dlg_create_world.lua msgid "Low humidity and high heat causes shallow or dry rivers" msgstr "" -"Niedrige Luftfeuchtigkeit und hohe Hitze erzeugen seichte oder " +"Niedrige Luftfeuchtigkeit und große Wärme erzeugen seichte oder " "ausgetrocknete Flüsse" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp @@ -399,7 +394,7 @@ msgstr "Berge" #: builtin/mainmenu/dlg_create_world.lua msgid "Mud flow" -msgstr "Schlammfließen" +msgstr "Erosion" #: builtin/mainmenu/dlg_create_world.lua msgid "Network of tunnels and caves" @@ -411,11 +406,11 @@ msgstr "Kein Spiel ausgewählt" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces heat with altitude" -msgstr "Reduziert Hitze mit der Höhe" +msgstr "Reduziert die Wärme mit der Höhe" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces humidity with altitude" -msgstr "Reduziert Luftfeuchte mit der Höhe" +msgstr "Reduziert Luftfeuchtigkeit mit der Höhe" #: builtin/mainmenu/dlg_create_world.lua msgid "Rivers" @@ -423,12 +418,12 @@ msgstr "Flüsse" #: builtin/mainmenu/dlg_create_world.lua msgid "Sea level rivers" -msgstr "Flüsse am Meeresspiegel" +msgstr "Flüsse auf Meeresspiegelhöhe" #: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" -msgstr "Seed" +msgstr "Startwert (Seed)" #: builtin/mainmenu/dlg_create_world.lua msgid "Smooth transition between biomes" @@ -439,13 +434,13 @@ msgid "" "Structures appearing on the terrain (no effect on trees and jungle grass " "created by v6)" msgstr "" -"Gebäude, die auf dem Gelände auftauchen (keine Wirkung auf von v6 erzeugte " -"Bäume u. Dschungelgras)" +"Strukturen, die auf dem Gelände auftauchen (keine Wirkung auf von v6 " +"erzeugte Bäume u. Dschungelgras)" #: builtin/mainmenu/dlg_create_world.lua msgid "Structures appearing on the terrain, typically trees and plants" msgstr "" -"Gebäude, die auf dem Gelände auftauchen, üblicherweise Bäume und Pflanzen" +"Strukturen, die auf dem Gelände auftauchen, üblicherweise Bäume und Pflanzen" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert" @@ -489,7 +484,7 @@ msgstr "Es sind keine Spiele installiert." #: builtin/mainmenu/dlg_delete_content.lua msgid "Are you sure you want to delete \"$1\"?" -msgstr "Sind Sie sich sicher, dass Sie „$1“ löschen wollen?" +msgstr "Sind Sie sicher, dass „$1“ gelöscht werden soll?" #: builtin/mainmenu/dlg_delete_content.lua #: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua @@ -499,7 +494,7 @@ msgstr "Entfernen" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: failed to delete \"$1\"" -msgstr "pkgmgr: Fehler beim Löschen von „$1“" +msgstr "pkgmgr: Fehler beim Entfernen von „$1“" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: invalid path \"$1\"" @@ -507,7 +502,7 @@ msgstr "pkgmgr: Ungültiger Pfad „$1“" #: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" -msgstr "Welt „$1“ löschen?" +msgstr "Die Welt „$1“ löschen?" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -547,7 +542,7 @@ msgstr "Deaktiviert" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Edit" -msgstr "Ändern" +msgstr "Bearbeiten" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Enabled" @@ -599,7 +594,7 @@ msgstr "Datei auswählen" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Show technical names" -msgstr "Technische Namen zeigen" +msgstr "Techn. Bezeichnung zeigen" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "The value must be at least $1." @@ -670,12 +665,12 @@ msgstr "Fehler bei der Installation von $1 nach $2" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find real mod name for: $1" -msgstr "Mod installieren: Echter Modname für $1 konnte nicht gefunden werden" +msgstr "Modinstallation: Richtiger Modname für $1 konnte nicht gefunden werden" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -"Mod installieren: Geeigneter Verzeichnisname für Modpack $1 konnte nicht " +"Modinstallation: Geeigneter Verzeichnisname für Modpack $1 konnte nicht " "gefunden werden" #: builtin/mainmenu/pkgmgr.lua @@ -693,19 +688,19 @@ msgstr "Keine gültige Mod oder Modpack gefunden" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a $1 as a texture pack" -msgstr "Fehler bei der Installation von $1 als Texturenpaket" +msgstr "Fehler bei der Texturenpaket-Installation von $1" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a game as a $1" -msgstr "Fehler bei der Installation eines Spiels als $1" +msgstr "Fehler bei der Spiel-Installation von $1" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a mod as a $1" -msgstr "Fehler bei der Installation einer Mod als $1" +msgstr "Fehler bei der Mod-Installation von $1" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a modpack as a $1" -msgstr "Fehler bei der Installation eines Modpacks als $1" +msgstr "Fehler bei der Modpack-Installation von $1" #: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp msgid "Loading..." @@ -714,12 +709,12 @@ msgstr "Lädt …" #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -"Versuchen Sie, die öffentliche Serverliste neu zu laden und prüfen Sie Ihre " +"Versuchen Sie die öffentliche Serverliste neu zu laden und prüfen Sie Ihre " "Internetverbindung." #: builtin/mainmenu/tab_content.lua msgid "Browse online content" -msgstr "Online-Inhalte durchsuchen" +msgstr "Onlineinhalte durchsuchen" #: builtin/mainmenu/tab_content.lua msgid "Content" @@ -770,15 +765,16 @@ msgid "Credits" msgstr "Mitwirkende" #: builtin/mainmenu/tab_credits.lua -#, fuzzy msgid "Open User Data Directory" -msgstr "Verzeichnis auswählen" +msgstr "Benutzerdatenverzeichnis öffnen" #: builtin/mainmenu/tab_credits.lua msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Öffnet das Verzeichnis, welches die Welten, Spiele, Mods und\n" +"Texturenpakete des Benutzers enthält im Datei-Manager." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -790,7 +786,7 @@ msgstr "Ehemalige Hauptentwickler" #: builtin/mainmenu/tab_local.lua msgid "Announce Server" -msgstr "Server ankündigen" +msgstr "Server veröffentlichen" #: builtin/mainmenu/tab_local.lua msgid "Bind Address" @@ -814,11 +810,11 @@ msgstr "Server hosten" #: builtin/mainmenu/tab_local.lua msgid "Install games from ContentDB" -msgstr "Spiele von ContentDB installieren" +msgstr "Spiele aus ContentDB installieren" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "Name" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -829,9 +825,8 @@ msgid "No world created or selected!" msgstr "Keine Welt angegeben oder ausgewählt!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Password" -msgstr "Neues Passwort" +msgstr "Passwort" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -842,9 +837,8 @@ msgid "Port" msgstr "Port" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "Welt wählen:" +msgstr "Mods auswählen" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -925,7 +919,7 @@ msgstr "Kantenglättung:" #: builtin/mainmenu/tab_settings.lua msgid "Autosave Screen Size" -msgstr "Monitorgröße automatisch merken" +msgstr "Fenstergröße merken" #: builtin/mainmenu/tab_settings.lua msgid "Bilinear Filter" @@ -933,7 +927,7 @@ msgstr "Bilinearer Filter" #: builtin/mainmenu/tab_settings.lua src/client/game.cpp msgid "Change Keys" -msgstr "Tasten ändern" +msgstr "Tastenbelegung" #: builtin/mainmenu/tab_settings.lua msgid "Connected Glass" @@ -957,11 +951,11 @@ msgstr "Kein Filter" #: builtin/mainmenu/tab_settings.lua msgid "No Mipmap" -msgstr "Keine Mipmap" +msgstr "Kein Mipmapping" #: builtin/mainmenu/tab_settings.lua msgid "Node Highlighting" -msgstr "Blöcke leuchten" +msgstr "Blöcke aufhellen" #: builtin/mainmenu/tab_settings.lua msgid "Node Outlining" @@ -996,9 +990,8 @@ msgid "Shaders" msgstr "Shader" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Shaders (experimental)" -msgstr "Schwebeländer (experimentell)" +msgstr "Shader (experimentell)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" @@ -1018,11 +1011,11 @@ msgstr "Texturierung:" #: builtin/mainmenu/tab_settings.lua msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Um Shader zu benutzen, muss der OpenGL-Treiber benutzt werden." +msgstr "Um Shader zu aktivieren, muss der OpenGL-Treiber genutzt werden." #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" -msgstr "Tone-Mapping" +msgstr "Dynamikkompression" #: builtin/mainmenu/tab_settings.lua msgid "Touchthreshold: (px)" @@ -1078,7 +1071,7 @@ msgstr "Spiel konnte nicht gefunden oder geladen werden: \"" #: src/client/clientlauncher.cpp msgid "Invalid gamespec." -msgstr "Ungültige Spielspezif." +msgstr "Ungültige Spielspezifikationen" #: src/client/clientlauncher.cpp msgid "Main Menu" @@ -1090,7 +1083,7 @@ msgstr "Keine Welt ausgewählt und keine Adresse angegeben. Nichts zu tun." #: src/client/clientlauncher.cpp msgid "Player name too long." -msgstr "Spielername zu lang." +msgstr "Der Spielername ist zu lang." #: src/client/clientlauncher.cpp msgid "Please choose a name!" @@ -1098,7 +1091,7 @@ msgstr "Bitte wählen Sie einen Namen!" #: src/client/clientlauncher.cpp msgid "Provided password file failed to open: " -msgstr "Fehler beim öffnen der ausgewählten Passwort-Datei: " +msgstr "Fehler beim Öffnen der angegebenen Passwortdatei: " #: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " @@ -1122,7 +1115,7 @@ msgid "" "Check debug.txt for details." msgstr "" "\n" -"Siehe debug.txt für Details." +"Für mehr Details siehe debug.txt." #: src/client/game.cpp msgid "- Address: " @@ -1198,7 +1191,7 @@ msgid "Continue" msgstr "Weiter" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1221,12 +1214,12 @@ msgstr "" "- %s: Nach links\n" "- %s: Nach rechts\n" "- %s: Springen/klettern\n" +"- %s: Graben/Schlagen\n" +"- %s: Bauen/Benutzen\n" "- %s: Kriechen/runter\n" "- %s: Gegenstand wegwerfen\n" "- %s: Inventar\n" "- Maus: Drehen/Umschauen\n" -"- Maus links: Graben/Schlagen\n" -"- Maus rechts: Bauen/Benutzen\n" "- Mausrad: Gegenstand wählen\n" "- %s: Chat\n" @@ -1248,7 +1241,7 @@ msgstr "Debug-Infos angezeigt" #: src/client/game.cpp msgid "Debug info, profiler graph, and wireframe hidden" -msgstr "Debug-Infos, Profiler-Graph und Drahtmodell verborgen" +msgstr "Debug-Infos, Profiler und Drahtgitter deaktiviert" #: src/client/game.cpp msgid "" @@ -1288,7 +1281,7 @@ msgstr "Unbegrenzte Sichtweite aktiviert" #: src/client/game.cpp msgid "Exit to Menu" -msgstr "Hauptmenü" +msgstr "Zum Hauptmenü" #: src/client/game.cpp msgid "Exit to OS" @@ -1340,7 +1333,7 @@ msgstr "Gehosteter Server" #: src/client/game.cpp msgid "Item definitions..." -msgstr "Gegenstands-Definitionen …" +msgstr "Gegenstandsdefinitionen …" #: src/client/game.cpp msgid "KiB/s" @@ -1416,7 +1409,7 @@ msgstr "Tonlautstärke" #: src/client/game.cpp msgid "Sound muted" -msgstr "Ton verstummt" +msgstr "Ton stummgeschaltet" #: src/client/game.cpp msgid "Sound system is disabled" @@ -1428,7 +1421,7 @@ msgstr "Tonsystem ist in diesem Build nicht unterstützt" #: src/client/game.cpp msgid "Sound unmuted" -msgstr "Ton nicht mehr verstummt" +msgstr "Ton nicht mehr stumm" #: src/client/game.cpp #, c-format @@ -1452,7 +1445,7 @@ msgstr "Lautstärke auf %d%% gesetzt" #: src/client/game.cpp msgid "Wireframe shown" -msgstr "Drahtmodell angezeigt" +msgstr "Drahtmodell aktiv" #: src/client/game.cpp msgid "Zoom currently disabled by game or mod" @@ -1755,19 +1748,18 @@ msgid "Minimap hidden" msgstr "Übersichtskarte verborgen" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "Übersichtskarte im Radarmodus, Zoom ×1" +msgstr "Übersichtskarte im Radarmodus, Zoom ×%d" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "Übersichtskarte im Bodenmodus, Zoom ×1" +msgstr "Übersichtskarte im Bodenmodus, Zoom ×%d" #: src/client/minimap.cpp -#, fuzzy msgid "Minimap in texture mode" -msgstr "Minimale Texturengröße" +msgstr "Übersichtskarte im Texturmodus" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" @@ -1873,8 +1865,8 @@ msgstr "Taste bereits in Benutzung" #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" -"Steuerung (Falls dieses Menü defekt ist, entfernen Sie Zeugs aus minetest." -"conf)" +"Steuerung (Falls dieses Menü nicht richtig funktioniert, versuchen sie die " +"minetest.conf manuell zu bearbeiten)" #: src/gui/guiKeyChangeMenu.cpp msgid "Local command" @@ -2188,7 +2180,7 @@ msgstr "ABM-Intervall" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "ABM-Zeitbudget" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" @@ -2699,7 +2691,7 @@ msgstr "ContentDB: Schwarze Liste" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "ContentDB Max. gleichzeitige Downloads" #: src/settings_translation_file.cpp msgid "ContentDB URL" @@ -2768,11 +2760,12 @@ msgid "Crosshair alpha" msgstr "Fadenkreuzundurchsichtigkeit" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "Fadenkreuzundurchsichtigkeit (Wert zwischen 0 und 255)." +msgstr "" +"Fadenkreuzundurchsichtigkeit (Wert zwischen 0 und 255).\n" +"Gilt auch für das Objektfadenkreuz" #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2783,6 +2776,8 @@ msgid "" "Crosshair color (R,G,B).\n" "Also controls the object crosshair color" msgstr "" +"Fadenkreuzfarbe (R,G,B).\n" +"Gilt auch für das Objektfadenkreuz" #: src/settings_translation_file.cpp msgid "DPI" @@ -2972,7 +2967,7 @@ msgstr "Blockanimationen desynchronisieren" #: src/settings_translation_file.cpp #, fuzzy msgid "Dig key" -msgstr "Rechtstaste" +msgstr "Grabetaste" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3204,9 +3199,10 @@ msgstr "" "geeignet." #: src/settings_translation_file.cpp -#, fuzzy msgid "FPS when unfocused or paused" -msgstr "Maximale Bildwiederholrate, während das Spiel pausiert ist." +msgstr "" +"Maximale Bildwiederholrate, während das Spiel pausiert oder nicht fokussiert " +"ist" #: src/settings_translation_file.cpp msgid "FSAA" @@ -3604,7 +3600,6 @@ msgid "HUD toggle key" msgstr "Taste zum Umschalten des HUD" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- none: Do not log deprecated calls\n" @@ -3612,12 +3607,12 @@ msgid "" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" "Handhabung für veraltete Lua-API-Aufrufe:\n" -"- legacy: Versuchen, altes Verhalten zu imitieren (Standard für Release).\n" -"- log: Imitieren, und den Backtrace des veralteten Funktionsaufrufs " +"- none: Veraltete Aufrufe nicht protokollieren.\n" +"- log: Imitieren und den Backtrace des veralteten Funktionsaufrufs " "protokollieren\n" -" (Standard für Debug).\n" +" (Standard).\n" "- error: Bei Verwendung eines veralteten Funktionsaufrufs abbrechen\n" -" (empfohlen für Mod- Entwickler)." +" (empfohlen für Mod-Entwickler)." #: src/settings_translation_file.cpp msgid "" @@ -4161,7 +4156,7 @@ msgstr "Joystick-Button-Wiederholungsrate" #: src/settings_translation_file.cpp #, fuzzy msgid "Joystick deadzone" -msgstr "Joystick-Typ" +msgstr "Joystick-Totbereich" #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" @@ -4266,13 +4261,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for digging.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Taste zum Springen.\n" +"Taste zum Graben.\n" "Siehe http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4419,13 +4413,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for placing.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Taste zum Springen.\n" +"Taste zum Bauen.\n" "Siehe http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -5201,11 +5194,11 @@ msgstr "Macht alle Flüssigkeiten undurchsichtig" #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" -msgstr "" +msgstr "Kartenkompressionsstufe für Festspeicher" #: src/settings_translation_file.cpp msgid "Map Compression Level for Network Transfer" -msgstr "" +msgstr "Kartenkompressionsstufe für Netzwerkverkehr" #: src/settings_translation_file.cpp msgid "Map directory" @@ -5392,9 +5385,10 @@ msgid "Maximum FPS" msgstr "Maximale Bildwiederholrate" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum FPS when the window is not focused, or when the game is paused." -msgstr "Maximale Bildwiederholrate, während das Spiel pausiert ist." +msgstr "" +"Maximale Bildwiederholrate, während das Fenster nicht fokussiert oder das " +"Spiel pausiert ist." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5458,6 +5452,9 @@ msgid "" "be queued.\n" "This should be lower than curl_parallel_limit." msgstr "" +"Maximale Anzahl an gleichzeitigen Downloads. Weitere werden in einer " +"Warteschlange eingereiht.\n" +"Dies sollte niedriger als das curl_parallel_limit sein." #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5889,12 +5886,11 @@ msgstr "Nick-Bewegungsmodus" #: src/settings_translation_file.cpp #, fuzzy msgid "Place key" -msgstr "Flugtaste" +msgstr "Bauentaste" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place repetition interval" -msgstr "Rechtsklick-Wiederholungsrate" +msgstr "Bauen-Wiederholungsrate" #: src/settings_translation_file.cpp msgid "" @@ -6125,7 +6121,7 @@ msgstr "Runde Übersichtskarte" #: src/settings_translation_file.cpp msgid "Safe digging and placing" -msgstr "Sicheres graben und bauen" +msgstr "Sicheres Graben und Bauen" #: src/settings_translation_file.cpp msgid "Sandy beaches occur when np_beach exceeds this value." @@ -6383,12 +6379,11 @@ msgid "Show entity selection boxes" msgstr "Entity-Auswahlboxen zeigen" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Show entity selection boxes\n" "A restart is required after changing this." msgstr "" -"Setzt die Sprache. Leer lassen, um Systemsprache zu verwenden.\n" +"Entityauswahlboxen zeigen\n" "Nach Änderung ist ein Neustart erforderlich." #: src/settings_translation_file.cpp @@ -6675,7 +6670,7 @@ msgstr "Die URL für den Inhaltespeicher" #: src/settings_translation_file.cpp #, fuzzy msgid "The deadzone of the joystick" -msgstr "Die Kennung des zu verwendeten Joysticks" +msgstr "Der Totbereich des Joysticks" #: src/settings_translation_file.cpp msgid "" @@ -6751,7 +6746,6 @@ msgstr "" "konfiguriert werden." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end for Irrlicht.\n" "A restart is required after changing this.\n" @@ -6764,10 +6758,10 @@ msgstr "" "Ein Neustart ist erforderlich, wenn dies geändert wird.\n" "Anmerkung: Auf Android belassen Sie dies bei OGLES1, wenn Sie sich unsicher " "sind.\n" -"Die App könnte sonst unfähig sein, zu starten.\n" -"Auf anderen Plattformen wird OpelGL empfohlen, dies ist momentan der " -"einzige\n" -"Treiber mit Shader-Unterstützung." +"Die App könnte sonst nicht mehr starten.\n" +"Auf anderen Plattformen wird OpenGL empfohlen.\n" +"Shader werden unter OpenGL (nur Desktop) und OGLES2 (experimentell) " +"unterstützt." #: src/settings_translation_file.cpp msgid "" @@ -6807,6 +6801,8 @@ msgid "" "The time budget allowed for ABMs to execute on each step\n" "(as a fraction of the ABM Interval)" msgstr "" +"Das erlaubte Zeitbudget für ABM-Ausführung jeden Schritt\n" +"(als Bruchteil des ABM-Intervalls)" #: src/settings_translation_file.cpp msgid "" @@ -6822,9 +6818,8 @@ msgid "" "The time in seconds it takes between repeated node placements when holding\n" "the place button." msgstr "" -"Die Zeit in Sekunden, in dem Rechtsklicks wiederholt werden, wenn die " -"rechte\n" -"Maustaste gedrückt gehalten wird." +"Die Zeit in Sekunden, in dem Blockplatzierung wiederholt werden, wenn\n" +"die Bauentaste gedrückt gehalten wird." #: src/settings_translation_file.cpp msgid "The type of joystick" @@ -7419,6 +7414,12 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"ZLib-Kompressionsniveau für Kartenblöcke im Festspeicher.\n" +"-1 - zlib Standard-Kompressionsniveau\n" +"0 - keine Kompression, am schnellsten\n" +"9 - beste Kompression, am langsamsten\n" +"(Niveau 1-3 verwenden zlibs \"schnelles\" Verfahren, 4-9 das normale " +"Verfahren)" #: src/settings_translation_file.cpp msgid "" @@ -7428,6 +7429,12 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"ZLib-Kompressionsniveau für Kartenblöcke, die zu Clients gesendet werden.\n" +"-1 - zlib Standard-Kompressionsniveau\n" +"0 - keine Kompression, am schnellsten\n" +"9 - beste Kompression, am langsamsten\n" +"(Niveau 1-3 verwenden zlibs \"schnelles\" Verfahren, 4-9 das normale " +"Verfahren)" #: src/settings_translation_file.cpp msgid "cURL file download timeout" From ac3d5d08733b93a0e21e34fb28b3f9a2bac30951 Mon Sep 17 00:00:00 2001 From: apo Date: Sun, 31 Jan 2021 16:25:56 +0000 Subject: [PATCH 014/110] Translated using Weblate (Spanish) Currently translated at 73.6% (996 of 1353 strings) --- po/es/minetest.po | 98 ++++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 52 deletions(-) diff --git a/po/es/minetest.po b/po/es/minetest.po index 61d444026..cd1f86fe1 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-12-24 05:29+0000\n" -"Last-Translator: cypMon \n" +"PO-Revision-Date: 2021-02-05 09:40+0000\n" +"Last-Translator: apo \n" "Language-Team: Spanish \n" "Language: es\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4.1-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -153,52 +153,51 @@ msgstr "activado" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" ya existe. Quieres remplazarlo?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "Las dependencias $1 y $2 serán instaladas." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 por $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 descargando,\n" +"$2 en espera" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Descargando..." +msgstr "$1 descargando..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 dependencias requeridas no se encuentran." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 serán instalados, y $2 dependencias serán ignoradas." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "Todos los paquetes" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "La tecla ya se está utilizando" +msgstr "Ya está instalado" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Volver al menú principal" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Hospedar juego" +msgstr "Juego Base:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" @@ -223,14 +222,12 @@ msgid "Install" msgstr "Instalar" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Instalar" +msgstr "Instalar $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Dependencias opcionales:" +msgstr "Instalar dependencias faltantes" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -246,26 +243,24 @@ msgid "No results" msgstr "Sin resultados" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Actualizar" +msgstr "No hay actualizaciones" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Not found" -msgstr "Silenciar sonido" +msgstr "No encontrado" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Sobreescribir" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Por favor verifica que el juego base está bien." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "En cola" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -281,11 +276,11 @@ msgstr "Actualizar" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Actualizar Todo [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Ver más información en un navegador web" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -769,15 +764,16 @@ msgid "Credits" msgstr "Créditos" #: builtin/mainmenu/tab_credits.lua -#, fuzzy msgid "Open User Data Directory" -msgstr "Seleccionar carpeta" +msgstr "Abrir Directorio de Datos de Usuario" #: builtin/mainmenu/tab_credits.lua msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Abre el directorio que contiene los mundos, juegos, mods, y paquetes de\n" +"textura, del usuario, en un gestor / explorador de archivos." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -817,7 +813,7 @@ msgstr "Instalar juegos desde ContentDB" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "Nombre" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -828,9 +824,8 @@ msgid "No world created or selected!" msgstr "¡No se ha dado un nombre al mundo o no se ha seleccionado uno!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Password" -msgstr "Contraseña nueva" +msgstr "Contraseña" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -841,9 +836,8 @@ msgid "Port" msgstr "Puerto" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "Selecciona un mundo:" +msgstr "Selecciona Mods" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -995,9 +989,8 @@ msgid "Shaders" msgstr "Sombreadores" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Shaders (experimental)" -msgstr "Tierras flotantes (experimental)" +msgstr "Sombreadores (experimental)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" @@ -1199,7 +1192,7 @@ msgid "Continue" msgstr "Continuar" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1222,12 +1215,12 @@ msgstr "" "- %s: moverse a la izquierda\n" "- %s: moverse a la derecha\n" "- %s: saltar/escalar\n" -"- %s: agacharse/bajar\n" +"- %s: excavar/golpear\n" +"- %s: colocar/usar\n" +"- %s: a hurtadillas/bajar\n" "- %s: soltar objeto\n" "- %s: inventario\n" "- Ratón: girar/mirar\n" -"- Ratón izq.: cavar/golpear\n" -"- Ratón der.: colocar/usar\n" "- Rueda del ratón: elegir objeto\n" "- %s: chat\n" @@ -1756,19 +1749,18 @@ msgid "Minimap hidden" msgstr "Minimapa oculto" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "Minimapa en modo radar, Zoom x1" +msgstr "Minimapa en modo radar, Zoom x%d" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "Minimapa en modo superficie, Zoom x1" +msgstr "Minimapa en modo superficie, Zoom x%d" #: src/client/minimap.cpp -#, fuzzy msgid "Minimap in texture mode" -msgstr "Minimapa en modo superficie, Zoom x1" +msgstr "Minimapa en modo textura" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" @@ -2182,7 +2174,7 @@ msgstr "Intervalo ABM" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "Límite de tiempo para MBA" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" @@ -2694,7 +2686,7 @@ msgstr "Lista negra de banderas de ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "Descargas máximas simultáneas para ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB URL" @@ -2764,11 +2756,12 @@ msgid "Crosshair alpha" msgstr "Opacidad del punto de mira" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "Alfa del punto de mira (opacidad, entre 0 y 255)." +msgstr "" +"Alfa del punto de mira (opacidad, entre 0 y 255).\n" +"También controla el color del objeto punto de mira." #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2779,6 +2772,8 @@ msgid "" "Crosshair color (R,G,B).\n" "Also controls the object crosshair color" msgstr "" +"Color del punto de mira (R,G,B).\n" +"También controla el color del objeto punto de mira" #: src/settings_translation_file.cpp msgid "DPI" @@ -2963,9 +2958,8 @@ msgid "Desynchronize block animation" msgstr "Desincronizar la animación de los bloques" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dig key" -msgstr "Tecla derecha" +msgstr "Tecla Excavar" #: src/settings_translation_file.cpp msgid "Digging particles" From a4d57b4a16d62edba4e4032fe2cda6370758ea8f Mon Sep 17 00:00:00 2001 From: cafou Date: Sun, 31 Jan 2021 15:23:54 +0000 Subject: [PATCH 015/110] Translated using Weblate (French) Currently translated at 96.7% (1309 of 1353 strings) --- po/fr/minetest.po | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/po/fr/minetest.po b/po/fr/minetest.po index a6201c240..a6cf41f53 100644 --- a/po/fr/minetest.po +++ b/po/fr/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: French (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-10-25 19:26+0000\n" -"Last-Translator: William Desportes \n" +"PO-Revision-Date: 2021-02-01 05:52+0000\n" +"Last-Translator: cafou \n" "Language-Team: French \n" "Language: fr\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.3.2-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -177,11 +177,11 @@ msgstr "Chargement..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "Les dépendances nécessaires à 1 $ n'ont pas pu être trouvées." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 sera installé, et les dépendances de $2 seront ignorées." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" @@ -257,7 +257,7 @@ msgstr "Couper le son" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Écraser" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." @@ -265,7 +265,7 @@ msgstr "" #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "En file d'attente" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -285,7 +285,7 @@ msgstr "" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Voir plus d'informations dans un navigateur web" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -780,6 +780,9 @@ msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Ouvre le répertoire qui contient les mondes fournis par les utilisateurs, " +"les jeux, les mods,\n" +"et des paquets de textures dans un gestionnaire de fichiers." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -819,7 +822,7 @@ msgstr "Installer à partir de ContentDB" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "Nom" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -2689,7 +2692,7 @@ msgstr "Drapeaux ContentDB en liste noire" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "Maximum de téléchargement en parallèle pour ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB URL" From 7f5b4edb66722606b97d7be04b631ca74475a732 Mon Sep 17 00:00:00 2001 From: BreadW Date: Mon, 1 Feb 2021 02:57:27 +0000 Subject: [PATCH 016/110] Translated using Weblate (Japanese) Currently translated at 100.0% (1353 of 1353 strings) --- po/ja/minetest.po | 208 +++++++++++++++++++++++----------------------- 1 file changed, 104 insertions(+), 104 deletions(-) diff --git a/po/ja/minetest.po b/po/ja/minetest.po index ac2e2155f..5669b8e73 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Japanese (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-06-15 22:41+0000\n" +"PO-Revision-Date: 2021-02-13 08:50+0000\n" "Last-Translator: BreadW \n" "Language-Team: Japanese \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.1\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -80,7 +80,7 @@ msgstr "キャンセル" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/tab_content.lua msgid "Dependencies:" -msgstr "依存関係:" +msgstr "依存Mod:" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" @@ -116,7 +116,7 @@ msgstr "Mod:" #: builtin/mainmenu/dlg_config_world.lua msgid "No (optional) dependencies" -msgstr "(任意)依存関係なし" +msgstr "(任意)依存Modなし" #: builtin/mainmenu/dlg_config_world.lua msgid "No game description provided." @@ -124,7 +124,7 @@ msgstr "ゲームの説明がありません。" #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" -msgstr "依存関係なし" +msgstr "必須依存Modなし" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." @@ -132,11 +132,11 @@ msgstr "Modパックの説明がありません。" #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" -msgstr "任意依存関係なし" +msgstr "任意依存Modなし" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Optional dependencies:" -msgstr "任意:" +msgstr "任意依存Mod:" #: builtin/mainmenu/dlg_config_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp @@ -153,52 +153,51 @@ msgstr "有効" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "「$1」はすでに存在します。上書きしますか?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "$1 と依存Mod $2 がインストールされます。" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 by $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 ダウンロード中、\n" +"$2 ダウンロード待機中" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "ダウンロード中..." +msgstr "$1 ダウンロード中..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 つの必要な依存Modが見つかりませんでした。" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 がインストールされ、依存Mod $2 はスキップされます。" #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "すべて" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "キーが重複しています" +msgstr "インストール済み" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" -msgstr "メインメニューへ戻る" +msgstr "メインメニューへ" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "ゲームホスト" +msgstr "基盤ゲーム:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" @@ -222,14 +221,12 @@ msgid "Install" msgstr "入手" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "入手" +msgstr "$1 のインストール" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "任意:" +msgstr "不足依存Modインストール" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -245,26 +242,24 @@ msgid "No results" msgstr "何も見つかりませんでした" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "更新" +msgstr "更新なし" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Not found" -msgstr "消音" +msgstr "見つかりません" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "上書き" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "基盤となるゲームが正しいかどうか確認してください。" #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "待機中" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -280,15 +275,15 @@ msgstr "更新" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "すべて更新 [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Webブラウザで詳細を見る" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" -msgstr "ワールド名「$1」は既に存在します" +msgstr "ワールド名「$1」はすでに存在します" #: builtin/mainmenu/dlg_create_world.lua msgid "Additional terrain" @@ -729,7 +724,7 @@ msgstr "インストール済みのパッケージ:" #: builtin/mainmenu/tab_content.lua msgid "No dependencies." -msgstr "依存なし。" +msgstr "依存Modなし。" #: builtin/mainmenu/tab_content.lua msgid "No package description available" @@ -760,15 +755,16 @@ msgid "Credits" msgstr "クレジット" #: builtin/mainmenu/tab_credits.lua -#, fuzzy msgid "Open User Data Directory" -msgstr "ディレクトリの選択" +msgstr "ディレクトリを開く" #: builtin/mainmenu/tab_credits.lua msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"ファイルマネージャー/エクスプローラーで、ワールド、ゲーム、Mod、\n" +"およびテクスチャパックを含むディレクトリを開きます。" #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -788,7 +784,7 @@ msgstr "バインドアドレス" #: builtin/mainmenu/tab_local.lua msgid "Creative Mode" -msgstr "クリエイティブモード" +msgstr "クリエイティブ" #: builtin/mainmenu/tab_local.lua msgid "Enable Damage" @@ -808,7 +804,7 @@ msgstr "コンテンツDBからゲームをインストール" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "名前" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -819,9 +815,8 @@ msgid "No world created or selected!" msgstr "ワールドが作成または選択されていません!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Password" -msgstr "新しいパスワード" +msgstr "パスワード" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -832,9 +827,8 @@ msgid "Port" msgstr "ポート" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "ワールドを選択:" +msgstr "Modを選択" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -915,7 +909,7 @@ msgstr "アンチエイリアス:" #: builtin/mainmenu/tab_settings.lua msgid "Autosave Screen Size" -msgstr "画面の大きさを自動保存" +msgstr "大きさを自動保存" #: builtin/mainmenu/tab_settings.lua msgid "Bilinear Filter" @@ -986,9 +980,8 @@ msgid "Shaders" msgstr "シェーダー" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Shaders (experimental)" -msgstr "浮遊大陸(実験的)" +msgstr "シェーダー(実験的)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" @@ -1188,7 +1181,7 @@ msgid "Continue" msgstr "再開" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1205,19 +1198,19 @@ msgid "" "- Mouse wheel: select item\n" "- %s: chat\n" msgstr "" -"操作:\n" +"操作方法:\n" "- %s: 前進\n" "- %s: 後退\n" "- %s: 左移動\n" "- %s: 右移動\n" "- %s: ジャンプ/登る\n" +"- %s: 掘削/パンチ\n" +"- %s: 設置/使用\n" "- %s: スニーク/降りる\n" "- %s: アイテムを落とす\n" "- %s: インベントリ\n" "- マウス: 見回す\n" -"- 左クリック: 掘削/パンチ\n" -"- 右クリック: 設置/使用\n" -"- ホイール: アイテム選択\n" +"- マウスホイール: アイテム選択\n" "- %s: チャット\n" #: src/client/game.cpp @@ -1745,19 +1738,18 @@ msgid "Minimap hidden" msgstr "ミニマップ 非表示" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "ミニマップ レーダーモード、ズーム x1" +msgstr "ミニマップ レーダーモード、ズーム x%d" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "ミニマップ 表面モード、ズーム x1" +msgstr "ミニマップ 表面モード、ズーム x%d" #: src/client/minimap.cpp -#, fuzzy msgid "Minimap in texture mode" -msgstr "最小テクスチャサイズ" +msgstr "ミニマップ テクスチャモード" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" @@ -1829,7 +1821,7 @@ msgstr "音量を下げる" #: src/gui/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" -msgstr "\"ジャンプ\"二度押しで飛行モード切替" +msgstr "\"ジャンプ\"2回で飛行モード切替" #: src/gui/guiKeyChangeMenu.cpp msgid "Drop" @@ -1861,9 +1853,7 @@ msgstr "キーが重複しています" #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "" -"キー設定です。 (このメニューで失敗する場合は、minetest.confから該当する設定を" -"削除してください)" +msgstr "キー設定です。 (このメニューで失敗する場合は minetest.conf から該当する設定を削除してください)" #: src/gui/guiKeyChangeMenu.cpp msgid "Local command" @@ -2155,7 +2145,7 @@ msgstr "ABMの間隔" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "ABMの時間予算" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" @@ -2656,7 +2646,7 @@ msgstr "コンテンツDBフラグのブラックリスト" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "コンテンツDBの最大同時ダウンロード数" #: src/settings_translation_file.cpp msgid "ContentDB URL" @@ -2720,24 +2710,27 @@ msgstr "クリエイティブ" #: src/settings_translation_file.cpp msgid "Crosshair alpha" -msgstr "照準線の透過度" +msgstr "十字カーソルの透過度" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "照準線の透過 (不透明、0~255の間)。" +msgstr "" +"十字カーソルの透過度(不透明、0~255の間)。\n" +"オブジェクト十字カーソルの色も制御" #: src/settings_translation_file.cpp msgid "Crosshair color" -msgstr "照準線の色" +msgstr "十字カーソルの色" #: src/settings_translation_file.cpp msgid "" "Crosshair color (R,G,B).\n" "Also controls the object crosshair color" msgstr "" +"十字カーソルの色(R,G,B)。\n" +"オブジェクト十字カーソルの色も制御" #: src/settings_translation_file.cpp msgid "DPI" @@ -2881,7 +2874,7 @@ msgstr "ツールチップを表示するまでの遅延、ミリ秒で定めま #: src/settings_translation_file.cpp msgid "Deprecated Lua API handling" -msgstr "廃止予定のLua APIの処理" +msgstr "非推奨の Lua API の処理" #: src/settings_translation_file.cpp msgid "Depth below which you'll find giant caverns." @@ -2914,9 +2907,8 @@ msgid "Desynchronize block animation" msgstr "ブロックのアニメーションの非同期化" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dig key" -msgstr "右キー" +msgstr "掘削キー" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3138,9 +3130,8 @@ msgstr "" "作成し、密な浮遊大陸層に適しています。" #: src/settings_translation_file.cpp -#, fuzzy msgid "FPS when unfocused or paused" -msgstr "ポーズメニューでの最大FPS。" +msgstr "非アクティブまたはポーズメニュー表示中のFPS" #: src/settings_translation_file.cpp msgid "FSAA" @@ -3524,18 +3515,16 @@ msgid "HUD toggle key" msgstr "HUD表示切り替えキー" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- none: Do not log deprecated calls\n" "- log: mimic and log backtrace of deprecated call (default).\n" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" -"廃止予定のLua API呼び出しの処理:\n" -"- legacy: 古い振る舞いを模倣する(試みる) (リリース版の既定値)。\n" -"- log: 廃止予定の呼び出しを模倣してバックトレースを記録 (デバッグ版の既定" -"値)。\n" -"- error: 廃止予定の呼び出しの使用を中止する (Mod開発者向けに推奨)。" +"非推奨の Lua API 呼び出しの処理:\n" +"- none: 非推奨の呼び出しを記録しない\n" +"- log: 非推奨の呼び出しのバックトレースを模倣して記録します(既定値)。\n" +"- error: 非推奨の呼び出しの使用を中止します(Mod開発者に推奨)。" #: src/settings_translation_file.cpp msgid "" @@ -4057,9 +4046,8 @@ msgid "Joystick button repetition interval" msgstr "ジョイスティックボタンの繰り返し間隔" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick deadzone" -msgstr "ジョイスティックの種類" +msgstr "ジョイスティックのデッドゾーン" #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" @@ -4164,13 +4152,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for digging.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"ジャンプするキーです。\n" +"掘削するキーです。\n" "参照 http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4317,13 +4304,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for placing.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"ジャンプするキーです。\n" +"設置するキーです。\n" "参照 http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -5085,11 +5071,11 @@ msgstr "すべての液体を不透明にする" #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" -msgstr "" +msgstr "ディスクストレージのマップ圧縮レベル" #: src/settings_translation_file.cpp msgid "Map Compression Level for Network Transfer" -msgstr "" +msgstr "ネットワーク転送のためのマップ圧縮レベル" #: src/settings_translation_file.cpp msgid "Map directory" @@ -5274,9 +5260,8 @@ msgid "Maximum FPS" msgstr "最大FPS" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum FPS when the window is not focused, or when the game is paused." -msgstr "ポーズメニューでの最大FPS。" +msgstr "ウィンドウにフォーカスが合っていないとき、またはポーズメニュー表示中の最大FPS。" #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5336,6 +5321,8 @@ msgid "" "be queued.\n" "This should be lower than curl_parallel_limit." msgstr "" +"同時ダウンロードの最大数です。この制限を超えるダウンロードはキューに入れられます。\n" +"これは curl_parallel_limit よりも低い値でなければなりません。" #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5744,14 +5731,12 @@ msgid "Pitch move mode" msgstr "ピッチ移動モード" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place key" -msgstr "飛行キー" +msgstr "設置キー" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place repetition interval" -msgstr "右クリック繰り返しの間隔" +msgstr "設置の繰り返し間隔" #: src/settings_translation_file.cpp msgid "" @@ -6227,15 +6212,14 @@ msgstr "デバッグ情報を表示" #: src/settings_translation_file.cpp msgid "Show entity selection boxes" -msgstr "エンティティの選択ボックスを表示" +msgstr "エンティティの選択ボックス表示" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Show entity selection boxes\n" "A restart is required after changing this." msgstr "" -"言語を設定してください。システム言語を使用するには空のままにします。\n" +"エンティティの選択ボックスを表示\n" "変更後は再起動が必要です。" #: src/settings_translation_file.cpp @@ -6509,9 +6493,8 @@ msgid "The URL for the content repository" msgstr "コンテンツリポジトリのURL" #: src/settings_translation_file.cpp -#, fuzzy msgid "The deadzone of the joystick" -msgstr "使用するジョイスティックの識別子" +msgstr "ジョイスティックのデッドゾーン" #: src/settings_translation_file.cpp msgid "" @@ -6582,7 +6565,6 @@ msgstr "" "これは active_object_send_range_blocks と一緒に設定する必要があります。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end for Irrlicht.\n" "A restart is required after changing this.\n" @@ -6593,10 +6575,10 @@ msgid "" msgstr "" "Irrlichtのレンダリングバックエンド。\n" "変更後は再起動が必要です。\n" -"メモ: Androidでは、不明な場合は OGLES1 を使用してください! \n" -"それ以外の場合アプリは起動に失敗することがあります。\n" -"他のプラットフォームでは、OpenGL が推奨されており、現在それが\n" -"シェーダーをサポートする唯一のドライバです。" +"注意:Android の場合、よくわからない場合は OGLES1 を使用してください!\n" +"そうしないとアプリの起動に失敗することがあります。\n" +"その他のプラットフォームでは、OpenGL が推奨されています。\n" +"シェーダーは OpenGL(デスクトップのみ)と OGLES2(実験的)でサポート" #: src/settings_translation_file.cpp msgid "" @@ -6629,6 +6611,8 @@ msgid "" "The time budget allowed for ABMs to execute on each step\n" "(as a fraction of the ABM Interval)" msgstr "" +"ABM が各ステップで実行できる時間予算\n" +"(ABM間隔の一部として)" #: src/settings_translation_file.cpp msgid "" @@ -6639,11 +6623,10 @@ msgstr "" "繰り返されるイベントの秒単位の間隔。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The time in seconds it takes between repeated node placements when holding\n" "the place button." -msgstr "マウスの右ボタンを押したまま右クリックを繰り返す秒単位の間隔。" +msgstr "設置ボタンを押したままノードの設置を繰り返す秒単位の間隔。" #: src/settings_translation_file.cpp msgid "The type of joystick" @@ -6807,6 +6790,13 @@ msgid "" "If set to 0, MSAA is disabled.\n" "A restart is required after changing this option." msgstr "" +"マルチサンプルアンチエイリアス(MSAA)を使用して、ブロックエッジを滑らかにします。\n" +"このアルゴリズムは、画像を鮮明に保ちながら3Dビューポートを滑らかにします。\n" +"しかし、それはテクスチャの内部には影響しません\n" +"(これは、透明なテクスチャで特に目立ちます)。\n" +"シェーダーを無効にすると、ノード間に可視スペースが表示されます。\n" +"0 に設定すると、MSAAは無効になります。\n" +"このオプションを変更した場合、再起動が必要です。" #: src/settings_translation_file.cpp msgid "Use trilinear filtering when scaling textures." @@ -7055,7 +7045,7 @@ msgid "" "Deprecated, use the setting player_transfer_distance instead." msgstr "" "プレイヤーが範囲制限なしでクライアントに表示されるかどうかです。\n" -"廃止予定、代わりに設定 player_transfer_distance を使用してください。" +"非推奨。代わりに設定 player_transfer_distance を使用してください。" #: src/settings_translation_file.cpp msgid "Whether to allow players to damage and kill each other." @@ -7205,6 +7195,11 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"マップブロックをディスクに保存するときに使用する ZLib圧縮レベル。\n" +"-1 - Zlib の規定の圧縮レベル\n" +"0 - 圧縮なし、最速\n" +"9 - 最高の圧縮、最も遅い\n" +"(レベル 1〜3 はZlibの「高速」方式を使用し、4〜9 は通常方式を使用)" #: src/settings_translation_file.cpp msgid "" @@ -7214,6 +7209,11 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"マップブロックをクライアントに送信するときに使用する ZLib圧縮レベル。\n" +"-1 - Zlib の規定の圧縮レベル\n" +"0 - 圧縮なし、最速\n" +"9 - 最高の圧縮、最も遅い\n" +"(レベル 1〜3 はZlibの「高速」方式を使用し、4〜9 は通常方式を使用)" #: src/settings_translation_file.cpp msgid "cURL file download timeout" From ff8c2dfd6bf61b9efa6ce73cd10b376a396d2422 Mon Sep 17 00:00:00 2001 From: eol Date: Sat, 30 Jan 2021 22:12:27 +0000 Subject: [PATCH 017/110] Translated using Weblate (Dutch) Currently translated at 100.0% (1353 of 1353 strings) --- po/nl/minetest.po | 175 ++++++++++++++++++++++++---------------------- 1 file changed, 93 insertions(+), 82 deletions(-) diff --git a/po/nl/minetest.po b/po/nl/minetest.po index f2efafdc9..6b5329aef 100644 --- a/po/nl/minetest.po +++ b/po/nl/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Dutch (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2021-01-25 20:32+0000\n" +"PO-Revision-Date: 2021-02-01 05:52+0000\n" "Last-Translator: eol \n" "Language-Team: Dutch \n" @@ -153,52 +153,52 @@ msgstr "aangeschakeld" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" bestaat al. Wilt u het overschrijven ?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "Afhankelijkheden $1 en $2 zullen geïnstalleerd worden." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 door $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 is aan het downloaden,\n" +"$2 is ingepland" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Downloaden..." +msgstr "$1 is aan het downloaden..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 benodigde afhankelijkheden werden niet gevonden." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." msgstr "" +"$1 zal worden geïnstalleerd, en $2 afhankelijkheden worden overgeslagen." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "Alle pakketten" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "Toets is al in gebruik" +msgstr "Reeds geïnstalleerd" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Terug naar hoofdmenu" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Spel Hosten" +msgstr "Basis Spel:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" @@ -223,14 +223,12 @@ msgid "Install" msgstr "Installeren" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Installeren" +msgstr "Installeer $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Optionele afhankelijkheden:" +msgstr "Installeer ontbrekende afhankelijkheden" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -246,26 +244,24 @@ msgid "No results" msgstr "Geen resultaten" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Update" +msgstr "Geen updates" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Not found" -msgstr "Geluid dempen" +msgstr "Niet gevonden" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Overschrijven" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Controleer of het basis spel correct is, aub." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "Ingepland" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -281,11 +277,11 @@ msgstr "Update" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Allemaal bijwerken [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Bekijk meer informatie in een webbrowser" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -768,15 +764,16 @@ msgid "Credits" msgstr "Credits" #: builtin/mainmenu/tab_credits.lua -#, fuzzy msgid "Open User Data Directory" -msgstr "Selecteer map" +msgstr "Open de gebruikersdatamap" #: builtin/mainmenu/tab_credits.lua msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Open de map die de door de gebruiker aangeleverde werelden, spellen, mods\n" +"en textuur pakketten bevat in een bestandsbeheer toepassing / verkenner." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -816,7 +813,7 @@ msgstr "Installeer spellen van ContentDB" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "Naam" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -827,9 +824,8 @@ msgid "No world created or selected!" msgstr "Geen wereldnaam opgegeven of geen wereld aangemaakt!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Password" -msgstr "Nieuw wachtwoord" +msgstr "Wachtwoord" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -840,9 +836,8 @@ msgid "Port" msgstr "Poort" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "Selecteer Wereld:" +msgstr "Selecteer Mods" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -994,9 +989,8 @@ msgid "Shaders" msgstr "Shaders" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Shaders (experimental)" -msgstr "Zwevende eilanden (experimenteel)" +msgstr "Shaders (experimenteel)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" @@ -1196,7 +1190,7 @@ msgid "Continue" msgstr "Verder spelen" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1219,12 +1213,12 @@ msgstr "" "-%s: ga naar links \n" "-%s: ga naar rechts \n" "-%s: springen / klimmen \n" +"-%s: graaf/duw\n" +"-%s: plaats/gebruik \n" "-%s: sluip / ga naar beneden \n" "-%s: drop item \n" "-%s: inventaris \n" "- Muis: draaien / kijken \n" -"- Muis links: graven / stoten \n" -"- Muis rechts: plaats / gebruik \n" "- Muiswiel: item selecteren \n" "-%s: chat\n" @@ -1753,19 +1747,18 @@ msgid "Minimap hidden" msgstr "Mini-kaart verborgen" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "Mini-kaart in radar modus, Zoom x1" +msgstr "Mini-kaart in radar modus, Zoom x%d" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "Minimap in oppervlaktemodus, Zoom x1" +msgstr "Minimap in oppervlaktemodus, Zoom x%d" #: src/client/minimap.cpp -#, fuzzy msgid "Minimap in texture mode" -msgstr "Minimale textuur-grootte" +msgstr "Minimap textuur modus" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" @@ -2176,7 +2169,7 @@ msgstr "Interval voor ABM's" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "ABM tijd budget" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" @@ -2688,7 +2681,7 @@ msgstr "ContentDB optie: verborgen pakketten lijst" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "ContentDB Maximum Gelijktijdige Downloads" #: src/settings_translation_file.cpp msgid "ContentDB URL" @@ -2759,11 +2752,12 @@ msgid "Crosshair alpha" msgstr "Draadkruis-alphawaarde" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "Draadkruis-alphawaarde. (ondoorzichtigheid; tussen 0 en 255)." +msgstr "" +"Draadkruis-alphawaarde (ondoorzichtigheid; tussen 0 en 255).\n" +"Controleert ook het object draadkruis kleur" #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2774,6 +2768,8 @@ msgid "" "Crosshair color (R,G,B).\n" "Also controls the object crosshair color" msgstr "" +"Draadkruis kleur (R,G,B).\n" +"Controleert ook het object draadkruis kleur" #: src/settings_translation_file.cpp msgid "DPI" @@ -2956,9 +2952,8 @@ msgid "Desynchronize block animation" msgstr "Textuur-animaties niet synchroniseren" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dig key" -msgstr "Toets voor rechts" +msgstr "Toets voor graven" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3186,9 +3181,8 @@ msgstr "" "platte laaglanden, geschikt voor een solide zwevende eilanden laag." #: src/settings_translation_file.cpp -#, fuzzy msgid "FPS when unfocused or paused" -msgstr "Maximum FPS als het spel gepauzeerd is." +msgstr "FPS als het spel gepauzeerd of niet gefocussed is" #: src/settings_translation_file.cpp msgid "FSAA" @@ -3583,20 +3577,18 @@ msgid "HUD toggle key" msgstr "HUD aan/uitschakelen toets" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- none: Do not log deprecated calls\n" "- log: mimic and log backtrace of deprecated call (default).\n" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" -"Behandeling van verouderde lua api aanroepen:\n" -"- legacy: (probeer) het oude gedrag na te bootsen\n" -" (standaard voor een 'release' versie).\n" -"- log: boots het oude gedrag na, en log een backtrace van de aanroep\n" -" (standaard voor een 'debug' versie).\n" -"- error: stop de server bij gebruik van een verouderde aanroep\n" -" (aanbevolen voor mod ontwikkelaars)." +"Behandeling van verouderde Lua API aanroepen:\n" +"- none: log geen verouderde aanroepen\n" +"- log: boots het oude gedrag na, en log een backtrace van de aanroep (" +"standaard voor een 'debug' versie).\n" +"- error: stop de server bij gebruik van een verouderde aanroep (" +"aanbevolen voor mod ontwikkelaars)." #: src/settings_translation_file.cpp msgid "" @@ -4131,9 +4123,8 @@ msgid "Joystick button repetition interval" msgstr "Joystick-knop herhalingsinterval" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick deadzone" -msgstr "Joystick type" +msgstr "Joystick dode zone" #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" @@ -4238,13 +4229,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for digging.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Toets voor springen.\n" +"Toets voor graven.\n" "Zie http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4391,13 +4381,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for placing.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Toets voor springen.\n" +"Toets voor plaatsen.\n" "Zie http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -5171,11 +5160,11 @@ msgstr "Maak alle vloeistoffen ondoorzichtig" #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" -msgstr "" +msgstr "Map compressie niveau voor het bewaren op de harde schijf" #: src/settings_translation_file.cpp msgid "Map Compression Level for Network Transfer" -msgstr "" +msgstr "Map compressie niveau voor netwerk transfert" #: src/settings_translation_file.cpp msgid "Map directory" @@ -5363,9 +5352,10 @@ msgid "Maximum FPS" msgstr "Maximum FPS" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum FPS when the window is not focused, or when the game is paused." -msgstr "Maximum FPS als het spel gepauzeerd is." +msgstr "" +"Maximum FPS als het venster niet gefocussed is, of wanneer het spel " +"gepauzeerd is." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5429,6 +5419,9 @@ msgid "" "be queued.\n" "This should be lower than curl_parallel_limit." msgstr "" +"Maximaal aantal gelijktijdige downloads. Downloads die deze limiet " +"overschrijden zullen in de wachtrij geplaats worden.\n" +"Deze instelling zou lager moeten zijn dan curl_parallel_limit." #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5867,14 +5860,12 @@ msgid "Pitch move mode" msgstr "Pitch beweeg modus" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place key" -msgstr "Vliegen toets" +msgstr "Plaats toets" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place repetition interval" -msgstr "Rechts-klik herhalingsinterval" +msgstr "Plaats (Rechts-klik) herhalingsinterval" #: src/settings_translation_file.cpp msgid "" @@ -6357,13 +6348,12 @@ msgid "Show entity selection boxes" msgstr "Toon selectie-box voor objecten" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Show entity selection boxes\n" "A restart is required after changing this." msgstr "" -"Stel de taal in. De systeem-taal wordt gebruikt indien leeg.\n" -"Een herstart is noodzakelijk om de nieuwe taal te activeren." +"Toon selectievakjes voor entiteiten\n" +"Een herstart is noodzakelijk om de wijziging te activeren." #: src/settings_translation_file.cpp msgid "Shutdown message" @@ -6649,9 +6639,8 @@ msgid "The URL for the content repository" msgstr "De URL voor de inhoudsrepository" #: src/settings_translation_file.cpp -#, fuzzy msgid "The deadzone of the joystick" -msgstr "De identificatie van de stuurknuppel die u gebruikt" +msgstr "De dode zone van de stuurknuppel die u gebruikt" #: src/settings_translation_file.cpp msgid "" @@ -6727,7 +6716,6 @@ msgstr "" "Dit moet samen met active_object_send_range_blocks worden geconfigureerd." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end for Irrlicht.\n" "A restart is required after changing this.\n" @@ -6740,8 +6728,9 @@ msgstr "" "Na het wijzigen hiervan is een herstart vereist. \n" "Opmerking: op Android, blijf bij OGLES1 als je het niet zeker weet! Anders " "start de app mogelijk niet. \n" -"Op andere platforms wordt OpenGL aanbevolen en het is de enige driver met \n" -"shader-ondersteuning momenteel." +"Op andere platformen wordt OpenGL aanbevolen.\n" +"OpenGL (alleen op desktop pc) en OGLES2 (experimenteel), zijn de enige " +"drivers met shader-ondersteuning momenteel" #: src/settings_translation_file.cpp msgid "" @@ -6779,6 +6768,8 @@ msgid "" "The time budget allowed for ABMs to execute on each step\n" "(as a fraction of the ABM Interval)" msgstr "" +"Het tijdsbudget dat toegestaan wordt aan ABM's om elke stap uit te voeren\n" +"(als een deel van het ABM interval)" #: src/settings_translation_file.cpp msgid "" @@ -6789,12 +6780,12 @@ msgstr "" " ingedrukt gehouden wordt." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The time in seconds it takes between repeated node placements when holding\n" "the place button." msgstr "" -"De tijd in seconden tussen herhaalde rechts-klikken als de rechter muisknop\n" +"De tijd in seconden tussen herhaalde rechts-klikken als de plaats knop (" +"rechter muisknop)\n" "ingedrukt gehouden wordt." #: src/settings_translation_file.cpp @@ -6968,6 +6959,14 @@ msgid "" "If set to 0, MSAA is disabled.\n" "A restart is required after changing this option." msgstr "" +"Gebruik multi-sample anti-aliasing (MSAA) om de randen van de blokken glad " +"te maken.\n" +"Dit algoritme maakt de 3D viewport glad en houdt intussen het beeld scherp,\n" +"zonder de binnenkant van de texturen te wijzigen\n" +"(wat erg opvalt bij transparante texturen)\n" +"Zichtbare ruimtes verschijnen tussen nodes als de shaders uitgezet zijn.\n" +"Als de waarde op 0 staat, is MSAA uitgeschakeld.\n" +"Een herstart is nodig om deze wijziging te laten functioneren." #: src/settings_translation_file.cpp msgid "Use trilinear filtering when scaling textures." @@ -7377,6 +7376,12 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"Zlib compressie niveau om mapblokken op de harde schijf te bewaren.\n" +"-1: Zlib's standaard compressie niveau\n" +"0: geen compressie, snelst\n" +"9: maximale compressie, traagst\n" +"(niveau's 1 tot 3 gebruiken Zlib's snelle methode, 4 tot 9 gebruiken de " +"normale methode)" #: src/settings_translation_file.cpp msgid "" @@ -7386,6 +7391,12 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"Zlib compressie niveau om mapblokken te versturen naar de client.\n" +"-1: Zlib's standaard compressie niveau\n" +"0: geen compressie, snelst\n" +"9: maximale compressie, traagst\n" +"(niveau's 1 tot 3 gebruiken Zlib's snelle methode, 4 tot 9 gebruiken de " +"normale methode)" #: src/settings_translation_file.cpp msgid "cURL file download timeout" From 6cd5bbeb43e7ad866b1487468f2cc56897d1d932 Mon Sep 17 00:00:00 2001 From: "Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi" Date: Sat, 30 Jan 2021 22:27:05 +0000 Subject: [PATCH 018/110] Translated using Weblate (Malay) Currently translated at 100.0% (1353 of 1353 strings) --- po/ms/minetest.po | 197 ++++++++++++++++++++++++---------------------- 1 file changed, 101 insertions(+), 96 deletions(-) diff --git a/po/ms/minetest.po b/po/ms/minetest.po index 0ea9bf28a..d15da624e 100644 --- a/po/ms/minetest.po +++ b/po/ms/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Malay (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-10-20 18:26+0000\n" +"PO-Revision-Date: 2021-02-01 05:52+0000\n" "Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat " "Yasuyoshi \n" "Language-Team: Malay Date: Sun, 31 Jan 2021 15:00:10 +0000 Subject: [PATCH 019/110] Translated using Weblate (Basque) Currently translated at 21.2% (288 of 1353 strings) --- po/eu/minetest.po | 88 +++++++++++++++++++++++------------------------ 1 file changed, 43 insertions(+), 45 deletions(-) diff --git a/po/eu/minetest.po b/po/eu/minetest.po index fe0233120..9add230cd 100644 --- a/po/eu/minetest.po +++ b/po/eu/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-10-18 21:26+0000\n" -"Last-Translator: Osoitz \n" +"PO-Revision-Date: 2021-02-23 15:50+0000\n" +"Last-Translator: aitzol berasategi \n" "Language-Team: Basque \n" "Language: eu\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3.1-dev\n" +"X-Generator: Weblate 4.5\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -113,7 +113,7 @@ msgstr "" #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" -msgstr "" +msgstr "Mod gehiago aurkitu" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" @@ -158,11 +158,11 @@ msgstr "gaituta" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" existitzen da. Gainidatzi egin nahi al duzu?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "$1 et $2 mendekotasunak instalatuko dira." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" @@ -173,19 +173,21 @@ msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 deskargatzen,\n" +"$2 ilaran" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Kargatzen..." +msgstr "$1 deskargatzen..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1-ek behar dituen mendekotasunak ezin dira aurkitu." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." msgstr "" +"$1 instalatua izango da, eta $2-ren mendekotasunak baztertu egingo dira." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" @@ -193,25 +195,23 @@ msgstr "Pakete guztiak" #: builtin/mainmenu/dlg_contentstore.lua msgid "Already installed" -msgstr "" +msgstr "Instalaturik jada" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Itzuli menu nagusira" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Joko ostalaria" +msgstr "Oinarri jokoa:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" +msgstr "ContentDB ez dago erabilgarri Minetest cURL gabe konpilatzean" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Downloading..." -msgstr "Kargatzen..." +msgstr "Deskargatzen..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -227,14 +227,12 @@ msgid "Install" msgstr "Instalatu" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Instalatu" +msgstr "$1 Instalatu" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Aukerako mendekotasunak:" +msgstr "Falta diren mendekotasunak instalatu" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -250,21 +248,20 @@ msgid "No results" msgstr "Emaitzarik ez" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Eguneratu" +msgstr "Eguneraketarik ez" #: builtin/mainmenu/dlg_contentstore.lua msgid "Not found" -msgstr "" +msgstr "Ez da aurkitu" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Gainidatzi" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Mesedez, egiaztatu oinarri jokoa zuzena dela." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" @@ -272,7 +269,7 @@ msgstr "" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" -msgstr "" +msgstr "testura paketeak" #: builtin/mainmenu/dlg_contentstore.lua msgid "Uninstall" @@ -284,11 +281,11 @@ msgstr "Eguneratu" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Guztia eguneratu [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Ikusi informazio gehiago web nabigatzailean" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -296,40 +293,39 @@ msgstr "Badago \"$1\" izeneko mundu bat" #: builtin/mainmenu/dlg_create_world.lua msgid "Additional terrain" -msgstr "" +msgstr "Lurrazal gehigarria" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Altitude chill" -msgstr "" +msgstr "Garaierako hotza" #: builtin/mainmenu/dlg_create_world.lua msgid "Altitude dry" -msgstr "" +msgstr "Garaierako lehortasuna" #: builtin/mainmenu/dlg_create_world.lua msgid "Biome blending" -msgstr "" +msgstr "Bioma nahasketa" #: builtin/mainmenu/dlg_create_world.lua msgid "Biomes" -msgstr "" +msgstr "Biomak" #: builtin/mainmenu/dlg_create_world.lua msgid "Caverns" -msgstr "" +msgstr "Leizeak" #: builtin/mainmenu/dlg_create_world.lua msgid "Caves" -msgstr "" +msgstr "Leizeak" #: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Sortu" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Decorations" -msgstr "Informazioa:" +msgstr "Apaingarriak" #: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" @@ -342,11 +338,11 @@ msgstr "Deskargatu minetest.net zerbitzaritik" #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" -msgstr "" +msgstr "Leotzak" #: builtin/mainmenu/dlg_create_world.lua msgid "Flat terrain" -msgstr "" +msgstr "Lurrazal laua" #: builtin/mainmenu/dlg_create_world.lua msgid "Floating landmasses in the sky" @@ -362,27 +358,29 @@ msgstr "Jolasa" #: builtin/mainmenu/dlg_create_world.lua msgid "Generate non-fractal terrain: Oceans and underground" -msgstr "" +msgstr "Lurrazal ez fraktalak sortu: Ozeanoak eta lurpekoak" #: builtin/mainmenu/dlg_create_world.lua msgid "Hills" -msgstr "" +msgstr "Mendiak" #: builtin/mainmenu/dlg_create_world.lua msgid "Humid rivers" -msgstr "" +msgstr "Erreka hezeak" #: builtin/mainmenu/dlg_create_world.lua msgid "Increases humidity around rivers" -msgstr "" +msgstr "Hezetasuna areagotu erreka inguruetan" #: builtin/mainmenu/dlg_create_world.lua msgid "Lakes" -msgstr "" +msgstr "Lakuak" #: builtin/mainmenu/dlg_create_world.lua msgid "Low humidity and high heat causes shallow or dry rivers" msgstr "" +"Hezetasun baxuak eta bero handiak sakonera gutxikoak edo lehorrak diren " +"ibaiak sortzen dituzte" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" @@ -390,7 +388,7 @@ msgstr "Mapa sortzailea" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen flags" -msgstr "" +msgstr "Mapgen banderatxoak" #: builtin/mainmenu/dlg_create_world.lua msgid "Mapgen-specific flags" @@ -740,7 +738,7 @@ msgstr "Instalaturiko paketeak:" #: builtin/mainmenu/tab_content.lua msgid "No dependencies." -msgstr "Menpekotasunik gabe." +msgstr "Mendekotasunik gabe." #: builtin/mainmenu/tab_content.lua msgid "No package description available" From 48518b88ad1d3517fdafc8d2d23b507a55c3ad05 Mon Sep 17 00:00:00 2001 From: Tviljan Date: Sun, 31 Jan 2021 16:21:12 +0000 Subject: [PATCH 020/110] Translated using Weblate (Finnish) Currently translated at 0.5% (8 of 1353 strings) --- po/fi/minetest.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/fi/minetest.po b/po/fi/minetest.po index 25002febd..835a78bf0 100644 --- a/po/fi/minetest.po +++ b/po/fi/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-07-11 13:41+0000\n" -"Last-Translator: Niko Kivinen \n" +"PO-Revision-Date: 2021-02-01 05:52+0000\n" +"Last-Translator: Tviljan \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.2-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -37,7 +37,7 @@ msgstr "" #: builtin/fstk/ui.lua msgid "An error occurred:" -msgstr "" +msgstr "Tapahtui virhe:" #: builtin/fstk/ui.lua msgid "Main menu" From 0c80c5635d8988d2a493bbcfcfa9f23832714ba1 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 3 Feb 2021 02:32:24 +0000 Subject: [PATCH 021/110] Translated using Weblate (German) Currently translated at 100.0% (1353 of 1353 strings) --- po/de/minetest.po | 58 ++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index f98bf8f2a..6475ca225 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: German (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2021-02-01 05:52+0000\n" -"Last-Translator: sfan5 \n" +"PO-Revision-Date: 2021-02-13 08:50+0000\n" +"Last-Translator: Wuzzy \n" "Language-Team: German \n" "Language: de\n" @@ -103,8 +103,8 @@ msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "characters [a-z0-9_] are allowed." msgstr "" -"Die Modifikation „$1“ konnte nicht aktiviert werden, da sie unzulässige " -"Zeichen enthält. Nur die folgenden Zeichen sind erlaubt: [a-z0-9_]." +"Die Mod „$1“ konnte nicht aktiviert werden, da sie unzulässige Zeichen " +"enthält. Nur die folgenden Zeichen sind erlaubt: [a-z0-9_]." #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" @@ -256,7 +256,7 @@ msgstr "Überschreiben" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "Bitte prüfen Sie ob das Basis-Spiel richtig ist." +msgstr "Bitte prüfen Sie, ob das Basis-Spiel korrekt ist." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" @@ -774,7 +774,7 @@ msgid "" "and texture packs in a file manager / explorer." msgstr "" "Öffnet das Verzeichnis, welches die Welten, Spiele, Mods und\n" -"Texturenpakete des Benutzers enthält im Datei-Manager." +"Texturenpakete des Benutzers enthält, im Datei-Manager." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -1393,7 +1393,7 @@ msgstr "Entfernter Server" #: src/client/game.cpp msgid "Resolving address..." -msgstr "Löse Adresse auf …" +msgstr "Adressauflösung …" #: src/client/game.cpp msgid "Shutting down..." @@ -1865,8 +1865,8 @@ msgstr "Taste bereits in Benutzung" #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" -"Steuerung (Falls dieses Menü nicht richtig funktioniert, versuchen sie die " -"minetest.conf manuell zu bearbeiten)" +"Steuerung (Falls dieses Menü defekt ist, entfernen Sie Zeugs aus minetest." +"conf)" #: src/gui/guiKeyChangeMenu.cpp msgid "Local command" @@ -2079,7 +2079,7 @@ msgstr "3-Dimensionaler-Modus" #: src/settings_translation_file.cpp msgid "3D mode parallax strength" -msgstr "3D-Modus-Parallaxstärke" +msgstr "3-D-Modus-Parallaxstärke" #: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." @@ -2101,7 +2101,7 @@ msgid "" "to be adjusted, as floatland tapering functions best when this noise has\n" "a value range of approximately -2.0 to 2.0." msgstr "" -"3D-Rauschen, das die Form von Schwebeländern definiert.\n" +"3-D-Rauschen, das die Form von Schwebeländern definiert.\n" "Falls vom Standardwert verschieden, müsste der Rauschwert „Skalierung“\n" "(standardmäßig 0.7) evtl. angepasst werden, da die Schwebeland-\n" "zuspitzung am Besten funktioniert, wenn dieses Rauschen\n" @@ -2965,7 +2965,6 @@ msgid "Desynchronize block animation" msgstr "Blockanimationen desynchronisieren" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dig key" msgstr "Grabetaste" @@ -3142,7 +3141,7 @@ msgid "" "appearance of high dynamic range images. Mid-range contrast is slightly\n" "enhanced, highlights and shadows are gradually compressed." msgstr "" -"Aktiviert filmisches Tone-Mapping wie in Hables „Uncharted 2“.\n" +"Aktiviert filmische Dynamikkompression wie in Hables „Uncharted 2“.\n" "Simuliert die Tonkurve von fotografischem Film und wie dies das Aussehen\n" "von „High Dynamic Range“-Bildern annähert. Mittlerer Kontrast wird leicht\n" "verstärkt, aufleuchtende Bereiche und Schatten werden graduell komprimiert." @@ -3283,7 +3282,7 @@ msgstr "Fülltiefenrauschen" #: src/settings_translation_file.cpp msgid "Filmic tone mapping" -msgstr "Filmisches Tone-Mapping" +msgstr "Filmische Dynamikkompression" #: src/settings_translation_file.cpp msgid "" @@ -4154,7 +4153,6 @@ msgid "Joystick button repetition interval" msgstr "Joystick-Button-Wiederholungsrate" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick deadzone" msgstr "Joystick-Totbereich" @@ -5884,9 +5882,8 @@ msgid "Pitch move mode" msgstr "Nick-Bewegungsmodus" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place key" -msgstr "Bauentaste" +msgstr "Bautaste" #: src/settings_translation_file.cpp msgid "Place repetition interval" @@ -6542,7 +6539,7 @@ msgstr "Stufenbergsausbreitungsrauschen" #: src/settings_translation_file.cpp msgid "Strength of 3D mode parallax." -msgstr "Stärke von 3D-Modus-Parallax." +msgstr "Stärke von 3-D-Modus-Parallax." #: src/settings_translation_file.cpp msgid "" @@ -6668,7 +6665,6 @@ msgid "The URL for the content repository" msgstr "Die URL für den Inhaltespeicher" #: src/settings_translation_file.cpp -#, fuzzy msgid "The deadzone of the joystick" msgstr "Der Totbereich des Joysticks" @@ -6813,13 +6809,12 @@ msgstr "" "wenn eine Joystick-Tastenkombination gedrückt gehalten wird." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The time in seconds it takes between repeated node placements when holding\n" "the place button." msgstr "" -"Die Zeit in Sekunden, in dem Blockplatzierung wiederholt werden, wenn\n" -"die Bauentaste gedrückt gehalten wird." +"Die Zeit in Sekunden, in dem die Blockplatzierung wiederholt wird, wenn\n" +"die Bautaste gedrückt gehalten wird." #: src/settings_translation_file.cpp msgid "The type of joystick" @@ -6996,14 +6991,15 @@ msgid "" "If set to 0, MSAA is disabled.\n" "A restart is required after changing this option." msgstr "" -"Benutze multi-sample antialiasing (MSAA) um Blockecken zu glätten.\n" -"Dieser Algorithmus glättet das 3D-Sichtfeld während das Bild scharf bleibt,\n" +"Multi-Sample-Antialiasing (MSAA) benutzen, um Blockecken zu glätten.\n" +"Dieser Algorithmus glättet das 3-D-Sichtfeld während das Bild scharf bleibt," +"\n" "beeinträchtigt jedoch nicht die Textureninnenflächen\n" "(was sich insbesondere bei transparenten Texturen bemerkbar macht).\n" -"Sichtbare Lücken erscheinen zwischen Blöcken wenn Shader ausgeschaltet sind.." +"Sichtbare Lücken erscheinen zwischen Blöcken, wenn Shader ausgeschaltet sind." "\n" -"Wenn der Wert auf 0 steht, ist MSAA deaktiviert..\n" -"Ein Neustart ist erforderlich, nachdem diese Option geändert worden ist.." +"Wenn der Wert auf 0 steht, ist MSAA deaktiviert.\n" +"Ein Neustart ist erforderlich, nachdem diese Option geändert worden ist." #: src/settings_translation_file.cpp msgid "Use trilinear filtering when scaling textures." @@ -7415,10 +7411,10 @@ msgid "" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" "ZLib-Kompressionsniveau für Kartenblöcke im Festspeicher.\n" -"-1 - zlib Standard-Kompressionsniveau\n" +"-1 - Zlib-Standard-Kompressionsniveau\n" "0 - keine Kompression, am schnellsten\n" "9 - beste Kompression, am langsamsten\n" -"(Niveau 1-3 verwenden zlibs \"schnelles\" Verfahren, 4-9 das normale " +"(Niveaus 1-3 verwenden Zlibs „schnelles“ Verfahren, 4-9 das normale " "Verfahren)" #: src/settings_translation_file.cpp @@ -7430,10 +7426,10 @@ msgid "" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" "ZLib-Kompressionsniveau für Kartenblöcke, die zu Clients gesendet werden.\n" -"-1 - zlib Standard-Kompressionsniveau\n" +"-1 - Zlib-Standard-Kompressionsniveau\n" "0 - keine Kompression, am schnellsten\n" "9 - beste Kompression, am langsamsten\n" -"(Niveau 1-3 verwenden zlibs \"schnelles\" Verfahren, 4-9 das normale " +"(Niveaus 1-3 verwenden Zlibs „schnelles“ Verfahren, 4-9 das normale " "Verfahren)" #: src/settings_translation_file.cpp From 2291b7ebb8a54b75f882843752285248747a68e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Skalick=C3=BD?= Date: Mon, 1 Feb 2021 13:36:41 +0000 Subject: [PATCH 022/110] Translated using Weblate (Czech) Currently translated at 53.5% (724 of 1353 strings) --- po/cs/minetest.po | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/po/cs/minetest.po b/po/cs/minetest.po index 62cba7656..e9cd790c9 100644 --- a/po/cs/minetest.po +++ b/po/cs/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Czech (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-11-08 06:26+0000\n" -"Last-Translator: Janar Leas \n" +"PO-Revision-Date: 2021-02-03 04:31+0000\n" +"Last-Translator: Vít Skalický \n" "Language-Team: Czech \n" "Language: cs\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 4.3.2\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -24,7 +24,7 @@ msgstr "Zemřel jsi" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" -msgstr "" +msgstr "OK" #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" @@ -108,7 +108,7 @@ msgstr "" #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" -msgstr "" +msgstr "Najít více modů" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" @@ -153,7 +153,7 @@ msgstr "zapnuto" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" již existuje. Chcete jej přepsat?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." @@ -161,18 +161,19 @@ msgstr "" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 od $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 se stahuje,\n" +"$2 čeká ve frontě" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Nahrávám..." +msgstr "$1 se stahuje..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." From fbdb517274467779d898b2b32164c5ae78abbc64 Mon Sep 17 00:00:00 2001 From: Ronoaldo Pereira Date: Wed, 3 Feb 2021 04:26:35 +0000 Subject: [PATCH 023/110] Translated using Weblate (Portuguese (Brazil)) Currently translated at 93.7% (1269 of 1353 strings) --- po/pt_BR/minetest.po | 769 +++++++++++++++++++++++-------------------- 1 file changed, 410 insertions(+), 359 deletions(-) diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po index 811834c6b..579069fa6 100644 --- a/po/pt_BR/minetest.po +++ b/po/pt_BR/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Portuguese (Brazil) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2021-01-22 03:32+0000\n" +"PO-Revision-Date: 2021-02-23 15:50+0000\n" "Last-Translator: Ronoaldo Pereira \n" "Language-Team: Portuguese (Brazil) \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.5\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -60,11 +60,11 @@ msgstr "O servidor suporta versões de protocolo entre $1 e $2. " #: builtin/mainmenu/common.lua msgid "We only support protocol version $1." -msgstr "Nós apenas suportamos a versão de protocolo $1." +msgstr "Suportamos apenas o protocolo de versão $1." #: builtin/mainmenu/common.lua msgid "We support protocol versions between version $1 and $2." -msgstr "Nós suportamos as versões de protocolo entre $1 e $2 ." +msgstr "Suportamos protocolos com versões entre $1 e $2." #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_create_world.lua @@ -125,7 +125,7 @@ msgstr "Nenhuma descrição de jogo disponível." #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" -msgstr "Sem dependências rígidas" +msgstr "Sem dependências" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." @@ -154,52 +154,51 @@ msgstr "habilitado" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" já existe. Gostaria de sobrescrevê-lo?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "As dependências $1 e $2 serão instaladas." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 por $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 baixando,\n" +"$2 na fila" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Baixando..." +msgstr "$1 baixando..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 dependências obrigatórias não puderam ser encontradas." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 será instalado, e $2 dependências serão ignoradas." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "Todos os pacotes" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "Essa tecla já está em uso" +msgstr "Já instalado" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Voltar ao menu principal" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Criar Jogo" +msgstr "Jogo Base:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" @@ -211,7 +210,7 @@ msgstr "Baixando..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" -msgstr "Falhou em baixar $1" +msgstr "Falha ao baixar $1" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -223,14 +222,12 @@ msgid "Install" msgstr "Instalar" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Instalar" +msgstr "Instalar $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Dependências opcionais:" +msgstr "Instalar dependências ausentes" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -239,33 +236,31 @@ msgstr "Modulos (Mods)" #: builtin/mainmenu/dlg_contentstore.lua msgid "No packages could be retrieved" -msgstr "Nenhum pacote pode ser recuperado" +msgstr "Nenhum pacote pôde ser recuperado" #: builtin/mainmenu/dlg_contentstore.lua msgid "No results" msgstr "Sem resultados" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Atualizar" +msgstr "Sem atualizações" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Not found" -msgstr "Mutar som" +msgstr "Não encontrado" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Sobrescrever" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Verifique se o jogo base está correto." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "Na fila" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -281,11 +276,11 @@ msgstr "Atualizar" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Atualizar tudo [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Veja mais informações em um navegador da web" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -297,15 +292,15 @@ msgstr "Terreno adicional" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Altitude chill" -msgstr "Frio de altitude" +msgstr "Altitude fria" #: builtin/mainmenu/dlg_create_world.lua msgid "Altitude dry" -msgstr "Frio de altitude" +msgstr "Altitude seca" #: builtin/mainmenu/dlg_create_world.lua msgid "Biome blending" -msgstr "Harmonização do bioma" +msgstr "Transição de bioma" #: builtin/mainmenu/dlg_create_world.lua msgid "Biomes" @@ -333,7 +328,7 @@ msgstr "Baixe um jogo, como Minetest Game, do site minetest.net" #: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" -msgstr "Baixe um apartir do site minetest.net" +msgstr "Baixe um a partir do site minetest.net" #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" @@ -345,7 +340,7 @@ msgstr "Terreno plano" #: builtin/mainmenu/dlg_create_world.lua msgid "Floating landmasses in the sky" -msgstr "Ilhas flutuantes" +msgstr "Ilhas flutuantes no céu" #: builtin/mainmenu/dlg_create_world.lua msgid "Floatlands (experimental)" @@ -361,7 +356,7 @@ msgstr "Gera terrenos não fractais: Oceanos e subterrâneos" #: builtin/mainmenu/dlg_create_world.lua msgid "Hills" -msgstr "Montanhas" +msgstr "Colinas" #: builtin/mainmenu/dlg_create_world.lua msgid "Humid rivers" @@ -385,11 +380,11 @@ msgstr "Gerador de mapa" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen flags" -msgstr "Flags do gerador de mundo" +msgstr "Opções do gerador de mapas" #: builtin/mainmenu/dlg_create_world.lua msgid "Mapgen-specific flags" -msgstr "Parâmetros específicos do gerador de mundo V5" +msgstr "Parâmetros específicos do gerador de mapas" #: builtin/mainmenu/dlg_create_world.lua msgid "Mountains" @@ -409,11 +404,11 @@ msgstr "Nenhum jogo selecionado" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces heat with altitude" -msgstr "Reduz calor com altitude" +msgstr "Reduz calor com a altitude" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces humidity with altitude" -msgstr "Reduz humidade com altitude" +msgstr "Reduz humidade com a altitude" #: builtin/mainmenu/dlg_create_world.lua msgid "Rivers" @@ -426,7 +421,7 @@ msgstr "Rios ao nível do mar" #: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" -msgstr "Seed" +msgstr "Semente (Seed)" #: builtin/mainmenu/dlg_create_world.lua msgid "Smooth transition between biomes" @@ -454,11 +449,11 @@ msgstr "Temperado, Deserto, Selva" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle, Tundra, Taiga" -msgstr "Temperado, Deserto, Selva, Tundra, Floresta Boreal" +msgstr "Temperado, Deserto, Selva, Tundra, Taiga" #: builtin/mainmenu/dlg_create_world.lua msgid "Terrain surface erosion" -msgstr "Altura da erosão de terreno" +msgstr "Erosão na superfície do terreno" #: builtin/mainmenu/dlg_create_world.lua msgid "Trees and jungle grass" @@ -466,16 +461,15 @@ msgstr "Árvores e relva da selva" #: builtin/mainmenu/dlg_create_world.lua msgid "Vary river depth" -msgstr "Rios profundos" +msgstr "Variar altura dos rios" #: builtin/mainmenu/dlg_create_world.lua msgid "Very large caverns deep in the underground" -msgstr "Cavernas bastante profundas" +msgstr "Cavernas muito grandes nas profundezas do subsolo" #: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The Development Test is meant for developers." -msgstr "" -"Aviso: O game \"minimal development test\" apenas serve para desenvolvedores." +msgstr "Aviso: O jogo Development Test é projetado para desenvolvedores." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -513,7 +507,7 @@ msgstr "Aceitar" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" -msgstr "Renomear pacote de módulos:" +msgstr "Renomear Modpack:" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "" @@ -521,7 +515,7 @@ msgid "" "override any renaming here." msgstr "" "Esse modpack possui um nome explícito em seu modpack.conf que vai " -"sobrescrever qualquer renomeio aqui." +"sobrescrever qualquer nome aqui." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "(No description of setting given)" @@ -569,7 +563,7 @@ msgstr "Persistência" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid integer." -msgstr "Por favor insira um inteiro válido." +msgstr "Por favor, insira um inteiro válido." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid number." @@ -577,7 +571,7 @@ msgstr "Por favor, insira um número válido." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Restore Default" -msgstr "Restaurar para o padrão" +msgstr "Restaurar Padrão" #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Scale" @@ -644,7 +638,7 @@ msgstr "valor absoluto" #. for noise settings in main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "defaults" -msgstr "Padrões" +msgstr "padrão" #. ~ "eased" is a noise parameter flag. #. It is used to make the map smoother and @@ -660,34 +654,33 @@ msgstr "$1 (Habilitado)" #: builtin/mainmenu/pkgmgr.lua msgid "$1 mods" -msgstr "$1 módulos" +msgstr "$1 mods" #: builtin/mainmenu/pkgmgr.lua msgid "Failed to install $1 to $2" -msgstr "Não foi possível instalar $1 para $2" +msgstr "Não foi possível instalar $1 em $2" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find real mod name for: $1" -msgstr "" -"Instalação de módulo: não foi possível encontrar o nome real do módulo: $1" +msgstr "Instalação de mod: não foi possível encontrar o nome real do mod: $1" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -"Instalação do Mod: não foi possível encontrar o nome da pasta adequado para " +"Instalação de mod: não foi possível encontrar o nome da pasta adequado para " "o modpack $1" #: builtin/mainmenu/pkgmgr.lua msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Instalar: Tipo de arquivo \"$1\" não suportado ou corrompido" +msgstr "Instalação: Tipo de arquivo \"$1\" não suportado ou corrompido" #: builtin/mainmenu/pkgmgr.lua msgid "Install: file: \"$1\"" -msgstr "Instalar: arquivo: \"$1\"" +msgstr "Instalação: arquivo: \"$1\"" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" -msgstr "Incapaz de encontrar um módulo ou modpack válido" +msgstr "Incapaz de encontrar um mod ou modpack válido" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a $1 as a texture pack" @@ -699,7 +692,7 @@ msgstr "Não foi possível instalar um jogo como um $1" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a mod as a $1" -msgstr "Não foi possível instalar um módulo como um $1" +msgstr "Não foi possível instalar um mod como um $1" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a modpack as a $1" @@ -712,8 +705,8 @@ msgstr "Carregando..." #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -"Tente reabilitar a lista de servidores públicos e verifique sua conexão com " -"a internet." +"Tente reativar a lista de servidores públicos e verifique sua conexão com a " +"internet." #: builtin/mainmenu/tab_content.lua msgid "Browse online content" @@ -725,7 +718,7 @@ msgstr "Conteúdo" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" -msgstr "Desabilitar pacote de texturas" +msgstr "Desabilitar Pacote de Texturas" #: builtin/mainmenu/tab_content.lua msgid "Information:" @@ -733,7 +726,7 @@ msgstr "Informação:" #: builtin/mainmenu/tab_content.lua msgid "Installed Packages:" -msgstr "Pacotes instalados:" +msgstr "Pacotes Instalados:" #: builtin/mainmenu/tab_content.lua msgid "No dependencies." @@ -741,7 +734,7 @@ msgstr "Sem dependências." #: builtin/mainmenu/tab_content.lua msgid "No package description available" -msgstr "Nenhuma descrição do pacote disponível" +msgstr "Nenhuma descrição de pacote disponível" #: builtin/mainmenu/tab_content.lua msgid "Rename" @@ -749,66 +742,67 @@ msgstr "Renomear" #: builtin/mainmenu/tab_content.lua msgid "Uninstall Package" -msgstr "Desinstalar o pacote" +msgstr "Desinstalar Pacote" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" -msgstr "Usar pacote de texturas" +msgstr "Usar Pacote de Texturas" #: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" -msgstr "Colaboradores ativos" +msgstr "Colaboradores Ativos" #: builtin/mainmenu/tab_credits.lua msgid "Core Developers" -msgstr "Desenvolvedores principais" +msgstr "Desenvolvedores Principais" #: builtin/mainmenu/tab_credits.lua msgid "Credits" msgstr "Créditos" #: builtin/mainmenu/tab_credits.lua -#, fuzzy msgid "Open User Data Directory" -msgstr "Selecione o diretório" +msgstr "Abrir diretório de dados do usuário" #: builtin/mainmenu/tab_credits.lua msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Abre o diretório que contém mundos, jogos, mods fornecidos pelo usuário,\n" +"e pacotes de textura em um gerenciador / navegador de arquivos." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" -msgstr "Colaboradores anteriores" +msgstr "Colaboradores Anteriores" #: builtin/mainmenu/tab_credits.lua msgid "Previous Core Developers" -msgstr "Desenvolvedores principais anteriores" +msgstr "Desenvolvedores Principais Anteriores" #: builtin/mainmenu/tab_local.lua msgid "Announce Server" -msgstr "Anunciar servidor" +msgstr "Anunciar Servidor" #: builtin/mainmenu/tab_local.lua msgid "Bind Address" -msgstr "Endereço de Bind" +msgstr "Endereço" #: builtin/mainmenu/tab_local.lua msgid "Creative Mode" -msgstr "Modo criativo" +msgstr "Modo Criativo" #: builtin/mainmenu/tab_local.lua msgid "Enable Damage" -msgstr "Habilitar dano" +msgstr "Habilitar Dano" #: builtin/mainmenu/tab_local.lua msgid "Host Game" -msgstr "Criar Jogo" +msgstr "Hospedar Jogo" #: builtin/mainmenu/tab_local.lua msgid "Host Server" -msgstr "Criar Servidor" +msgstr "Hospedar Servidor" #: builtin/mainmenu/tab_local.lua msgid "Install games from ContentDB" @@ -816,7 +810,7 @@ msgstr "Instalar jogos do ContentDB" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "Nome" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -827,9 +821,8 @@ msgid "No world created or selected!" msgstr "Nenhum mundo criado ou selecionado!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Password" -msgstr "Nova senha" +msgstr "Senha" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -840,9 +833,8 @@ msgid "Port" msgstr "Porta" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "Selecione um mundo:" +msgstr "Selecione Mods" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -850,11 +842,11 @@ msgstr "Selecione um mundo:" #: builtin/mainmenu/tab_local.lua msgid "Server Port" -msgstr "Porta do servidor" +msgstr "Porta do Servidor" #: builtin/mainmenu/tab_local.lua msgid "Start Game" -msgstr "Iniciar o jogo" +msgstr "Iniciar Jogo" #: builtin/mainmenu/tab_online.lua msgid "Address / Port" @@ -874,15 +866,15 @@ msgstr "Dano habilitado" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" -msgstr "Deletar Favorito" +msgstr "Rem. Favorito" #: builtin/mainmenu/tab_online.lua msgid "Favorite" -msgstr "Favoritos" +msgstr "Favorito" #: builtin/mainmenu/tab_online.lua msgid "Join Game" -msgstr "Juntar-se ao jogo" +msgstr "Entrar em um Jogo" #: builtin/mainmenu/tab_online.lua msgid "Name / Password" @@ -919,7 +911,7 @@ msgstr "Todas as configurações" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" -msgstr "Antialiasing:" +msgstr "Anti-aliasing:" #: builtin/mainmenu/tab_settings.lua msgid "Autosave Screen Size" @@ -994,9 +986,8 @@ msgid "Shaders" msgstr "Sombreadores" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Shaders (experimental)" -msgstr "Ilhas flutuantes (experimental)" +msgstr "Sombreadores (experimental)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" @@ -1093,7 +1084,7 @@ msgstr "Nome de jogador muito longo." #: src/client/clientlauncher.cpp msgid "Please choose a name!" -msgstr "Por favor escolha um nome!" +msgstr "Por favor, escolha um nome!" #: src/client/clientlauncher.cpp msgid "Provided password file failed to open: " @@ -1101,7 +1092,7 @@ msgstr "Arquivo de senha fornecido falhou em abrir : " #: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " -msgstr "O caminho do mundo providenciado não existe. " +msgstr "Caminho informado para o mundo não existe: " #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string. Put either "no" or "yes" @@ -1129,7 +1120,7 @@ msgstr "- Endereço: " #: src/client/game.cpp msgid "- Creative Mode: " -msgstr "Modo Criativo: " +msgstr "- Modo Criativo: " #: src/client/game.cpp msgid "- Damage: " @@ -1197,7 +1188,7 @@ msgid "Continue" msgstr "Continuar" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1215,32 +1206,19 @@ msgid "" "- %s: chat\n" msgstr "" "Controles:\n" -"\n" -"- %s1: andar para frente\n" -"\n" -"- %s2: andar para trás\n" -"\n" -"- %s3: andar para a esquerda\n" -"\n" -"-%s4: andar para a direita\n" -"\n" -"- %s5: pular/escalar\n" -"\n" -"- %s6: esgueirar/descer\n" -"\n" -"- %s7: soltar item\n" -"\n" -"- %s8: inventário\n" -"\n" +"- %s: mover para frente\n" +"- %s: mover para trás\n" +"- %s: mover para esquerda\n" +"- %s: mover para direita\n" +"- %s: pular/subir\n" +"- %s: cavar/socar\n" +"- %s: colocar/usar\n" +"- %s: andar furtivamente/descer\n" +"- %s: soltar item\n" +"- %s: inventário\n" "- Mouse: virar/olhar\n" -"\n" -"- Botão esquerdo do mouse: cavar/dar soco\n" -"\n" -"- Botão direito do mouse: colocar/usar\n" -"\n" "- Roda do mouse: selecionar item\n" -"\n" -"- %s9: bate-papo\n" +"- %s: bate-papo\n" #: src/client/game.cpp msgid "Creating client..." @@ -1316,7 +1294,7 @@ msgstr "Modo rápido habilitado" #: src/client/game.cpp msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "Modo rápido habilitado(note: sem privilégio 'fast')" +msgstr "Modo rápido habilitado (nota: sem o privilégio 'fast')" #: src/client/game.cpp msgid "Fly mode disabled" @@ -1432,11 +1410,11 @@ msgstr "Som mutado" #: src/client/game.cpp msgid "Sound system is disabled" -msgstr "Som do sistema está desativado" +msgstr "Sistema de som está desativado" #: src/client/game.cpp msgid "Sound system is not supported on this build" -msgstr "Som do sistema não é suportado nesta versão" +msgstr "Sistema de som não é suportado nesta versão" #: src/client/game.cpp msgid "Sound unmuted" @@ -1767,19 +1745,18 @@ msgid "Minimap hidden" msgstr "Minimapa escondido" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "Minimapa em modo radar, zoom 1x" +msgstr "Minimapa em modo radar, Zoom %dx" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "Minimapa em modo de superfície, zoom 1x" +msgstr "Minimapa em modo de superfície, Zoom %dx" #: src/client/minimap.cpp -#, fuzzy msgid "Minimap in texture mode" -msgstr "Tamanho mínimo da textura" +msgstr "Minimapa em modo de textura" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" @@ -1889,11 +1866,11 @@ msgstr "" #: src/gui/guiKeyChangeMenu.cpp msgid "Local command" -msgstr "Comandos de Local" +msgstr "Comando local" #: src/gui/guiKeyChangeMenu.cpp msgid "Mute" -msgstr "Mutar" +msgstr "Mudo" #: src/gui/guiKeyChangeMenu.cpp msgid "Next item" @@ -2066,7 +2043,7 @@ msgstr "Ruído 2D que controla o formato/tamanho de colinas." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of step mountains." -msgstr "Ruído 2D que controla o formato/tamanho de montanhas de etapa." +msgstr "Ruído 2D que controla o formato/tamanho de montanhas de caminhada." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of ridged mountain ranges." @@ -2078,7 +2055,9 @@ msgstr "2D noise que controla o tamanho/ocorrência de colinas." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of step mountain ranges." -msgstr "Ruído 2D que controla o tamanho/ocorrência de montanhas de passo." +msgstr "" +"Ruído 2D que controla o tamanho/ocorrência de intervalos de montanhas de " +"caminhar." #: src/settings_translation_file.cpp msgid "2D noise that locates the river valleys and channels." @@ -2098,14 +2077,14 @@ msgstr "Força de paralaxe do modo 3D" #: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." -msgstr "barulho 3D que define cavernas gigantes." +msgstr "Ruído 3D que define cavernas gigantes." #: src/settings_translation_file.cpp msgid "" "3D noise defining mountain structure and height.\n" "Also defines structure of floatland mountain terrain." msgstr "" -"barulho 3D que define estrutura de montanha e altura.\n" +"Ruído 3D que define estrutura de montanha e altura.\n" "Também define a estrutura do terreno da montanha das ilhas flutuantes." #: src/settings_translation_file.cpp @@ -2190,7 +2169,7 @@ msgstr "Intervalo do ABM" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "Alocação de tempo do ABM" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" @@ -2314,7 +2293,7 @@ msgstr "Concatenar nome do item a descrição." #: src/settings_translation_file.cpp msgid "Apple trees noise" -msgstr "Barulho das Árvores de Macieira" +msgstr "Ruído de Árvores de Macieira" #: src/settings_translation_file.cpp msgid "Arm inertia" @@ -2401,11 +2380,11 @@ msgstr "Privilégios básicos" #: src/settings_translation_file.cpp msgid "Beach noise" -msgstr "barulho de praia" +msgstr "Ruído de praias" #: src/settings_translation_file.cpp msgid "Beach noise threshold" -msgstr "Limitar o barulho da praia" +msgstr "Limiar do ruído de praias." #: src/settings_translation_file.cpp msgid "Bilinear filtering" @@ -2484,15 +2463,15 @@ msgstr "Tecla para alternar atualização da câmera" #: src/settings_translation_file.cpp msgid "Cave noise" -msgstr "Barulho nas caverna" +msgstr "Ruído de cavernas" #: src/settings_translation_file.cpp msgid "Cave noise #1" -msgstr "Barulho na caverna #1" +msgstr "Ruído de cavernas #1" #: src/settings_translation_file.cpp msgid "Cave noise #2" -msgstr "Barulho na caverna #2" +msgstr "Ruído de cavernas #2" #: src/settings_translation_file.cpp msgid "Cave width" @@ -2500,11 +2479,11 @@ msgstr "Largura da caverna" #: src/settings_translation_file.cpp msgid "Cave1 noise" -msgstr "Barulho na caverna1" +msgstr "Ruídos de Cave1" #: src/settings_translation_file.cpp msgid "Cave2 noise" -msgstr "Barulho na caverna2" +msgstr "Ruídos de Cave2" #: src/settings_translation_file.cpp msgid "Cavern limit" @@ -2512,7 +2491,7 @@ msgstr "Limite da caverna" #: src/settings_translation_file.cpp msgid "Cavern noise" -msgstr "Barulho da caverna" +msgstr "Ruído de cavernas" #: src/settings_translation_file.cpp msgid "Cavern taper" @@ -2531,6 +2510,8 @@ msgid "" "Center of light curve boost range.\n" "Where 0.0 is minimum light level, 1.0 is maximum light level." msgstr "" +"Centro da faixa de aumento da curva de luz.\n" +"Onde 0.0 é o nível mínimo de luz, 1.0 é o nível máximo de luz." #: src/settings_translation_file.cpp msgid "Chat font size" @@ -2698,7 +2679,7 @@ msgstr "Lista negra de flags do ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "Máximo de downloads simultâneos de ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB URL" @@ -2766,11 +2747,12 @@ msgid "Crosshair alpha" msgstr "Alpha do cursor" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "Alpha do cursor (o quanto ele é opaco, níveis entre 0 e 255)." +msgstr "" +"Alpha do cursor (o quanto ele é opaco, níveis entre 0 e 255).\n" +"Também controla a cor da cruz do objeto" #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2781,6 +2763,8 @@ msgid "" "Crosshair color (R,G,B).\n" "Also controls the object crosshair color" msgstr "" +"Cor da cruz (R, G, B).\n" +"Também controla a cor da cruz do objeto" #: src/settings_translation_file.cpp msgid "DPI" @@ -2945,8 +2929,8 @@ msgid "" "Description of server, to be displayed when players join and in the " "serverlist." msgstr "" -"Descrição do servidor, a ser exibida quando os jogadores se se conectarem e " -"na lista de servidores." +"Descrição do servidor, a ser exibida quando os jogadores se conectarem e na " +"lista de servidores." #: src/settings_translation_file.cpp msgid "Desert noise threshold" @@ -2965,9 +2949,8 @@ msgid "Desynchronize block animation" msgstr "Dessincronizar animação do bloco" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dig key" -msgstr "Tecla direita" +msgstr "Tecla para escavar" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3184,11 +3167,18 @@ msgid "" "Values < 1.0 (for example 0.25) create a more defined surface level with\n" "flatter lowlands, suitable for a solid floatland layer." msgstr "" +"Expoente de estreitamento das ilhas flutuantes. Altera o comportamento de " +"afilamento.\n" +"Valor = 1.0 cria um afunilamento linear uniforme.\n" +"Valores> 1.0 criam um estreitamento suave adequado para as ilhas flutuantes\n" +"padrão (separadas).\n" +"Valores <1.0 (por exemplo 0.25) criam um nível de superfície mais definido " +"com\n" +"planícies mais planas, adequadas para uma camada sólida de ilhas flutuantes." #: src/settings_translation_file.cpp -#, fuzzy msgid "FPS when unfocused or paused" -msgstr "Máximo FPS quando o jogo é pausado." +msgstr "FPS quando o jogo é pausado ou perde o foco" #: src/settings_translation_file.cpp msgid "FSAA" @@ -3203,9 +3193,8 @@ msgid "Fall bobbing factor" msgstr "Fator de balanço em queda" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fallback font path" -msgstr "Fonte Alternativa" +msgstr "Fonte reserva" #: src/settings_translation_file.cpp msgid "Fallback font shadow" @@ -3306,39 +3295,32 @@ msgid "Fixed virtual joystick" msgstr "Joystick virtual fixo" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland density" -msgstr "Densidade da Ilha Flutuante montanhosa" +msgstr "Densidade das terras flutuantes" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland maximum Y" -msgstr "Y máximo da dungeon" +msgstr "Y máximo das terras flutuantes" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland minimum Y" -msgstr "Y mínimo da dungeon" +msgstr "Y mínimo das terras flutuantes" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland noise" -msgstr "Ruído base de Ilha Flutuante" +msgstr "Ruído das terras flutuantes" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland taper exponent" -msgstr "Expoente de terras flutuantes montanhosas" +msgstr "Expoente de conicidade das ilhas flutuantes" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland tapering distance" -msgstr "Ruído base de Ilha Flutuante" +msgstr "Distância de afilamento da ilha flutuante" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland water level" -msgstr "Nível de água" +msgstr "Nível de água da ilha flutuante" #: src/settings_translation_file.cpp msgid "Fly key" @@ -3362,11 +3344,11 @@ msgstr "Tecla de comutação de névoa" #: src/settings_translation_file.cpp msgid "Font bold by default" -msgstr "" +msgstr "Fonte em negrito por padrão" #: src/settings_translation_file.cpp msgid "Font italic by default" -msgstr "" +msgstr "Fonte em itálico por padrão" #: src/settings_translation_file.cpp msgid "Font shadow" @@ -3382,21 +3364,24 @@ msgstr "Tamanho da fonte" #: src/settings_translation_file.cpp msgid "Font size of the default font in point (pt)." -msgstr "" +msgstr "Tamanho da fonte padrão em pontos (pt)." #: src/settings_translation_file.cpp msgid "Font size of the fallback font in point (pt)." -msgstr "" +msgstr "Tamanho da fonte reserva em pontos (pt)." #: src/settings_translation_file.cpp msgid "Font size of the monospace font in point (pt)." -msgstr "" +msgstr "Tamanho da fonte de largura fixa em pontos (pt)." #: src/settings_translation_file.cpp msgid "" "Font size of the recent chat text and chat prompt in point (pt).\n" "Value 0 will use the default font size." msgstr "" +"Tamanho da fonte do texto de bate-papo recente e do prompt do bate-papo em " +"pontos (pt).\n" +"O valor 0 irá utilizar o tamanho padrão de fonte." #: src/settings_translation_file.cpp msgid "" @@ -3404,6 +3389,9 @@ msgid "" "placeholders:\n" "@name, @message, @timestamp (optional)" msgstr "" +"Formato das mensagem de bate-papo dos jogadores. Os textos abaixo são " +"palavras-chave válidas:\n" +"@name, @message, @timestamp (opcional)" #: src/settings_translation_file.cpp msgid "Format of screenshots." @@ -3532,18 +3520,20 @@ msgstr "" "todas as decorações." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Gradient of light curve at maximum light level.\n" "Controls the contrast of the highest light levels." -msgstr "Curva gradiente de iluminaçao no nível de luz maximo." +msgstr "" +"Gradiente da curva de luz no nível de luz máximo.\n" +"Controla o contraste dos níveis de luz mais altos." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Gradient of light curve at minimum light level.\n" "Controls the contrast of the lowest light levels." -msgstr "Curva gradiente de iluminação no nível de luz mínimo." +msgstr "" +"Gradiente da curva de luz no nível de luz mínimo.\n" +"Controla o contraste dos níveis de luz mais baixos." #: src/settings_translation_file.cpp msgid "Graphics" @@ -3574,7 +3564,6 @@ msgid "HUD toggle key" msgstr "Tecla de comutação HUD" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- none: Do not log deprecated calls\n" @@ -3582,9 +3571,9 @@ msgid "" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" "Lidando com funções obsoletas da API Lua:\n" -"-...legacy: (tenta) imitar o comportamento antigo (padrão para release).\n" -"-...log: Imita e gera log das funções obsoletas (padrão para debug).\n" -"-...error: Aborta quando chama uma função obsoleta (sugerido para " +"-...none: não registra funções obsoletas.\n" +"-...log: imita e registra as funções obsoletas chamadas (padrão).\n" +"-...error: aborta quando chama uma função obsoleta (sugerido para " "desenvolvedores de mods)." #: src/settings_translation_file.cpp @@ -3658,18 +3647,24 @@ msgid "" "Horizontal acceleration in air when jumping or falling,\n" "in nodes per second per second." msgstr "" +"Aceleração horizontal no ar ao saltar ou cair,\n" +"em nós por segundo por segundo." #: src/settings_translation_file.cpp msgid "" "Horizontal and vertical acceleration in fast mode,\n" "in nodes per second per second." msgstr "" +"Aceleração horizontal e vertical no modo rápido,\n" +"em nós por segundo por segundo." #: src/settings_translation_file.cpp msgid "" "Horizontal and vertical acceleration on ground or when climbing,\n" "in nodes per second per second." msgstr "" +"Aceleração horizontal e vertical no solo ou ao escalar,\n" +"em nós por segundo por segundo." #: src/settings_translation_file.cpp msgid "Hotbar next key" @@ -3817,6 +3812,9 @@ msgid "" "If negative, liquid waves will move backwards.\n" "Requires waving liquids to be enabled." msgstr "" +"A velocidade com que as ondas líquidas se movem. Maior = mais rápido.\n" +"Se negativo, as ondas líquidas se moverão para trás.\n" +"Requer que a ondulação de líquidos esteja ativada." #: src/settings_translation_file.cpp msgid "" @@ -3957,6 +3955,12 @@ msgid "" "deleting an older debug.txt.1 if it exists.\n" "debug.txt is only moved if this setting is positive." msgstr "" +"Se o tamanho do arquivo debug.txt exceder o número de megabytes " +"especificado\n" +"nesta configuração quando ele for aberto, o arquivo é movido para debug.txt." +"1,\n" +"excluindo um debug.txt.1 mais antigo, se houver.\n" +"debug.txt só é movido se esta configuração for positiva." #: src/settings_translation_file.cpp msgid "If this is set, players will always (re)spawn at the given position." @@ -3994,15 +3998,15 @@ msgstr "Tecla de aumentar volume" #: src/settings_translation_file.cpp msgid "Initial vertical speed when jumping, in nodes per second." -msgstr "" +msgstr "Velocidade vertical inicial ao saltar, em nós por segundo." #: src/settings_translation_file.cpp msgid "" "Instrument builtin.\n" "This is usually only needed by core/builtin contributors" msgstr "" -"Monitoração imbutida.\n" -"Isto é usualmente apenas nessesário por contribuidores core/builtin" +"Monitoração embutida.\n" +"Isto é necessário apenas por contribuidores core/builtin" #: src/settings_translation_file.cpp msgid "Instrument chatcommands on registration." @@ -4063,14 +4067,12 @@ msgid "Invert vertical mouse movement." msgstr "Inverta o movimento vertical do mouse." #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic font path" -msgstr "Caminho de fonte monoespaçada" +msgstr "Caminho da fonte em itálico" #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic monospace font path" -msgstr "Caminho de fonte monoespaçada" +msgstr "Caminho da fonte em itálico monoespaçada" #: src/settings_translation_file.cpp msgid "Item entity TTL" @@ -4102,9 +4104,8 @@ msgid "Joystick button repetition interval" msgstr "Intervalo de repetição do botão do Joystick" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick deadzone" -msgstr "Tipo do Joystick" +msgstr "\"Zona morta\" do joystick" #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" @@ -4202,18 +4203,17 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Tecla para diminuir o alcance de visão.\n" +"Tecla para diminuir o volume.\n" "Consulte http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for digging.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Tecla para pular. \n" +"Tecla para escavar. \n" "Consulte http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4360,13 +4360,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for placing.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Tecla para pular. \n" +"Tecla para colocar objetos. \n" "Consulte http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4928,15 +4927,15 @@ msgstr "Profundidade de cavernas grandes" #: src/settings_translation_file.cpp msgid "Large cave maximum number" -msgstr "" +msgstr "Número máximo de cavernas grandes" #: src/settings_translation_file.cpp msgid "Large cave minimum number" -msgstr "" +msgstr "Número mínimo de cavernas grandes" #: src/settings_translation_file.cpp msgid "Large cave proportion flooded" -msgstr "" +msgstr "Proporção inundada de cavernas grandes" #: src/settings_translation_file.cpp msgid "Large chat console key" @@ -4972,13 +4971,12 @@ msgstr "" "geralmente atualizados em rede." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of liquid waves.\n" "Requires waving liquids to be enabled." msgstr "" -"Definido como true habilita balanço folhas.\n" -"Requer sombreadores serem ativados." +"Comprimento das ondas líquidas.\n" +"Requer que a ondulação de líquidos esteja ativada." #: src/settings_translation_file.cpp msgid "Length of time between Active Block Modifier (ABM) execution cycles" @@ -5013,34 +5011,28 @@ msgstr "" "- verbose" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve boost" -msgstr "Aumento leve da curva de luz" +msgstr "Aumento da curva de luz" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve boost center" -msgstr "Centro do aumento leve da curva de luz" +msgstr "Centro do aumento da curva de luz" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve boost spread" -msgstr "Extensão do aumento leve da curva de luz" +msgstr "Extensão do aumento da curva de luz" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve gamma" -msgstr "Aumento leve da curva de luz" +msgstr "Gamma da curva de luz" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve high gradient" -msgstr "Aumento leve da curva de luz" +msgstr "Gradiente alto da curva de luz" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve low gradient" -msgstr "Centro do aumento leve da curva de luz" +msgstr "Gradiente baixo da curva de luz" #: src/settings_translation_file.cpp msgid "" @@ -5084,9 +5076,8 @@ msgid "Liquid queue purge time" msgstr "Tempo para limpar a lista de espera para a atualização de líquidos" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid sinking" -msgstr "Velocidade do afundamento de liquido" +msgstr "Afundamento do líquido" #: src/settings_translation_file.cpp msgid "Liquid update interval in seconds." @@ -5119,9 +5110,8 @@ msgid "Lower Y limit of dungeons." msgstr "Menor limite Y de dungeons." #: src/settings_translation_file.cpp -#, fuzzy msgid "Lower Y limit of floatlands." -msgstr "Menor limite Y de dungeons." +msgstr "Menor limite Y de ilhas flutuantes." #: src/settings_translation_file.cpp msgid "Main menu script" @@ -5144,11 +5134,11 @@ msgstr "Torna todos os líquidos opacos" #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" -msgstr "" +msgstr "Nível de Compressão de Mapa no Armazenamento em Disco" #: src/settings_translation_file.cpp msgid "Map Compression Level for Network Transfer" -msgstr "" +msgstr "Nível de Compressão do Mapa na Transferência em Rede" #: src/settings_translation_file.cpp msgid "Map directory" @@ -5159,23 +5149,22 @@ msgid "Map generation attributes specific to Mapgen Carpathian." msgstr "Atributos de geração de mapa específicos ao gerador Carpathian." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen Flat.\n" "Occasional lakes and hills can be added to the flat world." msgstr "" -"Atributos de geração de mapas específicos para o gerador de mundo plano.\n" +"Atributos de geração de mapas específicos para o Gerador de mundo Plano.\n" "Lagos e colinas ocasionalmente podem ser adicionados ao mundo plano." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen Fractal.\n" "'terrain' enables the generation of non-fractal terrain:\n" "ocean, islands and underground." msgstr "" -"Atributos de geração de mapa específicos ao gerador V7.\n" -"'ridges' habilitam os rios." +"Atributos de geração de mapas específicos para o Gerador de mundo Fractal.\n" +"'terreno' permite a geração de terreno não fractal:\n" +"oceano, ilhas e subterrâneos." #: src/settings_translation_file.cpp msgid "" @@ -5190,7 +5179,7 @@ msgstr "" "'altitude_chill':Reduz o calor com a altitude.\n" "'humid_rivers':Aumenta a umidade em volta dos rios.\n" "'profundidade_variada_rios': Se habilitado, baixa umidade e alto calor faz " -"com que que rios se tornem mais rasos e eventualmente sumam.\n" +"com que rios se tornem mais rasos e eventualmente sumam.\n" "'altitude_dry': Reduz a umidade com a altitude." #: src/settings_translation_file.cpp @@ -5198,28 +5187,29 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "Atributos de geração de mapa específicos ao gerador V5." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen v6.\n" "The 'snowbiomes' flag enables the new 5 biome system.\n" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" "the 'jungles' flag is ignored." msgstr "" -"Atributos de geração de mapas específico para o gerador de mundo v6.\n" -" O 'snowbiomes' flag habilita o novo sistema de bioma 5.\n" -"Quando o sistema de novo bioma estiver habilitado, selvas são " -"automaticamente habilitadas e a flag 'jungles' é ignorada." +"Atributos de geração de mapas específicos para Gerador de mapas v6.\n" +"A opção 'snowbiomes' habilita o novo sistema de 5 biomas.\n" +"Quando a opção 'snowbiomes' está ativada, as selvas são ativadas " +"automaticamente e\n" +"a opção 'jungles' é ignorada." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" "'ridges': Rivers.\n" "'floatlands': Floating land masses in the atmosphere.\n" "'caverns': Giant caves deep underground." msgstr "" -"Atributos de geração de mapa específicos ao gerador V7.\n" -"'ridges' habilitam os rios." +"Atributos de geração de mapas específicos para Gerador de mapas v7.\n" +"'ridges': rios.\n" +"'floatlands': massas de terra flutuantes na atmosfera.\n" +"'caverns': cavernas gigantes no subsolo." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -5268,9 +5258,8 @@ msgid "Mapgen Fractal" msgstr "Gerador de mundo Fractal" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Fractal specific flags" -msgstr "Flags específicas do gerador de mundo plano" +msgstr "Opções específicas do Gerador de mapas Fractal" #: src/settings_translation_file.cpp msgid "Mapgen V5" @@ -5337,9 +5326,9 @@ msgid "Maximum FPS" msgstr "FPS máximo" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum FPS when the window is not focused, or when the game is paused." -msgstr "Máximo FPS quando o jogo é pausado." +msgstr "" +"FPS máximo quando a janela não está com foco, ou quando o jogo é pausado." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5351,17 +5340,19 @@ msgstr "Largura máxima da hotbar" #: src/settings_translation_file.cpp msgid "Maximum limit of random number of large caves per mapchunk." -msgstr "" +msgstr "Limite máximo do número aleatório de cavernas grandes por mapchunk." #: src/settings_translation_file.cpp msgid "Maximum limit of random number of small caves per mapchunk." -msgstr "" +msgstr "Limite máximo do número aleatório de cavernas pequenas por mapchunk." #: src/settings_translation_file.cpp msgid "" "Maximum liquid resistance. Controls deceleration when entering liquid at\n" "high speed." msgstr "" +"Resistência líquida máxima. Controla desaceleração ao entrar num líquido\n" +"em alta velocidade." #: src/settings_translation_file.cpp msgid "" @@ -5379,25 +5370,22 @@ msgstr "" "Número máximo de blocos que podem ser enfileirados para o carregamento." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be generated.\n" "This limit is enforced per player." msgstr "" -"Número máximo de blocos para serem enfileirados que estão a ser gerados.\n" -"Definido em branco para uma quantidade apropriada ser escolhida " -"automaticamente." +"Número máximo de blocos para serem enfileirado, dos que estão para ser " +"gerados.\n" +"Esse limite é forçado para cada jogador." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" "This limit is enforced per player." msgstr "" -"Número máximo de blocos para ser enfileirado que serão carregados do " -"arquivo.\n" -"Definido em branco para uma quantidade apropriada ser escolhida " -"automaticamente." +"Número máximo de blocos para serem enfileirado, dos que estão para ser " +"carregados do arquivo.\n" +"Esse limite é forçado para cada jogador." #: src/settings_translation_file.cpp msgid "" @@ -5405,6 +5393,9 @@ msgid "" "be queued.\n" "This should be lower than curl_parallel_limit." msgstr "" +"Número máximo de downloads paralelos. Downloads excedendo esse limite " +"esperarão numa fila.\n" +"Deve ser menor que curl_parallel_limit." #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5501,7 +5492,7 @@ msgstr "Método usado para destacar o objeto selecionado." #: src/settings_translation_file.cpp msgid "Minimal level of logging to be written to chat." -msgstr "" +msgstr "Nível mínimo de registro a ser impresso no chat." #: src/settings_translation_file.cpp msgid "Minimap" @@ -5516,13 +5507,12 @@ msgid "Minimap scan height" msgstr "Altura de escaneamento do minimapa" #: src/settings_translation_file.cpp -#, fuzzy msgid "Minimum limit of random number of large caves per mapchunk." -msgstr "Ruído 3D que determina o número de cavernas por pedaço de mapa." +msgstr "Limite mínimo do número aleatório de grandes cavernas por mapchunk." #: src/settings_translation_file.cpp msgid "Minimum limit of random number of small caves per mapchunk." -msgstr "" +msgstr "Limite mínimo do número aleatório de cavernas pequenas por mapchunk." #: src/settings_translation_file.cpp msgid "Minimum texture size" @@ -5593,19 +5583,17 @@ msgid "Mute sound" msgstr "Mutar som" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Name of map generator to be used when creating a new world.\n" "Creating a world in the main menu will override this.\n" "Current mapgens in a highly unstable state:\n" "- The optional floatlands of v7 (disabled by default)." msgstr "" -"Nome do gerador de mapa usando quando criar um novo mundo.\n" -"Criar um mundo no menu principal vai sobrescrever isto.\n" -"Geradores de mapa estáveis atualmente:\n" -"v5, v6, v7(exceto terras flutuantes), singlenode.\n" -"'estável' significa que a forma do terreno em um mundo existente não será " -"alterado no futuro. Note que biomas definidos por jogos ainda podem mudar." +"Nome do gerador de mapas a ser usado ao criar um novo mundo.\n" +"Criar um mundo no menu principal substituirá isso.\n" +"Geradores de mapa atuais em um estado altamente instável:\n" +"- A opção de ilhas flutuantes do Gerador de mapas de v7 (desabilitado por " +"padrão)." #: src/settings_translation_file.cpp msgid "" @@ -5626,9 +5614,8 @@ msgstr "" "servidores." #: src/settings_translation_file.cpp -#, fuzzy msgid "Near plane" -msgstr "plano próximo" +msgstr "Plano próximo" #: src/settings_translation_file.cpp msgid "Network" @@ -5671,7 +5658,6 @@ msgid "Number of emerge threads" msgstr "Número de seguimentos de emersão" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Number of emerge threads to use.\n" "Value 0:\n" @@ -5684,17 +5670,19 @@ msgid "" "processes, especially in singleplayer and/or when running Lua code in\n" "'on_generated'. For many users the optimum setting may be '1'." msgstr "" -"Número de thread emergentes para usar.\n" -"Vazio ou valor 0:\n" -"- Seleção automática. O número de threads emergentes será 'número de " -"processadores - 2', com limite mínimo de 1.\n" +"Número de threads de emersão a serem usadas.\n" +"Valor 0:\n" +"- Seleção automática. O número de threads de emersão será\n" +"- 'número de processadores - 2', com um limite inferior de 1.\n" "Qualquer outro valor:\n" -"- Especifica o número de threads emergentes com limite mínimo de 1.\n" -"Alerta: aumentando o número de threads emergentes aumenta a velocidade do " -"gerador, mas pode prejudicar o desemepenho interferindo com outros " -"processos, especialmente in singleplayer e/ou quando executando código lua " -"em 'on_generated'.\n" -"Para muitos usuários a opção mais recomendada é 1." +"- Especifica o número de threads de emersão, com um limite inferior de 1.\n" +"AVISO: Aumentar o número de threads de emersão aumenta a velocidade do motor " +"de\n" +"geração de mapas, mas isso pode prejudicar o desempenho do jogo, " +"interferindo com outros\n" +"processos, especialmente em singleplayer e / ou ao executar código Lua em " +"eventos\n" +"'on_generated'. Para muitos usuários, a configuração ideal pode ser '1'." #: src/settings_translation_file.cpp msgid "" @@ -5718,12 +5706,12 @@ msgstr "Líquidos Opacos" #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." -msgstr "" +msgstr "Opacidade (alpha) das sombras atrás da fonte padrão, entre 0 e 255." #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255." -msgstr "" +msgstr "Opacidade (alpha) da sombra atrás da fonte alternativa, entre 0 e 255." #: src/settings_translation_file.cpp msgid "" @@ -5742,12 +5730,20 @@ msgid "" "This font will be used for certain languages or if the default font is " "unavailable." msgstr "" +"Caminho da fonte alternativa.\n" +"Se a configuração \"freetype\" estiver ativa: Deve ser uma fonte TrueType.\n" +"Se a configuração \"freetype\" não estiver ativa: Deve ser uma fonte bitmap " +"ou de vetores XML.\n" +"Essa fonte será usada por certas línguas ou se a padrão não estiver " +"disponível." #: src/settings_translation_file.cpp msgid "" "Path to save screenshots at. Can be an absolute or relative path.\n" "The folder will be created if it doesn't already exist." msgstr "" +"Caminho para salvar capturas de tela. Pode ser absoluto ou relativo.\n" +"A pasta será criada se já não existe." #: src/settings_translation_file.cpp msgid "" @@ -5770,6 +5766,11 @@ msgid "" "If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" "The fallback font will be used if the font cannot be loaded." msgstr "" +"Caminho para a fonte padrão.\n" +"Se a configuração \"freetype\" estiver ativa: Deve ser uma fonte TrueType.\n" +"Se a configuração \"freetype\" não estiver ativa: Deve ser uma fonte bitmap " +"ou de vetores XML.\n" +"A fonte alternativa será usada se não for possível carregar essa." #: src/settings_translation_file.cpp msgid "" @@ -5778,6 +5779,11 @@ msgid "" "If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" "This font is used for e.g. the console and profiler screen." msgstr "" +"Caminho para a fonte monoespaçada.\n" +"Se a configuração \"freetype\" estiver ativa: Deve ser uma fonte TrueType.\n" +"Se a configuração \"freetype\" não estiver ativa: Deve ser uma fonte bitmap " +"ou de vetores XML.\n" +"Essa fonte será usada, por exemplo, no console e na tela de depuração." #: src/settings_translation_file.cpp msgid "Pause on lost window focus" @@ -5785,12 +5791,11 @@ msgstr "Pausa quando o foco da janela é perdido" #: src/settings_translation_file.cpp msgid "Per-player limit of queued blocks load from disk" -msgstr "" +msgstr "Limite de blocos na fila de espera de carregamento do disco por jogador" #: src/settings_translation_file.cpp -#, fuzzy msgid "Per-player limit of queued blocks to generate" -msgstr "Limite de filas emerge para gerar" +msgstr "Limite por jogador de blocos enfileirados para gerar" #: src/settings_translation_file.cpp msgid "Physics" @@ -5805,14 +5810,12 @@ msgid "Pitch move mode" msgstr "Modo movimento pitch" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place key" -msgstr "Tecla de voar" +msgstr "Tecla de colocar" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place repetition interval" -msgstr "Intervalo de repetição do clique direito" +msgstr "Intervalo de repetição da ação colocar" #: src/settings_translation_file.cpp msgid "" @@ -5882,7 +5885,7 @@ msgstr "Analizando" #: src/settings_translation_file.cpp msgid "Prometheus listener address" -msgstr "" +msgstr "Endereço do Prometheus" #: src/settings_translation_file.cpp msgid "" @@ -5891,10 +5894,14 @@ msgid "" "enable metrics listener for Prometheus on that address.\n" "Metrics can be fetch on http://127.0.0.1:30000/metrics" msgstr "" +"Endereço do Prometheus\n" +"Se o minetest for compilado com a opção ENABLE_PROMETHEUS ativa,\n" +"habilita a obtenção de métricas do Prometheus neste endereço.\n" +"As métricas podem ser obtidas em http://127.0.0.1:30000/metrics" #: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." -msgstr "" +msgstr "Proporção de cavernas grandes que contém líquido." #: src/settings_translation_file.cpp msgid "" @@ -5923,9 +5930,8 @@ msgid "Recent Chat Messages" msgstr "Mensagens de chat recentes" #: src/settings_translation_file.cpp -#, fuzzy msgid "Regular font path" -msgstr "Diretorio de reporte" +msgstr "Caminho da fonte regular" #: src/settings_translation_file.cpp msgid "Remote media" @@ -5998,14 +6004,12 @@ msgid "Right key" msgstr "Tecla direita" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel depth" -msgstr "Profundidade do Rio" +msgstr "Profundidade do canal do rio" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel width" -msgstr "Profundidade do Rio" +msgstr "Largura do canal do rio" #: src/settings_translation_file.cpp msgid "River depth" @@ -6020,9 +6024,8 @@ msgid "River size" msgstr "Tamanho do Rio" #: src/settings_translation_file.cpp -#, fuzzy msgid "River valley width" -msgstr "Profundidade do Rio" +msgstr "Largura do vale do rio" #: src/settings_translation_file.cpp msgid "Rollback recording" @@ -6138,7 +6141,6 @@ msgid "Selection box width" msgstr "Largura da caixa de seleção" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Selects one of 18 fractal types.\n" "1 = 4D \"Roundy\" Mandelbrot set.\n" @@ -6231,31 +6233,28 @@ msgstr "" "clientes." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving leaves.\n" "Requires shaders to be enabled." msgstr "" -"Definido como true habilita balanço folhas.\n" -"Requer sombreadores serem ativados." +"Definido como true habilita o balanço das folhas.\n" +"Requer que os sombreadores estejam ativados." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving liquids (like water).\n" "Requires shaders to be enabled." msgstr "" -"Definido como true permite ondulação da água.\n" -"Requer sombreadores seres ativados." +"Definido como true permite ondulação de líquidos (como a água).\n" +"Requer que os sombreadores estejam ativados." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving plants.\n" "Requires shaders to be enabled." msgstr "" "Definido como true permite balanço de plantas.\n" -"Requer sombreadores serem ativados." +"Requer que os sombreadores estejam ativados." #: src/settings_translation_file.cpp msgid "Shader path" @@ -6273,18 +6272,20 @@ msgstr "" "Só funcionam com o modo de vídeo OpenGL." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Shadow offset (in pixels) of the default font. If 0, then shadow will not be " "drawn." -msgstr "Fonte de compensador de sombra, se 0 então sombra não será desenhada." +msgstr "" +"Distância (em pixels) da sombra da fonte padrão. Se 0, então a sombra não " +"será desenhada." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Shadow offset (in pixels) of the fallback font. If 0, then shadow will not " "be drawn." -msgstr "Fonte de compensador de sombra, se 0 então sombra não será desenhada." +msgstr "" +"Distância (em pixels) da sombra da fonte de backup. Se 0, então nenhuma " +"sombra será desenhada." #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." @@ -6299,13 +6300,12 @@ msgid "Show entity selection boxes" msgstr "Mostrar as caixas de seleção entidades" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Show entity selection boxes\n" "A restart is required after changing this." msgstr "" -"Defina o idioma. Deixe vazio para usar a linguagem do sistema.\n" -"Apos mudar isso uma reinicialização é necessária." +"Mostrar caixas de seleção de entidades\n" +"É necessário reiniciar após alterar isso." #: src/settings_translation_file.cpp msgid "Shutdown message" @@ -6346,11 +6346,11 @@ msgstr "Inclinação e preenchimento trabalham juntos para modificar as alturas. #: src/settings_translation_file.cpp msgid "Small cave maximum number" -msgstr "" +msgstr "Número máximo de cavernas pequenas" #: src/settings_translation_file.cpp msgid "Small cave minimum number" -msgstr "" +msgstr "Número mínimo de cavernas pequenas" #: src/settings_translation_file.cpp msgid "Small-scale humidity variation for blending biomes on borders." @@ -6393,7 +6393,7 @@ msgstr "Velocidade da furtividade" #: src/settings_translation_file.cpp msgid "Sneaking speed, in nodes per second." -msgstr "" +msgstr "Velocidade ao esgueirar-se, em nós (blocos) por segundo." #: src/settings_translation_file.cpp msgid "Sound" @@ -6426,16 +6426,19 @@ msgid "" "Note that mods or games may explicitly set a stack for certain (or all) " "items." msgstr "" +"Especifica o tamanho padrão da pilha de nós, items e ferramentas.\n" +"Note que mods e games talvez definam explicitamente um tamanho para certos (" +"ou todos) os itens." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Spread of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." msgstr "" -"Extensão do aumento médio da curva da luz.\n" -"Desvio padrão do aumento médio gaussiano." +"Ampliação da faixa de aumento da curva de luz.\n" +"Controla a largura do intervalo a ser aumentado.\n" +"O desvio padrão da gaussiana do aumento da curva de luz." #: src/settings_translation_file.cpp msgid "Static spawnpoint" @@ -6454,9 +6457,8 @@ msgid "Step mountain spread noise" msgstr "Extensão do ruído da montanha de passo" #: src/settings_translation_file.cpp -#, fuzzy msgid "Strength of 3D mode parallax." -msgstr "Intensidade de paralaxe." +msgstr "Força da paralaxe do modo 3D." #: src/settings_translation_file.cpp msgid "" @@ -6464,6 +6466,9 @@ msgid "" "The 3 'boost' parameters define a range of the light\n" "curve that is boosted in brightness." msgstr "" +"Aumento da força da curva de luz.\n" +"Os 3 parâmetros de 'aumento' definem uma faixa\n" +"da curva de luz que é aumentada em brilho." #: src/settings_translation_file.cpp msgid "Strict protocol checking" @@ -6486,6 +6491,21 @@ msgid "" "server-intensive extreme water flow and to avoid vast flooding of the\n" "world surface below." msgstr "" +"Nível de superfície de água opcional colocada em uma camada sólida de " +"flutuação.\n" +"A água está desativada por padrão e só será colocada se este valor for " +"definido\n" +"acima de 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (o início do\n" +"afilamento superior).\n" +"*** AVISO, POTENCIAL PERIGO PARA OS MUNDOS E DESEMPENHO DO SERVIDOR ***:\n" +"Ao habilitar a colocação de água, as áreas flutuantes devem ser configuradas " +"e testadas\n" +"para ser uma camada sólida, definindo 'mgv7_floatland_density' para 2.0 (ou " +"outro\n" +"valor necessário dependendo de 'mgv7_np_floatland'), para evitar\n" +"fluxo de água extremo intensivo do servidor e para evitar grandes inundações " +"do\n" +"superfície do mundo abaixo." #: src/settings_translation_file.cpp msgid "Synchronous SQLite" @@ -6565,9 +6585,8 @@ msgid "The URL for the content repository" msgstr "A url para o repositório de conteúdo" #: src/settings_translation_file.cpp -#, fuzzy msgid "The deadzone of the joystick" -msgstr "O identificador do joystick para usar" +msgstr "A zona morta do joystick" #: src/settings_translation_file.cpp msgid "" @@ -6605,6 +6624,11 @@ msgid "" "Default is 1.0 (1/2 node).\n" "Requires waving liquids to be enabled." msgstr "" +"A altura máxima da superfície de líquidos com ondas.\n" +"4.0 = Altura da onda é dois nós.\n" +"0.0 = Onda nem se move.\n" +"O padrão é 1.0 (meio nó).\n" +"Requer ondas em líquidos habilitada." #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." @@ -6620,7 +6644,6 @@ msgstr "" "servidor e dos modificadores." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The radius of the volume of blocks around every player that is subject to " "the\n" @@ -6630,14 +6653,14 @@ msgid "" "maintained.\n" "This should be configured together with active_object_send_range_blocks." msgstr "" -"O raio do volume de blocos em volta de cada jogador que é sujeito a coisas " -"de bloco ativo, em mapblocks (16 nós).\n" -"Em blocos ativos, objetos são carregados e ABMs executam.\n" -"Isto é também o alcançe mínimo em que objetos ativos(mobs) são mantidos.\n" -"Isto deve ser configurado junto com o alcance_objeto_ativo." +"O raio do volume dos blocos em torno de cada jogador que está sujeito ao\n" +"material de bloco ativo, declarado em mapblocks (16 nós).\n" +"Nos blocos ativos, os objetos são carregados e os ABMs executados.\n" +"Este também é o intervalo mínimo no qual os objetos ativos (mobs) são " +"mantidos.\n" +"Isso deve ser configurado junto com active_object_send_range_blocks." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end for Irrlicht.\n" "A restart is required after changing this.\n" @@ -6646,12 +6669,12 @@ msgid "" "On other platforms, OpenGL is recommended.\n" "Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" msgstr "" -"Renderizador de fundo para o irrlight.\n" -"Uma reinicialização é necessária após alterar isso.\n" -"Note: no android, use o OGLES1 caso em dúvida! O aplicativo pode falhar ao " -"abrir em outro caso.\n" -"Em outras plataformas, OpenGL é recomendo, e é o único driver com suporte a " -"sombreamento atualmente." +"O back-end de renderização para Irrlicht.\n" +"É necessário reiniciar após alterar isso.\n" +"Nota: No Android, use OGLES1 se não tiver certeza! O aplicativo pode falhar " +"ao iniciar de outra forma.\n" +"Em outras plataformas, OpenGL é recomendado.\n" +"Shaders são suportados por OpenGL (somente desktop) e OGLES2 (experimental)" #: src/settings_translation_file.cpp msgid "" @@ -6691,6 +6714,8 @@ msgid "" "The time budget allowed for ABMs to execute on each step\n" "(as a fraction of the ABM Interval)" msgstr "" +"O tempo disponível permitido para ABMs executarem em cada passo (como uma " +"fração do intervalo do ABM)" #: src/settings_translation_file.cpp msgid "" @@ -6701,13 +6726,12 @@ msgstr "" "quando pressionando uma combinação de botão no joystick." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The time in seconds it takes between repeated node placements when holding\n" "the place button." msgstr "" -"O tempo em segundos entre repetidos cliques direitos ao segurar o botão " -"direito do mouse." +"O tempo em segundos que leva entre as colocações de nó repetidas ao segurar\n" +"o botão de colocar." #: src/settings_translation_file.cpp msgid "The type of joystick" @@ -6787,7 +6811,6 @@ msgid "Trilinear filtering" msgstr "Filtragem tri-linear" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "True = 256\n" "False = 128\n" @@ -6810,7 +6833,6 @@ msgid "Undersampling" msgstr "Subamostragem" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Undersampling is similar to using a lower screen resolution, but it applies\n" "to the game world only, keeping the GUI intact.\n" @@ -6818,10 +6840,12 @@ msgid "" "image.\n" "Higher values result in a less detailed image." msgstr "" -"A subamostragem é semelhante ao uso de resolução de tela menor, mas se " -"aplica apenas ao mundo do jogo, mantendo a GUI (Interface Gráfica do " -"Usuário) intacta. Deve dar um aumento significativo no desempenho ao custo " -"de uma imagem menos detalhada." +"A subamostragem é semelhante a usar uma resolução de tela inferior, mas se " +"aplica\n" +"apenas para o mundo do jogo, mantendo a GUI intacta.\n" +"Deve dar um aumento significativo de desempenho ao custo de uma imagem menos " +"detalhada.\n" +"Valores mais altos resultam em uma imagem menos detalhada." #: src/settings_translation_file.cpp msgid "Unlimited player transfer distance" @@ -6836,9 +6860,8 @@ msgid "Upper Y limit of dungeons." msgstr "Limite topo Y de dungeons." #: src/settings_translation_file.cpp -#, fuzzy msgid "Upper Y limit of floatlands." -msgstr "Limite topo Y de dungeons." +msgstr "Limite máximo Y para as ilhas flutuantes." #: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." @@ -6877,6 +6900,16 @@ msgid "" "If set to 0, MSAA is disabled.\n" "A restart is required after changing this option." msgstr "" +"Use o anti-serrilhamento de várias amostras (MSAA) para suavizar as bordas " +"do bloco.\n" +"Este algoritmo suaviza a janela de visualização 3D enquanto mantém a imagem " +"nítida,\n" +"mas não afeta o interior das texturas\n" +"(que é especialmente perceptível com texturas transparentes).\n" +"Espaços visíveis aparecem entre os nós quando os sombreadores são " +"desativados.\n" +"Se definido como 0, MSAA é desativado.\n" +"É necessário reiniciar após alterar esta opção." #: src/settings_translation_file.cpp msgid "Use trilinear filtering when scaling textures." @@ -6945,7 +6978,7 @@ msgstr "Controla o esparsamento/altura das colinas." #: src/settings_translation_file.cpp msgid "Vertical climbing speed, in nodes per second." -msgstr "" +msgstr "Velocidade vertical de escalda, em nós por segundo." #: src/settings_translation_file.cpp msgid "Vertical screen synchronization." @@ -6990,13 +7023,12 @@ msgid "Volume" msgstr "Volume do som" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Volume of all sounds.\n" "Requires the sound system to be enabled." msgstr "" -"Ativar mapeamento de oclusão de paralaxe.\n" -"Requer shaders a serem ativados." +"Volume de todos os sons.\n" +"Requer que o sistema de som esteja ativado." #: src/settings_translation_file.cpp msgid "" @@ -7013,7 +7045,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Walking and flying speed, in nodes per second." -msgstr "" +msgstr "Velocidade do andar e voar, em nós por segundo." #: src/settings_translation_file.cpp msgid "Walking speed" @@ -7022,6 +7054,7 @@ msgstr "Velocidade de caminhada" #: src/settings_translation_file.cpp msgid "Walking, flying and climbing speed in fast mode, in nodes per second." msgstr "" +"Velocidade do caminhar, voar e escalar no modo rápido, em nós por segundo." #: src/settings_translation_file.cpp msgid "Water level" @@ -7040,22 +7073,18 @@ msgid "Waving leaves" msgstr "Balanço das árvores" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids" -msgstr "Nós que balancam" +msgstr "Líquidos ondulantes" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wave height" -msgstr "Altura de balanço da água" +msgstr "Altura da onda nos líquidos ondulantes" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wave speed" msgstr "Velocidade de balanço da água" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wavelength" msgstr "Comprimento de balanço da água" @@ -7111,14 +7140,14 @@ msgstr "" "texturas." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Whether FreeType fonts are used, requires FreeType support to be compiled " "in.\n" "If disabled, bitmap and XML vectors fonts are used instead." msgstr "" -"Se forem utilizadas fontes freetype, requer suporte a freetype para ser " -"compilado." +"Se as fontes FreeType são usadas, requer que suporte FreeType tenha sido " +"compilado.\n" +"Se desativado, fontes de bitmap e de vetores XML são usadas em seu lugar." #: src/settings_translation_file.cpp msgid "Whether node texture animations should be desynchronized per mapblock." @@ -7159,6 +7188,10 @@ msgid "" "In-game, you can toggle the mute state with the mute key or by using the\n" "pause menu." msgstr "" +"Quando mutar os sons. Você pode mutar os sons a qualquer hora, a não ser\n" +"que o sistema de som esteja desabilitado (enable_sound=false).\n" +"No jogo, você pode habilitar o estado de mutado com o botão de mutar\n" +"ou usando o menu de pausa." #: src/settings_translation_file.cpp msgid "" @@ -7245,6 +7278,12 @@ msgid "" "For a solid floatland layer, this controls the height of hills/mountains.\n" "Must be less than or equal to half the distance between the Y limits." msgstr "" +"Distância de Y sobre a qual as ilhas flutuantes diminuem de densidade total " +"para nenhuma densidade.\n" +"O afunilamento começa nesta distância do limite Y.\n" +"Para uma ilha flutuante sólida, isso controla a altura das colinas / " +"montanhas.\n" +"Deve ser menor ou igual a metade da distância entre os limites Y." #: src/settings_translation_file.cpp msgid "Y-level of average terrain surface." @@ -7274,6 +7313,12 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"Nível de compressão ZLib a ser usada ao salvar mapblocks no disco.\n" +"-1 - Nível de compressão padrão do Zlib\n" +"0 - Nenhuma compressão; o mais rápido\n" +"9 - Melhor compressão; o mais devagar\n" +"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método " +"normal)" #: src/settings_translation_file.cpp msgid "" @@ -7283,6 +7328,12 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"Nível de compressão ZLib a ser usada ao mandar mapblocks para o cliente.\n" +"-1 - Nível de compressão padrão do Zlib\n" +"0 - Nenhuma compressão; o mais rápido\n" +"9 - Melhor compressão; o mais devagar\n" +"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método " +"normal)" #: src/settings_translation_file.cpp msgid "cURL file download timeout" From f879c0b2127eb626c13b3be1d52c6c158cbbf76c Mon Sep 17 00:00:00 2001 From: eugenefil Date: Mon, 1 Feb 2021 12:02:09 +0000 Subject: [PATCH 024/110] Translated using Weblate (Russian) Currently translated at 96.3% (1303 of 1353 strings) --- po/ru/minetest.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/po/ru/minetest.po b/po/ru/minetest.po index c2211caed..e98941c68 100644 --- a/po/ru/minetest.po +++ b/po/ru/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Russian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-11-14 18:28+0000\n" -"Last-Translator: Andrei Stepanov \n" +"PO-Revision-Date: 2021-02-03 04:32+0000\n" +"Last-Translator: eugenefil \n" "Language-Team: Russian \n" "Language: ru\n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -154,11 +154,11 @@ msgstr "включено" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" уже существует. Перезаписать?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "Зависимости $1 и $2 будут установлены." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" From 033cba996fc2eb31de4c18e1ce1c56720019d11d Mon Sep 17 00:00:00 2001 From: Muhammad Rifqi Priyo Susanto Date: Wed, 3 Feb 2021 15:41:03 +0000 Subject: [PATCH 025/110] Translated using Weblate (Indonesian) Currently translated at 100.0% (1353 of 1353 strings) --- po/id/minetest.po | 223 +++++++++++++++++++++++++--------------------- 1 file changed, 120 insertions(+), 103 deletions(-) diff --git a/po/id/minetest.po b/po/id/minetest.po index 0343dc677..4cfffc6f9 100644 --- a/po/id/minetest.po +++ b/po/id/minetest.po @@ -3,8 +3,9 @@ msgstr "" "Project-Id-Version: Indonesian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2021-01-08 17:32+0000\n" -"Last-Translator: Ferdinand Tampubolon \n" +"PO-Revision-Date: 2021-02-03 15:42+0000\n" +"Last-Translator: Muhammad Rifqi Priyo Susanto " +"\n" "Language-Team: Indonesian \n" "Language: id\n" @@ -12,7 +13,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.4.1-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -153,52 +154,51 @@ msgstr "dinyalakan" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" telah ada. Apakah Anda mau menimpanya?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "Dependensi $1 dan $2 akan dipasang." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 oleh $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 sedang diunduh,\n" +"$2 dalam antrean" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Mengunduh..." +msgstr "$1 mengunduh..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 membutuhkan dependensi yang tidak bisa ditemukan." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 akan dipasang dan $2 dependensi akan dilewati." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "Semua paket" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "Tombol telah terpakai" +msgstr "Telah terpasang" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Kembali ke menu utama" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Host Permainan" +msgstr "Permainan Dasar:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" @@ -222,14 +222,12 @@ msgid "Install" msgstr "Pasang" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Pasang" +msgstr "Pasang $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Dependensi opsional:" +msgstr "Pasang dependensi yang belum ada" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -245,26 +243,24 @@ msgid "No results" msgstr "Tiada hasil" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Perbarui" +msgstr "Tiada pembaruan" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Not found" -msgstr "Bisukan suara" +msgstr "Tidak ditemukan" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Timpa" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Harap pastikan bahwa permainan dasar telah sesuai." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "Diantrekan" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -280,11 +276,11 @@ msgstr "Perbarui" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Perbarui Semua [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Lihat informasi lebih lanjut di peramban web" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -348,7 +344,7 @@ msgstr "Tanah mengambang di langit" #: builtin/mainmenu/dlg_create_world.lua msgid "Floatlands (experimental)" -msgstr "Floatland (uji coba)" +msgstr "Floatland (tahap percobaan)" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" @@ -764,7 +760,6 @@ msgid "Credits" msgstr "Penghargaan" #: builtin/mainmenu/tab_credits.lua -#, fuzzy msgid "Open User Data Directory" msgstr "Pilih direktori" @@ -773,6 +768,8 @@ msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Membuka direktori yang berisi dunia, permainan, mod, dan paket tekstur\n" +"dari pengguna dalam pengelola/penjelajah berkas." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -812,7 +809,7 @@ msgstr "Pasang permainan dari ContentDB" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "Nama" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -823,9 +820,8 @@ msgid "No world created or selected!" msgstr "Tiada dunia yang dibuat atau dipilih!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Password" -msgstr "Kata sandi baru" +msgstr "Kata sandi" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -836,9 +832,8 @@ msgid "Port" msgstr "Porta" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "Pilih Dunia:" +msgstr "Pilih Mod" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -990,9 +985,8 @@ msgid "Shaders" msgstr "Shader" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Shaders (experimental)" -msgstr "Floatland (uji coba)" +msgstr "Shader (tahap percobaan)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" @@ -1192,7 +1186,7 @@ msgid "Continue" msgstr "Lanjutkan" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1215,12 +1209,12 @@ msgstr "" "- %s: geser kiri\n" "- %s: geser kanan\n" "- %s: lompat/panjat\n" +"- %s: gali/pukul\n" +"- %s: taruh/pakai\n" "- %s: menyelinap/turun\n" "- %s: jatuhkan barang\n" "- %s: inventaris\n" "- Tetikus: belok/lihat\n" -"- Klik kiri: gali/pukul\n" -"- Klik kanan: taruh/pakai\n" "- Roda tetikus: pilih barang\n" "- %s: obrolan\n" @@ -1749,19 +1743,18 @@ msgid "Minimap hidden" msgstr "Peta mini disembunyikan" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "Peta mini mode radar, perbesaran 1x" +msgstr "Peta mini mode radar, perbesaran %dx" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "Peta mini mode permukaan, perbesaran 1x" +msgstr "Peta mini mode permukaan, perbesaran %dx" #: src/client/minimap.cpp -#, fuzzy msgid "Minimap in texture mode" -msgstr "Ukuran tekstur minimum" +msgstr "Peta mini mode tekstur" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" @@ -2161,7 +2154,7 @@ msgstr "Selang waktu ABM" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "Anggaran waktu ABM" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" @@ -2664,7 +2657,7 @@ msgstr "Daftar Hitam Flag ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "Jumlah Maks Pengunduhan ContentDB Bersamaan" #: src/settings_translation_file.cpp msgid "ContentDB URL" @@ -2732,11 +2725,12 @@ msgid "Crosshair alpha" msgstr "Keburaman crosshair" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "Keburaman crosshair (keopakan, dari 0 sampai 255)." +msgstr "" +"Keburaman crosshair (keopakan, dari 0 sampai 255).\n" +"Juga mengatur warna crosshair objek" #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2747,6 +2741,8 @@ msgid "" "Crosshair color (R,G,B).\n" "Also controls the object crosshair color" msgstr "" +"Warna crosshair (R,G,B),\n" +"sekaligus mengatur warna crosshair objek" #: src/settings_translation_file.cpp msgid "DPI" @@ -2928,9 +2924,8 @@ msgid "Desynchronize block animation" msgstr "Putuskan sinkronasi animasi blok" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dig key" -msgstr "Tombol kanan" +msgstr "Tombol gali" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3151,9 +3146,8 @@ msgstr "" "yang rata dan cocok untuk lapisan floatland padat (penuh)." #: src/settings_translation_file.cpp -#, fuzzy msgid "FPS when unfocused or paused" -msgstr "FPS (bingkai per detik) maksimum saat permainan dijeda." +msgstr "FPS (bingkai per detik) saat dijeda atau tidak difokuskan" #: src/settings_translation_file.cpp msgid "FSAA" @@ -3484,7 +3478,7 @@ msgid "" "and junglegrass, in all other mapgens this flag controls all decorations." msgstr "" "Atribut pembuatan peta global.\n" -"Dalam pembuat peta v6, flag \"decorations\" mengatur semua hiasan kecuali\n" +"Dalam pembuat peta v6, flag \"decorations\" mengatur semua hiasan, kecuali\n" "pohon dan rumput rimba. Dalam pembuat peta lain, flag ini mengatur\n" "semua dekorasi." @@ -3533,7 +3527,6 @@ msgid "HUD toggle key" msgstr "Tombol beralih HUD" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- none: Do not log deprecated calls\n" @@ -3541,7 +3534,7 @@ msgid "" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" "Penanganan panggilan Lua API usang:\n" -"- legacy: (mencoba untuk) menyerupai aturan lawas (bawaan untuk rilis).\n" +"- none: jangan catat panggilan usang\n" "- log: menyerupai dan mencatat asal-usul panggilan usang (bawaan untuk " "awakutu).\n" "- error: batalkan penggunaan panggilan usang (disarankan untuk pengembang " @@ -3824,9 +3817,8 @@ msgid "" "If FPS would go higher than this, limit it by sleeping\n" "to not waste CPU power for no benefit." msgstr "" -"Jika FPS (bingkai per detik) lebih tinggi dari ini, akan\n" -"dibatasi dengan jeda agar tidak menghabiskan tenaga\n" -"CPU dengan percuma." +"Jika FPS (bingkai per detik) lebih tinggi daripada ini, akan dibatasi\n" +"dengan jeda agar tidak membuang tenaga CPU dengan percuma." #: src/settings_translation_file.cpp msgid "" @@ -3988,8 +3980,7 @@ msgid "" "Instrument global callback functions on registration.\n" "(anything you pass to a minetest.register_*() function)" msgstr "" -"Melengkapi fungsi panggil balik (callback) global saat didaftarkan,\n" -"dengan perkakas.\n" +"Melengkapi fungsi panggil balik (callback) global saat didaftarkan.\n" "(semua yang dimasukkan ke fungsi minetest.register_*())" #: src/settings_translation_file.cpp @@ -4064,8 +4055,7 @@ msgstr "" "Perulangan fungsi rekursif.\n" "Menaikkan nilai ini menaikkan detail, tetapi juga menambah\n" "beban pemrosesan.\n" -"Saat perulangan = 20, pembuat peta ini memiliki beban yang\n" -"mirip dengan pembuat peta v7." +"Saat perulangan = 20, beban pembuat peta ini mirip dengan v7." #: src/settings_translation_file.cpp msgid "Joystick ID" @@ -4076,9 +4066,8 @@ msgid "Joystick button repetition interval" msgstr "Jarak penekanan tombol joystick terus-menerus" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick deadzone" -msgstr "Jenis joystick" +msgstr "Zona mati joystick" #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" @@ -4183,13 +4172,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for digging.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Tombol untuk lompat.\n" +"Tombol untuk gali.\n" "Lihat http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4336,13 +4324,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for placing.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Tombol untuk lompat.\n" +"Tombol untuk taruh.\n" "Lihat http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -5111,11 +5098,11 @@ msgstr "Buat semua cairan buram" #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" -msgstr "" +msgstr "Tingkat Kompresi Peta untuk Penyimpanan Diska" #: src/settings_translation_file.cpp msgid "Map Compression Level for Network Transfer" -msgstr "" +msgstr "Tingkat Kompresi Peta untuk Transfer Jaringan" #: src/settings_translation_file.cpp msgid "Map directory" @@ -5300,9 +5287,10 @@ msgid "Maximum FPS" msgstr "FPS (bingkai per detik) maksimum" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum FPS when the window is not focused, or when the game is paused." -msgstr "FPS (bingkai per detik) maksimum saat permainan dijeda." +msgstr "" +"FPS (bingkai per detik) maksimum saat permainan dijeda atau saat jendela " +"tidak difokuskan." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5364,6 +5352,9 @@ msgid "" "be queued.\n" "This should be lower than curl_parallel_limit." msgstr "" +"Jumlah maksimum pengunduhan bersamaan. Pengunduhan yang melebihi batas ini " +"akan\n" +"diantrekan. Nilai ini harus lebih rendah daripada curl_parallel_limit." #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5765,14 +5756,12 @@ msgid "Pitch move mode" msgstr "Mode gerak sesuai pandang" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place key" -msgstr "Tombol terbang" +msgstr "Tombol taruh" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place repetition interval" -msgstr "Jarak klik kanan berulang" +msgstr "Jeda waktu taruh berulang" #: src/settings_translation_file.cpp msgid "" @@ -5842,7 +5831,7 @@ msgstr "Profiling" #: src/settings_translation_file.cpp msgid "Prometheus listener address" -msgstr "" +msgstr "Alamat pendengar Prometheus" #: src/settings_translation_file.cpp msgid "" @@ -5851,6 +5840,10 @@ msgid "" "enable metrics listener for Prometheus on that address.\n" "Metrics can be fetch on http://127.0.0.1:30000/metrics" msgstr "" +"Alamat pendengar Prometheus.\n" +"Jika Minetest dikompilasi dengan pilihan ENABLE_PROMETHEUS dinyalakan,\n" +"ini menyalakan pendengar metrik untuk Prometheus pada alamat itu.\n" +"Metrik dapat diambil pada http://127.0.0.1:30000/metrics" #: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." @@ -6251,12 +6244,11 @@ msgid "Show entity selection boxes" msgstr "Tampilkan kotak pilihan benda" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Show entity selection boxes\n" "A restart is required after changing this." msgstr "" -"Atur bahasa. Biarkan kosong untuk menggunakan bahasa sistem.\n" +"Tampilkan kotak pilihan entitas\n" "Dibutuhkan mulai ulang setelah mengganti ini." #: src/settings_translation_file.cpp @@ -6442,6 +6434,16 @@ msgid "" "server-intensive extreme water flow and to avoid vast flooding of the\n" "world surface below." msgstr "" +"Tingkat permukaan peletakan air pada lapisan floatland padat.\n" +"Air tidak ditaruh secara bawaan dan akan ditaruh jika nilai ini diatur ke\n" +"atas 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (mulai dari\n" +"penirusan atas).\n" +"***PERINGATAN, POTENSI BAHAYA TERHADAP DUNIA DAN KINERJA SERVER***\n" +"Ketika penaruhan air dinyalakan, floatland wajib diatur dan diuji agar\n" +"berupa lapisan padat dengan mengatur 'mgv7_floatland_density' ke 2.0\n" +"(atau nilai wajib lainnya sesuai 'mgv7_np_floatland') untuk menghindari\n" +"aliran air ekstrem yang membebani server dan menghindari banjir\n" +"bandang di permukaan dunia bawah." #: src/settings_translation_file.cpp msgid "Synchronous SQLite" @@ -6520,9 +6522,8 @@ msgid "The URL for the content repository" msgstr "URL dari gudang konten" #: src/settings_translation_file.cpp -#, fuzzy msgid "The deadzone of the joystick" -msgstr "Identitas dari joystick yang digunakan" +msgstr "Zona mati joystick yang digunakan" #: src/settings_translation_file.cpp msgid "" @@ -6580,7 +6581,6 @@ msgstr "" "server Anda." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The radius of the volume of blocks around every player that is subject to " "the\n" @@ -6590,14 +6590,13 @@ msgid "" "maintained.\n" "This should be configured together with active_object_send_range_blocks." msgstr "" -"Jari-jari ruang di sekitar pemain yang menjadi blok aktif, dalam blok peta\n" -"(16 nodus).\n" +"Jari-jari volume blok di sekitar pemain yang menjadi blok aktif, dalam\n" +"blok peta (16 nodus).\n" "Dalam blok aktif, objek dimuat dan ABM berjalan.\n" "Ini juga jangkauan minimum pengelolaan objek aktif (makhluk).\n" "Ini harus diatur bersama dengan active_object_range." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end for Irrlicht.\n" "A restart is required after changing this.\n" @@ -6609,8 +6608,8 @@ msgstr "" "Penggambar untuk Irrlicht.\n" "Mulai ulang dibutuhkan setelah mengganti ini.\n" "Catatan: Pada Android, gunakan OGLES1 jika tidak yakin! Apl mungkin gagal\n" -"berjalan pada lainnya. Pada platform lain, OpenGL disarankan yang menjadi\n" -"satu-satunya pengandar yang mendukung shader untuk saat ini." +"berjalan untuk pilihan lainnya. Pada platform lain, OpenGL disarankan.\n" +"Shader didukung oleh OpenGL (khusus desktop) dan OGLES2 (tahap percobaan)" #: src/settings_translation_file.cpp msgid "" @@ -6648,6 +6647,8 @@ msgid "" "The time budget allowed for ABMs to execute on each step\n" "(as a fraction of the ABM Interval)" msgstr "" +"Anggaran waktu yang dibolehkan untuk ABM dalam menjalankan\n" +"tiap langkah (dalam pecahan dari jarak ABM)" #: src/settings_translation_file.cpp msgid "" @@ -6658,12 +6659,10 @@ msgstr "" "menekan terus-menerus kombinasi tombol joystick." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The time in seconds it takes between repeated node placements when holding\n" "the place button." -msgstr "" -"Jeda dalam detik antarklik kanan berulang saat menekan tombol kanan tetikus." +msgstr "Jeda dalam detik antar-penaruhan berulang saat menekan tombol taruh." #: src/settings_translation_file.cpp msgid "The type of joystick" @@ -6815,9 +6814,8 @@ msgid "" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" -"Gunakan mip mapping untuk penyekalaan tekstur. Dapat sedikit\n" -"meningkatkan kinerja, terutama saat menggunakan paket tekstur\n" -"beresolusi tinggi.\n" +"Pakai mip mapping untuk penyekalaan tekstur. Bisa sedikit menaikkan\n" +"kinerja, terutama pada saat memakai paket tekstur beresolusi tinggi.\n" "Pengecilan dengan tepat gamma tidak didukung." #: src/settings_translation_file.cpp @@ -6830,6 +6828,13 @@ msgid "" "If set to 0, MSAA is disabled.\n" "A restart is required after changing this option." msgstr "" +"Pakai antialias multisampel (MSAA) untuk memperhalus tepian blok.\n" +"Algoritme ini memperhalus tampilan 3D sambil menjaga ketajaman gambar,\n" +"tetapi tidak memengaruhi tekstur bagian dalam (yang terlihat khususnya\n" +"dengan tekstur transparan).\n" +"Muncul spasi tampak di antara nodus ketika shader dimatikan.\n" +"Jika diatur 0, MSAA dimatikan.\n" +"Dibutuhkan mulai ulang setelah penggantian pengaturan ini." #: src/settings_translation_file.cpp msgid "Use trilinear filtering when scaling textures." @@ -7017,10 +7022,9 @@ msgid "" "filtered in software, but some images are generated directly\n" "to hardware (e.g. render-to-texture for nodes in inventory)." msgstr "" -"Saat gui_scaling_filter diatur ke true, semua gambar GUI harus\n" -"difilter dalam perangkat lunak, tetapi beberapa gambar dibuat\n" -"langsung ke perangkat keras (misal. render ke tekstur untuk nodus\n" -"dalam inventaris)." +"Saat gui_scaling_filter diatur ke true, semua gambar GUI harus difilter\n" +"dalam perangkat lunak, tetapi beberapa gambar dibuat langsung ke\n" +"perangkat keras (misal. render ke tekstur untuk nodus dalam inventaris)." #: src/settings_translation_file.cpp msgid "" @@ -7029,11 +7033,10 @@ msgid "" "to the old scaling method, for video drivers that don't\n" "properly support downloading textures back from hardware." msgstr "" -"Saat gui_scaling_filter_txr2img dibolehkan, salin gambar-gambar\n" -"tersebut dari perangkat keras ke perangkat lunak untuk perbesar/\n" -"perkecil. Saat tidak dibolehkan, kembali ke cara lama, untuk\n" -"pengandar video yang tidak mendukung pengunduhan tekstur dari\n" -"perangkat keras." +"Saat gui_scaling_filter_txr2img dibolehkan, salin gambar-gambar tersebut\n" +"dari perangkat keras ke perangkat lunak untuk perbesar/perkecil. Saat tidak\n" +"dibolehkan, kembali ke cara lama, untuk pengandar video yang tidak\n" +"mendukung pengunduhan tekstur dari perangkat keras." #: src/settings_translation_file.cpp msgid "" @@ -7189,6 +7192,10 @@ msgid "" "For a solid floatland layer, this controls the height of hills/mountains.\n" "Must be less than or equal to half the distance between the Y limits." msgstr "" +"Jarak Y penirusan floatland dari padat sampai kosong.\n" +"Penirusan dimulai dari jarak ini sampai batas Y.\n" +"Untuk lapisan floatland padat, nilai ini mengatur tinggi bukit/gunung.\n" +"Nilai ini harus kurang dari atau sama dengan setengah jarak antarbatas Y." #: src/settings_translation_file.cpp msgid "Y-level of average terrain surface." @@ -7218,6 +7225,11 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"Tingkat kompresi ZLib saat pengiriman blok peta kepada klien.\n" +"-1 - tingkat kompresi Zlib bawaan\n" +"0 - tanpa kompresi, tercepat\n" +"9 - kompresi terbaik, terlambat\n" +"(tingkat 1-3 pakai metode \"cepat\" Zlib, 4-9 pakai metode normal)" #: src/settings_translation_file.cpp msgid "" @@ -7227,6 +7239,11 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"Tingkat kompresi ZLib saat penyimpanan blok peta kepada klien.\n" +"-1 - tingkat kompresi Zlib bawaan\n" +"0 - tanpa kompresi, tercepat\n" +"9 - kompresi terbaik, terlambat\n" +"(tingkat 1-3 pakai metode \"cepat\" Zlib, 4-9 pakai metode normal)" #: src/settings_translation_file.cpp msgid "cURL file download timeout" From de29007c8265970adcf9b4eb54505e9d3bfaded7 Mon Sep 17 00:00:00 2001 From: j45 minetest Date: Wed, 3 Feb 2021 11:38:31 +0000 Subject: [PATCH 026/110] Translated using Weblate (Spanish) Currently translated at 74.3% (1006 of 1353 strings) --- po/es/minetest.po | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/po/es/minetest.po b/po/es/minetest.po index cd1f86fe1..d36698d70 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" "PO-Revision-Date: 2021-02-05 09:40+0000\n" -"Last-Translator: apo \n" +"Last-Translator: j45 minetest \n" "Language-Team: Spanish \n" "Language: es\n" @@ -5391,12 +5391,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Maximum FPS" -msgstr "FPS máximos" +msgstr "FPS máximo" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum FPS when the window is not focused, or when the game is paused." -msgstr "FPS máximos cuando el juego está pausado." +msgstr "FPS máximo cuando el juego está pausado." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5994,7 +5993,7 @@ msgstr "Ruido de río" #: src/settings_translation_file.cpp msgid "River size" -msgstr "" +msgstr "Tamaño del río" #: src/settings_translation_file.cpp #, fuzzy From 609eca5b81af5466591dae5733546f423a298481 Mon Sep 17 00:00:00 2001 From: Giov4 Date: Thu, 4 Feb 2021 21:47:33 +0000 Subject: [PATCH 027/110] Translated using Weblate (Italian) Currently translated at 100.0% (1353 of 1353 strings) --- po/it/minetest.po | 194 ++++++++++++++++++++++++---------------------- 1 file changed, 103 insertions(+), 91 deletions(-) diff --git a/po/it/minetest.po b/po/it/minetest.po index 78f0d7503..a5c38f328 100644 --- a/po/it/minetest.po +++ b/po/it/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Italian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-12-07 09:22+0000\n" +"PO-Revision-Date: 2021-02-05 09:40+0000\n" "Last-Translator: Giov4 \n" "Language-Team: Italian \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -153,52 +153,51 @@ msgstr "abilitato" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" già esiste. Vuoi sovrascriverlo?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "Le dipendenze $1 e $2 verranno installate." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 di $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 in scaricamento,\n" +"$2 in coda" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Scaricamento..." +msgstr "Scaricando $1..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "Le dipendeze richieste per $1 non sono state trovate." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 verrà installato, e $2 dipendenze verranno ignorate." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "Tutti i pacchetti" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "Tasto già usato" +msgstr "Già installato" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Torna al Menu Principale" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Ospita un gioco" +msgstr "Gioco base:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" @@ -222,14 +221,12 @@ msgid "Install" msgstr "Installa" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Installa" +msgstr "Installa $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Dipendenze facoltative:" +msgstr "Installa le dipendenze mancanti" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -245,26 +242,24 @@ msgid "No results" msgstr "Nessun risultato" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Aggiorna" +msgstr "Nessun aggiornamento" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Not found" -msgstr "Silenzia audio" +msgstr "Non trovato" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Sovrascrivi" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Per favore, controlla che il gioco base sia corretto." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "In coda" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -280,11 +275,11 @@ msgstr "Aggiorna" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Aggiornat tutti [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Visualizza ulteriori informazioni in un browser web" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -766,15 +761,16 @@ msgid "Credits" msgstr "Riconoscimenti" #: builtin/mainmenu/tab_credits.lua -#, fuzzy msgid "Open User Data Directory" -msgstr "Scegli la cartella" +msgstr "Apri la cartella dei dati utente" #: builtin/mainmenu/tab_credits.lua msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Apre la cartella che contiene mondi, giochi, mod e pacchetti texture forniti " +"dall'utente in un gestore di file / explorer." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -814,7 +810,7 @@ msgstr "Installa giochi da ContentDB" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "Nome" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -825,9 +821,8 @@ msgid "No world created or selected!" msgstr "Nessun mondo creato o selezionato!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Password" -msgstr "Nuova password" +msgstr "Password" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -838,9 +833,8 @@ msgid "Port" msgstr "Porta" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "Seleziona mondo:" +msgstr "Seleziona mod" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -992,9 +986,8 @@ msgid "Shaders" msgstr "Shaders" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Shaders (experimental)" -msgstr "Terre fluttuanti (sperimentale)" +msgstr "Shader (sperimentali)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" @@ -1194,7 +1187,7 @@ msgid "Continue" msgstr "Continua" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1216,13 +1209,13 @@ msgstr "" "- %s: arretra\n" "- %s: sinistra\n" "- %s: destra\n" -"- %s: salta/arrampica\n" +"- %s: salta/arrampicati\n" +"- %s: scava/colpisci\n" +"- %s: piazza/usa\n" "- %s: furtivo/scendi\n" -"- %s: butta oggetto\n" +"- %s: lascia oggetto\n" "- %s: inventario\n" "- Mouse: gira/guarda\n" -"- Mouse sx: scava/colpisci\n" -"- Mouse dx: piazza/usa\n" "- Rotella mouse: scegli oggetto\n" "- %s: chat\n" @@ -1751,19 +1744,18 @@ msgid "Minimap hidden" msgstr "Minimappa nascosta" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "Minimappa in modalità radar, ingrandimento x1" +msgstr "Minimappa in modalità radar, ingrandimento x%d" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "Minimappa in modalità superficie, ingrandimento x1" +msgstr "Minimappa in modalità superficie, ingrandimento x%d" #: src/client/minimap.cpp -#, fuzzy msgid "Minimap in texture mode" -msgstr "Dimensione minima della texture" +msgstr "Minimappa in modalità texture" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" @@ -2173,7 +2165,7 @@ msgstr "Intervallo ABM" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "Budget di tempo ABM" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" @@ -2684,7 +2676,7 @@ msgstr "Contenuti esclusi da ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "Massimi download contemporanei di ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB URL" @@ -2754,11 +2746,12 @@ msgid "Crosshair alpha" msgstr "Trasparenza del mirino" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "Trasparenza del mirino (opacità, tra 0 e 255)." +msgstr "" +"Trasparenza del mirino (opacità, tra 0 e 255).\n" +"Controlla anche il colore del mirino dell'oggetto" #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2769,6 +2762,8 @@ msgid "" "Crosshair color (R,G,B).\n" "Also controls the object crosshair color" msgstr "" +"Colore del mirino (R,G,B).\n" +"Controlla anche il colore del mirino dell'oggetto" #: src/settings_translation_file.cpp msgid "DPI" @@ -2953,9 +2948,8 @@ msgid "Desynchronize block animation" msgstr "De-sincronizza l'animazione del blocco" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dig key" -msgstr "Tasto des." +msgstr "Tasto scava" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3187,9 +3181,8 @@ msgstr "" "pianure più piatte, adatti a uno strato solido di terre fluttuanti." #: src/settings_translation_file.cpp -#, fuzzy msgid "FPS when unfocused or paused" -msgstr "FPS massimi quando il gioco è in pausa." +msgstr "FPS quando il gioco è in pausa o in secondo piano." #: src/settings_translation_file.cpp msgid "FSAA" @@ -3583,20 +3576,18 @@ msgid "HUD toggle key" msgstr "Tasto di (dis)attivazione dell'HUD" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- none: Do not log deprecated calls\n" "- log: mimic and log backtrace of deprecated call (default).\n" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" -"Gestione delle chiamate deprecate alle API Lua:\n" -"- legacy (ereditaria): (prova a) simulare il vecchio comportamento " -"(predefinito per i rilasci).\n" -"- log (registro): simula e registra la traccia della chiamata deprecata " -"(predefinito per il debug).\n" -"- error (errore): interrompere all'uso della chiamata deprecata (suggerito " -"per lo sviluppo di moduli)." +"Gestione delle chiamate API Lua deprecate:\n" +"- none (nessuno): non registra le chiamate obsolete\n" +"- log (registro): imita e registra il backtrace di una chiamata obsoleta (" +"impostazione predefinita).\n" +"- error (errore): interrompe l'utilizzo della chiamata deprecata (" +"consigliata per gli sviluppatori di mod)." #: src/settings_translation_file.cpp msgid "" @@ -4130,9 +4121,8 @@ msgid "Joystick button repetition interval" msgstr "Intervallo di ripetizione del pulsante del joystick" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick deadzone" -msgstr "Tipo di joystick" +msgstr "Deadzone joystick" #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" @@ -4237,14 +4227,13 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for digging.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Tasto per saltare.\n" -"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr." +"Tasto per scavare.\n" +"Vedi http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp @@ -4390,14 +4379,13 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for placing.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Tasto per saltare.\n" -"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr." +"Tasto per piazzare.\n" +"Vedi http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp @@ -5172,11 +5160,11 @@ msgstr "Rende opachi tutti i liquidi" #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" -msgstr "" +msgstr "Livello di compressione della mappa per l'archiviazione su disco" #: src/settings_translation_file.cpp msgid "Map Compression Level for Network Transfer" -msgstr "" +msgstr "Livello di compressione della mappa per il trasferimento in rete" #: src/settings_translation_file.cpp msgid "Map directory" @@ -5367,9 +5355,10 @@ msgid "Maximum FPS" msgstr "FPS massimi" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum FPS when the window is not focused, or when the game is paused." -msgstr "FPS massimi quando il gioco è in pausa." +msgstr "" +"FPS massimi quando la finestra è in secondo piano o quando il gioco è in " +"pausa." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5433,6 +5422,9 @@ msgid "" "be queued.\n" "This should be lower than curl_parallel_limit." msgstr "" +"Numero massimo di download simultanei. I download che superano questo limite " +"verranno messi in coda.\n" +"Dovrebbe essere inferiore a curl_parallel_limit." #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5859,14 +5851,12 @@ msgid "Pitch move mode" msgstr "Modalità inclinazione movimento" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place key" -msgstr "Tasto volo" +msgstr "Tasto piazza" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place repetition interval" -msgstr "Intervallo di ripetizione del click destro" +msgstr "Intervallo di ripetizione per il piazzamento" #: src/settings_translation_file.cpp msgid "" @@ -6361,13 +6351,12 @@ msgid "Show entity selection boxes" msgstr "Mostrare le aree di selezione delle entità" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Show entity selection boxes\n" "A restart is required after changing this." msgstr "" -"Imposta la Lingua. Lascia vuoto per usare la Lingua di sistema.\n" -"Dopo avere modificato questa impostazione è necessario il riavvio." +"Mostra la casella di selezione delle entità\n" +"È necessario riavviare dopo aver cambiato questo." #: src/settings_translation_file.cpp msgid "Shutdown message" @@ -6653,9 +6642,8 @@ msgid "The URL for the content repository" msgstr "L'URL per il deposito dei contenuti" #: src/settings_translation_file.cpp -#, fuzzy msgid "The deadzone of the joystick" -msgstr "L'identificatore del joystick da usare" +msgstr "La deadzone del joystick" #: src/settings_translation_file.cpp msgid "" @@ -6730,7 +6718,6 @@ msgstr "" "active_object_send_range_blocks." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end for Irrlicht.\n" "A restart is required after changing this.\n" @@ -6739,12 +6726,12 @@ msgid "" "On other platforms, OpenGL is recommended.\n" "Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" msgstr "" -"Il motore di resa per Irrlicht.\n" +"Il back-end di rendering per Irrlicht.\n" "Dopo averlo cambiato è necessario un riavvio.\n" -"Nota: su Android, si resti con OGLES1 se incerti! Altrimenti l'app potrebbe " +"Nota: su Android, restare con OGLES1 se incerti! Altrimenti l'app potrebbe " "non partire.\n" -"Su altre piattaforme, si raccomanda OpenGL, ed è attualmente l'unico driver\n" -"con supporto degli shader." +"Su altre piattaforme, si raccomanda OpenGL\n" +"Le shader sono supportate da OpenGL (solo su desktop) e OGLES2 (sperimentale)" #: src/settings_translation_file.cpp msgid "" @@ -6786,6 +6773,8 @@ msgid "" "The time budget allowed for ABMs to execute on each step\n" "(as a fraction of the ABM Interval)" msgstr "" +"Il budget di tempo ha consentito agli ABM per eseguire ogni passaggio\n" +"(come frazione dell'intervallo ABM)" #: src/settings_translation_file.cpp msgid "" @@ -6796,13 +6785,13 @@ msgstr "" "si tiene premuta una combinazione di pulsanti del joystick." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The time in seconds it takes between repeated node placements when holding\n" "the place button." msgstr "" -"Il tempo in secondi richiesto tra click destri ripetuti quando\n" -"si tiene premuto il tasto destro del mouse." +"Il tempo in secondi che intercorre tra il piazzamento dei nodi quando si " +"tiene\n" +"premuto il pulsante piazza." #: src/settings_translation_file.cpp msgid "The type of joystick" @@ -6977,6 +6966,15 @@ msgid "" "If set to 0, MSAA is disabled.\n" "A restart is required after changing this option." msgstr "" +"Utilizzare l'antialiasing multi-campione (MSAA) per smussare i bordi del " +"blocco.\n" +"Questo algoritmo uniforma la visualizzazione 3D mantenendo l'immagine nitida," +"\n" +"ma non influenza l'interno delle texture\n" +"(che è particolarmente evidente con trame trasparenti).\n" +"Gli spazi visibili appaiono tra i nodi quando gli shader sono disabilitati.\n" +"Se impostato a 0, MSAA è disabilitato.\n" +"È necessario riavviare dopo aver modificato questa opzione." #: src/settings_translation_file.cpp msgid "Use trilinear filtering when scaling textures." @@ -7386,6 +7384,13 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"Livello di compressione ZLib da utilizzare quando si salvano i blocchi mappa " +"su disco.\n" +"-1 - Livello di compressione predefinito di Zlib\n" +"0 - nessuna compressione, più veloce\n" +"9 - migliore compressione, più lenta\n" +"(i livelli 1-3 usano il metodo \"veloce\" di Zlib, 4-9 usano il metodo " +"normale)" #: src/settings_translation_file.cpp msgid "" @@ -7395,6 +7400,13 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"Livello di compressione ZLib da utilizzare quando si inviano i blocchi mappa " +"al client.\n" +"-1 - Livello di compressione predefinito di Zlib\n" +"0 - nessuna compressione, più veloce\n" +"9 - migliore compressione, più lenta\n" +"(i livelli 1-3 usano il metodo \"veloce\" di Zlib, 4-9 usano il metodo " +"normale)" #: src/settings_translation_file.cpp msgid "cURL file download timeout" From 19d3ce76094215be1ae57faac6ed5406e92bf8b0 Mon Sep 17 00:00:00 2001 From: Nikita Epifanov Date: Wed, 3 Feb 2021 14:23:44 +0000 Subject: [PATCH 028/110] Translated using Weblate (Russian) Currently translated at 99.0% (1340 of 1353 strings) --- po/ru/minetest.po | 120 ++++++++++++++++++++++++++-------------------- 1 file changed, 68 insertions(+), 52 deletions(-) diff --git a/po/ru/minetest.po b/po/ru/minetest.po index e98941c68..f7fd5eca8 100644 --- a/po/ru/minetest.po +++ b/po/ru/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Russian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2021-02-03 04:32+0000\n" -"Last-Translator: eugenefil \n" +"PO-Revision-Date: 2021-02-05 09:40+0000\n" +"Last-Translator: Nikita Epifanov \n" "Language-Team: Russian \n" "Language: ru\n" @@ -162,44 +162,43 @@ msgstr "Зависимости $1 и $2 будут установлены." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 из $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 скачивается,\n" +"$2 в очереди" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Загрузка..." +msgstr "$1 скачивается…" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "Не удалось найти требуемые зависимости $1." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "Будет установлен $1, а зависимости $2 будут пропущены." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "Все дополнения" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "Клавиша уже используется" +msgstr "Уже установлено" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Назад в главное меню" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Играть (хост)" +msgstr "Базовая игра:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" @@ -223,14 +222,12 @@ msgid "Install" msgstr "Установить" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Установить" +msgstr "Установить $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Необязательные зависимости:" +msgstr "Установить недостающие зависимости" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -246,26 +243,25 @@ msgid "No results" msgstr "Ничего не найдено" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Обновить" +msgstr "Нет обновлений" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Not found" -msgstr "Заглушить звук" +msgstr "Не найдено" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Перезаписать" #: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy msgid "Please check that the base game is correct." -msgstr "" +msgstr "Пожалуйста, убедитесь, что базовая игра верна." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "В очереди" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -281,11 +277,11 @@ msgstr "Обновить" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Обновить все [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Посмотреть дополнительную информацию в веб-браузере" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -767,15 +763,16 @@ msgid "Credits" msgstr "Благодарности" #: builtin/mainmenu/tab_credits.lua -#, fuzzy msgid "Open User Data Directory" -msgstr "Выбрать каталог" +msgstr "Открыть каталог данных пользователя" #: builtin/mainmenu/tab_credits.lua msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Открывает каталог, содержащий пользовательские миры, игры, моды,\n" +"и пакеты текстур в файловом менеджере / проводнике." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -815,7 +812,7 @@ msgstr "Установить игры из ContentDB" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "Имя" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -826,9 +823,8 @@ msgid "No world created or selected!" msgstr "Мир не создан или не выбран!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Password" -msgstr "Новый пароль" +msgstr "Пароль" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -839,9 +835,8 @@ msgid "Port" msgstr "Порт" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "Выберите мир:" +msgstr "Выберите моды" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -993,9 +988,8 @@ msgid "Shaders" msgstr "Шейдеры" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Shaders (experimental)" -msgstr "Парящие острова (экспериментальный)" +msgstr "Шейдеры (экспериментально)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" @@ -1195,7 +1189,7 @@ msgid "Continue" msgstr "Продолжить" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1753,14 +1747,14 @@ msgid "Minimap hidden" msgstr "Миникарта скрыта" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "Миникарта в режиме радара, увеличение x1" +msgstr "Миникарта в режиме радара, увеличение x%d" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "Миникарта в поверхностном режиме, увеличение x1" +msgstr "Миникарта в поверхностном режиме, увеличение x%d" #: src/client/minimap.cpp #, fuzzy @@ -2678,7 +2672,7 @@ msgstr "Чёрный список флагов ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "Максимальное количество одновременных загрузок ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB URL" @@ -2747,11 +2741,12 @@ msgid "Crosshair alpha" msgstr "Прозрачность перекрестия" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "Прозрачность прицела (от 0 (прозрачно) до 255 (непрозрачно))." +msgstr "" +"Прозрачность прицела (от 0 (прозрачно) до 255 (непрозрачно)).\n" +"Также контролирует цвет перекрестия объекта" #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2762,6 +2757,8 @@ msgid "" "Crosshair color (R,G,B).\n" "Also controls the object crosshair color" msgstr "" +"Цвет прицела (R, G, B).\n" +"Также контролирует цвет перекрестия объекта" #: src/settings_translation_file.cpp msgid "DPI" @@ -3557,7 +3554,6 @@ msgid "HUD toggle key" msgstr "Клавиша переключения игрового интерфейса" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- none: Do not log deprecated calls\n" @@ -3565,8 +3561,7 @@ msgid "" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" "Обработка устаревших вызовов Lua API:\n" -"- legacy: (пытаться) имитировать прежнее поведение (по умолчанию для " -"релиза).\n" +"- none: не записывать устаревшие вызовы\n" "- log: имитировать и журналировать устаревшие вызовы (по умолчанию для " "отладки).\n" "- error: прерывание при использовании устаревших вызовов (рекомендовано " @@ -4086,9 +4081,8 @@ msgid "Joystick button repetition interval" msgstr "Интервал повторного клика кнопкой джойстика" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick deadzone" -msgstr "Тип джойстика" +msgstr "Мертвая зона джойстика" #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" @@ -5124,11 +5118,11 @@ msgstr "Сделать все жидкости непрозрачными" #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" -msgstr "" +msgstr "Уровень сжатия карты для дискового хранилища" #: src/settings_translation_file.cpp msgid "Map Compression Level for Network Transfer" -msgstr "" +msgstr "Уровень сжатия карты для передачи по сети" #: src/settings_translation_file.cpp msgid "Map directory" @@ -5313,9 +5307,9 @@ msgid "Maximum FPS" msgstr "Максимум кадровой частоты (FPS)" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum FPS when the window is not focused, or when the game is paused." -msgstr "Максимум кадровой частоты при паузе." +msgstr "" +"Максимальный FPS, когда окно не сфокусировано, или когда игра приостановлена." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5382,6 +5376,9 @@ msgid "" "be queued.\n" "This should be lower than curl_parallel_limit." msgstr "" +"Максимальное количество одновременных загрузок. Загрузки, превышающие этот " +"лимит, будут поставлены в очередь.\n" +"Это должно быть меньше curl_parallel_limit." #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -6574,9 +6571,8 @@ msgid "The URL for the content repository" msgstr "Адрес сетевого репозитория" #: src/settings_translation_file.cpp -#, fuzzy msgid "The deadzone of the joystick" -msgstr "Идентификатор используемого джойстика" +msgstr "Мертвая зона джойстика" #: src/settings_translation_file.cpp msgid "" @@ -6890,6 +6886,15 @@ msgid "" "If set to 0, MSAA is disabled.\n" "A restart is required after changing this option." msgstr "" +"Используйте многовыборочное сглаживание (MSAA) для сглаживания краев блоков." +"\n" +"Этот алгоритм сглаживает область просмотра 3D, сохраняя резкость изображения," +"\n" +"но это не влияет на внутренности текстур\n" +"(что особенно заметно на прозрачных текстурах).\n" +"Когда шейдеры отключены, между узлами появляются видимые пробелы.\n" +"Если установлено значение 0, MSAA отключено.\n" +"После изменения этой опции требуется перезагрузка." #: src/settings_translation_file.cpp msgid "Use trilinear filtering when scaling textures." @@ -7286,6 +7291,12 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"Уровень сжатия ZLib для использования при сохранении картографических блоков " +"на диске.\n" +"-1 - уровень сжатия Zlib по умолчанию\n" +"0 - без компрессора, самый быстрый\n" +"9 - лучшее сжатие, самое медленное\n" +"(уровни 1-3 используют \"быстрый\" метод Zlib, 4-9 используют обычный метод)" #: src/settings_translation_file.cpp msgid "" @@ -7295,6 +7306,11 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"Уровень сжатия ZLib для использования при отправке блоков карты клиенту.\n" +"-1 - уровень сжатия Zlib по умолчанию\n" +"0 - без компрессора, самый быстрый\n" +"9 - лучшее сжатие, самое медленное\n" +"(уровни 1-3 используют \"быстрый\" метод Zlib, 4-9 используют обычный метод)" #: src/settings_translation_file.cpp msgid "cURL file download timeout" From 48f885e3102cb1c4ebb3f5fddf2d7e70d95c0522 Mon Sep 17 00:00:00 2001 From: Yossi Cohen Date: Thu, 4 Feb 2021 16:08:57 +0000 Subject: [PATCH 029/110] Translated using Weblate (Hebrew) Currently translated at 13.7% (186 of 1353 strings) --- po/he/minetest.po | 187 +++++++++++++++++++++++----------------------- 1 file changed, 93 insertions(+), 94 deletions(-) diff --git a/po/he/minetest.po b/po/he/minetest.po index bc0a9e5dc..db2ff0315 100644 --- a/po/he/minetest.po +++ b/po/he/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Hebrew (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2021-01-08 17:32+0000\n" -"Last-Translator: Omer I.S. \n" +"PO-Revision-Date: 2021-02-09 15:34+0000\n" +"Last-Translator: Yossi Cohen \n" "Language-Team: Hebrew \n" "Language: he\n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " "n % 10 == 0) ? 2 : 3));\n" -"X-Generator: Weblate 4.4.1-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -126,11 +126,11 @@ msgstr "לא סופק תיאור משחק." #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" -msgstr "אין תלויות קשות" +msgstr "אין תלויות מחייבות" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." -msgstr "" +msgstr "לא סופק תיאור לחבילת המוד." #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" @@ -155,34 +155,35 @@ msgstr "מופעל" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" כבר קיים. האם תרצה להחליף אותו?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "התלויות $1 ו $2 יותקנו." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 ליד $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 מוריד,\n" +"$2 ממתין" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "כעת בהורדה..." +msgstr "$1 כעת בהורדה..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "לא ניתן למצוא תלות חובה של $1." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 יותקן ו $2 תלויות שידולגו." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" @@ -190,20 +191,19 @@ msgstr "כל החבילות" #: builtin/mainmenu/dlg_contentstore.lua msgid "Already installed" -msgstr "" +msgstr "כבר מותקן" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "חזרה לתפריט הראשי" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "הסתר משחק" +msgstr "משחק בסיסי:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" +msgstr "בסיס נתוני התוכן לא זמין כאשר מיינטסט מקומפל בלי cUrl" #: builtin/mainmenu/dlg_contentstore.lua msgid "Downloading..." @@ -223,14 +223,12 @@ msgid "Install" msgstr "התקנה" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "התקנה" +msgstr "התקנת $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "תלויות רשות:" +msgstr "מתקין תלויות חסרות" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -239,37 +237,35 @@ msgstr "מודים" #: builtin/mainmenu/dlg_contentstore.lua msgid "No packages could be retrieved" -msgstr "" +msgstr "לא ניתן להביא את החבילות" #: builtin/mainmenu/dlg_contentstore.lua msgid "No results" msgstr "אין תוצאות" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "עדכון" +msgstr "אין עדכונים" #: builtin/mainmenu/dlg_contentstore.lua msgid "Not found" -msgstr "" +msgstr "לא נמצא" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "דרוס" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "אנא בדוק שמשחק הבסיס תקין." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "נכנס לתור" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Texture packs" -msgstr "חבילות מרקם" +msgstr "חבילות טקסטורה (מרקם)" #: builtin/mainmenu/dlg_contentstore.lua msgid "Uninstall" @@ -281,11 +277,11 @@ msgstr "עדכון" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "עדכן הכל [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "צפה במידע נוסף בדפדפן האינטרנט" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -293,31 +289,31 @@ msgstr "כבר קיים עולם בשם \"$1\"" #: builtin/mainmenu/dlg_create_world.lua msgid "Additional terrain" -msgstr "" +msgstr "שטח נוסף" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Altitude chill" -msgstr "" +msgstr "קור בגבהים" #: builtin/mainmenu/dlg_create_world.lua msgid "Altitude dry" -msgstr "" +msgstr "יובש בגבהים" #: builtin/mainmenu/dlg_create_world.lua msgid "Biome blending" -msgstr "" +msgstr "מיזוג ביומים (אקולוגי)" #: builtin/mainmenu/dlg_create_world.lua msgid "Biomes" -msgstr "ביומות" +msgstr "ביומים (צמחיה אקולוגית)" #: builtin/mainmenu/dlg_create_world.lua msgid "Caverns" -msgstr "" +msgstr "מערות (טבעיות בחלקן מוארות)" #: builtin/mainmenu/dlg_create_world.lua msgid "Caves" -msgstr "מערות" +msgstr "מערות (ללא אור שמש)" #: builtin/mainmenu/dlg_create_world.lua msgid "Create" @@ -325,7 +321,7 @@ msgstr "יצירה" #: builtin/mainmenu/dlg_create_world.lua msgid "Decorations" -msgstr "" +msgstr "קישוטים" #: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" @@ -337,7 +333,7 @@ msgstr "הורד אחד מאתר minetest.net" #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" -msgstr "" +msgstr "מבוכים" #: builtin/mainmenu/dlg_create_world.lua msgid "Flat terrain" @@ -345,11 +341,11 @@ msgstr "עולם שטוח" #: builtin/mainmenu/dlg_create_world.lua msgid "Floating landmasses in the sky" -msgstr "" +msgstr "גושי אדמה צפים בשמים" #: builtin/mainmenu/dlg_create_world.lua msgid "Floatlands (experimental)" -msgstr "" +msgstr "אדמה צפה (נסיוני)" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" @@ -357,19 +353,19 @@ msgstr "משחק" #: builtin/mainmenu/dlg_create_world.lua msgid "Generate non-fractal terrain: Oceans and underground" -msgstr "" +msgstr "צור שטח לא פרקטלי: אוקיינוסים ותת קרקעי" #: builtin/mainmenu/dlg_create_world.lua msgid "Hills" -msgstr "" +msgstr "גבעות" #: builtin/mainmenu/dlg_create_world.lua msgid "Humid rivers" -msgstr "" +msgstr "נהרות לחים" #: builtin/mainmenu/dlg_create_world.lua msgid "Increases humidity around rivers" -msgstr "" +msgstr "הגברת הלחות בסביבת נהרות" #: builtin/mainmenu/dlg_create_world.lua msgid "Lakes" @@ -377,20 +373,19 @@ msgstr "אגמים" #: builtin/mainmenu/dlg_create_world.lua msgid "Low humidity and high heat causes shallow or dry rivers" -msgstr "" +msgstr "לחות נמוכה וחום גבוה גורמים לנהרות רדודים או יבשים" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" -msgstr "מנוע מפות" +msgstr "מנוע (מחולל) מפות" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen flags" -msgstr "" +msgstr "אפשרויות מנוע מפות" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Mapgen-specific flags" -msgstr "מנוע מפות" +msgstr "אפשרויות ספציפיות למנוע מפות" #: builtin/mainmenu/dlg_create_world.lua msgid "Mountains" @@ -398,11 +393,11 @@ msgstr "הרים" #: builtin/mainmenu/dlg_create_world.lua msgid "Mud flow" -msgstr "" +msgstr "זרימת בוץ" #: builtin/mainmenu/dlg_create_world.lua msgid "Network of tunnels and caves" -msgstr "" +msgstr "רשת מערות ומחילות" #: builtin/mainmenu/dlg_create_world.lua msgid "No game selected" @@ -410,11 +405,11 @@ msgstr "לא נבחר משחק" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces heat with altitude" -msgstr "" +msgstr "הפחתה בחום בגובה רב" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces humidity with altitude" -msgstr "" +msgstr "הפחתת הלחות בגובה רב" #: builtin/mainmenu/dlg_create_world.lua msgid "Rivers" @@ -422,7 +417,7 @@ msgstr "נהרות" #: builtin/mainmenu/dlg_create_world.lua msgid "Sea level rivers" -msgstr "" +msgstr "נהרות בגובה פני הים" #: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -431,33 +426,33 @@ msgstr "זרע" #: builtin/mainmenu/dlg_create_world.lua msgid "Smooth transition between biomes" -msgstr "" +msgstr "מעבר חלק בין אזורי אקלים שונים" #: builtin/mainmenu/dlg_create_world.lua msgid "" "Structures appearing on the terrain (no effect on trees and jungle grass " "created by v6)" -msgstr "" +msgstr "מבנים המופיעים בשטח (אין השפעה על עצים ועשבי ג'ונגל שנוצרו על ידי v6)" #: builtin/mainmenu/dlg_create_world.lua msgid "Structures appearing on the terrain, typically trees and plants" -msgstr "" +msgstr "מבנים המופיעים בשטח, בדרך כלל עצים וצמחים" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert" -msgstr "" +msgstr "ממוזג, מדברי" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle" -msgstr "" +msgstr "ממוזג, מדברי, ג'ונגל" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle, Tundra, Taiga" -msgstr "" +msgstr "ממוזג, מדברי, ג'ונגל, טונדרה, טייגה" #: builtin/mainmenu/dlg_create_world.lua msgid "Terrain surface erosion" -msgstr "" +msgstr "סחף פני השטח" #: builtin/mainmenu/dlg_create_world.lua msgid "Trees and jungle grass" @@ -465,11 +460,11 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Vary river depth" -msgstr "" +msgstr "עומק נהרות משתנה" #: builtin/mainmenu/dlg_create_world.lua msgid "Very large caverns deep in the underground" -msgstr "" +msgstr "מערות גדולות מאוד עמוק מתחת לאדמה" #: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The Development Test is meant for developers." @@ -499,7 +494,7 @@ msgstr "pkgmgr: מחיקת \"$1\" נכשלה" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: invalid path \"$1\"" -msgstr "" +msgstr "pkgmgr: נתיב לא חוקי \"$1\"" #: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" @@ -518,6 +513,8 @@ msgid "" "This modpack has an explicit name given in its modpack.conf which will " "override any renaming here." msgstr "" +"ל- modpack (חבילת תוספות) זה יש שם מפורש שניתן ב modpack.conf שלו אשר יעקוף " +"כל שינוי-שם כאן." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "(No description of setting given)" @@ -525,7 +522,7 @@ msgstr "(לא נוסף תיאור להגדרה)" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "2D Noise" -msgstr "" +msgstr "רעש דו-מיימדי" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "< Back to Settings page" @@ -549,19 +546,19 @@ msgstr "מופעל" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Lacunarity" -msgstr "" +msgstr "מרווחיות" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Octaves" -msgstr "" +msgstr "אוקטבות" #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Offset" -msgstr "" +msgstr "היסט" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Persistance" -msgstr "" +msgstr "התמדה" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid integer." @@ -6124,37 +6121,39 @@ msgstr "" #: src/settings_translation_file.cpp msgid "View distance in nodes." -msgstr "" +msgstr "טווח ראיה בקוביות." #: src/settings_translation_file.cpp msgid "View range decrease key" -msgstr "" +msgstr "מקש הקטנת טווח ראיה" #: src/settings_translation_file.cpp msgid "View range increase key" -msgstr "" +msgstr "מקש הגדלת טוחח ראיה" #: src/settings_translation_file.cpp msgid "View zoom key" -msgstr "" +msgstr "מקש זום (משקפת)" #: src/settings_translation_file.cpp msgid "Viewing range" -msgstr "" +msgstr "טווח ראיה" #: src/settings_translation_file.cpp msgid "Virtual joystick triggers aux button" -msgstr "" +msgstr "מקש הפעלת ג'ויסטיק וירטואלי" #: src/settings_translation_file.cpp msgid "Volume" -msgstr "" +msgstr "ווליום" #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" "Requires the sound system to be enabled." msgstr "" +"עוצמת הקול של כל הצלילים.\n" +"דורש הפעלת מערכת הקול." #: src/settings_translation_file.cpp msgid "" @@ -6171,19 +6170,19 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Walking speed" -msgstr "" +msgstr "מהירות הליכה" #: src/settings_translation_file.cpp msgid "Walking, flying and climbing speed in fast mode, in nodes per second." -msgstr "" +msgstr "מהירות הליכה, טיסה וטיפוס במצב מהיר, בקוביות לשנייה." #: src/settings_translation_file.cpp msgid "Water level" -msgstr "" +msgstr "מפלס המים" #: src/settings_translation_file.cpp msgid "Water surface level of the world." -msgstr "" +msgstr "מפלס פני המים בעולם." #: src/settings_translation_file.cpp msgid "Waving Nodes" @@ -6203,15 +6202,15 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Waving liquids wave speed" -msgstr "" +msgstr "מהירות גל של נוזלים עם גלים" #: src/settings_translation_file.cpp msgid "Waving liquids wavelength" -msgstr "" +msgstr "אורך גל של נוזלים עם גלים" #: src/settings_translation_file.cpp msgid "Waving plants" -msgstr "" +msgstr "צמחים מתנופפים" #: src/settings_translation_file.cpp msgid "" @@ -6287,7 +6286,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Width component of the initial window size." -msgstr "" +msgstr "רכיב רוחב של גודל החלון הראשוני." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -6323,25 +6322,25 @@ msgstr "" #: src/settings_translation_file.cpp msgid "World-aligned textures mode" -msgstr "" +msgstr "מצב טקסטורות מיושרות לעולם" #: src/settings_translation_file.cpp msgid "Y of flat ground." -msgstr "" +msgstr "Y לקרקע שטוחה." #: src/settings_translation_file.cpp msgid "" "Y of mountain density gradient zero level. Used to shift mountains " "vertically." -msgstr "" +msgstr "Y של צפיפות הרים שיפוע רמת אפס. משמש להעברת הרים אנכית." #: src/settings_translation_file.cpp msgid "Y of upper limit of large caves." -msgstr "" +msgstr "Y של הגבול העליון של מערות גדולות." #: src/settings_translation_file.cpp msgid "Y-distance over which caverns expand to full size." -msgstr "" +msgstr "מרחק Y שעליו מתרחבות מערות לגודל מלא." #: src/settings_translation_file.cpp msgid "" @@ -6391,15 +6390,15 @@ msgstr "" #: src/settings_translation_file.cpp msgid "cURL file download timeout" -msgstr "" +msgstr "(cURL) זמן להורדה נגמר" #: src/settings_translation_file.cpp msgid "cURL parallel limit" -msgstr "" +msgstr "(cURL) מגבלה לפעולות במקביל" #: src/settings_translation_file.cpp msgid "cURL timeout" -msgstr "" +msgstr "(cURL) מגבלת זמן" #~ msgid "Configure" #~ msgstr "קביעת תצורה" From 454fe5be3cf39410f614b7eb4cfcd23057bcd666 Mon Sep 17 00:00:00 2001 From: "Omer I.S" Date: Tue, 9 Feb 2021 09:08:04 +0000 Subject: [PATCH 030/110] Translated using Weblate (Hebrew) Currently translated at 18.4% (250 of 1353 strings) --- po/he/minetest.po | 70 ++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 38 deletions(-) diff --git a/po/he/minetest.po b/po/he/minetest.po index db2ff0315..3e0ff411c 100644 --- a/po/he/minetest.po +++ b/po/he/minetest.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" "PO-Revision-Date: 2021-02-09 15:34+0000\n" -"Last-Translator: Yossi Cohen \n" +"Last-Translator: Omer I.S. \n" "Language-Team: Hebrew \n" "Language: he\n" @@ -17,7 +17,7 @@ msgstr "" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" -msgstr "לקום לתחייה" +msgstr "קימה לתחייה" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "You died" @@ -45,7 +45,7 @@ msgstr "התחברות מחדש" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" -msgstr "השרת מבקש שתתחבר מחדש:" +msgstr "השרת מבקש התחברות מחדש:" #: builtin/mainmenu/common.lua msgid "Protocol version mismatch. " @@ -100,13 +100,12 @@ msgid "Enable modpack" msgstr "הפעלת ערכת המודים" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "characters [a-z0-9_] are allowed." msgstr "" -"טעינת המוד \"1$\" נכשלה מכיוון שהוא מכיל תווים לא חוקיים. רק התווים [a-" -"z0-9_] מותרים." +"הפעלת המוד \"1$\" נכשלה מכיוון שהוא מכיל תווים לא חוקיים. רק התווים [a-z0-9_]" +" מותרים." #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" @@ -456,7 +455,7 @@ msgstr "סחף פני השטח" #: builtin/mainmenu/dlg_create_world.lua msgid "Trees and jungle grass" -msgstr "" +msgstr "עצים ודשא של ג׳ונגל" #: builtin/mainmenu/dlg_create_world.lua msgid "Vary river depth" @@ -562,7 +561,7 @@ msgstr "התמדה" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid integer." -msgstr "" +msgstr "נא להזין מספר שלם תקין." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid number." @@ -602,7 +601,7 @@ msgstr "הערך לא יכול להיות גדול מ־$1." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X" -msgstr "" +msgstr "X" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X spread" @@ -610,7 +609,7 @@ msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y" -msgstr "" +msgstr "Y" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y spread" @@ -618,7 +617,7 @@ msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z" -msgstr "" +msgstr "Z" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z spread" @@ -673,7 +672,7 @@ msgstr "" #: builtin/mainmenu/pkgmgr.lua msgid "Install: file: \"$1\"" -msgstr "" +msgstr "התקנה: מקובץ: \"$1\"" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" @@ -706,11 +705,11 @@ msgstr "" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" -msgstr "" +msgstr "עיון בתוכן מקוון" #: builtin/mainmenu/tab_content.lua msgid "Content" -msgstr "" +msgstr "תוכן" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" @@ -718,11 +717,11 @@ msgstr "השבתת חבילת המרקם" #: builtin/mainmenu/tab_content.lua msgid "Information:" -msgstr "" +msgstr "מידע:" #: builtin/mainmenu/tab_content.lua msgid "Installed Packages:" -msgstr "" +msgstr "חבילות מותקנות:" #: builtin/mainmenu/tab_content.lua msgid "No dependencies." @@ -730,7 +729,7 @@ msgstr "אין תלויות." #: builtin/mainmenu/tab_content.lua msgid "No package description available" -msgstr "" +msgstr "אין תיאור חבילה זמין" #: builtin/mainmenu/tab_content.lua msgid "Rename" @@ -738,7 +737,7 @@ msgstr "שינוי שם" #: builtin/mainmenu/tab_content.lua msgid "Uninstall Package" -msgstr "" +msgstr "הסרת החבילה" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -746,11 +745,11 @@ msgstr "שימוש בחבילת המרקם" #: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" -msgstr "" +msgstr "תורמים פעילים" #: builtin/mainmenu/tab_credits.lua msgid "Core Developers" -msgstr "" +msgstr "מפתחים עיקריים" #: builtin/mainmenu/tab_credits.lua msgid "Credits" @@ -769,15 +768,15 @@ msgstr "" #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" -msgstr "" +msgstr "תורמים קודמים" #: builtin/mainmenu/tab_credits.lua msgid "Previous Core Developers" -msgstr "" +msgstr "מפתחים עיקריים קודמים" #: builtin/mainmenu/tab_local.lua msgid "Announce Server" -msgstr "" +msgstr "הכרזה על השרת" #: builtin/mainmenu/tab_local.lua msgid "Bind Address" @@ -792,9 +791,8 @@ msgid "Enable Damage" msgstr "לאפשר חבלה" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Host Game" -msgstr "הסתר משחק" +msgstr "אירוח משחק" #: builtin/mainmenu/tab_local.lua msgid "Host Server" @@ -817,23 +815,20 @@ msgid "No world created or selected!" msgstr "אין עולם שנוצר או נבחר!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Password" -msgstr "שם/סיסמה" +msgstr "סיסמה" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Play Game" -msgstr "התחל משחק" +msgstr "להתחיל לשחק" #: builtin/mainmenu/tab_local.lua msgid "Port" msgstr "פורט" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "נא לבחור עולם:" +msgstr "בחירת מודים" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -844,9 +839,8 @@ msgid "Server Port" msgstr "" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Start Game" -msgstr "הסתר משחק" +msgstr "התחלת המשחק" #: builtin/mainmenu/tab_online.lua msgid "Address / Port" @@ -1186,7 +1180,7 @@ msgid "Continue" msgstr "" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1208,13 +1202,13 @@ msgstr "" "- %s: כדי לזוז אחורה\n" "- %s: כדי לזוז שמאלה\n" "- %s: כדי לזוז ימינה\n" -"- %s: כדי לקפוץ או לטפס\n" -"- %s: כדי להתכופף או לרדת למטה\n" +"- %s: כדי לקפוץ או לטפס למעלה\n" +"- %s: כדי לחפור או לחבוט\n" +"- %s: כדי להניח או להשתמש\n" +"- %s: כדי להתכופף או לטפס למטה\n" "- %s: כדי לזרוק פריט\n" "- %s: כדי לפתוח את תיק החפצים\n" "- עכבר: כדי להסתובב או להסתכל\n" -"- לחצן שמאלי בעכבר: כדי לחצוב או להרביץ\n" -"- לחצן ימני בעכבר: כדי להניח או להשתמש\n" "- גלגלת העכבר: כדי לבחור פריט\n" "- %s: כדי לפתוח את הצ׳אט\n" From 9895eba92ef87db8ebbf0d5e55a2174aec83faa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=C4=9Fuz=20Ersen?= Date: Thu, 11 Feb 2021 19:33:38 +0000 Subject: [PATCH 031/110] Translated using Weblate (Turkish) Currently translated at 100.0% (1353 of 1353 strings) --- po/tr/minetest.po | 137 ++++++++++++++++++++-------------------------- 1 file changed, 59 insertions(+), 78 deletions(-) diff --git a/po/tr/minetest.po b/po/tr/minetest.po index 3b4aec62c..c0fa1902d 100644 --- a/po/tr/minetest.po +++ b/po/tr/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Turkish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-06-15 22:41+0000\n" -"Last-Translator: monolifed \n" +"PO-Revision-Date: 2021-02-11 19:34+0000\n" +"Last-Translator: Oğuz Ersen \n" "Language-Team: Turkish \n" "Language: tr\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.1\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -170,9 +170,8 @@ msgid "" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "İndiriliyor..." +msgstr "$1 indiriliyor..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." @@ -187,9 +186,8 @@ msgid "All packages" msgstr "Tüm paketler" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "Tuş zaten kullanımda" +msgstr "Zaten kuruldu" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" @@ -222,14 +220,12 @@ msgid "Install" msgstr "Kur" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Kur" +msgstr "$1 kur" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "İsteğe bağlı bağımlılıklar:" +msgstr "Eksik bağımlılıkları kur" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -245,14 +241,12 @@ msgid "No results" msgstr "Sonuç yok" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Güncelle" +msgstr "Güncelleme yok" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Not found" -msgstr "Sesi kapat" +msgstr "Bulunamadı" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" @@ -763,9 +757,8 @@ msgid "Credits" msgstr "Hakkında" #: builtin/mainmenu/tab_credits.lua -#, fuzzy msgid "Open User Data Directory" -msgstr "Dizin seç" +msgstr "Kullanıcı Veri Dizinini Aç" #: builtin/mainmenu/tab_credits.lua msgid "" @@ -822,9 +815,8 @@ msgid "No world created or selected!" msgstr "Dünya seçilmedi ya da yaratılmadı!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Password" -msgstr "Yeni Şifre" +msgstr "Parola" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -881,7 +873,7 @@ msgstr "Oyuna Katıl" #: builtin/mainmenu/tab_online.lua msgid "Name / Password" -msgstr "Ad / Şifre" +msgstr "Ad / Parola" #: builtin/mainmenu/tab_online.lua msgid "Ping" @@ -1091,7 +1083,7 @@ msgstr "Lütfen bir ad seçin!" #: src/client/clientlauncher.cpp msgid "Provided password file failed to open: " -msgstr "Sağlanan şifre dosyası açılamadı: " +msgstr "Sağlanan parola dosyası açılamadı: " #: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " @@ -1168,7 +1160,7 @@ msgstr "Kamera güncelleme etkin" #: src/client/game.cpp msgid "Change Password" -msgstr "Şifre değiştir" +msgstr "Parola değiştir" #: src/client/game.cpp msgid "Cinematic mode disabled" @@ -1191,7 +1183,7 @@ msgid "Continue" msgstr "Devam et" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1214,12 +1206,12 @@ msgstr "" "- %s: sola hareket\n" "- %s: sağa hareket\n" "- %s: zıpla/tırman\n" +"- %s: kaz/vur\n" +"- %s: yerleştir/kullan\n" "- %s: sız/aşağı in\n" "- %s: ögeyi at\n" "- %s: envanter\n" "- Fare: dön/bak\n" -"- Sol fare: kaz/vur\n" -"- Sağ fare: yerleştir/kullan\n" "- Fare tekerleği: öge seç\n" "- %s: sohbet\n" @@ -1748,23 +1740,22 @@ msgid "Minimap hidden" msgstr "Mini harita gizli" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "Radar kipinde mini harita, Yakınlaştırma x1" +msgstr "Radar kipinde mini harita, Yakınlaştırma x%d" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "Yüzey kipinde mini harita, Yakınlaştırma x1" +msgstr "Yüzey kipinde mini harita, Yakınlaştırma x%d" #: src/client/minimap.cpp -#, fuzzy msgid "Minimap in texture mode" -msgstr "Minimum doku boyutu" +msgstr "Doku kipinde mini harita" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" -msgstr "Şifreler aynı değil!" +msgstr "Parolalar eşleşmiyor!" #: src/gui/guiConfirmRegistration.cpp msgid "Register and Join" @@ -1782,7 +1773,7 @@ msgstr "" "Bu sunucuya \"%s\" adıyla ilk kez katılmak üzeresiniz.\n" "Devam ederseniz, kimlik bilgilerinizi kullanarak yeni bir hesap bu sunucuda " "oluşturulur.\n" -"Lütfen şifrenizi tekrar yazın ve hesap oluşturmayı onaylamak için 'Kayıt Ol " +"Lütfen parolanızı tekrar yazın ve hesap oluşturmayı onaylamak için 'Kayıt Ol " "ve Katıl' düğmesini tıklayın veya iptal etmek için 'İptal'i tıklayın." #: src/gui/guiFormSpecMenu.cpp @@ -1939,15 +1930,15 @@ msgstr "Değiştir" #: src/gui/guiPasswordChange.cpp msgid "Confirm Password" -msgstr "Şifreyi Doğrulayın" +msgstr "Parolayı Doğrula" #: src/gui/guiPasswordChange.cpp msgid "New Password" -msgstr "Yeni Şifre" +msgstr "Yeni Parola" #: src/gui/guiPasswordChange.cpp msgid "Old Password" -msgstr "Eski Şifre" +msgstr "Eski Parola" #: src/gui/guiVolumeChange.cpp msgid "Exit" @@ -2732,11 +2723,12 @@ msgid "Crosshair alpha" msgstr "Artı saydamlığı" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "Artı saydamlığı (solukluk, 0 ile 255 arasında)." +msgstr "" +"Artı saydamlığı (solukluk, 0 ile 255 arasında).\n" +"Ayrıca nesne artı rengini de denetler" #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2798,7 +2790,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Default password" -msgstr "Öntanımlı şifre" +msgstr "Öntanımlı parola" #: src/settings_translation_file.cpp msgid "Default privileges" @@ -2931,9 +2923,8 @@ msgid "Desynchronize block animation" msgstr "Blok animasyonlarını eşzamansız yap" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dig key" -msgstr "Sağ tuş" +msgstr "Kazma tuşu" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -2945,7 +2936,7 @@ msgstr "Hile önleme devre dışı" #: src/settings_translation_file.cpp msgid "Disallow empty passwords" -msgstr "Boş şifrelere izin verme" +msgstr "Boş parolalara izin verme" #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." @@ -3155,9 +3146,8 @@ msgstr "" "seviyesi oluşturur: katı bir yüzenkara katmanı için uygundur." #: src/settings_translation_file.cpp -#, fuzzy msgid "FPS when unfocused or paused" -msgstr "Oyun duraklatıldığında maksimum FPS." +msgstr "Odaklanmadığında veya duraklatıldığında FPS" #: src/settings_translation_file.cpp msgid "FSAA" @@ -3543,18 +3533,17 @@ msgid "HUD toggle key" msgstr "HUD açma/kapama tuşu" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- none: Do not log deprecated calls\n" "- log: mimic and log backtrace of deprecated call (default).\n" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" -"Kullanım dışı lua API çağrılarının ele alınması:\n" -"- legacy: (eski) Eski davranış taklit etmeye çalışır (öntanımlı).\n" -"- log: (günlük) kullanım dışı çağrıları taklit eder ve günlükler (hata " -"ayıklama için öntanımlı).\n" -"- error: (hata) kullanım dışı çağrıların kullanımını iptal eder (mod " +"Kullanım dışı Lua API çağrılarının ele alınması:\n" +"- none: (yok) kullanım dışı çağrıları günlüğe kaydetmez.\n" +"- log: (günlük) kullanım dışı çağrıları taklit eder ve geri izlemesini " +"günlüğe kaydeder (öntanımlı).\n" +"- error: (hata) kullanım dışı çağrılar kullanıldığında iptal eder (mod " "geliştiricileri için önerilen)." #: src/settings_translation_file.cpp @@ -3910,7 +3899,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "If enabled, new players cannot join with an empty password." -msgstr "Etkinleştirilirse, yeni oyuncular boş bir şifre ile katılamaz." +msgstr "Etkinleştirilirse, yeni oyuncular boş bir parola ile katılamaz." #: src/settings_translation_file.cpp msgid "" @@ -4078,9 +4067,8 @@ msgid "Joystick button repetition interval" msgstr "Joystick düğmesi tekrarlama aralığı" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick deadzone" -msgstr "Joystick türü" +msgstr "Joystick ölü bölgesi" #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" @@ -4185,13 +4173,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for digging.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Zıplama tuşu.\n" +"Kazma tuşu.\n" "Bakın: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4338,13 +4325,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for placing.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Zıplama tuşu.\n" +"Yerleştirme tuşu.\n" "Bakın: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -5302,9 +5288,8 @@ msgid "Maximum FPS" msgstr "Maksimum FPS" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum FPS when the window is not focused, or when the game is paused." -msgstr "Oyun duraklatıldığında maksimum FPS." +msgstr "Pencere odaklanmadığında veya oyun duraklatıldığında en yüksek FPS." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5598,7 +5583,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "New users need to input this password." -msgstr "Yeni kullanıcıların bu şifreyi girmesi gerekir." +msgstr "Yeni kullanıcıların bu parolayı girmesi gerekir." #: src/settings_translation_file.cpp msgid "Noclip" @@ -5772,14 +5757,12 @@ msgid "Pitch move mode" msgstr "Eğim hareket kipi" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place key" -msgstr "Uçma tuşu" +msgstr "Yerleştirme tuşu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place repetition interval" -msgstr "Sağ tık tekrarlama aralığı" +msgstr "Yerleştirme tekrarlama aralığı" #: src/settings_translation_file.cpp msgid "" @@ -6261,13 +6244,12 @@ msgid "Show entity selection boxes" msgstr "Varlık seçim kutularını göster" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Show entity selection boxes\n" "A restart is required after changing this." msgstr "" -"Dili ayarlayın. Sistem dilini kullanmak için boş bırakın.\n" -"Bunu değiştirdikten sonra yeniden başlatmak gerekir." +"Varlık seçim kutularını göster.\n" +"Bunu değiştirdikten sonra yeniden başlatma gerekir." #: src/settings_translation_file.cpp msgid "Shutdown message" @@ -6541,9 +6523,8 @@ msgid "The URL for the content repository" msgstr "İçerik deposu için URL" #: src/settings_translation_file.cpp -#, fuzzy msgid "The deadzone of the joystick" -msgstr "Kullanılacak joystick'in tanımlayıcısı" +msgstr "Joystick ölü bölgesi" #: src/settings_translation_file.cpp msgid "" @@ -6617,7 +6598,6 @@ msgstr "" "Bu active_object_send_range_blocks ile birlikte ayarlanmalıdır." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end for Irrlicht.\n" "A restart is required after changing this.\n" @@ -6627,10 +6607,12 @@ msgid "" "Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" msgstr "" "Irrlicht için işleme arka ucu.\n" -"Bunu değiştirdikten sonra tekrar başlatma gerekir.\n" -"Not: Android'de, emin değilseniz OGLES1 kullanın! Başka türlü, uygulama\n" -"başlayamayabilir. Diğer platformlarda, OpenGL önerilir ve şu anda gölgeleme\n" -"desteği olan tek sürücüdür." +"Bunu değiştirdikten sonra yeniden başlatma gerekir.\n" +"Not: Android'de, emin değilseniz OGLES1 kullanın! Başka türlü, uygulama " +"başlayamayabilir.\n" +"Diğer platformlarda, OpenGL önerilir.\n" +"Gölgelendiriciler OpenGL (yalnızca masaüstü) ve OGLES2 (deneysel) tarafından " +"desteklenmektedir" #: src/settings_translation_file.cpp msgid "" @@ -6679,14 +6661,13 @@ msgstr "" "cinsinden tekrar eden olaylar arasında geçen süre." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The time in seconds it takes between repeated node placements when holding\n" "the place button." msgstr "" -"Sağ fare tuşuna basılı tutarken tekrar eden sağ tıklar arasında saniye " -"cinsinden\n" -"geçen süre." +"Yerleştirme tuşuna basılı tutarken tekrarlanan düğüm yerleşimleri arasında " +"geçen\n" +"saniye cinsinden süre." #: src/settings_translation_file.cpp msgid "The type of joystick" From e97dc5ece52be0fc1a0ac68c092f97621de78847 Mon Sep 17 00:00:00 2001 From: Adnan1091 Date: Fri, 5 Feb 2021 15:45:07 +0000 Subject: [PATCH 032/110] Translated using Weblate (Turkish) Currently translated at 100.0% (1353 of 1353 strings) --- po/tr/minetest.po | 71 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 22 deletions(-) diff --git a/po/tr/minetest.po b/po/tr/minetest.po index c0fa1902d..db95e41fb 100644 --- a/po/tr/minetest.po +++ b/po/tr/minetest.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" "PO-Revision-Date: 2021-02-11 19:34+0000\n" -"Last-Translator: Oğuz Ersen \n" +"Last-Translator: Adnan1091 \n" "Language-Team: Turkish \n" "Language: tr\n" @@ -153,21 +153,23 @@ msgstr "etkin" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" zaten var.Değiştirilsin mi?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "$ 1 ve $ 2 destek dosyaları yüklenecek." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 'e $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 indiriliyor,\n" +"$2 sırada" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 downloading..." @@ -175,11 +177,11 @@ msgstr "$1 indiriliyor..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 için destek dosyaları bulanamadı." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 indirilecek, ve $2 destek dosyaları atlanacak." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" @@ -194,9 +196,8 @@ msgid "Back to Main Menu" msgstr "Ana Menüye Dön" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Oyun Barındır" +msgstr "Yerel oyun:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" @@ -250,15 +251,15 @@ msgstr "Bulunamadı" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Üzerine yaz" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Lütfen asıl oyunun doğru olup olmadığını gözden geçirin." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "Sıraya alındı" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -274,11 +275,11 @@ msgstr "Güncelle" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Hepsini güncelle [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Tarayıcı'da daha fazla bilgi edinin" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -765,6 +766,8 @@ msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Dosya yöneticisiyle dünya,oyun,modlar ve doku paketleri olan kullanıcı " +"dayalı dosyayı açar." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -804,7 +807,7 @@ msgstr "ContentDB'den oyunlar yükle" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "Ad" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -827,9 +830,8 @@ msgid "Port" msgstr "Port" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "Dünya Seç:" +msgstr "Mod seçin" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -981,9 +983,8 @@ msgid "Shaders" msgstr "Gölgelemeler" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Shaders (experimental)" -msgstr "Yüzenkaralar (deneysel)" +msgstr "Gölgelendirme (deneysel)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" @@ -2149,7 +2150,7 @@ msgstr "ABM aralığı" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "ABM zаman gideri" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" @@ -2654,7 +2655,7 @@ msgstr "ContentDB: Kara Liste" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "ContentDB aşırı eşzamanlı indirmeler" #: src/settings_translation_file.cpp msgid "ContentDB URL" @@ -2739,6 +2740,8 @@ msgid "" "Crosshair color (R,G,B).\n" "Also controls the object crosshair color" msgstr "" +"Artı rengi (R,G,B).\n" +"Ayrıca nesne artı rengini de değiştirir" #: src/settings_translation_file.cpp msgid "DPI" @@ -5098,11 +5101,11 @@ msgstr "Tüm sıvıları opak yapar" #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" -msgstr "" +msgstr "Hafıza deposu için harita sıkıştırma düzeyi" #: src/settings_translation_file.cpp msgid "Map Compression Level for Network Transfer" -msgstr "" +msgstr "Ağ aktarma hızı için harita sıkıştırma düzeyi" #: src/settings_translation_file.cpp msgid "Map directory" @@ -5351,6 +5354,9 @@ msgid "" "be queued.\n" "This should be lower than curl_parallel_limit." msgstr "" +"En yüksek eşzamanlı indirme sayısı.Bu sınırı aşan indirmeler sıraya " +"alınacaktır.\n" +"Bu curl_parallel_limit den daha az olmalıdır." #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -6651,6 +6657,8 @@ msgid "" "The time budget allowed for ABMs to execute on each step\n" "(as a fraction of the ABM Interval)" msgstr "" +"ABM'lerin her adımda yürütülmesi için izin verilen zaman gideri\n" +"(ABM aralığının bir parçası olarak)" #: src/settings_translation_file.cpp msgid "" @@ -6835,6 +6843,14 @@ msgid "" "If set to 0, MSAA is disabled.\n" "A restart is required after changing this option." msgstr "" +"Öbek/Küme kenarlarını düzeltmek için çok örnekli düzgünleştirmeyi(anti-" +"aliasing) kullanın.\n" +"Bu işlem görüntüyü keskinleştirirken 3 boyutlu görüş alanını düzeltir.\n" +"ama doku(texture) içindeki görüntüyü etkilemez.\n" +"(Saydam dokularda etkisi daha belirgindir)\n" +"Gölgelendirme kapalı ise düğüm arası(nod) boşluk görülür.\n" +"0'da ise düzgünleştirme kapalıdır.\n" +"Ayarları değiştirdikten sonra yenileme gereklidir." #: src/settings_translation_file.cpp msgid "Use trilinear filtering when scaling textures." @@ -7237,6 +7253,11 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"Harita kütlerini diske kaydederken kullanılacak ZLib sıkıştırma düzeyi.\n" +"-1 - Zlib'in varsayılan sıkıştırma düzeyi\n" +"0 - hiçbir sıkıştırma yok, en hızlı\n" +"9 - en iyi sıkıştırma, en yavaş\n" +"(seviye 1-3, Zlib'in \"hızlı\" , 4-9 sıradan yöntemi kullanır)" #: src/settings_translation_file.cpp msgid "" @@ -7246,6 +7267,12 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"Harita kütlerini istemciye(client) gönderirken kullanılacak ZLib sıkıştırma " +"düzeyi.\n" +"-1 - Zlib'in varsayılan sıkıştırma düzeyi\n" +"0 - hiçbir sıkıştırma yok, en hızlı\n" +"9 - en iyi sıkıştırma, en yavaş\n" +"(seviye 1-3, Zlib'in \"hızlı\" , 4-9 sıradan yöntemi kullanır)" #: src/settings_translation_file.cpp msgid "cURL file download timeout" From 1b7acd2a6ca2cc4ad267e24f89ad947eb083edad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81cs=20Zolt=C3=A1n?= Date: Sun, 7 Feb 2021 21:02:58 +0000 Subject: [PATCH 033/110] Translated using Weblate (Hungarian) Currently translated at 75.7% (1025 of 1353 strings) --- po/hu/minetest.po | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/po/hu/minetest.po b/po/hu/minetest.po index 0f14b57da..c599ae34e 100644 --- a/po/hu/minetest.po +++ b/po/hu/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Hungarian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-12-05 15:29+0000\n" +"PO-Revision-Date: 2021-02-13 08:50+0000\n" "Last-Translator: Ács Zoltán \n" "Language-Team: Hungarian \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -168,6 +168,8 @@ msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 letöltése,\n" +"$2 sorba állítva" #: builtin/mainmenu/dlg_contentstore.lua #, fuzzy @@ -256,7 +258,7 @@ msgstr "Hang némítása" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Felülírás" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." @@ -264,7 +266,7 @@ msgstr "" #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "Sorbaállítva" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -280,11 +282,11 @@ msgstr "Frissítés" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Összes frissítése [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "További információ megnyitása a böngészőben" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -778,6 +780,9 @@ msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Megnyitja a fájlkezelőben / intézőben azt a könyvtárat, amely a felhasználó " +"világait,\n" +"játékait, modjait, és textúráit tartalmazza." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -817,7 +822,7 @@ msgstr "Játékok telepítése ContentDB-ről" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "Név" #: builtin/mainmenu/tab_local.lua msgid "New" From 8bfe4e3cef4c6f9cf49904381435487a50214b47 Mon Sep 17 00:00:00 2001 From: Jacques Lagrange Date: Thu, 11 Feb 2021 20:41:00 +0000 Subject: [PATCH 034/110] Translated using Weblate (Italian) Currently translated at 100.0% (1353 of 1353 strings) --- po/it/minetest.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/po/it/minetest.po b/po/it/minetest.po index a5c38f328..a8597e49a 100644 --- a/po/it/minetest.po +++ b/po/it/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Italian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2021-02-05 09:40+0000\n" -"Last-Translator: Giov4 \n" +"PO-Revision-Date: 2021-02-13 08:50+0000\n" +"Last-Translator: Jacques Lagrange \n" "Language-Team: Italian \n" "Language: it\n" @@ -769,8 +769,8 @@ msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" -"Apre la cartella che contiene mondi, giochi, mod e pacchetti texture forniti " -"dall'utente in un gestore di file / explorer." +"Apre la cartella che contiene mondi, giochi, mod e pacchetti \n" +"texture forniti dall'utente in un gestore di file / explorer." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -3182,7 +3182,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "FPS when unfocused or paused" -msgstr "FPS quando il gioco è in pausa o in secondo piano." +msgstr "FPS quando il gioco è in pausa o in secondo piano" #: src/settings_translation_file.cpp msgid "FSAA" From 7dc68ebf532aefe62da81f8b10c3dba34bbb42e4 Mon Sep 17 00:00:00 2001 From: "Ertu (Er2, Err)" Date: Fri, 12 Feb 2021 08:01:13 +0000 Subject: [PATCH 035/110] Translated using Weblate (Russian) Currently translated at 99.4% (1345 of 1353 strings) --- po/ru/minetest.po | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/po/ru/minetest.po b/po/ru/minetest.po index f7fd5eca8..9090e49fb 100644 --- a/po/ru/minetest.po +++ b/po/ru/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Russian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2021-02-05 09:40+0000\n" -"Last-Translator: Nikita Epifanov \n" +"PO-Revision-Date: 2021-02-13 08:50+0000\n" +"Last-Translator: Ertu (Er2, Err) \n" "Language-Team: Russian \n" "Language: ru\n" @@ -255,7 +255,6 @@ msgid "Overwrite" msgstr "Перезаписать" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Please check that the base game is correct." msgstr "Пожалуйста, убедитесь, что базовая игра верна." @@ -1757,7 +1756,6 @@ msgid "Minimap in surface mode, Zoom x%d" msgstr "Миникарта в поверхностном режиме, увеличение x%d" #: src/client/minimap.cpp -#, fuzzy msgid "Minimap in texture mode" msgstr "Минимальный размер текстуры" @@ -2944,9 +2942,8 @@ msgid "Desynchronize block animation" msgstr "Рассинхронизация анимации блоков" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dig key" -msgstr "Правая клавиша меню" +msgstr "Кнопка копать" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3170,7 +3167,6 @@ msgstr "" "с более плоскими низинами, подходит для массивного уровня парящих островов." #: src/settings_translation_file.cpp -#, fuzzy msgid "FPS when unfocused or paused" msgstr "Максимум кадровой частоты при паузе." @@ -4187,13 +4183,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for digging.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Клавиша прыжка.\n" +"Клавиша копания.\n" "См. http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" From 3b7663e79f2aeb3a31f827a6011d48fa01019e01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=C4=9Fuz=20Ersen?= Date: Thu, 11 Feb 2021 19:34:51 +0000 Subject: [PATCH 036/110] Translated using Weblate (Turkish) Currently translated at 100.0% (1353 of 1353 strings) --- po/tr/minetest.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/tr/minetest.po b/po/tr/minetest.po index db95e41fb..15fe58912 100644 --- a/po/tr/minetest.po +++ b/po/tr/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Turkish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2021-02-11 19:34+0000\n" -"Last-Translator: Adnan1091 \n" +"PO-Revision-Date: 2021-02-13 08:50+0000\n" +"Last-Translator: Oğuz Ersen \n" "Language-Team: Turkish \n" "Language: tr\n" @@ -766,8 +766,8 @@ msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" -"Dosya yöneticisiyle dünya,oyun,modlar ve doku paketleri olan kullanıcı " -"dayalı dosyayı açar." +"Bir dosya yöneticisi / gezgininde kullanıcı tarafından sağlanan dünyaları,\n" +"oyunları, modları ve doku paketlerini içeren dizini açar." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" From 65047e41921f541b3ee26209040a53025fc1b021 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Thu, 11 Feb 2021 21:06:53 +0000 Subject: [PATCH 037/110] Translated using Weblate (Lojban) Currently translated at 13.9% (189 of 1353 strings) --- po/jbo/minetest.po | 82 +++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 49 deletions(-) diff --git a/po/jbo/minetest.po b/po/jbo/minetest.po index ab7b25e3e..b44505ae6 100644 --- a/po/jbo/minetest.po +++ b/po/jbo/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Lojban (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-03-15 18:36+0000\n" -"Last-Translator: Robin Townsend \n" +"PO-Revision-Date: 2021-02-13 08:50+0000\n" +"Last-Translator: Wuzzy \n" "Language-Team: Lojban \n" "Language: jbo\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -24,7 +24,7 @@ msgstr ".i do morsi" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" -msgstr "" +msgstr "fitytu'i" #: builtin/fstk/ui.lua #, fuzzy @@ -80,7 +80,7 @@ msgstr "" #: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp #: src/gui/guiPasswordChange.cpp msgid "Cancel" -msgstr "sisti" +msgstr "fitytoltu'i" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/tab_content.lua @@ -321,7 +321,7 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Caves" -msgstr "" +msgstr "kevzda" #: builtin/mainmenu/dlg_create_world.lua msgid "Create" @@ -344,7 +344,7 @@ msgstr ".i ko kibycpa pa se kelci la'o zoi. minetest.net .zoi" #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" -msgstr "" +msgstr "kevdi'u" #: builtin/mainmenu/dlg_create_world.lua msgid "Flat terrain" @@ -352,11 +352,12 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Floating landmasses in the sky" -msgstr "" +msgstr "lo tumla cu fulta lo tsani" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Floatlands (experimental)" -msgstr "" +msgstr "fulta tumla" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" @@ -401,7 +402,7 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Mountains" -msgstr "" +msgstr "cmana" #: builtin/mainmenu/dlg_create_world.lua msgid "Mud flow" @@ -425,7 +426,7 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Rivers" -msgstr "" +msgstr "rirxe" #: builtin/mainmenu/dlg_create_world.lua msgid "Sea level rivers" @@ -433,9 +434,8 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "Seed" -msgstr "cunso jai krasi" +msgstr "cunso namcu" #: builtin/mainmenu/dlg_create_world.lua msgid "Smooth transition between biomes" @@ -807,7 +807,7 @@ msgstr "finti se kelci" #: builtin/mainmenu/tab_local.lua msgid "Enable Damage" -msgstr "" +msgstr "pilno lo selxai" #: builtin/mainmenu/tab_local.lua #, fuzzy @@ -835,9 +835,8 @@ msgid "No world created or selected!" msgstr ".i do no munje cu cupra ja cu cuxna" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Password" -msgstr "lo cnino lerpoijaspu" +msgstr "lo lerpoijaspu" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -866,7 +865,7 @@ msgstr "co'a kelci" #: builtin/mainmenu/tab_online.lua msgid "Address / Port" -msgstr "judri .i judrnporte" +msgstr "lo samjudri jo'u judrnporte" #: builtin/mainmenu/tab_online.lua msgid "Connect" @@ -894,7 +893,7 @@ msgstr "co'a kansa fi le ka kelci" #: builtin/mainmenu/tab_online.lua msgid "Name / Password" -msgstr "cmene .i lerpoijaspu" +msgstr "lo cmene .e lo lerpoijaspu" #: builtin/mainmenu/tab_online.lua msgid "Ping" @@ -910,9 +909,8 @@ msgid "2x" msgstr "" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "3D Clouds" -msgstr "le bliku dilnu" +msgstr "cibyca'u dilnu" #: builtin/mainmenu/tab_settings.lua msgid "4x" @@ -953,12 +951,10 @@ msgid "Fancy Leaves" msgstr "lo tolkli pezli" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Mipmap" msgstr "lo puvrmipmepi" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Mipmap + Aniso. Filter" msgstr "lo puvrmipmepi .e lo puvytolmanfyju'e" @@ -967,9 +963,8 @@ msgid "No Filter" msgstr "" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "No Mipmap" -msgstr "lo puvrmipmepi" +msgstr "" #: builtin/mainmenu/tab_settings.lua #, fuzzy @@ -991,14 +986,12 @@ msgid "Opaque Leaves" msgstr "lo tolkli pezli" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Opaque Water" -msgstr "lo tolkli djacu" +msgstr "tolkli djacu" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Particles" -msgstr "lo kantu" +msgstr "kantu" #: builtin/mainmenu/tab_settings.lua msgid "Screen:" @@ -1427,7 +1420,7 @@ msgstr "nonselkansa" #: src/client/game.cpp msgid "Sound Volume" -msgstr "" +msgstr "ni sance" #: src/client/game.cpp #, fuzzy @@ -1465,7 +1458,7 @@ msgstr "" #: src/client/game.cpp #, c-format msgid "Volume changed to %d%%" -msgstr "" +msgstr ".i fe lo ni sance cu cenba fi li %d ce'i" #: src/client/game.cpp msgid "Wireframe shown" @@ -1576,9 +1569,8 @@ msgid "Insert" msgstr "" #: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Left" -msgstr "za'i zu'e muvdu" +msgstr "zu'e muvdu" #: src/client/keycode.cpp msgid "Left Button" @@ -1704,9 +1696,8 @@ msgid "Return" msgstr "" #: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Right" -msgstr "za'i ri'u muvdu" +msgstr "ri'u muvdu" #: src/client/keycode.cpp msgid "Right Button" @@ -1829,9 +1820,8 @@ msgid "Automatic jumping" msgstr "" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Backward" -msgstr "za'i ti'a muvdu" +msgstr "ti'a muvdu" #: src/gui/guiKeyChangeMenu.cpp #, fuzzy @@ -1856,21 +1846,19 @@ msgstr "" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. volume" -msgstr "" +msgstr "jdikygau lo ni sance" #: src/gui/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" msgstr "" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Drop" -msgstr "mu'e falcru" +msgstr "falcru" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Forward" -msgstr "za'i ca'u muvdu" +msgstr "ca'u muvdu" #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. range" @@ -1878,7 +1866,7 @@ msgstr "" #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. volume" -msgstr "" +msgstr "zengau lo ni sance" #: src/gui/guiKeyChangeMenu.cpp msgid "Inventory" @@ -2084,9 +2072,8 @@ msgid "2D noise that locates the river valleys and channels." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "3D clouds" -msgstr "le bliku dilnu" +msgstr "cibyca'u dilnu" #: src/settings_translation_file.cpp msgid "3D mode" @@ -2883,9 +2870,8 @@ msgid "Dig key" msgstr "za'i ri'u muvdu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Digging particles" -msgstr "lo kantu" +msgstr "kakpa kantu" #: src/settings_translation_file.cpp #, fuzzy @@ -4998,7 +4984,6 @@ msgid "Minimum texture size" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mipmapping" msgstr "lo puvrmipmepi" @@ -6237,9 +6222,8 @@ msgid "Virtual joystick triggers aux button" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Volume" -msgstr "lo ni sance " +msgstr "lo ni sance" #: src/settings_translation_file.cpp msgid "" From d8e7b6ec681a2636d7cee3e88d9f6be193e8401f Mon Sep 17 00:00:00 2001 From: Yossi Cohen Date: Thu, 11 Feb 2021 10:29:22 +0000 Subject: [PATCH 038/110] Translated using Weblate (Hebrew) Currently translated at 24.3% (330 of 1353 strings) --- po/he/minetest.po | 780 +++++++++++++++++++++++++--------------------- 1 file changed, 432 insertions(+), 348 deletions(-) diff --git a/po/he/minetest.po b/po/he/minetest.po index 3e0ff411c..3cda5cb60 100644 --- a/po/he/minetest.po +++ b/po/he/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Hebrew (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2021-02-09 15:34+0000\n" -"Last-Translator: Omer I.S. \n" +"PO-Revision-Date: 2021-02-17 22:50+0000\n" +"Last-Translator: Yossi Cohen \n" "Language-Team: Hebrew \n" "Language: he\n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " "n % 10 == 0) ? 2 : 3));\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.5\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" -msgstr "קימה לתחייה" +msgstr "הזדמן" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "You died" @@ -125,7 +125,7 @@ msgstr "לא סופק תיאור משחק." #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" -msgstr "אין תלויות מחייבות" +msgstr "ללא תלויות קשות" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." @@ -137,7 +137,7 @@ msgstr "אין תלויות רשות" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Optional dependencies:" -msgstr "תלויות רשות:" +msgstr "תלויות אופציונאליות:" #: builtin/mainmenu/dlg_config_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp @@ -505,7 +505,7 @@ msgstr "הסכמה" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" -msgstr "שינוי שם ערכת המודים:" +msgstr "שנה את שם חבילת המודים:" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "" @@ -529,7 +529,7 @@ msgstr "חזור לדף ההגדרות >" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Browse" -msgstr "עיון" +msgstr "דפדף" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Disabled" @@ -561,11 +561,11 @@ msgstr "התמדה" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid integer." -msgstr "נא להזין מספר שלם תקין." +msgstr "הכנס מספר שלם חוקי." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid number." -msgstr "נא להזין מספר תקין." +msgstr "הכנס מספר חוקי." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Restore Default" @@ -573,7 +573,7 @@ msgstr "שחזור לברירת המחדל" #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Scale" -msgstr "" +msgstr "קנה מידה" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Search" @@ -605,7 +605,7 @@ msgstr "X" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X spread" -msgstr "" +msgstr "מרווחיות X" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y" @@ -613,7 +613,7 @@ msgstr "Y" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y spread" -msgstr "" +msgstr "מרווחיות Y" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z" @@ -621,7 +621,7 @@ msgstr "Z" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z spread" -msgstr "" +msgstr "מרווחיות Z" #. ~ "absvalue" is a noise parameter flag. #. It is short for "absolute value". @@ -629,14 +629,14 @@ msgstr "" #. main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "absvalue" -msgstr "" +msgstr "ערך מוחלט" #. ~ "defaults" is a noise parameter flag. #. It describes the default processing options #. for noise settings in main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "defaults" -msgstr "" +msgstr "ברירת מחדל" #. ~ "eased" is a noise parameter flag. #. It is used to make the map smoother and @@ -644,7 +644,7 @@ msgstr "" #. main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "eased" -msgstr "" +msgstr "החלקת ערכים" #: builtin/mainmenu/pkgmgr.lua msgid "$1 (Enabled)" @@ -656,19 +656,19 @@ msgstr "$1 מודים" #: builtin/mainmenu/pkgmgr.lua msgid "Failed to install $1 to $2" -msgstr "" +msgstr "התקנת $1 אל $2 נכשלה" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find real mod name for: $1" -msgstr "" +msgstr "התקנת מוד: לא ניתן למצוא את שם המוד האמיתי עבור: $1" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find suitable folder name for modpack $1" -msgstr "" +msgstr "התקנת מוד: לא ניתן למצוא שם תיקייה מתאים עבור חבילת המודים $1" #: builtin/mainmenu/pkgmgr.lua msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" +msgstr "התקנה: סוג קובץ לא נתמך \"$1\" או שהארכיב פגום" #: builtin/mainmenu/pkgmgr.lua msgid "Install: file: \"$1\"" @@ -676,23 +676,23 @@ msgstr "התקנה: מקובץ: \"$1\"" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" -msgstr "" +msgstr "לא ניתן למצוא מוד/חבילת מודים תקינה" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a $1 as a texture pack" -msgstr "" +msgstr "לא ניתן להתקין $1 כחבילת טקסטורות" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a game as a $1" -msgstr "" +msgstr "לא ניתן להתקין משחק בתור $1" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a mod as a $1" -msgstr "" +msgstr "לא ניתן להתקין מוד בתור $1" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a modpack as a $1" -msgstr "" +msgstr "לא ניתן להתקין חבילת מודים בתור $1" #: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp msgid "Loading..." @@ -733,7 +733,7 @@ msgstr "אין תיאור חבילה זמין" #: builtin/mainmenu/tab_content.lua msgid "Rename" -msgstr "שינוי שם" +msgstr "שנה שם" #: builtin/mainmenu/tab_content.lua msgid "Uninstall Package" @@ -756,15 +756,16 @@ msgid "Credits" msgstr "תודות" #: builtin/mainmenu/tab_credits.lua -#, fuzzy msgid "Open User Data Directory" -msgstr "נא לבחור תיקיה" +msgstr "נא לבחור תיקיית משתמש" #: builtin/mainmenu/tab_credits.lua msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"פותח את התיקייה המכילה עולמות, משחקים, מודים,\n" +"וחבילות טקסטורה במנהל קבצים." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -772,15 +773,15 @@ msgstr "תורמים קודמים" #: builtin/mainmenu/tab_credits.lua msgid "Previous Core Developers" -msgstr "מפתחים עיקריים קודמים" +msgstr "מפתחי ליבה קודמים" #: builtin/mainmenu/tab_local.lua msgid "Announce Server" -msgstr "הכרזה על השרת" +msgstr "הכרז על השרת" #: builtin/mainmenu/tab_local.lua msgid "Bind Address" -msgstr "" +msgstr "הצמד כתובת" #: builtin/mainmenu/tab_local.lua msgid "Creative Mode" @@ -800,11 +801,11 @@ msgstr "אכסון שרת" #: builtin/mainmenu/tab_local.lua msgid "Install games from ContentDB" -msgstr "" +msgstr "התקנת משחק מContentDB" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "שם" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -836,7 +837,7 @@ msgstr "נא לבחור עולם:" #: builtin/mainmenu/tab_local.lua msgid "Server Port" -msgstr "" +msgstr "פורט לשרת" #: builtin/mainmenu/tab_local.lua msgid "Start Game" @@ -856,15 +857,15 @@ msgstr "מצב יצירתי" #: builtin/mainmenu/tab_online.lua msgid "Damage enabled" -msgstr "החבלה מאופשרת" +msgstr "נזק מופעל" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" -msgstr "" +msgstr "מחק מועדף" #: builtin/mainmenu/tab_online.lua msgid "Favorite" -msgstr "" +msgstr "מועדף" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -876,7 +877,7 @@ msgstr "שם/סיסמה" #: builtin/mainmenu/tab_online.lua msgid "Ping" -msgstr "" +msgstr "פינג" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua @@ -885,19 +886,19 @@ msgstr "לאפשר קרבות" #: builtin/mainmenu/tab_settings.lua msgid "2x" -msgstr "" +msgstr "x2" #: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" -msgstr "" +msgstr "עננים תלת מימדיים" #: builtin/mainmenu/tab_settings.lua msgid "4x" -msgstr "" +msgstr "x4" #: builtin/mainmenu/tab_settings.lua msgid "8x" -msgstr "" +msgstr "x8" #: builtin/mainmenu/tab_settings.lua msgid "All Settings" @@ -905,64 +906,63 @@ msgstr "כל ההגדרות" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" -msgstr "" +msgstr "החלקת קצוות (AA):" #: builtin/mainmenu/tab_settings.lua msgid "Autosave Screen Size" -msgstr "" +msgstr "שמור אוטומטית גודל מסך" #: builtin/mainmenu/tab_settings.lua msgid "Bilinear Filter" -msgstr "" +msgstr "פילטר בילינארי" #: builtin/mainmenu/tab_settings.lua src/client/game.cpp msgid "Change Keys" -msgstr "" +msgstr "שנה מקשים" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Connected Glass" -msgstr "התחבר" +msgstr "זכוכיות מחוברות" #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" -msgstr "" +msgstr "עלים מגניבים" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" -msgstr "" +msgstr "מיפמאפ" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap + Aniso. Filter" -msgstr "" +msgstr "מיפמאפ + פילטר אניסוטרופי" #: builtin/mainmenu/tab_settings.lua msgid "No Filter" -msgstr "" +msgstr "בלי פילטר" #: builtin/mainmenu/tab_settings.lua msgid "No Mipmap" -msgstr "" +msgstr "בלי מיפמאפ" #: builtin/mainmenu/tab_settings.lua msgid "Node Highlighting" -msgstr "" +msgstr "הבלטת קוביות" #: builtin/mainmenu/tab_settings.lua msgid "Node Outlining" -msgstr "" +msgstr "הדגשת מסגרת קוביות" #: builtin/mainmenu/tab_settings.lua msgid "None" -msgstr "" +msgstr "ללא" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Leaves" -msgstr "" +msgstr "עלים אטומים" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Water" -msgstr "" +msgstr "מים אטומים לאור" #: builtin/mainmenu/tab_settings.lua msgid "Particles" @@ -970,7 +970,7 @@ msgstr "חלקיקים" #: builtin/mainmenu/tab_settings.lua msgid "Screen:" -msgstr "" +msgstr "מסך:" #: builtin/mainmenu/tab_settings.lua msgid "Settings" @@ -978,103 +978,103 @@ msgstr "הגדרות" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Shaders" -msgstr "" +msgstr "שיידרים" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (experimental)" -msgstr "" +msgstr "שיידרים (נסיוני)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" -msgstr "" +msgstr "שיידרים (לא זמינים)" #: builtin/mainmenu/tab_settings.lua msgid "Simple Leaves" -msgstr "" +msgstr "עלים פשוטים" #: builtin/mainmenu/tab_settings.lua msgid "Smooth Lighting" -msgstr "" +msgstr "החלקת תאורה" #: builtin/mainmenu/tab_settings.lua msgid "Texturing:" -msgstr "" +msgstr "טקסטורות:" #: builtin/mainmenu/tab_settings.lua msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" +msgstr "כדי לאפשר שיידרים יש להשתמש בדרייבר של OpenGL." #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" -msgstr "" +msgstr "מיפוי גוונים" #: builtin/mainmenu/tab_settings.lua msgid "Touchthreshold: (px)" -msgstr "" +msgstr "סף נגיעה: (px)" #: builtin/mainmenu/tab_settings.lua msgid "Trilinear Filter" -msgstr "" +msgstr "פילטר תלת לינארי" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" -msgstr "" +msgstr "עלים מתנופפים" #: builtin/mainmenu/tab_settings.lua msgid "Waving Liquids" -msgstr "" +msgstr "נוזלים עם גלים" #: builtin/mainmenu/tab_settings.lua msgid "Waving Plants" -msgstr "" +msgstr "צמחים מתנוענעים" #: src/client/client.cpp msgid "Connection timed out." -msgstr "" +msgstr "זמן המתנה לחיבור אזל." #: src/client/client.cpp msgid "Done!" -msgstr "" +msgstr "הסתיים!" #: src/client/client.cpp msgid "Initializing nodes" -msgstr "" +msgstr "מאתחל קוביות" #: src/client/client.cpp msgid "Initializing nodes..." -msgstr "" +msgstr "מאתחל קוביות..." #: src/client/client.cpp msgid "Loading textures..." -msgstr "" +msgstr "טוען טקסטורות..." #: src/client/client.cpp msgid "Rebuilding shaders..." -msgstr "" +msgstr "בונה מחדש שיידרים..." #: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" -msgstr "" +msgstr "בעיה בחיבור (נגמר זמן ההמתנה?)" #: src/client/clientlauncher.cpp msgid "Could not find or load game \"" -msgstr "" +msgstr "לא מצליח למצוא או לטעון משחק \"" #: src/client/clientlauncher.cpp msgid "Invalid gamespec." -msgstr "" +msgstr "הגדרת משחק לא תקינה." #: src/client/clientlauncher.cpp msgid "Main Menu" -msgstr "" +msgstr "תפריט ראשי" #: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." -msgstr "" +msgstr "לא נבחר עולם ולא נתנה כתובת. לא עושה כלום." #: src/client/clientlauncher.cpp msgid "Player name too long." -msgstr "" +msgstr "שם השחקן ארוך מידי." #: src/client/clientlauncher.cpp msgid "Please choose a name!" @@ -1082,11 +1082,11 @@ msgstr "נא לבחור שם!" #: src/client/clientlauncher.cpp msgid "Provided password file failed to open: " -msgstr "" +msgstr "הסיסמה שניתנה לא פתחה: " #: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " -msgstr "" +msgstr "נתיב העולם שניתן לא קיים: " #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string. Put either "no" or "yes" @@ -1105,6 +1105,8 @@ msgid "" "\n" "Check debug.txt for details." msgstr "" +"\n" +"בדוק את debug.txt לפרטים נוספים." #: src/client/game.cpp msgid "- Address: " @@ -1120,7 +1122,7 @@ msgstr "- חבלה: " #: src/client/game.cpp msgid "- Mode: " -msgstr "" +msgstr "- מצב: " #: src/client/game.cpp msgid "- Port: " @@ -1133,51 +1135,51 @@ msgstr "- ציבורי: " #. ~ PvP = Player versus Player #: src/client/game.cpp msgid "- PvP: " -msgstr "" +msgstr "- קרב: " #: src/client/game.cpp msgid "- Server Name: " -msgstr "" +msgstr "- שם שרת: " #: src/client/game.cpp msgid "Automatic forward disabled" -msgstr "" +msgstr "התקדמות אוטומטית קדימה מבוטלת" #: src/client/game.cpp msgid "Automatic forward enabled" -msgstr "" +msgstr "תנועה קדימה אוטומטית מופעל" #: src/client/game.cpp msgid "Camera update disabled" -msgstr "" +msgstr "עדכון מצלמה מבוטל" #: src/client/game.cpp msgid "Camera update enabled" -msgstr "" +msgstr "עדכון מצלמה מופעל" #: src/client/game.cpp msgid "Change Password" -msgstr "" +msgstr "שנה סיסמה" #: src/client/game.cpp msgid "Cinematic mode disabled" -msgstr "" +msgstr "מצב קולנועי מבוטל" #: src/client/game.cpp msgid "Cinematic mode enabled" -msgstr "" +msgstr "מצב קולנועי מופעל" #: src/client/game.cpp msgid "Client side scripting is disabled" -msgstr "" +msgstr "סקריפטים בצד לקוח מבוטלים" #: src/client/game.cpp msgid "Connecting to server..." -msgstr "" +msgstr "מתחבר לשרת..." #: src/client/game.cpp msgid "Continue" -msgstr "" +msgstr "המשך" #: src/client/game.cpp #, c-format @@ -1214,23 +1216,23 @@ msgstr "" #: src/client/game.cpp msgid "Creating client..." -msgstr "" +msgstr "יוצר לקוח..." #: src/client/game.cpp msgid "Creating server..." -msgstr "" +msgstr "יוצר שרת..." #: src/client/game.cpp msgid "Debug info and profiler graph hidden" -msgstr "" +msgstr "מידע דיבאג וגרף פרופיילר מוסתר" #: src/client/game.cpp msgid "Debug info shown" -msgstr "" +msgstr "מידע דיבאג מוצג" #: src/client/game.cpp msgid "Debug info, profiler graph, and wireframe hidden" -msgstr "" +msgstr "מידע דיבאג, גרף פרופיילר, ומצב שלד מוסתר" #: src/client/game.cpp msgid "" @@ -1247,18 +1249,30 @@ msgid "" "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" +"פקדי ברירת מחדל:\n" +"לא נראה תפריט:\n" +"- לחיצה בודדת: הפעלת כפתור\n" +"- הקשה כפולה: מקום / שימוש\n" +"- החלק אצבע: הביט סביב\n" +"תפריט / מלאי גלוי:\n" +"- לחיצה כפולה (בחוץ):\n" +"--> סגור\n" +"- מחסנית מגע, חריץ מגע:\n" +"--> הזז מחסנית\n" +"- גע וגרור, הקש על האצבע השנייה\n" +"--> מקם פריט יחיד לחריץ\n" #: src/client/game.cpp msgid "Disabled unlimited viewing range" -msgstr "" +msgstr "ביטול טווח ראיה בלתי מוגבל" #: src/client/game.cpp msgid "Enabled unlimited viewing range" -msgstr "" +msgstr "הפעלת טווח ראיה בלתי מוגבל" #: src/client/game.cpp msgid "Exit to Menu" -msgstr "" +msgstr "יציאה לתפריט" #: src/client/game.cpp msgid "Exit to OS" @@ -1266,40 +1280,39 @@ msgstr "יציאה למערכת ההפעלה" #: src/client/game.cpp msgid "Fast mode disabled" -msgstr "" +msgstr "מצב מהיר מבוטל" #: src/client/game.cpp msgid "Fast mode enabled" -msgstr "" +msgstr "מצב מהיר מופעל" #: src/client/game.cpp msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "" +msgstr "מצב מהיר מופעל (שים לב, אין הרשאת 'fast')" #: src/client/game.cpp msgid "Fly mode disabled" -msgstr "" +msgstr "מצב תעופה מבוטל" #: src/client/game.cpp msgid "Fly mode enabled" -msgstr "מצב התעופה הופעל" +msgstr "מצב תעופה הופעל" #: src/client/game.cpp msgid "Fly mode enabled (note: no 'fly' privilege)" -msgstr "" +msgstr "מצב תעופה מופעל (שים לב, אין הרשאת 'fly')" #: src/client/game.cpp msgid "Fog disabled" -msgstr "" +msgstr "ערפל מבוטל" #: src/client/game.cpp -#, fuzzy msgid "Fog enabled" -msgstr "מופעל" +msgstr "ערפל מופעל" #: src/client/game.cpp msgid "Game info:" -msgstr "" +msgstr "מידע על המשחק:" #: src/client/game.cpp msgid "Game paused" @@ -1307,75 +1320,75 @@ msgstr "המשחק הושהה" #: src/client/game.cpp msgid "Hosting server" -msgstr "" +msgstr "שרת מארח" #: src/client/game.cpp msgid "Item definitions..." -msgstr "" +msgstr "הגדרות פריט..." #: src/client/game.cpp msgid "KiB/s" -msgstr "" +msgstr "קילובייט/שניה" #: src/client/game.cpp msgid "Media..." -msgstr "" +msgstr "מדיה..." #: src/client/game.cpp msgid "MiB/s" -msgstr "" +msgstr "מגהבייט/שניה" #: src/client/game.cpp msgid "Minimap currently disabled by game or mod" -msgstr "" +msgstr "מיפמאפ כרגע מבוטל ע\"י המשחק או המוד" #: src/client/game.cpp msgid "Noclip mode disabled" -msgstr "" +msgstr "מעבר דרך קירות מבוטל" #: src/client/game.cpp msgid "Noclip mode enabled" -msgstr "" +msgstr "מעבר דרך קירות מופעל" #: src/client/game.cpp msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "" +msgstr "מעבר דרך קירות מופעל (שים לב, אין הרשאת 'noclip')" #: src/client/game.cpp msgid "Node definitions..." -msgstr "" +msgstr "הגדרות קוביה..." #: src/client/game.cpp msgid "Off" -msgstr "" +msgstr "מכובה" #: src/client/game.cpp msgid "On" -msgstr "" +msgstr "דולק" #: src/client/game.cpp msgid "Pitch move mode disabled" -msgstr "" +msgstr "תנועה לכיוון מבט מכובה" #: src/client/game.cpp msgid "Pitch move mode enabled" -msgstr "" +msgstr "תנועה לכיוון מבט מופעל" #: src/client/game.cpp msgid "Profiler graph shown" -msgstr "" +msgstr "גרף פרופיילר מוצג" #: src/client/game.cpp msgid "Remote server" -msgstr "" +msgstr "שרת מרוחק" #: src/client/game.cpp msgid "Resolving address..." -msgstr "" +msgstr "מפענח כתובת..." #: src/client/game.cpp msgid "Shutting down..." -msgstr "" +msgstr "מכבה..." #: src/client/game.cpp msgid "Singleplayer" @@ -1383,149 +1396,148 @@ msgstr "שחקן יחיד" #: src/client/game.cpp msgid "Sound Volume" -msgstr "" +msgstr "ווליום שמע" #: src/client/game.cpp msgid "Sound muted" -msgstr "" +msgstr "שמע מושתק" #: src/client/game.cpp msgid "Sound system is disabled" -msgstr "" +msgstr "מערכת שמע לא מופעלת" #: src/client/game.cpp msgid "Sound system is not supported on this build" -msgstr "" +msgstr "מערכת שמע לא נתמכת בבניה הנוכחית" #: src/client/game.cpp msgid "Sound unmuted" -msgstr "" +msgstr "מערכת שמע מופעלת" #: src/client/game.cpp #, c-format msgid "Viewing range changed to %d" -msgstr "" +msgstr "טווח ראיה השתנה ל %d" #: src/client/game.cpp #, c-format msgid "Viewing range is at maximum: %d" -msgstr "" +msgstr "טווח ראיה הגיע למקסימום: %d" #: src/client/game.cpp #, c-format msgid "Viewing range is at minimum: %d" -msgstr "" +msgstr "טווח ראיה הגיע למינימום: %d" #: src/client/game.cpp #, c-format msgid "Volume changed to %d%%" -msgstr "" +msgstr "עוצמת שמע שונתה ל %d%%" #: src/client/game.cpp msgid "Wireframe shown" -msgstr "" +msgstr "מסגרת שלדית מוצגת" #: src/client/game.cpp msgid "Zoom currently disabled by game or mod" -msgstr "" +msgstr "זום גרגע מבוטל על-ידי המשחק או המוד" #: src/client/game.cpp msgid "ok" -msgstr "" +msgstr "אוקיי" #: src/client/gameui.cpp msgid "Chat hidden" -msgstr "" +msgstr "צ'אט מוסתר" #: src/client/gameui.cpp msgid "Chat shown" -msgstr "" +msgstr "צ'אט מוצג" #: src/client/gameui.cpp msgid "HUD hidden" -msgstr "" +msgstr "מידע-על-מסך מוסתר" #: src/client/gameui.cpp msgid "HUD shown" -msgstr "" +msgstr "מידע-על-מסך מוצג" #: src/client/gameui.cpp msgid "Profiler hidden" -msgstr "" +msgstr "פרופיילר מוסתר" #: src/client/gameui.cpp #, c-format msgid "Profiler shown (page %d of %d)" -msgstr "" +msgstr "פרופיילר מוצג (עמוד %d מתוך %d)" #: src/client/keycode.cpp msgid "Apps" -msgstr "" +msgstr "אפליקציות" #: src/client/keycode.cpp msgid "Backspace" -msgstr "" +msgstr "Backspace" #: src/client/keycode.cpp msgid "Caps Lock" -msgstr "" +msgstr "Caps Lock" #: src/client/keycode.cpp msgid "Clear" -msgstr "" +msgstr "נקה" #: src/client/keycode.cpp msgid "Control" -msgstr "" +msgstr "קונטרול" #: src/client/keycode.cpp msgid "Down" -msgstr "" +msgstr "למטה" #: src/client/keycode.cpp msgid "End" -msgstr "" +msgstr "End" #: src/client/keycode.cpp msgid "Erase EOF" -msgstr "" +msgstr "מחק EOF" #: src/client/keycode.cpp msgid "Execute" -msgstr "" +msgstr "בצע" #: src/client/keycode.cpp msgid "Help" -msgstr "" +msgstr "עזרה" #: src/client/keycode.cpp msgid "Home" -msgstr "" +msgstr "Home" #: src/client/keycode.cpp -#, fuzzy msgid "IME Accept" -msgstr "קבל" +msgstr "קבל IME" #: src/client/keycode.cpp msgid "IME Convert" -msgstr "" +msgstr "המרת IME" #: src/client/keycode.cpp msgid "IME Escape" -msgstr "" +msgstr "יציאת IME" #: src/client/keycode.cpp msgid "IME Mode Change" -msgstr "" +msgstr "שינוי מצב IME" #: src/client/keycode.cpp msgid "IME Nonconvert" -msgstr "" +msgstr "IME ללא המרה" #: src/client/keycode.cpp msgid "Insert" -msgstr "" +msgstr "Insert" #: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp msgid "Left" @@ -1541,7 +1553,7 @@ msgstr "מקש Control השמאלי" #: src/client/keycode.cpp msgid "Left Menu" -msgstr "" +msgstr "תפריט שמאלי" #: src/client/keycode.cpp msgid "Left Shift" @@ -1554,91 +1566,91 @@ msgstr "מקש Windows השמאלי" #. ~ Key name, common on Windows keyboards #: src/client/keycode.cpp msgid "Menu" -msgstr "" +msgstr "תפריט" #: src/client/keycode.cpp msgid "Middle Button" -msgstr "" +msgstr "כפתור אמצעי" #: src/client/keycode.cpp msgid "Num Lock" -msgstr "" +msgstr "נעילה נומרית" #: src/client/keycode.cpp msgid "Numpad *" -msgstr "" +msgstr "מקלדת נומרית *" #: src/client/keycode.cpp msgid "Numpad +" -msgstr "" +msgstr "מקלדת נומרית +" #: src/client/keycode.cpp msgid "Numpad -" -msgstr "" +msgstr "מקלדת נומרית -" #: src/client/keycode.cpp msgid "Numpad ." -msgstr "" +msgstr "מקלדת נומרית ." #: src/client/keycode.cpp msgid "Numpad /" -msgstr "" +msgstr "מקלדת נומרית /" #: src/client/keycode.cpp msgid "Numpad 0" -msgstr "" +msgstr "מקלדת נומרית 0" #: src/client/keycode.cpp msgid "Numpad 1" -msgstr "" +msgstr "מקלדת נומרית 1" #: src/client/keycode.cpp msgid "Numpad 2" -msgstr "" +msgstr "מקלדת נומרית 2" #: src/client/keycode.cpp msgid "Numpad 3" -msgstr "" +msgstr "מקלדת נומרית 3" #: src/client/keycode.cpp msgid "Numpad 4" -msgstr "" +msgstr "מקלדת נומרית 4" #: src/client/keycode.cpp msgid "Numpad 5" -msgstr "" +msgstr "מקלדת נומרית 5" #: src/client/keycode.cpp msgid "Numpad 6" -msgstr "" +msgstr "מקלדת נומרית 6" #: src/client/keycode.cpp msgid "Numpad 7" -msgstr "" +msgstr "מקלדת נומרית 7" #: src/client/keycode.cpp msgid "Numpad 8" -msgstr "" +msgstr "מקלדת נומרית 8" #: src/client/keycode.cpp msgid "Numpad 9" -msgstr "" +msgstr "מקלדת נומרית 9" #: src/client/keycode.cpp msgid "OEM Clear" -msgstr "" +msgstr "ניקוי OME" #: src/client/keycode.cpp msgid "Page down" -msgstr "" +msgstr "Page down" #: src/client/keycode.cpp msgid "Page up" -msgstr "" +msgstr "Page up" #: src/client/keycode.cpp msgid "Pause" -msgstr "" +msgstr "Pause" #: src/client/keycode.cpp msgid "Play" @@ -1647,11 +1659,11 @@ msgstr "שחק" #. ~ "Print screen" key #: src/client/keycode.cpp msgid "Print" -msgstr "" +msgstr "PrintScreen" #: src/client/keycode.cpp msgid "Return" -msgstr "" +msgstr "Enter" #: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp msgid "Right" @@ -1667,7 +1679,7 @@ msgstr "מקש Control הימני" #: src/client/keycode.cpp msgid "Right Menu" -msgstr "" +msgstr "תפריט ימני" #: src/client/keycode.cpp msgid "Right Shift" @@ -1679,74 +1691,74 @@ msgstr "מקש Windows הימני" #: src/client/keycode.cpp msgid "Scroll Lock" -msgstr "" +msgstr "Scroll Lock" #. ~ Key name #: src/client/keycode.cpp msgid "Select" -msgstr "" +msgstr "Select" #: src/client/keycode.cpp msgid "Shift" -msgstr "" +msgstr "Shift" #: src/client/keycode.cpp msgid "Sleep" -msgstr "" +msgstr "שינה" #: src/client/keycode.cpp msgid "Snapshot" -msgstr "" +msgstr "צילום רגעי" #: src/client/keycode.cpp msgid "Space" -msgstr "" +msgstr "רווח" #: src/client/keycode.cpp msgid "Tab" -msgstr "" +msgstr "Tab" #: src/client/keycode.cpp msgid "Up" -msgstr "" +msgstr "למעלה" #: src/client/keycode.cpp msgid "X Button 1" -msgstr "" +msgstr "X כפתור 1" #: src/client/keycode.cpp msgid "X Button 2" -msgstr "" +msgstr "X כפתור 2" #: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp msgid "Zoom" -msgstr "" +msgstr "זום" #: src/client/minimap.cpp msgid "Minimap hidden" -msgstr "" +msgstr "מפה קטנה מוסתרת" #: src/client/minimap.cpp #, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "" +msgstr "מפה קטנה במצב ראדר, זום x %d" #: src/client/minimap.cpp #, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "" +msgstr "מפה קטנה במצב שטח, זום x %d" #: src/client/minimap.cpp msgid "Minimap in texture mode" -msgstr "" +msgstr "מפה קטנה במצב טקסטורה" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" -msgstr "" +msgstr "סיסמאות לא תואמות!" #: src/gui/guiConfirmRegistration.cpp msgid "Register and Join" -msgstr "" +msgstr "הרשם והצטרף" #: src/gui/guiConfirmRegistration.cpp #, c-format @@ -1757,18 +1769,22 @@ msgid "" "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" +"אתה עומד להצטרף לשרת זה עם השם \"%s\" בפעם הראשונה.\n" +"אם תמשיך, ייווצר חשבון חדש באמצעות אישוריך בשרת זה.\n" +"אנא הקלד מחדש את הסיסמה שלך ולחץ על 'הירשם והצטרף' כדי לאשר את יצירת החשבון, " +"או לחץ על 'ביטול' כדי לבטל." #: src/gui/guiFormSpecMenu.cpp msgid "Proceed" -msgstr "" +msgstr "להמשיך" #: src/gui/guiKeyChangeMenu.cpp msgid "\"Special\" = climb down" -msgstr "" +msgstr "\"מיוחד\" = טפס למטה" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" -msgstr "" +msgstr "קדימה אוטומטי" #: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Automatic jumping" @@ -1780,27 +1796,27 @@ msgstr "אחורה" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" -msgstr "" +msgstr "שנה מצלמה" #: src/gui/guiKeyChangeMenu.cpp msgid "Chat" -msgstr "" +msgstr "צ'אט" #: src/gui/guiKeyChangeMenu.cpp msgid "Command" -msgstr "" +msgstr "פקודה" #: src/gui/guiKeyChangeMenu.cpp msgid "Console" -msgstr "" +msgstr "קונסולה" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. range" -msgstr "" +msgstr "הקטן טווח" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. volume" -msgstr "" +msgstr "הנמך ווליום" #: src/gui/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" @@ -1808,7 +1824,7 @@ msgstr "לחיצה כפולה על \"קפיצה\" כדי לכבות או להד #: src/gui/guiKeyChangeMenu.cpp msgid "Drop" -msgstr "" +msgstr "הפל" #: src/gui/guiKeyChangeMenu.cpp msgid "Forward" @@ -1816,15 +1832,15 @@ msgstr "קדימה" #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. range" -msgstr "" +msgstr "הגדל טווח" #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. volume" -msgstr "" +msgstr "הגבר ווליום" #: src/gui/guiKeyChangeMenu.cpp msgid "Inventory" -msgstr "" +msgstr "תיק חפצים" #: src/gui/guiKeyChangeMenu.cpp msgid "Jump" @@ -1832,113 +1848,113 @@ msgstr "קפיצה" #: src/gui/guiKeyChangeMenu.cpp msgid "Key already in use" -msgstr "" +msgstr "מקש כבר בשימוש" #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "" +msgstr "קישור מקשים (אם התפריט מתקלקל, הסר דברים מminetest.conf)" #: src/gui/guiKeyChangeMenu.cpp msgid "Local command" -msgstr "" +msgstr "פקודה מקומית" #: src/gui/guiKeyChangeMenu.cpp msgid "Mute" -msgstr "" +msgstr "השתק" #: src/gui/guiKeyChangeMenu.cpp msgid "Next item" -msgstr "" +msgstr "הפריט הבא" #: src/gui/guiKeyChangeMenu.cpp msgid "Prev. item" -msgstr "" +msgstr "הפריט הקודם" #: src/gui/guiKeyChangeMenu.cpp msgid "Range select" -msgstr "" +msgstr "בחר טווח" #: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Screenshot" -msgstr "" +msgstr "צילום מסך" #: src/gui/guiKeyChangeMenu.cpp msgid "Sneak" -msgstr "" +msgstr "התכופף" #: src/gui/guiKeyChangeMenu.cpp msgid "Special" -msgstr "" +msgstr "מיוחד" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle HUD" -msgstr "" +msgstr "מתג מידע על מסך" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle chat log" -msgstr "" +msgstr "מתג צא'ט לוג" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fast" -msgstr "" +msgstr "מתג מצב מהיר" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fly" -msgstr "" +msgstr "מתג תעופה" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fog" -msgstr "" +msgstr "מתג ערפל" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle minimap" -msgstr "" +msgstr "מתג מפה קטנה" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle noclip" -msgstr "" +msgstr "מתג מעבר דרך קירות" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle pitchmove" -msgstr "" +msgstr "מתג תנועה לכיוון מבט" #: src/gui/guiKeyChangeMenu.cpp msgid "press key" -msgstr "" +msgstr "לחץ מקש" #: src/gui/guiPasswordChange.cpp msgid "Change" -msgstr "" +msgstr "שנה" #: src/gui/guiPasswordChange.cpp msgid "Confirm Password" -msgstr "" +msgstr "אשר סיסמה" #: src/gui/guiPasswordChange.cpp msgid "New Password" -msgstr "" +msgstr "סיסמה חדשה" #: src/gui/guiPasswordChange.cpp msgid "Old Password" -msgstr "" +msgstr "סיסמה ישנה" #: src/gui/guiVolumeChange.cpp msgid "Exit" -msgstr "" +msgstr "יציאה" #: src/gui/guiVolumeChange.cpp msgid "Muted" -msgstr "" +msgstr "מושתק" #: src/gui/guiVolumeChange.cpp msgid "Sound Volume: " -msgstr "" +msgstr "עוצמת שמע: " #. ~ Imperative, as in "Enter/type in text". #. Don't forget the space. #: src/gui/modalMenu.cpp msgid "Enter " -msgstr "" +msgstr "הכנס " #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string which needs to contain the translation's @@ -1952,6 +1968,8 @@ msgid "" "(Android) Fixes the position of virtual joystick.\n" "If disabled, virtual joystick will center to first-touch's position." msgstr "" +"(Android) מתקן את המיקום של הג'ויסטיק הווירטואלי.\n" +"אם מושבת, הג'ויסטיק הווירטואלי יעמוד במיקום המגע הראשון." #: src/settings_translation_file.cpp msgid "" @@ -1959,6 +1977,9 @@ msgid "" "If enabled, virtual joystick will also tap \"aux\" button when out of main " "circle." msgstr "" +"(Android) השתמש בג'ויסטיק וירטואלי כדי להפעיל את כפתור \"aux\".\n" +"אם הוא מופעל, הג'ויסטיק הווירטואלי ילחץ גם על כפתור \"aux\" כשהוא מחוץ למעגל " +"הראשי." #: src/settings_translation_file.cpp msgid "" @@ -1971,6 +1992,14 @@ msgid "" "situations.\n" "Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." msgstr "" +"(X, Y, Z) היסט של פרקטל ממרכז עולמי ביחידות 'סקאלה'.\n" +"ניתן להשתמש בה כדי להעביר נקודה רצויה ל (0, 0) כדי ליצור\n" +"נקודת הופעה מתאימה, או כדי לאפשר 'התקרבות' לנקודה רצויה\n" +"על ידי הגדלת 'סקאלה'.\n" +"ברירת המחדל מכוונת לנקודת הופעה מתאימה למנדלברוט\n" +"קבוצות עם פרמטרי ברירת מחדל, יתכן שיהיה צורך לשנות זאת\n" +"מצבים.\n" +"טווח בערך -2 עד 2. הכפל באמצעות 'קנה מידה' עבור קיזוז בצמתים." #: src/settings_translation_file.cpp msgid "" @@ -1982,56 +2011,65 @@ msgid "" "Default is for a vertically-squashed shape suitable for\n" "an island, set all 3 numbers equal for the raw shape." msgstr "" +"(X, Y, Z) סקאלה של פרקטל בצמתים.\n" +"גודל הפרקטל בפועל יהיה גדול פי 2 עד 3.\n" +"ניתן להפוך את המספרים הללו לגדולים מאוד, כך הפרקטל\n" +"לא צריך להשתלב בעולם.\n" +"הגדל את אלה ל\"התקרב \"לפרטי הפרקטל.\n" +"ברירת המחדל היא לצורה מעוכה אנכית המתאימה ל\n" +"אי, קבע את כל 3 המספרים שווים לצורה הגולמית." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of ridged mountains." -msgstr "" +msgstr "רעש דו-ממדי השולט על צורתם / גודל ההרים המחורצים." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of rolling hills." -msgstr "" +msgstr "רעש דו-ממדי השולט על צורתם / גודל הגבעות המתונות." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of step mountains." -msgstr "" +msgstr "רעש דו-ממדי השולט על צורתם / גודל ההרים הנישאים." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of ridged mountain ranges." -msgstr "" +msgstr "רעש דו-ממדי השולט על תדירות/ גודל רכסי ההרים." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of rolling hills." -msgstr "" +msgstr "רעש דו-ממדי השולט על תדירות/גודל הגבעות המתונות." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of step mountain ranges." -msgstr "" +msgstr "רעש דו-ממדי השולט על תדירות/גודל רכסי ההרים." #: src/settings_translation_file.cpp msgid "2D noise that locates the river valleys and channels." -msgstr "" +msgstr "רעש דו-ממדי שמאתר את עמקי הנהרות ותעלותיהם." #: src/settings_translation_file.cpp msgid "3D clouds" -msgstr "" +msgstr "עננים תלת מימדיים" #: src/settings_translation_file.cpp msgid "3D mode" -msgstr "" +msgstr "מצב תלת מימדי" #: src/settings_translation_file.cpp msgid "3D mode parallax strength" -msgstr "" +msgstr "חוזק פרלקסה במצב תלת ממדי" #: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." -msgstr "" +msgstr "רעשי תלת מימד המגדירים מערות ענק." #: src/settings_translation_file.cpp msgid "" "3D noise defining mountain structure and height.\n" "Also defines structure of floatland mountain terrain." msgstr "" +"רעש תלת ממדי המגדיר את מבנה ההרים וגובהם.\n" +"מגדיר גם מבנה שטח הרים צפים." #: src/settings_translation_file.cpp msgid "" @@ -2040,22 +2078,27 @@ msgid "" "to be adjusted, as floatland tapering functions best when this noise has\n" "a value range of approximately -2.0 to 2.0." msgstr "" +"רעש תלת ממדי מגדיר מבנה של שטחי צף.\n" +"אם משתנה מברירת המחדל, ייתכן ש\"סקאלת\" הרעש (0.7 כברירת מחדל) זקוקה\n" +"להיות מותאמת, מכיוון שההתפשטות של שטחי צף מתפקדת בצורה הטובה ביותר כאשר יש " +"לרעש זה\n" +"טווח ערכים של כ -2.0 עד 2.0." #: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." -msgstr "" +msgstr "מבנה מגדיר רעש תלת ממדי של קירות קניון הנהר." #: src/settings_translation_file.cpp msgid "3D noise defining terrain." -msgstr "" +msgstr "רעש תלת ממדי המגדיר שטח." #: src/settings_translation_file.cpp msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." -msgstr "" +msgstr "רעש תלת ממדי להרים תלויים, צוקים וכו'בדרך כלל וריאציות קטנות." #: src/settings_translation_file.cpp msgid "3D noise that determines number of dungeons per mapchunk." -msgstr "" +msgstr "רעש תלת ממדי הקובע את מספר הצינוקים בנתח מפה." #: src/settings_translation_file.cpp msgid "" @@ -2070,56 +2113,68 @@ msgid "" "- pageflip: quadbuffer based 3d.\n" "Note that the interlaced mode requires shaders to be enabled." msgstr "" +"תמיכה בתלת מימד.\n" +"נתמך כרגע:\n" +"- ללא: אין פלט תלת-ממדי.\n" +"- אנאגליף: צבע ציאן / מגנטה 3d.\n" +"- interlaced: תמיכה במסך קיטוב מבוסס מוזר / שווה\n" +"- topbottom: מסך מפוצל למעלה / למטה.\n" +"- צדדי: פיצול מסך זה לצד זה.\n" +"- תצוגת רוחב: 3D עם עיניים צולבות\n" +"- pageflip: quadbuffer מבוסס 3d.\n" +"שים לב שמצב interlaced מחייב הפעלת shaders." #: src/settings_translation_file.cpp msgid "" "A chosen map seed for a new map, leave empty for random.\n" "Will be overridden when creating a new world in the main menu." msgstr "" +"זרע מפה שנבחר עבור מפה חדשה, השאר ריק לאקראי.\n" +"יבוטל בעת יצירת עולם חדש בתפריט הראשי." #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server crashes." -msgstr "" +msgstr "הודעה שתוצג בפני כל הלקוחות כאשר השרת קורס." #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server shuts down." -msgstr "" +msgstr "הודעה שתוצג בפני כל הלקוחות כאשר השרת יכבה." #: src/settings_translation_file.cpp msgid "ABM interval" -msgstr "" +msgstr "אינטרוול ABM" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "הקצאת זמן ABM" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" -msgstr "" +msgstr "מגבלה מוחלטת של בלוקים בתור שיופיעו" #: src/settings_translation_file.cpp msgid "Acceleration in air" -msgstr "" +msgstr "תאוצה באויר" #: src/settings_translation_file.cpp msgid "Acceleration of gravity, in nodes per second per second." -msgstr "" +msgstr "האצת כוח הכבידה, בקוביות לשנייה בריבוע." #: src/settings_translation_file.cpp msgid "Active Block Modifiers" -msgstr "" +msgstr "משניי בלוק פעיל" #: src/settings_translation_file.cpp msgid "Active block management interval" -msgstr "" +msgstr "אינטרוול ניהול בלוק פעיל" #: src/settings_translation_file.cpp msgid "Active block range" -msgstr "" +msgstr "טווח בלוק פעיל" #: src/settings_translation_file.cpp msgid "Active object send range" -msgstr "" +msgstr "טווח שליחת אובייקט פעיל" #: src/settings_translation_file.cpp msgid "" @@ -2127,16 +2182,19 @@ msgid "" "Leave this blank to start a local server.\n" "Note that the address field in the main menu overrides this setting." msgstr "" +"כתובת להתחברות אליה.\n" +"השאר את זה ריק כדי להפעיל שרת מקומי.\n" +"שים לב ששדה הכתובת בתפריט הראשי עוקף הגדרה זו." #: src/settings_translation_file.cpp msgid "Adds particles when digging a node." -msgstr "" +msgstr "הוסף חלקיקים כשחופרים בקוביה." #: src/settings_translation_file.cpp msgid "" "Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " "screens." -msgstr "" +msgstr "התאם את תצורת dpi למסך שלך (לא X11 / Android בלבד) למשל. למסכי 4k." #: src/settings_translation_file.cpp #, c-format @@ -2147,10 +2205,15 @@ msgid "" "Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" "to be sure) creates a solid floatland layer." msgstr "" +"מכוון את הצפיפות של שכבת אדמות צותף.\n" +"הגדל את הערך כדי להגדיל את הצפיפות. יכול להיות חיובי או שלילי.\n" +"ערך = 0.0: 50% מהנפח הוא שטח צף.\n" +"ערך = 2.0 (יכול להיות גבוה יותר בהתאם ל- 'mgv7_np_floatland', בדוק תמיד\n" +"כדי להיות בטוח) יוצר שכבת צף מוצקה." #: src/settings_translation_file.cpp msgid "Advanced" -msgstr "" +msgstr "מתקדם" #: src/settings_translation_file.cpp msgid "" @@ -2160,60 +2223,67 @@ msgid "" "This only has significant effect on daylight and artificial\n" "light, it has very little effect on natural night light." msgstr "" +"משנה את עקומת האור על ידי החלת 'תיקון גמא' עליה.\n" +"ערכים גבוהים הופכים את רמות האור האמצעיות והתחתונות לבהירות יותר.\n" +"הערך '1.0' משאיר את עקומת האור ללא שינוי.\n" +"יש לכך השפעה משמעותית רק על אור יום ומלאכותי\n" +"זה משפיע מעט מאוד על אור הלילה הטבעי." #: src/settings_translation_file.cpp msgid "Always fly and fast" -msgstr "" +msgstr "תמיד לעוף ומהר" #: src/settings_translation_file.cpp msgid "Ambient occlusion gamma" -msgstr "" +msgstr "גמא חסימה סביבתית" #: src/settings_translation_file.cpp msgid "Amount of messages a player may send per 10 seconds." -msgstr "" +msgstr "כמות ההודעות ששחקן עשוי לשלוח לכל 10 שניות." #: src/settings_translation_file.cpp msgid "Amplifies the valleys." -msgstr "" +msgstr "מגביר את העמקים." #: src/settings_translation_file.cpp msgid "Anisotropic filtering" -msgstr "" +msgstr "פילטר אנטיסטרופי" #: src/settings_translation_file.cpp msgid "Announce server" -msgstr "" +msgstr "הכרזת שרת" #: src/settings_translation_file.cpp msgid "Announce to this serverlist." -msgstr "" +msgstr "הכרז לרשימת השרתים." #: src/settings_translation_file.cpp msgid "Append item name" -msgstr "" +msgstr "הוסף שם פריט" #: src/settings_translation_file.cpp msgid "Append item name to tooltip." -msgstr "" +msgstr "הוסף את שם הפריט לטיפ הכלים." #: src/settings_translation_file.cpp msgid "Apple trees noise" -msgstr "" +msgstr "רעש עצי תפוחים" #: src/settings_translation_file.cpp msgid "Arm inertia" -msgstr "" +msgstr "אינרציה בזרוע" #: src/settings_translation_file.cpp msgid "" "Arm inertia, gives a more realistic movement of\n" "the arm when the camera moves." msgstr "" +"אינרציה בזרוע, נותנת תנועה מציאותית יותר של\n" +"הזרוע כשהמצלמה נעה." #: src/settings_translation_file.cpp msgid "Ask to reconnect after crash" -msgstr "" +msgstr "שאל האם להתחבר מחדש לאחר קריסה" #: src/settings_translation_file.cpp msgid "" @@ -2229,26 +2299,34 @@ msgid "" "optimization.\n" "Stated in mapblocks (16 nodes)." msgstr "" +"במרחק זה השרת יעשה אופטימיזציה לאילו בלוקים נשלחים\n" +"ללקוחות.\n" +"ערכים קטנים עשויים לשפר ביצועים רבות, על חשבון גלוי\n" +"עיבוד תקלות (חלק מהבלוקים לא יועברו מתחת למים ובמערות,\n" +"כמו גם לפעמים ביבשה).\n" +"הגדרת ערך זה יותר מ- max_block_send_distance מבטלת זאת\n" +"אופטימיזציה.\n" +"מצוין במפה (16 קוביות)." #: src/settings_translation_file.cpp msgid "Automatic forward key" -msgstr "" +msgstr "מקש התקדמות אוטומטית" #: src/settings_translation_file.cpp msgid "Automatically jump up single-node obstacles." -msgstr "" +msgstr "קפיצה אוטומטית של מכשולים בקוביה יחידה." #: src/settings_translation_file.cpp msgid "Automatically report to the serverlist." -msgstr "" +msgstr "דווח אוטומטית לרשימת השרתים." #: src/settings_translation_file.cpp msgid "Autosave screen size" -msgstr "" +msgstr "שמור אוטומטית גודל מסך" #: src/settings_translation_file.cpp msgid "Autoscaling mode" -msgstr "" +msgstr "מצב סקאלה אוטומטית (Autoscale)" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2256,75 +2334,75 @@ msgstr "מקש התזוזה אחורה" #: src/settings_translation_file.cpp msgid "Base ground level" -msgstr "" +msgstr "מפלס בסיס האדמה" #: src/settings_translation_file.cpp msgid "Base terrain height." -msgstr "" +msgstr "גובה השטח." #: src/settings_translation_file.cpp msgid "Basic" -msgstr "" +msgstr "בסיסי" #: src/settings_translation_file.cpp msgid "Basic privileges" -msgstr "" +msgstr "הרשאות בסיסיות" #: src/settings_translation_file.cpp msgid "Beach noise" -msgstr "" +msgstr "רעש חופים" #: src/settings_translation_file.cpp msgid "Beach noise threshold" -msgstr "" +msgstr "סף רעש חופים" #: src/settings_translation_file.cpp msgid "Bilinear filtering" -msgstr "" +msgstr "סינון בילינארי" #: src/settings_translation_file.cpp msgid "Bind address" -msgstr "" +msgstr "הצמד כתובת" #: src/settings_translation_file.cpp msgid "Biome API temperature and humidity noise parameters" -msgstr "" +msgstr "פרמטרי רעש טמפרטורה ולחות של Biome API" #: src/settings_translation_file.cpp msgid "Biome noise" -msgstr "" +msgstr "רעש Biome" #: src/settings_translation_file.cpp msgid "Bits per pixel (aka color depth) in fullscreen mode." -msgstr "" +msgstr "ביטים לפיקסל (עומק צבע) במצב מסך מלא." #: src/settings_translation_file.cpp msgid "Block send optimize distance" -msgstr "" +msgstr "אופטימיזצית שליחת בלוק" #: src/settings_translation_file.cpp msgid "Bold and italic font path" -msgstr "" +msgstr "נתיב גופן עבה/מוטה" #: src/settings_translation_file.cpp msgid "Bold and italic monospace font path" -msgstr "" +msgstr "נתיב גופן עם מרווח אחיד עבה/מוטה" #: src/settings_translation_file.cpp msgid "Bold font path" -msgstr "" +msgstr "נתיב גופן עבה" #: src/settings_translation_file.cpp msgid "Bold monospace font path" -msgstr "" +msgstr "נתיב גופן מרווח אחיד" #: src/settings_translation_file.cpp msgid "Build inside player" -msgstr "" +msgstr "בנה בתוך שחקן" #: src/settings_translation_file.cpp msgid "Builtin" -msgstr "" +msgstr "בילדאין" #: src/settings_translation_file.cpp msgid "" @@ -2333,120 +2411,126 @@ msgid "" "Increasing can reduce artifacting on weaker GPUs.\n" "0.1 = Default, 0.25 = Good value for weaker tablets." msgstr "" +"מרחק מצלמה 'קרוב לקיר' בקוביות, בין 0 ל -0.25\n" +"עובד רק בפלטפורמות GLES. רוב המשתמשים לא יצטרכו לשנות זאת.\n" +"הגדלה יכולה להפחית חפצים על גרפי GPU חלשים יותר.\n" +"0.1 = ברירת מחדל, 0.25 = ערך טוב לטאבלטים חלשים יותר." #: src/settings_translation_file.cpp msgid "Camera smoothing" -msgstr "" +msgstr "החלקת מצלמה" #: src/settings_translation_file.cpp msgid "Camera smoothing in cinematic mode" -msgstr "" +msgstr "החלקת מצלמה ומצב קולנועי" #: src/settings_translation_file.cpp msgid "Camera update toggle key" -msgstr "" +msgstr "מקש החלפת עדכון המצלמה" #: src/settings_translation_file.cpp msgid "Cave noise" -msgstr "" +msgstr "רעש מערות" #: src/settings_translation_file.cpp msgid "Cave noise #1" -msgstr "" +msgstr "רעש מערות #1" #: src/settings_translation_file.cpp msgid "Cave noise #2" -msgstr "" +msgstr "רעש מערות #2" #: src/settings_translation_file.cpp msgid "Cave width" -msgstr "" +msgstr "רוחב מערות" #: src/settings_translation_file.cpp msgid "Cave1 noise" -msgstr "" +msgstr "רעש מערה1" #: src/settings_translation_file.cpp msgid "Cave2 noise" -msgstr "" +msgstr "רעש מערה2" #: src/settings_translation_file.cpp msgid "Cavern limit" -msgstr "" +msgstr "גבול מנהרות" #: src/settings_translation_file.cpp msgid "Cavern noise" -msgstr "" +msgstr "רעש מנהרות" #: src/settings_translation_file.cpp msgid "Cavern taper" -msgstr "" +msgstr "מחדד מערות" #: src/settings_translation_file.cpp msgid "Cavern threshold" -msgstr "" +msgstr "סף מערות" #: src/settings_translation_file.cpp msgid "Cavern upper limit" -msgstr "" +msgstr "גבול עליון מערות" #: src/settings_translation_file.cpp msgid "" "Center of light curve boost range.\n" "Where 0.0 is minimum light level, 1.0 is maximum light level." msgstr "" +"טווח דחיפה של מרכז עקומת אור.\n" +"כאשר 0.0 הוא רמת אור מינימלית, 1.0 הוא רמת אור מקסימלית." #: src/settings_translation_file.cpp msgid "Chat font size" -msgstr "" +msgstr "גודל גופן צ'אט" #: src/settings_translation_file.cpp msgid "Chat key" -msgstr "" +msgstr "מקש צ'אט" #: src/settings_translation_file.cpp msgid "Chat log level" -msgstr "" +msgstr "רמת לוג צ'אט" #: src/settings_translation_file.cpp msgid "Chat message count limit" -msgstr "" +msgstr "הגבלת מספר הודעות צ'אט" #: src/settings_translation_file.cpp msgid "Chat message format" -msgstr "" +msgstr "פורמט הודעות צ'אט" #: src/settings_translation_file.cpp msgid "Chat message kick threshold" -msgstr "" +msgstr "סף בעיטה להודעות צ'אט" #: src/settings_translation_file.cpp msgid "Chat message max length" -msgstr "" +msgstr "אורך הודעת צ'אט מקסימלי" #: src/settings_translation_file.cpp msgid "Chat toggle key" -msgstr "" +msgstr "מתג הפעלת צ'אט" #: src/settings_translation_file.cpp msgid "Chatcommands" -msgstr "" +msgstr "פקודות צ'אט" #: src/settings_translation_file.cpp msgid "Chunk size" -msgstr "" +msgstr "גודל חתיכה" #: src/settings_translation_file.cpp msgid "Cinematic mode" -msgstr "" +msgstr "מצב קולנועי" #: src/settings_translation_file.cpp msgid "Cinematic mode key" -msgstr "" +msgstr "מקש מצב קולנועי" #: src/settings_translation_file.cpp msgid "Clean transparent textures" -msgstr "" +msgstr "טקסטורות נקיות ושקופות" #: src/settings_translation_file.cpp msgid "Client" @@ -2454,7 +2538,7 @@ msgstr "לקוח" #: src/settings_translation_file.cpp msgid "Client and Server" -msgstr "" +msgstr "שרת ולקוח" #: src/settings_translation_file.cpp #, fuzzy @@ -4913,7 +4997,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Mipmapping" -msgstr "" +msgstr "מיפמאפינג" #: src/settings_translation_file.cpp msgid "Mod channels" From 9de982dcaebee9a36b167722971323825b8da925 Mon Sep 17 00:00:00 2001 From: Michalis Date: Mon, 8 Feb 2021 16:27:14 +0000 Subject: [PATCH 039/110] Translated using Weblate (Greek) Currently translated at 1.6% (22 of 1353 strings) --- po/el/minetest.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/el/minetest.po b/po/el/minetest.po index c9a8fa9d7..b3e5aac95 100644 --- a/po/el/minetest.po +++ b/po/el/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Greek (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-11-10 14:28+0000\n" -"Last-Translator: sfan5 \n" +"PO-Revision-Date: 2021-02-13 08:50+0000\n" +"Last-Translator: Michalis \n" "Language-Team: Greek \n" "Language: el\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -75,7 +75,7 @@ msgstr "Υποστηρίζουμε τις εκδόσεις πρωτοκόλλω #: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp #: src/gui/guiPasswordChange.cpp msgid "Cancel" -msgstr "Ματαίωση" +msgstr "Άκυρο" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/tab_content.lua From c1ae72de84b2ee5b9b0e16fcad051ed04cd496d2 Mon Sep 17 00:00:00 2001 From: Marian Date: Thu, 11 Feb 2021 09:04:40 +0000 Subject: [PATCH 040/110] Translated using Weblate (Slovak) Currently translated at 100.0% (1353 of 1353 strings) --- po/sk/minetest.po | 169 ++++++++++++++++++++++++---------------------- 1 file changed, 87 insertions(+), 82 deletions(-) diff --git a/po/sk/minetest.po b/po/sk/minetest.po index 3c4009c00..2ef303320 100644 --- a/po/sk/minetest.po +++ b/po/sk/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-11-17 08:28+0000\n" +"PO-Revision-Date: 2021-02-13 08:50+0000\n" "Last-Translator: Marian \n" "Language-Team: Slovak \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -158,52 +158,51 @@ msgstr "aktívne" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" už exituje. Chcel by si ho prepísať?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "Závislosti $1 a $2 budú nainštalované." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 od $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 sťahujem,\n" +"$2 čaká v rade" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Sťahujem..." +msgstr "$1 sťahujem..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 požadované závislosti nie je možné nájsť." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 bude nainštalovaný, a $2 závislosti budú preskočené." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "Všetky balíčky" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "Klávesa sa už používa" +msgstr "Už je nainštalované" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Naspäť do hlavného menu" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Hosťuj hru" +msgstr "Základná hra:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" @@ -227,14 +226,12 @@ msgid "Install" msgstr "Inštaluj" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Inštaluj" +msgstr "Inštaluj $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Voliteľné závislosti:" +msgstr "Nainštaluj chýbajúce závislosti" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -250,26 +247,24 @@ msgid "No results" msgstr "Bez výsledku" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Aktualizuj" +msgstr "Bez aktualizácií" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Not found" -msgstr "Stíš hlasitosť" +msgstr "Nenájdené" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Prepíš" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Prosím skontroluj či je základná hra v poriadku." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "Čaká v rade" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -285,11 +280,11 @@ msgstr "Aktualizuj" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Aktualizuj všetky [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Pozri si viac informácií vo webovom prehliadači" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -773,15 +768,16 @@ msgid "Credits" msgstr "Poďakovanie" #: builtin/mainmenu/tab_credits.lua -#, fuzzy msgid "Open User Data Directory" -msgstr "Zvoľ adresár" +msgstr "Otvor adresár s užívateľskými dátami" #: builtin/mainmenu/tab_credits.lua msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Otvor adresár, ktorý obsahuje svety, hry, mody a textúry\n" +"od užívateľov v správcovi/prieskumníkovi súborov." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -821,7 +817,7 @@ msgstr "Inštaluj hry z ContentDB" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "Meno" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -832,9 +828,8 @@ msgid "No world created or selected!" msgstr "Nie je vytvorený ani zvolený svet!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Password" -msgstr "Staré heslo" +msgstr "Heslo" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -845,9 +840,8 @@ msgid "Port" msgstr "Port" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "Zvoľ si svet:" +msgstr "Zvoľ mody" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -999,9 +993,8 @@ msgid "Shaders" msgstr "Shadery" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Shaders (experimental)" -msgstr "Lietajúce krajiny (experimentálne)" +msgstr "Shadery (experimentálne)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" @@ -1201,7 +1194,7 @@ msgid "Continue" msgstr "Pokračuj" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1224,12 +1217,12 @@ msgstr "" "- %s: pohyb doľava\n" "- %s: pohyb doprava\n" "- %s: skoč/vylez\n" +"- %s: kop/udri\n" +"- %s: polož/použi\n" "- %s: zakrádaj sa/choď dole\n" -"- %s: polož vec\n" +"- %s: odhoď vec\n" "- %s: inventár\n" "- Myš: otoč sa/obzeraj sa\n" -"- Myš, ľavé tlačítko: kopaj/udri\n" -"- Myš, pravé tlačítko: polož/použi\n" "- Myš koliesko: zvoľ si vec\n" "- %s: komunikácia\n" @@ -1759,19 +1752,18 @@ msgid "Minimap hidden" msgstr "Minimapa je skrytá" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "Minimapa v radarovom režime, priblíženie x1" +msgstr "Minimapa v radarovom režime, priblíženie x%d" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "Minimapa v povrchovom režime, priblíženie x1" +msgstr "Minimapa v povrchovom režime, priblíženie x%d" #: src/client/minimap.cpp -#, fuzzy msgid "Minimap in texture mode" -msgstr "Minimálna veľkosť textúry" +msgstr "Minimapa v móde textúry" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" @@ -2171,7 +2163,7 @@ msgstr "ABM interval" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "Vyhradená doba ABM" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" @@ -2674,7 +2666,7 @@ msgstr "Čierna listina príznakov z ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "ContentDB Maximum súbežných sťahovaní" #: src/settings_translation_file.cpp msgid "ContentDB URL" @@ -2742,11 +2734,12 @@ msgid "Crosshair alpha" msgstr "Priehľadnosť zameriavača" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "Priehľadnosť zameriavača (nepriehľadnosť, medzi 0 a 255)." +msgstr "" +"Priehľadnosť zameriavača (nepriehľadnosť, medzi 0 a 255).\n" +"Tiež nastavuje farbu objektu zameriavača" #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2757,6 +2750,8 @@ msgid "" "Crosshair color (R,G,B).\n" "Also controls the object crosshair color" msgstr "" +"Farba zameriavača (R,G,B).\n" +"Nastavuje farbu objektu zameriavača" #: src/settings_translation_file.cpp msgid "DPI" @@ -2937,9 +2932,8 @@ msgid "Desynchronize block animation" msgstr "Nesynchronizuj animáciu blokov" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dig key" -msgstr "Tlačidlo Vpravo" +msgstr "Tlačidlo Kopanie" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3161,9 +3155,8 @@ msgstr "" "rovnejšími nížinami, vhodné ako pevná základná vrstva lietajúcej pevniny." #: src/settings_translation_file.cpp -#, fuzzy msgid "FPS when unfocused or paused" -msgstr "Maximálne FPS, ak je hra pozastavená." +msgstr "FPS ak je hra nezameraná, alebo pozastavená" #: src/settings_translation_file.cpp msgid "FSAA" @@ -3554,7 +3547,6 @@ msgid "HUD toggle key" msgstr "Tlačidlo Prepínanie HUD" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- none: Do not log deprecated calls\n" @@ -3562,9 +3554,8 @@ msgid "" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" "Spracovanie zastaralých Lua API volaní:\n" -"- legacy: (skús to) napodobni staré správanie (štandard pre release).\n" -"- log: napodobni log backtrace zastaralého volania (štandard pre " -"debug).\n" +"- none: Zastarané funkcie neukladaj do logu\n" +"- log: napodobni log backtrace zastaralého volania (štandardne).\n" "- error: preruš spracovanie zastaralého volania (odporúčané pre vývojárov " "rozšírení)." @@ -4086,9 +4077,8 @@ msgid "Joystick button repetition interval" msgstr "Interval opakovania tlačidla joysticku" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick deadzone" -msgstr "Typ joysticku" +msgstr "Mŕtva zóna joysticku" #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" @@ -4193,13 +4183,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for digging.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Tlačidlo pre skákanie.\n" +"Tlačidlo pre kopanie.\n" "Viď. http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4346,13 +4335,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for placing.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Tlačidlo pre skákanie.\n" +"Tlačidlo pre pokladanie.\n" "Viď. http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -5124,11 +5112,11 @@ msgstr "Všetky tekutiny budú nepriehľadné" #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" -msgstr "" +msgstr "Úroveň kompresie mapy pre diskové úložisko" #: src/settings_translation_file.cpp msgid "Map Compression Level for Network Transfer" -msgstr "" +msgstr "Úroveň kompresie mapy pre sieťový prenos" #: src/settings_translation_file.cpp msgid "Map directory" @@ -5313,9 +5301,8 @@ msgid "Maximum FPS" msgstr "Maximálne FPS" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum FPS when the window is not focused, or when the game is paused." -msgstr "Maximálne FPS, ak je hra pozastavená." +msgstr "Maximálne FPS, ak je hra nie je v aktuálnom okne, alebo je pozastavená." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5379,6 +5366,9 @@ msgid "" "be queued.\n" "This should be lower than curl_parallel_limit." msgstr "" +"Maximálny počet súčasných sťahovaní. Sťahovania presahujúce tento limit budú " +"čakať v rade.\n" +"Mal by byť nižší ako curl_parallel_limit." #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5786,14 +5776,12 @@ msgid "Pitch move mode" msgstr "Režim pohybu podľa sklonu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place key" -msgstr "Tlačidlo Lietanie" +msgstr "Tlačidlo na pokladanie" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place repetition interval" -msgstr "Interval opakovania pravého kliknutia" +msgstr "Interval opakovania pokladania" #: src/settings_translation_file.cpp msgid "" @@ -6273,12 +6261,11 @@ msgid "Show entity selection boxes" msgstr "Zobraz obrys bytosti" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Show entity selection boxes\n" "A restart is required after changing this." msgstr "" -"Nastav jazyk. Ponechaj prázdne pre systémové nastavenie.\n" +"Zobraz obrysy bytosti\n" "Po zmene je požadovaný reštart." #: src/settings_translation_file.cpp @@ -6555,9 +6542,8 @@ msgid "The URL for the content repository" msgstr "Webová adresa (URL) k úložisku doplnkov" #: src/settings_translation_file.cpp -#, fuzzy msgid "The deadzone of the joystick" -msgstr "Identifikátor joysticku na použitie" +msgstr "Mŕtva zóna joysticku" #: src/settings_translation_file.cpp msgid "" @@ -6631,7 +6617,6 @@ msgstr "" "Malo by to byť konfigurované spolu s active_object_send_range_blocks." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end for Irrlicht.\n" "A restart is required after changing this.\n" @@ -6642,10 +6627,10 @@ msgid "" msgstr "" "Renderovací back-end pre Irrlicht.\n" "Po zmene je vyžadovaný reštart.\n" -"Poznámka: Na Androidw, ak si nie si istý, ponechaj OGLES1! Aplikácia by " +"Poznámka: Na Androide, ak si nie si istý, ponechaj OGLES1! Aplikácia by " "nemusela naštartovať.\n" -"Na iných platformách, sa odporúča OpenGL, a je to aktuálne jediný ovládač\n" -"s podporou shaderov." +"Na iných platformách, sa odporúča OpenGL.\n" +"Shadery sú podporované v OpenGL (len pre desktop) a v OGLES2 (experimentálne)" #: src/settings_translation_file.cpp msgid "" @@ -6682,6 +6667,8 @@ msgid "" "The time budget allowed for ABMs to execute on each step\n" "(as a fraction of the ABM Interval)" msgstr "" +"Vyhradená doba pre ABM na vykonanie v každom kroku\n" +"(ako zlomok ABM imtervalu)" #: src/settings_translation_file.cpp msgid "" @@ -6692,13 +6679,12 @@ msgstr "" "pri stlačenej kombinácií tlačidiel na joysticku." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The time in seconds it takes between repeated node placements when holding\n" "the place button." msgstr "" -"Čas v sekundách pre zopakovanie pravého kliknutia v prípade\n" -"držania pravého tlačítka myši." +"Čas v sekundách pre opakované položenie kocky\n" +"ak je držané tlačítko pokladania." #: src/settings_translation_file.cpp msgid "The type of joystick" @@ -6862,6 +6848,13 @@ msgid "" "If set to 0, MSAA is disabled.\n" "A restart is required after changing this option." msgstr "" +"Použi multi-sample antialiasing (MSAA) pre zjemnenie hrán blokov.\n" +"Tento algoritmus zjemní 3D vzhľad zatiaľ čo zachová ostrosť obrazu,\n" +"ale neovplyvní vnútro textúr\n" +"(čo je obzvlášť viditeľné pri priesvitných textúrach).\n" +"Ak sú shadery zakázané, objavia sa viditeľné medzery medzi kockami.\n" +"Ak sú nastavené na 0, MSAA je zakázané.\n" +"Po zmene tohto nastavenia je požadovaný reštart." #: src/settings_translation_file.cpp msgid "Use trilinear filtering when scaling textures." @@ -7253,6 +7246,12 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"Úroveň kompresie ZLib používaný pri ukladaní blokov mapy na disk.\n" +"-1 - predvolená úroveň kompresie Zlib\n" +"0 - bez kompresie, najrýchlejšie\n" +"9 - najlepšia kompresia, najpomalšie\n" +"(pre úrovne 1-3 používa Zlib \"rýchlu\" metódu, pre 4-9 používa normálnu " +"metódu)" #: src/settings_translation_file.cpp msgid "" @@ -7262,6 +7261,12 @@ msgid "" "9 - best compression, slowest\n" "(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" msgstr "" +"Úroveň kompresie ZLib používaný pri posielaní blokov mapy klientom.\n" +"-1 - predvolená úroveň kompresie Zlib\n" +"0 - bez kompresie, najrýchlejšie\n" +"9 - najlepšia kompresia, najpomalšie\n" +"(pre úrovne 1-3 používa Zlib \"rýchlu\" metódu, pre 4-9 používa normálnu " +"metódu)" #: src/settings_translation_file.cpp msgid "cURL file download timeout" From 308a3fc8f4901c5ef4c5fa8421744cb6a2ba99d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Egil=20Hoftun=20Kv=C3=A6stad?= Date: Thu, 18 Feb 2021 18:57:23 +0000 Subject: [PATCH 041/110] Translated using Weblate (Norwegian Nynorsk) Currently translated at 32.8% (445 of 1353 strings) --- po/nn/minetest.po | 371 ++++++++++++++++++++++++---------------------- 1 file changed, 191 insertions(+), 180 deletions(-) diff --git a/po/nn/minetest.po b/po/nn/minetest.po index 2968d5a1a..fdcc975b2 100644 --- a/po/nn/minetest.po +++ b/po/nn/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Norwegian Nynorsk (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2021-01-10 01:32+0000\n" -"Last-Translator: Allan Nordhøy \n" +"PO-Revision-Date: 2021-02-20 05:50+0000\n" +"Last-Translator: Tor Egil Hoftun Kvæstad \n" "Language-Team: Norwegian Nynorsk \n" "Language: nn\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4.1-dev\n" +"X-Generator: Weblate 4.5\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -24,12 +24,11 @@ msgstr "Du døydde" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" -msgstr "" +msgstr "OK" #: builtin/fstk/ui.lua -#, fuzzy msgid "An error occurred in a Lua script:" -msgstr "Ein feil har skjedd med eit Lua manus, slik som ein mod:" +msgstr "Ein feil oppstod i eit LUA-skript:" #: builtin/fstk/ui.lua msgid "An error occurred:" @@ -41,11 +40,11 @@ msgstr "Hovudmeny" #: builtin/fstk/ui.lua msgid "Reconnect" -msgstr "Kople attende sambandet" +msgstr "Kople til igjen" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" -msgstr "Tenarmaskinen ber om å få forbindelsen attende:" +msgstr "Tenaren har førespurt å kople til igjen:" #: builtin/mainmenu/common.lua msgid "Protocol version mismatch. " @@ -53,19 +52,19 @@ msgstr "Protkoll versjon bommert. " #: builtin/mainmenu/common.lua msgid "Server enforces protocol version $1. " -msgstr "Tenarmaskinen krevjar protokoll versjon $1. " +msgstr "Tenaren krev protokoll versjon $1. " #: builtin/mainmenu/common.lua msgid "Server supports protocol versions between $1 and $2. " -msgstr "Tenarmaskinen støttar protokoll versjonar mellom $1 og $2. " +msgstr "Tenaren støtter protokollversjonar mellom $1 og $2. " #: builtin/mainmenu/common.lua msgid "We only support protocol version $1." -msgstr "Vi støttar berre protokoll versjon $1." +msgstr "Me støtter berre protokoll versjon $1." #: builtin/mainmenu/common.lua msgid "We support protocol versions between version $1 and $2." -msgstr "Vi støttar protokoll versjonar mellom $1 og $2." +msgstr "Me støtter protokollversjonar mellom $1 og $2." #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_create_world.lua @@ -85,62 +84,59 @@ msgstr "Avhengigheiter:" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" -msgstr "Deaktiver allt" +msgstr "Deaktiver alt" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" -msgstr "Deaktivere modifikasjons-pakka" +msgstr "Deaktiver modifikasjonspakken" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" -msgstr "Aktiver allt" +msgstr "Aktiver alt" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable modpack" -msgstr "Aktiver modifikasjons-pakka" +msgstr "Aktiver modifikasjonspakken" #: builtin/mainmenu/dlg_config_world.lua msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "characters [a-z0-9_] are allowed." msgstr "" -"Fåfengt å aktivere modifikasjon \"$1\" sia den innehald ugyldige teikn. " -"Berre teikna [a-z0-9_] e tillaten." +"Klarte ikkje å aktivere modifikasjon «$1», då den inneheld ugyldige teikn. " +"Berre teikna [a-z0-9_] er tillatne." #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" -msgstr "" +msgstr "Finn fleire modifikasjonar" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Modifikasjon:" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No (optional) dependencies" -msgstr "Valgbare avhengigheiter:" +msgstr "Ingen (valfrie) avhengigheiter" #: builtin/mainmenu/dlg_config_world.lua msgid "No game description provided." msgstr "Ikkje nokon spill skildring e sørgja for." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No hard dependencies" -msgstr "Ikkje nokon avhengigheiter." +msgstr "Ingen obligatoriske avhengigheiter" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." msgstr "Ikkje noko modifikasjons-pakke skildring e sørgja for." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No optional dependencies" -msgstr "Valgbare avhengigheiter:" +msgstr "Ingen valfrie avhengigheiter" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Optional dependencies:" -msgstr "Valgbare avhengigheiter:" +msgstr "Valfrie avhengigheiter:" #: builtin/mainmenu/dlg_config_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp @@ -149,19 +145,19 @@ msgstr "Lagre" #: builtin/mainmenu/dlg_config_world.lua msgid "World:" -msgstr "Verda:" +msgstr "Verd:" #: builtin/mainmenu/dlg_config_world.lua msgid "enabled" -msgstr "Aktivert" +msgstr "aktivert" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "«$1» eksisterer allereie. Vil du overskrive den?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "$1 og $2 avhengigheiter vil verte installerte." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" @@ -174,39 +170,36 @@ msgid "" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Laster ned..." +msgstr "$1 lastar ned …" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 obligatoriske avhengigheiter vart ikkje funne." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 vil verte installert, og $2 avhengigheiter vil verte hoppa over." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "Alle pakker" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "Knapp er allereie i bruk" +msgstr "Allereie installert" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Attende til hovudmeny" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Bli husvert" +msgstr "Basisspel:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" +msgstr "ContentDB er ikkje tilgjengeleg når Minetest vart kompilert utan cURL" #: builtin/mainmenu/dlg_contentstore.lua #, fuzzy @@ -215,7 +208,7 @@ msgstr "Laster ned..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" -msgstr "Fåfengt å laste ned $1" +msgstr "Klarte ikkje å laste ned $1" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -227,44 +220,41 @@ msgid "Install" msgstr "Installer" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Installer" +msgstr "Installer $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Valgbare avhengigheiter:" +msgstr "Installer manglande avhengigheiter" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" -msgstr "Modder" +msgstr "Modifikasjonar" #: builtin/mainmenu/dlg_contentstore.lua msgid "No packages could be retrieved" -msgstr "Ikkje nokon pakkar kunne bli henta" +msgstr "Ingen pakkar kunne verte henta" #: builtin/mainmenu/dlg_contentstore.lua msgid "No results" -msgstr "Ikkje noko resultat" +msgstr "Ingen resultat" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Oppdater" +msgstr "Ingen oppdateringar" #: builtin/mainmenu/dlg_contentstore.lua msgid "Not found" -msgstr "" +msgstr "Ikkje funnen" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Overskriv" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Ver venleg å sjekke at basisspelet er korrekt." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" @@ -284,19 +274,19 @@ msgstr "Oppdater" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Oppdater alt [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Sjå meir informasjon i ein nettlesar" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" -msgstr "Ein verd med namnet \"$1\" finns allereie" +msgstr "Ein verd med namnet «$1» eksisterer allereie" #: builtin/mainmenu/dlg_create_world.lua msgid "Additional terrain" -msgstr "" +msgstr "Ytterlegare terreng" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Altitude chill" @@ -312,11 +302,11 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Biomes" -msgstr "" +msgstr "Biom" #: builtin/mainmenu/dlg_create_world.lua msgid "Caverns" -msgstr "" +msgstr "Holer" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy @@ -328,17 +318,16 @@ msgid "Create" msgstr "Skap" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Decorations" -msgstr "Informasjon:" +msgstr "Dekorasjonar" #: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" -msgstr "Last ned eit spel, sånn som Minetest spellet, ifrå minetest.net" +msgstr "Last ned eit spel, slik som Minetest-spelet, frå minetest.net" #: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" -msgstr "Last eit ned på minetest.net" +msgstr "Last ned eit frå minetest.net" #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" @@ -346,15 +335,15 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Flat terrain" -msgstr "" +msgstr "Flatt terreng" #: builtin/mainmenu/dlg_create_world.lua msgid "Floating landmasses in the sky" -msgstr "" +msgstr "Svevande landmassar på himmelen" #: builtin/mainmenu/dlg_create_world.lua msgid "Floatlands (experimental)" -msgstr "" +msgstr "Flyteland (eksperimentell)" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" @@ -362,11 +351,11 @@ msgstr "Spel" #: builtin/mainmenu/dlg_create_world.lua msgid "Generate non-fractal terrain: Oceans and underground" -msgstr "" +msgstr "Generer ikkjefraktalterreng: Hav og undergrunn" #: builtin/mainmenu/dlg_create_world.lua msgid "Hills" -msgstr "" +msgstr "Haugar" #: builtin/mainmenu/dlg_create_world.lua msgid "Humid rivers" @@ -374,15 +363,15 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Increases humidity around rivers" -msgstr "" +msgstr "Aukar fuktigheita rundt elver" #: builtin/mainmenu/dlg_create_world.lua msgid "Lakes" -msgstr "" +msgstr "Sjøar" #: builtin/mainmenu/dlg_create_world.lua msgid "Low humidity and high heat causes shallow or dry rivers" -msgstr "" +msgstr "Låg fuktigheit og høg temperatur fører til grunne eller tørre elver" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" @@ -398,15 +387,15 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Mountains" -msgstr "" +msgstr "Fjell" #: builtin/mainmenu/dlg_create_world.lua msgid "Mud flow" -msgstr "" +msgstr "Leireflyt" #: builtin/mainmenu/dlg_create_world.lua msgid "Network of tunnels and caves" -msgstr "" +msgstr "Nettverk av tunellar og holer" #: builtin/mainmenu/dlg_create_world.lua msgid "No game selected" @@ -422,11 +411,11 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Rivers" -msgstr "" +msgstr "Elver" #: builtin/mainmenu/dlg_create_world.lua msgid "Sea level rivers" -msgstr "" +msgstr "Elver på havnivå" #: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -449,15 +438,15 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert" -msgstr "" +msgstr "Temperert, Ørken" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle" -msgstr "" +msgstr "Temperert, Ørken, Jungel" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle, Tundra, Taiga" -msgstr "" +msgstr "Temperert, Ørken, Jungel, Tundra, Taiga" #: builtin/mainmenu/dlg_create_world.lua msgid "Terrain surface erosion" @@ -465,15 +454,15 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Trees and jungle grass" -msgstr "" +msgstr "Tre og jungelgras" #: builtin/mainmenu/dlg_create_world.lua msgid "Vary river depth" -msgstr "" +msgstr "Varier elvedjupne" #: builtin/mainmenu/dlg_create_world.lua msgid "Very large caverns deep in the underground" -msgstr "" +msgstr "Svært store holer djupt i undergrunnen" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy @@ -490,7 +479,7 @@ msgstr "Du har ikkje installert noko spel." #: builtin/mainmenu/dlg_delete_content.lua msgid "Are you sure you want to delete \"$1\"?" -msgstr "Er du sikker på at du har lyst til å slette \"$1\"?" +msgstr "Er du sikker på at du vil slette «$1»?" #: builtin/mainmenu/dlg_delete_content.lua #: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua @@ -500,23 +489,23 @@ msgstr "Slett" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: failed to delete \"$1\"" -msgstr "pkgmgr: sletting av \"$1\" gjekk ikkje" +msgstr "pkgmgr: klarte ikkje å slette «$1»" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: invalid path \"$1\"" -msgstr "pkgmgr: ugyldig rute \"$1\"" +msgstr "pkgmgr: ugyldig sti «$1»" #: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" -msgstr "Slett verd \"$1\"?" +msgstr "Slett verd «$1»?" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" -msgstr "Akseptér" +msgstr "Aksepter" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" -msgstr "Omdøp Modpakka:" +msgstr "Døyp om modifikasjonspakken:" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "" @@ -532,11 +521,11 @@ msgstr "(Ikkje nokon skildring gjeven)" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "2D Noise" -msgstr "To-dimensjonal lyd" +msgstr "2D-støy" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "< Back to Settings page" -msgstr "< Attende til innstillingar" +msgstr "< Tilbake til innstillingssida" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Browse" @@ -592,11 +581,11 @@ msgstr "Søk" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Select directory" -msgstr "Velje ein mappe" +msgstr "Vel katalog" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Select file" -msgstr "Velje eit dokument" +msgstr "Vel fil" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Show technical names" @@ -604,11 +593,11 @@ msgstr "Vis tekniske namn" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "The value must be at least $1." -msgstr "Verdien må i det minste være $1." +msgstr "Verdien må minst vere $1." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "The value must not be larger than $1." -msgstr "Verdien må ikkje være høgare enn $1." +msgstr "Verdien må ikkje vere større enn $1." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X" @@ -647,7 +636,7 @@ msgstr "Absolutt verdi" #. for noise settings in main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "defaults" -msgstr "Standard" +msgstr "standardar" #. ~ "eased" is a noise parameter flag. #. It is used to make the map smoother and @@ -663,35 +652,37 @@ msgstr "$1 (Aktivert)" #: builtin/mainmenu/pkgmgr.lua msgid "$1 mods" -msgstr "$1 modder" +msgstr "$1 modifikasjonar" #: builtin/mainmenu/pkgmgr.lua msgid "Failed to install $1 to $2" -msgstr "Funka ikkje å installere $1 til $2" +msgstr "Klarte ikkje å installere $1 til $2" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find real mod name for: $1" msgstr "" -"Installer modifikasjon: Funka ikkje å finne eit ekte modifikasjons namn for: " -"$1" +"Installer modifikasjon: Klarte ikkje å finne det reelle modifikasjonsnamnet " +"for: $1" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -"Installer Modifikasjon: Funka ikkje å finne ein passande for modpakke $1" +"Installer modifikasjon: Klarte ikkje å finne ein passande katalog for " +"modifikasjonspakke $1" #: builtin/mainmenu/pkgmgr.lua +#, fuzzy msgid "Install: Unsupported file type \"$1\" or broken archive" msgstr "" "Installer: Ikkje-støtta dokument type \"$1\" eller så funker ikkje arkivet" #: builtin/mainmenu/pkgmgr.lua msgid "Install: file: \"$1\"" -msgstr "Installer: dokument: \"$1\"" +msgstr "Installer: fil: «$1»" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" -msgstr "Funka ikkje å finne ein gyldig modifikasjon eller mod-pakke" +msgstr "Klarte ikkje å finne ein gyldig modifikasjon eller modifikasjonspakke" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a $1 as a texture pack" @@ -711,9 +702,10 @@ msgstr "Funka ikkje å installere mod-pakka som ein $1" #: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp msgid "Loading..." -msgstr "Laster ned..." +msgstr "Lastar …" #: builtin/mainmenu/serverlistmgr.lua +#, fuzzy msgid "Try reenabling public serverlist and check your internet connection." msgstr "" "Forsøkje å kople attende den offentlege tenarmaskin-lista og sjekk sambands " @@ -729,7 +721,7 @@ msgstr "Innhald" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" -msgstr "Deaktivér tekstur pakke" +msgstr "Deaktiver teksturpakke" #: builtin/mainmenu/tab_content.lua msgid "Information:" @@ -737,15 +729,15 @@ msgstr "Informasjon:" #: builtin/mainmenu/tab_content.lua msgid "Installed Packages:" -msgstr "Installer pakker:" +msgstr "Installerte pakker:" #: builtin/mainmenu/tab_content.lua msgid "No dependencies." -msgstr "Ikkje nokon avhengigheiter." +msgstr "Ingen avhengigheiter." #: builtin/mainmenu/tab_content.lua msgid "No package description available" -msgstr "Ikkje nokon pakke skildring tilgjengelig" +msgstr "Inga pakkeskildring tilgjengeleg" #: builtin/mainmenu/tab_content.lua msgid "Rename" @@ -757,15 +749,15 @@ msgstr "Avinstallér pakka" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" -msgstr "Bruk tekstur pakke" +msgstr "Bruk teksturpakke" #: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" -msgstr "Aktive bidragere" +msgstr "Aktive bidragsytarar" #: builtin/mainmenu/tab_credits.lua msgid "Core Developers" -msgstr "Kjerne-utviklere" +msgstr "Kjerne-utviklarar" #: builtin/mainmenu/tab_credits.lua msgid "Credits" @@ -784,11 +776,11 @@ msgstr "" #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" -msgstr "Førre bidragere" +msgstr "Tidlegare bidragsytarar" #: builtin/mainmenu/tab_credits.lua msgid "Previous Core Developers" -msgstr "Førre kjerne-utviklere" +msgstr "Tidlegare kjerne-utviklarar" #: builtin/mainmenu/tab_local.lua msgid "Announce Server" @@ -807,20 +799,22 @@ msgid "Enable Damage" msgstr "Aktivér skading" #: builtin/mainmenu/tab_local.lua +#, fuzzy msgid "Host Game" msgstr "Bli husvert" #: builtin/mainmenu/tab_local.lua +#, fuzzy msgid "Host Server" msgstr "Bli tenarmaskin's vert" #: builtin/mainmenu/tab_local.lua msgid "Install games from ContentDB" -msgstr "" +msgstr "Installer spel frå ContentDB" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "Namn" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -828,12 +822,11 @@ msgstr "Ny" #: builtin/mainmenu/tab_local.lua msgid "No world created or selected!" -msgstr "Ikkje noko verd skapt eller valgt!" +msgstr "Inga verd skapt eller valt!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Password" -msgstr "Nytt passord" +msgstr "Passord" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -844,9 +837,8 @@ msgid "Port" msgstr "Port" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "Vel verd:" +msgstr "Vel modifikasjonar" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -854,7 +846,7 @@ msgstr "Vel verd:" #: builtin/mainmenu/tab_local.lua msgid "Server Port" -msgstr "Tenarmaskin port" +msgstr "Tenarport" #: builtin/mainmenu/tab_local.lua msgid "Start Game" @@ -862,7 +854,7 @@ msgstr "Start spel" #: builtin/mainmenu/tab_online.lua msgid "Address / Port" -msgstr "Stad/port" +msgstr "Adresse / port" #: builtin/mainmenu/tab_online.lua msgid "Connect" @@ -926,6 +918,7 @@ msgid "Antialiasing:" msgstr "Kantutjemning:" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Autosave Screen Size" msgstr "Automatisk sjerm størrelse" @@ -962,10 +955,12 @@ msgid "No Mipmap" msgstr "Ingen Mipkart" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Node Highlighting" msgstr "Knute-fremheving" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Node Outlining" msgstr "Knute-utlinjing" @@ -983,17 +978,18 @@ msgstr "Ugjennomsiktig vatn" #: builtin/mainmenu/tab_settings.lua msgid "Particles" -msgstr "Partikkler" +msgstr "Partiklar" #: builtin/mainmenu/tab_settings.lua msgid "Screen:" -msgstr "Sjerm:" +msgstr "Skjerm:" #: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Innstillingar" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +#, fuzzy msgid "Shaders" msgstr "Dybdeskaper" @@ -1003,6 +999,7 @@ msgid "Shaders (experimental)" msgstr "Dybdeskaper (ikkje tilgjengelig)" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Shaders (unavailable)" msgstr "Dybdeskaper (ikkje tilgjengelig)" @@ -1019,10 +1016,12 @@ msgid "Texturing:" msgstr "Teksturering:" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "To enable shaders the OpenGL driver needs to be used." msgstr "For å aktivere skumrings-effekt så må OpenGL driveren være i bruk." #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +#, fuzzy msgid "Tone Mapping" msgstr "Tone kartlegging" @@ -1035,6 +1034,7 @@ msgid "Trilinear Filter" msgstr "Tri-lineær filtréring" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Waving Leaves" msgstr "Raslende lauv" @@ -1044,6 +1044,7 @@ msgid "Waving Liquids" msgstr "Raslende lauv" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Waving Plants" msgstr "Raslende planter" @@ -1061,23 +1062,24 @@ msgstr "Førebur noder" #: src/client/client.cpp msgid "Initializing nodes..." -msgstr "Førebur node..." +msgstr "Førebur nodar …" #: src/client/client.cpp msgid "Loading textures..." -msgstr "Lastar teksturar..." +msgstr "Lastar teksturar …" #: src/client/client.cpp +#, fuzzy msgid "Rebuilding shaders..." msgstr "Gjennbygger dybdeskaper..." #: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" -msgstr "Kopling gikk galen (Tidsavbrott?)" +msgstr "Tilkoplingsfeil (Tidsavbrot?)" #: src/client/clientlauncher.cpp msgid "Could not find or load game \"" -msgstr "Kunne ikkje finne eller ha i gang spelet \"" +msgstr "Kunne ikkje finne eller laste spelet \"" #: src/client/clientlauncher.cpp msgid "Invalid gamespec." @@ -1088,8 +1090,9 @@ msgid "Main Menu" msgstr "Hovudmeny" #: src/client/clientlauncher.cpp +#, fuzzy msgid "No world selected and no address provided. Nothing to do." -msgstr "Ingen verd valgt og ikkje nokon adresse valg. Ikkje noko å gjere." +msgstr "Inga verd er vald og ikkje nokon adresse valg. Ikkje noko å gjere." #: src/client/clientlauncher.cpp msgid "Player name too long." @@ -1097,13 +1100,15 @@ msgstr "Spelarnamn for langt." #: src/client/clientlauncher.cpp msgid "Please choose a name!" -msgstr "Ver vennleg og velje eit anna namn!" +msgstr "Ver venleg å velje eit namn!" #: src/client/clientlauncher.cpp +#, fuzzy msgid "Provided password file failed to open: " msgstr "Passord dokumentet du ga går ikkje an å åpne: " #: src/client/clientlauncher.cpp +#, fuzzy msgid "Provided world path doesn't exist: " msgstr "Verds-ruta du ga finnes ikkje: " @@ -1132,6 +1137,7 @@ msgid "- Address: " msgstr "- Adresse: " #: src/client/game.cpp +#, fuzzy msgid "- Creative Mode: " msgstr "- Gude løyving: " @@ -1158,7 +1164,7 @@ msgstr "- Spelar mot spelar (PvP): " #: src/client/game.cpp msgid "- Server Name: " -msgstr "- Tenarmaskin namn: " +msgstr "- Tenarnamn: " #: src/client/game.cpp msgid "Automatic forward disabled" @@ -1198,10 +1204,10 @@ msgstr "Kopler til tenarmaskin..." #: src/client/game.cpp msgid "Continue" -msgstr "Fortsetja" +msgstr "Fortset" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1219,19 +1225,19 @@ msgid "" "- %s: chat\n" msgstr "" "Styring:\n" -"- %s: Framsteg\n" -"- %s: Baksteg\n" -"- %s: Sidesteg mot venstre\n" -"- %s: Sidesteg mot høyre\n" -"- %s: hopp/klatre\n" -"- %s: snike seg rundt/bøye seg\n" -"- %s: slipp gjennstand\n" +"- %s: gå framover\n" +"- %s: gå bakover\n" +"- %s: gå mot venstre\n" +"- %s: gå mot høgre\n" +"- %s: hopp/klatre opp\n" +"- %s: grav/slå\n" +"- %s: plasser/nytt\n" +"- %s: snik/klatre ned\n" +"- %s: slepp ting\n" "- %s: inventar\n" -"- Datamus: snu seg/sjå rundt\n" -"- Datamus, venstre klikk: grave/slå\n" -"- Datamus, høgre klikk: plassér/bruk\n" -"- Datamus, skrolle-hjul: select item\n" -"- %s: skravlerør\n" +"- Mus: snu deg/sjå\n" +"- Musehjul: vel ting\n" +"- %s: nettprat\n" #: src/client/game.cpp msgid "Creating client..." @@ -1424,7 +1430,7 @@ msgstr "Lyd e dempa" #: src/client/game.cpp msgid "Sound system is disabled" -msgstr "" +msgstr "Lydsystemet er slått av" #: src/client/game.cpp msgid "Sound system is not supported on this build" @@ -1759,14 +1765,14 @@ msgid "Minimap hidden" msgstr "Minikart er gøymt" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "Minikart i radar modus, Zoom x1" +msgstr "Minikart i radarmodus, Zoom x%d" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "Minikart i overflate modus, Zoom x1" +msgstr "Minikart i overflatemodus, Zoom x%d" #: src/client/minimap.cpp #, fuzzy @@ -2054,11 +2060,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "3D clouds" -msgstr "" +msgstr "3D-skyer" #: src/settings_translation_file.cpp msgid "3D mode" -msgstr "" +msgstr "3D-modus" #: src/settings_translation_file.cpp msgid "3D mode parallax strength" @@ -2066,13 +2072,15 @@ msgstr "" #: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." -msgstr "" +msgstr "3D-støy som definerer gigantiske holer." #: src/settings_translation_file.cpp msgid "" "3D noise defining mountain structure and height.\n" "Also defines structure of floatland mountain terrain." msgstr "" +"3D-støy som definerer fjellstruktur og -høgde.\n" +"Definerer og strukturen på fjellterreng for flyteland." #: src/settings_translation_file.cpp msgid "" @@ -2088,7 +2096,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "3D noise defining terrain." -msgstr "" +msgstr "3D-støy som definerer terreng." #: src/settings_translation_file.cpp msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." @@ -2120,11 +2128,12 @@ msgstr "" #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server crashes." -msgstr "" +msgstr "Ein beskjed som skal visast til alle klientane når tenaren kræsjar." #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server shuts down." msgstr "" +"Ein beskjed som skal visast til alle klientane når tenaren vert slått av." #: src/settings_translation_file.cpp msgid "ABM interval" @@ -2140,11 +2149,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Acceleration in air" -msgstr "" +msgstr "Akselerasjon i luft" #: src/settings_translation_file.cpp msgid "Acceleration of gravity, in nodes per second per second." -msgstr "" +msgstr "Gravitasjonsakselerasjon, i nodar per sekund per sekund." #: src/settings_translation_file.cpp msgid "Active Block Modifiers" @@ -2191,7 +2200,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Advanced" -msgstr "" +msgstr "Avansert" #: src/settings_translation_file.cpp msgid "" @@ -2212,11 +2221,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Amount of messages a player may send per 10 seconds." -msgstr "" +msgstr "Antal meldingar ein spelar kan sende per 10 sekund." #: src/settings_translation_file.cpp msgid "Amplifies the valleys." -msgstr "" +msgstr "Forsterkar dalane." #: src/settings_translation_file.cpp msgid "Anisotropic filtering" @@ -2281,7 +2290,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Automatically report to the serverlist." -msgstr "" +msgstr "Rapporter automatisk til tenarlista." #: src/settings_translation_file.cpp msgid "Autosave screen size" @@ -2289,7 +2298,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Autoscaling mode" -msgstr "" +msgstr "Autoskaleringsmodus" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2305,11 +2314,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Basic" -msgstr "" +msgstr "Basis" #: src/settings_translation_file.cpp msgid "Basic privileges" -msgstr "" +msgstr "Basisprivilegium" #: src/settings_translation_file.cpp msgid "Beach noise" @@ -2365,7 +2374,7 @@ msgstr "Bygg intern spelar" #: src/settings_translation_file.cpp msgid "Builtin" -msgstr "" +msgstr "Innebygd" #: src/settings_translation_file.cpp msgid "" @@ -2439,11 +2448,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Chat font size" -msgstr "" +msgstr "Tekststørrelse for nettprat" #: src/settings_translation_file.cpp msgid "Chat key" -msgstr "" +msgstr "Nettpratstast" #: src/settings_translation_file.cpp msgid "Chat log level" @@ -2491,11 +2500,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Client" -msgstr "" +msgstr "Klient" #: src/settings_translation_file.cpp msgid "Client and Server" -msgstr "" +msgstr "Klient og tenar" #: src/settings_translation_file.cpp msgid "Client modding" @@ -2511,15 +2520,15 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Climbing speed" -msgstr "" +msgstr "Klatrefart" #: src/settings_translation_file.cpp msgid "Cloud radius" -msgstr "" +msgstr "Skyradius" #: src/settings_translation_file.cpp msgid "Clouds" -msgstr "" +msgstr "Skyer" #: src/settings_translation_file.cpp msgid "Clouds are a client side effect." @@ -2527,11 +2536,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Clouds in menu" -msgstr "" +msgstr "Skyer i meny" #: src/settings_translation_file.cpp msgid "Colored fog" -msgstr "" +msgstr "Farga tåke" #: src/settings_translation_file.cpp msgid "" @@ -2594,7 +2603,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "ContentDB URL" -msgstr "" +msgstr "URL til ContentDB" #: src/settings_translation_file.cpp msgid "Continuous forward" @@ -2638,11 +2647,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Crash message" -msgstr "" +msgstr "Kræsjmelding" #: src/settings_translation_file.cpp msgid "Creative" -msgstr "" +msgstr "Kreativ" #: src/settings_translation_file.cpp msgid "Crosshair alpha" @@ -2698,29 +2707,31 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Default acceleration" -msgstr "" +msgstr "Standard akselerasjon" #: src/settings_translation_file.cpp msgid "Default game" -msgstr "" +msgstr "Standard spel" #: src/settings_translation_file.cpp msgid "" "Default game when creating a new world.\n" "This will be overridden when creating a world from the main menu." msgstr "" +"Standard spel når du lagar ei ny verd.\n" +"Dette vil verte overstyrt når du lagar ei verd frå hovudmenyen." #: src/settings_translation_file.cpp msgid "Default password" -msgstr "" +msgstr "Standard passord" #: src/settings_translation_file.cpp msgid "Default privileges" -msgstr "" +msgstr "Standard privilegium" #: src/settings_translation_file.cpp msgid "Default report format" -msgstr "" +msgstr "Standard rapportformat" #: src/settings_translation_file.cpp msgid "Default stack size" From d77a8a980f122f61a5b7ff2060160a741b18acf7 Mon Sep 17 00:00:00 2001 From: Reza Almanda Date: Sun, 21 Feb 2021 10:54:18 +0000 Subject: [PATCH 042/110] Translated using Weblate (Indonesian) Currently translated at 100.0% (1353 of 1353 strings) --- po/id/minetest.po | 50 ++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/po/id/minetest.po b/po/id/minetest.po index 4cfffc6f9..cea94783a 100644 --- a/po/id/minetest.po +++ b/po/id/minetest.po @@ -3,9 +3,8 @@ msgstr "" "Project-Id-Version: Indonesian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2021-02-03 15:42+0000\n" -"Last-Translator: Muhammad Rifqi Priyo Susanto " -"\n" +"PO-Revision-Date: 2021-02-23 15:50+0000\n" +"Last-Translator: Reza Almanda \n" "Language-Team: Indonesian \n" "Language: id\n" @@ -13,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.5\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -1010,7 +1009,7 @@ msgstr "Untuk menggunakan shader, pengandar OpenGL harus digunakan." #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" -msgstr "Tone Mapping" +msgstr "Pemetaan Nada" #: builtin/mainmenu/tab_settings.lua msgid "Touchthreshold: (px)" @@ -2217,7 +2216,7 @@ msgid "" msgstr "" "Sesuaikan kepadatan lapisan floatland.\n" "Tambahkan nilai untuk menambah kepadatan. Dapat positif atau negatif.\n" -"Nilai = 0.0: 50% volume adalah floatland.\n" +"Nilai = 0.0: 50% o volume adalah floatland.\n" "Nilai = 2.0 (dapat lebih tinggi tergantung 'mgv7_np_floatland', selalu uji\n" "terlebih dahulu) membuat lapisan floatland padat (penuh)." @@ -2611,8 +2610,8 @@ msgid "" "allow them to upload and download data to/from the internet." msgstr "" "Daftar yang dipisahkan dengan koma dari mod yang dibolehkan untuk\n" -"mengakses HTTP API, membolehkan mereka untuk mengunggah dan\n" -"mengunduh data ke/dari internet." +"mengakses HTTP API, membolehkan mereka untuk mengunggah dan mengunduh data " +"ke/dari internet." #: src/settings_translation_file.cpp msgid "" @@ -2620,8 +2619,8 @@ msgid "" "functions even when mod security is on (via request_insecure_environment())." msgstr "" "Daftar yang dengan dipisahkan koma dari mod terpercaya yang diperbolehkan\n" -"untuk mengakses fungsi yang tidak aman bahkan ketika mod security aktif\n" -"(melalui request_insecure_environment())." +"untuk mengakses fungsi yang tidak aman bahkan ketika mod security aktif (" +"melalui request_insecure_environment())." #: src/settings_translation_file.cpp msgid "Command key" @@ -3479,8 +3478,8 @@ msgid "" msgstr "" "Atribut pembuatan peta global.\n" "Dalam pembuat peta v6, flag \"decorations\" mengatur semua hiasan, kecuali\n" -"pohon dan rumput rimba. Dalam pembuat peta lain, flag ini mengatur\n" -"semua dekorasi." +"pohon dan rumput rimba. Dalam pembuat peta lain, flag ini mengatur semua " +"dekorasi." #: src/settings_translation_file.cpp msgid "" @@ -3902,10 +3901,10 @@ msgid "" "you stand.\n" "This is helpful when working with nodeboxes in small areas." msgstr "" -"Jika dinyalakan, Anda dapat menaruh blok pada posisi (kaki + ketinggian " -"mata)\n" -"tempat Anda berdiri.\n" -"Ini berguna saat bekerja dengan kotak nodus (nodebox) dalam daerah sempit." +"Jika dinyalakan, Anda dapat menaruh blok pada posisi (kaki + ketinggian mata)" +"\n" +"tempat Anda berdiri. Ini berguna saat bekerja dengan kotak nodus (nodebox) " +"dalam daerah sempit." #: src/settings_translation_file.cpp msgid "" @@ -5673,6 +5672,7 @@ msgid "" "open." msgstr "" "Buka menu jeda saat jendela hilang fokus. Tidak menjeda jika formspec sedang " +"\n" "dibuka." #: src/settings_translation_file.cpp @@ -6016,12 +6016,11 @@ msgid "" "edge pixels when images are scaled by non-integer sizes." msgstr "" "Perbesar/perkecil GUI sesuai pengguna.\n" -"Menggunakan filter nearest-neighbor-anti-alias untuk\n" -"perbesar/perkecil GUI.\n" +"Menggunakan filter nearest-neighbor-anti-alias untuk perbesar/perkecil GUI.\n" "Ini akan menghaluskan beberapa tepi kasar dan\n" "mencampurkan piksel-piksel saat diperkecil dengan\n" -"mengaburkan beberapa piksel tepi saat diperkecil dengan\n" -"skala bukan bilangan bulat." +"mengaburkan beberapa piksel tepi saat diperkecil dengan skala bukan bilangan " +"bulat." #: src/settings_translation_file.cpp msgid "Screen height" @@ -6269,7 +6268,8 @@ msgstr "" "PERINGATAN! Tidak ada untungnya dan berbahaya jika menaikkan\n" "nilai ini di atas 5.\n" "Mengecilkan nilai ini akan meningkatkan kekerapan gua dan dungeon.\n" -"Mengubah nilai ini untuk kegunaan khusus, membiarkannya disarankan." +"Mengubah nilai ini untuk kegunaan khusus, membiarkannya \n" +"disarankan." #: src/settings_translation_file.cpp msgid "" @@ -6662,7 +6662,9 @@ msgstr "" msgid "" "The time in seconds it takes between repeated node placements when holding\n" "the place button." -msgstr "Jeda dalam detik antar-penaruhan berulang saat menekan tombol taruh." +msgstr "" +"Jeda dalam detik antar-penaruhan berulang saat menekan \n" +"tombol taruh." #: src/settings_translation_file.cpp msgid "The type of joystick" @@ -7174,8 +7176,8 @@ msgid "" "Y of mountain density gradient zero level. Used to shift mountains " "vertically." msgstr "" -"Titik acuan kemiringan kepadatan gunung pada sumbu Y.\n" -"Digunakan untuk menggeser gunung secara vertikal." +"Titik acuan kemiringan kepadatan gunung pada sumbu Y. Digunakan untuk " +"menggeser gunung secara vertikal." #: src/settings_translation_file.cpp msgid "Y of upper limit of large caves." From 0e75f85c41c987185af1224019d6f46bf6608edc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kornelijus=20Tvarijanavi=C4=8Dius?= Date: Sun, 21 Feb 2021 11:29:02 +0000 Subject: [PATCH 043/110] Translated using Weblate (Lithuanian) Currently translated at 16.0% (217 of 1353 strings) --- po/lt/minetest.po | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/po/lt/minetest.po b/po/lt/minetest.po index e9b9f97eb..98bd29471 100644 --- a/po/lt/minetest.po +++ b/po/lt/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Lithuanian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-09-23 07:41+0000\n" +"PO-Revision-Date: 2021-02-23 15:50+0000\n" "Last-Translator: Kornelijus Tvarijanavičius \n" "Language-Team: Lithuanian \n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" "%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.5\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -28,12 +28,10 @@ msgid "OK" msgstr "" #: builtin/fstk/ui.lua -#, fuzzy msgid "An error occurred in a Lua script:" -msgstr "Klaida įvyko Lua scenarijuje, tokiame kaip papildinys:" +msgstr "Įvyko klaida Lua skripte:" #: builtin/fstk/ui.lua -#, fuzzy msgid "An error occurred:" msgstr "Įvyko klaida:" @@ -67,7 +65,7 @@ msgstr "Mes palaikome tik $1 protokolo versiją." #: builtin/mainmenu/common.lua msgid "We support protocol versions between version $1 and $2." -msgstr "Mes palaikome protokolo versijas nuo $1 iki $2." +msgstr "Mes palaikome protokolo versijas tarp $1 ir $2." #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_create_world.lua @@ -82,16 +80,14 @@ msgstr "Atšaukti" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Dependencies:" -msgstr "Priklauso:" +msgstr "Priklauso nuo:" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" msgstr "Išjungti visus papildinius" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "Disable modpack" msgstr "Išjungti papildinį" @@ -129,9 +125,8 @@ msgid "No game description provided." msgstr "Nepateiktas žaidimo aprašymas." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No hard dependencies" -msgstr "Priklauso:" +msgstr "Nėra būtinų priklausomybių" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." @@ -177,9 +172,8 @@ msgid "" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Įkeliama..." +msgstr "$1 atsiunčiama..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." From 914b0117428ebab62abb9059458e50f15da5b92a Mon Sep 17 00:00:00 2001 From: ssantos Date: Sat, 20 Feb 2021 12:31:56 +0000 Subject: [PATCH 044/110] Translated using Weblate (Portuguese) Currently translated at 93.0% (1259 of 1353 strings) --- po/pt/minetest.po | 88 +++++++++++++++++++++-------------------------- 1 file changed, 40 insertions(+), 48 deletions(-) diff --git a/po/pt/minetest.po b/po/pt/minetest.po index e79a3841d..a9db6f57a 100644 --- a/po/pt/minetest.po +++ b/po/pt/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Portuguese (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2020-12-10 19:29+0000\n" +"PO-Revision-Date: 2021-02-23 15:50+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.5\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -154,52 +154,51 @@ msgstr "ativado" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" já existe. Gostaria de sobrescrevê-lo?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "As dependências de $1 e $2 serão instaladas." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 por $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"A descarregar $1,\n" +"$2 na fila" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "A descarregar..." +msgstr "A descarregar $1..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 dependências necessárias não foram encontradas." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 serão instalados e $2 dependências serão ignoradas." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "Todos os pacotes" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "Tecla já em uso" +msgstr "Já instalado" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Voltar ao menu principal" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Hospedar Jogo" +msgstr "Jogo base:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" @@ -223,14 +222,12 @@ msgid "Install" msgstr "Instalar" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Instalar" +msgstr "Instalar $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Dependências opcionais:" +msgstr "Instalar dependências ausentes" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -246,26 +243,24 @@ msgid "No results" msgstr "Sem resultados" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Atualizar" +msgstr "Sem atualizações" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Not found" -msgstr "Mutar som" +msgstr "Não encontrado" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Sobrescrever" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Verifique se o jogo base está correto." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "Enfileirado" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -281,11 +276,11 @@ msgstr "Atualizar" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Atualizar tudo [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Exibir mais informações num navegador da Web" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -767,15 +762,16 @@ msgid "Credits" msgstr "Méritos" #: builtin/mainmenu/tab_credits.lua -#, fuzzy msgid "Open User Data Directory" -msgstr "Selecione o diretório" +msgstr "Abrir o diretório de dados do utilizador" #: builtin/mainmenu/tab_credits.lua msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Abre o diretório que contém mundos, jogos, mods fornecidos pelo utilizador,\n" +"e pacotes de textura num gestor de ficheiros / explorador." #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" @@ -815,7 +811,7 @@ msgstr "Instalar jogos do ContentDB" #: builtin/mainmenu/tab_local.lua msgid "Name" -msgstr "" +msgstr "Nome" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -826,9 +822,8 @@ msgid "No world created or selected!" msgstr "Nenhum mundo criado ou seleccionado!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Password" -msgstr "Palavra-passe nova" +msgstr "Palavra-passe" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -839,9 +834,8 @@ msgid "Port" msgstr "Porta" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "Seleccionar Mundo:" +msgstr "Selecionar mods" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -993,9 +987,8 @@ msgid "Shaders" msgstr "Sombras" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Shaders (experimental)" -msgstr "Terrenos flutuantes (experimental)" +msgstr "Shaders (experimental)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" @@ -1195,7 +1188,7 @@ msgid "Continue" msgstr "Continuar" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1215,15 +1208,15 @@ msgstr "" "Controles:\n" "- %s: mover para a frente\n" "- %s: mover para trás\n" -"- %s: mover à esquerda\n" -"- %s: mover-se para a direita\n" +"- %s: mover para a esquerda\n" +"- %s: mover para a direita\n" "- %s: saltar/escalar\n" +"- %s: cavar/socar\n" +"- %s: colocar/usar\n" "- %s: esgueirar/descer\n" "- %s: soltar item\n" "- %s: inventário\n" "- Rato: virar/ver\n" -"- Rato à esquerda: escavar/dar soco\n" -"- Rato direito: posicionar/usar\n" "- Roda do rato: selecionar item\n" "- %s: bate-papo\n" @@ -1752,19 +1745,18 @@ msgid "Minimap hidden" msgstr "Minimapa escondido" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "Minimapa em modo radar, zoom 1x" +msgstr "Minimapa em modo radar, ampliação %dx" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "Minimapa em modo de superfície, zoom 1x" +msgstr "Minimapa em modo de superfície, ampliação %dx" #: src/client/minimap.cpp -#, fuzzy msgid "Minimap in texture mode" -msgstr "Tamanho mínimo da textura" +msgstr "Minimapa em modo de textura" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" @@ -2170,7 +2162,7 @@ msgstr "Intervalo do ABM" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "Orçamento de tempo do ABM" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" @@ -2676,7 +2668,7 @@ msgstr "Lista negra de flags do ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "Máximo de descargas simultâneas de ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB URL" From b88015d8e4fe51701f7940e80c068be018a5a06c Mon Sep 17 00:00:00 2001 From: Victor Barcelos Lacerda Date: Sun, 21 Feb 2021 20:18:04 +0000 Subject: [PATCH 045/110] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1353 of 1353 strings) --- po/pt_BR/minetest.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po index 579069fa6..6cb0ac983 100644 --- a/po/pt_BR/minetest.po +++ b/po/pt_BR/minetest.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" "PO-Revision-Date: 2021-02-23 15:50+0000\n" -"Last-Translator: Ronoaldo Pereira \n" +"Last-Translator: Victor Barcelos Lacerda \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" @@ -3608,7 +3608,7 @@ msgstr "Ruído de altura" #: src/settings_translation_file.cpp msgid "Height select noise" -msgstr "Parâmetros de ruido de seleção de altura do gerador de mundo v6" +msgstr "Parâmetros de ruido de seleção de altura" #: src/settings_translation_file.cpp msgid "High-precision FPU" @@ -3616,11 +3616,11 @@ msgstr "FPU de alta precisão" #: src/settings_translation_file.cpp msgid "Hill steepness" -msgstr "Esparsamento das colinas no gerador de mundo plano" +msgstr "Inclinação dos morros" #: src/settings_translation_file.cpp msgid "Hill threshold" -msgstr "Threshold das colinas no gerador de mundo plano" +msgstr "Limite das colinas no gerador de mundo plano" #: src/settings_translation_file.cpp msgid "Hilliness1 noise" @@ -4243,7 +4243,7 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Tecla para aumentar o alcance de visão.\n" +"Tecla para aumentar o volume.\n" "Consulte http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4315,7 +4315,7 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Tecla para pular. \n" +"Tecla para por o som em mudo. \n" "Consulte http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" From f0084d8494b6a5302983493cc013ff6b43046272 Mon Sep 17 00:00:00 2001 From: Osoitz Date: Mon, 22 Feb 2021 14:57:56 +0000 Subject: [PATCH 046/110] Translated using Weblate (Basque) Currently translated at 21.7% (294 of 1353 strings) --- po/eu/minetest.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/po/eu/minetest.po b/po/eu/minetest.po index 9add230cd..3d32a71e8 100644 --- a/po/eu/minetest.po +++ b/po/eu/minetest.po @@ -9,7 +9,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-30 21:13+0100\n" "PO-Revision-Date: 2021-02-23 15:50+0000\n" -"Last-Translator: aitzol berasategi \n" +"Last-Translator: Osoitz \n" "Language-Team: Basque \n" "Language: eu\n" @@ -265,7 +265,7 @@ msgstr "Mesedez, egiaztatu oinarri jokoa zuzena dela." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "Ilaran" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -971,11 +971,11 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Leaves" -msgstr "" +msgstr "Hosto opakoak" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Water" -msgstr "" +msgstr "Ur opakoa" #: builtin/mainmenu/tab_settings.lua msgid "Particles" @@ -1213,11 +1213,11 @@ msgstr "" #: src/client/game.cpp msgid "Creating client..." -msgstr "" +msgstr "Bezeroa sortzen..." #: src/client/game.cpp msgid "Creating server..." -msgstr "" +msgstr "Zerbitzaria sortzen..." #: src/client/game.cpp msgid "Debug info and profiler graph hidden" From f35b9be03df8c8263132bdf34b4d9d10c667065e Mon Sep 17 00:00:00 2001 From: "updatepo.sh" Date: Tue, 23 Feb 2021 19:02:39 +0100 Subject: [PATCH 047/110] Reset Chinese translations to previous state due to vandalism --- po/zh_CN/minetest.po | 1004 +++++++++++------------------- po/zh_TW/minetest.po | 1376 ++++++++++++++---------------------------- 2 files changed, 827 insertions(+), 1553 deletions(-) diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po index f1cf938ac..28a359fd4 100644 --- a/po/zh_CN/minetest.po +++ b/po/zh_CN/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Chinese (Simplified) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2021-01-24 16:19+0000\n" -"Last-Translator: AISS \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2021-01-20 15:10+0000\n" +"Last-Translator: ZhiZe-ZG \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" @@ -46,6 +46,10 @@ msgstr "重新连接" msgid "The server has requested a reconnect:" msgstr "服务器已请求重新连接:" +#: builtin/mainmenu/common.lua src/client/game.cpp +msgid "Loading..." +msgstr "载入中..." + #: builtin/mainmenu/common.lua msgid "Protocol version mismatch. " msgstr "协议版本不匹配。 " @@ -58,6 +62,10 @@ msgstr "服务器强制协议版本为 $1。 " msgid "Server supports protocol versions between $1 and $2. " msgstr "服务器支持协议版本为 $1 至 $2。 " +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "请尝试重新启用公共服务器列表并检查您的网络连接。" + #: builtin/mainmenu/common.lua msgid "We only support protocol version $1." msgstr "我们只支持协议版本 $1。" @@ -66,8 +74,7 @@ msgstr "我们只支持协议版本 $1。" msgid "We support protocol versions between version $1 and $2." msgstr "我们支持的协议版本为 $1 至 $2。" -#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua -#: builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_delete_content.lua #: builtin/mainmenu/dlg_delete_world.lua #: builtin/mainmenu/dlg_rename_modpack.lua @@ -77,8 +84,7 @@ msgstr "我们支持的协议版本为 $1 至 $2。" msgid "Cancel" msgstr "取消" -#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "依赖项:" @@ -149,55 +155,14 @@ msgstr "世界:" msgid "enabled" msgstr "启用" -#: builtin/mainmenu/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "" -"$1 downloading,\n" -"$2 queued" -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy -msgid "$1 downloading..." -msgstr "下载中..." - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "所有包" -#: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy -msgid "Already installed" -msgstr "按键已被占用" - #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "返回主菜单" -#: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy -msgid "Base Game:" -msgstr "主持游戏" - #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" msgstr "在没有cURL的情况下编译Minetest时,ContentDB不可用" @@ -219,16 +184,6 @@ msgstr "子游戏" msgid "Install" msgstr "安装" -#: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy -msgid "Install $1" -msgstr "安装" - -#: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy -msgid "Install missing dependencies" -msgstr "可选依赖项:" - #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -243,26 +198,9 @@ msgid "No results" msgstr "无结果" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy -msgid "No updates" -msgstr "更新" - -#: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy -msgid "Not found" -msgstr "静音" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Please check that the base game is correct." -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Queued" -msgstr "" +#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua +msgid "Search" +msgstr "搜索" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -277,12 +215,8 @@ msgid "Update" msgstr "更新" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" +msgid "View" +msgstr "视野" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -576,10 +510,6 @@ msgstr "恢复初始设置" msgid "Scale" msgstr "比例" -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Search" -msgstr "搜索" - #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Select directory" msgstr "选择目录" @@ -695,14 +625,6 @@ msgstr "无法将$1安装为mod" msgid "Unable to install a modpack as a $1" msgstr "无法将$1安装为mod包" -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "载入中..." - -#: builtin/mainmenu/serverlistmgr.lua -msgid "Try reenabling public serverlist and check your internet connection." -msgstr "请尝试重新启用公共服务器列表并检查您的网络连接。" - #: builtin/mainmenu/tab_content.lua msgid "Browse online content" msgstr "浏览在线内容" @@ -755,17 +677,6 @@ msgstr "核心开发者" msgid "Credits" msgstr "贡献者" -#: builtin/mainmenu/tab_credits.lua -#, fuzzy -msgid "Open User Data Directory" -msgstr "选择目录" - -#: builtin/mainmenu/tab_credits.lua -msgid "" -"Opens the directory that contains user-provided worlds, games, mods,\n" -"and texture packs in a file manager / explorer." -msgstr "" - #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "前贡献者" @@ -783,10 +694,14 @@ msgid "Bind Address" msgstr "绑定地址" #: builtin/mainmenu/tab_local.lua +msgid "Configure" +msgstr "配置" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua msgid "Creative Mode" msgstr "创造模式" -#: builtin/mainmenu/tab_local.lua +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua msgid "Enable Damage" msgstr "开启伤害" @@ -803,8 +718,8 @@ msgid "Install games from ContentDB" msgstr "从 ContentDB 安装游戏" #: builtin/mainmenu/tab_local.lua -msgid "Name" -msgstr "" +msgid "Name/Password" +msgstr "用户名/密码" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -814,11 +729,6 @@ msgstr "新建" msgid "No world created or selected!" msgstr "未创建或选择世界!" -#: builtin/mainmenu/tab_local.lua -#, fuzzy -msgid "Password" -msgstr "新密码" - #: builtin/mainmenu/tab_local.lua msgid "Play Game" msgstr "开始游戏" @@ -827,11 +737,6 @@ msgstr "开始游戏" msgid "Port" msgstr "端口" -#: builtin/mainmenu/tab_local.lua -#, fuzzy -msgid "Select Mods" -msgstr "选择世界:" - #: builtin/mainmenu/tab_local.lua msgid "Select World:" msgstr "选择世界:" @@ -848,23 +753,23 @@ msgstr "启动游戏" msgid "Address / Port" msgstr "地址/端口" -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "连接" -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Creative mode" msgstr "创造模式" -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Damage enabled" msgstr "伤害已启用" -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Del. Favorite" msgstr "删除收藏项" -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Favorite" msgstr "收藏项" @@ -872,16 +777,16 @@ msgstr "收藏项" msgid "Join Game" msgstr "加入游戏" -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Name / Password" msgstr "用户名/密码" -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Ping" msgstr "应答速度" #. ~ PvP = Player versus Player -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "PvP enabled" msgstr "启用玩家对战" @@ -909,6 +814,10 @@ msgstr "所有设置" msgid "Antialiasing:" msgstr "抗锯齿:" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "你确定要重置你的单人世界吗?" + #: builtin/mainmenu/tab_settings.lua msgid "Autosave Screen Size" msgstr "自动保存屏幕尺寸" @@ -917,6 +826,10 @@ msgstr "自动保存屏幕尺寸" msgid "Bilinear Filter" msgstr "双线性过滤" +#: builtin/mainmenu/tab_settings.lua +msgid "Bump Mapping" +msgstr "凹凸贴图" + #: builtin/mainmenu/tab_settings.lua src/client/game.cpp msgid "Change Keys" msgstr "更改键位设置" @@ -929,6 +842,10 @@ msgstr "连通玻璃" msgid "Fancy Leaves" msgstr "华丽树叶" +#: builtin/mainmenu/tab_settings.lua +msgid "Generate Normal Maps" +msgstr "生成法线贴图" + #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" msgstr "Mip 贴图" @@ -937,6 +854,10 @@ msgstr "Mip 贴图" msgid "Mipmap + Aniso. Filter" msgstr "Mip 贴图 + 各向异性过滤" +#: builtin/mainmenu/tab_settings.lua +msgid "No" +msgstr "否" + #: builtin/mainmenu/tab_settings.lua msgid "No Filter" msgstr "无过滤" @@ -965,10 +886,18 @@ msgstr "不透明树叶" msgid "Opaque Water" msgstr "不透明水" +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "视差遮蔽" + #: builtin/mainmenu/tab_settings.lua msgid "Particles" msgstr "粒子效果" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "重置单人世界" + #: builtin/mainmenu/tab_settings.lua msgid "Screen:" msgstr "屏幕:" @@ -981,11 +910,6 @@ msgstr "设置" msgid "Shaders" msgstr "着色器" -#: builtin/mainmenu/tab_settings.lua -#, fuzzy -msgid "Shaders (experimental)" -msgstr "悬空岛(实验性)" - #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" msgstr "着色器 (不可用)" @@ -1030,6 +954,22 @@ msgstr "摇动流体" msgid "Waving Plants" msgstr "摇摆植物" +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "是" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Config mods" +msgstr "配置 mod" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Main" +msgstr "主菜单" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "单人游戏" + #: src/client/client.cpp msgid "Connection timed out." msgstr "连接超时。" @@ -1184,20 +1124,20 @@ msgid "Continue" msgstr "继续" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" "- %s: move backwards\n" "- %s: move left\n" "- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" +"- %s: jump/climb\n" +"- %s: sneak/go down\n" "- %s: drop item\n" "- %s: inventory\n" "- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" "- Mouse wheel: select item\n" "- %s: chat\n" msgstr "" @@ -1344,6 +1284,34 @@ msgstr "MiB/s" msgid "Minimap currently disabled by game or mod" msgstr "小地图被当前子游戏或者 mod 禁用" +#: src/client/game.cpp +msgid "Minimap hidden" +msgstr "小地图已隐藏" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x1" +msgstr "雷达小地图,放大至一倍" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x2" +msgstr "雷达小地图,放大至两倍" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x4" +msgstr "雷达小地图, 放大至四倍" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x1" +msgstr "地表模式小地图, 放大至一倍" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x2" +msgstr "地表模式小地图, 放大至两倍" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x4" +msgstr "地表模式小地图, 放大至四倍" + #: src/client/game.cpp msgid "Noclip mode disabled" msgstr "穿墙模式已禁用" @@ -1736,25 +1704,6 @@ msgstr "X键2" msgid "Zoom" msgstr "缩放" -#: src/client/minimap.cpp -msgid "Minimap hidden" -msgstr "小地图已隐藏" - -#: src/client/minimap.cpp -#, fuzzy, c-format -msgid "Minimap in radar mode, Zoom x%d" -msgstr "雷达小地图,放大至一倍" - -#: src/client/minimap.cpp -#, fuzzy, c-format -msgid "Minimap in surface mode, Zoom x%d" -msgstr "地表模式小地图, 放大至一倍" - -#: src/client/minimap.cpp -#, fuzzy -msgid "Minimap in texture mode" -msgstr "最小材质大小" - #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "密码不匹配!" @@ -2020,6 +1969,14 @@ msgstr "" "默认值为适合\n" "孤岛的垂直压扁形状,将所有3个数字设置为相等以呈现原始形状。" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" +"0 = 利用梯度信息进行视差遮蔽 (较快).\n" +"1 = 浮雕映射 (较慢, 但准确)." + #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of ridged mountains." msgstr "控制山脊形状/大小的2D噪声。" @@ -2144,10 +2101,6 @@ msgstr "当关闭服务器时,发送给所有客户端的信息。" msgid "ABM interval" msgstr "ABM间隔" -#: src/settings_translation_file.cpp -msgid "ABM time budget" -msgstr "" - #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" msgstr "待显示方块队列的绝对限制" @@ -2206,10 +2159,10 @@ msgid "" "to be sure) creates a solid floatland layer." msgstr "" "调整悬空岛层的密度。\n" -"增大数值可增加密度,可以是正值或负值。\n" -"值=0.0:50% o的体积是平原。\n" -"值 = 2.0 (可以更高,取决于'mgv7_np_floatland'。\n" -"总是测试以确保,创建一个坚实的悬空岛层。" +"增加值以增加密度。可以是正值或负值。\n" +"值等于0.0, 容积的50%是floatland。\n" +"值等于2.0 ,(可以更高,取决于 'mgv7_np_floatland' ,始终测试以确定)\n" +"创建一个坚实的悬空岛层。" #: src/settings_translation_file.cpp msgid "Advanced" @@ -2404,6 +2357,10 @@ msgstr "在玩家内部搭建" msgid "Builtin" msgstr "内置" +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "凹凸贴图" + #: src/settings_translation_file.cpp msgid "" "Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n" @@ -2480,6 +2437,20 @@ msgstr "" "亮度曲线范围中心。\n" "0.0为最小值时1.0为最大值。" +#: src/settings_translation_file.cpp +msgid "" +"Changes the main menu UI:\n" +"- Full: Multiple singleplayer worlds, game choice, texture pack chooser, " +"etc.\n" +"- Simple: One singleplayer world, no game or texture pack choosers. May " +"be\n" +"necessary for smaller screens." +msgstr "" +"主菜单UI的变化:\n" +"- 完整 多个单人世界,子游戏选择,材质包选择器等。\n" +"- 简单:单个单人世界,无子游戏材质包选择器。可能\n" +"需要用于小屏幕。" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "聊天字体大小" @@ -2641,10 +2612,6 @@ msgstr "控制台高度" msgid "ContentDB Flag Blacklist" msgstr "ContentDB标签黑名单" -#: src/settings_translation_file.cpp -msgid "ContentDB Max Concurrent Downloads" -msgstr "" - #: src/settings_translation_file.cpp msgid "ContentDB URL" msgstr "ContentDB网址" @@ -2710,10 +2677,7 @@ msgid "Crosshair alpha" msgstr "准星透明" #: src/settings_translation_file.cpp -#, fuzzy -msgid "" -"Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +msgid "Crosshair alpha (opaqueness, between 0 and 255)." msgstr "准星不透明度(0-255)。" #: src/settings_translation_file.cpp @@ -2721,10 +2685,8 @@ msgid "Crosshair color" msgstr "准星颜色" #: src/settings_translation_file.cpp -msgid "" -"Crosshair color (R,G,B).\n" -"Also controls the object crosshair color" -msgstr "" +msgid "Crosshair color (R,G,B)." +msgstr "准星颜色(红,绿,蓝)。" #: src/settings_translation_file.cpp msgid "DPI" @@ -2826,6 +2788,14 @@ msgstr "定义大尺寸的河道结构。" msgid "Defines location and terrain of optional hills and lakes." msgstr "定义所选的山和湖的位置与地形。" +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" +"定义材质采样步骤。\n" +"数值越高常态贴图越平滑。" + #: src/settings_translation_file.cpp msgid "Defines the base ground level." msgstr "定义基准地面高度." @@ -2900,11 +2870,6 @@ msgstr "" msgid "Desynchronize block animation" msgstr "去同步块动画" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Dig key" -msgstr "右方向键" - #: src/settings_translation_file.cpp msgid "Digging particles" msgstr "挖掘粒子效果" @@ -3078,6 +3043,17 @@ msgstr "" msgid "Enables animation of inventory items." msgstr "启用物品清单动画。" +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" +"启用材质的凹凸贴图效果。需要材质包支持法线贴图,\n" +"否则将自动生成法线。\n" +"需要启用着色器。" + #: src/settings_translation_file.cpp msgid "Enables caching of facedir rotated meshes." msgstr "启用翻转网状物facedir的缓存。" @@ -3086,6 +3062,22 @@ msgstr "启用翻转网状物facedir的缓存。" msgid "Enables minimap." msgstr "启用小地图。" +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" +"启用即时法线贴图生成(浮雕效果)。\n" +"需要启用凹凸贴图。" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" +"启用视差遮蔽贴图。\n" +"需要启用着色器。" + #: src/settings_translation_file.cpp msgid "" "Enables the sound system.\n" @@ -3106,6 +3098,14 @@ msgstr "打印引擎性能分析数据间隔" msgid "Entity methods" msgstr "实体方法" +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" +"实验性选项,设为大于 0 的数字时可能导致\n" +"块之间出现可见空间。" + #: src/settings_translation_file.cpp msgid "" "Exponent of the floatland tapering. Alters the tapering behaviour.\n" @@ -3116,16 +3116,14 @@ msgid "" "flatter lowlands, suitable for a solid floatland layer." msgstr "" "悬空岛锥度的指数,更改锥度的行为。\n" -"值等于1.0 ,创建一个统一的,线性锥度。\n" -"值大于1.0 ,创建一个平滑的、合适的锥度,\n" -"默认分隔的悬空岛。\n" -"值小于1.0,(例如0.25)创建一个带有平坦低地的更加轮廓分明的表面级别。\n" +"值等于1.0,创建一个统一的,线性锥度。\n" +"值大于1.0,创建一个平滑的、合适的锥度,默认分隔的悬空岛。\n" +"值小于1.0,(例如0.25)创建一个带有平坦低地的更加轮廓分明的表面级别,\n" "适用于固体悬空岛层。" #: src/settings_translation_file.cpp -#, fuzzy -msgid "FPS when unfocused or paused" -msgstr "游戏暂停时最高 FPS。" +msgid "FPS in pause menu" +msgstr "暂停菜单 FPS" #: src/settings_translation_file.cpp msgid "FSAA" @@ -3442,6 +3440,10 @@ msgstr "GUI缩放过滤器" msgid "GUI scaling filter txr2img" msgstr "GUI缩放过滤器 txr2img" +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "生成发现贴图" + #: src/settings_translation_file.cpp msgid "Global callbacks" msgstr "全局回调" @@ -3501,11 +3503,10 @@ msgid "HUD toggle key" msgstr "HUD启用/禁用键" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" -"- none: Do not log deprecated calls\n" -"- log: mimic and log backtrace of deprecated call (default).\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" "处理已弃用的 Lua API 调用:\n" @@ -3877,8 +3878,8 @@ msgid "" "limited\n" "to this distance from the player to the node." msgstr "" -"如果客户端mod方块范围限制启用,限制get_node至玩家。\n" -"到方块的距离。" +"如果客户端mod方块范围限制启用,限制get_node至玩家\n" +"到方块的距离" #: src/settings_translation_file.cpp msgid "" @@ -4022,11 +4023,6 @@ msgstr "摇杆 ID" msgid "Joystick button repetition interval" msgstr "摇杆按钮重复间隔" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Joystick deadzone" -msgstr "摇杆类型" - #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" msgstr "摇杆头灵敏度" @@ -4129,17 +4125,6 @@ msgstr "" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "" -"Key for digging.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" -"跳跃键。\n" -"见http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" - #: src/settings_translation_file.cpp msgid "" "Key for dropping the currently selected item.\n" @@ -4282,17 +4267,6 @@ msgstr "" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "" -"Key for placing.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" -"跳跃键。\n" -"见http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" - #: src/settings_translation_file.cpp msgid "" "Key for selecting the 11th hotbar slot.\n" @@ -5037,6 +5011,10 @@ msgstr "悬空岛的Y值下限。" msgid "Main menu script" msgstr "主菜单脚本" +#: src/settings_translation_file.cpp +msgid "Main menu style" +msgstr "主菜单样式" + #: src/settings_translation_file.cpp msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." @@ -5050,14 +5028,6 @@ msgstr "使DirectX和LuaJIT一起工作。如果这导致了问题禁用它。" msgid "Makes all liquids opaque" msgstr "使所有液体不透明" -#: src/settings_translation_file.cpp -msgid "Map Compression Level for Disk Storage" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Map Compression Level for Network Transfer" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map directory" msgstr "地图目录" @@ -5241,8 +5211,7 @@ msgid "Maximum FPS" msgstr "最大 FPS" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Maximum FPS when the window is not focused, or when the game is paused." +msgid "Maximum FPS when game is paused." msgstr "游戏暂停时最高 FPS。" #: src/settings_translation_file.cpp @@ -5299,13 +5268,6 @@ msgstr "" "在从文件中加载时加入队列的最大方块数。\n" "此限制对每位玩家强制执行。" -#: src/settings_translation_file.cpp -msgid "" -"Maximum number of concurrent downloads. Downloads exceeding this limit will " -"be queued.\n" -"This should be lower than curl_parallel_limit." -msgstr "" - #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." msgstr "强制载入地图块最大数量。" @@ -5555,6 +5517,14 @@ msgstr "NodeTimer间隔" msgid "Noises" msgstr "噪声" +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "法线贴图采样" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "法线贴图强度" + #: src/settings_translation_file.cpp msgid "Number of emerge threads" msgstr "生产线程数" @@ -5593,6 +5563,10 @@ msgstr "" "这是与sqlite交互和内存消耗的平衡。\n" "(4096=100MB,按经验法则)。" +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "视差遮蔽迭代数。" + #: src/settings_translation_file.cpp msgid "Online Content Repository" msgstr "在线内容仓库(ContentDB)" @@ -5620,6 +5594,34 @@ msgstr "" "当窗口焦点丢失是打开暂停菜单。如果游戏内窗口打开,\n" "则不暂停。" +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "视差遮蔽效果的整体斜纹,通常为比例/2。" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "视差遮蔽效果的总体比例。" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "视差遮蔽" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "视差遮蔽偏移" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "视差遮蔽迭代" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "视差遮蔽模式" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion scale" +msgstr "视差遮蔽比例" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5699,16 +5701,6 @@ msgstr "俯仰移动键" msgid "Pitch move mode" msgstr "俯仰移动模式" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Place key" -msgstr "飞行键" - -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Place repetition interval" -msgstr "右击重复间隔" - #: src/settings_translation_file.cpp msgid "" "Player is able to fly without being affected by gravity.\n" @@ -5890,6 +5882,10 @@ msgstr "山脊大小噪声" msgid "Right key" msgstr "右方向键" +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "右击重复间隔" + #: src/settings_translation_file.cpp msgid "River channel depth" msgstr "河道深度" @@ -6179,15 +6175,6 @@ msgstr "显示调试信息" msgid "Show entity selection boxes" msgstr "显示实体选择框" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "" -"Show entity selection boxes\n" -"A restart is required after changing this." -msgstr "" -"设定语言。留空以使用系统语言。\n" -"变更后须重新启动。" - #: src/settings_translation_file.cpp msgid "Shutdown message" msgstr "关闭消息" @@ -6337,6 +6324,10 @@ msgstr "单步山峰广度噪声" msgid "Strength of 3D mode parallax." msgstr "3D 模式视差的强度。" +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "生成的一般地图强度。" + #: src/settings_translation_file.cpp msgid "" "Strength of light curve boost.\n" @@ -6444,46 +6435,34 @@ msgid "" "this option allows enforcing it for certain node types. Note though that\n" "that is considered EXPERIMENTAL and may not work properly." msgstr "" -"节点上的纹理可以与该节点对齐,也可以与世界对齐。\n" -"前一种模式适合机器,家具等更好的东西,而\n" -"后者使楼梯和微区块更适合周围环境。\n" -"但是,由于这种可能性是新的,因此较旧的服务器可能不会使用,\n" -"此选项允许对某些节点类型强制实施。 注意尽管\n" -"被认为是实验性的,可能无法正常工作。" - -#: src/settings_translation_file.cpp -msgid "The URL for the content repository" -msgstr "内容存储库的 URL" #: src/settings_translation_file.cpp #, fuzzy -msgid "The deadzone of the joystick" -msgstr "要使用的操纵杆的标识符" +msgid "The URL for the content repository" +msgstr "内容存储库的 URL" #: src/settings_translation_file.cpp msgid "" "The default format in which profiles are being saved,\n" "when calling `/profiler save [format]` without format." msgstr "" -"保存配置文件的默认格式,\n" -"调用`/profiler save[format]`时不带格式。" #: src/settings_translation_file.cpp msgid "The depth of dirt or other biome filler node." -msgstr "泥土深度或其他生物群系过滤节点。" +msgstr "泥土深度或其他生物群系过滤节点" #: src/settings_translation_file.cpp msgid "" "The file path relative to your worldpath in which profiles will be saved to." -msgstr "配置文件将保存到,您的世界路径的文件路径。" +msgstr "" #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" -msgstr "要使用的操纵杆的标识符" +msgstr "" #: src/settings_translation_file.cpp msgid "The length in pixels it takes for touch screen interaction to start." -msgstr "开始触摸屏交互所需的长度(以像素为单位)。" +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -6493,11 +6472,6 @@ msgid "" "Default is 1.0 (1/2 node).\n" "Requires waving liquids to be enabled." msgstr "" -"波浪状液体表面的最大高度。\n" -"4.0 =波高是两个节点。\n" -"0.0 =波形完全不移动。\n" -"默认值为1.0(1/2节点)。\n" -"需要启用波状液体。" #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." @@ -6521,35 +6495,22 @@ msgid "" "maintained.\n" "This should be configured together with active_object_send_range_blocks." msgstr "" -"每个玩家周围的方块体积的半径受制于\n" -"活动块内容,以mapblock(16个节点)表示。\n" -"在活动块中,将加载对象并运行ABM。\n" -"这也是保持活动对象(生物)的最小范围。\n" -"这应该与active_object_send_range_blocks一起配置。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end for Irrlicht.\n" "A restart is required after changing this.\n" "Note: On Android, stick with OGLES1 if unsure! App may fail to start " "otherwise.\n" -"On other platforms, OpenGL is recommended.\n" -"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" +"On other platforms, OpenGL is recommended, and it’s the only driver with\n" +"shader support currently." msgstr "" -"Irrlicht的渲染后端。\n" -"更改此设置后需要重新启动。\n" -"注意:在Android上,如果不确定,请坚持使用OGLES1! 应用可能无法启动,否则。\n" -"在其他平台上,建议使用OpenGL,它是唯一具有以下功能的驱动程序。\n" -"目前支持着色器。" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" "ingame view frustum around." msgstr "" -"操纵杆轴的灵敏度,用于移动\n" -"在游戏中查看周围 frustum。" #: src/settings_translation_file.cpp msgid "" @@ -6558,10 +6519,6 @@ msgid "" "setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" "set to the nearest valid value." msgstr "" -"节点环境遮挡阴影的强度(暗度)。\n" -"越低越暗,越高越亮。该值的有效范围是\n" -"0.25至4.0(含)。如果该值超出范围,则为\n" -"设置为最接近的有效值。" #: src/settings_translation_file.cpp msgid "" @@ -6569,36 +6526,23 @@ msgid "" "capacity until an attempt is made to decrease its size by dumping old queue\n" "items. A value of 0 disables the functionality." msgstr "" -"液体波动可能增长超过处理能力的时间(以秒为单位)。\n" -"尝试通过旧液体波动项来减少其大小。\n" -"数值为0将禁用该功能。" - -#: src/settings_translation_file.cpp -msgid "" -"The time budget allowed for ABMs to execute on each step\n" -"(as a fraction of the ABM Interval)" -msgstr "" #: src/settings_translation_file.cpp msgid "" "The time in seconds it takes between repeated events\n" "when holding down a joystick button combination." msgstr "" -"按住操纵手柄按钮组合时,\n" -"重复事件之间的时间(以秒为单位)。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" -"The time in seconds it takes between repeated node placements when holding\n" -"the place button." +"The time in seconds it takes between repeated right clicks when holding the " +"right\n" +"mouse button." msgstr "" -"按住鼠标右键时两次重复单击之间所花费的时间(以秒为单位)\n" -"鼠标按钮。" #: src/settings_translation_file.cpp msgid "The type of joystick" -msgstr "手柄类型" +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -6611,8 +6555,9 @@ msgstr "" "已启用“ altitude_dry”。" #: src/settings_translation_file.cpp +#, fuzzy msgid "Third of 4 2D noises that together define hill/mountain range height." -msgstr "四种2D波状定义了,频率,幅度,噪声,颜色。" +msgstr "定义tunnels的最初2个3D噪音。" #: src/settings_translation_file.cpp msgid "" @@ -6645,8 +6590,6 @@ msgid "" "This determines how long they are slowed down after placing or removing a " "node." msgstr "" -"为了减少延迟,当一个玩家正在构建某个东西时,阻塞传输会减慢。\n" -"这决定了放置或删除节点后它们的速度减慢的时间。" #: src/settings_translation_file.cpp msgid "Toggle camera mode key" @@ -6687,8 +6630,9 @@ msgid "URL to the server list displayed in the Multiplayer Tab." msgstr "显示在“多人游戏”选项卡中的服务器列表的URL。" #: src/settings_translation_file.cpp +#, fuzzy msgid "Undersampling" -msgstr "采集" +msgstr "欠采样" #: src/settings_translation_file.cpp msgid "" @@ -6698,10 +6642,6 @@ msgid "" "image.\n" "Higher values result in a less detailed image." msgstr "" -"采集类似于使用较低的屏幕分辨率,但是它适用\n" -"仅限于游戏世界,保持GUI完整。\n" -"它应该以不那么详细的图像为代价显着提高性能。\n" -"较高的值会导致图像不太清晰。" #: src/settings_translation_file.cpp msgid "Unlimited player transfer distance" @@ -6724,16 +6664,17 @@ msgid "Use 3D cloud look instead of flat." msgstr "使用 3D 云彩,而不是看起来是平面的。" #: src/settings_translation_file.cpp +#, fuzzy msgid "Use a cloud animation for the main menu background." msgstr "主菜单背景使用云动画。" #: src/settings_translation_file.cpp msgid "Use anisotropic filtering when viewing at textures from an angle." -msgstr "从某个角度查看纹理时使用各向异性过滤。" +msgstr "" #: src/settings_translation_file.cpp msgid "Use bilinear filtering when scaling textures." -msgstr "缩放纹理时使用双线性过滤。" +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -6741,24 +6682,10 @@ msgid "" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" -"使用mip映射缩放纹理。可能会稍微提高性能,\n" -"尤其是使用高分辨率纹理包时。\n" -"不支持Gamma校正缩小。" - -#: src/settings_translation_file.cpp -msgid "" -"Use multi-sample antialiasing (MSAA) to smooth out block edges.\n" -"This algorithm smooths out the 3D viewport while keeping the image sharp,\n" -"but it doesn't affect the insides of textures\n" -"(which is especially noticeable with transparent textures).\n" -"Visible spaces appear between nodes when shaders are disabled.\n" -"If set to 0, MSAA is disabled.\n" -"A restart is required after changing this option." -msgstr "" #: src/settings_translation_file.cpp msgid "Use trilinear filtering when scaling textures." -msgstr "缩放纹理时使用三线过滤。" +msgstr "" #: src/settings_translation_file.cpp msgid "VBO" @@ -6773,8 +6700,9 @@ msgid "Valley depth" msgstr "山谷深度" #: src/settings_translation_file.cpp +#, fuzzy msgid "Valley fill" -msgstr "山谷填塞" +msgstr "山谷弥漫" #: src/settings_translation_file.cpp msgid "Valley profile" @@ -6794,35 +6722,32 @@ msgstr "最大山体高度的变化(以节点为单位)。" #: src/settings_translation_file.cpp msgid "Variation of number of caves." -msgstr "洞穴数量的变化。" +msgstr "洞口数量的变化。" #: src/settings_translation_file.cpp msgid "" "Variation of terrain vertical scale.\n" "When noise is < -0.55 terrain is near-flat." msgstr "" -"地形垂直比例的变化。\n" -"当比例< -0.55 地形接近平坦。" #: src/settings_translation_file.cpp msgid "Varies depth of biome surface nodes." -msgstr "改变生物群落表面方块的深度。" +msgstr "" #: src/settings_translation_file.cpp msgid "" "Varies roughness of terrain.\n" "Defines the 'persistence' value for terrain_base and terrain_alt noises." msgstr "" -"改变地形的粗糙度。\n" -"定义 terrain_base和terrain_alt光影的“持久性”值。" #: src/settings_translation_file.cpp +#, fuzzy msgid "Varies steepness of cliffs." msgstr "控制山丘的坡度/高度。" #: src/settings_translation_file.cpp msgid "Vertical climbing speed, in nodes per second." -msgstr "垂直爬升速度,以节点/秒表示。" +msgstr "" #: src/settings_translation_file.cpp msgid "Vertical screen synchronization." @@ -6833,6 +6758,7 @@ msgid "Video driver" msgstr "视频驱动程序" #: src/settings_translation_file.cpp +#, fuzzy msgid "View bobbing factor" msgstr "范围摇动" @@ -6858,13 +6784,14 @@ msgstr "可视范围" #: src/settings_translation_file.cpp msgid "Virtual joystick triggers aux button" -msgstr "虚拟操纵手柄触发辅助按钮" +msgstr "" #: src/settings_translation_file.cpp msgid "Volume" msgstr "音量" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Volume of all sounds.\n" "Requires the sound system to be enabled." @@ -6880,11 +6807,6 @@ msgid "" "Has no effect on 3D fractals.\n" "Range roughly -2 to 2." msgstr "" -"生成的 4D 分形 3D 切片的 W 坐标。\n" -"确定生成的 4D 形状的 3D 切片。\n" -"更改分形的形状。\n" -"对 3D 分形没有影响。\n" -"范围大约 -2 到 2。" #: src/settings_translation_file.cpp msgid "Walking and flying speed, in nodes per second." @@ -6903,8 +6825,9 @@ msgid "Water level" msgstr "水位" #: src/settings_translation_file.cpp +#, fuzzy msgid "Water surface level of the world." -msgstr "地表水面高度。" +msgstr "世界水平面级别。" #: src/settings_translation_file.cpp msgid "Waving Nodes" @@ -6940,9 +6863,6 @@ msgid "" "filtered in software, but some images are generated directly\n" "to hardware (e.g. render-to-texture for nodes in inventory)." msgstr "" -"当gui_scaling_filter为 true 时,所有 GUI 映像都需要\n" -"在软件中过滤,但一些图像是直接生成的\n" -"硬件(例如,库存中材质的渲染到纹理)。" #: src/settings_translation_file.cpp msgid "" @@ -6951,10 +6871,6 @@ msgid "" "to the old scaling method, for video drivers that don't\n" "properly support downloading textures back from hardware." msgstr "" -"当gui_scaling_filter_txr2img为 true 时,复制这些图像\n" -"从硬件到软件进行扩展。 当 false 时,回退\n" -"到旧的缩放方法,对于不\n" -"正确支持从硬件下载纹理。" #: src/settings_translation_file.cpp msgid "" @@ -6968,15 +6884,6 @@ msgid "" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." msgstr "" -"使用双线性/三线性/各向异性滤镜时,低分辨率纹理。\n" -"可以被模糊化,因此可以使用最近的邻居自动对其进行放大。\n" -"插值以保留清晰像素。 设置最小纹理大小。\n" -"用于高档纹理; 较高的值看起来更锐利,但需要更多。\n" -"记忆。 建议使用2的幂。 将此值设置为大于1可能不会。\n" -"除非双线性/三线性/各向异性过滤是。\n" -"已启用。\n" -"这也用作与世界对齐的基本材质纹理大小。\n" -"纹理自动缩放。" #: src/settings_translation_file.cpp msgid "" @@ -6984,24 +6891,20 @@ msgid "" "in.\n" "If disabled, bitmap and XML vectors fonts are used instead." msgstr "" -"是否使用 FreeType 字体,都需要在 中编译 FreeType 支持。\n" -"如果禁用,则使用位图和 XML 矢量字体。" #: src/settings_translation_file.cpp msgid "Whether node texture animations should be desynchronized per mapblock." -msgstr "节点纹理动画是否应按地图块不同步。" +msgstr "" #: src/settings_translation_file.cpp msgid "" "Whether players are shown to clients without any range limit.\n" "Deprecated, use the setting player_transfer_distance instead." msgstr "" -"玩家是否显示给客户端没有任何范围限制。\n" -"已弃用,请player_transfer_distance设置。" #: src/settings_translation_file.cpp msgid "Whether to allow players to damage and kill each other." -msgstr "是否允许玩家互相伤害和杀死。" +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -7022,10 +6925,6 @@ msgid "" "In-game, you can toggle the mute state with the mute key or by using the\n" "pause menu." msgstr "" -"是否将声音静音。您可随时取消静音声音,除非\n" -"音响系统已禁用(enable_sound=false)。\n" -"在游戏中,您可以使用静音键切换静音状态,或者使用\n" -"暂停菜单。" #: src/settings_translation_file.cpp msgid "" @@ -7037,8 +6936,9 @@ msgid "Width component of the initial window size." msgstr "初始窗口大小的宽度。" #: src/settings_translation_file.cpp +#, fuzzy msgid "Width of the selection box lines around nodes." -msgstr "节点周围的选择框线的宽度。" +msgstr "结点周围的选择框的线宽。" #: src/settings_translation_file.cpp msgid "" @@ -7046,8 +6946,6 @@ msgid "" "background.\n" "Contains the same information as the file debug.txt (default name)." msgstr "" -"仅适用于 Windows 系统:在命令行中窗口中启动 Minetest。\n" -"与 debug.txt(默认名称)文件包含相同的调试信息。" #: src/settings_translation_file.cpp msgid "" @@ -7070,16 +6968,10 @@ msgid "" "See also texture_min_size.\n" "Warning: This option is EXPERIMENTAL!" msgstr "" -"世界对齐的纹理可以缩放以跨越多个节点。 然而,\n" -"服务器可能不会同意您想要的请求,特别是如果您使用\n" -"专门设计的纹理包; 使用此选项,客户端尝试\n" -"根据纹理大小自动确定比例。\n" -"另请参见texture_min_size。\n" -"警告:此选项是实验性的!" #: src/settings_translation_file.cpp msgid "World-aligned textures mode" -msgstr "世界对齐纹理模式" +msgstr "" #: src/settings_translation_file.cpp msgid "Y of flat ground." @@ -7089,15 +6981,16 @@ msgstr "平地的 Y。" msgid "" "Y of mountain density gradient zero level. Used to shift mountains " "vertically." -msgstr "Y的山地密度梯度为零。用于垂直移动山脉。" +msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "Y of upper limit of large caves." -msgstr "大型随机洞穴的Y坐标最大值。" +msgstr "大型随机洞穴的Y轴最大值。" #: src/settings_translation_file.cpp msgid "Y-distance over which caverns expand to full size." -msgstr "洞穴扩大到最大尺寸的Y轴距离。" +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -7106,22 +6999,18 @@ msgid "" "For a solid floatland layer, this controls the height of hills/mountains.\n" "Must be less than or equal to half the distance between the Y limits." msgstr "" -"悬空岛从最大密度到无密度区域的Y 轴距离。\n" -"锥形从 Y 轴界限开始。\n" -"对于实心浮地图层,这控制山/山的高度。\n" -"必须小于或等于 Y 限制之间一半的距离。" #: src/settings_translation_file.cpp msgid "Y-level of average terrain surface." -msgstr "地表平均Y坐标。" +msgstr "" #: src/settings_translation_file.cpp msgid "Y-level of cavern upper limit." -msgstr "洞穴上限的Y坐标。" +msgstr "" #: src/settings_translation_file.cpp msgid "Y-level of higher terrain that creates cliffs." -msgstr "形成悬崖的更高地形的Y坐标。" +msgstr "" #: src/settings_translation_file.cpp msgid "Y-level of lower terrain and seabed." @@ -7131,24 +7020,6 @@ msgstr "较低地形与海底的Y坐标。" msgid "Y-level of seabed." msgstr "海底的Y坐标。" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURL 文件下载超时" @@ -7161,51 +7032,64 @@ msgstr "cURL 并发限制" msgid "cURL timeout" msgstr "cURL 超时" -#~ msgid "" -#~ "0 = parallax occlusion with slope information (faster).\n" -#~ "1 = relief mapping (slower, more accurate)." -#~ msgstr "" -#~ "0 = 利用梯度信息进行视差遮蔽 (较快).\n" -#~ "1 = 浮雕映射 (较慢, 但准确)." +#~ msgid "Toggle Cinematic" +#~ msgstr "切换电影模式" + +#~ msgid "Select Package File:" +#~ msgstr "选择包文件:" + +#, fuzzy +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "大型随机洞穴的Y轴最大值。" + +#~ msgid "Waving Water" +#~ msgstr "流动的水面" + +#~ msgid "Waving water" +#~ msgstr "摇动水" + +#~ msgid "This font will be used for certain languages." +#~ msgstr "用于特定语言的字体。" + +#, fuzzy +#~ msgid "Shadow limit" +#~ msgstr "地图块限制" + +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "TrueType 字体或位图的路径。" + +#, fuzzy +#~ msgid "Lava depth" +#~ msgstr "巨大洞穴深度" + +#~ msgid "IPv6 support." +#~ msgstr "IPv6 支持。" + +#~ msgid "Gamma" +#~ msgstr "伽马" + +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "字体阴影不透明度(0-255)。" + +#~ msgid "Enables filmic tone mapping" +#~ msgstr "启用电影基调映射" + +#~ msgid "Enable VBO" +#~ msgstr "启用 VBO" #~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." #~ msgstr "" -#~ "调整亮度表的伽玛编码。较高的数值会较亮。\n" -#~ "这个设定是给客户端使用的,会被服务器忽略。" +#~ "定义 floatland 平滑地形的区域。\n" +#~ "当噪音0时, 平滑的 floatlands 发生。" -#~ msgid "Are you sure to reset your singleplayer world?" -#~ msgstr "你确定要重置你的单人世界吗?" +#, fuzzy +#~ msgid "Darkness sharpness" +#~ msgstr "地图生成器平面湖坡度" -#~ msgid "Back" -#~ msgstr "后退" - -#~ msgid "Bump Mapping" -#~ msgstr "凹凸贴图" - -#~ msgid "Bumpmapping" -#~ msgstr "凹凸贴图" - -#~ msgid "" -#~ "Changes the main menu UI:\n" -#~ "- Full: Multiple singleplayer worlds, game choice, texture pack " -#~ "chooser, etc.\n" -#~ "- Simple: One singleplayer world, no game or texture pack choosers. May " -#~ "be\n" -#~ "necessary for smaller screens." -#~ msgstr "" -#~ "主菜单UI的变化:\n" -#~ "- 完整 多个单人世界,子游戏选择,材质包选择器等。\n" -#~ "- 简单:单个单人世界,无子游戏材质包选择器。可能\n" -#~ "需要用于小屏幕。" - -#~ msgid "Config mods" -#~ msgstr "配置 mod" - -#~ msgid "Configure" -#~ msgstr "配置" +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "控制隧道宽度,较小的值创建更宽的隧道。" #, fuzzy #~ msgid "" @@ -7215,198 +7099,28 @@ msgstr "cURL 超时" #~ "控制 floatland 地形的密度。\n" #~ "是添加到 \"np_mountain\" 噪声值的偏移量。" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "控制隧道宽度,较小的值创建更宽的隧道。" - -#~ msgid "Crosshair color (R,G,B)." -#~ msgstr "准星颜色(红,绿,蓝)。" - -#, fuzzy -#~ msgid "Darkness sharpness" -#~ msgstr "地图生成器平面湖坡度" - #~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." #~ msgstr "" -#~ "定义 floatland 平滑地形的区域。\n" -#~ "当噪音0时, 平滑的 floatlands 发生。" - -#~ msgid "" -#~ "Defines sampling step of texture.\n" -#~ "A higher value results in smoother normal maps." -#~ msgstr "" -#~ "定义材质采样步骤。\n" -#~ "数值越高常态贴图越平滑。" - -#~ msgid "Downloading and installing $1, please wait..." -#~ msgstr "正在下载和安装 $1,请稍等..." - -#~ msgid "Enable VBO" -#~ msgstr "启用 VBO" - -#~ msgid "" -#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the " -#~ "texture pack\n" -#~ "or need to be auto-generated.\n" -#~ "Requires shaders to be enabled." -#~ msgstr "" -#~ "启用材质的凹凸贴图效果。需要材质包支持法线贴图,\n" -#~ "否则将自动生成法线。\n" -#~ "需要启用着色器。" - -#~ msgid "Enables filmic tone mapping" -#~ msgstr "启用电影基调映射" - -#~ msgid "" -#~ "Enables on the fly normalmap generation (Emboss effect).\n" -#~ "Requires bumpmapping to be enabled." -#~ msgstr "" -#~ "启用即时法线贴图生成(浮雕效果)。\n" -#~ "需要启用凹凸贴图。" - -#~ msgid "" -#~ "Enables parallax occlusion mapping.\n" -#~ "Requires shaders to be enabled." -#~ msgstr "" -#~ "启用视差遮蔽贴图。\n" -#~ "需要启用着色器。" - -#~ msgid "" -#~ "Experimental option, might cause visible spaces between blocks\n" -#~ "when set to higher number than 0." -#~ msgstr "" -#~ "实验性选项,设为大于 0 的数字时可能导致\n" -#~ "块之间出现可见空间。" - -#~ msgid "FPS in pause menu" -#~ msgstr "暂停菜单 FPS" - -#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." -#~ msgstr "字体阴影不透明度(0-255)。" - -#~ msgid "Gamma" -#~ msgstr "伽马" - -#~ msgid "Generate Normal Maps" -#~ msgstr "生成法线贴图" - -#~ msgid "Generate normalmaps" -#~ msgstr "生成发现贴图" - -#~ msgid "IPv6 support." -#~ msgstr "IPv6 支持。" - -#, fuzzy -#~ msgid "Lava depth" -#~ msgstr "巨大洞穴深度" - -#~ msgid "Limit of emerge queues on disk" -#~ msgstr "磁盘上的生产队列限制" - -#~ msgid "Main" -#~ msgstr "主菜单" - -#~ msgid "Main menu style" -#~ msgstr "主菜单样式" - -#~ msgid "Minimap in radar mode, Zoom x2" -#~ msgstr "雷达小地图,放大至两倍" - -#~ msgid "Minimap in radar mode, Zoom x4" -#~ msgstr "雷达小地图, 放大至四倍" - -#~ msgid "Minimap in surface mode, Zoom x2" -#~ msgstr "地表模式小地图, 放大至两倍" - -#~ msgid "Minimap in surface mode, Zoom x4" -#~ msgstr "地表模式小地图, 放大至四倍" - -#~ msgid "Name/Password" -#~ msgstr "用户名/密码" - -#~ msgid "No" -#~ msgstr "否" - -#~ msgid "Normalmaps sampling" -#~ msgstr "法线贴图采样" - -#~ msgid "Normalmaps strength" -#~ msgstr "法线贴图强度" - -#~ msgid "Number of parallax occlusion iterations." -#~ msgstr "视差遮蔽迭代数。" - -#~ msgid "Ok" -#~ msgstr "确定" - -#~ msgid "Overall bias of parallax occlusion effect, usually scale/2." -#~ msgstr "视差遮蔽效果的整体斜纹,通常为比例/2。" - -#~ msgid "Overall scale of parallax occlusion effect." -#~ msgstr "视差遮蔽效果的总体比例。" - -#~ msgid "Parallax Occlusion" -#~ msgstr "视差遮蔽" - -#~ msgid "Parallax occlusion" -#~ msgstr "视差遮蔽" - -#~ msgid "Parallax occlusion bias" -#~ msgstr "视差遮蔽偏移" - -#~ msgid "Parallax occlusion iterations" -#~ msgstr "视差遮蔽迭代" - -#~ msgid "Parallax occlusion mode" -#~ msgstr "视差遮蔽模式" - -#~ msgid "Parallax occlusion scale" -#~ msgstr "视差遮蔽比例" - -#~ msgid "Parallax occlusion strength" -#~ msgstr "视差遮蔽强度" - -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "TrueType 字体或位图的路径。" +#~ "调整亮度表的伽玛编码。较高的数值会较亮。\n" +#~ "这个设定是给客户端使用的,会被服务器忽略。" #~ msgid "Path to save screenshots at." #~ msgstr "屏幕截图保存路径。" -#~ msgid "Reset singleplayer world" -#~ msgstr "重置单人世界" +#~ msgid "Parallax occlusion strength" +#~ msgstr "视差遮蔽强度" -#~ msgid "Select Package File:" -#~ msgstr "选择包文件:" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "磁盘上的生产队列限制" -#, fuzzy -#~ msgid "Shadow limit" -#~ msgstr "地图块限制" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "正在下载和安装 $1,请稍等..." -#~ msgid "Start Singleplayer" -#~ msgstr "单人游戏" +#~ msgid "Back" +#~ msgstr "后退" -#~ msgid "Strength of generated normalmaps." -#~ msgstr "生成的一般地图强度。" - -#~ msgid "This font will be used for certain languages." -#~ msgstr "用于特定语言的字体。" - -#~ msgid "Toggle Cinematic" -#~ msgstr "切换电影模式" - -#~ msgid "View" -#~ msgstr "视野" - -#~ msgid "Waving Water" -#~ msgstr "流动的水面" - -#~ msgid "Waving water" -#~ msgstr "摇动水" - -#, fuzzy -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "大型随机洞穴的Y轴最大值。" - -#~ msgid "Yes" -#~ msgstr "是" +#~ msgid "Ok" +#~ msgstr "确定" diff --git a/po/zh_TW/minetest.po b/po/zh_TW/minetest.po index 598777a62..99a9da965 100644 --- a/po/zh_TW/minetest.po +++ b/po/zh_TW/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Chinese (Traditional) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-30 21:13+0100\n" -"PO-Revision-Date: 2021-01-24 16:19+0000\n" -"Last-Translator: AISS \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-12-24 05:29+0000\n" +"Last-Translator: Man Ho Yiu \n" "Language-Team: Chinese (Traditional) \n" "Language: zh_TW\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.4.1-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -23,6 +23,7 @@ msgid "You died" msgstr "您已死亡" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +#, fuzzy msgid "OK" msgstr "OK" @@ -46,6 +47,10 @@ msgstr "重新連線" msgid "The server has requested a reconnect:" msgstr "伺服器已要求重新連線:" +#: builtin/mainmenu/common.lua src/client/game.cpp +msgid "Loading..." +msgstr "正在載入..." + #: builtin/mainmenu/common.lua msgid "Protocol version mismatch. " msgstr "協定版本不符合。 " @@ -58,6 +63,10 @@ msgstr "伺服器強制協定版本 $1。 " msgid "Server supports protocol versions between $1 and $2. " msgstr "伺服器支援協定版本 $1 到 $2。 " +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "請嘗試重新啟用公共伺服器清單並檢查您的網際網路連線。" + #: builtin/mainmenu/common.lua msgid "We only support protocol version $1." msgstr "我們只支援協定版本 $1。" @@ -66,8 +75,7 @@ msgstr "我們只支援協定版本 $1。" msgid "We support protocol versions between version $1 and $2." msgstr "我們支援協定版本 $1 到 $2。" -#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua -#: builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_delete_content.lua #: builtin/mainmenu/dlg_delete_world.lua #: builtin/mainmenu/dlg_rename_modpack.lua @@ -77,8 +85,7 @@ msgstr "我們支援協定版本 $1 到 $2。" msgid "Cancel" msgstr "取消" -#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "相依元件:" @@ -149,60 +156,21 @@ msgstr "世界:" msgid "enabled" msgstr "已啟用" -#: builtin/mainmenu/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "" -"$1 downloading,\n" -"$2 queued" -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy -msgid "$1 downloading..." -msgstr "正在載入..." - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "所有套件" -#: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy -msgid "Already installed" -msgstr "已使用此按鍵" - #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "返回主選單" #: builtin/mainmenu/dlg_contentstore.lua #, fuzzy -msgid "Base Game:" -msgstr "主持遊戲" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" msgstr "在沒有cURL的情況下編譯Minetest時,ContentDB不可用" #: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy msgid "Downloading..." msgstr "正在載入..." @@ -219,16 +187,6 @@ msgstr "遊戲" msgid "Install" msgstr "安裝" -#: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy -msgid "Install $1" -msgstr "安裝" - -#: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy -msgid "Install missing dependencies" -msgstr "可選相依元件:" - #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -243,26 +201,9 @@ msgid "No results" msgstr "無結果" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy -msgid "No updates" -msgstr "更新" - -#: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy -msgid "Not found" -msgstr "靜音" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Please check that the base game is correct." -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Queued" -msgstr "" +#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua +msgid "Search" +msgstr "搜尋" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -277,18 +218,15 @@ msgid "Update" msgstr "更新" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" +msgid "View" +msgstr "查看" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "名為「$1」的世界已存在" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Additional terrain" msgstr "其他地形" @@ -297,23 +235,24 @@ msgid "Altitude chill" msgstr "寒冷海拔" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Altitude dry" msgstr "寒冷海拔" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Biome blending" -msgstr "生物群落" +msgstr "生物雜訊" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Biomes" -msgstr "生物群落" +msgstr "生物雜訊" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Caverns" -msgstr "洞穴" +msgstr "洞穴雜訊" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy @@ -363,7 +302,7 @@ msgstr "遊戲" #: builtin/mainmenu/dlg_create_world.lua msgid "Generate non-fractal terrain: Oceans and underground" -msgstr "生成曲線或幾何地形:海洋和地下" +msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Hills" @@ -421,11 +360,11 @@ msgstr "未選擇遊戲" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces heat with altitude" -msgstr "隨海拔降低熱量" +msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces humidity with altitude" -msgstr "濕度隨海拔升高而降低" +msgstr "" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy @@ -463,11 +402,11 @@ msgstr "溫帶沙漠" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle" -msgstr "溫帶、沙漠、叢林" +msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle, Tundra, Taiga" -msgstr "溫帶,沙漠,叢林,苔原,針葉林" +msgstr "" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy @@ -476,7 +415,7 @@ msgstr "地形基礎高度" #: builtin/mainmenu/dlg_create_world.lua msgid "Trees and jungle grass" -msgstr "樹木和叢林草" +msgstr "" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy @@ -567,7 +506,7 @@ msgstr "已啟用" #: builtin/mainmenu/dlg_settings_advanced.lua #, fuzzy msgid "Lacunarity" -msgstr "空隙" +msgstr "Lacunarity" #: builtin/mainmenu/dlg_settings_advanced.lua #, fuzzy @@ -599,10 +538,6 @@ msgstr "還原至預設值" msgid "Scale" msgstr "規模" -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Search" -msgstr "搜尋" - #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Select directory" msgstr "選擇目錄" @@ -718,14 +653,6 @@ msgstr "無法將 Mod 安裝為 $1" msgid "Unable to install a modpack as a $1" msgstr "無法將 Mod 包安裝為 $1" -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "正在載入..." - -#: builtin/mainmenu/serverlistmgr.lua -msgid "Try reenabling public serverlist and check your internet connection." -msgstr "請嘗試重新啟用公共伺服器清單並檢查您的網際網路連線。" - #: builtin/mainmenu/tab_content.lua msgid "Browse online content" msgstr "瀏覽線上內容" @@ -778,17 +705,6 @@ msgstr "核心開發者" msgid "Credits" msgstr "感謝" -#: builtin/mainmenu/tab_credits.lua -#, fuzzy -msgid "Open User Data Directory" -msgstr "選擇目錄" - -#: builtin/mainmenu/tab_credits.lua -msgid "" -"Opens the directory that contains user-provided worlds, games, mods,\n" -"and texture packs in a file manager / explorer." -msgstr "" - #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "先前的貢獻者" @@ -806,10 +722,14 @@ msgid "Bind Address" msgstr "綁定地址" #: builtin/mainmenu/tab_local.lua +msgid "Configure" +msgstr "設定" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua msgid "Creative Mode" msgstr "創造模式" -#: builtin/mainmenu/tab_local.lua +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua msgid "Enable Damage" msgstr "啟用傷害" @@ -827,8 +747,8 @@ msgid "Install games from ContentDB" msgstr "從ContentDB安裝遊戲" #: builtin/mainmenu/tab_local.lua -msgid "Name" -msgstr "" +msgid "Name/Password" +msgstr "名稱/密碼" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -838,11 +758,6 @@ msgstr "新增" msgid "No world created or selected!" msgstr "未建立或選取世界!" -#: builtin/mainmenu/tab_local.lua -#, fuzzy -msgid "Password" -msgstr "新密碼" - #: builtin/mainmenu/tab_local.lua msgid "Play Game" msgstr "遊玩遊戲" @@ -851,11 +766,6 @@ msgstr "遊玩遊戲" msgid "Port" msgstr "連線埠" -#: builtin/mainmenu/tab_local.lua -#, fuzzy -msgid "Select Mods" -msgstr "選取世界:" - #: builtin/mainmenu/tab_local.lua msgid "Select World:" msgstr "選取世界:" @@ -872,23 +782,23 @@ msgstr "開始遊戲" msgid "Address / Port" msgstr "地址/連線埠" -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "連線" -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Creative mode" msgstr "創造模式" -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Damage enabled" msgstr "已啟用傷害" -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Del. Favorite" msgstr "刪除收藏" -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Favorite" msgstr "收藏" @@ -896,16 +806,16 @@ msgstr "收藏" msgid "Join Game" msgstr "加入遊戲" -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Name / Password" msgstr "名稱/密碼" -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Ping" msgstr "Ping" #. ~ PvP = Player versus Player -#: builtin/mainmenu/tab_online.lua +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "PvP enabled" msgstr "已啟用 PvP" @@ -933,6 +843,10 @@ msgstr "所有設定" msgid "Antialiasing:" msgstr "反鋸齒:" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "您確定要重設您的單人遊戲世界嗎?" + #: builtin/mainmenu/tab_settings.lua msgid "Autosave Screen Size" msgstr "自動儲存螢幕大小" @@ -941,6 +855,10 @@ msgstr "自動儲存螢幕大小" msgid "Bilinear Filter" msgstr "雙線性過濾器" +#: builtin/mainmenu/tab_settings.lua +msgid "Bump Mapping" +msgstr "映射貼圖" + #: builtin/mainmenu/tab_settings.lua src/client/game.cpp msgid "Change Keys" msgstr "變更按鍵" @@ -953,6 +871,10 @@ msgstr "連接玻璃" msgid "Fancy Leaves" msgstr "華麗葉子" +#: builtin/mainmenu/tab_settings.lua +msgid "Generate Normal Maps" +msgstr "產生一般地圖" + #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" msgstr "Mip 貼圖" @@ -961,6 +883,10 @@ msgstr "Mip 貼圖" msgid "Mipmap + Aniso. Filter" msgstr "Mip 貼圖 + Aniso. 過濾器" +#: builtin/mainmenu/tab_settings.lua +msgid "No" +msgstr "否" + #: builtin/mainmenu/tab_settings.lua msgid "No Filter" msgstr "沒有過濾器" @@ -989,10 +915,18 @@ msgstr "不透明葉子" msgid "Opaque Water" msgstr "不透明水" +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "視差遮蔽" + #: builtin/mainmenu/tab_settings.lua msgid "Particles" msgstr "粒子" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "重設單人遊戲世界" + #: builtin/mainmenu/tab_settings.lua msgid "Screen:" msgstr "螢幕:" @@ -1005,11 +939,6 @@ msgstr "設定" msgid "Shaders" msgstr "著色器" -#: builtin/mainmenu/tab_settings.lua -#, fuzzy -msgid "Shaders (experimental)" -msgstr "浮地高度" - #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" msgstr "著色器(無法使用)" @@ -1054,6 +983,22 @@ msgstr "擺動液體" msgid "Waving Plants" msgstr "植物擺動" +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "是" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Config mods" +msgstr "設定 Mod" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Main" +msgstr "主要" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "開始單人遊戲" + #: src/client/client.cpp msgid "Connection timed out." msgstr "連線逾時。" @@ -1208,20 +1153,20 @@ msgid "Continue" msgstr "繼續" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" "- %s: move backwards\n" "- %s: move left\n" "- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" +"- %s: jump/climb\n" +"- %s: sneak/go down\n" "- %s: drop item\n" "- %s: inventory\n" "- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" "- Mouse wheel: select item\n" "- %s: chat\n" msgstr "" @@ -1368,6 +1313,34 @@ msgstr "MiB/秒" msgid "Minimap currently disabled by game or mod" msgstr "迷你地圖目前已被遊戲或 Mod 停用" +#: src/client/game.cpp +msgid "Minimap hidden" +msgstr "已隱藏迷你地圖" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x1" +msgstr "雷達模式的迷你地圖,放大 1 倍" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x2" +msgstr "雷達模式的迷你地圖,放大 2 倍" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x4" +msgstr "雷達模式的迷你地圖,放大 4 倍" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x1" +msgstr "表面模式的迷你地圖,放大 1 倍" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x2" +msgstr "表面模式的迷你地圖,放大 2 倍" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x4" +msgstr "表面模式的迷你地圖,放大 4 倍" + #: src/client/game.cpp msgid "Noclip mode disabled" msgstr "已停用穿牆模式" @@ -1761,25 +1734,6 @@ msgstr "X 按鈕 2" msgid "Zoom" msgstr "遠近調整" -#: src/client/minimap.cpp -msgid "Minimap hidden" -msgstr "已隱藏迷你地圖" - -#: src/client/minimap.cpp -#, fuzzy, c-format -msgid "Minimap in radar mode, Zoom x%d" -msgstr "雷達模式的迷你地圖,放大 1 倍" - -#: src/client/minimap.cpp -#, fuzzy, c-format -msgid "Minimap in surface mode, Zoom x%d" -msgstr "表面模式的迷你地圖,放大 1 倍" - -#: src/client/minimap.cpp -#, fuzzy -msgid "Minimap in texture mode" -msgstr "過濾器的最大材質大小" - #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "密碼不符合!" @@ -1999,13 +1953,12 @@ msgstr "" "如停用,虛擬搖桿將會置中於第一個觸碰的位置。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "(Android) Use virtual joystick to trigger \"aux\" button.\n" "If enabled, virtual joystick will also tap \"aux\" button when out of main " "circle." -msgstr "" -"(Android)使用虛擬操縱桿觸發“aux”按鈕。\n" -"如果啟用,則虛擬遊戲桿也會在離開主圓時點擊“aux”按鈕。" +msgstr "(Android) 使用虛擬搖桿觸發 \"aux\" 按鍵。\n" #: src/settings_translation_file.cpp #, fuzzy @@ -2020,16 +1973,11 @@ msgid "" "Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." msgstr "" "在「比例尺」中單位的 (X,Y,Z) 偏移。\n" -"可用於將所需點移動到(0, 0)以創建一個。\n" -"合適的生成點,或允許“放大”所需的點。\n" -"通過增加“規模”來確定。\n" -"默認值已調整為Mandelbrot合適的生成點。\n" -"設置默認參數,可能需要更改其他參數。\n" -"情況。\n" -"範圍大約在 -2 至 2 間。乘以“比例”可得出節點的偏移值。" +"用於移動適合的低地生成區域靠近 (0, 0)。\n" +"預設值適合曼德博集合,若要用於朱利亞集合則必須修改。\n" +"範圍大約在 -2 至 2 間。乘以節點的偏移值。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "(X,Y,Z) scale of fractal in nodes.\n" "Actual fractal size will be 2 to 3 times larger.\n" @@ -2039,13 +1987,14 @@ msgid "" "Default is for a vertically-squashed shape suitable for\n" "an island, set all 3 numbers equal for the raw shape." msgstr "" -"節點的分形幾何的(X,Y,Z)比例。\n" -"實際分形大小將是2到3倍。\n" -"這些數字可以做得很大,分形確實。\n" -"不必適應世界。\n" -"增加這些以“放大”到分形的細節。\n" -"默認為適合於垂直壓扁的形狀。\n" -"一個島,將所有3個數字設置為原始形狀相等。" + +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" +"0 = 包含斜率資訊的視差遮蔽(較快)。\n" +"1 = 替換貼圖(較慢,較準確)。" #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of ridged mountains." @@ -2109,10 +2058,6 @@ msgid "" "to be adjusted, as floatland tapering functions best when this noise has\n" "a value range of approximately -2.0 to 2.0." msgstr "" -"3D噪聲定義了浮地結構。\n" -"如果更改為默認值,則可能需要噪聲“比例”(默認值為0.7)。\n" -"需要進行調整,因為當噪音達到。\n" -"值範圍約為-2.0到2.0。" #: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." @@ -2174,10 +2119,6 @@ msgstr "當伺服器關機時要顯示在所有用戶端上的訊息。" msgid "ABM interval" msgstr "ABM 間隔" -#: src/settings_translation_file.cpp -msgid "ABM time budget" -msgstr "" - #: src/settings_translation_file.cpp #, fuzzy msgid "Absolute limit of queued blocks to emerge" @@ -2236,11 +2177,6 @@ msgid "" "Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" "to be sure) creates a solid floatland layer." msgstr "" -"調整浮游性地層的密度.\n" -"增加值以增加密度. 可以是正麵還是負麵的。\n" -"價值=0.0:50% o的體積是浮遊地。\n" -"值2.0(可以更高,取決於“mgv7_np_floatland”,總是測試。\n" -"肯定)創造一個固體浮游性地層。" #: src/settings_translation_file.cpp msgid "Advanced" @@ -2254,11 +2190,6 @@ msgid "" "This only has significant effect on daylight and artificial\n" "light, it has very little effect on natural night light." msgstr "" -"通過對其應用“gamma correction”來更改光曲線。\n" -"較高的值可使中等和較低的光照水平更亮。\n" -"值“ 1.0”使光曲線保持不變。\n" -"這僅對日光和人造光有重大影響。\n" -"光線,對自然的夜光影響很小。" #: src/settings_translation_file.cpp msgid "Always fly and fast" @@ -2270,7 +2201,7 @@ msgstr "環境遮蔽光" #: src/settings_translation_file.cpp msgid "Amount of messages a player may send per 10 seconds." -msgstr "玩家每 10 秒能傳送的訊息量。" +msgstr "玩家每 10 秒能傳送的訊息量" #: src/settings_translation_file.cpp msgid "Amplifies the valleys." @@ -2310,15 +2241,14 @@ msgstr "慣性手臂" msgid "" "Arm inertia, gives a more realistic movement of\n" "the arm when the camera moves." -msgstr "" -"手臂慣性,使動作更加逼真。\n" -"相機移動時的手臂。" +msgstr "慣性手臂,當相機移動時提供更加真實的手臂運動。" #: src/settings_translation_file.cpp msgid "Ask to reconnect after crash" msgstr "詢問是否在當機後重新連線" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "At this distance the server will aggressively optimize which blocks are sent " "to\n" @@ -2332,14 +2262,11 @@ msgid "" "optimization.\n" "Stated in mapblocks (16 nodes)." msgstr "" -"在這樣的距離下,伺服器將積極最佳化。\n" -"那些要傳送給用戶端的方塊。\n" -"較小的值可能會提升效能。\n" -"但代價是一些可見的彩現問題。\n" -"(有一些在水中與洞穴中的方塊將不會被彩現,\n" -"以及有時在陸地上)。\n" +"在這樣的距離下,伺服器將積極最佳化那些要傳送給用戶端的方塊。\n" +"較小的值可能會提升效能,但代價是一些可見的彩現問題。\n" +"(有一些在水中與洞穴中的方塊將不會被彩現,以及有時在陸地上)\n" "將此值設定為大於 max_block_send_distance 將會停用這個最佳化。\n" -"在地圖區塊中顯示(16 個節點)。" +"在地圖區塊中顯示(16 個節點)" #: src/settings_translation_file.cpp #, fuzzy @@ -2347,9 +2274,8 @@ msgid "Automatic forward key" msgstr "前進鍵" #: src/settings_translation_file.cpp -#, fuzzy msgid "Automatically jump up single-node obstacles." -msgstr "自動跳過單節點障礙物。" +msgstr "" #: src/settings_translation_file.cpp #, fuzzy @@ -2361,9 +2287,8 @@ msgid "Autosave screen size" msgstr "自動儲存視窗大小" #: src/settings_translation_file.cpp -#, fuzzy msgid "Autoscaling mode" -msgstr "自動縮放模式" +msgstr "" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2375,8 +2300,9 @@ msgid "Base ground level" msgstr "地面高度" #: src/settings_translation_file.cpp +#, fuzzy msgid "Base terrain height." -msgstr "基礎地形高度。" +msgstr "基礎地形高度" #: src/settings_translation_file.cpp msgid "Basic" @@ -2449,17 +2375,16 @@ msgid "Builtin" msgstr "內建" #: src/settings_translation_file.cpp -#, fuzzy +msgid "Bumpmapping" +msgstr "映射貼圖" + +#: src/settings_translation_file.cpp msgid "" "Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n" "Only works on GLES platforms. Most users will not need to change this.\n" "Increasing can reduce artifacting on weaker GPUs.\n" "0.1 = Default, 0.25 = Good value for weaker tablets." msgstr "" -"相機在節點附近的“剪切平面附近”距離,介於0到0.25之間\n" -"僅適用於GLES平台。 大多數用戶不需要更改此設置。\n" -"增加可以減少較弱GPU上的偽影。\n" -"0.1 =默認值,0.25 =對於較弱的平板電腦來說是好的值。" #: src/settings_translation_file.cpp msgid "Camera smoothing" @@ -2523,8 +2448,16 @@ msgid "" "Center of light curve boost range.\n" "Where 0.0 is minimum light level, 1.0 is maximum light level." msgstr "" -"光線曲線推進範圍中心。\n" -"0.0是最低光水平, 1.0是最高光水平." + +#: src/settings_translation_file.cpp +msgid "" +"Changes the main menu UI:\n" +"- Full: Multiple singleplayer worlds, game choice, texture pack chooser, " +"etc.\n" +"- Simple: One singleplayer world, no game or texture pack choosers. May " +"be\n" +"necessary for smaller screens." +msgstr "" #: src/settings_translation_file.cpp #, fuzzy @@ -2598,9 +2531,8 @@ msgid "Client side modding restrictions" msgstr "用戶端修改" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client side node lookup range restriction" -msgstr "客戶端節點查找範圍限制" +msgstr "" #: src/settings_translation_file.cpp msgid "Climbing speed" @@ -2627,7 +2559,6 @@ msgid "Colored fog" msgstr "彩色迷霧" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Comma-separated list of flags to hide in the content repository.\n" "\"nonfree\" can be used to hide packages which do not qualify as 'free " @@ -2637,12 +2568,6 @@ msgid "" "These flags are independent from Minetest versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" -"以逗號分隔的標誌列表,以隱藏在內容存儲庫中。\n" -"“ nonfree”可用於隱藏不符合“免費軟件”資格的軟件包,\n" -"由自由軟件基金會定義。\n" -"您還可以指定內容分級。\n" -"這些標誌獨立於Minetest版本,\n" -"因此請訪問https://content.minetest.net/help/content_flags/查看完整列表" #: src/settings_translation_file.cpp msgid "" @@ -2689,12 +2614,7 @@ msgid "Console height" msgstr "終端機高度" #: src/settings_translation_file.cpp -#, fuzzy msgid "ContentDB Flag Blacklist" -msgstr "ContentDB標誌黑名單列表" - -#: src/settings_translation_file.cpp -msgid "ContentDB Max Concurrent Downloads" msgstr "" #: src/settings_translation_file.cpp @@ -2717,18 +2637,18 @@ msgid "Controls" msgstr "控制" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Controls length of day/night cycle.\n" "Examples:\n" "72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." msgstr "" "控制日/夜循環的長度。\n" -"範例:\n" -"72 = 20分鐘,360 = 4分鐘,1 = 24小時,0 = 日/夜/一切保持不變。" +"範例:72 = 20分鐘,360 = 4分鐘,1 = 24小時,0 = 日/夜/一切保持不變。" #: src/settings_translation_file.cpp msgid "Controls sinking speed in liquid." -msgstr "控制液體的下沉速度。" +msgstr "" #: src/settings_translation_file.cpp msgid "Controls steepness/depth of lake depressions." @@ -2739,15 +2659,11 @@ msgid "Controls steepness/height of hills." msgstr "控制山丘的陡度/深度。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Controls width of tunnels, a smaller value creates wider tunnels.\n" "Value >= 10.0 completely disables generation of tunnels and avoids the\n" "intensive noise calculations." msgstr "" -"控制隧道的寬度,較小的值將創建較寬的隧道。\n" -"值> = 10.0完全禁用了隧道的生成,並避免了\n" -"密集的噪聲計算。" #: src/settings_translation_file.cpp msgid "Crash message" @@ -2762,10 +2678,7 @@ msgid "Crosshair alpha" msgstr "十字 alpha 值" #: src/settings_translation_file.cpp -#, fuzzy -msgid "" -"Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +msgid "Crosshair alpha (opaqueness, between 0 and 255)." msgstr "十字 alpha 值(不透明,0 至 255間)。" #: src/settings_translation_file.cpp @@ -2773,10 +2686,8 @@ msgid "Crosshair color" msgstr "十字色彩" #: src/settings_translation_file.cpp -msgid "" -"Crosshair color (R,G,B).\n" -"Also controls the object crosshair color" -msgstr "" +msgid "Crosshair color (R,G,B)." +msgstr "十字色彩 (R,G,B)。" #: src/settings_translation_file.cpp msgid "DPI" @@ -2805,7 +2716,7 @@ msgstr "音量減少鍵" #: src/settings_translation_file.cpp msgid "Decrease this to increase liquid resistance to movement." -msgstr "減小此值可增加液體的運動阻力。" +msgstr "" #: src/settings_translation_file.cpp msgid "Dedicated server step" @@ -2882,6 +2793,14 @@ msgstr "定義大型河道結構。" msgid "Defines location and terrain of optional hills and lakes." msgstr "定義可選的山丘與湖泊的位置與地形。" +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" +"定義材質的採樣步驟。\n" +"較高的值會有較平滑的一般地圖。" + #: src/settings_translation_file.cpp #, fuzzy msgid "Defines the base ground level." @@ -2962,11 +2881,6 @@ msgstr "" msgid "Desynchronize block animation" msgstr "異步化方塊動畫" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Dig key" -msgstr "右鍵" - #: src/settings_translation_file.cpp msgid "Digging particles" msgstr "挖掘粒子" @@ -3017,8 +2931,6 @@ msgid "" "Enable IPv6 support (for both client and server).\n" "Required for IPv6 connections to work at all." msgstr "" -"啟用IPv6支持(針對客戶端和服務器)。\n" -"IPv6連接需要它。" #: src/settings_translation_file.cpp msgid "" @@ -3042,8 +2954,9 @@ msgid "Enable joysticks" msgstr "啟用搖桿" #: src/settings_translation_file.cpp +#, fuzzy msgid "Enable mod channels support." -msgstr "啟用Mod Channels支持。" +msgstr "啟用 mod 安全性" #: src/settings_translation_file.cpp msgid "Enable mod security" @@ -3059,15 +2972,13 @@ msgstr "啟用隨機使用者輸入(僅供測試使用)。" #: src/settings_translation_file.cpp msgid "Enable register confirmation" -msgstr "啟用註冊確認" +msgstr "" #: src/settings_translation_file.cpp msgid "" "Enable register confirmation when connecting to server.\n" "If disabled, new account will be registered automatically." msgstr "" -"連接到服務器時啟用註冊確認。\n" -"如果禁用,新帳戶將自動註冊。" #: src/settings_translation_file.cpp msgid "" @@ -3105,8 +3016,6 @@ msgid "" "Enable vertex buffer objects.\n" "This should greatly improve graphics performance." msgstr "" -"啟用最好圖形緩衝.\n" -"這將大大提高圖形性能。" #: src/settings_translation_file.cpp msgid "" @@ -3128,22 +3037,28 @@ msgstr "" "當 bind_address 被設定時將會被忽略。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Enables Hable's 'Uncharted 2' filmic tone mapping.\n" "Simulates the tone curve of photographic film and how this approximates the\n" "appearance of high dynamic range images. Mid-range contrast is slightly\n" "enhanced, highlights and shadows are gradually compressed." msgstr "" -"啟用Hable的“Uncharted 2”電影色調映射。\n" -"模擬攝影膠片的色調曲線,\n" -"以及它如何近似高動態範圍圖像的外觀。\n" -"中檔對比度略微增強,高光和陰影逐漸壓縮。" #: src/settings_translation_file.cpp msgid "Enables animation of inventory items." msgstr "啟用物品欄物品動畫。" +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" +"為材質啟用貼圖轉儲。普通地圖需要材質包的支援\n" +"或是自動生成。\n" +"必須啟用著色器。" + #: src/settings_translation_file.cpp msgid "Enables caching of facedir rotated meshes." msgstr "啟用面旋轉方向的網格快取。" @@ -3152,6 +3067,22 @@ msgstr "啟用面旋轉方向的網格快取。" msgid "Enables minimap." msgstr "啟用小地圖。" +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" +"啟用忙碌的一般地圖生成(浮雕效果)。\n" +"必須啟用貼圖轉儲。" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" +"啟用視差遮蔽貼圖。\n" +"必須啟用著色器。" + #: src/settings_translation_file.cpp msgid "" "Enables the sound system.\n" @@ -3159,10 +3090,6 @@ msgid "" "sound controls will be non-functional.\n" "Changing this setting requires a restart." msgstr "" -"啟用聲音系統。\n" -"如果禁用,則將完全禁用所有聲音以及遊戲中的所有聲音。\n" -"聲音控件將不起作用。\n" -"更改此設置需要重新啟動。" #: src/settings_translation_file.cpp msgid "Engine profiling data print interval" @@ -3172,6 +3099,14 @@ msgstr "引擎性能資料印出間隔" msgid "Entity methods" msgstr "主體方法" +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" +"實驗性選項,當設定到大於零的值時\n" +"也許會造成在方塊間有視覺空隙。" + #: src/settings_translation_file.cpp msgid "" "Exponent of the floatland tapering. Alters the tapering behaviour.\n" @@ -3181,17 +3116,10 @@ msgid "" "Values < 1.0 (for example 0.25) create a more defined surface level with\n" "flatter lowlands, suitable for a solid floatland layer." msgstr "" -"逐漸縮小的指數。 更改逐漸變細的行為。\n" -"值= 1.0會創建均勻的線性錐度。\n" -"值> 1.0會創建適合於默認分隔的平滑錐形\n" -"浮地。\n" -"值<1.0(例如0.25)可使用\n" -"平坦的低地,適用於堅固的浮遊地層。" #: src/settings_translation_file.cpp -#, fuzzy -msgid "FPS when unfocused or paused" -msgstr "當遊戲暫停時的最高 FPS。" +msgid "FPS in pause menu" +msgstr "在暫停選單中的 FPS" #: src/settings_translation_file.cpp msgid "FSAA" @@ -3256,13 +3184,13 @@ msgid "Field of view in degrees." msgstr "以度計算的視野。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "File in client/serverlist/ that contains your favorite servers displayed in " "the\n" "Multiplayer Tab." msgstr "" -"在 用戶端/伺服器清單/ 中的檔案包含了顯示在。\n" -"多人遊戲分頁中您最愛的伺服器。" +"在 用戶端/伺服器清單/ 中的檔案包含了顯示在多人遊戲分頁中您最愛的伺服器。" #: src/settings_translation_file.cpp #, fuzzy @@ -3307,9 +3235,8 @@ msgid "Fixed map seed" msgstr "固定的地圖種子" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fixed virtual joystick" -msgstr "固定虛擬遊戲桿" +msgstr "" #: src/settings_translation_file.cpp #, fuzzy @@ -3368,11 +3295,11 @@ msgstr "霧氣切換鍵" #: src/settings_translation_file.cpp msgid "Font bold by default" -msgstr "字體默認為粗體" +msgstr "" #: src/settings_translation_file.cpp msgid "Font italic by default" -msgstr "字體默認為斜體" +msgstr "" #: src/settings_translation_file.cpp msgid "Font shadow" @@ -3387,28 +3314,22 @@ msgid "Font size" msgstr "字型大小" #: src/settings_translation_file.cpp -#, fuzzy msgid "Font size of the default font in point (pt)." -msgstr "默認字體的字體大小,以(pt)為單位。" +msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Font size of the fallback font in point (pt)." -msgstr "後備字體的字體大小,以(pt)為單位。" +msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Font size of the monospace font in point (pt)." -msgstr "以点为单位的单空格字体的字体大小,以(pt)為單位。" +msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Font size of the recent chat text and chat prompt in point (pt).\n" "Value 0 will use the default font size." msgstr "" -"最近的聊天文本和聊天提示的字體大小,以(pt)為單位。\n" -"值0將使用默認字體大小。" #: src/settings_translation_file.cpp msgid "" @@ -3425,19 +3346,19 @@ msgstr "螢幕截圖的格式。" #: src/settings_translation_file.cpp msgid "Formspec Default Background Color" -msgstr "Formspec默認背景色" +msgstr "" #: src/settings_translation_file.cpp msgid "Formspec Default Background Opacity" -msgstr "Formspec默認背景不透明度" +msgstr "" #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Color" -msgstr "Formspec全屏背景色" +msgstr "" #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Opacity" -msgstr "Formspec全屏背景不透明度" +msgstr "" #: src/settings_translation_file.cpp #, fuzzy @@ -3492,7 +3413,6 @@ msgid "" msgstr "要把多遠的區塊送到用戶端,以地圖區塊計算(16 個節點)。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "From how far clients know about objects, stated in mapblocks (16 nodes).\n" "\n" @@ -3500,11 +3420,6 @@ msgid "" "to maintain active objects up to this distance in the direction the\n" "player is looking. (This can avoid mobs suddenly disappearing from view)" msgstr "" -"客戶端了解對象的程度,以mapblocks(16個節點)表示。\n" -"\n" -"將此值設置為大於active_block_range也會導致服務器。\n" -"使活動物體在以下方向上保持此距離。\n" -"玩家正在尋找。 (這可以避免小怪突然從視線中消失)" #: src/settings_translation_file.cpp msgid "Full screen" @@ -3530,6 +3445,10 @@ msgstr "圖形使用者介面縮放過濾器" msgid "GUI scaling filter txr2img" msgstr "圖形使用者介面縮放比例過濾器 txr2img" +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "生成一般地圖" + #: src/settings_translation_file.cpp msgid "Global callbacks" msgstr "全域回呼" @@ -3542,26 +3461,22 @@ msgid "" "and junglegrass, in all other mapgens this flag controls all decorations." msgstr "" "全域地圖產生屬性。\n" -"在 Mapgen v6 中,「decorations」旗標控制所有除了樹木。\n" +"在 Mapgen v6 中,「decorations」旗標控制所有除了樹木\n" "與叢林以外的裝飾,在其他所有的 mapgen 中,這個旗標控制所有裝飾。\n" -"未在旗標字串中指定的旗標將不會自預設值修改\n" -"以「no」開頭的旗標字串將會用於明確的停用它們" +"未在旗標字串中指定的旗標將不會自預設值修改。\n" +"以「no」開頭的旗標字串將會用於明確的停用它們。" #: src/settings_translation_file.cpp msgid "" "Gradient of light curve at maximum light level.\n" "Controls the contrast of the highest light levels." msgstr "" -"最大光水平下的光曲線漸變。\n" -"控制最高亮度的對比度。" #: src/settings_translation_file.cpp msgid "" "Gradient of light curve at minimum light level.\n" "Controls the contrast of the lowest light levels." msgstr "" -"最小光水平下的光曲線漸變。\n" -"控制最低亮度的對比度。" #: src/settings_translation_file.cpp msgid "Graphics" @@ -3596,8 +3511,8 @@ msgstr "HUD 切換鍵" #, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" -"- none: Do not log deprecated calls\n" -"- log: mimic and log backtrace of deprecated call (default).\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" "處理已棄用的 Lua API 呼叫:\n" @@ -3675,24 +3590,18 @@ msgid "" "Horizontal acceleration in air when jumping or falling,\n" "in nodes per second per second." msgstr "" -"跳躍或墜落時空氣中的水平加速度,\n" -"以每秒節點數為單位。" #: src/settings_translation_file.cpp msgid "" "Horizontal and vertical acceleration in fast mode,\n" "in nodes per second per second." msgstr "" -"快速模式下的水平和垂直加速度,\n" -"以每秒節點數為單位。" #: src/settings_translation_file.cpp msgid "" "Horizontal and vertical acceleration on ground or when climbing,\n" "in nodes per second per second." msgstr "" -"在地面或攀爬時的水平和垂直加速度,\n" -"以每秒節點數為單位。" #: src/settings_translation_file.cpp msgid "Hotbar next key" @@ -3833,7 +3742,7 @@ msgstr "快捷列第 9 個槽的按鍵" #: src/settings_translation_file.cpp #, fuzzy msgid "How deep to make rivers." -msgstr "河流深度。" +msgstr "河流多深" #: src/settings_translation_file.cpp msgid "" @@ -3841,9 +3750,6 @@ msgid "" "If negative, liquid waves will move backwards.\n" "Requires waving liquids to be enabled." msgstr "" -"液體波將移動多快。 Higher = faster。\n" -"如果為負,則液體波將向後移動。\n" -"需要啟用波狀液體。" #: src/settings_translation_file.cpp msgid "" @@ -3856,7 +3762,7 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "How wide to make rivers." -msgstr "河流寬度。" +msgstr "河流多寬" #: src/settings_translation_file.cpp msgid "Humidity blend noise" @@ -3892,9 +3798,7 @@ msgid "" "If disabled, \"special\" key is used to fly fast if both fly and fast mode " "are\n" "enabled." -msgstr "" -"若停用,在飛行與快速模式皆啟用時,\n" -"「special」鍵將用於快速飛行。" +msgstr "若停用,在飛行與快速模式皆啟用時,「使用」鍵將用於快速飛行。" #: src/settings_translation_file.cpp msgid "" @@ -3924,9 +3828,7 @@ msgid "" "If enabled, \"special\" key instead of \"sneak\" key is used for climbing " "down and\n" "descending." -msgstr "" -"若啟用,向下爬與下降將使用。\n" -"「special」鍵而非「sneak」鍵。" +msgstr "若啟用,向下爬與下降將使用「使用」鍵而非「潛行」鍵。" #: src/settings_translation_file.cpp msgid "" @@ -3949,50 +3851,38 @@ msgstr "" "只在您知道您在幹嘛時才啟用這個選項。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, makes move directions relative to the player's pitch when flying " "or swimming." msgstr "" -"如果啟用,則在飛行或游泳時。\n" -"相對於玩家的俯仰方向做出移動方向。" #: src/settings_translation_file.cpp msgid "If enabled, new players cannot join with an empty password." msgstr "若啟用,新玩家將無法以空密碼加入。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, you can place blocks at the position (feet + eye level) where " "you stand.\n" "This is helpful when working with nodeboxes in small areas." msgstr "" -"若啟用,您可以在您站立的位置(腳與眼睛的高度)放置方塊。\n" -"當在小區域裡與節點盒一同工作時非常有用。" +"若啟用,您可以在您站立的位置(腳與眼睛的高度)放置方塊。當在小區域裡與節點盒" +"一同工作時非常有用。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If the CSM restriction for node range is enabled, get_node calls are " "limited\n" "to this distance from the player to the node." msgstr "" -"如果啟用了節點範圍的CSM限制,則get_node調用將受到限制\n" -"從玩家到節點的這個距離。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If the file size of debug.txt exceeds the number of megabytes specified in\n" "this setting when it is opened, the file is moved to debug.txt.1,\n" "deleting an older debug.txt.1 if it exists.\n" "debug.txt is only moved if this setting is positive." msgstr "" -"如果debug.txt的文件大小超過在中指定的兆字節數\n" -"打開此設置後,文件將移至debug.txt.1,\n" -"刪除較舊的debug.txt.1(如果存在)。\n" -"僅當此設置為正時,才會移動debug.txt。" #: src/settings_translation_file.cpp msgid "If this is set, players will always (re)spawn at the given position." @@ -4024,7 +3914,7 @@ msgstr "提高音量鍵" #: src/settings_translation_file.cpp msgid "Initial vertical speed when jumping, in nodes per second." -msgstr "跳躍時的初始垂直速度,以每秒節點數為單位。" +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -4107,17 +3997,12 @@ msgid "Iterations" msgstr "迭代" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Iterations of the recursive function.\n" "Increasing this increases the amount of fine detail, but also\n" "increases processing load.\n" "At iterations = 20 this mapgen has a similar load to mapgen V7." msgstr "" -"遞歸函數的迭代。\n" -"增加它會增加細節的數量,而且。\n" -"增加處理負荷。\n" -"迭代次數iterations = 20時,此mapgen的負載與mapgen V7相似。" #: src/settings_translation_file.cpp msgid "Joystick ID" @@ -4127,11 +4012,6 @@ msgstr "搖桿 ID" msgid "Joystick button repetition interval" msgstr "搖桿按鈕重覆間隔" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Joystick deadzone" -msgstr "搖桿類型" - #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" msgstr "搖桿靈敏度" @@ -4142,6 +4022,7 @@ msgid "Joystick type" msgstr "搖桿類型" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Julia set only.\n" "W component of hypercomplex constant.\n" @@ -4149,11 +4030,9 @@ msgid "" "Has no effect on 3D fractals.\n" "Range roughly -2 to 2." msgstr "" -"蝴蝶只設置蝴蝶。\n" -"超複雜常數的W分量。\n" -"改變分形的形狀。\n" -"對3D分形沒有影響。\n" -"範圍約為-2至2。" +"僅朱利亞集合:可交換超複數的 W 元素決定了 朱利亞形狀。\n" +"在 3D 碎形上沒有效果。\n" +"範圍約在 -2 至 2 間。" #: src/settings_translation_file.cpp #, fuzzy @@ -4163,10 +4042,9 @@ msgid "" "Alters the shape of the fractal.\n" "Range roughly -2 to 2." msgstr "" -"蝴蝶只設置蝴蝶。\n" -"超複雜常數的X分量。\n" -"改變分形的形狀。\n" -"範圍約為-2至2。" +"僅朱利亞集合:可交換超複數的 X 元素決定了 朱利亞形狀。\n" +"在 3D 碎形上沒有效果。\n" +"範圍約在 -2 至 2 間。" #: src/settings_translation_file.cpp #, fuzzy @@ -4176,8 +4054,7 @@ msgid "" "Alters the shape of the fractal.\n" "Range roughly -2 to 2." msgstr "" -"蝴蝶只設置蝴蝶\n" -"可交換超複數的 Y 元素決定了 蝴蝶形狀。\n" +"僅朱利亞集合:可交換超複數的 Y 元素決定了 朱利亞形狀。\n" "在 3D 碎形上沒有效果。\n" "範圍約在 -2 至 2 間。" @@ -4189,8 +4066,7 @@ msgid "" "Alters the shape of the fractal.\n" "Range roughly -2 to 2." msgstr "" -"蝴蝶設置。\n" -"可交換超複數的 Z 元素決定了 蝴蝶形狀。\n" +"僅朱利亞集合:可交換超複數的 Z 元素決定了 朱利亞形狀。\n" "在 3D 碎形上沒有效果。\n" "範圍約在 -2 至 2 間。" @@ -4238,17 +4114,6 @@ msgstr "" "請見 http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "" -"Key for digging.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" -"跳躍的按鍵。\n" -"請見 http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" - #: src/settings_translation_file.cpp msgid "" "Key for dropping the currently selected item.\n" @@ -4308,7 +4173,6 @@ msgid "" "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" "將玩家往後方移動的按鍵。\n" -"在活躍時,還會禁用自動。\n" "請見 http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4392,17 +4256,6 @@ msgstr "" "請見 http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "" -"Key for placing.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" -"跳躍的按鍵。\n" -"請見 http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" - #: src/settings_translation_file.cpp msgid "" "Key for selecting the 11th hotbar slot.\n" @@ -4938,9 +4791,8 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "Kick players who sent more than X messages per 10 seconds." -msgstr "踢每10秒發送超過X條信息的玩家。" +msgstr "" #: src/settings_translation_file.cpp msgid "Lake steepness" @@ -4960,11 +4812,11 @@ msgstr "大型洞穴深度" #: src/settings_translation_file.cpp msgid "Large cave maximum number" -msgstr "大洞穴最大數量" +msgstr "" #: src/settings_translation_file.cpp msgid "Large cave minimum number" -msgstr "大洞穴最小數量" +msgstr "" #: src/settings_translation_file.cpp msgid "Large cave proportion flooded" @@ -5000,9 +4852,7 @@ msgid "" "Length of a server tick and the interval at which objects are generally " "updated over\n" "network." -msgstr "" -"伺服器 tick 的長度與相關物件的間隔,\n" -"通常透過網路更新。" +msgstr "伺服器 tick 的長度與相關物件的間隔通常透過網路更新。" #: src/settings_translation_file.cpp #, fuzzy @@ -5049,28 +4899,27 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Light curve boost" -msgstr "光曲線增強" +msgstr "" #: src/settings_translation_file.cpp msgid "Light curve boost center" -msgstr "光曲線提升中心" +msgstr "" #: src/settings_translation_file.cpp msgid "Light curve boost spread" -msgstr "光曲線增強擴散" +msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve gamma" -msgstr "光線曲線伽瑪" +msgstr "" #: src/settings_translation_file.cpp msgid "Light curve high gradient" -msgstr "光曲線高漸變度" +msgstr "" #: src/settings_translation_file.cpp msgid "Light curve low gradient" -msgstr "光曲線低漸變度" +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -5156,6 +5005,11 @@ msgstr "大型偽隨機洞穴的 Y 上限。" msgid "Main menu script" msgstr "主選單指令稿" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu style" +msgstr "主選單指令稿" + #: src/settings_translation_file.cpp msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." @@ -5169,30 +5023,24 @@ msgstr "讓 DirectX 與 LuaJIT 一同運作。若其造成麻煩則請停用。" msgid "Makes all liquids opaque" msgstr "讓所有的液體不透明" -#: src/settings_translation_file.cpp -msgid "Map Compression Level for Disk Storage" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Map Compression Level for Network Transfer" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map directory" msgstr "地圖目錄" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map generation attributes specific to Mapgen Carpathian." -msgstr "Mapgen Carpathian特有的属性地图生成。" +msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Map generation attributes specific to Mapgen Flat.\n" "Occasional lakes and hills can be added to the flat world." msgstr "" -"專用於 Mapgen Flat 的地圖生成屬性。\n" -"可能會有少數的湖泊或是丘陵會在扁平的世界中生成。" +"專用於 Mapgen flat 的地圖生成屬性。\n" +"可能會有少數的湖泊或是丘陵會在扁平的世界中生成。\n" +"未在旗標字串中指定的旗標將不會自預設值修改。\n" +"以「no」開頭的旗標字串將會用於明確的停用它們。" #: src/settings_translation_file.cpp #, fuzzy @@ -5201,12 +5049,12 @@ msgid "" "'terrain' enables the generation of non-fractal terrain:\n" "ocean, islands and underground." msgstr "" -"Mapgen Fractal特有的地圖生成屬性。\n" -"“terrain”可生成非幾何地形:\n" -"海洋,島嶼和地下。" +"專用於 Mapgen flat 的地圖生成屬性。\n" +"可能會有少數的湖泊或是丘陵會在扁平的世界中生成。\n" +"未在旗標字串中指定的旗標將不會自預設值修改。\n" +"以「no」開頭的旗標字串將會用於明確的停用它們。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen Valleys.\n" "'altitude_chill': Reduces heat with altitude.\n" @@ -5215,17 +5063,10 @@ msgid "" "to become shallower and occasionally dry.\n" "'altitude_dry': Reduces humidity with altitude." msgstr "" -"Mapgen Valleys 山谷特有的地圖生成屬性。\n" -"'altitude_chill':隨高度降低熱量。\n" -"'humid_rivers':增加河流周圍的濕度。\n" -"'vary_river_depth':如果啟用,低濕度和高熱量會導致河流\n" -"變淺,偶爾變乾。\n" -"'altitude_dry':隨著海拔高度降低濕度。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map generation attributes specific to Mapgen v5." -msgstr "Mapgen v5特有的地圖生成屬性。" +msgstr "" #: src/settings_translation_file.cpp #, fuzzy @@ -5235,10 +5076,12 @@ msgid "" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" "the 'jungles' flag is ignored." msgstr "" -"Mapgen v6特有的地圖生成屬性。\n" -"“ snowbiomes”標誌啟用了新的5個生物群落系統。\n" -"啟用“ snowbiomes”標誌時,會自動啟用叢林並。\n" -"“叢林”標誌將被忽略。" +"專用於 Mapgen v6 的地圖生成屬性。\n" +"'snowbiomes' 旗標啟用了五個新的生態系。\n" +"當新的生態系啟用時,叢林生態系會自動啟用,\n" +"而 'jungles' 會被忽略。\n" +"未在旗標字串中指定的旗標將不會自預設值修改。\n" +"以「no」開頭的旗標字串將會用於明確的停用它們。" #: src/settings_translation_file.cpp #, fuzzy @@ -5380,8 +5223,7 @@ msgid "Maximum FPS" msgstr "最高 FPS" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Maximum FPS when the window is not focused, or when the game is paused." +msgid "Maximum FPS when game is paused." msgstr "當遊戲暫停時的最高 FPS。" #: src/settings_translation_file.cpp @@ -5394,30 +5236,24 @@ msgstr "快捷列最大寬度" #: src/settings_translation_file.cpp msgid "Maximum limit of random number of large caves per mapchunk." -msgstr "每個地圖塊的大洞穴隨機數的最大限制。" +msgstr "" #: src/settings_translation_file.cpp msgid "Maximum limit of random number of small caves per mapchunk." -msgstr "每個地圖塊隨機小洞數的最大限制。" +msgstr "" #: src/settings_translation_file.cpp msgid "" "Maximum liquid resistance. Controls deceleration when entering liquid at\n" "high speed." msgstr "" -"最大液體阻力。控制進入液體時的減速\n" -"高速。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum number of blocks that are simultaneously sent per client.\n" "The maximum total count is calculated dynamically:\n" "max_total = ceil((#clients + max_users) * per_client / 4)" msgstr "" -"每個客戶端同時發送的最大塊數。\n" -"最大總數是動態計算的:\n" -"max_total = ceil((#clients + max_users)* per_client / 4)" #: src/settings_translation_file.cpp msgid "Maximum number of blocks that can be queued for loading." @@ -5441,13 +5277,6 @@ msgstr "" "可被放進佇列內等待從檔案載入的最大區塊數。\n" "將其設定留空則會自動選擇適當的值。" -#: src/settings_translation_file.cpp -msgid "" -"Maximum number of concurrent downloads. Downloads exceeding this limit will " -"be queued.\n" -"This should be lower than curl_parallel_limit." -msgstr "" - #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." msgstr "強制載入地圖區塊的最大數量。" @@ -5500,18 +5329,14 @@ msgid "Maximum simultaneous block sends per client" msgstr "每個用戶端最大同時傳送區塊數" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum size of the out chat queue" -msgstr "輸出聊天隊列的最大大小" +msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum size of the out chat queue.\n" "0 to disable queueing and -1 to make the queue size unlimited." msgstr "" -"輸出聊天隊列的最大大小。\n" -"0表示禁用排隊,-1表示隊列大小不受限制。" #: src/settings_translation_file.cpp msgid "Maximum time in ms a file download (e.g. a mod download) may take." @@ -5542,9 +5367,8 @@ msgid "Method used to highlight selected object." msgstr "用於突顯物件的方法。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Minimal level of logging to be written to chat." -msgstr "要寫入聊天記錄的最低級別。" +msgstr "" #: src/settings_translation_file.cpp msgid "Minimap" @@ -5560,11 +5384,11 @@ msgstr "迷你地圖掃描高度" #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." -msgstr "每個地圖塊的大洞穴隨機數的最小限制。" +msgstr "" #: src/settings_translation_file.cpp msgid "Minimum limit of random number of small caves per mapchunk." -msgstr "每個地圖塊隨機小洞數的最小限制。" +msgstr "" #: src/settings_translation_file.cpp #, fuzzy @@ -5576,9 +5400,8 @@ msgid "Mipmapping" msgstr "映射貼圖" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mod channels" -msgstr "Mod 清單" +msgstr "" #: src/settings_translation_file.cpp msgid "Modifies the size of the hudbar elements." @@ -5635,7 +5458,7 @@ msgstr "靜音按鍵" #: src/settings_translation_file.cpp msgid "Mute sound" -msgstr "靜音" +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -5700,6 +5523,14 @@ msgstr "NodeTimer 間隔" msgid "Noises" msgstr "雜訊" +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "法線貼圖採樣" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "法線貼圖強度" + #: src/settings_translation_file.cpp msgid "Number of emerge threads" msgstr "出現的執行緒數" @@ -5728,9 +5559,13 @@ msgstr "" "這是與 sqlite 處理耗費的折衷與\n" "記憶體耗費(根據經驗,4096=100MB)。" +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "視差遮蔽迭代次數。" + #: src/settings_translation_file.cpp msgid "Online Content Repository" -msgstr "在線內容存儲庫" +msgstr "" #: src/settings_translation_file.cpp msgid "Opaque liquids" @@ -5739,22 +5574,48 @@ msgstr "不透明液體" #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." -msgstr "默認字體後面的陰影的不透明(alpha),介於0和255之間。" +msgstr "" #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255." -msgstr "後備字體後面的陰影的不透明度(alpha),介於0和255之間。" +msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Open the pause menu when the window's focus is lost. Does not pause if a " "formspec is\n" "open." msgstr "" -"當窗口焦點丟失時,打開“暫停”菜單。如果formspec是\n" -"打開的。" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "視差遮蔽效果的總偏差,通常是規模/2。" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "視差遮蔽效果的總規模。" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "視差遮蔽" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "視差遮蔽偏差" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "視差遮蔽迭代" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "視差遮蔽模式" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion scale" +msgstr "視差遮蔽係數" #: src/settings_translation_file.cpp msgid "" @@ -5764,18 +5625,12 @@ msgid "" "This font will be used for certain languages or if the default font is " "unavailable." msgstr "" -"後備字體的路徑。\n" -"如果啟用“freetype”設置:必須是TrueType字體。\n" -"如果“freetype”設置被禁用:必須是位圖或XML矢量字體。\n" -"此字體將用於某些語言或默認字體不可用時。" #: src/settings_translation_file.cpp msgid "" "Path to save screenshots at. Can be an absolute or relative path.\n" "The folder will be created if it doesn't already exist." msgstr "" -"保存截圖的路徑。可以是絕對路徑或相對路徑。\n" -"如果文件夾尚不存在,則將創建該文件夾。" #: src/settings_translation_file.cpp msgid "" @@ -5794,27 +5649,18 @@ msgid "" "If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" "The fallback font will be used if the font cannot be loaded." msgstr "" -"默認字體的路徑。\n" -"如果啟用“freetype”設置:必須是TrueType字體。\n" -"如果“freetype”設置被禁用:必須是位圖或XML矢量字體。\n" -"如果無法加載字體,將使用後備字體。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Path to the monospace font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" "If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" "This font is used for e.g. the console and profiler screen." msgstr "" -"等寬字體的路徑。\n" -"如果啟用了“ freetype”設置:必須為TrueType字體。\n" -"如果禁用了“ freetype”設置:必須為位圖或XML矢量字體。\n" -"該字體用於例如 控制台和探查器屏幕。" #: src/settings_translation_file.cpp msgid "Pause on lost window focus" -msgstr "窗口焦點丟失時暫停" +msgstr "" #: src/settings_translation_file.cpp msgid "Per-player limit of queued blocks load from disk" @@ -5836,17 +5682,7 @@ msgstr "飛行按鍵" #: src/settings_translation_file.cpp msgid "Pitch move mode" -msgstr "俯仰移動模式" - -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Place key" -msgstr "飛行按鍵" - -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Place repetition interval" -msgstr "右鍵點擊重覆間隔" +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -5882,20 +5718,17 @@ msgid "" "Prevent digging and placing from repeating when holding the mouse buttons.\n" "Enable this when you dig or place too often by accident." msgstr "" -"按住鼠標按鈕時,避免重複挖掘和放置。\n" -"當您意外挖掘或放置過多時,請啟用此功能。" #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." msgstr "避免 mod 做出不安全的舉動,像是執行 shell 指令等。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Print the engine's profiling data in regular intervals (in seconds).\n" "0 = disable. Useful for developers." -msgstr "" -"引擎性能資料印出間隔的秒數。\n" -"0 = 停用。對開發者有用。" +msgstr "引擎性能資料印出間隔的秒數。0 = 停用。對開發者有用。" #: src/settings_translation_file.cpp msgid "Privileges that players with basic_privs can grant" @@ -5939,8 +5772,9 @@ msgstr "" "大於 26 的值將會在雲的角落有銳角的產生。" #: src/settings_translation_file.cpp +#, fuzzy msgid "Raises terrain to make valleys around the rivers." -msgstr "抬高地形,使河流周圍形成山谷。" +msgstr "提升地形以讓山谷在河流周圍" #: src/settings_translation_file.cpp msgid "Random input" @@ -5996,16 +5830,6 @@ msgid "" "csm_restriction_noderange)\n" "READ_PLAYERINFO: 32 (disable get_player_names call client-side)" msgstr "" -"限制對服務器上某些客戶端功能的訪問。\n" -"組合下面的字節標誌以限制客戶端功能,或設置為0\n" -"無限制:\n" -"LOAD_CLIENT_MODS:1(禁用加載客戶端提供的mod)\n" -"CHAT_MESSAGES:2(在客戶端禁用send_chat_message調用)\n" -"READ_ITEMDEFS:4(禁用get_item_def調用客戶端)\n" -"READ_NODEDEFS:8(禁用get_node_def調用客戶端)\n" -"LOOKUP_NODES_LIMIT:16(限制get_node調用客戶端到\n" -"csm_restriction_noderange)\n" -"READ_PLAYERINFO:32(禁用get_player_names調用客戶端)" #: src/settings_translation_file.cpp msgid "Ridge mountain spread noise" @@ -6027,6 +5851,10 @@ msgstr "山脊大小雜訊" msgid "Right key" msgstr "右鍵" +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "右鍵點擊重覆間隔" + #: src/settings_translation_file.cpp #, fuzzy msgid "River channel depth" @@ -6085,9 +5913,8 @@ msgid "Save the map received by the client on disk." msgstr "由用戶端儲存接收到的地圖到磁碟上。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Save window size automatically when modified." -msgstr "修改時自動保存窗口大小。" +msgstr "" #: src/settings_translation_file.cpp msgid "Saving map received from server" @@ -6294,14 +6121,14 @@ msgid "Shader path" msgstr "著色器路徑" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" "cards.\n" "This only works with the OpenGL video backend." msgstr "" -"著色器讓您可以有進階視覺效果並可能會在某些顯示卡上,\n" -"增強效能。\n" +"著色器讓您可以有進階視覺效果並可能會在某些顯示卡上增強效能。\n" "這僅在 OpenGL 視訊後端上才能運作。" #: src/settings_translation_file.cpp @@ -6330,15 +6157,6 @@ msgstr "顯示除錯資訊" msgid "Show entity selection boxes" msgstr "顯示物體選取方塊" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "" -"Show entity selection boxes\n" -"A restart is required after changing this." -msgstr "" -"設定語言。留空以使用系統語言。\n" -"變更後必須重新啟動以使其生效。" - #: src/settings_translation_file.cpp msgid "Shutdown message" msgstr "關閉訊息" @@ -6368,16 +6186,17 @@ msgid "Slice w" msgstr "切片 w" #: src/settings_translation_file.cpp +#, fuzzy msgid "Slope and fill work together to modify the heights." -msgstr "坡度與填充一同運作來修改高度。" +msgstr "坡度與填充一同運作來修改高度" #: src/settings_translation_file.cpp msgid "Small cave maximum number" -msgstr "小洞穴最大數量" +msgstr "" #: src/settings_translation_file.cpp msgid "Small cave minimum number" -msgstr "小洞穴最小數量" +msgstr "" #: src/settings_translation_file.cpp msgid "Small-scale humidity variation for blending biomes on borders." @@ -6417,9 +6236,8 @@ msgid "Sneaking speed" msgstr "走路速度" #: src/settings_translation_file.cpp -#, fuzzy msgid "Sneaking speed, in nodes per second." -msgstr "潛行速度,以每秒節點數為單位。" +msgstr "" #: src/settings_translation_file.cpp msgid "Sound" @@ -6448,25 +6266,18 @@ msgstr "" "沒有在其中的檔案將會以平常的方式抓取。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Specifies the default stack size of nodes, items and tools.\n" "Note that mods or games may explicitly set a stack for certain (or all) " "items." msgstr "" -"指定節點、項和工具的默認堆棧大小。\n" -"請注意,mods或games可以顯式地為某些(或所有)項目設置堆棧。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Spread of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." msgstr "" -"傳播光曲線增強範圍。\n" -"控制要增加範圍的寬度。\n" -"光曲線的標準偏差增強了高斯。" #: src/settings_translation_file.cpp msgid "Static spawnpoint" @@ -6492,15 +6303,15 @@ msgid "Strength of 3D mode parallax." msgstr "視差強度。" #: src/settings_translation_file.cpp -#, fuzzy +msgid "Strength of generated normalmaps." +msgstr "生成之一般地圖的強度。" + +#: src/settings_translation_file.cpp msgid "" "Strength of light curve boost.\n" "The 3 'boost' parameters define a range of the light\n" "curve that is boosted in brightness." msgstr "" -"光強度曲線增強。\n" -"3個“ boost”參數定義光源的範圍\n" -"亮度增加的曲線。" #: src/settings_translation_file.cpp msgid "Strict protocol checking" @@ -6508,7 +6319,7 @@ msgstr "嚴格協議檢查" #: src/settings_translation_file.cpp msgid "Strip color codes" -msgstr "帶顏色代碼" +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -6523,16 +6334,6 @@ msgid "" "server-intensive extreme water flow and to avoid vast flooding of the\n" "world surface below." msgstr "" -"放置在固態漂浮面上的可選水的表面高度。\n" -"默認情況下禁用水,並且僅在設置了此值後才放置水\n" -"到'mgv7_floatland_ymax'-'mgv7_floatland_taper'(\n" -"上部逐漸變細)。\n" -"***警告,可能危害世界和服務器性能***:\n" -"啟用水位時,必須對浮地進行配置和測試\n" -"通過將'mgv7_floatland_density'設置為2.0(或其他\n" -"所需的值取決於“ mgv7_np_floatland”),以避免\n" -"服務器密集的極端水流,並避免大量洪水\n" -"下面的世界表面。" #: src/settings_translation_file.cpp msgid "Synchronous SQLite" @@ -6592,7 +6393,6 @@ msgid "Texture path" msgstr "材質路徑" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Textures on a node may be aligned either to the node or to the world.\n" "The former mode suits better things like machines, furniture, etc., while\n" @@ -6601,21 +6401,10 @@ msgid "" "this option allows enforcing it for certain node types. Note though that\n" "that is considered EXPERIMENTAL and may not work properly." msgstr "" -"節點上的紋理可以與節點對齊,也可以與世界對齊。\n" -"前一種模式適合機器,家具等更好的東西,而\n" -"後者使樓梯和微區塊更適合周圍環境。\n" -"但是,由於這種可能性是新的,因此較舊的服務器可能不會使用,\n" -"此選項允許對某些節點類型強制實施。 注意儘管\n" -"被認為是實驗性的,可能無法正常工作。" #: src/settings_translation_file.cpp msgid "The URL for the content repository" -msgstr "內容存儲庫的URL" - -#: src/settings_translation_file.cpp -#, fuzzy -msgid "The deadzone of the joystick" -msgstr "要使用的搖桿的識別碼" +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -6626,8 +6415,9 @@ msgstr "" "當呼叫「/profiler save [格式]」但不包含格式時。" #: src/settings_translation_file.cpp +#, fuzzy msgid "The depth of dirt or other biome filler node." -msgstr "塵土或其他填充物的深度。" +msgstr "塵土或其他填充物的深度" #: src/settings_translation_file.cpp msgid "" @@ -6650,11 +6440,6 @@ msgid "" "Default is 1.0 (1/2 node).\n" "Requires waving liquids to be enabled." msgstr "" -"波動液體表面的最大高度。\n" -"4.0 =波高是兩個節點。\n" -"0.0 =波形完全不移動。\n" -"默認值為1.0(1/2節點)。\n" -"需要啟用波狀液體。" #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." @@ -6669,7 +6454,6 @@ msgstr "" "在遊戲中請見 /privs 以取得在您的伺服器上與 mod 設定的完整清單。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The radius of the volume of blocks around every player that is subject to " "the\n" @@ -6679,27 +6463,16 @@ msgid "" "maintained.\n" "This should be configured together with active_object_send_range_blocks." msgstr "" -"每個玩家周圍的方塊體積的半徑受制於。\n" -"活動塊內容,以地图块(16個節點)表示。\n" -"在活動塊中,將加載對象並運行ABM。\n" -"這也是保持活動對象(生物)的最小範圍。\n" -"這應該與active_object_send_range_blocks一起配置。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end for Irrlicht.\n" "A restart is required after changing this.\n" "Note: On Android, stick with OGLES1 if unsure! App may fail to start " "otherwise.\n" -"On other platforms, OpenGL is recommended.\n" -"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" +"On other platforms, OpenGL is recommended, and it’s the only driver with\n" +"shader support currently." msgstr "" -"Irrlicht的渲染後端。\n" -"更改此設置後需要重新啟動。\n" -"注意:在Android上,如果不確定,請堅持使用OGLES1! 應用可能無法啟動,否則。\n" -"在其他平台上,建議使用OpenGL,它是唯一具有以下功能的驅動程序。\n" -"目前支持著色器。" #: src/settings_translation_file.cpp msgid "" @@ -6731,12 +6504,6 @@ msgstr "" "超過時將會嘗試透過傾倒舊佇列項目減少其\n" "大小。將值設為 0 以停用此功能。" -#: src/settings_translation_file.cpp -msgid "" -"The time budget allowed for ABMs to execute on each step\n" -"(as a fraction of the ABM Interval)" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "The time in seconds it takes between repeated events\n" @@ -6748,11 +6515,10 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "" -"The time in seconds it takes between repeated node placements when holding\n" -"the place button." -msgstr "" -"當按住滑鼠右鍵時,\n" -"重覆右鍵點選的間隔以秒計。" +"The time in seconds it takes between repeated right clicks when holding the " +"right\n" +"mouse button." +msgstr "當按住滑鼠右鍵時,重覆右鍵點選的間隔以秒計。" #: src/settings_translation_file.cpp msgid "The type of joystick" @@ -6764,9 +6530,6 @@ msgid "" "enabled. Also the vertical distance over which humidity drops by 10 if\n" "'altitude_dry' is enabled." msgstr "" -"如果'altitude_chill'為,則熱量下降20的垂直距離\n" -"已啟用。 如果濕度下降的垂直距離也是10\n" -"已啟用“ altitude_dry”。" #: src/settings_translation_file.cpp msgid "Third of 4 2D noises that together define hill/mountain range height." @@ -6782,7 +6545,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Time of day when a new world is started, in millihours (0-23999)." -msgstr "新世界開始的一天的時間,以毫秒為單位(0-23999)。" +msgstr "" #: src/settings_translation_file.cpp msgid "Time send interval" @@ -6851,6 +6614,7 @@ msgid "Undersampling" msgstr "Undersampling" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Undersampling is similar to using a lower screen resolution, but it applies\n" "to the game world only, keeping the GUI intact.\n" @@ -6858,8 +6622,7 @@ msgid "" "image.\n" "Higher values result in a less detailed image." msgstr "" -"Undersampling 類似於較低的螢幕解析度,\n" -"但其,\n" +"Undersampling 類似於較低的螢幕解析度,但其\n" "僅適用於遊戲世界,保持圖形使用者介面完好無損。\n" "它應該有顯著的效能提升,代價是細節較差的圖片。" @@ -6897,26 +6660,11 @@ msgid "Use bilinear filtering when scaling textures." msgstr "當縮放材質時使用雙線性過濾。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Use mip mapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" -"使用Mip映射縮放紋理。 可能會稍微提高性能,\n" -"尤其是在使用高分辨率紋理包時。\n" -"不支持Gamma正確縮小。" - -#: src/settings_translation_file.cpp -msgid "" -"Use multi-sample antialiasing (MSAA) to smooth out block edges.\n" -"This algorithm smooths out the 3D viewport while keeping the image sharp,\n" -"but it doesn't affect the insides of textures\n" -"(which is especially noticeable with transparent textures).\n" -"Visible spaces appear between nodes when shaders are disabled.\n" -"If set to 0, MSAA is disabled.\n" -"A restart is required after changing this option." -msgstr "" #: src/settings_translation_file.cpp msgid "Use trilinear filtering when scaling textures." @@ -6988,9 +6736,8 @@ msgid "Varies steepness of cliffs." msgstr "懸崖坡度變化。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Vertical climbing speed, in nodes per second." -msgstr "垂直爬升速度,以每秒節點數為單位。" +msgstr "" #: src/settings_translation_file.cpp msgid "Vertical screen synchronization." @@ -7026,7 +6773,7 @@ msgstr "視野" #: src/settings_translation_file.cpp msgid "Virtual joystick triggers aux button" -msgstr "虛擬操縱桿觸發aux按鈕" +msgstr "" #: src/settings_translation_file.cpp msgid "Volume" @@ -7052,23 +6799,20 @@ msgid "" msgstr "" "4D 碎形生成的 3D 切片的 W 座標。\n" "決定了會生成怎樣的 4D 形狀的 3D 切片。\n" -"改變碎形的形狀。\n" "對 3D 碎形沒有影響。\n" "範圍約在 -2 至 2 間。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Walking and flying speed, in nodes per second." -msgstr "行走和飛行速度,以每秒節點數為單位。" +msgstr "" #: src/settings_translation_file.cpp msgid "Walking speed" msgstr "走路速度" #: src/settings_translation_file.cpp -#, fuzzy msgid "Walking, flying and climbing speed in fast mode, in nodes per second." -msgstr "快速模式下的行走,飛行和爬升速度,以每秒節點數為單位。" +msgstr "" #: src/settings_translation_file.cpp msgid "Water level" @@ -7133,6 +6877,7 @@ msgstr "" "來軟體支援不佳的顯示卡驅動程式使用。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" @@ -7144,14 +6889,12 @@ msgid "" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." msgstr "" -"當使用雙線性/三線性/各向異性過濾器時,低解析度材質。\n" -"會被模糊,所以會自動將大小縮放至最近的內插值。\n" -"以讓像素保持清晰。這會設定最小材質大小。\n" -"供放大材質使用;較高的值看起來較銳利,\n" -"但需要更多的記憶體。\n" -"建議為 2 的次方。將這個值設定高於 1 不會。\n" -"有任何視覺效果,\n" -"除非雙線性/三線性/各向異性過濾。\n" +"當使用雙線性/三線性/各向異性過濾器時,低解析度材質\n" +"會被模糊,所以會自動將大小縮放至最近的內插值\n" +"以讓像素保持清晰。這會設定最小材質大小\n" +"供放大材質使用;較高的值看起來較銳利,但需要更多的\n" +"記憶體。建議為 2 的次方。將這個值設定高於 1 不會\n" +"有任何視覺效果,除非雙線性/三線性/各向異性過濾\n" "已啟用。" #: src/settings_translation_file.cpp @@ -7160,9 +6903,7 @@ msgid "" "Whether FreeType fonts are used, requires FreeType support to be compiled " "in.\n" "If disabled, bitmap and XML vectors fonts are used instead." -msgstr "" -"是否使用 freetype 字型,\n" -"需要將 freetype 支援編譯進來。" +msgstr "是否使用 freetype 字型,需要將 freetype 支援編譯進來。" #: src/settings_translation_file.cpp msgid "Whether node texture animations should be desynchronized per mapblock." @@ -7199,10 +6940,6 @@ msgid "" "In-game, you can toggle the mute state with the mute key or by using the\n" "pause menu." msgstr "" -"是否靜音。 您可以隨時取消靜音,除非\n" -"聲音系統已禁用(enable_sound = false)。\n" -"在遊戲中,您可以使用靜音鍵或通過使用靜音鍵來切換靜音狀態\n" -"暫停菜單。" #: src/settings_translation_file.cpp msgid "" @@ -7303,24 +7040,6 @@ msgstr "較低地形與湖底的 Y 高度。" msgid "Y-level of seabed." msgstr "海底的 Y 高度。" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURL 檔案下載逾時" @@ -7333,51 +7052,81 @@ msgstr "cURL 並行限制" msgid "cURL timeout" msgstr "cURL 逾時" +#~ msgid "Toggle Cinematic" +#~ msgstr "切換過場動畫" + +#, fuzzy +#~ msgid "Select Package File:" +#~ msgstr "選取 Mod 檔案:" + +#, fuzzy +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "大型偽隨機洞穴的 Y 上限。" + +#~ msgid "Waving Water" +#~ msgstr "波動的水" + +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "浮地陰影擴展的 Y 高度。" + +#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgstr "浮地中點與湖表面的 Y 高度。" + +#~ msgid "Waving water" +#~ msgstr "波動的水" + +#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgstr "在平整浮地地形的山丘高度與湖泊深度變化。" + +#, fuzzy #~ msgid "" -#~ "0 = parallax occlusion with slope information (faster).\n" -#~ "1 = relief mapping (slower, more accurate)." -#~ msgstr "" -#~ "0 = 包含斜率資訊的視差遮蔽(較快)。\n" -#~ "1 = 替換貼圖(較慢,較準確)。" +#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ msgstr "浮地山區域的典型最大高度,高於與低於中點。" + +#~ msgid "This font will be used for certain languages." +#~ msgstr "這個字型將會被用於特定的語言。" + +#~ msgid "Shadow limit" +#~ msgstr "陰影限制" + +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "TrueType 字型或點陣字的路徑。" + +#, fuzzy +#~ msgid "Lava depth" +#~ msgstr "大型洞穴深度" + +#~ msgid "IPv6 support." +#~ msgstr "IPv6 支援。" + +#~ msgid "Gamma" +#~ msgstr "Gamma" + +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "字型陰影 alpha(不透明度,介於 0 到 255)。" + +#~ msgid "Floatland base height noise" +#~ msgstr "浮地基礎高度噪音" + +#~ msgid "Enables filmic tone mapping" +#~ msgstr "啟用電影色調映射" + +#~ msgid "Enable VBO" +#~ msgstr "啟用 VBO" #~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." #~ msgstr "" -#~ "調整亮度表的伽瑪編碼。較高的數值會較亮。\n" -#~ "這個設定是給客戶端使用的,會被伺服器忽略。" +#~ "定義浮地的平整地形區。\n" +#~ "平整的浮地會在噪音 > 0 時產生。" -#~ msgid "Are you sure to reset your singleplayer world?" -#~ msgstr "您確定要重設您的單人遊戲世界嗎?" +#, fuzzy +#~ msgid "Darkness sharpness" +#~ msgstr "湖泊坡度" -#~ msgid "Back" -#~ msgstr "返回" - -#~ msgid "Bump Mapping" -#~ msgstr "映射貼圖" - -#~ msgid "Bumpmapping" -#~ msgstr "映射貼圖" - -#~ msgid "" -#~ "Changes the main menu UI:\n" -#~ "- Full: Multiple singleplayer worlds, game choice, texture pack " -#~ "chooser, etc.\n" -#~ "- Simple: One singleplayer world, no game or texture pack choosers. May " -#~ "be\n" -#~ "necessary for smaller screens." -#~ msgstr "" -#~ "更改主菜單用戶界面:\n" -#~ "-完整:多個單人遊戲世界,遊戲選擇,紋理包選擇器等。\n" -#~ "-簡單:一個單人遊戲世界,沒有遊戲或紋理包選擇器。 也許\n" -#~ "對於較小的屏幕是必需的。" - -#~ msgid "Config mods" -#~ msgstr "設定 Mod" - -#~ msgid "Configure" -#~ msgstr "設定" +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "控制隧道的寬度,較小的值會創造出較寬的隧道。" #, fuzzy #~ msgid "" @@ -7387,217 +7136,28 @@ msgstr "cURL 逾時" #~ "控制山地的浮地密度。\n" #~ "是加入到 'np_mountain' 噪音值的補償。" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "控制隧道的寬度,較小的值會創造出較寬的隧道。" - -#~ msgid "Crosshair color (R,G,B)." -#~ msgstr "十字色彩 (R,G,B)。" - -#, fuzzy -#~ msgid "Darkness sharpness" -#~ msgstr "湖泊坡度" - #~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." #~ msgstr "" -#~ "定義浮地的平整地形區。\n" -#~ "平整的浮地會在噪音 > 0 時產生。" - -#~ msgid "" -#~ "Defines sampling step of texture.\n" -#~ "A higher value results in smoother normal maps." -#~ msgstr "" -#~ "定義材質的採樣步驟。\n" -#~ "較高的值會有較平滑的一般地圖。" - -#~ msgid "Downloading and installing $1, please wait..." -#~ msgstr "正在下載並安裝 $1,請稍候……" - -#~ msgid "Enable VBO" -#~ msgstr "啟用 VBO" - -#~ msgid "" -#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the " -#~ "texture pack\n" -#~ "or need to be auto-generated.\n" -#~ "Requires shaders to be enabled." -#~ msgstr "" -#~ "為材質啟用貼圖轉儲。普通地圖需要材質包的支援\n" -#~ "或是自動生成。\n" -#~ "必須啟用著色器。" - -#~ msgid "Enables filmic tone mapping" -#~ msgstr "啟用電影色調映射" - -#~ msgid "" -#~ "Enables on the fly normalmap generation (Emboss effect).\n" -#~ "Requires bumpmapping to be enabled." -#~ msgstr "" -#~ "啟用忙碌的一般地圖生成(浮雕效果)。\n" -#~ "必須啟用貼圖轉儲。" - -#~ msgid "" -#~ "Enables parallax occlusion mapping.\n" -#~ "Requires shaders to be enabled." -#~ msgstr "" -#~ "啟用視差遮蔽貼圖。\n" -#~ "必須啟用著色器。" - -#~ msgid "" -#~ "Experimental option, might cause visible spaces between blocks\n" -#~ "when set to higher number than 0." -#~ msgstr "" -#~ "實驗性選項,當設定到大於零的值時\n" -#~ "也許會造成在方塊間有視覺空隙。" - -#~ msgid "FPS in pause menu" -#~ msgstr "在暫停選單中的 FPS" - -#~ msgid "Floatland base height noise" -#~ msgstr "浮地基礎高度噪音" - -#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." -#~ msgstr "字型陰影 alpha(不透明度,介於 0 到 255)。" - -#~ msgid "Gamma" -#~ msgstr "Gamma" - -#~ msgid "Generate Normal Maps" -#~ msgstr "產生一般地圖" - -#~ msgid "Generate normalmaps" -#~ msgstr "生成一般地圖" - -#~ msgid "IPv6 support." -#~ msgstr "IPv6 支援。" - -#, fuzzy -#~ msgid "Lava depth" -#~ msgstr "大型洞穴深度" - -#~ msgid "Limit of emerge queues on disk" -#~ msgstr "在磁碟上出現佇列的限制" - -#~ msgid "Main" -#~ msgstr "主要" - -#, fuzzy -#~ msgid "Main menu style" -#~ msgstr "主選單指令稿" - -#~ msgid "Minimap in radar mode, Zoom x2" -#~ msgstr "雷達模式的迷你地圖,放大 2 倍" - -#~ msgid "Minimap in radar mode, Zoom x4" -#~ msgstr "雷達模式的迷你地圖,放大 4 倍" - -#~ msgid "Minimap in surface mode, Zoom x2" -#~ msgstr "表面模式的迷你地圖,放大 2 倍" - -#~ msgid "Minimap in surface mode, Zoom x4" -#~ msgstr "表面模式的迷你地圖,放大 4 倍" - -#~ msgid "Name/Password" -#~ msgstr "名稱/密碼" - -#~ msgid "No" -#~ msgstr "否" - -#~ msgid "Normalmaps sampling" -#~ msgstr "法線貼圖採樣" - -#~ msgid "Normalmaps strength" -#~ msgstr "法線貼圖強度" - -#~ msgid "Number of parallax occlusion iterations." -#~ msgstr "視差遮蔽迭代次數。" - -#~ msgid "Ok" -#~ msgstr "確定" - -#~ msgid "Overall bias of parallax occlusion effect, usually scale/2." -#~ msgstr "視差遮蔽效果的總偏差,通常是規模/2。" - -#~ msgid "Overall scale of parallax occlusion effect." -#~ msgstr "視差遮蔽效果的總規模。" - -#~ msgid "Parallax Occlusion" -#~ msgstr "視差遮蔽" - -#~ msgid "Parallax occlusion" -#~ msgstr "視差遮蔽" - -#~ msgid "Parallax occlusion bias" -#~ msgstr "視差遮蔽偏差" - -#~ msgid "Parallax occlusion iterations" -#~ msgstr "視差遮蔽迭代" - -#~ msgid "Parallax occlusion mode" -#~ msgstr "視差遮蔽模式" - -#, fuzzy -#~ msgid "Parallax occlusion scale" -#~ msgstr "視差遮蔽係數" - -#~ msgid "Parallax occlusion strength" -#~ msgstr "視差遮蔽強度" - -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "TrueType 字型或點陣字的路徑。" +#~ "調整亮度表的伽瑪編碼。較高的數值會較亮。\n" +#~ "這個設定是給客戶端使用的,會被伺服器忽略。" #~ msgid "Path to save screenshots at." #~ msgstr "儲存螢幕截圖的路徑。" -#~ msgid "Reset singleplayer world" -#~ msgstr "重設單人遊戲世界" +#~ msgid "Parallax occlusion strength" +#~ msgstr "視差遮蔽強度" -#, fuzzy -#~ msgid "Select Package File:" -#~ msgstr "選取 Mod 檔案:" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "在磁碟上出現佇列的限制" -#~ msgid "Shadow limit" -#~ msgstr "陰影限制" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "正在下載並安裝 $1,請稍候……" -#~ msgid "Start Singleplayer" -#~ msgstr "開始單人遊戲" +#~ msgid "Back" +#~ msgstr "返回" -#~ msgid "Strength of generated normalmaps." -#~ msgstr "生成之一般地圖的強度。" - -#~ msgid "This font will be used for certain languages." -#~ msgstr "這個字型將會被用於特定的語言。" - -#~ msgid "Toggle Cinematic" -#~ msgstr "切換過場動畫" - -#, fuzzy -#~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." -#~ msgstr "浮地山區域的典型最大高度,高於與低於中點。" - -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." -#~ msgstr "在平整浮地地形的山丘高度與湖泊深度變化。" - -#~ msgid "View" -#~ msgstr "查看" - -#~ msgid "Waving Water" -#~ msgstr "波動的水" - -#~ msgid "Waving water" -#~ msgstr "波動的水" - -#, fuzzy -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "大型偽隨機洞穴的 Y 上限。" - -#~ msgid "Y-level of floatland midpoint and lake surface." -#~ msgstr "浮地中點與湖表面的 Y 高度。" - -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "浮地陰影擴展的 Y 高度。" - -#~ msgid "Yes" -#~ msgstr "是" +#~ msgid "Ok" +#~ msgstr "確定" From e86fbf9c06ad055f44c2784d3f115ad7d52fe62c Mon Sep 17 00:00:00 2001 From: "updatepo.sh" Date: Tue, 23 Feb 2021 19:03:34 +0100 Subject: [PATCH 048/110] Update minetest.conf.example and dummy translation file --- minetest.conf.example | 7 ++++++- src/settings_translation_file.cpp | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index f5f608adf..47c03ff80 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -503,6 +503,11 @@ ### Basic +# Whether nametag backgrounds should be shown by default. +# Mods may still set a background. +# type: bool +# show_nametag_backgrounds = true + # Enable vertex buffer objects. # This should greatly improve graphics performance. # type: bool @@ -1298,7 +1303,7 @@ # type: bool # enable_damage = false -# Enable creative mode for new created maps. +# Enable creative mode for all players # type: bool # creative_mode = false diff --git a/src/settings_translation_file.cpp b/src/settings_translation_file.cpp index 8ce323ff6..317186e94 100644 --- a/src/settings_translation_file.cpp +++ b/src/settings_translation_file.cpp @@ -203,6 +203,8 @@ fake_function() { gettext("Graphics"); gettext("In-Game"); gettext("Basic"); + gettext("Show nametag backgrounds by default"); + gettext("Whether nametag backgrounds should be shown by default.\nMods may still set a background."); gettext("VBO"); gettext("Enable vertex buffer objects.\nThis should greatly improve graphics performance."); gettext("Fog"); @@ -513,7 +515,7 @@ fake_function() { gettext("Damage"); gettext("Enable players getting damage and dying."); gettext("Creative"); - gettext("Enable creative mode for new created maps."); + gettext("Enable creative mode for all players"); gettext("Fixed map seed"); gettext("A chosen map seed for a new map, leave empty for random.\nWill be overridden when creating a new world in the main menu."); gettext("Default password"); From bbf4f7ae54ccdac0598003bbd8d3e549ddf3e565 Mon Sep 17 00:00:00 2001 From: "updatepo.sh" Date: Tue, 23 Feb 2021 19:04:38 +0100 Subject: [PATCH 049/110] Update translation files --- po/ar/minetest.po | 19 +- po/be/minetest.po | 20 +- po/bg/minetest.po | 22 +- po/ca/minetest.po | 18 +- po/cs/minetest.po | 20 +- po/da/minetest.po | 19 +- po/de/minetest.po | 29 +- po/dv/minetest.po | 18 +- po/el/minetest.po | 18 +- po/eo/minetest.po | 21 +- po/es/minetest.po | 21 +- po/et/minetest.po | 19 +- po/eu/minetest.po | 19 +- po/fi/minetest.po | 22 +- po/fr/minetest.po | 21 +- po/gd/minetest.po | 18 +- po/gl/minetest.po | 18 +- po/he/minetest.po | 23 +- po/hi/minetest.po | 19 +- po/hu/minetest.po | 21 +- po/id/minetest.po | 33 +- po/it/minetest.po | 33 +- po/ja/minetest.po | 35 +- po/jbo/minetest.po | 18 +- po/kk/minetest.po | 18 +- po/kn/minetest.po | 18 +- po/ko/minetest.po | 20 +- po/ky/minetest.po | 18 +- po/lt/minetest.po | 18 +- po/lv/minetest.po | 19 +- po/minetest.pot | 18 +- po/ms/minetest.po | 29 +- po/ms_Arab/minetest.po | 21 +- po/nb/minetest.po | 21 +- po/nl/minetest.po | 33 +- po/nn/minetest.po | 19 +- po/pl/minetest.po | 20 +- po/pt/minetest.po | 21 +- po/pt_BR/minetest.po | 32 +- po/ro/minetest.po | 19 +- po/ru/minetest.po | 29 +- po/sk/minetest.po | 24 +- po/sl/minetest.po | 20 +- po/sr_Cyrl/minetest.po | 18 +- po/sr_Latn/minetest.po | 22 +- po/sv/minetest.po | 18 +- po/sw/minetest.po | 18 +- po/th/minetest.po | 20 +- po/tr/minetest.po | 21 +- po/uk/minetest.po | 19 +- po/vi/minetest.po | 18 +- po/zh_CN/minetest.po | 856 +++++++++++++++++++++++++--------------- po/zh_TW/minetest.po | 875 +++++++++++++++++++++++++---------------- 53 files changed, 2025 insertions(+), 801 deletions(-) diff --git a/po/ar/minetest.po b/po/ar/minetest.po index 530715a6d..1ab09c2bd 100644 --- a/po/ar/minetest.po +++ b/po/ar/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-30 21:13+0100\n" +"POT-Creation-Date: 2021-02-23 19:03+0100\n" "PO-Revision-Date: 2020-10-29 16:26+0000\n" "Last-Translator: abidin toumi \n" "Language-Team: Arabic \n" "Language-Team: Belarusian \n" "Language-Team: Bulgarian \n" "Language-Team: Catalan \n" "Language-Team: Czech \n" "Language-Team: Danish \n" "Language-Team: German \n" "Language-Team: Dhivehi \n" "Language-Team: Greek \n" "Language-Team: Esperanto \n" "Language-Team: Spanish \n" "Language-Team: Estonian \n" "Language-Team: Basque \n" "Language-Team: Finnish \n" "Language-Team: French \n" "Language-Team: Gaelic \n" "Language-Team: Galician \n" "Language-Team: Hebrew \n" "Language-Team: Hindi \n" "Language-Team: Hungarian \n" "Language-Team: Indonesian \n" "Language-Team: Italian \n" "Language-Team: Japanese \n" "Language-Team: Lojban \n" "Language-Team: Kazakh \n" "Language-Team: Kannada \n" "Language-Team: Korean \n" "Language-Team: Kyrgyz \n" "Language-Team: Lithuanian \n" "Language-Team: Latvian \n" "Language-Team: LANGUAGE \n" @@ -698,6 +698,10 @@ msgstr "" msgid "Try reenabling public serverlist and check your internet connection." msgstr "" +#: builtin/mainmenu/serverlistmgr.lua +msgid "Public server list is disabled" +msgstr "" + #: builtin/mainmenu/tab_content.lua msgid "Installed Packages:" msgstr "" @@ -2959,6 +2963,16 @@ msgstr "" msgid "Basic" msgstr "" +#: src/settings_translation_file.cpp +msgid "Show nametag backgrounds by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether nametag backgrounds should be shown by default.\n" +"Mods may still set a background." +msgstr "" + #: src/settings_translation_file.cpp msgid "VBO" msgstr "" @@ -4426,7 +4440,7 @@ msgid "Creative" msgstr "" #: src/settings_translation_file.cpp -msgid "Enable creative mode for new created maps." +msgid "Enable creative mode for all players" msgstr "" #: src/settings_translation_file.cpp diff --git a/po/ms/minetest.po b/po/ms/minetest.po index d15da624e..d35e063cc 100644 --- a/po/ms/minetest.po +++ b/po/ms/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Malay (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-30 21:13+0100\n" +"POT-Creation-Date: 2021-02-23 19:03+0100\n" "PO-Revision-Date: 2021-02-01 05:52+0000\n" "Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat " "Yasuyoshi \n" @@ -700,6 +700,11 @@ msgstr "Gagal memasang pek mods sebagai $1" msgid "Loading..." msgstr "Sedang memuatkan..." +#: builtin/mainmenu/serverlistmgr.lua +#, fuzzy +msgid "Public server list is disabled" +msgstr "Skrip pihak klien dilumpuhkan" + #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" @@ -3003,7 +3008,8 @@ msgid "Enable console window" msgstr "Membolehkan tetingkap konsol" #: src/settings_translation_file.cpp -msgid "Enable creative mode for new created maps." +#, fuzzy +msgid "Enable creative mode for all players" msgstr "Membolehkan mod kreatif untuk peta baru dicipta." #: src/settings_translation_file.cpp @@ -3562,8 +3568,8 @@ msgid "" msgstr "" "Cara pengendalian panggilan API Lua yang terkecam:\n" "- none: Jangan log panggilan terkecam\n" -"- log: meniru dan menulis log runut balik bagi panggilan terkecam (lalai)." -"\n" +"- log: meniru dan menulis log runut balik bagi panggilan terkecam " +"(lalai).\n" "- error: gugurkan penggunaan panggilan terkecam (digalakkan untuk " "pembangun mods)." @@ -6301,6 +6307,11 @@ msgstr "" "Tunjuk kotak pemilihan entiti\n" "Anda perlu mulakan semula selepas mengubah tetapan ini." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Show nametag backgrounds by default" +msgstr "Fon tebal secara lalainya" + #: src/settings_translation_file.cpp msgid "Shutdown message" msgstr "Mesej penutupan" @@ -7134,8 +7145,8 @@ msgstr "" "lebih tajam, tetapi memerlukan memori yang lebih banyak. Nilai kuasa 2\n" "digalakkan. Menetapkan nilai ini lebih tinggi dari 1 tidak akan " "menampakkan\n" -"kesan yang nyata melainkan tapisan bilinear/trilinear/anisotropik dibolehkan." -"\n" +"kesan yang nyata melainkan tapisan bilinear/trilinear/anisotropik " +"dibolehkan.\n" "Ini juga digunakan sebagai saiz tekstur nod asas untuk autopenyesuaian\n" "tekstur jajaran dunia." @@ -7149,6 +7160,12 @@ msgstr "" "dikompil bersama. Jika dilumpuhkan, fon peta bit dan vektor XML akan " "digunakan." +#: src/settings_translation_file.cpp +msgid "" +"Whether nametag backgrounds should be shown by default.\n" +"Mods may still set a background." +msgstr "" + #: src/settings_translation_file.cpp msgid "Whether node texture animations should be desynchronized per mapblock." msgstr "" diff --git a/po/ms_Arab/minetest.po b/po/ms_Arab/minetest.po index 2520856c3..42d758b7d 100644 --- a/po/ms_Arab/minetest.po +++ b/po/ms_Arab/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-30 21:13+0100\n" +"POT-Creation-Date: 2021-02-23 19:03+0100\n" "PO-Revision-Date: 2020-10-20 18:26+0000\n" "Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat " "Yasuyoshi \n" @@ -710,6 +710,11 @@ msgstr "ݢاݢل مماسڠ ڤيک مودس سباݢاي $1" msgid "Loading..." msgstr "سدڠ ممواتکن..." +#: builtin/mainmenu/serverlistmgr.lua +#, fuzzy +msgid "Public server list is disabled" +msgstr "سکريڤ ڤيهق کليئن دلومڤوهکن" + #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "چوب اکتيفکن سمولا سناراي ڤلاين عوام فان ڤريقسا سمبوڠن اينترنيت اندا." @@ -2948,7 +2953,8 @@ msgid "Enable console window" msgstr "ممبوليهکن تتيڠکڤ کونسول" #: src/settings_translation_file.cpp -msgid "Enable creative mode for new created maps." +#, fuzzy +msgid "Enable creative mode for all players" msgstr "ممبوليهکن مود کرياتيف اونتوق ڤتا بارو دچيڤتا." #: src/settings_translation_file.cpp @@ -6029,6 +6035,11 @@ msgid "" "A restart is required after changing this." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Show nametag backgrounds by default" +msgstr "فون تبل سچارا لالايڽ" + #: src/settings_translation_file.cpp msgid "Shutdown message" msgstr "ميسيج ڤنوتوڤن" @@ -6797,6 +6808,12 @@ msgstr "" "منتڤکن سام اد فون FreeType دݢوناکن⹁ ممرلوکن سوکوڠن Freetype\n" "دکومڤيل برسام. جيک دلومڤوهکن⹁ فون ڤتا بيت دان ۏيکتور XML اکن دݢوناکن." +#: src/settings_translation_file.cpp +msgid "" +"Whether nametag backgrounds should be shown by default.\n" +"Mods may still set a background." +msgstr "" + #: src/settings_translation_file.cpp msgid "Whether node texture animations should be desynchronized per mapblock." msgstr "سام اد انيماسي تيکستور نود ڤرلو دڽهسݢرقکن ڤد ستياڤ بلوک ڤتا." diff --git a/po/nb/minetest.po b/po/nb/minetest.po index b3d6ae154..3762509a4 100644 --- a/po/nb/minetest.po +++ b/po/nb/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Norwegian Bokmål (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-30 21:13+0100\n" +"POT-Creation-Date: 2021-02-23 19:03+0100\n" "PO-Revision-Date: 2021-01-10 01:32+0000\n" "Last-Translator: Allan Nordhøy \n" "Language-Team: Norwegian Bokmål \n" "Language-Team: Dutch \n" "Language-Team: Norwegian Nynorsk \n" "Language-Team: Polish \n" "Language-Team: Portuguese \n" "Language-Team: Portuguese (Brazil) \n" "Language-Team: Romanian \n" "Language-Team: Russian \n" "Language-Team: Slovak \n" "Language-Team: Slovenian \n" "Language-Team: Serbian (cyrillic) \n" "Language-Team: Serbian (latin) \n" "Language-Team: Swedish \n" "Language-Team: Swahili \n" "Language-Team: Thai \n" "Language-Team: Turkish \n" "Language-Team: Ukrainian \n" "Language-Team: Vietnamese \n" "Language-Team: Chinese (Simplified) 0." +#~ "0 = parallax occlusion with slope information (faster).\n" +#~ "1 = relief mapping (slower, more accurate)." #~ msgstr "" -#~ "定义 floatland 平滑地形的区域。\n" -#~ "当噪音0时, 平滑的 floatlands 发生。" - -#, fuzzy -#~ msgid "Darkness sharpness" -#~ msgstr "地图生成器平面湖坡度" - -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "控制隧道宽度,较小的值创建更宽的隧道。" - -#, fuzzy -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "控制 floatland 地形的密度。\n" -#~ "是添加到 \"np_mountain\" 噪声值的偏移量。" +#~ "0 = 利用梯度信息进行视差遮蔽 (较快).\n" +#~ "1 = 浮雕映射 (较慢, 但准确)." #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " @@ -7107,20 +7110,237 @@ msgstr "cURL 超时" #~ "调整亮度表的伽玛编码。较高的数值会较亮。\n" #~ "这个设定是给客户端使用的,会被服务器忽略。" -#~ msgid "Path to save screenshots at." -#~ msgstr "屏幕截图保存路径。" - -#~ msgid "Parallax occlusion strength" -#~ msgstr "视差遮蔽强度" - -#~ msgid "Limit of emerge queues on disk" -#~ msgstr "磁盘上的生产队列限制" - -#~ msgid "Downloading and installing $1, please wait..." -#~ msgstr "正在下载和安装 $1,请稍等..." +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "你确定要重置你的单人世界吗?" #~ msgid "Back" #~ msgstr "后退" +#~ msgid "Bump Mapping" +#~ msgstr "凹凸贴图" + +#~ msgid "Bumpmapping" +#~ msgstr "凹凸贴图" + +#~ msgid "" +#~ "Changes the main menu UI:\n" +#~ "- Full: Multiple singleplayer worlds, game choice, texture pack " +#~ "chooser, etc.\n" +#~ "- Simple: One singleplayer world, no game or texture pack choosers. May " +#~ "be\n" +#~ "necessary for smaller screens." +#~ msgstr "" +#~ "主菜单UI的变化:\n" +#~ "- 完整 多个单人世界,子游戏选择,材质包选择器等。\n" +#~ "- 简单:单个单人世界,无子游戏材质包选择器。可能\n" +#~ "需要用于小屏幕。" + +#~ msgid "Config mods" +#~ msgstr "配置 mod" + +#~ msgid "Configure" +#~ msgstr "配置" + +#, fuzzy +#~ msgid "" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." +#~ msgstr "" +#~ "控制 floatland 地形的密度。\n" +#~ "是添加到 \"np_mountain\" 噪声值的偏移量。" + +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "控制隧道宽度,较小的值创建更宽的隧道。" + +#~ msgid "Crosshair color (R,G,B)." +#~ msgstr "准星颜色(红,绿,蓝)。" + +#, fuzzy +#~ msgid "Darkness sharpness" +#~ msgstr "地图生成器平面湖坡度" + +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "定义 floatland 平滑地形的区域。\n" +#~ "当噪音0时, 平滑的 floatlands 发生。" + +#~ msgid "" +#~ "Defines sampling step of texture.\n" +#~ "A higher value results in smoother normal maps." +#~ msgstr "" +#~ "定义材质采样步骤。\n" +#~ "数值越高常态贴图越平滑。" + +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "正在下载和安装 $1,请稍等..." + +#~ msgid "Enable VBO" +#~ msgstr "启用 VBO" + +#~ msgid "" +#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the " +#~ "texture pack\n" +#~ "or need to be auto-generated.\n" +#~ "Requires shaders to be enabled." +#~ msgstr "" +#~ "启用材质的凹凸贴图效果。需要材质包支持法线贴图,\n" +#~ "否则将自动生成法线。\n" +#~ "需要启用着色器。" + +#~ msgid "Enables filmic tone mapping" +#~ msgstr "启用电影基调映射" + +#~ msgid "" +#~ "Enables on the fly normalmap generation (Emboss effect).\n" +#~ "Requires bumpmapping to be enabled." +#~ msgstr "" +#~ "启用即时法线贴图生成(浮雕效果)。\n" +#~ "需要启用凹凸贴图。" + +#~ msgid "" +#~ "Enables parallax occlusion mapping.\n" +#~ "Requires shaders to be enabled." +#~ msgstr "" +#~ "启用视差遮蔽贴图。\n" +#~ "需要启用着色器。" + +#~ msgid "" +#~ "Experimental option, might cause visible spaces between blocks\n" +#~ "when set to higher number than 0." +#~ msgstr "" +#~ "实验性选项,设为大于 0 的数字时可能导致\n" +#~ "块之间出现可见空间。" + +#~ msgid "FPS in pause menu" +#~ msgstr "暂停菜单 FPS" + +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "字体阴影不透明度(0-255)。" + +#~ msgid "Gamma" +#~ msgstr "伽马" + +#~ msgid "Generate Normal Maps" +#~ msgstr "生成法线贴图" + +#~ msgid "Generate normalmaps" +#~ msgstr "生成发现贴图" + +#~ msgid "IPv6 support." +#~ msgstr "IPv6 支持。" + +#, fuzzy +#~ msgid "Lava depth" +#~ msgstr "巨大洞穴深度" + +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "磁盘上的生产队列限制" + +#~ msgid "Main" +#~ msgstr "主菜单" + +#~ msgid "Main menu style" +#~ msgstr "主菜单样式" + +#~ msgid "Minimap in radar mode, Zoom x2" +#~ msgstr "雷达小地图,放大至两倍" + +#~ msgid "Minimap in radar mode, Zoom x4" +#~ msgstr "雷达小地图, 放大至四倍" + +#~ msgid "Minimap in surface mode, Zoom x2" +#~ msgstr "地表模式小地图, 放大至两倍" + +#~ msgid "Minimap in surface mode, Zoom x4" +#~ msgstr "地表模式小地图, 放大至四倍" + +#~ msgid "Name/Password" +#~ msgstr "用户名/密码" + +#~ msgid "No" +#~ msgstr "否" + +#~ msgid "Normalmaps sampling" +#~ msgstr "法线贴图采样" + +#~ msgid "Normalmaps strength" +#~ msgstr "法线贴图强度" + +#~ msgid "Number of parallax occlusion iterations." +#~ msgstr "视差遮蔽迭代数。" + #~ msgid "Ok" #~ msgstr "确定" + +#~ msgid "Overall bias of parallax occlusion effect, usually scale/2." +#~ msgstr "视差遮蔽效果的整体斜纹,通常为比例/2。" + +#~ msgid "Overall scale of parallax occlusion effect." +#~ msgstr "视差遮蔽效果的总体比例。" + +#~ msgid "Parallax Occlusion" +#~ msgstr "视差遮蔽" + +#~ msgid "Parallax occlusion" +#~ msgstr "视差遮蔽" + +#~ msgid "Parallax occlusion bias" +#~ msgstr "视差遮蔽偏移" + +#~ msgid "Parallax occlusion iterations" +#~ msgstr "视差遮蔽迭代" + +#~ msgid "Parallax occlusion mode" +#~ msgstr "视差遮蔽模式" + +#~ msgid "Parallax occlusion scale" +#~ msgstr "视差遮蔽比例" + +#~ msgid "Parallax occlusion strength" +#~ msgstr "视差遮蔽强度" + +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "TrueType 字体或位图的路径。" + +#~ msgid "Path to save screenshots at." +#~ msgstr "屏幕截图保存路径。" + +#~ msgid "Reset singleplayer world" +#~ msgstr "重置单人世界" + +#~ msgid "Select Package File:" +#~ msgstr "选择包文件:" + +#, fuzzy +#~ msgid "Shadow limit" +#~ msgstr "地图块限制" + +#~ msgid "Start Singleplayer" +#~ msgstr "单人游戏" + +#~ msgid "Strength of generated normalmaps." +#~ msgstr "生成的一般地图强度。" + +#~ msgid "This font will be used for certain languages." +#~ msgstr "用于特定语言的字体。" + +#~ msgid "Toggle Cinematic" +#~ msgstr "切换电影模式" + +#~ msgid "View" +#~ msgstr "视野" + +#~ msgid "Waving Water" +#~ msgstr "流动的水面" + +#~ msgid "Waving water" +#~ msgstr "摇动水" + +#, fuzzy +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "大型随机洞穴的Y轴最大值。" + +#~ msgid "Yes" +#~ msgstr "是" diff --git a/po/zh_TW/minetest.po b/po/zh_TW/minetest.po index 99a9da965..99332e226 100644 --- a/po/zh_TW/minetest.po +++ b/po/zh_TW/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Chinese (Traditional) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"POT-Creation-Date: 2021-02-23 19:03+0100\n" "PO-Revision-Date: 2020-12-24 05:29+0000\n" "Last-Translator: Man Ho Yiu \n" "Language-Team: Chinese (Traditional) 0." +#~ "0 = parallax occlusion with slope information (faster).\n" +#~ "1 = relief mapping (slower, more accurate)." #~ msgstr "" -#~ "定義浮地的平整地形區。\n" -#~ "平整的浮地會在噪音 > 0 時產生。" - -#, fuzzy -#~ msgid "Darkness sharpness" -#~ msgstr "湖泊坡度" - -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "控制隧道的寬度,較小的值會創造出較寬的隧道。" - -#, fuzzy -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "控制山地的浮地密度。\n" -#~ "是加入到 'np_mountain' 噪音值的補償。" +#~ "0 = 包含斜率資訊的視差遮蔽(較快)。\n" +#~ "1 = 替換貼圖(較慢,較準確)。" #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " @@ -7144,20 +7130,243 @@ msgstr "cURL 逾時" #~ "調整亮度表的伽瑪編碼。較高的數值會較亮。\n" #~ "這個設定是給客戶端使用的,會被伺服器忽略。" -#~ msgid "Path to save screenshots at." -#~ msgstr "儲存螢幕截圖的路徑。" - -#~ msgid "Parallax occlusion strength" -#~ msgstr "視差遮蔽強度" - -#~ msgid "Limit of emerge queues on disk" -#~ msgstr "在磁碟上出現佇列的限制" - -#~ msgid "Downloading and installing $1, please wait..." -#~ msgstr "正在下載並安裝 $1,請稍候……" +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "您確定要重設您的單人遊戲世界嗎?" #~ msgid "Back" #~ msgstr "返回" +#~ msgid "Bump Mapping" +#~ msgstr "映射貼圖" + +#~ msgid "Bumpmapping" +#~ msgstr "映射貼圖" + +#~ msgid "Config mods" +#~ msgstr "設定 Mod" + +#~ msgid "Configure" +#~ msgstr "設定" + +#, fuzzy +#~ msgid "" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." +#~ msgstr "" +#~ "控制山地的浮地密度。\n" +#~ "是加入到 'np_mountain' 噪音值的補償。" + +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "控制隧道的寬度,較小的值會創造出較寬的隧道。" + +#~ msgid "Crosshair color (R,G,B)." +#~ msgstr "十字色彩 (R,G,B)。" + +#, fuzzy +#~ msgid "Darkness sharpness" +#~ msgstr "湖泊坡度" + +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "定義浮地的平整地形區。\n" +#~ "平整的浮地會在噪音 > 0 時產生。" + +#~ msgid "" +#~ "Defines sampling step of texture.\n" +#~ "A higher value results in smoother normal maps." +#~ msgstr "" +#~ "定義材質的採樣步驟。\n" +#~ "較高的值會有較平滑的一般地圖。" + +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "正在下載並安裝 $1,請稍候……" + +#~ msgid "Enable VBO" +#~ msgstr "啟用 VBO" + +#~ msgid "" +#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the " +#~ "texture pack\n" +#~ "or need to be auto-generated.\n" +#~ "Requires shaders to be enabled." +#~ msgstr "" +#~ "為材質啟用貼圖轉儲。普通地圖需要材質包的支援\n" +#~ "或是自動生成。\n" +#~ "必須啟用著色器。" + +#~ msgid "Enables filmic tone mapping" +#~ msgstr "啟用電影色調映射" + +#~ msgid "" +#~ "Enables on the fly normalmap generation (Emboss effect).\n" +#~ "Requires bumpmapping to be enabled." +#~ msgstr "" +#~ "啟用忙碌的一般地圖生成(浮雕效果)。\n" +#~ "必須啟用貼圖轉儲。" + +#~ msgid "" +#~ "Enables parallax occlusion mapping.\n" +#~ "Requires shaders to be enabled." +#~ msgstr "" +#~ "啟用視差遮蔽貼圖。\n" +#~ "必須啟用著色器。" + +#~ msgid "" +#~ "Experimental option, might cause visible spaces between blocks\n" +#~ "when set to higher number than 0." +#~ msgstr "" +#~ "實驗性選項,當設定到大於零的值時\n" +#~ "也許會造成在方塊間有視覺空隙。" + +#~ msgid "FPS in pause menu" +#~ msgstr "在暫停選單中的 FPS" + +#~ msgid "Floatland base height noise" +#~ msgstr "浮地基礎高度噪音" + +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "字型陰影 alpha(不透明度,介於 0 到 255)。" + +#~ msgid "Gamma" +#~ msgstr "Gamma" + +#~ msgid "Generate Normal Maps" +#~ msgstr "產生一般地圖" + +#~ msgid "Generate normalmaps" +#~ msgstr "生成一般地圖" + +#~ msgid "IPv6 support." +#~ msgstr "IPv6 支援。" + +#, fuzzy +#~ msgid "Lava depth" +#~ msgstr "大型洞穴深度" + +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "在磁碟上出現佇列的限制" + +#~ msgid "Main" +#~ msgstr "主要" + +#, fuzzy +#~ msgid "Main menu style" +#~ msgstr "主選單指令稿" + +#~ msgid "Minimap in radar mode, Zoom x2" +#~ msgstr "雷達模式的迷你地圖,放大 2 倍" + +#~ msgid "Minimap in radar mode, Zoom x4" +#~ msgstr "雷達模式的迷你地圖,放大 4 倍" + +#~ msgid "Minimap in surface mode, Zoom x2" +#~ msgstr "表面模式的迷你地圖,放大 2 倍" + +#~ msgid "Minimap in surface mode, Zoom x4" +#~ msgstr "表面模式的迷你地圖,放大 4 倍" + +#~ msgid "Name/Password" +#~ msgstr "名稱/密碼" + +#~ msgid "No" +#~ msgstr "否" + +#~ msgid "Normalmaps sampling" +#~ msgstr "法線貼圖採樣" + +#~ msgid "Normalmaps strength" +#~ msgstr "法線貼圖強度" + +#~ msgid "Number of parallax occlusion iterations." +#~ msgstr "視差遮蔽迭代次數。" + #~ msgid "Ok" #~ msgstr "確定" + +#~ msgid "Overall bias of parallax occlusion effect, usually scale/2." +#~ msgstr "視差遮蔽效果的總偏差,通常是規模/2。" + +#~ msgid "Overall scale of parallax occlusion effect." +#~ msgstr "視差遮蔽效果的總規模。" + +#~ msgid "Parallax Occlusion" +#~ msgstr "視差遮蔽" + +#~ msgid "Parallax occlusion" +#~ msgstr "視差遮蔽" + +#~ msgid "Parallax occlusion bias" +#~ msgstr "視差遮蔽偏差" + +#~ msgid "Parallax occlusion iterations" +#~ msgstr "視差遮蔽迭代" + +#~ msgid "Parallax occlusion mode" +#~ msgstr "視差遮蔽模式" + +#, fuzzy +#~ msgid "Parallax occlusion scale" +#~ msgstr "視差遮蔽係數" + +#~ msgid "Parallax occlusion strength" +#~ msgstr "視差遮蔽強度" + +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "TrueType 字型或點陣字的路徑。" + +#~ msgid "Path to save screenshots at." +#~ msgstr "儲存螢幕截圖的路徑。" + +#~ msgid "Reset singleplayer world" +#~ msgstr "重設單人遊戲世界" + +#, fuzzy +#~ msgid "Select Package File:" +#~ msgstr "選取 Mod 檔案:" + +#~ msgid "Shadow limit" +#~ msgstr "陰影限制" + +#~ msgid "Start Singleplayer" +#~ msgstr "開始單人遊戲" + +#~ msgid "Strength of generated normalmaps." +#~ msgstr "生成之一般地圖的強度。" + +#~ msgid "This font will be used for certain languages." +#~ msgstr "這個字型將會被用於特定的語言。" + +#~ msgid "Toggle Cinematic" +#~ msgstr "切換過場動畫" + +#, fuzzy +#~ msgid "" +#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ msgstr "浮地山區域的典型最大高度,高於與低於中點。" + +#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgstr "在平整浮地地形的山丘高度與湖泊深度變化。" + +#~ msgid "View" +#~ msgstr "查看" + +#~ msgid "Waving Water" +#~ msgstr "波動的水" + +#~ msgid "Waving water" +#~ msgstr "波動的水" + +#, fuzzy +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "大型偽隨機洞穴的 Y 上限。" + +#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgstr "浮地中點與湖表面的 Y 高度。" + +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "浮地陰影擴展的 Y 高度。" + +#~ msgid "Yes" +#~ msgstr "是" From 29681085b9762e8cf0e953014ca0e8d2890713ef Mon Sep 17 00:00:00 2001 From: savilli <78875209+savilli@users.noreply.github.com> Date: Tue, 23 Feb 2021 21:36:55 +0300 Subject: [PATCH 050/110] Fix wrong number of items in allow_metadata_inventory_put/take callbacks (#10990) --- src/inventorymanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp index 554708e8e..1e81c1dbc 100644 --- a/src/inventorymanager.cpp +++ b/src/inventorymanager.cpp @@ -340,7 +340,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame */ ItemStack src_item = list_from->getItem(from_i); - if (count > 0) + if (count > 0 && count < src_item.count) src_item.count = count; if (src_item.empty()) return; From 4abe4b87b5902bff229505b83b9bddb9a8f759cd Mon Sep 17 00:00:00 2001 From: DS Date: Tue, 23 Feb 2021 19:39:15 +0100 Subject: [PATCH 051/110] Allow overwriting media files of dependencies (#10752) --- doc/lua_api.txt | 3 +++ .../mods/basenodes/textures/default_dirt.png | Bin 790 -> 7303 bytes .../textures/dirt_with_grass/info.txt | 3 --- games/devtest/mods/basenodes/textures/info.txt | 7 +++++++ games/devtest/mods/unittests/mod.conf | 1 + .../mods/unittests/textures/default_dirt.png | Bin 0 -> 790 bytes src/server/mods.cpp | 3 ++- src/server/mods.h | 8 ++++++++ 8 files changed, 21 insertions(+), 4 deletions(-) delete mode 100644 games/devtest/mods/basenodes/textures/dirt_with_grass/info.txt create mode 100644 games/devtest/mods/basenodes/textures/info.txt create mode 100644 games/devtest/mods/unittests/textures/default_dirt.png diff --git a/doc/lua_api.txt b/doc/lua_api.txt index a9c3bcdd9..d3165b9fd 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -256,6 +256,9 @@ Subfolders with names starting with `_` or `.` are ignored. If a subfolder contains a media file with the same name as a media file in one of its parents, the parent's file is used. +Although it is discouraged, a mod can overwrite a media file of any mod that it +depends on by supplying a file with an equal name. + Naming conventions ------------------ diff --git a/games/devtest/mods/basenodes/textures/default_dirt.png b/games/devtest/mods/basenodes/textures/default_dirt.png index 58670305d007716c3fee12b45e8acf301cbd4c5a..aa75bffb6459d1415a2f146f0da636fbcc94c253 100644 GIT binary patch literal 7303 zcmeHLc{r49+aIOu$r>Kn3uVk2Gs7s^_dSG%Ss7+CGt5|0q_kNgibS>+B9W!Cg`^}E zEsC;csVCY*THbr;DShwrJ@5A%$M^o%9LGI#U)S|Jf9HAquJgRE`=0&Ij#d()N}?bT zNW#Y2+!gp;&A)_~0pBTygA70*p@)&~UL02(SB=SHkSSD>8YhBDQX}ywWDtn=xYX09 zY*a`5Q=nX>V0px&4t3+g-m7{$MWGXH2G>s0A$MFWeiuyt3bk)`Y--|5b29#h{wWP_ z_ROqBqOF|7>oLy{*xA~tnIXooU1QYd)t42VOwOm$KK&v2x&+N>}1{`_c<`O_bky?7rVb}Wb) zkZc57yMp(1t!K1a-+q~uE9Ea@-!}N;pzY^hj%>cjdgc=0Gidnv*_OfRk83dvN{GfT z|Cxk$rOyN}(}t4MFV%0{Innho^5GiI^Ix<5`m%>#mbHnek)QO0oVefAB(#1E3m)Du zt9`MfLG~z$$5=knZ}@c}*mSu-h9Z7EZ?9roO!b|U_(IbaPWhH~^YLQ3ReQD%)RsZd zma~L{TP3F9krVgVy$lP3Jd6t%RDq^0iwF1ID1DM!8?!O!_UIdRUIcALeGpo`$E&^6 z$WkB$dS11NHW0PrE7(_2_!NzNb!ExUqFP6CBZFscYu$H?PZZXX#oT$k?Fgl1kLoaC9$Dg}1{f z5AySitMGS4Z^%_{T-o#SPK#6Yy|mmn?FCLWX0E(X@TK(iWt5T=81A%rS3PIq@eASQ zWym3G&15)n{ESSQK}1_7Ifrz!$J@Ur&Zztg=QFpb*&@-vH6$RyrKQKUY+w1f7WmdK zg=?VJj;)|o4q^z1x+P2O@}5l3t?pWJ8I;)WmaXE#ZBja&)A$d|FF|TADSTZ+=Nx8> zUEUmlEv-;eX=QS1@RBIZQP=HSUoIRRTA;OrqTPup{MUX8>$~z8vCon52M_E zTh^5;B^_1ReI?b)gdkUuJ5oKp4L4Gt8831TA%z$=Rrb)P5)W!$(qe zw`T+*PG{X*h4G})k`U~uCsM)>fJ>DbY`R0^?QhF_+#&Cvj^+3D3}LRvLgr#jXEk$f zJ@Zk1s+{3>r6GCku4rudj^DS;&$UcFe$P!QyjUQkz%nQ3dE&~MzS?{8OjR|t#z(sh z2(tB8L(M|hN+fwp$kdFDxOPS{q0Vd-UeBm}%30GpE;d%MB80UKW1n#VDW!_m%(g;5 z?i7ZjXQ&x|F|3bL?(*Ci^b^YE^!-R*aBp4BX#07p*Va`*^$saHl$Wt1zulLc_8;An z^g4omaqNmkTnWcOKmWn=yQ|y7;VI6K&LS@R$jZ?X$DYh*nkU9;mUR>;q9aD@>y7t` ziij%F>^IJ|Mt&BKX>0q8X!8wHQh(P@9%~-J+9CYjSl@0;8}3A$XrlB7iS!WKCI#XS zdBR;`vM{)y4ToDjd=)NVCW1WDr4X-j_^H>9EyknLk3}EGjOCy5jlLMWcXzkl{Z8o4 z4ArPgor>baTFN_2OjFf&2zSM56^ffH^>-o!6-!2r%LgD*yTyhM9SvzSGBCOmf{OA> zce1tIA-viSZC%{&hJ8_B8L8*HW%JW;3A^Inpld!Cc!5_1v}VEwPn7S289#ELx?G>G zAlffJrS-`gwW|Y;vemMOcSIiXc#hYRWMoXheoNjYX%faogsp9ji{0a2v8<@L;c3p+ znn&Au(mp*u9V?THh^eK{UhLiWxN#5}VxjglyUZ^Ln+FnPd9ffgJmYGL>wd#L3dHkjG$2}#b zQO)KOlzG3*xdQ=ue&@>GFb0Kw54HvkvQWY8)z?wtlNodJcZA>A5!cE+Be-5ruN|yC zd@AP0k?yBjr4Bjb5D7Sky5%e(CCg*6PYrVQZy?(b+LMvWeDD}97sO!4m;?PM= zWp8@hnUT@XGAdeDSuwW*=c1h?abS3^Q3KL4ctfL40R$3=qnMdF+nAaCdBg(;d-jgQ z4m##83VU-E&6RA(v3jrYUYXLV>&$Fix=)JBzp5wf&5CmPkVMr>FRhragn2#ks;nya zu$|NO_TDb_o5Mpc`4l-dbdr>t5_Pqr(vfPM-+67U>Z9kfi`{XO zobJv;<^^f)e*PbdSG{W9P!idnTcUg6W!6A)p-CwuT2jokDp8G~N`)ATGEJo-EHO4k(E0l)EmivU=4zJ)bw9*%ppEPu;0S4?A6R zC-=mXqQbXNR2V4+#_8q7r{btUO28_GCJ5eEziF*#NtLm9z$Tz^l?N6o}|yCF@Xm%5Xg8lkBK9MkT`01 zQXqwn)tI`{sG&w7Vl_NBIY1qlW~3mBbtH@A7U}3thzud1i5i;T!ohGf zWT`zc>frF*n$G^FBA_RPhhsuu`cMds_LBvhV-fzt-(Om=-GS#`h%1TB2xAdQ7U3j1 zM{}uDCN+$`)Mpr*#P3>&n@S`@fS?vUFSW6wxckok6Z%iR7Ghb@6=TjIgz=r)m}52g z@nVP!0)>cKxP=j*L=?&Z4J?YG0T_ukM1%22A{0zS!3@v_Z~_`nKrErMp|d$SI)TKe z0?73#01p8MBN>vRI4}|pM}m=1q#+oGBoe@ePy;*^K}NxGB+?QJCl&>$1RQl~RD3ET zK!t=72{;rP1xBF|a4^yUZve)_hzKy603*W4cq9~Wuow-09WbWOHdqa~K6HV6p~snu zcbaD zhy;u!z=#8qjY7i(k|0ca;DQN%Sunt40AX?b+5ngr`hmG%%vdBGhrx1ZFsN7!eq?HV z%7v0rGyYaA7<&d`!EgagBJ%6)Tg7d~1ws~@#*n`Q{~MEA5Q9tqzw!KlerGXdakvat zh!e{RA50=}{+{Qrz~7l%fxV8+VMW;dhe`bpobh71S_8HWR>TtjZlut~*5Zalr7TFL zrnayNU~q&*`PsN|5^-S(038>H2thb{APLxQzm?jb{gl5*VNqC;v#_UvmAD>mMobkHEjO>z7>rNP&L@{*_(-Z*qzLc*7>q zfd@S<@cs<58D|0S-YfBTR^|(D;h;IQD?5QZ5vH{_8w3)Q;a>uvtZd-F6p#?d#=$~p zL|jp7IVe{*yAT9gE^cFP>aNqZuHA|1%2ftUPtAYcB_zrF6eauk!>s2S3mwa2(p7ee zF4-L!R7zN87`gYFp4~fqg-;Dp<=w#j-A2d8aWy0(g-u51dNXP%B_U_P;5%hS(<4q1 zlHZG>7MgAq~h()7XTsrN=_NxzE->0Uhj_~=dB z9Ra6%JsW4%h)!(Ny9avlWIe4Dt1qDv};T-sub5v^`2|41=p80LXJH>C-=Oo?LZWyb5gVarAc@@Z~f#7w~nod zRE@GPPkInKRkxB;+UnxZoV}n}I%x_=PrT{aUU9%xrdlENz5V#zAq?nN4zs#EpiuaD zTSL*vXhxF9p|JcHMr4@WyP^hJhhM&bszobA5;}6S#s1R10}?{m_GNDy6vws zd75c?RnotqBS1GDa~QAvIL&_u?AoL1X?gJWlg4xV3kt`EZy0^}y{)!5yLY;Ns&2kq z)8ox`%JaMDuTYe(*06^~n?~OzocCAo1j+7dRpcd1HO_1RiHWgAoBFtSx%(sQ1wfzP z`P}3^5(hmD)YW!a*3{{3B-mnDRvT0M{_Q7S?yCzR(6i|9tlF75DO+`@#{-#a&rB7o z2b0^Y*1{SHBYy(jNkl+xj5kBG+jwP?dy=OpTdxIW%S%svYi- zAiUwq95neHg?hCz7VnWHWv=)Dt@+7{G9yk$tjix{Qdekl_kR!0suVGBW?QUh*2)M` zbkpO0@#LH*Qa9L~_k1$=$?4ym?gZS2Z%X7w?uI@i*MOh}`zv$gBj z>vgEW+{I{<$@r(5VqpXiPr zvi$v{3!+kUdw;k}x$yBHzoh2?Ch0t4dLMcGwfQOUyKKmb6r_Ozp<|hhI#C%vC@0W2 zKIkjc)m?W!|Bu{&uRMB#EH;+91uuU6=g@wx@AQE>7)hNzCx}WkPt2u_-7s&t>%Nij z9UTq9av-usjIVzl-gWuaU-yr*I^}di5nfaoEaXKjBYz%Lg}s}vMup#(Q{mh1hj8D% zZE^HByuCNOj(c#UPB@xfoM+MiG z(ENLY2f_d0VJCUM23U3fW|!^VMxzkR=q~3HbaR2rVI>|4P(YjkzYP!`kuc@FKQchh zrLB&0TYpv&Yu5+eOE6tc%AqnhJ%W*pnZ=k?+U^JnF_2*VS@T$Cs@V;%Uw!k{(r`$* z)^zQ<3&c7;=eC>zU%0jO?}+_=xVRBAXv!ga$z&xWeSVb4&(XO?R53R~8Jb?gL!H)| zC1iMQ#?79<0v$FGc_eXs-)NrylE3^4-Qh4C@_3X5?#yMKKHG`vvN%clcJQh!B^*t! zyE}#W?R#ntakuRb5VllNTsg0}Oy$SZv%WQR9ChTxby18@!usV2Iv(0-oJ(>3cFYro xxrL;u1rq7h;>-az9Yt9qm+xj5kBG+jwP?dy=OpTdxIW%S%svYi-AiUwq95neHg?hCz7VnWHWv=)Dt@+7{ zG9yk$tjix{Qdekl_Ycmh6ftmSTdZf+$_P<()8l^eEE301l)&j zPgzWHUtPRR0~_FG^)aeC*V2YeNTaW_wd>dGb*RAH#b}es_^G>U)5gg@K~1JsE{-0v z0A`D8y1L&TY&%$cYrBfdipqnT$G789yi|&^JElE7R3ocRv4*+<>nTzHM=5G!^)%aqz(1wGAfXN%v*Yjt8^_?`gG1 z&);$RzU%0jO?}+_=xVRBAXv!ga z$z&xWeSVb4&(XO?R53R~8Jb?gL!H)|C1iMQ#?79<0v$FGc_eXs-)NrylE3^4-Qh4C z@{|Sc%w?TE+llJ3I7#|;@Tx2&98IsgJB9e|duk4Gx9tuPwp3AEIj^`(<;T;rzBO|k zb>zf#QH)Q*`sE2a9@=S~OL6{o%oB#Wg`}wk66w_9%mFtYMOh=53$us73?bCje;Rml UYvInCO8@`>07*qoM6N<$f@__Gg8%>k literal 0 HcmV?d00001 diff --git a/src/server/mods.cpp b/src/server/mods.cpp index cf1467648..83fa12da9 100644 --- a/src/server/mods.cpp +++ b/src/server/mods.cpp @@ -98,7 +98,8 @@ void ServerModManager::getModNames(std::vector &modlist) const void ServerModManager::getModsMediaPaths(std::vector &paths) const { - for (const ModSpec &spec : m_sorted_mods) { + for (auto it = m_sorted_mods.crbegin(); it != m_sorted_mods.crend(); it++) { + const ModSpec &spec = *it; fs::GetRecursiveDirs(paths, spec.path + DIR_DELIM + "textures"); fs::GetRecursiveDirs(paths, spec.path + DIR_DELIM + "sounds"); fs::GetRecursiveDirs(paths, spec.path + DIR_DELIM + "media"); diff --git a/src/server/mods.h b/src/server/mods.h index 54774bd86..8954bbf72 100644 --- a/src/server/mods.h +++ b/src/server/mods.h @@ -42,5 +42,13 @@ public: void loadMods(ServerScripting *script); const ModSpec *getModSpec(const std::string &modname) const; void getModNames(std::vector &modlist) const; + /** + * Recursively gets all paths of mod folders that can contain media files. + * + * Result is ordered in descending priority, ie. files from an earlier path + * should not be replaced by files from a latter one. + * + * @param paths result vector + */ void getModsMediaPaths(std::vector &paths) const; }; From 74a93546ea31e9bd1479920c8c5df3f3f70361ae Mon Sep 17 00:00:00 2001 From: sfan5 Date: Thu, 18 Feb 2021 19:44:02 +0100 Subject: [PATCH 052/110] Add script that sorts contributions for use in credits --- util/gather_git_credits.py | 67 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100755 util/gather_git_credits.py diff --git a/util/gather_git_credits.py b/util/gather_git_credits.py new file mode 100755 index 000000000..1b2865182 --- /dev/null +++ b/util/gather_git_credits.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +import subprocess +import re +from collections import defaultdict + +codefiles = r"(\.[ch](pp)?|\.lua|\.md|\.cmake|\.java|\.gradle|Makefile|CMakeLists\.txt)$" + +# two minor versions back, for "Active Contributors" +REVS_ACTIVE = "5.2.0..HEAD" +# all time, for "Previous Contributors" +REVS_PREVIOUS = "HEAD" + +CUTOFF_ACTIVE = 3 +CUTOFF_PREVIOUS = 21 + +# For a description of the points system see: +# https://github.com/minetest/minetest/pull/9593#issue-398677198 + +def load(revs): + points = defaultdict(int) + p = subprocess.Popen(["git", "log", "--mailmap", "--pretty=format:%h %aN <%aE>", revs], + stdout=subprocess.PIPE, universal_newlines=True) + for line in p.stdout: + hash, author = line.strip().split(" ", 1) + n = 0 + + p2 = subprocess.Popen(["git", "show", "--numstat", "--pretty=format:", hash], + stdout=subprocess.PIPE, universal_newlines=True) + for line in p2.stdout: + added, deleted, filename = re.split(r"\s+", line.strip(), 2) + if re.search(codefiles, filename) and added != "-": + n += int(added) + p2.wait() + + if n == 0: + continue + if n > 1200: + n = 8 + elif n > 700: + n = 4 + elif n > 100: + n = 2 + else: + n = 1 + points[author] += n + p.wait() + + # Some authors duplicate? Don't add manual workarounds here, edit the .mailmap! + for author in ("updatepo.sh ", "Weblate <42@minetest.ru>"): + points.pop(author, None) + return points + +points_active = load(REVS_ACTIVE) +points_prev = load(REVS_PREVIOUS) + +with open("results.txt", "w") as f: + for author, points in sorted(points_active.items(), key=(lambda e: e[1]), reverse=True): + if points < CUTOFF_ACTIVE: break + points_prev.pop(author, None) # active authors don't appear in previous + f.write("%d\t%s\n" % (points, author)) + f.write('\n---------\n\n') + once = True + for author, points in sorted(points_prev.items(), key=(lambda e: e[1]), reverse=True): + if points < CUTOFF_PREVIOUS and once: + f.write('\n---------\n\n') + once = False + f.write("%d\t%s\n" % (points, author)) From 35b476c65df9c78935e166b94ca686015b43960f Mon Sep 17 00:00:00 2001 From: sfan5 Date: Thu, 18 Feb 2021 19:52:59 +0100 Subject: [PATCH 053/110] Update credits tab and mailmap --- .mailmap | 74 +++++++++++++++++++++++--------- builtin/mainmenu/tab_credits.lua | 54 ++++++++++++----------- 2 files changed, 82 insertions(+), 46 deletions(-) diff --git a/.mailmap b/.mailmap index c487460a0..fcc763411 100644 --- a/.mailmap +++ b/.mailmap @@ -1,33 +1,67 @@ +# Documentation: https://git-scm.com/docs/git-check-mailmap#_mapping_authors + 0gb.us <0gb.us@0gb.us> -Calinou -Perttu Ahola celeron55 +Calinou +Calinou +Perttu Ahola Perttu Ahola celeron55 -Craig Robbins +Zeno- +Zeno- +Diego Martínez Diego Martínez +Ilya Zhuravlev Ilya Zhuravlev kwolekr -PilzAdam PilzAdam -PilzAdam Pilz Adam -PilzAdam PilzAdam +PilzAdam +PilzAdam proller proller RealBadAngel RealBadAngel Selat ShadowNinja ShadowNinja -Shen Zheyu arsdragonfly -Pavel Elagin elagin -Esteban I. Ruiz Moreno Esteban I. RM -manuel duarte manuel joaquim -manuel duarte sweetbomber -Diego Martínez kaeza -Diego Martínez Diego Martinez -Lord James Lord89James -BlockMen Block Men -sfan5 Sfan5 -DannyDark dannydark -Ilya Pavlov Ilya -Ilya Zhuravlev xyzz +Esteban I. Ruiz Moreno +Esteban I. Ruiz Moreno +Lord James +BlockMen +sfan5 +DannyDark +Ilya Pavlov sapier sapier sapier sapier - +SmallJoker +Loïc Blot +Loïc Blot +numzero Vitaliy +numzero +Jean-Patrick Guerrero +Jean-Patrick Guerrero +HybridDog <3192173+HybridDog@users.noreply.github.com> +srfqi +Dániel Juhász +rubenwardy +rubenwardy +Paul Ouellette +Vanessa Dannenberg +ClobberXD +ClobberXD +ClobberXD <36130650+ClobberXD@users.noreply.github.com> +Auke Kok +Auke Kok +Desour +Nathanaël Courant +Ezhh +paramat +paramat +lhofhansl +red-001 +Wuzzy +Wuzzy +Jordach +MoNTE48 +v-rob +v-rob <31123645+v-rob@users.noreply.github.com> +EvidenceB <49488517+EvidenceBKidscode@users.noreply.github.com> +gregorycu +Rogier +Rogier diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua index 075274798..a34dd58bb 100644 --- a/builtin/mainmenu/tab_credits.lua +++ b/builtin/mainmenu/tab_credits.lua @@ -23,28 +23,37 @@ local core_developers = { "Nathanaël Courant (Nore/Ekdohibs) ", "Loic Blot (nerzhul/nrz) ", "paramat", - "Auke Kok (sofar) ", "Andrew Ward (rubenwardy) ", "Krock/SmallJoker ", "Lars Hofhansl ", + "Pierre-Yves Rollo ", + "v-rob ", } +-- For updating active/previous contributors, see the script in ./util/gather_git_credits.py + local active_contributors = { - "Hugues Ross [Formspecs]", + "Wuzzy [devtest game, visual corrections]", + "Zughy [Visual improvements, various fixes]", "Maksim (MoNTE48) [Android]", - "DS [Formspecs]", - "pyrollo [Formspecs: Hypertext]", - "v-rob [Formspecs]", - "Jordach [set_sky]", - "random-geek [Formspecs]", - "Wuzzy [Pathfinder, builtin, translations]", - "ANAND (ClobberXD) [Fixes, per-player FOV]", - "Warr1024 [Fixes]", - "Paul Ouellette (pauloue) [Fixes, Script API]", - "Jean-Patrick G (kilbith) [Audiovisuals]", - "HybridDog [Script API]", + "numzero [Graphics and rendering]", + "appgurueu [Various internal fixes]", + "Desour [Formspec and vector API changes]", + "HybridDog [Rendering fixes and documentation]", + "Hugues Ross [Graphics-related improvements]", + "ANAND (ClobberXD) [Mouse buttons rebinding]", + "luk3yx [Fixes]", + "hecks [Audiovisuals, Lua API]", + "LoneWolfHT [Object crosshair, documentation fixes]", + "Lejo [Server-related improvements]", + "EvidenceB [Compass HUD element]", + "Paul Ouellette (pauloue) [Lua API, documentation]", + "TheTermos [Collision detection, physics]", + "David CARLIER [Unix & Haiku build fixes]", "dcbrwn [Object shading]", - "srifqi [Fixes]", + "Elias Fleckenstein [API features/fixes]", + "Jean-Patrick Guerrero (kilbith) [model element, visual fixes]", + "k.h.lai [Memory leak fixes, documentation]", } local previous_core_developers = { @@ -60,30 +69,23 @@ local previous_core_developers = { "sapier", "Zeno", "ShadowNinja ", + "Auke Kok (sofar) ", } local previous_contributors = { "Nils Dagsson Moskopp (erlehmann) [Minetest Logo]", - "Dániel Juhász (juhdanad) ", "red-001 ", - "numberZero [Audiovisuals: meshgen]", "Giuseppe Bilotta", + "Dániel Juhász (juhdanad) ", "MirceaKitsune ", "Constantin Wenger (SpeedProg)", "Ciaran Gultnieks (CiaranG)", "stujones11 [Android UX improvements]", - "Jeija [HTTP, particles]", - "Vincent Glize (Dumbeldor) [Cleanups, CSM APIs]", - "Ben Deutsch [Rendering, Fixes, SQLite auth]", - "TeTpaAka [Hand overriding, nametag colors]", - "Rui [Sound Pitch]", - "Duane Robertson [MGValleys]", - "Raymoo [Tool Capabilities]", "Rogier [Fixes]", "Gregory Currie (gregorycu) [optimisation]", - "TriBlade9 [Audiovisuals]", - "T4im [Profiler]", - "Jurgen Doser (doserj) ", + "srifqi [Fixes]", + "JacobF", + "Jeija [HTTP, particles]", } local function buildCreditList(source) From 9b59b2f75de8a523cba255335fb8d9350716c8c5 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Tue, 23 Feb 2021 14:21:15 +0100 Subject: [PATCH 054/110] Fix keyWasDown in input handler This was changed 291a6b70d674d9003f522b5875a60f7e2753e32b but should have never been done. --- src/client/inputhandler.cpp | 11 +++-------- src/client/inputhandler.h | 2 +- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/client/inputhandler.cpp b/src/client/inputhandler.cpp index 608a405a8..978baa320 100644 --- a/src/client/inputhandler.cpp +++ b/src/client/inputhandler.cpp @@ -113,17 +113,12 @@ bool MyEventReceiver::OnEvent(const SEvent &event) if (event.EventType == irr::EET_KEY_INPUT_EVENT) { const KeyPress &keyCode = event.KeyInput; if (keysListenedFor[keyCode]) { - // If the key is being held down then the OS may - // send a continuous stream of keydown events. - // In this case, we don't want to let this - // stream reach the application as it will cause - // certain actions to repeat constantly. if (event.KeyInput.PressedDown) { - if (!IsKeyDown(keyCode)) { - keyWasDown.set(keyCode); + if (!IsKeyDown(keyCode)) keyWasPressed.set(keyCode); - } + keyIsDown.set(keyCode); + keyWasDown.set(keyCode); } else { if (IsKeyDown(keyCode)) keyWasReleased.set(keyCode); diff --git a/src/client/inputhandler.h b/src/client/inputhandler.h index 7487bbdc7..1fb4cf0ec 100644 --- a/src/client/inputhandler.h +++ b/src/client/inputhandler.h @@ -201,7 +201,7 @@ private: // The current state of keys KeyList keyIsDown; - // Whether a key was down + // Like keyIsDown but only reset when that key is read KeyList keyWasDown; // Whether a key has just been pressed From f3e51dca155ce1d1062a339cf925f41d7c751df8 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Tue, 23 Feb 2021 19:50:37 +0100 Subject: [PATCH 055/110] Bump version to 5.4.0 --- CMakeLists.txt | 2 +- build/android/build.gradle | 4 ++-- misc/net.minetest.minetest.appdata.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2549bd25d..f6a0d22fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,7 @@ set(VERSION_PATCH 0) set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string") # Change to false for releases -set(DEVELOPMENT_BUILD TRUE) +set(DEVELOPMENT_BUILD FALSE) set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") if(VERSION_EXTRA) diff --git a/build/android/build.gradle b/build/android/build.gradle index 61b24caab..be9eaada4 100644 --- a/build/android/build.gradle +++ b/build/android/build.gradle @@ -3,8 +3,8 @@ project.ext.set("versionMajor", 5) // Version Major project.ext.set("versionMinor", 4) // Version Minor project.ext.set("versionPatch", 0) // Version Patch -project.ext.set("versionExtra", "-dev") // Version Extra -project.ext.set("versionCode", 30) // Android Version Code +project.ext.set("versionExtra", "") // Version Extra +project.ext.set("versionCode", 32) // Android Version Code // NOTE: +2 after each release! // +1 for ARM and +1 for ARM64 APK's, because // each APK must have a larger `versionCode` than the previous diff --git a/misc/net.minetest.minetest.appdata.xml b/misc/net.minetest.minetest.appdata.xml index c177c3713..0e5397b37 100644 --- a/misc/net.minetest.minetest.appdata.xml +++ b/misc/net.minetest.minetest.appdata.xml @@ -62,6 +62,6 @@ minetest sfan5@live.de - + From 02d64a51ee185722ec1b6e2941b461bacf0db0de Mon Sep 17 00:00:00 2001 From: sfan5 Date: Tue, 23 Feb 2021 19:50:44 +0100 Subject: [PATCH 056/110] Continue with 5.5.0-dev --- CMakeLists.txt | 4 ++-- build/android/build.gradle | 4 ++-- doc/client_lua_api.txt | 2 +- doc/menu_lua_api.txt | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f6a0d22fe..910213c09 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,12 +12,12 @@ set(CLANG_MINIMUM_VERSION "3.4") # Also remember to set PROTOCOL_VERSION in network/networkprotocol.h when releasing set(VERSION_MAJOR 5) -set(VERSION_MINOR 4) +set(VERSION_MINOR 5) set(VERSION_PATCH 0) set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string") # Change to false for releases -set(DEVELOPMENT_BUILD FALSE) +set(DEVELOPMENT_BUILD TRUE) set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") if(VERSION_EXTRA) diff --git a/build/android/build.gradle b/build/android/build.gradle index be9eaada4..3ba51a4bb 100644 --- a/build/android/build.gradle +++ b/build/android/build.gradle @@ -1,9 +1,9 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. project.ext.set("versionMajor", 5) // Version Major -project.ext.set("versionMinor", 4) // Version Minor +project.ext.set("versionMinor", 5) // Version Minor project.ext.set("versionPatch", 0) // Version Patch -project.ext.set("versionExtra", "") // Version Extra +project.ext.set("versionExtra", "-dev") // Version Extra project.ext.set("versionCode", 32) // Android Version Code // NOTE: +2 after each release! // +1 for ARM and +1 for ARM64 APK's, because diff --git a/doc/client_lua_api.txt b/doc/client_lua_api.txt index 098596481..c2c552440 100644 --- a/doc/client_lua_api.txt +++ b/doc/client_lua_api.txt @@ -1,4 +1,4 @@ -Minetest Lua Client Modding API Reference 5.4.0 +Minetest Lua Client Modding API Reference 5.5.0 ================================================ * More information at * Developer Wiki: diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt index b3975bc1d..90ec527b0 100644 --- a/doc/menu_lua_api.txt +++ b/doc/menu_lua_api.txt @@ -1,4 +1,4 @@ -Minetest Lua Mainmenu API Reference 5.4.0 +Minetest Lua Mainmenu API Reference 5.5.0 ========================================= Introduction From 827224635bc131dbf4f6e41dd3d78c7a2d94da0f Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 24 Feb 2021 10:45:30 +0000 Subject: [PATCH 057/110] Use "Aux1" key name consistently everywhere --- README.md | 2 +- build/android/icons/aux1_btn.svg | 143 ++++++++++ build/android/icons/aux_btn.svg | 411 ----------------------------- builtin/settingtypes.txt | 16 +- src/client/game.cpp | 4 +- src/client/inputhandler.cpp | 4 +- src/client/joystick_controller.cpp | 6 +- src/client/keys.h | 2 +- src/defaultsettings.cpp | 4 +- src/gui/guiKeyChangeMenu.cpp | 6 +- src/gui/touchscreengui.cpp | 18 +- src/gui/touchscreengui.h | 8 +- textures/base/pack/aux1_btn.png | Bin 0 -> 1652 bytes textures/base/pack/aux_btn.png | Bin 1900 -> 0 bytes 14 files changed, 178 insertions(+), 446 deletions(-) create mode 100644 build/android/icons/aux1_btn.svg delete mode 100644 build/android/icons/aux_btn.svg create mode 100644 textures/base/pack/aux1_btn.png delete mode 100644 textures/base/pack/aux_btn.png diff --git a/README.md b/README.md index 58ec0c821..249f24a16 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Some can be changed in the key config dialog in the settings tab. | P | Enable/disable pitch move mode | | J | Enable/disable fast mode (needs fast privilege) | | H | Enable/disable noclip mode (needs noclip privilege) | -| E | Move fast in fast mode | +| E | Aux1 (Move fast in fast mode. Games may add special features) | | C | Cycle through camera modes | | V | Cycle through minimap modes | | Shift + V | Change minimap orientation | diff --git a/build/android/icons/aux1_btn.svg b/build/android/icons/aux1_btn.svg new file mode 100644 index 000000000..e0ee97c0c --- /dev/null +++ b/build/android/icons/aux1_btn.svg @@ -0,0 +1,143 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + Aux1 + + + diff --git a/build/android/icons/aux_btn.svg b/build/android/icons/aux_btn.svg deleted file mode 100644 index 6bbefff67..000000000 --- a/build/android/icons/aux_btn.svg +++ /dev/null @@ -1,411 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - AUX - - diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index f800f71ab..62f1ee2d0 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -75,7 +75,7 @@ free_move (Flying) bool false # If enabled, makes move directions relative to the player's pitch when flying or swimming. pitch_move (Pitch move mode) bool false -# Fast movement (via the "special" key). +# Fast movement (via the "Aux1" key). # This requires the "fast" privilege on the server. fast_move (Fast movement) bool false @@ -99,14 +99,14 @@ invert_mouse (Invert mouse) bool false # Mouse sensitivity multiplier. mouse_sensitivity (Mouse sensitivity) float 0.2 -# If enabled, "special" key instead of "sneak" key is used for climbing down and +# If enabled, "Aux1" key instead of "Sneak" key is used for climbing down and # descending. -aux1_descends (Special key for climbing/descending) bool false +aux1_descends (Aux1 key for climbing/descending) bool false # Double-tapping the jump key toggles fly mode. doubletap_jump (Double tap jump for fly) bool false -# If disabled, "special" key is used to fly fast if both fly and fast mode are +# If disabled, "Aux1" key is used to fly fast if both fly and fast mode are # enabled. always_fly_fast (Always fly and fast) bool true @@ -135,9 +135,9 @@ touchscreen_threshold (Touch screen threshold) int 20 0 100 # If disabled, virtual joystick will center to first-touch's position. fixed_virtual_joystick (Fixed virtual joystick) bool false -# (Android) Use virtual joystick to trigger "aux" button. -# If enabled, virtual joystick will also tap "aux" button when out of main circle. -virtual_joystick_triggers_aux (Virtual joystick triggers aux button) bool false +# (Android) Use virtual joystick to trigger "Aux1" button. +# If enabled, virtual joystick will also tap "Aux1" button when out of main circle. +virtual_joystick_triggers_aux1 (Virtual joystick triggers Aux1 button) bool false # Enable joysticks enable_joysticks (Enable joysticks) bool false @@ -199,7 +199,7 @@ keymap_inventory (Inventory key) key KEY_KEY_I # Key for moving fast in fast mode. # See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 -keymap_special1 (Special key) key KEY_KEY_E +keymap_aux1 (Aux1 key) key KEY_KEY_E # Key for opening the chat window. # See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 diff --git a/src/client/game.cpp b/src/client/game.cpp index 3c58fb46f..d4e2fe7c3 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -2415,7 +2415,7 @@ void Game::updatePlayerControl(const CameraOrientation &cam) input->isKeyDown(KeyType::LEFT), input->isKeyDown(KeyType::RIGHT), isKeyDown(KeyType::JUMP), - isKeyDown(KeyType::SPECIAL1), + isKeyDown(KeyType::AUX1), isKeyDown(KeyType::SNEAK), isKeyDown(KeyType::ZOOM), isKeyDown(KeyType::DIG), @@ -2432,7 +2432,7 @@ void Game::updatePlayerControl(const CameraOrientation &cam) ( (u32)(isKeyDown(KeyType::LEFT) & 0x1) << 2) | ( (u32)(isKeyDown(KeyType::RIGHT) & 0x1) << 3) | ( (u32)(isKeyDown(KeyType::JUMP) & 0x1) << 4) | - ( (u32)(isKeyDown(KeyType::SPECIAL1) & 0x1) << 5) | + ( (u32)(isKeyDown(KeyType::AUX1) & 0x1) << 5) | ( (u32)(isKeyDown(KeyType::SNEAK) & 0x1) << 6) | ( (u32)(isKeyDown(KeyType::DIG) & 0x1) << 7) | ( (u32)(isKeyDown(KeyType::PLACE) & 0x1) << 8) | diff --git a/src/client/inputhandler.cpp b/src/client/inputhandler.cpp index 978baa320..b7e70fa6c 100644 --- a/src/client/inputhandler.cpp +++ b/src/client/inputhandler.cpp @@ -35,7 +35,7 @@ void KeyCache::populate() key[KeyType::LEFT] = getKeySetting("keymap_left"); key[KeyType::RIGHT] = getKeySetting("keymap_right"); key[KeyType::JUMP] = getKeySetting("keymap_jump"); - key[KeyType::SPECIAL1] = getKeySetting("keymap_special1"); + key[KeyType::AUX1] = getKeySetting("keymap_aux1"); key[KeyType::SNEAK] = getKeySetting("keymap_sneak"); key[KeyType::DIG] = getKeySetting("keymap_dig"); key[KeyType::PLACE] = getKeySetting("keymap_place"); @@ -219,7 +219,7 @@ void RandomInputHandler::step(float dtime) { static RandomInputHandlerSimData rnd_data[] = { { "keymap_jump", 0.0f, 40 }, - { "keymap_special1", 0.0f, 40 }, + { "keymap_aux1", 0.0f, 40 }, { "keymap_forward", 0.0f, 40 }, { "keymap_left", 0.0f, 40 }, { "keymap_dig", 0.0f, 30 }, diff --git a/src/client/joystick_controller.cpp b/src/client/joystick_controller.cpp index f61ae4ae6..919db5315 100644 --- a/src/client/joystick_controller.cpp +++ b/src/client/joystick_controller.cpp @@ -79,7 +79,7 @@ JoystickLayout create_default_layout() // Accessible without any modifier pressed JLO_B_PB(KeyType::JUMP, bm | 1 << 0, 1 << 0); - JLO_B_PB(KeyType::SPECIAL1, bm | 1 << 1, 1 << 1); + JLO_B_PB(KeyType::AUX1, bm | 1 << 1, 1 << 1); // Accessible with start button not pressed, but four pressed // TODO find usage for button 0 @@ -126,11 +126,11 @@ JoystickLayout create_xbox_layout() // 4 Buttons JLO_B_PB(KeyType::JUMP, 1 << 0, 1 << 0); // A/green JLO_B_PB(KeyType::ESC, 1 << 1, 1 << 1); // B/red - JLO_B_PB(KeyType::SPECIAL1, 1 << 2, 1 << 2); // X/blue + JLO_B_PB(KeyType::AUX1, 1 << 2, 1 << 2); // X/blue JLO_B_PB(KeyType::INVENTORY, 1 << 3, 1 << 3); // Y/yellow // Analog Sticks - JLO_B_PB(KeyType::SPECIAL1, 1 << 11, 1 << 11); // left + JLO_B_PB(KeyType::AUX1, 1 << 11, 1 << 11); // left JLO_B_PB(KeyType::SNEAK, 1 << 12, 1 << 12); // right // Triggers diff --git a/src/client/keys.h b/src/client/keys.h index 60a7a3c45..9f90da6b8 100644 --- a/src/client/keys.h +++ b/src/client/keys.h @@ -32,7 +32,7 @@ public: LEFT, RIGHT, JUMP, - SPECIAL1, + AUX1, SNEAK, AUTOFORWARD, DIG, diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index cda953082..9d155f76c 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -80,7 +80,7 @@ void set_default_settings() settings->setDefault("keymap_drop", "KEY_KEY_Q"); settings->setDefault("keymap_zoom", "KEY_KEY_Z"); settings->setDefault("keymap_inventory", "KEY_KEY_I"); - settings->setDefault("keymap_special1", "KEY_KEY_E"); + settings->setDefault("keymap_aux1", "KEY_KEY_E"); settings->setDefault("keymap_chat", "KEY_KEY_T"); settings->setDefault("keymap_cmd", "/"); settings->setDefault("keymap_cmd_local", "."); @@ -464,7 +464,7 @@ void set_default_settings() settings->setDefault("touchtarget", "true"); settings->setDefault("touchscreen_threshold","20"); settings->setDefault("fixed_virtual_joystick", "false"); - settings->setDefault("virtual_joystick_triggers_aux", "false"); + settings->setDefault("virtual_joystick_triggers_aux1", "false"); settings->setDefault("smooth_lighting", "false"); settings->setDefault("max_simultaneous_block_sends_per_client", "10"); settings->setDefault("emergequeue_limit_diskonly", "16"); diff --git a/src/gui/guiKeyChangeMenu.cpp b/src/gui/guiKeyChangeMenu.cpp index 4dcb47779..84678b629 100644 --- a/src/gui/guiKeyChangeMenu.cpp +++ b/src/gui/guiKeyChangeMenu.cpp @@ -46,7 +46,7 @@ enum GUI_ID_KEY_BACKWARD_BUTTON, GUI_ID_KEY_LEFT_BUTTON, GUI_ID_KEY_RIGHT_BUTTON, - GUI_ID_KEY_USE_BUTTON, + GUI_ID_KEY_AUX1_BUTTON, GUI_ID_KEY_FLY_BUTTON, GUI_ID_KEY_FAST_BUTTON, GUI_ID_KEY_JUMP_BUTTON, @@ -177,7 +177,7 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize) { core::rect rect(0, 0, option_w, 30 * s); rect += topleft + v2s32(option_x, option_y); - const wchar_t *text = wgettext("\"Special\" = climb down"); + const wchar_t *text = wgettext("\"Aux1\" = climb down"); Environment->addCheckBox(g_settings->getBool("aux1_descends"), rect, this, GUI_ID_CB_AUX1_DESCENDS, text); delete[] text; @@ -416,7 +416,7 @@ void GUIKeyChangeMenu::init_keys() this->add_key(GUI_ID_KEY_BACKWARD_BUTTON, wgettext("Backward"), "keymap_backward"); this->add_key(GUI_ID_KEY_LEFT_BUTTON, wgettext("Left"), "keymap_left"); this->add_key(GUI_ID_KEY_RIGHT_BUTTON, wgettext("Right"), "keymap_right"); - this->add_key(GUI_ID_KEY_USE_BUTTON, wgettext("Special"), "keymap_special1"); + this->add_key(GUI_ID_KEY_AUX1_BUTTON, wgettext("Aux1"), "keymap_aux1"); this->add_key(GUI_ID_KEY_JUMP_BUTTON, wgettext("Jump"), "keymap_jump"); this->add_key(GUI_ID_KEY_SNEAK_BUTTON, wgettext("Sneak"), "keymap_sneak"); this->add_key(GUI_ID_KEY_DROP_BUTTON, wgettext("Drop"), "keymap_drop"); diff --git a/src/gui/touchscreengui.cpp b/src/gui/touchscreengui.cpp index e1a971462..78b18c2d9 100644 --- a/src/gui/touchscreengui.cpp +++ b/src/gui/touchscreengui.cpp @@ -40,7 +40,7 @@ const char **button_imagenames = (const char *[]) { "jump_btn.png", "down.png", "zoom.png", - "aux_btn.png" + "aux1_btn.png" }; const char **joystick_imagenames = (const char *[]) { @@ -80,8 +80,8 @@ static irr::EKEY_CODE id2keycode(touch_gui_button_id id) case zoom_id: key = "zoom"; break; - case special1_id: - key = "special1"; + case aux1_id: + key = "aux1"; break; case fly_id: key = "freemove"; @@ -425,7 +425,7 @@ TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver *receiver) m_touchscreen_threshold = g_settings->getU16("touchscreen_threshold"); m_fixed_joystick = g_settings->getBool("fixed_virtual_joystick"); - m_joystick_triggers_special1 = g_settings->getBool("virtual_joystick_triggers_aux"); + m_joystick_triggers_aux1 = g_settings->getBool("virtual_joystick_triggers_aux1"); m_screensize = m_device->getVideoDriver()->getScreenSize(); button_size = MYMIN(m_screensize.Y / 4.5f, porting::getDisplayDensity() * @@ -521,9 +521,9 @@ void TouchScreenGUI::init(ISimpleTextureSource *tsrc) m_screensize.Y - (3 * button_size)), L"z", false); - // init special1/aux button - if (!m_joystick_triggers_special1) - initButton(special1_id, + // init aux1 button + if (!m_joystick_triggers_aux1) + initButton(aux1_id, rect(m_screensize.X - (1.25 * button_size), m_screensize.Y - (2.5 * button_size), m_screensize.X - (0.25 * button_size), @@ -923,7 +923,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event) } if (distance > button_size) { - m_joystick_status[j_special1] = true; + m_joystick_status[j_aux1] = true; // move joystick "button" s32 ndx = button_size * dx / distance - button_size / 2.0f; s32 ndy = button_size * dy / distance - button_size / 2.0f; @@ -1039,7 +1039,7 @@ bool TouchScreenGUI::doubleTapDetection() void TouchScreenGUI::applyJoystickStatus() { for (unsigned int i = 0; i < 5; i++) { - if (i == 4 && !m_joystick_triggers_special1) + if (i == 4 && !m_joystick_triggers_aux1) continue; SEvent translated{}; diff --git a/src/gui/touchscreengui.h b/src/gui/touchscreengui.h index 0349624fa..ad5abae87 100644 --- a/src/gui/touchscreengui.h +++ b/src/gui/touchscreengui.h @@ -39,7 +39,7 @@ typedef enum jump_id = 0, crunch_id, zoom_id, - special1_id, + aux1_id, after_last_element_id, settings_starter_id, rare_controls_starter_id, @@ -69,7 +69,7 @@ typedef enum j_backward, j_left, j_right, - j_special1 + j_aux1 } touch_gui_joystick_move_id; typedef enum @@ -217,7 +217,7 @@ private: // forward, backward, left, right touch_gui_button_id m_joystick_names[5] = { - forward_id, backward_id, left_id, right_id, special1_id}; + forward_id, backward_id, left_id, right_id, aux1_id}; bool m_joystick_status[5] = {false, false, false, false, false}; /* @@ -237,7 +237,7 @@ private: int m_joystick_id = -1; bool m_joystick_has_really_moved = false; bool m_fixed_joystick = false; - bool m_joystick_triggers_special1 = false; + bool m_joystick_triggers_aux1 = false; button_info *m_joystick_btn_off = nullptr; button_info *m_joystick_btn_bg = nullptr; button_info *m_joystick_btn_center = nullptr; diff --git a/textures/base/pack/aux1_btn.png b/textures/base/pack/aux1_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..8ceb09542b1ab7d92a6a9fb0f836200e3118ae0b GIT binary patch literal 1652 zcmV-)28;QLP))b+J)ola;L7rzm92o(cOo3RU8X@HrL_lT>4Wuo~}D7^r0izX+QY) z@zC9n<=Www5wMS&3jpsQmd92legF@p-Ei6tkb{Mq3qUX0Ck_B+75T36goY;#A@Aa> z<^#}yKBSv%zoQQS9*yQ~fBLFPvADUTMi+>?uWCVY>d6huC04~x@HCgwR{~d0X z<3TsbKwFIwld-;%AuBiRu~JYsdqir@Q*$@#gc2tq05m8)Y~I7!Q#LS%FgnZsw{7fO zYm?-bg@`V+`aMdz$OLtpLzD_-`I2Y9SC?8ig&RtYF?uQy0NBFI2BB}!GLUD}OsRp- zYm8aHXv;C8P`^hfqKN2DvmnElQDk>j8MQVQddlsCpfN0v2mt=HJnk^qSF#4%xjqsb zi^T~5t>WjDC+nG2`F>$8(Kk%vtzF=LG86UTWxYMMgX#9cdn491pOVlS)A_X zWh}}u{(fRnfPW_^O2d0Gti?)P*{Ww^gZKc*AG$5{1pMy6Y393q>rY|cgaBY!GUQfV z6I(`G==TAo2E3=@27p%aW6G7SUOCcWF6ti?%K9yAn3xX0RXJ;XnqE*Alcs7py`U@8 zFfnVa0IGNb{#wootpDu9gb*f)Q5ke{#BQ!=n_nn(XxlhARsgbnH=g%BfykBg_K5W- z2Vi>{?%Kg^tXSD9-W?GtJbn{10BK~mn0dMS7)7l=K>*_A6qgILzpET!A6uybZe#KI z0icC{n=VNNQR`0(0OlrBzJx}J&ZyGfCUp5^G{!EE9e})q<-#;v(WbK!y$s<*Lz7FF zilS`LTlR=<7*_OrsYvIIWrsWKMfc0HO7#1S{VMD{cpS zPA~w>?j5} z=s|efY+6(1y`Xe>VWQIwPlc}>Js-U;VLckivUYR_0P0x(zR^4Z3*U<>o&fV={;;rL zd;sF-X#F%vY5H4!Rq2s;z(%-^HFE*3t-|yb+46`TDCm@;J8>dTz_s)%v&NskZaP(? zKxq9&i9cAGCol?uC%C&}7t0IAjj%AQSDk^G(Rz4TtUnQLzu2#~yMHYV_ zyO!%0iqRH9iO{-&xD_LAQlx0pH%4o3B@wktXi9Y$6-r#YMr+2n z)~&7OwzO8Rkp^$QXk%}pa`i8`&vVZ2JkR-Xe&^dsvcdfZJ}rA1004lo7<0Q5rTnC@ z;K}txyhfb}KiL#}OIR4cZ1K|s5;68<06>88lYBc5SFk7M`4BWA(!E-gJC?rKDX6`)8r6lF zd_x6oy(Xx)y-kZFM?Lcw?fcTM2^qVw`jv7CxWvYne@=hk;9dN=Pze}OkOFXq7Mi`+ zRvW#-aQw~`4_WHhn@`DNHkRE0#@hFcJm9lHyRVoC@&=uX)hWsJIJ~O}C0#woX3xq=ziWHZHW*|WVt%nod{B`* z5UlEfXU%!Z9grsYePpYH!UIz;8peN<|J07xY!k6NGoi2`O02opYKR2y)d=^$!@7zT z_-?MaVXf2hd?4cvDmSJIjdhgF`R3uP7wVN~l*ki}ryybpZ~*SrcDeVw$J`4oQMbAO zY5yGy1cpg}7pg8o)Y&B_+kQ5lJ4qsxbURIvLOyQhPjeD6CMgMY{$Y^=x~M$K=K3fx zq9+6ym_<0-4xn4qK=L3HdMn!=E%fq$K4k&#N3c#k#Q5WG3H>hK&aT}kY$*Tq&u?k+ z;Q1o6a{FfZwwdutxa=17(-x>=dm@PVnn2 zmNpSRJ*u>N;3~Dbc#U5USKa_+dLCZQ?HHMdnt&T~Zu|RbTurEs)!>{&7ZaxT1=WBuHC(hI%MIt2I5Q3PVXLYX@EGN$!+* zpjoB+s;G~e1kS8@XmdvQNelaCP6lM&e{)p(3S}*wO{#aJZGC}T_5np84y8M8$t>i^ zvi-Po6#2P?1TO-ab%Um>aERW=P&lTmtn%?+5m+I>N1&7b^;Fsdu zuI;tDu1u?#AbcjpmIU1XkvLs(ylvA7-Ua_5M0*~k^ZRk$GAZIu9K1)k(e49HkWjgAEqn+y&@xeZPx1bda?_e6sb;;K(APN# z=W6tt{?dJ-Vyn4`W)Q9`$sUaz`f~*tlq<#7Th3E&V;6Ir zzQ9u}6{&z2LcKNX*KF0_-)5KgY5L_RkP8C(B0a=)XpdMalE}*SFQ$FGOJiG>x^%wX0^UoE?ytd+`zdW2^1Z(<0v| zZU)YXe%gOXyk5nIjjYIgBdQ2gqA`@a(%~0_Je-MBAtXT<3J5oqOdn8>_P^k&_OZb9 WdxbzJNK@O%HUh9{oO!jWOZ-3dkB9jH From 92f4c68c0ce9dfcd6e1321325bab8d4bfcd626af Mon Sep 17 00:00:00 2001 From: HybridDog <3192173+HybridDog@users.noreply.github.com> Date: Wed, 24 Feb 2021 11:46:39 +0100 Subject: [PATCH 058/110] Restructure teleport command code (#9706) --- builtin/game/chat.lua | 174 ++++++++++++++++++++---------------------- 1 file changed, 82 insertions(+), 92 deletions(-) diff --git a/builtin/game/chat.lua b/builtin/game/chat.lua index 945707623..ecd413e25 100644 --- a/builtin/game/chat.lua +++ b/builtin/game/chat.lua @@ -418,121 +418,111 @@ core.register_chatcommand("remove_player", { end, }) + +-- pos may be a non-integer position +local function find_free_position_near(pos) + local tries = { + {x=1, y=0, z=0}, + {x=-1, y=0, z=0}, + {x=0, y=0, z=1}, + {x=0, y=0, z=-1}, + } + for _, d in ipairs(tries) do + local p = vector.add(pos, d) + local n = core.get_node_or_nil(p) + if n then + local def = core.registered_nodes[n.name] + if def and not def.walkable then + return p + end + end + end + return pos +end + +-- Teleports player to

if possible +local function teleport_to_pos(name, p) + local lm = 31000 + if p.x < -lm or p.x > lm or p.y < -lm or p.y > lm + or p.z < -lm or p.z > lm then + return false, "Cannot teleport out of map bounds!" + end + local teleportee = core.get_player_by_name(name) + if not teleportee then + return false, "Cannot get player with name " .. name + end + if teleportee:get_attach() then + return false, "Cannot teleport, " .. name .. + " is attached to an object!" + end + teleportee:set_pos(p) + return true, "Teleporting " .. name .. " to " .. core.pos_to_string(p, 1) +end + +-- Teleports player next to player if possible +local function teleport_to_player(name, target_name) + if name == target_name then + return false, "One does not teleport to oneself." + end + local teleportee = core.get_player_by_name(name) + if not teleportee then + return false, "Cannot get teleportee with name " .. name + end + if teleportee:get_attach() then + return false, "Cannot teleport, " .. name .. + " is attached to an object!" + end + local target = core.get_player_by_name(target_name) + if not target then + return false, "Cannot get target player with name " .. target_name + end + local p = find_free_position_near(target:get_pos()) + teleportee:set_pos(p) + return true, "Teleporting " .. name .. " to " .. target_name .. " at " .. + core.pos_to_string(p, 1) +end + core.register_chatcommand("teleport", { - params = ",, | | ( ,,) | ( )", + params = ",, | | ,, | ", description = "Teleport to position or player", privs = {teleport=true}, func = function(name, param) - -- Returns (pos, true) if found, otherwise (pos, false) - local function find_free_position_near(pos) - local tries = { - {x=1,y=0,z=0}, - {x=-1,y=0,z=0}, - {x=0,y=0,z=1}, - {x=0,y=0,z=-1}, - } - for _, d in ipairs(tries) do - local p = {x = pos.x+d.x, y = pos.y+d.y, z = pos.z+d.z} - local n = core.get_node_or_nil(p) - if n and n.name then - local def = core.registered_nodes[n.name] - if def and not def.walkable then - return p, true - end - end - end - return pos, false - end - local p = {} - p.x, p.y, p.z = string.match(param, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$") - p.x = tonumber(p.x) - p.y = tonumber(p.y) - p.z = tonumber(p.z) + p.x, p.y, p.z = param:match("^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$") + p = vector.apply(p, tonumber) if p.x and p.y and p.z then - - local lm = 31000 - if p.x < -lm or p.x > lm or p.y < -lm or p.y > lm or p.z < -lm or p.z > lm then - return false, "Cannot teleport out of map bounds!" - end - local teleportee = core.get_player_by_name(name) - if teleportee then - if teleportee:get_attach() then - return false, "Can't teleport, you're attached to an object!" - end - teleportee:set_pos(p) - return true, "Teleporting to "..core.pos_to_string(p) - end + return teleport_to_pos(name, p) end local target_name = param:match("^([^ ]+)$") - local teleportee = core.get_player_by_name(name) - - p = nil if target_name then - local target = core.get_player_by_name(target_name) - if target then - p = target:get_pos() - end + return teleport_to_player(name, target_name) end - if teleportee and p then - if teleportee:get_attach() then - return false, "Can't teleport, you're attached to an object!" - end - p = find_free_position_near(p) - teleportee:set_pos(p) - return true, "Teleporting to " .. target_name - .. " at "..core.pos_to_string(p) - end + local has_bring_priv = core.check_player_privs(name, {bring=true}) + local missing_bring_msg = "You don't have permission to teleport " .. + "other players (missing bring privilege)" - if not core.check_player_privs(name, {bring=true}) then - return false, "You don't have permission to teleport other players (missing bring privilege)" - end - - teleportee = nil - p = {} local teleportee_name teleportee_name, p.x, p.y, p.z = param:match( "^([^ ]+) +([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$") - p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z) - if teleportee_name then - teleportee = core.get_player_by_name(teleportee_name) - end - if teleportee and p.x and p.y and p.z then - if teleportee:get_attach() then - return false, "Can't teleport, player is attached to an object!" + p = vector.apply(p, tonumber) + if teleportee_name and p.x and p.y and p.z then + if not has_bring_priv then + return false, missing_bring_msg end - teleportee:set_pos(p) - return true, "Teleporting " .. teleportee_name - .. " to " .. core.pos_to_string(p) + return teleport_to_pos(teleportee_name, p) end - teleportee = nil - p = nil teleportee_name, target_name = string.match(param, "^([^ ]+) +([^ ]+)$") - if teleportee_name then - teleportee = core.get_player_by_name(teleportee_name) - end - if target_name then - local target = core.get_player_by_name(target_name) - if target then - p = target:get_pos() + if teleportee_name and target_name then + if not has_bring_priv then + return false, missing_bring_msg end - end - if teleportee and p then - if teleportee:get_attach() then - return false, "Can't teleport, player is attached to an object!" - end - p = find_free_position_near(p) - teleportee:set_pos(p) - return true, "Teleporting " .. teleportee_name - .. " to " .. target_name - .. " at " .. core.pos_to_string(p) + return teleport_to_player(teleportee_name, target_name) end - return false, 'Invalid parameters ("' .. param - .. '") or player not found (see /help teleport)' + return false end, }) From 9f6167fc3bebb337ac065b638ba7222374c769d8 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Wed, 24 Feb 2021 10:47:50 +0000 Subject: [PATCH 059/110] Deprecate not providing mod.conf --- src/content/mods.cpp | 55 +++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/src/content/mods.cpp b/src/content/mods.cpp index 95ab0290a..434004b29 100644 --- a/src/content/mods.cpp +++ b/src/content/mods.cpp @@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "settings.h" #include "porting.h" #include "convert_json.h" +#include "script/common/c_internal.h" bool parseDependsString(std::string &dep, std::unordered_set &symbols) { @@ -44,20 +45,24 @@ bool parseDependsString(std::string &dep, std::unordered_set &symbols) return !dep.empty(); } +static void log_mod_deprecation(const ModSpec &spec, const std::string &warning) +{ + auto handling_mode = get_deprecated_handling_mode(); + if (handling_mode != DeprecatedHandlingMode::Ignore) { + std::ostringstream os; + os << warning << " (" << spec.name << " at " << spec.path << ")" << std::endl; + + if (handling_mode == DeprecatedHandlingMode::Error) { + throw ModError(os.str()); + } else { + warningstream << os.str(); + } + } +} + void parseModContents(ModSpec &spec) { // NOTE: this function works in mutual recursion with getModsInPath - Settings info; - info.readConfigFile((spec.path + DIR_DELIM + "mod.conf").c_str()); - - if (info.exists("name")) - spec.name = info.get("name"); - - if (info.exists("author")) - spec.author = info.get("author"); - - if (info.exists("release")) - spec.release = info.getS32("release"); spec.depends.clear(); spec.optdepends.clear(); @@ -78,6 +83,20 @@ void parseModContents(ModSpec &spec) spec.modpack_content = getModsInPath(spec.path, true); } else { + Settings info; + info.readConfigFile((spec.path + DIR_DELIM + "mod.conf").c_str()); + + if (info.exists("name")) + spec.name = info.get("name"); + else + log_mod_deprecation(spec, "Mods not having a mod.conf file with the name is deprecated."); + + if (info.exists("author")) + spec.author = info.get("author"); + + if (info.exists("release")) + spec.release = info.getS32("release"); + // Attempt to load dependencies from mod.conf bool mod_conf_has_depends = false; if (info.exists("depends")) { @@ -109,6 +128,10 @@ void parseModContents(ModSpec &spec) std::vector dependencies; std::ifstream is((spec.path + DIR_DELIM + "depends.txt").c_str()); + + if (is.good()) + log_mod_deprecation(spec, "depends.txt is deprecated, please use mod.conf instead."); + while (is.good()) { std::string dep; std::getline(is, dep); @@ -127,14 +150,10 @@ void parseModContents(ModSpec &spec) } } - if (info.exists("description")) { + if (info.exists("description")) spec.desc = info.get("description"); - } else { - std::ifstream is((spec.path + DIR_DELIM + "description.txt") - .c_str()); - spec.desc = std::string((std::istreambuf_iterator(is)), - std::istreambuf_iterator()); - } + else if (fs::ReadFile(spec.path + DIR_DELIM + "description.txt", spec.desc)) + log_mod_deprecation(spec, "description.txt is deprecated, please use mod.conf instead."); } } From d51d0d77c4e88dec8f9670942e19595cbb3a0234 Mon Sep 17 00:00:00 2001 From: Yaman Qalieh Date: Wed, 24 Feb 2021 05:50:19 -0500 Subject: [PATCH 060/110] Allow toggling of texture pack by double clicking --- builtin/mainmenu/tab_content.lua | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/builtin/mainmenu/tab_content.lua b/builtin/mainmenu/tab_content.lua index 336730bf4..fb7f121f8 100644 --- a/builtin/mainmenu/tab_content.lua +++ b/builtin/mainmenu/tab_content.lua @@ -145,11 +145,26 @@ local function get_formspec(tabview, name, tabdata) return retval end +-------------------------------------------------------------------------------- +local function handle_doubleclick(pkg) + if pkg.type == "txp" then + if core.settings:get("texture_path") == pkg.path then + core.settings:set("texture_path", "") + else + core.settings:set("texture_path", pkg.path) + end + packages = nil + end +end + -------------------------------------------------------------------------------- local function handle_buttons(tabview, fields, tabname, tabdata) if fields["pkglist"] ~= nil then local event = core.explode_table_event(fields["pkglist"]) tabdata.selected_pkg = event.row + if event.type == "DCL" then + handle_doubleclick(packages:get_list()[tabdata.selected_pkg]) + end return true end From b5eda416cea3157ae3590fb7d229cd2cd17c3bf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Wed, 24 Feb 2021 12:05:17 +0100 Subject: [PATCH 061/110] Slap u64 on everything time-y (#10984) --- doc/lua_api.txt | 1 - src/porting.h | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index d3165b9fd..c09578a15 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -3268,7 +3268,6 @@ Helper functions * returns true when the passed number represents NaN. * `minetest.get_us_time()` * returns time with microsecond precision. May not return wall time. - * This value might overflow on certain 32-bit systems! * `table.copy(table)`: returns a table * returns a deep copy of `table` * `table.indexof(list, val)`: returns the smallest numerical index containing diff --git a/src/porting.h b/src/porting.h index e4ebe36fd..93932e1d9 100644 --- a/src/porting.h +++ b/src/porting.h @@ -234,21 +234,21 @@ inline u64 getTimeMs() { struct timespec ts; os_get_clock(&ts); - return ts.tv_sec * 1000 + ts.tv_nsec / 1000000; + return ((u64) ts.tv_sec) * 1000LL + ((u64) ts.tv_nsec) / 1000000LL; } inline u64 getTimeUs() { struct timespec ts; os_get_clock(&ts); - return ts.tv_sec * 1000000 + ts.tv_nsec / 1000; + return ((u64) ts.tv_sec) * 1000000LL + ((u64) ts.tv_nsec) / 1000LL; } inline u64 getTimeNs() { struct timespec ts; os_get_clock(&ts); - return ts.tv_sec * 1000000000 + ts.tv_nsec; + return ((u64) ts.tv_sec) * 1000000000LL + ((u64) ts.tv_nsec); } #endif From 3edb1ddb8127aa7e8de867be50c695271091cb94 Mon Sep 17 00:00:00 2001 From: savilli <78875209+savilli@users.noreply.github.com> Date: Fri, 26 Feb 2021 23:21:20 +0300 Subject: [PATCH 062/110] Fix hud_change and hud_remove after hud_add (#10997) --- src/client/client.h | 8 ------- src/client/game.cpp | 30 ++++++++++++++++------- src/network/clientpackethandler.cpp | 37 +++++++++++------------------ 3 files changed, 35 insertions(+), 40 deletions(-) diff --git a/src/client/client.h b/src/client/client.h index 25a1b97ba..2dba1506e 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -415,11 +415,6 @@ public: return m_csm_restriction_flags & flag; } - inline std::unordered_map &getHUDTranslationMap() - { - return m_hud_server_to_client; - } - bool joinModChannel(const std::string &channel) override; bool leaveModChannel(const std::string &channel) override; bool sendModChannelMessage(const std::string &channel, @@ -556,9 +551,6 @@ private: // Relation of client id to object id std::unordered_map m_sounds_to_objects; - // Map server hud ids to client hud ids - std::unordered_map m_hud_server_to_client; - // Privileges std::unordered_set m_privileges; diff --git a/src/client/game.cpp b/src/client/game.cpp index d4e2fe7c3..15fa2af23 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -856,6 +856,9 @@ private: Hud *hud = nullptr; Minimap *mapper = nullptr; + // Map server hud ids to client hud ids + std::unordered_map m_hud_server_to_client; + GameRunData runData; Flags m_flags; @@ -2602,12 +2605,11 @@ void Game::handleClientEvent_HandleParticleEvent(ClientEvent *event, void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam) { LocalPlayer *player = client->getEnv().getLocalPlayer(); - auto &hud_server_to_client = client->getHUDTranslationMap(); u32 server_id = event->hudadd.server_id; // ignore if we already have a HUD with that ID - auto i = hud_server_to_client.find(server_id); - if (i != hud_server_to_client.end()) { + auto i = m_hud_server_to_client.find(server_id); + if (i != m_hud_server_to_client.end()) { delete event->hudadd.pos; delete event->hudadd.name; delete event->hudadd.scale; @@ -2635,7 +2637,7 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam) e->size = *event->hudadd.size; e->z_index = event->hudadd.z_index; e->text2 = *event->hudadd.text2; - hud_server_to_client[server_id] = player->addHud(e); + m_hud_server_to_client[server_id] = player->addHud(e); delete event->hudadd.pos; delete event->hudadd.name; @@ -2651,18 +2653,28 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam) void Game::handleClientEvent_HudRemove(ClientEvent *event, CameraOrientation *cam) { LocalPlayer *player = client->getEnv().getLocalPlayer(); - HudElement *e = player->removeHud(event->hudrm.id); - delete e; + + auto i = m_hud_server_to_client.find(event->hudrm.id); + if (i != m_hud_server_to_client.end()) { + HudElement *e = player->removeHud(i->second); + delete e; + m_hud_server_to_client.erase(i); + } + } void Game::handleClientEvent_HudChange(ClientEvent *event, CameraOrientation *cam) { LocalPlayer *player = client->getEnv().getLocalPlayer(); - u32 id = event->hudchange.id; - HudElement *e = player->getHud(id); + HudElement *e = nullptr; - if (e == NULL) { + auto i = m_hud_server_to_client.find(event->hudchange.id); + if (i != m_hud_server_to_client.end()) { + e = player->getHud(i->second); + } + + if (e == nullptr) { delete event->hudchange.v3fdata; delete event->hudchange.v2fdata; delete event->hudchange.sdata; diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 65db02300..44bd81dac 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -1095,16 +1095,10 @@ void Client::handleCommand_HudRemove(NetworkPacket* pkt) *pkt >> server_id; - auto i = m_hud_server_to_client.find(server_id); - if (i != m_hud_server_to_client.end()) { - int client_id = i->second; - m_hud_server_to_client.erase(i); - - ClientEvent *event = new ClientEvent(); - event->type = CE_HUDRM; - event->hudrm.id = client_id; - m_client_event_queue.push(event); - } + ClientEvent *event = new ClientEvent(); + event->type = CE_HUDRM; + event->hudrm.id = server_id; + m_client_event_queue.push(event); } void Client::handleCommand_HudChange(NetworkPacket* pkt) @@ -1131,19 +1125,16 @@ void Client::handleCommand_HudChange(NetworkPacket* pkt) else *pkt >> intdata; - std::unordered_map::const_iterator i = m_hud_server_to_client.find(server_id); - if (i != m_hud_server_to_client.end()) { - ClientEvent *event = new ClientEvent(); - event->type = CE_HUDCHANGE; - event->hudchange.id = i->second; - event->hudchange.stat = (HudElementStat)stat; - event->hudchange.v2fdata = new v2f(v2fdata); - event->hudchange.v3fdata = new v3f(v3fdata); - event->hudchange.sdata = new std::string(sdata); - event->hudchange.data = intdata; - event->hudchange.v2s32data = new v2s32(v2s32data); - m_client_event_queue.push(event); - } + ClientEvent *event = new ClientEvent(); + event->type = CE_HUDCHANGE; + event->hudchange.id = server_id; + event->hudchange.stat = (HudElementStat)stat; + event->hudchange.v2fdata = new v2f(v2fdata); + event->hudchange.v3fdata = new v3f(v3fdata); + event->hudchange.sdata = new std::string(sdata); + event->hudchange.data = intdata; + event->hudchange.v2s32data = new v2s32(v2s32data); + m_client_event_queue.push(event); } void Client::handleCommand_HudSetFlags(NetworkPacket* pkt) From 225e69063fa0c3dc96f960aa79dfc568fe3d89a8 Mon Sep 17 00:00:00 2001 From: hecks <42101236+hecktest@users.noreply.github.com> Date: Fri, 26 Feb 2021 21:23:46 +0100 Subject: [PATCH 063/110] Keep mapblocks in memory if they're in range (#10714) Some other minor parts of clientmap.cpp have been cleaned up along the way --- src/client/clientmap.cpp | 45 +++++++++++++++++++++------------------- src/util/numeric.cpp | 8 ++----- src/util/numeric.h | 4 ++++ 3 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/client/clientmap.cpp b/src/client/clientmap.cpp index b9e0cc2ce..be8343009 100644 --- a/src/client/clientmap.cpp +++ b/src/client/clientmap.cpp @@ -165,6 +165,9 @@ void ClientMap::updateDrawList() v3s16 p_blocks_max; getBlocksInViewRange(cam_pos_nodes, &p_blocks_min, &p_blocks_max); + // Read the vision range, unless unlimited range is enabled. + float range = m_control.range_all ? 1e7 : m_control.wanted_range; + // Number of blocks currently loaded by the client u32 blocks_loaded = 0; // Number of blocks with mesh in rendering range @@ -182,6 +185,7 @@ void ClientMap::updateDrawList() occlusion_culling_enabled = false; } + // Uncomment to debug occluded blocks in the wireframe mode // TODO: Include this as a flag for an extended debugging setting //if (occlusion_culling_enabled && m_control.show_wireframe) @@ -218,32 +222,34 @@ void ClientMap::updateDrawList() continue; } - float range = 100000 * BS; - if (!m_control.range_all) - range = m_control.wanted_range * BS; + v3s16 block_coord = block->getPos(); + v3s16 block_position = block->getPosRelative() + MAP_BLOCKSIZE / 2; - float d = 0.0; - if (!isBlockInSight(block->getPos(), camera_position, - camera_direction, camera_fov, range, &d)) - continue; + // First, perform a simple distance check, with a padding of one extra block. + if (!m_control.range_all && + block_position.getDistanceFrom(cam_pos_nodes) > range + MAP_BLOCKSIZE) + continue; // Out of range, skip. + // Keep the block alive as long as it is in range. + block->resetUsageTimer(); blocks_in_range_with_mesh++; - /* - Occlusion culling - */ + // Frustum culling + float d = 0.0; + if (!isBlockInSight(block_coord, camera_position, + camera_direction, camera_fov, range * BS, &d)) + continue; + + // Occlusion culling if ((!m_control.range_all && d > m_control.wanted_range * BS) || (occlusion_culling_enabled && isBlockOccluded(block, cam_pos_nodes))) { blocks_occlusion_culled++; continue; } - // This block is in range. Reset usage timer. - block->resetUsageTimer(); - // Add to set block->refGrab(); - m_drawlist[block->getPos()] = block; + m_drawlist[block_coord] = block; sector_blocks_drawn++; } // foreach sectorblocks @@ -282,8 +288,6 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) const u32 daynight_ratio = m_client->getEnv().getDayNightRatio(); const v3f camera_position = m_camera_position; - const v3f camera_direction = m_camera_direction; - const f32 camera_fov = m_camera_fov; /* Get all blocks and draw all visible ones @@ -310,11 +314,10 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) if (!block->mesh) continue; - float d = 0.0; - if (!isBlockInSight(block->getPos(), camera_position, - camera_direction, camera_fov, 100000 * BS, &d)) - continue; - + v3f block_pos_r = intToFloat(block->getPosRelative() + MAP_BLOCKSIZE / 2, BS); + float d = camera_position.getDistanceFrom(block_pos_r); + d = MYMAX(0,d - BLOCK_MAX_RADIUS); + // Mesh animation if (pass == scene::ESNRP_SOLID) { //MutexAutoLock lock(block->mesh_mutex); diff --git a/src/util/numeric.cpp b/src/util/numeric.cpp index 1af3f66be..99e4cfb5c 100644 --- a/src/util/numeric.cpp +++ b/src/util/numeric.cpp @@ -106,10 +106,6 @@ u64 murmur_hash_64_ua(const void *key, int len, unsigned int seed) bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir, f32 camera_fov, f32 range, f32 *distance_ptr) { - // Maximum radius of a block. The magic number is - // sqrt(3.0) / 2.0 in literal form. - static constexpr const f32 block_max_radius = 0.866025403784f * MAP_BLOCKSIZE * BS; - v3s16 blockpos_nodes = blockpos_b * MAP_BLOCKSIZE; // Block center position @@ -123,7 +119,7 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir, v3f blockpos_relative = blockpos - camera_pos; // Total distance - f32 d = MYMAX(0, blockpos_relative.getLength() - block_max_radius); + f32 d = MYMAX(0, blockpos_relative.getLength() - BLOCK_MAX_RADIUS); if (distance_ptr) *distance_ptr = d; @@ -141,7 +137,7 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir, // such that a block that has any portion visible with the // current camera position will have the center visible at the // adjusted postion - f32 adjdist = block_max_radius / cos((M_PI - camera_fov) / 2); + f32 adjdist = BLOCK_MAX_RADIUS / cos((M_PI - camera_fov) / 2); // Block position relative to adjusted camera v3f blockpos_adj = blockpos - (camera_pos - camera_dir * adjdist); diff --git a/src/util/numeric.h b/src/util/numeric.h index 864ab7543..32a6f4312 100644 --- a/src/util/numeric.h +++ b/src/util/numeric.h @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include "basic_macros.h" +#include "constants.h" #include "irrlichttypes.h" #include "irr_v2d.h" #include "irr_v3d.h" @@ -36,6 +37,9 @@ with this program; if not, write to the Free Software Foundation, Inc., y = temp; \ } while (0) +// Maximum radius of a block. The magic number is +// sqrt(3.0) / 2.0 in literal form. +static constexpr const f32 BLOCK_MAX_RADIUS = 0.866025403784f * MAP_BLOCKSIZE * BS; inline s16 getContainerPos(s16 p, s16 d) { From b390bd2ea5c40cb96af1699a6a18f59dcdb1495b Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sun, 28 Feb 2021 17:10:40 +0000 Subject: [PATCH 064/110] pkgmgr: Fix crash when .conf release field is invalid Fixes #10942 --- builtin/mainmenu/pkgmgr.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builtin/mainmenu/pkgmgr.lua b/builtin/mainmenu/pkgmgr.lua index 19127d8d3..4aa05d838 100644 --- a/builtin/mainmenu/pkgmgr.lua +++ b/builtin/mainmenu/pkgmgr.lua @@ -90,7 +90,7 @@ local function load_texture_packs(txtpath, retval) retval[#retval + 1] = { name = item, author = conf:get("author"), - release = tonumber(conf:get("release") or "0"), + release = tonumber(conf:get("release")) or 0, list_name = name, type = "txp", path = path, @@ -135,7 +135,7 @@ function get_mods(path,retval,modpack) -- Read from config toadd.name = name toadd.author = mod_conf.author - toadd.release = tonumber(mod_conf.release or "0") + toadd.release = tonumber(mod_conf.release) or 0 toadd.path = prefix toadd.type = "mod" From ccdaf5de54108990fcdeb0b0ff4a4fc4cd998522 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sat, 23 Jan 2021 23:48:22 +0000 Subject: [PATCH 065/110] Disable clang-format, clean up scripts --- .github/workflows/cpp_lint.yml | 27 ++++++++++++++------------- util/ci/{lint.sh => clang-format.sh} | 25 +++++++++++++++++++++++-- util/fix_format.sh | 5 +++++ 3 files changed, 42 insertions(+), 15 deletions(-) rename util/ci/{lint.sh => clang-format.sh} (71%) create mode 100755 util/fix_format.sh diff --git a/.github/workflows/cpp_lint.yml b/.github/workflows/cpp_lint.yml index 1f97d105a..2bd884c7a 100644 --- a/.github/workflows/cpp_lint.yml +++ b/.github/workflows/cpp_lint.yml @@ -24,20 +24,21 @@ on: - '.github/workflows/**.yml' jobs: - clang_format: - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v2 - - name: Install clang-format - run: | - sudo apt-get install clang-format-9 -qyy - - name: Run clang-format - run: | - source ./util/ci/lint.sh - perform_lint - env: - CLANG_FORMAT: clang-format-9 +# clang_format: +# runs-on: ubuntu-18.04 +# steps: +# - uses: actions/checkout@v2 +# - name: Install clang-format +# run: | +# sudo apt-get install clang-format-9 -qyy +# +# - name: Run clang-format +# run: | +# source ./util/ci/clang-format.sh +# check_format +# env: +# CLANG_FORMAT: clang-format-9 clang_tidy: runs-on: ubuntu-18.04 diff --git a/util/ci/lint.sh b/util/ci/clang-format.sh similarity index 71% rename from util/ci/lint.sh rename to util/ci/clang-format.sh index 395445ca7..89576c656 100755 --- a/util/ci/lint.sh +++ b/util/ci/clang-format.sh @@ -1,6 +1,6 @@ #! /bin/bash -function perform_lint() { - echo "Performing LINT..." + +function setup_for_format() { if [ -z "${CLANG_FORMAT}" ]; then CLANG_FORMAT=clang-format fi @@ -8,6 +8,12 @@ function perform_lint() { CLANG_FORMAT_WHITELIST="util/ci/clang-format-whitelist.txt" files_to_lint="$(find src/ -name '*.cpp' -or -name '*.h')" +} + +function check_format() { + echo "Checking format..." + + setup_for_format local errorcount=0 local fail=0 @@ -41,3 +47,18 @@ function perform_lint() { echo "LINT OK" } + + +function fix_format() { + echo "Fixing format..." + + setup_for_format + + for f in ${files_to_lint}; do + whitelisted=$(awk '$1 == "'$f'" { print 1 }' "$CLANG_FORMAT_WHITELIST") + if [ -z "${whitelisted}" ]; then + echo "$f" + $CLANG_FORMAT -i "$f" + fi + done +} diff --git a/util/fix_format.sh b/util/fix_format.sh new file mode 100755 index 000000000..3cef6f58d --- /dev/null +++ b/util/fix_format.sh @@ -0,0 +1,5 @@ +#!/bin/bash -e + +. ./util/ci/clang-format.sh + +fix_format From c401a06f8a669d1fd4194010ccf23d7043d70fb1 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein <54945686+EliasFleckenstein03@users.noreply.github.com> Date: Mon, 1 Mar 2021 12:13:47 +0100 Subject: [PATCH 066/110] Make pkgmgr handle modpacks containing modpacks properly fixes #10550 --- builtin/mainmenu/pkgmgr.lua | 39 ++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/builtin/mainmenu/pkgmgr.lua b/builtin/mainmenu/pkgmgr.lua index 4aa05d838..787936e31 100644 --- a/builtin/mainmenu/pkgmgr.lua +++ b/builtin/mainmenu/pkgmgr.lua @@ -413,18 +413,7 @@ function pkgmgr.is_modpack_entirely_enabled(data, name) end ---------- toggles or en/disables a mod or modpack and its dependencies -------- -function pkgmgr.enable_mod(this, toset) - local list = this.data.list:get_list() - local mod = list[this.data.selected_mod] - - -- Game mods can't be enabled or disabled - if mod.is_game_content then - return - end - - local toggled_mods = {} - - local enabled_mods = {} +local function toggle_mod_or_modpack(list, toggled_mods, enabled_mods, toset, mod) if not mod.is_modpack then -- Toggle or en/disable the mod if toset == nil then @@ -443,19 +432,25 @@ function pkgmgr.enable_mod(this, toset) -- interleaved unsupported for i = 1, #list do if list[i].modpack == mod.name then - if toset == nil then - toset = not list[i].enabled - end - if list[i].enabled ~= toset then - list[i].enabled = toset - toggled_mods[#toggled_mods+1] = list[i].name - end - if toset then - enabled_mods[list[i].name] = true - end + toggle_mod_or_modpack(list, toggled_mods, enabled_mods, toset, list[i]) end end end +end + +function pkgmgr.enable_mod(this, toset) + local list = this.data.list:get_list() + local mod = list[this.data.selected_mod] + + -- Game mods can't be enabled or disabled + if mod.is_game_content then + return + end + + local toggled_mods = {} + local enabled_mods = {} + toggle_mod_or_modpack(list, toggled_mods, enabled_mods, toset, mod) + if not toset then -- Mod(s) were disabled, so no dependencies need to be enabled table.sort(toggled_mods) From 3a2f55bc19bec1cb3f76d0edc30208a1eff11925 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Wed, 20 Jan 2021 16:58:59 +0100 Subject: [PATCH 067/110] Settings: Push groups in to_table as well --- src/script/lua_api/l_settings.cpp | 33 +++++++++++++++++++++++-------- src/settings.h | 2 ++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/script/lua_api/l_settings.cpp b/src/script/lua_api/l_settings.cpp index bcbaf15fa..85df8ab34 100644 --- a/src/script/lua_api/l_settings.cpp +++ b/src/script/lua_api/l_settings.cpp @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "lua_api/l_settings.h" #include "lua_api/l_internal.h" #include "cpp_api/s_security.h" +#include "threading/mutex_auto_lock.h" #include "util/string.h" // FlagDesc #include "settings.h" #include "noise.h" @@ -253,20 +254,36 @@ int LuaSettings::l_write(lua_State* L) return 1; } +static void push_settings_table(lua_State *L, const Settings *settings) +{ + std::vector keys = settings->getNames(); + lua_newtable(L); + for (const std::string &key : keys) { + std::string value; + Settings *group = nullptr; + + if (settings->getNoEx(key, value)) { + lua_pushstring(L, value.c_str()); + } else if (settings->getGroupNoEx(key, group)) { + // Recursively push tables + push_settings_table(L, group); + } else { + // Impossible case (multithreading) due to MutexAutoLock + continue; + } + + lua_setfield(L, -2, key.c_str()); + } +} + // to_table(self) -> {[key1]=value1,...} int LuaSettings::l_to_table(lua_State* L) { NO_MAP_LOCK_REQUIRED; LuaSettings* o = checkobject(L, 1); - std::vector keys = o->m_settings->getNames(); - - lua_newtable(L); - for (const std::string &key : keys) { - lua_pushstring(L, o->m_settings->get(key).c_str()); - lua_setfield(L, -2, key.c_str()); - } - + MutexAutoLock(o->m_settings->m_mutex); + push_settings_table(L, o->m_settings); return 1; } diff --git a/src/settings.h b/src/settings.h index b5e859ee0..e22d949d3 100644 --- a/src/settings.h +++ b/src/settings.h @@ -239,6 +239,8 @@ private: // Allow TestSettings to run sanity checks using private functions. friend class TestSettings; + // For sane mutex locking when iterating + friend class LuaSettings; void updateNoLock(const Settings &other); void clearNoLock(); From 1abb83b1abde10632442554c90549d81d1b39cd7 Mon Sep 17 00:00:00 2001 From: Muhammad Rifqi Priyo Susanto Date: Mon, 1 Mar 2021 19:37:32 +0700 Subject: [PATCH 068/110] Use vec4 for varTexCoord in interlaced shader (#11004) Somewhen in the past, inTexCoord0 was a vec2. Now, it is a vec4. --- client/shaders/3d_interlaced_merge/opengl_fragment.glsl | 2 +- client/shaders/3d_interlaced_merge/opengl_vertex.glsl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/shaders/3d_interlaced_merge/opengl_fragment.glsl b/client/shaders/3d_interlaced_merge/opengl_fragment.glsl index 7cba61b39..6d3ae5093 100644 --- a/client/shaders/3d_interlaced_merge/opengl_fragment.glsl +++ b/client/shaders/3d_interlaced_merge/opengl_fragment.glsl @@ -6,7 +6,7 @@ uniform sampler2D textureFlags; #define rightImage normalTexture #define maskImage textureFlags -varying mediump vec2 varTexCoord; +varying mediump vec4 varTexCoord; void main(void) { diff --git a/client/shaders/3d_interlaced_merge/opengl_vertex.glsl b/client/shaders/3d_interlaced_merge/opengl_vertex.glsl index 860049481..224b7d183 100644 --- a/client/shaders/3d_interlaced_merge/opengl_vertex.glsl +++ b/client/shaders/3d_interlaced_merge/opengl_vertex.glsl @@ -1,4 +1,4 @@ -varying mediump vec2 varTexCoord; +varying mediump vec4 varTexCoord; void main(void) { From 5b42b5a8c26811bd7cb152cbb5ffeee77abb8d66 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein <54945686+EliasFleckenstein03@users.noreply.github.com> Date: Thu, 4 Mar 2021 20:37:41 +0100 Subject: [PATCH 069/110] Add mod.conf to preview clientmod (#11020) --- clientmods/preview/mod.conf | 1 + 1 file changed, 1 insertion(+) create mode 100644 clientmods/preview/mod.conf diff --git a/clientmods/preview/mod.conf b/clientmods/preview/mod.conf new file mode 100644 index 000000000..4e56ec293 --- /dev/null +++ b/clientmods/preview/mod.conf @@ -0,0 +1 @@ +name = preview From ac8ac191691a13162667314358e96f07a65d0d1a Mon Sep 17 00:00:00 2001 From: sfan5 Date: Thu, 4 Mar 2021 20:38:28 +0100 Subject: [PATCH 070/110] Protect mg_name and mg_flags from being set by Lua (#11010) --- src/script/lua_api/l_settings.cpp | 45 ++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/src/script/lua_api/l_settings.cpp b/src/script/lua_api/l_settings.cpp index 85df8ab34..a82073ed4 100644 --- a/src/script/lua_api/l_settings.cpp +++ b/src/script/lua_api/l_settings.cpp @@ -27,12 +27,36 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" -#define SET_SECURITY_CHECK(L, name) \ - if (o->m_settings == g_settings && ScriptApiSecurity::isSecure(L) && \ - name.compare(0, 7, "secure.") == 0) { \ - throw LuaError("Attempt to set secure setting."); \ +/* This protects: + * 'secure.*' settings from being set + * some mapgen settings from being set + * (not security-criticial, just to avoid messing up user configs) + */ +#define CHECK_SETTING_SECURITY(L, name) \ + if (o->m_settings == g_settings) { \ + if (checkSettingSecurity(L, name) == -1) \ + return 0; \ } +static inline int checkSettingSecurity(lua_State* L, const std::string &name) +{ + if (ScriptApiSecurity::isSecure(L) && name.compare(0, 7, "secure.") == 0) + throw LuaError("Attempt to set secure setting."); + + bool is_mainmenu = false; +#ifndef SERVER + is_mainmenu = ModApiBase::getGuiEngine(L) != nullptr; +#endif + if (!is_mainmenu && (name == "mg_name" || name == "mg_flags")) { + errorstream << "Tried to set global setting " << name << ", ignoring. " + "minetest.set_mapgen_setting() should be used instead." << std::endl; + infostream << script_get_backtrace(L) << std::endl; + return -1; + } + + return 0; +} + LuaSettings::LuaSettings(Settings *settings, const std::string &filename) : m_settings(settings), m_filename(filename) @@ -130,6 +154,7 @@ int LuaSettings::l_get_np_group(lua_State *L) return 1; } +// get_flags(self, key) -> table or nil int LuaSettings::l_get_flags(lua_State *L) { NO_MAP_LOCK_REQUIRED; @@ -162,7 +187,7 @@ int LuaSettings::l_set(lua_State* L) std::string key = std::string(luaL_checkstring(L, 2)); const char* value = luaL_checkstring(L, 3); - SET_SECURITY_CHECK(L, key); + CHECK_SETTING_SECURITY(L, key); if (!o->m_settings->set(key, value)) throw LuaError("Invalid sequence found in setting parameters"); @@ -179,14 +204,14 @@ int LuaSettings::l_set_bool(lua_State* L) std::string key = std::string(luaL_checkstring(L, 2)); bool value = readParam(L, 3); - SET_SECURITY_CHECK(L, key); + CHECK_SETTING_SECURITY(L, key); o->m_settings->setBool(key, value); - return 1; + return 0; } -// set(self, key, value) +// set_np_group(self, key, value) int LuaSettings::l_set_np_group(lua_State *L) { NO_MAP_LOCK_REQUIRED; @@ -196,7 +221,7 @@ int LuaSettings::l_set_np_group(lua_State *L) NoiseParams value; read_noiseparams(L, 3, &value); - SET_SECURITY_CHECK(L, key); + CHECK_SETTING_SECURITY(L, key); o->m_settings->setNoiseParams(key, value); @@ -211,7 +236,7 @@ int LuaSettings::l_remove(lua_State* L) std::string key = std::string(luaL_checkstring(L, 2)); - SET_SECURITY_CHECK(L, key); + CHECK_SETTING_SECURITY(L, key); bool success = o->m_settings->remove(key); lua_pushboolean(L, success); From cafad6ac03348aa77e8ee4bb035840e73de4b2a9 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Fri, 5 Mar 2021 15:27:33 +0000 Subject: [PATCH 071/110] Translate builtin (#10693) This PR is the second attempt to translate builtin. Server-sent translation files can be added to `builtin/locale/`, whereas client-side translations depend on gettext. --- .gitignore | 3 +- builtin/client/chatcommands.lua | 9 +- builtin/client/death_formspec.lua | 2 +- builtin/common/chatcommands.lua | 69 +-- builtin/common/information_formspecs.lua | 28 +- builtin/game/chat.lua | 549 ++++++++++++----------- builtin/game/privileges.lua | 40 +- builtin/game/register.lua | 10 +- builtin/locale/template.txt | 224 +++++++++ builtin/profiler/init.lua | 18 +- src/server.cpp | 4 +- util/updatepo.sh | 1 + 12 files changed, 623 insertions(+), 334 deletions(-) create mode 100644 builtin/locale/template.txt diff --git a/.gitignore b/.gitignore index 52f8bc4f4..d951f2222 100644 --- a/.gitignore +++ b/.gitignore @@ -86,8 +86,7 @@ src/test_config.h src/cmake_config.h src/cmake_config_githash.h src/unittest/test_world/world.mt -src/lua/build/ -locale/ +/locale/ .directory *.cbp *.layout diff --git a/builtin/client/chatcommands.lua b/builtin/client/chatcommands.lua index 0e8d4dd03..a563a6627 100644 --- a/builtin/client/chatcommands.lua +++ b/builtin/client/chatcommands.lua @@ -1,6 +1,5 @@ -- Minetest: builtin/client/chatcommands.lua - core.register_on_sending_chat_message(function(message) if message:sub(1,2) == ".." then return false @@ -8,7 +7,7 @@ core.register_on_sending_chat_message(function(message) local first_char = message:sub(1,1) if first_char == "/" or first_char == "." then - core.display_chat_message(core.gettext("issued command: ") .. message) + core.display_chat_message(core.gettext("Issued command: ") .. message) end if first_char ~= "." then @@ -19,7 +18,7 @@ core.register_on_sending_chat_message(function(message) param = param or "" if not cmd then - core.display_chat_message(core.gettext("-!- Empty command")) + core.display_chat_message("-!- " .. core.gettext("Empty command.")) return true end @@ -36,7 +35,7 @@ core.register_on_sending_chat_message(function(message) core.display_chat_message(result) end else - core.display_chat_message(core.gettext("-!- Invalid command: ") .. cmd) + core.display_chat_message("-!- " .. core.gettext("Invalid command: ") .. cmd) end return true @@ -66,7 +65,7 @@ core.register_chatcommand("clear_chat_queue", { description = core.gettext("Clear the out chat queue"), func = function(param) core.clear_out_chat_queue() - return true, core.gettext("The out chat queue is now empty") + return true, core.gettext("The out chat queue is now empty.") end, }) diff --git a/builtin/client/death_formspec.lua b/builtin/client/death_formspec.lua index e755ac5c1..7df0cbd75 100644 --- a/builtin/client/death_formspec.lua +++ b/builtin/client/death_formspec.lua @@ -2,7 +2,7 @@ -- handled by the engine. core.register_on_death(function() - core.display_chat_message("You died.") + core.display_chat_message(core.gettext("You died.")) local formspec = "size[11,5.5]bgcolor[#320000b4;true]" .. "label[4.85,1.35;" .. fgettext("You died") .. "]button_exit[4,3;3,0.5;btn_respawn;".. fgettext("Respawn") .."]" diff --git a/builtin/common/chatcommands.lua b/builtin/common/chatcommands.lua index 52edda659..c945e7bdb 100644 --- a/builtin/common/chatcommands.lua +++ b/builtin/common/chatcommands.lua @@ -1,5 +1,9 @@ -- Minetest: builtin/common/chatcommands.lua +-- For server-side translations (if INIT == "game") +-- Otherwise, use core.gettext +local S = core.get_translator("__builtin") + core.registered_chatcommands = {} function core.register_chatcommand(cmd, def) @@ -29,25 +33,12 @@ function core.override_chatcommand(name, redefinition) core.registered_chatcommands[name] = chatcommand end -local cmd_marker = "/" - -local function gettext(...) - return ... -end - -local function gettext_replace(text, replace) - return text:gsub("$1", replace) -end - - -if INIT == "client" then - cmd_marker = "." - gettext = core.gettext - gettext_replace = fgettext_ne -end - local function do_help_cmd(name, param) local function format_help_line(cmd, def) + local cmd_marker = "/" + if INIT == "client" then + cmd_marker = "." + end local msg = core.colorize("#00ffff", cmd_marker .. cmd) if def.params and def.params ~= "" then msg = msg .. " " .. def.params @@ -65,9 +56,21 @@ local function do_help_cmd(name, param) end end table.sort(cmds) - return true, gettext("Available commands: ") .. table.concat(cmds, " ") .. "\n" - .. gettext_replace("Use '$1help ' to get more information," - .. " or '$1help all' to list everything.", cmd_marker) + local msg + if INIT == "game" then + msg = S("Available commands: @1", + table.concat(cmds, " ")) .. "\n" + .. S("Use '/help ' to get more " + .. "information, or '/help all' to list " + .. "everything.") + else + msg = core.gettext("Available commands: ") + .. table.concat(cmds, " ") .. "\n" + .. core.gettext("Use '.help ' to get more " + .. "information, or '.help all' to list " + .. "everything.") + end + return true, msg elseif param == "all" then local cmds = {} for cmd, def in pairs(core.registered_chatcommands) do @@ -76,19 +79,31 @@ local function do_help_cmd(name, param) end end table.sort(cmds) - return true, gettext("Available commands:").."\n"..table.concat(cmds, "\n") + local msg + if INIT == "game" then + msg = S("Available commands:") + else + msg = core.gettext("Available commands:") + end + return true, msg.."\n"..table.concat(cmds, "\n") elseif INIT == "game" and param == "privs" then local privs = {} for priv, def in pairs(core.registered_privileges) do privs[#privs + 1] = priv .. ": " .. def.description end table.sort(privs) - return true, "Available privileges:\n"..table.concat(privs, "\n") + return true, S("Available privileges:").."\n"..table.concat(privs, "\n") else local cmd = param local def = core.registered_chatcommands[cmd] if not def then - return false, gettext("Command not available: ")..cmd + local msg + if INIT == "game" then + msg = S("Command not available: @1", cmd) + else + msg = core.gettext("Command not available: ") .. cmd + end + return false, msg else return true, format_help_line(cmd, def) end @@ -97,16 +112,16 @@ end if INIT == "client" then core.register_chatcommand("help", { - params = gettext("[all | ]"), - description = gettext("Get help for commands"), + params = core.gettext("[all | ]"), + description = core.gettext("Get help for commands"), func = function(param) return do_help_cmd(nil, param) end, }) else core.register_chatcommand("help", { - params = "[all | privs | ]", - description = "Get help for commands or list privileges", + params = S("[all | privs | ]"), + description = S("Get help for commands or list privileges"), func = do_help_cmd, }) end diff --git a/builtin/common/information_formspecs.lua b/builtin/common/information_formspecs.lua index 3e2f1f079..e814b4c43 100644 --- a/builtin/common/information_formspecs.lua +++ b/builtin/common/information_formspecs.lua @@ -20,7 +20,8 @@ local LIST_FORMSPEC_DESCRIPTION = [[ button_exit[5,7;3,1;quit;%s] ]] -local formspec_escape = core.formspec_escape +local F = core.formspec_escape +local S = core.get_translator("__builtin") local check_player_privs = core.check_player_privs @@ -51,22 +52,23 @@ core.after(0, load_mod_command_tree) local function build_chatcommands_formspec(name, sel, copy) local rows = {} - rows[1] = "#FFF,0,Command,Parameters" + rows[1] = "#FFF,0,"..F(S("Command"))..","..F(S("Parameters")) - local description = "For more information, click on any entry in the list.\n" .. - "Double-click to copy the entry to the chat history." + local description = S("For more information, click on " + .. "any entry in the list.").. "\n" .. + S("Double-click to copy the entry to the chat history.") for i, data in ipairs(mod_cmds) do - rows[#rows + 1] = COLOR_BLUE .. ",0," .. formspec_escape(data[1]) .. "," + rows[#rows + 1] = COLOR_BLUE .. ",0," .. F(data[1]) .. "," for j, cmds in ipairs(data[2]) do local has_priv = check_player_privs(name, cmds[2].privs) rows[#rows + 1] = ("%s,1,%s,%s"):format( has_priv and COLOR_GREEN or COLOR_GRAY, - cmds[1], formspec_escape(cmds[2].params)) + cmds[1], F(cmds[2].params)) if sel == #rows then description = cmds[2].description if copy then - core.chat_send_player(name, ("Command: %s %s"):format( + core.chat_send_player(name, S("Command: @1 @2", core.colorize("#0FF", "/" .. cmds[1]), cmds[2].params)) end end @@ -74,9 +76,9 @@ local function build_chatcommands_formspec(name, sel, copy) end return LIST_FORMSPEC_DESCRIPTION:format( - "Available commands: (see also: /help )", + F(S("Available commands: (see also: /help )")), table.concat(rows, ","), sel or 0, - description, "Close" + F(description), F(S("Close")) ) end @@ -91,19 +93,19 @@ local function build_privs_formspec(name) table.sort(privs, function(a, b) return a[1] < b[1] end) local rows = {} - rows[1] = "#FFF,0,Privilege,Description" + rows[1] = "#FFF,0,"..F(S("Privilege"))..","..F(S("Description")) local player_privs = core.get_player_privs(name) for i, data in ipairs(privs) do rows[#rows + 1] = ("%s,0,%s,%s"):format( player_privs[data[1]] and COLOR_GREEN or COLOR_GRAY, - data[1], formspec_escape(data[2].description)) + data[1], F(data[2].description)) end return LIST_FORMSPEC:format( - "Available privileges:", + F(S("Available privileges:")), table.concat(rows, ","), - "Close" + F(S("Close")) ) end diff --git a/builtin/game/chat.lua b/builtin/game/chat.lua index ecd413e25..eb3364d60 100644 --- a/builtin/game/chat.lua +++ b/builtin/game/chat.lua @@ -1,5 +1,7 @@ -- Minetest: builtin/game/chat.lua +local S = core.get_translator("__builtin") + -- Helper function that implements search and replace without pattern matching -- Returns the string and a boolean indicating whether or not the string was modified local function safe_gsub(s, replace, with) @@ -52,7 +54,7 @@ core.register_on_chat_message(function(name, message) local cmd, param = string.match(message, "^/([^ ]+) *(.*)") if not cmd then - core.chat_send_player(name, "-!- Empty command") + core.chat_send_player(name, "-!- "..S("Empty command.")) return true end @@ -65,7 +67,7 @@ core.register_on_chat_message(function(name, message) local cmd_def = core.registered_chatcommands[cmd] if not cmd_def then - core.chat_send_player(name, "-!- Invalid command: " .. cmd) + core.chat_send_player(name, "-!- "..S("Invalid command: @1", cmd)) return true end local has_privs, missing_privs = core.check_player_privs(name, cmd_def.privs) @@ -73,7 +75,7 @@ core.register_on_chat_message(function(name, message) core.set_last_run_mod(cmd_def.mod_origin) local success, result = cmd_def.func(name, param) if success == false and result == nil then - core.chat_send_player(name, "-!- Invalid command usage") + core.chat_send_player(name, "-!- "..S("Invalid command usage.")) local help_def = core.registered_chatcommands["help"] if help_def then local _, helpmsg = help_def.func(name, cmd) @@ -85,9 +87,10 @@ core.register_on_chat_message(function(name, message) core.chat_send_player(name, result) end else - core.chat_send_player(name, "You don't have permission" - .. " to run this command (missing privileges: " - .. table.concat(missing_privs, ", ") .. ")") + core.chat_send_player(name, + S("You don't have permission to run this command " + .. "(missing privileges: @1).", + table.concat(missing_privs, ", "))) end return true -- Handled chat message end) @@ -107,12 +110,13 @@ local function parse_range_str(player_name, str) if args[1] == "here" then p1, p2 = core.get_player_radius_area(player_name, tonumber(args[2])) if p1 == nil then - return false, "Unable to get player " .. player_name .. " position" + return false, S("Unable to get position of player @1.", player_name) end else p1, p2 = core.string_to_area(str) if p1 == nil then - return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)" + return false, S("Incorrect area format. " + .. "Expected: (x1,y1,z1) (x2,y2,z2)") end end @@ -123,9 +127,9 @@ end -- Chat commands -- core.register_chatcommand("me", { - params = "", - description = "Show chat action (e.g., '/me orders a pizza' displays" - .. " ' orders a pizza')", + params = S(""), + description = S("Show chat action (e.g., '/me orders a pizza' " + .. "displays ' orders a pizza')"), privs = {shout=true}, func = function(name, param) core.chat_send_all("* " .. name .. " " .. param) @@ -134,43 +138,44 @@ core.register_chatcommand("me", { }) core.register_chatcommand("admin", { - description = "Show the name of the server owner", + description = S("Show the name of the server owner"), func = function(name) local admin = core.settings:get("name") if admin then - return true, "The administrator of this server is " .. admin .. "." + return true, S("The administrator of this server is @1.", admin) else - return false, "There's no administrator named in the config file." + return false, S("There's no administrator named " + .. "in the config file.") end end, }) core.register_chatcommand("privs", { - params = "[]", - description = "Show privileges of yourself or another player", + params = S("[]"), + description = S("Show privileges of yourself or another player"), func = function(caller, param) param = param:trim() local name = (param ~= "" and param or caller) if not core.player_exists(name) then - return false, "Player " .. name .. " does not exist." + return false, S("Player @1 does not exist.", name) end - return true, "Privileges of " .. name .. ": " - .. core.privs_to_string( - core.get_player_privs(name), ", ") + return true, S("Privileges of @1: @2", name, + core.privs_to_string( + core.get_player_privs(name), ", ")) end, }) core.register_chatcommand("haspriv", { - params = "", - description = "Return list of all online players with privilege.", + params = S(""), + description = S("Return list of all online players with privilege"), privs = {basic_privs = true}, func = function(caller, param) param = param:trim() if param == "" then - return false, "Invalid parameters (see /help haspriv)" + return false, S("Invalid parameters (see /help haspriv).") end if not core.registered_privileges[param] then - return false, "Unknown privilege!" + return false, S("Unknown privilege!") end local privs = core.string_to_privs(param) local players_with_priv = {} @@ -180,19 +185,20 @@ core.register_chatcommand("haspriv", { table.insert(players_with_priv, player_name) end end - return true, "Players online with the \"" .. param .. "\" privilege: " .. - table.concat(players_with_priv, ", ") + return true, S("Players online with the \"@1\" privilege: @2", + param, + table.concat(players_with_priv, ", ")) end }) local function handle_grant_command(caller, grantname, grantprivstr) local caller_privs = core.get_player_privs(caller) if not (caller_privs.privs or caller_privs.basic_privs) then - return false, "Your privileges are insufficient." + return false, S("Your privileges are insufficient.") end if not core.get_auth_handler().get_auth(grantname) then - return false, "Player " .. grantname .. " does not exist." + return false, S("Player @1 does not exist.", grantname) end local grantprivs = core.string_to_privs(grantprivstr) if grantprivstr == "all" then @@ -204,10 +210,10 @@ local function handle_grant_command(caller, grantname, grantprivstr) core.string_to_privs(core.settings:get("basic_privs") or "interact,shout") for priv, _ in pairs(grantprivs) do if not basic_privs[priv] and not caller_privs.privs then - return false, "Your privileges are insufficient." + return false, S("Your privileges are insufficient.") end if not core.registered_privileges[priv] then - privs_unknown = privs_unknown .. "Unknown privilege: " .. priv .. "\n" + privs_unknown = privs_unknown .. S("Unknown privilege: @1", priv) .. "\n" end privs[priv] = true end @@ -221,33 +227,33 @@ local function handle_grant_command(caller, grantname, grantprivstr) core.set_player_privs(grantname, privs) core.log("action", caller..' granted ('..core.privs_to_string(grantprivs, ', ')..') privileges to '..grantname) if grantname ~= caller then - core.chat_send_player(grantname, caller - .. " granted you privileges: " - .. core.privs_to_string(grantprivs, ' ')) + core.chat_send_player(grantname, + S("@1 granted you privileges: @2", caller, + core.privs_to_string(grantprivs, ' '))) end - return true, "Privileges of " .. grantname .. ": " - .. core.privs_to_string( - core.get_player_privs(grantname), ' ') + return true, S("Privileges of @1: @2", grantname, + core.privs_to_string( + core.get_player_privs(grantname), ' ')) end core.register_chatcommand("grant", { - params = " ( | all)", - description = "Give privileges to player", + params = S(" ( | all)"), + description = S("Give privileges to player"), func = function(name, param) local grantname, grantprivstr = string.match(param, "([^ ]+) (.+)") if not grantname or not grantprivstr then - return false, "Invalid parameters (see /help grant)" + return false, S("Invalid parameters (see /help grant).") end return handle_grant_command(name, grantname, grantprivstr) end, }) core.register_chatcommand("grantme", { - params = " | all", - description = "Grant privileges to yourself", + params = S(" | all"), + description = S("Grant privileges to yourself"), func = function(name, param) if param == "" then - return false, "Invalid parameters (see /help grantme)" + return false, S("Invalid parameters (see /help grantme).") end return handle_grant_command(name, name, param) end, @@ -256,11 +262,11 @@ core.register_chatcommand("grantme", { local function handle_revoke_command(caller, revokename, revokeprivstr) local caller_privs = core.get_player_privs(caller) if not (caller_privs.privs or caller_privs.basic_privs) then - return false, "Your privileges are insufficient." + return false, S("Your privileges are insufficient.") end if not core.get_auth_handler().get_auth(revokename) then - return false, "Player " .. revokename .. " does not exist." + return false, S("Player @1 does not exist.", revokename) end local revokeprivs = core.string_to_privs(revokeprivstr) @@ -269,7 +275,7 @@ local function handle_revoke_command(caller, revokename, revokeprivstr) core.string_to_privs(core.settings:get("basic_privs") or "interact,shout") for priv, _ in pairs(revokeprivs) do if not basic_privs[priv] and not caller_privs.privs then - return false, "Your privileges are insufficient." + return false, S("Your privileges are insufficient.") end end @@ -292,43 +298,43 @@ local function handle_revoke_command(caller, revokename, revokeprivstr) ..core.privs_to_string(revokeprivs, ', ') ..') privileges from '..revokename) if revokename ~= caller then - core.chat_send_player(revokename, caller - .. " revoked privileges from you: " - .. core.privs_to_string(revokeprivs, ' ')) + core.chat_send_player(revokename, + S("@1 revoked privileges from you: @2", caller, + core.privs_to_string(revokeprivs, ' '))) end - return true, "Privileges of " .. revokename .. ": " - .. core.privs_to_string( - core.get_player_privs(revokename), ' ') + return true, S("Privileges of @1: @2", revokename, + core.privs_to_string( + core.get_player_privs(revokename), ' ')) end core.register_chatcommand("revoke", { - params = " ( | all)", - description = "Remove privileges from player", + params = S(" ( | all)"), + description = S("Remove privileges from player"), privs = {}, func = function(name, param) local revokename, revokeprivstr = string.match(param, "([^ ]+) (.+)") if not revokename or not revokeprivstr then - return false, "Invalid parameters (see /help revoke)" + return false, S("Invalid parameters (see /help revoke).") end return handle_revoke_command(name, revokename, revokeprivstr) end, }) core.register_chatcommand("revokeme", { - params = " | all", - description = "Revoke privileges from yourself", + params = S(" | all"), + description = S("Revoke privileges from yourself"), privs = {}, func = function(name, param) if param == "" then - return false, "Invalid parameters (see /help revokeme)" + return false, S("Invalid parameters (see /help revokeme).") end return handle_revoke_command(name, name, param) end, }) core.register_chatcommand("setpassword", { - params = " ", - description = "Set player's password", + params = S(" "), + description = S("Set player's password"), privs = {password=true}, func = function(name, param) local toname, raw_password = string.match(param, "^([^ ]+) +(.+)$") @@ -338,83 +344,83 @@ core.register_chatcommand("setpassword", { end if not toname then - return false, "Name field required" + return false, S("Name field required.") end - local act_str_past, act_str_pres + local msg_chat, msg_log, msg_ret if not raw_password then core.set_player_password(toname, "") - act_str_past = "cleared" - act_str_pres = "clears" + msg_chat = S("Your password was cleared by @1.", name) + msg_log = name .. " clears password of " .. toname .. "." + msg_ret = S("Password of player \"@1\" cleared.", toname) else core.set_player_password(toname, core.get_password_hash(toname, raw_password)) - act_str_past = "set" - act_str_pres = "sets" + msg_chat = S("Your password was set by @1.", name) + msg_log = name .. " sets password of " .. toname .. "." + msg_ret = S("Password of player \"@1\" set.", toname) end if toname ~= name then - core.chat_send_player(toname, "Your password was " - .. act_str_past .. " by " .. name) + core.chat_send_player(toname, msg_chat) end - core.log("action", name .. " " .. act_str_pres .. - " password of " .. toname .. ".") + core.log("action", msg_log) - return true, "Password of player \"" .. toname .. "\" " .. act_str_past + return true, msg_ret end, }) core.register_chatcommand("clearpassword", { - params = "", - description = "Set empty password for a player", + params = S(""), + description = S("Set empty password for a player"), privs = {password=true}, func = function(name, param) local toname = param if toname == "" then - return false, "Name field required" + return false, S("Name field required.") end core.set_player_password(toname, '') core.log("action", name .. " clears password of " .. toname .. ".") - return true, "Password of player \"" .. toname .. "\" cleared" + return true, S("Password of player \"@1\" cleared.", toname) end, }) core.register_chatcommand("auth_reload", { params = "", - description = "Reload authentication data", + description = S("Reload authentication data"), privs = {server=true}, func = function(name, param) local done = core.auth_reload() - return done, (done and "Done." or "Failed.") + return done, (done and S("Done.") or S("Failed.")) end, }) core.register_chatcommand("remove_player", { - params = "", - description = "Remove a player's data", + params = S(""), + description = S("Remove a player's data"), privs = {server=true}, func = function(name, param) local toname = param if toname == "" then - return false, "Name field required" + return false, S("Name field required.") end local rc = core.remove_player(toname) if rc == 0 then core.log("action", name .. " removed player data of " .. toname .. ".") - return true, "Player \"" .. toname .. "\" removed." + return true, S("Player \"@1\" removed.", toname) elseif rc == 1 then - return true, "No such player \"" .. toname .. "\" to remove." + return true, S("No such player \"@1\" to remove.", toname) elseif rc == 2 then - return true, "Player \"" .. toname .. "\" is connected, cannot remove." + return true, S("Player \"@1\" is connected, cannot remove.", toname) end - return false, "Unhandled remove_player return code " .. rc .. "" + return false, S("Unhandled remove_player return code @1.", tostring(rc)) end, }) @@ -445,46 +451,46 @@ local function teleport_to_pos(name, p) local lm = 31000 if p.x < -lm or p.x > lm or p.y < -lm or p.y > lm or p.z < -lm or p.z > lm then - return false, "Cannot teleport out of map bounds!" + return false, S("Cannot teleport out of map bounds!") end local teleportee = core.get_player_by_name(name) if not teleportee then - return false, "Cannot get player with name " .. name + return false, S("Cannot get player with name @1.", name) end if teleportee:get_attach() then - return false, "Cannot teleport, " .. name .. - " is attached to an object!" + return false, S("Cannot teleport, @1 " .. + "is attached to an object!", name) end teleportee:set_pos(p) - return true, "Teleporting " .. name .. " to " .. core.pos_to_string(p, 1) + return true, S("Teleporting @1 to @2.", name, core.pos_to_string(p, 1)) end -- Teleports player next to player if possible local function teleport_to_player(name, target_name) if name == target_name then - return false, "One does not teleport to oneself." + return false, S("One does not teleport to oneself.") end local teleportee = core.get_player_by_name(name) if not teleportee then - return false, "Cannot get teleportee with name " .. name + return false, S("Cannot get teleportee with name @1.", name) end if teleportee:get_attach() then - return false, "Cannot teleport, " .. name .. - " is attached to an object!" + return false, S("Cannot teleport, @1 " .. + "is attached to an object!", name) end local target = core.get_player_by_name(target_name) if not target then - return false, "Cannot get target player with name " .. target_name + return false, S("Cannot get target player with name @1.", target_name) end local p = find_free_position_near(target:get_pos()) teleportee:set_pos(p) - return true, "Teleporting " .. name .. " to " .. target_name .. " at " .. - core.pos_to_string(p, 1) + return true, S("Teleporting @1 to @2 at @3.", name, target_name, + core.pos_to_string(p, 1)) end core.register_chatcommand("teleport", { - params = ",, | | ,, | ", - description = "Teleport to position or player", + params = S(",, | | ,, | "), + description = S("Teleport to position or player"), privs = {teleport=true}, func = function(name, param) local p = {} @@ -500,8 +506,8 @@ core.register_chatcommand("teleport", { end local has_bring_priv = core.check_player_privs(name, {bring=true}) - local missing_bring_msg = "You don't have permission to teleport " .. - "other players (missing bring privilege)" + local missing_bring_msg = S("You don't have permission to teleport " .. + "other players (missing privilege: @1).", "bring") local teleportee_name teleportee_name, p.x, p.y, p.z = param:match( @@ -527,8 +533,8 @@ core.register_chatcommand("teleport", { }) core.register_chatcommand("set", { - params = "([-n] ) | ", - description = "Set or read server configuration setting", + params = S("([-n] ) | "), + description = S("Set or read server configuration setting"), privs = {server=true}, func = function(name, param) local arg, setname, setvalue = string.match(param, "(-[n]) ([^ ]+) (.+)") @@ -540,22 +546,23 @@ core.register_chatcommand("set", { setname, setvalue = string.match(param, "([^ ]+) (.+)") if setname and setvalue then if not core.settings:get(setname) then - return false, "Failed. Use '/set -n ' to create a new setting." + return false, S("Failed. Use '/set -n ' " + .. "to create a new setting.") end core.settings:set(setname, setvalue) - return true, setname .. " = " .. setvalue + return true, S("@1 = @2", setname, setvalue) end setname = string.match(param, "([^ ]+)") if setname then setvalue = core.settings:get(setname) if not setvalue then - setvalue = "" + setvalue = S("") end - return true, setname .. " = " .. setvalue + return true, S("@1 = @2", setname, setvalue) end - return false, "Invalid parameters (see /help set)." + return false, S("Invalid parameters (see /help set).") end, }) @@ -568,26 +575,27 @@ local function emergeblocks_callback(pos, action, num_calls_remaining, ctx) if ctx.current_blocks == ctx.total_blocks then core.chat_send_player(ctx.requestor_name, - string.format("Finished emerging %d blocks in %.2fms.", - ctx.total_blocks, (os.clock() - ctx.start_time) * 1000)) + S("Finished emerging @1 blocks in @2ms.", + ctx.total_blocks, + string.format("%.2f", (os.clock() - ctx.start_time) * 1000))) end end local function emergeblocks_progress_update(ctx) if ctx.current_blocks ~= ctx.total_blocks then core.chat_send_player(ctx.requestor_name, - string.format("emergeblocks update: %d/%d blocks emerged (%.1f%%)", + S("emergeblocks update: @1/@2 blocks emerged (@3%)", ctx.current_blocks, ctx.total_blocks, - (ctx.current_blocks / ctx.total_blocks) * 100)) + string.format("%.1f", (ctx.current_blocks / ctx.total_blocks) * 100))) core.after(2, emergeblocks_progress_update, ctx) end end core.register_chatcommand("emergeblocks", { - params = "(here []) | ( )", - description = "Load (or, if nonexistent, generate) map blocks " - .. "contained in area pos1 to pos2 ( and must be in parentheses)", + params = S("(here []) | ( )"), + description = S("Load (or, if nonexistent, generate) map blocks contained in " + .. "area pos1 to pos2 ( and must be in parentheses)"), privs = {server=true}, func = function(name, param) local p1, p2 = parse_range_str(name, param) @@ -605,15 +613,15 @@ core.register_chatcommand("emergeblocks", { core.emerge_area(p1, p2, emergeblocks_callback, context) core.after(2, emergeblocks_progress_update, context) - return true, "Started emerge of area ranging from " .. - core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1) + return true, S("Started emerge of area ranging from @1 to @2.", + core.pos_to_string(p1, 1), core.pos_to_string(p2, 1)) end, }) core.register_chatcommand("deleteblocks", { - params = "(here []) | ( )", - description = "Delete map blocks contained in area pos1 to pos2 " - .. "( and must be in parentheses)", + params = S("(here []) | ( )"), + description = S("Delete map blocks contained in area pos1 to pos2 " + .. "( and must be in parentheses)"), privs = {server=true}, func = function(name, param) local p1, p2 = parse_range_str(name, param) @@ -622,18 +630,20 @@ core.register_chatcommand("deleteblocks", { end if core.delete_area(p1, p2) then - return true, "Successfully cleared area ranging from " .. - core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1) + return true, S("Successfully cleared area " + .. "ranging from @1 to @2.", + core.pos_to_string(p1, 1), core.pos_to_string(p2, 1)) else - return false, "Failed to clear one or more blocks in area" + return false, S("Failed to clear one or more " + .. "blocks in area.") end end, }) core.register_chatcommand("fixlight", { - params = "(here []) | ( )", - description = "Resets lighting in the area between pos1 and pos2 " - .. "( and must be in parentheses)", + params = S("(here []) | ( )"), + description = S("Resets lighting in the area between pos1 and pos2 " + .. "( and must be in parentheses)"), privs = {server = true}, func = function(name, param) local p1, p2 = parse_range_str(name, param) @@ -642,17 +652,18 @@ core.register_chatcommand("fixlight", { end if core.fix_light(p1, p2) then - return true, "Successfully reset light in the area ranging from " .. - core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1) + return true, S("Successfully reset light in the area " + .. "ranging from @1 to @2.", + core.pos_to_string(p1, 1), core.pos_to_string(p2, 1)) else - return false, "Failed to load one or more blocks in area" + return false, S("Failed to load one or more blocks in area.") end end, }) core.register_chatcommand("mods", { params = "", - description = "List mods installed on the server", + description = S("List mods installed on the server"), privs = {}, func = function(name, param) return true, table.concat(core.get_modnames(), ", ") @@ -664,117 +675,136 @@ local function handle_give_command(cmd, giver, receiver, stackstring) .. ', stackstring="' .. stackstring .. '"') local itemstack = ItemStack(stackstring) if itemstack:is_empty() then - return false, "Cannot give an empty item" + return false, S("Cannot give an empty item.") elseif (not itemstack:is_known()) or (itemstack:get_name() == "unknown") then - return false, "Cannot give an unknown item" + return false, S("Cannot give an unknown item.") -- Forbid giving 'ignore' due to unwanted side effects elseif itemstack:get_name() == "ignore" then - return false, "Giving 'ignore' is not allowed" + return false, S("Giving 'ignore' is not allowed.") end local receiverref = core.get_player_by_name(receiver) if receiverref == nil then - return false, receiver .. " is not a known player" + return false, S("@1 is not a known player.", receiver) end local leftover = receiverref:get_inventory():add_item("main", itemstack) local partiality if leftover:is_empty() then - partiality = "" + partiality = nil elseif leftover:get_count() == itemstack:get_count() then - partiality = "could not be " + partiality = false else - partiality = "partially " + partiality = true end -- The actual item stack string may be different from what the "giver" -- entered (e.g. big numbers are always interpreted as 2^16-1). stackstring = itemstack:to_string() - if giver == receiver then - local msg = "%q %sadded to inventory." - return true, msg:format(stackstring, partiality) + local msg + if partiality == true then + msg = S("@1 partially added to inventory.", stackstring) + elseif partiality == false then + msg = S("@1 could not be added to inventory.", stackstring) else - core.chat_send_player(receiver, ("%q %sadded to inventory.") - :format(stackstring, partiality)) - local msg = "%q %sadded to %s's inventory." - return true, msg:format(stackstring, partiality, receiver) + msg = S("@1 added to inventory.", stackstring) + end + if giver == receiver then + return true, msg + else + core.chat_send_player(receiver, msg) + local msg_other + if partiality == true then + msg_other = S("@1 partially added to inventory of @2.", + stackstring, receiver) + elseif partiality == false then + msg_other = S("@1 could not be added to inventory of @2.", + stackstring, receiver) + else + msg_other = S("@1 added to inventory of @2.", + stackstring, receiver) + end + return true, msg_other end end core.register_chatcommand("give", { - params = " [ []]", - description = "Give item to player", + params = S(" [ []]"), + description = S("Give item to player"), privs = {give=true}, func = function(name, param) local toname, itemstring = string.match(param, "^([^ ]+) +(.+)$") if not toname or not itemstring then - return false, "Name and ItemString required" + return false, S("Name and ItemString required.") end return handle_give_command("/give", name, toname, itemstring) end, }) core.register_chatcommand("giveme", { - params = " [ []]", - description = "Give item to yourself", + params = S(" [ []]"), + description = S("Give item to yourself"), privs = {give=true}, func = function(name, param) local itemstring = string.match(param, "(.+)$") if not itemstring then - return false, "ItemString required" + return false, S("ItemString required.") end return handle_give_command("/giveme", name, name, itemstring) end, }) core.register_chatcommand("spawnentity", { - params = " [,,]", - description = "Spawn entity at given (or your) position", + params = S(" [,,]"), + description = S("Spawn entity at given (or your) position"), privs = {give=true, interact=true}, func = function(name, param) local entityname, p = string.match(param, "^([^ ]+) *(.*)$") if not entityname then - return false, "EntityName required" + return false, S("EntityName required.") end core.log("action", ("%s invokes /spawnentity, entityname=%q") :format(name, entityname)) local player = core.get_player_by_name(name) if player == nil then core.log("error", "Unable to spawn entity, player is nil") - return false, "Unable to spawn entity, player is nil" + return false, S("Unable to spawn entity, player is nil.") end if not core.registered_entities[entityname] then - return false, "Cannot spawn an unknown entity" + return false, S("Cannot spawn an unknown entity.") end if p == "" then p = player:get_pos() else p = core.string_to_pos(p) if p == nil then - return false, "Invalid parameters ('" .. param .. "')" + return false, S("Invalid parameters (@1).", param) end end p.y = p.y + 1 local obj = core.add_entity(p, entityname) - local msg = obj and "%q spawned." or "%q failed to spawn." - return true, msg:format(entityname) + if obj then + return true, S("@1 spawned.", entityname) + else + return true, S("@1 failed to spawn.", entityname) + end end, }) core.register_chatcommand("pulverize", { params = "", - description = "Destroy item in hand", + description = S("Destroy item in hand"), func = function(name, param) local player = core.get_player_by_name(name) if not player then core.log("error", "Unable to pulverize, no player.") - return false, "Unable to pulverize, no player." + return false, S("Unable to pulverize, no player.") end local wielded_item = player:get_wielded_item() if wielded_item:is_empty() then - return false, "Unable to pulverize, no item in hand." + return false, S("Unable to pulverize, no item in hand.") end core.log("action", name .. " pulverized \"" .. wielded_item:get_name() .. " " .. wielded_item:get_count() .. "\"") player:set_wielded_item(nil) - return true, "An item was pulverized." + return true, S("An item was pulverized.") end, }) @@ -790,14 +820,15 @@ core.register_on_punchnode(function(pos, node, puncher) end) core.register_chatcommand("rollback_check", { - params = "[] [] []", - description = "Check who last touched a node or a node near it" - .. " within the time specified by . Default: range = 0," - .. " seconds = 86400 = 24h, limit = 5. Set to inf for no time limit", + params = S("[] [] []"), + description = S("Check who last touched a node or a node near it " + .. "within the time specified by . " + .. "Default: range = 0, seconds = 86400 = 24h, limit = 5. " + .. "Set to inf for no time limit"), privs = {rollback=true}, func = function(name, param) if not core.settings:get_bool("enable_rollback_recording") then - return false, "Rollback functions are disabled." + return false, S("Rollback functions are disabled.") end local range, seconds, limit = param:match("(%d+) *(%d*) *(%d*)") @@ -805,30 +836,30 @@ core.register_chatcommand("rollback_check", { seconds = tonumber(seconds) or 86400 limit = tonumber(limit) or 5 if limit > 100 then - return false, "That limit is too high!" + return false, S("That limit is too high!") end core.rollback_punch_callbacks[name] = function(pos, node, puncher) local name = puncher:get_player_name() - core.chat_send_player(name, "Checking " .. core.pos_to_string(pos) .. "...") + core.chat_send_player(name, S("Checking @1 ...", core.pos_to_string(pos))) local actions = core.rollback_get_node_actions(pos, range, seconds, limit) if not actions then - core.chat_send_player(name, "Rollback functions are disabled") + core.chat_send_player(name, S("Rollback functions are disabled.")) return end local num_actions = #actions if num_actions == 0 then - core.chat_send_player(name, "Nobody has touched" - .. " the specified location in " - .. seconds .. " seconds") + core.chat_send_player(name, + S("Nobody has touched the specified " + .. "location in @1 seconds.", + seconds)) return end local time = os.time() for i = num_actions, 1, -1 do local action = actions[i] core.chat_send_player(name, - ("%s %s %s -> %s %d seconds ago.") - :format( + S("@1 @2 @3 -> @4 @5 seconds ago.", core.pos_to_string(action.pos), action.actor, action.oldnode.name, @@ -837,110 +868,123 @@ core.register_chatcommand("rollback_check", { end end - return true, "Punch a node (range=" .. range .. ", seconds=" - .. seconds .. "s, limit=" .. limit .. ")" + return true, S("Punch a node (range=@1, seconds=@2, limit=@3).", + range, seconds, limit) end, }) core.register_chatcommand("rollback", { - params = "( []) | (: [])", - description = "Revert actions of a player. Default for is 60. Set to inf for no time limit", + params = S("( []) | (: [])"), + description = S("Revert actions of a player. " + .. "Default for is 60. " + .. "Set to inf for no time limit"), privs = {rollback=true}, func = function(name, param) if not core.settings:get_bool("enable_rollback_recording") then - return false, "Rollback functions are disabled." + return false, S("Rollback functions are disabled.") end local target_name, seconds = string.match(param, ":([^ ]+) *(%d*)") + local rev_msg if not target_name then local player_name player_name, seconds = string.match(param, "([^ ]+) *(%d*)") if not player_name then - return false, "Invalid parameters. See /help rollback" - .. " and /help rollback_check." + return false, S("Invalid parameters. " + .. "See /help rollback and " + .. "/help rollback_check.") end + seconds = tonumber(seconds) or 60 target_name = "player:"..player_name + rev_msg = S("Reverting actions of player '@1' since @2 seconds.", + player_name, seconds) + else + seconds = tonumber(seconds) or 60 + rev_msg = S("Reverting actions of @1 since @2 seconds.", + target_name, seconds) end - seconds = tonumber(seconds) or 60 - core.chat_send_player(name, "Reverting actions of " - .. target_name .. " since " - .. seconds .. " seconds.") + core.chat_send_player(name, rev_msg) local success, log = core.rollback_revert_actions_by( target_name, seconds) local response = "" if #log > 100 then - response = "(log is too long to show)\n" + response = S("(log is too long to show)").."\n" else for _, line in pairs(log) do response = response .. line .. "\n" end end - response = response .. "Reverting actions " - .. (success and "succeeded." or "FAILED.") + if success then + response = response .. S("Reverting actions succeeded.") + else + response = response .. S("Reverting actions FAILED.") + end return success, response end, }) core.register_chatcommand("status", { - description = "Show server status", + description = S("Show server status"), func = function(name, param) local status = core.get_server_status(name, false) if status and status ~= "" then return true, status end - return false, "This command was disabled by a mod or game" + return false, S("This command was disabled by a mod or game.") end, }) core.register_chatcommand("time", { - params = "[<0..23>:<0..59> | <0..24000>]", - description = "Show or set time of day", + params = S("[<0..23>:<0..59> | <0..24000>]"), + description = S("Show or set time of day"), privs = {}, func = function(name, param) if param == "" then local current_time = math.floor(core.get_timeofday() * 1440) local minutes = current_time % 60 local hour = (current_time - minutes) / 60 - return true, ("Current time is %d:%02d"):format(hour, minutes) + return true, S("Current time is @1:@2.", + string.format("%d", hour), + string.format("%02d", minutes)) end local player_privs = core.get_player_privs(name) if not player_privs.settime then - return false, "You don't have permission to run this command " .. - "(missing privilege: settime)." + return false, S("You don't have permission to run " + .. "this command (missing privilege: @1).", "settime") end local hour, minute = param:match("^(%d+):(%d+)$") if not hour then local new_time = tonumber(param) if not new_time then - return false, "Invalid time." + return false, S("Invalid time.") end -- Backward compatibility. core.set_timeofday((new_time % 24000) / 24000) core.log("action", name .. " sets time to " .. new_time) - return true, "Time of day changed." + return true, S("Time of day changed.") end hour = tonumber(hour) minute = tonumber(minute) if hour < 0 or hour > 23 then - return false, "Invalid hour (must be between 0 and 23 inclusive)." + return false, S("Invalid hour (must be between 0 and 23 inclusive).") elseif minute < 0 or minute > 59 then - return false, "Invalid minute (must be between 0 and 59 inclusive)." + return false, S("Invalid minute (must be between 0 and 59 inclusive).") end core.set_timeofday((hour * 60 + minute) / 1440) core.log("action", ("%s sets time to %d:%02d"):format(name, hour, minute)) - return true, "Time of day changed." + return true, S("Time of day changed.") end, }) core.register_chatcommand("days", { - description = "Show day count since world creation", + description = S("Show day count since world creation"), func = function(name, param) - return true, "Current day is " .. core.get_day_count() + return true, S("Current day is @1.", core.get_day_count()) end }) core.register_chatcommand("shutdown", { - params = "[ | -1] [reconnect] []", - description = "Shutdown server (-1 cancels a delayed shutdown)", + params = S("[ | -1] [reconnect] []"), + description = S("Shutdown server (-1 cancels a delayed shutdown)"), privs = {server=true}, func = function(name, param) local delay, reconnect, message @@ -953,7 +997,7 @@ core.register_chatcommand("shutdown", { if delay == 0 then core.log("action", name .. " shuts down server") - core.chat_send_all("*** Server shutting down (operator request).") + core.chat_send_all("*** "..S("Server shutting down (operator request).")) end core.request_shutdown(message:trim(), core.is_yes(reconnect), delay) return true @@ -961,65 +1005,65 @@ core.register_chatcommand("shutdown", { }) core.register_chatcommand("ban", { - params = "[]", - description = "Ban the IP of a player or show the ban list", + params = S("[]"), + description = S("Ban the IP of a player or show the ban list"), privs = {ban=true}, func = function(name, param) if param == "" then local ban_list = core.get_ban_list() if ban_list == "" then - return true, "The ban list is empty." + return true, S("The ban list is empty.") else - return true, "Ban list: " .. ban_list + return true, S("Ban list: @1", ban_list) end end if not core.get_player_by_name(param) then - return false, "Player is not online." + return false, S("Player is not online.") end if not core.ban_player(param) then - return false, "Failed to ban player." + return false, S("Failed to ban player.") end local desc = core.get_ban_description(param) core.log("action", name .. " bans " .. desc .. ".") - return true, "Banned " .. desc .. "." + return true, S("Banned @1.", desc) end, }) core.register_chatcommand("unban", { - params = " | ", - description = "Remove IP ban belonging to a player/IP", + params = S(" | "), + description = S("Remove IP ban belonging to a player/IP"), privs = {ban=true}, func = function(name, param) if not core.unban_player_or_ip(param) then - return false, "Failed to unban player/IP." + return false, S("Failed to unban player/IP.") end core.log("action", name .. " unbans " .. param) - return true, "Unbanned " .. param + return true, S("Unbanned @1.", param) end, }) core.register_chatcommand("kick", { - params = " []", - description = "Kick a player", + params = S(" []"), + description = S("Kick a player"), privs = {kick=true}, func = function(name, param) local tokick, reason = param:match("([^ ]+) (.+)") tokick = tokick or param if not core.kick_player(tokick, reason) then - return false, "Failed to kick player " .. tokick + return false, S("Failed to kick player @1.", tokick) end local log_reason = "" if reason then log_reason = " with reason \"" .. reason .. "\"" end core.log("action", name .. " kicks " .. tokick .. log_reason) - return true, "Kicked " .. tokick + return true, S("Kicked @1.", tokick) end, }) core.register_chatcommand("clearobjects", { - params = "[full | quick]", - description = "Clear all objects in world", + params = S("[full | quick]"), + description = S("Clear all objects in world"), privs = {server=true}, func = function(name, param) local options = {} @@ -1028,45 +1072,42 @@ core.register_chatcommand("clearobjects", { elseif param == "full" then options.mode = "full" else - return false, "Invalid usage, see /help clearobjects." + return false, S("Invalid usage, see /help clearobjects.") end core.log("action", name .. " clears all objects (" .. options.mode .. " mode).") - core.chat_send_all("Clearing all objects. This may take a long time." - .. " You may experience a timeout. (by " - .. name .. ")") + core.chat_send_all(S("Clearing all objects. This may take a long time. " + .. "You may experience a timeout. (by @1)", name)) core.clear_objects(options) core.log("action", "Object clearing done.") - core.chat_send_all("*** Cleared all objects.") + core.chat_send_all("*** "..S("Cleared all objects.")) return true end, }) core.register_chatcommand("msg", { - params = " ", - description = "Send a direct message to a player", + params = S(" "), + description = S("Send a direct message to a player"), privs = {shout=true}, func = function(name, param) local sendto, message = param:match("^(%S+)%s(.+)$") if not sendto then - return false, "Invalid usage, see /help msg." + return false, S("Invalid usage, see /help msg.") end if not core.get_player_by_name(sendto) then - return false, "The player " .. sendto - .. " is not online." + return false, S("The player @1 is not online.", sendto) end core.log("action", "DM from " .. name .. " to " .. sendto .. ": " .. message) - core.chat_send_player(sendto, "DM from " .. name .. ": " - .. message) - return true, "Message sent." + core.chat_send_player(sendto, S("DM from @1: @2", name, message)) + return true, S("Message sent.") end, }) core.register_chatcommand("last-login", { - params = "[]", - description = "Get the last login time of a player or yourself", + params = S("[]"), + description = S("Get the last login time of a player or yourself"), func = function(name, param) if param == "" then param = name @@ -1074,25 +1115,27 @@ core.register_chatcommand("last-login", { local pauth = core.get_auth_handler().get_auth(param) if pauth and pauth.last_login and pauth.last_login ~= -1 then -- Time in UTC, ISO 8601 format - return true, param.."'s last login time was " .. - os.date("!%Y-%m-%dT%H:%M:%SZ", pauth.last_login) + return true, S("@1's last login time was @2.", + param, + os.date("!%Y-%m-%dT%H:%M:%SZ", pauth.last_login)) end - return false, param.."'s last login time is unknown" + return false, S("@1's last login time is unknown.", param) end, }) core.register_chatcommand("clearinv", { - params = "[]", - description = "Clear the inventory of yourself or another player", + params = S("[]"), + description = S("Clear the inventory of yourself or another player"), func = function(name, param) local player if param and param ~= "" and param ~= name then if not core.check_player_privs(name, {server=true}) then - return false, "You don't have permission" - .. " to clear another player's inventory (missing privilege: server)" + return false, S("You don't have permission to " + .. "clear another player's inventory " + .. "(missing privilege: @1).", "server") end player = core.get_player_by_name(param) - core.chat_send_player(param, name.." cleared your inventory.") + core.chat_send_player(param, S("@1 cleared your inventory.", name)) else player = core.get_player_by_name(name) end @@ -1102,25 +1145,25 @@ core.register_chatcommand("clearinv", { player:get_inventory():set_list("craft", {}) player:get_inventory():set_list("craftpreview", {}) core.log("action", name.." clears "..player:get_player_name().."'s inventory") - return true, "Cleared "..player:get_player_name().."'s inventory." + return true, S("Cleared @1's inventory.", player:get_player_name()) else - return false, "Player must be online to clear inventory!" + return false, S("Player must be online to clear inventory!") end end, }) local function handle_kill_command(killer, victim) if core.settings:get_bool("enable_damage") == false then - return false, "Players can't be killed, damage has been disabled." + return false, S("Players can't be killed, damage has been disabled.") end local victimref = core.get_player_by_name(victim) if victimref == nil then - return false, string.format("Player %s is not online.", victim) + return false, S("Player @1 is not online.", victim) elseif victimref:get_hp() <= 0 then if killer == victim then - return false, "You are already dead." + return false, S("You are already dead.") else - return false, string.format("%s is already dead.", victim) + return false, S("@1 is already dead.", victim) end end if not killer == victim then @@ -1128,12 +1171,12 @@ local function handle_kill_command(killer, victim) end -- Kill victim victimref:set_hp(0) - return true, string.format("%s has been killed.", victim) + return true, S("@1 has been killed.", victim) end core.register_chatcommand("kill", { - params = "[]", - description = "Kill player or yourself", + params = S("[]"), + description = S("Kill player or yourself"), privs = {server=true}, func = function(name, param) return handle_kill_command(name, param == "" and name or param) diff --git a/builtin/game/privileges.lua b/builtin/game/privileges.lua index c7417d2f4..aee32a34e 100644 --- a/builtin/game/privileges.lua +++ b/builtin/game/privileges.lua @@ -1,5 +1,7 @@ -- Minetest: builtin/privileges.lua +local S = core.get_translator("__builtin") + -- -- Privileges -- @@ -15,7 +17,7 @@ function core.register_privilege(name, param) def.give_to_admin = def.give_to_singleplayer end if def.description == nil then - def.description = "(no description)" + def.description = S("(no description)") end end local def @@ -28,69 +30,69 @@ function core.register_privilege(name, param) core.registered_privileges[name] = def end -core.register_privilege("interact", "Can interact with things and modify the world") -core.register_privilege("shout", "Can speak in chat") -core.register_privilege("basic_privs", "Can modify 'shout' and 'interact' privileges") -core.register_privilege("privs", "Can modify privileges") +core.register_privilege("interact", S("Can interact with things and modify the world")) +core.register_privilege("shout", S("Can speak in chat")) +core.register_privilege("basic_privs", S("Can modify 'shout' and 'interact' privileges")) +core.register_privilege("privs", S("Can modify privileges")) core.register_privilege("teleport", { - description = "Can teleport self", + description = S("Can teleport self"), give_to_singleplayer = false, }) core.register_privilege("bring", { - description = "Can teleport other players", + description = S("Can teleport other players"), give_to_singleplayer = false, }) core.register_privilege("settime", { - description = "Can set the time of day using /time", + description = S("Can set the time of day using /time"), give_to_singleplayer = false, }) core.register_privilege("server", { - description = "Can do server maintenance stuff", + description = S("Can do server maintenance stuff"), give_to_singleplayer = false, give_to_admin = true, }) core.register_privilege("protection_bypass", { - description = "Can bypass node protection in the world", + description = S("Can bypass node protection in the world"), give_to_singleplayer = false, }) core.register_privilege("ban", { - description = "Can ban and unban players", + description = S("Can ban and unban players"), give_to_singleplayer = false, give_to_admin = true, }) core.register_privilege("kick", { - description = "Can kick players", + description = S("Can kick players"), give_to_singleplayer = false, give_to_admin = true, }) core.register_privilege("give", { - description = "Can use /give and /giveme", + description = S("Can use /give and /giveme"), give_to_singleplayer = false, }) core.register_privilege("password", { - description = "Can use /setpassword and /clearpassword", + description = S("Can use /setpassword and /clearpassword"), give_to_singleplayer = false, give_to_admin = true, }) core.register_privilege("fly", { - description = "Can use fly mode", + description = S("Can use fly mode"), give_to_singleplayer = false, }) core.register_privilege("fast", { - description = "Can use fast mode", + description = S("Can use fast mode"), give_to_singleplayer = false, }) core.register_privilege("noclip", { - description = "Can fly through solid nodes using noclip mode", + description = S("Can fly through solid nodes using noclip mode"), give_to_singleplayer = false, }) core.register_privilege("rollback", { - description = "Can use the rollback functionality", + description = S("Can use the rollback functionality"), give_to_singleplayer = false, }) core.register_privilege("debug", { - description = "Allows enabling various debug options that may affect gameplay", + description = S("Allows enabling various debug options that may affect gameplay"), give_to_singleplayer = false, give_to_admin = true, }) diff --git a/builtin/game/register.lua b/builtin/game/register.lua index 1cff85813..e01c50335 100644 --- a/builtin/game/register.lua +++ b/builtin/game/register.lua @@ -1,5 +1,7 @@ -- Minetest: builtin/misc_register.lua +local S = core.get_translator("__builtin") + -- -- Make raw registration functions inaccessible to anyone except this file -- @@ -326,7 +328,7 @@ end core.register_item(":unknown", { type = "none", - description = "Unknown Item", + description = S("Unknown Item"), inventory_image = "unknown_item.png", on_place = core.item_place, on_secondary_use = core.item_secondary_use, @@ -336,7 +338,7 @@ core.register_item(":unknown", { }) core.register_node(":air", { - description = "Air", + description = S("Air"), inventory_image = "air.png", wield_image = "air.png", drawtype = "airlike", @@ -353,7 +355,7 @@ core.register_node(":air", { }) core.register_node(":ignore", { - description = "Ignore", + description = S("Ignore"), inventory_image = "ignore.png", wield_image = "ignore.png", drawtype = "airlike", @@ -370,7 +372,7 @@ core.register_node(":ignore", { core.chat_send_player( placer:get_player_name(), core.colorize("#FF0000", - "You can't place 'ignore' nodes!")) + S("You can't place 'ignore' nodes!"))) return "" end, }) diff --git a/builtin/locale/template.txt b/builtin/locale/template.txt new file mode 100644 index 000000000..c5ace1a2f --- /dev/null +++ b/builtin/locale/template.txt @@ -0,0 +1,224 @@ +# textdomain: __builtin +Empty command.= +Invalid command: @1= +Invalid command usage.= +You don't have permission to run this command (missing privileges: @1).= +Unable to get position of player @1.= +Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)= += +Show chat action (e.g., '/me orders a pizza' displays ' orders a pizza')= +Show the name of the server owner= +The administrator of this server is @1.= +There's no administrator named in the config file.= +[]= +Show privileges of yourself or another player= +Player @1 does not exist.= +Privileges of @1: @2= += +Return list of all online players with privilege= +Invalid parameters (see /help haspriv).= +Unknown privilege!= +Players online with the "@1" privilege: @2= +Your privileges are insufficient.= +Unknown privilege: @1= +@1 granted you privileges: @2= + ( | all)= +Give privileges to player= +Invalid parameters (see /help grant).= + | all= +Grant privileges to yourself= +Invalid parameters (see /help grantme).= +@1 revoked privileges from you: @2= +Remove privileges from player= +Invalid parameters (see /help revoke).= +Revoke privileges from yourself= +Invalid parameters (see /help revokeme).= + = +Set player's password= +Name field required.= +Your password was cleared by @1.= +Password of player "@1" cleared.= +Your password was set by @1.= +Password of player "@1" set.= += +Set empty password for a player= +Reload authentication data= +Done.= +Failed.= +Remove a player's data= +Player "@1" removed.= +No such player "@1" to remove.= +Player "@1" is connected, cannot remove.= +Unhandled remove_player return code @1.= +Cannot teleport out of map bounds!= +Cannot get player with name @1.= +Cannot teleport, @1 is attached to an object!= +Teleporting @1 to @2.= +One does not teleport to oneself.= +Cannot get teleportee with name @1.= +Cannot get target player with name @1.= +Teleporting @1 to @2 at @3.= +,, | | ,, | = +Teleport to position or player= +You don't have permission to teleport other players (missing privilege: @1).= +([-n] ) | = +Set or read server configuration setting= +Failed. Use '/set -n ' to create a new setting.= +@1 @= @2= += +Invalid parameters (see /help set).= +Finished emerging @1 blocks in @2ms.= +emergeblocks update: @1/@2 blocks emerged (@3%)= +(here []) | ( )= +Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 ( and must be in parentheses)= +Started emerge of area ranging from @1 to @2.= +Delete map blocks contained in area pos1 to pos2 ( and must be in parentheses)= +Successfully cleared area ranging from @1 to @2.= +Failed to clear one or more blocks in area.= +Resets lighting in the area between pos1 and pos2 ( and must be in parentheses)= +Successfully reset light in the area ranging from @1 to @2.= +Failed to load one or more blocks in area.= +List mods installed on the server= +Cannot give an empty item.= +Cannot give an unknown item.= +Giving 'ignore' is not allowed.= +@1 is not a known player.= +@1 partially added to inventory.= +@1 could not be added to inventory.= +@1 added to inventory.= +@1 partially added to inventory of @2.= +@1 could not be added to inventory of @2.= +@1 added to inventory of @2.= + [ []]= +Give item to player= +Name and ItemString required.= + [ []]= +Give item to yourself= +ItemString required.= + [,,]= +Spawn entity at given (or your) position= +EntityName required.= +Unable to spawn entity, player is nil.= +Cannot spawn an unknown entity.= +Invalid parameters (@1).= +@1 spawned.= +@1 failed to spawn.= +Destroy item in hand= +Unable to pulverize, no player.= +Unable to pulverize, no item in hand.= +An item was pulverized.= +[] [] []= +Check who last touched a node or a node near it within the time specified by . Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set to inf for no time limit= +Rollback functions are disabled.= +That limit is too high!= +Checking @1 ...= +Nobody has touched the specified location in @1 seconds.= +@1 @2 @3 -> @4 @5 seconds ago.= +Punch a node (range@=@1, seconds@=@2, limit@=@3).= +( []) | (: [])= +Revert actions of a player. Default for is 60. Set to inf for no time limit= +Invalid parameters. See /help rollback and /help rollback_check.= +Reverting actions of player '@1' since @2 seconds.= +Reverting actions of @1 since @2 seconds.= +(log is too long to show)= +Reverting actions succeeded.= +Reverting actions FAILED.= +Show server status= +This command was disabled by a mod or game.= +[<0..23>:<0..59> | <0..24000>]= +Show or set time of day= +Current time is @1:@2.= +You don't have permission to run this command (missing privilege: @1).= +Invalid time.= +Time of day changed.= +Invalid hour (must be between 0 and 23 inclusive).= +Invalid minute (must be between 0 and 59 inclusive).= +Show day count since world creation= +Current day is @1.= +[ | -1] [reconnect] []= +Shutdown server (-1 cancels a delayed shutdown)= +Server shutting down (operator request).= +Ban the IP of a player or show the ban list= +The ban list is empty.= +Ban list: @1= +Player is not online.= +Failed to ban player.= +Banned @1.= + | = +Remove IP ban belonging to a player/IP= +Failed to unban player/IP.= +Unbanned @1.= + []= +Kick a player= +Failed to kick player @1.= +Kicked @1.= +[full | quick]= +Clear all objects in world= +Invalid usage, see /help clearobjects.= +Clearing all objects. This may take a long time. You may experience a timeout. (by @1)= +Cleared all objects.= + = +Send a direct message to a player= +Invalid usage, see /help msg.= +The player @1 is not online.= +DM from @1: @2= +Message sent.= +Get the last login time of a player or yourself= +@1's last login time was @2.= +@1's last login time is unknown.= +Clear the inventory of yourself or another player= +You don't have permission to clear another player's inventory (missing privilege: @1).= +@1 cleared your inventory.= +Cleared @1's inventory.= +Player must be online to clear inventory!= +Players can't be killed, damage has been disabled.= +Player @1 is not online.= +You are already dead.= +@1 is already dead.= +@1 has been killed.= +Kill player or yourself= +Available commands: @1= +Use '/help ' to get more information, or '/help all' to list everything.= +Available commands:= +Command not available: @1= +[all | privs | ]= +Get help for commands or list privileges= +Available privileges:= +Command= +Parameters= +For more information, click on any entry in the list.= +Double-click to copy the entry to the chat history.= +Command: @1 @2= +Available commands: (see also: /help )= +Close= +Privilege= +Description= +print [] | dump [] | save [ []] | reset= +Handle the profiler and profiling data= +Statistics written to action log.= +Statistics were reset.= +Usage: @1= +Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).= +(no description)= +Can interact with things and modify the world= +Can speak in chat= +Can modify 'shout' and 'interact' privileges= +Can modify privileges= +Can teleport self= +Can teleport other players= +Can set the time of day using /time= +Can do server maintenance stuff= +Can bypass node protection in the world= +Can ban and unban players= +Can kick players= +Can use /give and /giveme= +Can use /setpassword and /clearpassword= +Can use fly mode= +Can use fast mode= +Can fly through solid nodes using noclip mode= +Can use the rollback functionality= +Allows enabling various debug options that may affect gameplay= +Unknown Item= +Air= +Ignore= +You can't place 'ignore' nodes!= diff --git a/builtin/profiler/init.lua b/builtin/profiler/init.lua index a0033d752..7f63dfaea 100644 --- a/builtin/profiler/init.lua +++ b/builtin/profiler/init.lua @@ -15,6 +15,8 @@ --with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +local S = core.get_translator("__builtin") + local function get_bool_default(name, default) local val = core.settings:get_bool(name) if val == nil then @@ -40,9 +42,9 @@ function profiler.init_chatcommand() instrumentation.init_chatcommand() end - local param_usage = "print [filter] | dump [filter] | save [format [filter]] | reset" + local param_usage = S("print [] | dump [] | save [ []] | reset") core.register_chatcommand("profiler", { - description = "handle the profiler and profiling data", + description = S("Handle the profiler and profiling data"), params = param_usage, privs = { server=true }, func = function(name, param) @@ -51,21 +53,19 @@ function profiler.init_chatcommand() if command == "dump" then core.log("action", reporter.print(sampler.profile, arg0)) - return true, "Statistics written to action log" + return true, S("Statistics written to action log.") elseif command == "print" then return true, reporter.print(sampler.profile, arg0) elseif command == "save" then return reporter.save(sampler.profile, args[1] or "txt", args[2]) elseif command == "reset" then sampler.reset() - return true, "Statistics were reset" + return true, S("Statistics were reset.") end - return false, string.format( - "Usage: %s\n" .. - "Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).", - param_usage - ) + return false, + S("Usage: @1", param_usage) .. "\n" .. + S("Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).") end }) diff --git a/src/server.cpp b/src/server.cpp index 81cdd1f8d..a8d452783 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2496,7 +2496,9 @@ void Server::fillMediaCache() // Collect all media file paths std::vector paths; - // The paths are ordered in descending priority + + // ordered in descending priority + paths.push_back(getBuiltinLuaPath() + DIR_DELIM + "locale"); fs::GetRecursiveDirs(paths, porting::path_user + DIR_DELIM + "textures" + DIR_DELIM + "server"); fs::GetRecursiveDirs(paths, m_gamespec.path + DIR_DELIM + "textures"); m_modmgr->getModsMediaPaths(paths); diff --git a/util/updatepo.sh b/util/updatepo.sh index 168483bd4..95acb01ea 100755 --- a/util/updatepo.sh +++ b/util/updatepo.sh @@ -58,6 +58,7 @@ xgettext --package-name=minetest \ --keyword=fgettext_ne \ --keyword=strgettext \ --keyword=wstrgettext \ + --keyword=core.gettext \ --keyword=showTranslatedStatusText \ --output $potfile \ --from-code=utf-8 \ From abb0c99a6c5ab38637d1370449ec072c7caa8803 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Fri, 5 Mar 2021 18:28:08 +0300 Subject: [PATCH 072/110] Pause animations while game is paused (#10658) Pauses all mesh animations while game is paused. --- src/client/game.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/client/game.cpp b/src/client/game.cpp index 15fa2af23..60ecb7d3e 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -68,6 +68,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/pointedthing.h" #include "util/quicktune_shortcutter.h" #include "irrlicht_changes/static_text.h" +#include "irr_ptr.h" #include "version.h" #include "script/scripting_client.h" #include "hud.h" @@ -647,6 +648,8 @@ struct ClientEventHandler THE GAME ****************************************************************************/ +using PausedNodesList = std::vector, float>>; + /* This is not intended to be a public class. If a public class becomes * desirable then it may be better to create another 'wrapper' class that * hides most of the stuff in this class (nothing in this class is required @@ -796,6 +799,9 @@ private: void showDeathFormspec(); void showPauseMenu(); + void pauseAnimation(); + void resumeAnimation(); + // ClientEvent handlers void handleClientEvent_None(ClientEvent *event, CameraOrientation *cam); void handleClientEvent_PlayerDamage(ClientEvent *event, CameraOrientation *cam); @@ -873,6 +879,7 @@ private: std::string *error_message; bool *reconnect_requested; scene::ISceneNode *skybox; + PausedNodesList paused_animated_nodes; bool simple_singleplayer_mode; /* End 'cache' */ @@ -2484,6 +2491,9 @@ inline void Game::step(f32 *dtime) if (can_be_and_is_paused) { // This is for a singleplayer server *dtime = 0; // No time passes } else { + if (simple_singleplayer_mode && !paused_animated_nodes.empty()) + resumeAnimation(); + if (server) server->step(*dtime); @@ -2491,6 +2501,33 @@ inline void Game::step(f32 *dtime) } } +static void pauseNodeAnimation(PausedNodesList &paused, scene::ISceneNode *node) { + if (!node) + return; + for (auto &&child: node->getChildren()) + pauseNodeAnimation(paused, child); + if (node->getType() != scene::ESNT_ANIMATED_MESH) + return; + auto animated_node = static_cast(node); + float speed = animated_node->getAnimationSpeed(); + if (!speed) + return; + paused.push_back({grab(animated_node), speed}); + animated_node->setAnimationSpeed(0.0f); +} + +void Game::pauseAnimation() +{ + pauseNodeAnimation(paused_animated_nodes, smgr->getRootSceneNode()); +} + +void Game::resumeAnimation() +{ + for (auto &&pair: paused_animated_nodes) + pair.first->setAnimationSpeed(pair.second); + paused_animated_nodes.clear(); +} + const ClientEventHandler Game::clientEventHandler[CLIENTEVENT_MAX] = { {&Game::handleClientEvent_None}, {&Game::handleClientEvent_PlayerDamage}, @@ -4230,6 +4267,9 @@ void Game::showPauseMenu() fs_src, txt_dst, client->getFormspecPrepend(), sound); formspec->setFocus("btn_continue"); formspec->doPause = true; + + if (simple_singleplayer_mode) + pauseAnimation(); } /****************************************************************************/ From 1c7b69f9cf40a1395e851b1874ecad31e0e4147a Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 6 Mar 2021 14:11:45 +0100 Subject: [PATCH 073/110] Fix function override warnings in mg_ore.h --- src/mapgen/mg_ore.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/mapgen/mg_ore.h b/src/mapgen/mg_ore.h index a58fa9bfe..a757fa6d0 100644 --- a/src/mapgen/mg_ore.h +++ b/src/mapgen/mg_ore.h @@ -85,7 +85,7 @@ class OreScatter : public Ore { public: OreScatter() : Ore(false) {} - ObjDef *clone() const; + ObjDef *clone() const override; void generate(MMVManip *vm, int mapseed, u32 blockseed, v3s16 nmin, v3s16 nmax, biome_t *biomemap) override; @@ -95,7 +95,7 @@ class OreSheet : public Ore { public: OreSheet() : Ore(true) {} - ObjDef *clone() const; + ObjDef *clone() const override; u16 column_height_min; u16 column_height_max; @@ -107,7 +107,7 @@ public: class OrePuff : public Ore { public: - ObjDef *clone() const; + ObjDef *clone() const override; NoiseParams np_puff_top; NoiseParams np_puff_bottom; @@ -123,7 +123,7 @@ public: class OreBlob : public Ore { public: - ObjDef *clone() const; + ObjDef *clone() const override; OreBlob() : Ore(true) {} void generate(MMVManip *vm, int mapseed, u32 blockseed, @@ -132,7 +132,7 @@ public: class OreVein : public Ore { public: - ObjDef *clone() const; + ObjDef *clone() const override; float random_factor; Noise *noise2 = nullptr; @@ -147,7 +147,7 @@ public: class OreStratum : public Ore { public: - ObjDef *clone() const; + ObjDef *clone() const override; NoiseParams np_stratum_thickness; Noise *noise_stratum_thickness = nullptr; From dd228fd92ef3a06aa8c6ce89bb304110a9587c38 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 5 Mar 2021 17:40:27 +0100 Subject: [PATCH 074/110] buildbot: Drop i586-mingw32msvc, add i686-w64-mingw32-posix detection --- util/buildbot/buildwin32.sh | 6 ++++-- ...vc.cmake => toolchain_i686-w64-mingw32-posix.cmake} | 10 ++++++---- ...-mingw32.cmake => toolchain_i686-w64-mingw32.cmake} | 0 3 files changed, 10 insertions(+), 6 deletions(-) rename util/buildbot/{toolchain_i586-mingw32msvc.cmake => toolchain_i686-w64-mingw32-posix.cmake} (58%) rename util/buildbot/{toolchain_i646-w64-mingw32.cmake => toolchain_i686-w64-mingw32.cmake} (100%) diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh index e62d32969..a296d9999 100755 --- a/util/buildbot/buildwin32.sh +++ b/util/buildbot/buildwin32.sh @@ -20,8 +20,10 @@ packagedir=$builddir/packages libdir=$builddir/libs # Test which win32 compiler is present -which i586-mingw32msvc-windres &>/dev/null && toolchain_file=$dir/toolchain_i586-mingw32msvc.cmake -which i686-w64-mingw32-windres &>/dev/null && toolchain_file=$dir/toolchain_i646-w64-mingw32.cmake +which i686-w64-mingw32-gcc &>/dev/null && + toolchain_file=$dir/toolchain_i686-w64-mingw32.cmake +which i686-w64-mingw32-gcc-posix &>/dev/null && + toolchain_file=$dir/toolchain_i686-w64-mingw32-posix.cmake if [ -z "$toolchain_file" ]; then echo "Unable to determine which mingw32 compiler to use" diff --git a/util/buildbot/toolchain_i586-mingw32msvc.cmake b/util/buildbot/toolchain_i686-w64-mingw32-posix.cmake similarity index 58% rename from util/buildbot/toolchain_i586-mingw32msvc.cmake rename to util/buildbot/toolchain_i686-w64-mingw32-posix.cmake index 0eeefb84d..b5d9ba5c4 100644 --- a/util/buildbot/toolchain_i586-mingw32msvc.cmake +++ b/util/buildbot/toolchain_i686-w64-mingw32-posix.cmake @@ -2,12 +2,14 @@ SET(CMAKE_SYSTEM_NAME Windows) # which compilers to use for C and C++ -SET(CMAKE_C_COMPILER i586-mingw32msvc-gcc) -SET(CMAKE_CXX_COMPILER i586-mingw32msvc-g++) -SET(CMAKE_RC_COMPILER i586-mingw32msvc-windres) +# *-posix is Ubuntu's naming for the MinGW variant that comes with support +# for pthreads / std::thread (required by MT) +SET(CMAKE_C_COMPILER i686-w64-mingw32-gcc-posix) +SET(CMAKE_CXX_COMPILER i686-w64-mingw32-g++-posix) +SET(CMAKE_RC_COMPILER i686-w64-mingw32-windres) # here is the target environment located -SET(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc) +SET(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32) # adjust the default behaviour of the FIND_XXX() commands: # search headers and libraries in the target environment, search diff --git a/util/buildbot/toolchain_i646-w64-mingw32.cmake b/util/buildbot/toolchain_i686-w64-mingw32.cmake similarity index 100% rename from util/buildbot/toolchain_i646-w64-mingw32.cmake rename to util/buildbot/toolchain_i686-w64-mingw32.cmake From 593d5f4465f5f181b87a1477c7072dca500a9d80 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 5 Mar 2021 12:54:53 +0100 Subject: [PATCH 075/110] Clean up ClientEvent hudadd/hudchange internals --- src/client/clientevent.h | 55 ++++++------- src/client/game.cpp | 123 ++++++++++------------------ src/network/clientpackethandler.cpp | 53 ++++++------ 3 files changed, 94 insertions(+), 137 deletions(-) diff --git a/src/client/clientevent.h b/src/client/clientevent.h index 9bd31efce..2215aecbd 100644 --- a/src/client/clientevent.h +++ b/src/client/clientevent.h @@ -52,6 +52,31 @@ enum ClientEventType : u8 CLIENTEVENT_MAX, }; +struct ClientEventHudAdd +{ + u32 server_id; + u8 type; + v2f pos, scale; + std::string name; + std::string text, text2; + u32 number, item, dir; + v2f align, offset; + v3f world_pos; + v2s32 size; + s16 z_index; +}; + +struct ClientEventHudChange +{ + u32 id; + HudElementStat stat; + v2f v2fdata; + std::string sdata; + u32 data; + v3f v3fdata; + v2s32 v2s32data; +}; + struct ClientEvent { ClientEventType type; @@ -93,38 +118,12 @@ struct ClientEvent { u32 id; } delete_particlespawner; - struct - { - u32 server_id; - u8 type; - v2f *pos; - std::string *name; - v2f *scale; - std::string *text; - u32 number; - u32 item; - u32 dir; - v2f *align; - v2f *offset; - v3f *world_pos; - v2s32 *size; - s16 z_index; - std::string *text2; - } hudadd; + ClientEventHudAdd *hudadd; struct { u32 id; } hudrm; - struct - { - u32 id; - HudElementStat stat; - v2f *v2fdata; - std::string *sdata; - u32 data; - v3f *v3fdata; - v2s32 *v2s32data; - } hudchange; + ClientEventHudChange *hudchange; SkyboxParams *set_sky; struct { diff --git a/src/client/game.cpp b/src/client/game.cpp index 60ecb7d3e..27eaec3b8 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -2643,48 +2643,32 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam) { LocalPlayer *player = client->getEnv().getLocalPlayer(); - u32 server_id = event->hudadd.server_id; + u32 server_id = event->hudadd->server_id; // ignore if we already have a HUD with that ID auto i = m_hud_server_to_client.find(server_id); if (i != m_hud_server_to_client.end()) { - delete event->hudadd.pos; - delete event->hudadd.name; - delete event->hudadd.scale; - delete event->hudadd.text; - delete event->hudadd.align; - delete event->hudadd.offset; - delete event->hudadd.world_pos; - delete event->hudadd.size; - delete event->hudadd.text2; + delete event->hudadd; return; } HudElement *e = new HudElement; - e->type = (HudElementType)event->hudadd.type; - e->pos = *event->hudadd.pos; - e->name = *event->hudadd.name; - e->scale = *event->hudadd.scale; - e->text = *event->hudadd.text; - e->number = event->hudadd.number; - e->item = event->hudadd.item; - e->dir = event->hudadd.dir; - e->align = *event->hudadd.align; - e->offset = *event->hudadd.offset; - e->world_pos = *event->hudadd.world_pos; - e->size = *event->hudadd.size; - e->z_index = event->hudadd.z_index; - e->text2 = *event->hudadd.text2; + e->type = static_cast(event->hudadd->type); + e->pos = event->hudadd->pos; + e->name = event->hudadd->name; + e->scale = event->hudadd->scale; + e->text = event->hudadd->text; + e->number = event->hudadd->number; + e->item = event->hudadd->item; + e->dir = event->hudadd->dir; + e->align = event->hudadd->align; + e->offset = event->hudadd->offset; + e->world_pos = event->hudadd->world_pos; + e->size = event->hudadd->size; + e->z_index = event->hudadd->z_index; + e->text2 = event->hudadd->text2; m_hud_server_to_client[server_id] = player->addHud(e); - delete event->hudadd.pos; - delete event->hudadd.name; - delete event->hudadd.scale; - delete event->hudadd.text; - delete event->hudadd.align; - delete event->hudadd.offset; - delete event->hudadd.world_pos; - delete event->hudadd.size; - delete event->hudadd.text2; + delete event->hudadd; } void Game::handleClientEvent_HudRemove(ClientEvent *event, CameraOrientation *cam) @@ -2706,77 +2690,52 @@ void Game::handleClientEvent_HudChange(ClientEvent *event, CameraOrientation *ca HudElement *e = nullptr; - auto i = m_hud_server_to_client.find(event->hudchange.id); + auto i = m_hud_server_to_client.find(event->hudchange->id); if (i != m_hud_server_to_client.end()) { e = player->getHud(i->second); } if (e == nullptr) { - delete event->hudchange.v3fdata; - delete event->hudchange.v2fdata; - delete event->hudchange.sdata; - delete event->hudchange.v2s32data; + delete event->hudchange; return; } - switch (event->hudchange.stat) { - case HUD_STAT_POS: - e->pos = *event->hudchange.v2fdata; - break; +#define CASE_SET(statval, prop, dataprop) \ + case statval: \ + e->prop = event->hudchange->dataprop; \ + break - case HUD_STAT_NAME: - e->name = *event->hudchange.sdata; - break; + switch (event->hudchange->stat) { + CASE_SET(HUD_STAT_POS, pos, v2fdata); - case HUD_STAT_SCALE: - e->scale = *event->hudchange.v2fdata; - break; + CASE_SET(HUD_STAT_NAME, name, sdata); - case HUD_STAT_TEXT: - e->text = *event->hudchange.sdata; - break; + CASE_SET(HUD_STAT_SCALE, scale, v2fdata); - case HUD_STAT_NUMBER: - e->number = event->hudchange.data; - break; + CASE_SET(HUD_STAT_TEXT, text, sdata); - case HUD_STAT_ITEM: - e->item = event->hudchange.data; - break; + CASE_SET(HUD_STAT_NUMBER, number, data); - case HUD_STAT_DIR: - e->dir = event->hudchange.data; - break; + CASE_SET(HUD_STAT_ITEM, item, data); - case HUD_STAT_ALIGN: - e->align = *event->hudchange.v2fdata; - break; + CASE_SET(HUD_STAT_DIR, dir, data); - case HUD_STAT_OFFSET: - e->offset = *event->hudchange.v2fdata; - break; + CASE_SET(HUD_STAT_ALIGN, align, v2fdata); - case HUD_STAT_WORLD_POS: - e->world_pos = *event->hudchange.v3fdata; - break; + CASE_SET(HUD_STAT_OFFSET, offset, v2fdata); - case HUD_STAT_SIZE: - e->size = *event->hudchange.v2s32data; - break; + CASE_SET(HUD_STAT_WORLD_POS, world_pos, v3fdata); - case HUD_STAT_Z_INDEX: - e->z_index = event->hudchange.data; - break; + CASE_SET(HUD_STAT_SIZE, size, v2s32data); - case HUD_STAT_TEXT2: - e->text2 = *event->hudchange.sdata; - break; + CASE_SET(HUD_STAT_Z_INDEX, z_index, data); + + CASE_SET(HUD_STAT_TEXT2, text2, sdata); } - delete event->hudchange.v3fdata; - delete event->hudchange.v2fdata; - delete event->hudchange.sdata; - delete event->hudchange.v2s32data; +#undef CASE_SET + + delete event->hudchange; } void Game::handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam) diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 44bd81dac..c8a160732 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -1041,9 +1041,6 @@ void Client::handleCommand_DeleteParticleSpawner(NetworkPacket* pkt) void Client::handleCommand_HudAdd(NetworkPacket* pkt) { - std::string datastring(pkt->getString(0), pkt->getSize()); - std::istringstream is(datastring, std::ios_base::binary); - u32 server_id; u8 type; v2f pos; @@ -1070,22 +1067,23 @@ void Client::handleCommand_HudAdd(NetworkPacket* pkt) } catch(PacketError &e) {}; ClientEvent *event = new ClientEvent(); - event->type = CE_HUDADD; - event->hudadd.server_id = server_id; - event->hudadd.type = type; - event->hudadd.pos = new v2f(pos); - event->hudadd.name = new std::string(name); - event->hudadd.scale = new v2f(scale); - event->hudadd.text = new std::string(text); - event->hudadd.number = number; - event->hudadd.item = item; - event->hudadd.dir = dir; - event->hudadd.align = new v2f(align); - event->hudadd.offset = new v2f(offset); - event->hudadd.world_pos = new v3f(world_pos); - event->hudadd.size = new v2s32(size); - event->hudadd.z_index = z_index; - event->hudadd.text2 = new std::string(text2); + event->type = CE_HUDADD; + event->hudadd = new ClientEventHudAdd(); + event->hudadd->server_id = server_id; + event->hudadd->type = type; + event->hudadd->pos = pos; + event->hudadd->name = name; + event->hudadd->scale = scale; + event->hudadd->text = text; + event->hudadd->number = number; + event->hudadd->item = item; + event->hudadd->dir = dir; + event->hudadd->align = align; + event->hudadd->offset = offset; + event->hudadd->world_pos = world_pos; + event->hudadd->size = size; + event->hudadd->z_index = z_index; + event->hudadd->text2 = text2; m_client_event_queue.push(event); } @@ -1126,14 +1124,15 @@ void Client::handleCommand_HudChange(NetworkPacket* pkt) *pkt >> intdata; ClientEvent *event = new ClientEvent(); - event->type = CE_HUDCHANGE; - event->hudchange.id = server_id; - event->hudchange.stat = (HudElementStat)stat; - event->hudchange.v2fdata = new v2f(v2fdata); - event->hudchange.v3fdata = new v3f(v3fdata); - event->hudchange.sdata = new std::string(sdata); - event->hudchange.data = intdata; - event->hudchange.v2s32data = new v2s32(v2s32data); + event->type = CE_HUDCHANGE; + event->hudchange = new ClientEventHudChange(); + event->hudchange->id = server_id; + event->hudchange->stat = static_cast(stat); + event->hudchange->v2fdata = v2fdata; + event->hudchange->v3fdata = v3fdata; + event->hudchange->sdata = sdata; + event->hudchange->data = intdata; + event->hudchange->v2s32data = v2s32data; m_client_event_queue.push(event); } From dcb30a593dafed89ef52e712533b0706bddbd36e Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 5 Mar 2021 16:11:55 +0100 Subject: [PATCH 076/110] Set ENABLE_SYSTEM_JSONCPP to TRUE by default --- CMakeLists.txt | 4 ++-- README.md | 4 ++-- cmake/Modules/FindGMP.cmake | 2 -- cmake/Modules/FindJson.cmake | 23 +++++++++++------------ 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 910213c09..31e914c76 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -204,8 +204,8 @@ find_package(GMP REQUIRED) find_package(Json REQUIRED) find_package(Lua REQUIRED) -# JsonCPP doesn't compile well on GCC 4.8 -if(NOT ENABLE_SYSTEM_JSONCPP) +# JsonCpp doesn't compile well on GCC 4.8 +if(NOT USE_SYSTEM_JSONCPP) set(GCC_MINIMUM_VERSION "4.9") endif() diff --git a/README.md b/README.md index 249f24a16..1d8f754fe 100644 --- a/README.md +++ b/README.md @@ -238,7 +238,7 @@ General options and their default values: ENABLE_LUAJIT=ON - Build with LuaJIT (much faster than non-JIT Lua) ENABLE_PROMETHEUS=OFF - Build with Prometheus metrics exporter (listens on tcp/30000 by default) ENABLE_SYSTEM_GMP=ON - Use GMP from system (much faster than bundled mini-gmp) - ENABLE_SYSTEM_JSONCPP=OFF - Use JsonCPP from system + ENABLE_SYSTEM_JSONCPP=ON - Use JsonCPP from system OPENGL_GL_PREFERENCE=LEGACY - Linux client build only; See CMake Policy CMP0072 for reference RUN_IN_PLACE=FALSE - Create a portable install (worlds, settings etc. in current directory) USE_GPROF=FALSE - Enable profiling using GProf @@ -354,7 +354,7 @@ This is outdated and not recommended. Follow the instructions on https://dev.min Run the following script in PowerShell: ```powershell -cmake . -G"Visual Studio 15 2017 Win64" -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GETTEXT=OFF -DENABLE_CURSES=OFF -DENABLE_SYSTEM_JSONCPP=ON +cmake . -G"Visual Studio 15 2017 Win64" -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GETTEXT=OFF -DENABLE_CURSES=OFF cmake --build . --config Release ``` Make sure that the right compiler is selected and the path to the vcpkg toolchain is correct. diff --git a/cmake/Modules/FindGMP.cmake b/cmake/Modules/FindGMP.cmake index 7b45f16c7..190b7c548 100644 --- a/cmake/Modules/FindGMP.cmake +++ b/cmake/Modules/FindGMP.cmake @@ -12,8 +12,6 @@ if(ENABLE_SYSTEM_GMP) else() message (STATUS "Detecting GMP from system failed.") endif() -else() - message (STATUS "Detecting GMP from system disabled! (ENABLE_SYSTEM_GMP=0)") endif() if(NOT USE_SYSTEM_GMP) diff --git a/cmake/Modules/FindJson.cmake b/cmake/Modules/FindJson.cmake index a5e9098f8..cce2d387f 100644 --- a/cmake/Modules/FindJson.cmake +++ b/cmake/Modules/FindJson.cmake @@ -1,26 +1,25 @@ -# Look for JSONCPP if asked to. -# We use a bundled version by default because some distros ship versions of -# JSONCPP that cause segfaults and other memory errors when we link with them. -# See https://github.com/minetest/minetest/issues/1793 +# Look for JsonCpp, with fallback to bundeled version mark_as_advanced(JSON_LIBRARY JSON_INCLUDE_DIR) -option(ENABLE_SYSTEM_JSONCPP "Enable using a system-wide JSONCPP. May cause segfaults and other memory errors!" FALSE) +option(ENABLE_SYSTEM_JSONCPP "Enable using a system-wide JsonCpp" TRUE) +set(USE_SYSTEM_JSONCPP FALSE) if(ENABLE_SYSTEM_JSONCPP) find_library(JSON_LIBRARY NAMES jsoncpp) find_path(JSON_INCLUDE_DIR json/allocator.h PATH_SUFFIXES jsoncpp) - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(Json DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR) - - if(JSON_FOUND) - message(STATUS "Using system JSONCPP library.") + if(JSON_LIBRARY AND JSON_INCLUDE_DIR) + message(STATUS "Using JsonCpp provided by system.") + set(USE_SYSTEM_JSONCPP TRUE) endif() endif() -if(NOT JSON_FOUND) - message(STATUS "Using bundled JSONCPP library.") +if(NOT USE_SYSTEM_JSONCPP) + message(STATUS "Using bundled JsonCpp library.") set(JSON_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/jsoncpp) set(JSON_LIBRARY jsoncpp) add_subdirectory(lib/jsoncpp) endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Json DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR) From d9b78d64929b8fbf1507c2d27dca6fbc105ecdb0 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sat, 6 Mar 2021 03:15:53 +0100 Subject: [PATCH 077/110] Predict failing placement of ignore nodes --- builtin/game/register.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/builtin/game/register.lua b/builtin/game/register.lua index e01c50335..c07535855 100644 --- a/builtin/game/register.lua +++ b/builtin/game/register.lua @@ -368,6 +368,7 @@ core.register_node(":ignore", { air_equivalent = true, drop = "", groups = {not_in_creative_inventory=1}, + node_placement_prediction = "", on_place = function(itemstack, placer, pointed_thing) core.chat_send_player( placer:get_player_name(), From fc864029b9635106a5390aa09d227d7dac31d1a5 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sun, 7 Mar 2021 10:04:07 +0100 Subject: [PATCH 078/110] Protect per-player detached inventory actions --- src/network/serverpackethandler.cpp | 6 +++++- src/server/serverinventorymgr.cpp | 12 ++++++++++++ src/server/serverinventorymgr.h | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index ddc6f4e47..f1ed42302 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -626,7 +626,7 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt) const bool player_has_interact = checkPriv(player->getName(), "interact"); - auto check_inv_access = [player, player_has_interact] ( + auto check_inv_access = [player, player_has_interact, this] ( const InventoryLocation &loc) -> bool { if (loc.type == InventoryLocation::CURRENT_PLAYER) return false; // Only used internally on the client, never sent @@ -634,6 +634,10 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt) // Allow access to own inventory in all cases return loc.name == player->getName(); } + if (loc.type == InventoryLocation::DETACHED) { + if (!getInventoryMgr()->checkDetachedInventoryAccess(loc, player->getName())) + return false; + } if (!player_has_interact) { infostream << "Cannot modify foreign inventory: " diff --git a/src/server/serverinventorymgr.cpp b/src/server/serverinventorymgr.cpp index 555e01ec6..2a80c9bbe 100644 --- a/src/server/serverinventorymgr.cpp +++ b/src/server/serverinventorymgr.cpp @@ -168,6 +168,18 @@ bool ServerInventoryManager::removeDetachedInventory(const std::string &name) return true; } +bool ServerInventoryManager::checkDetachedInventoryAccess( + const InventoryLocation &loc, const std::string &player) const +{ + SANITY_CHECK(loc.type == InventoryLocation::DETACHED); + + const auto &inv_it = m_detached_inventories.find(loc.name); + if (inv_it == m_detached_inventories.end()) + return false; + + return inv_it->second.owner.empty() || inv_it->second.owner == player; +} + void ServerInventoryManager::sendDetachedInventories(const std::string &peer_name, bool incremental, std::function apply_cb) diff --git a/src/server/serverinventorymgr.h b/src/server/serverinventorymgr.h index ccf6d3b2e..0e4b72415 100644 --- a/src/server/serverinventorymgr.h +++ b/src/server/serverinventorymgr.h @@ -43,6 +43,7 @@ public: Inventory *createDetachedInventory(const std::string &name, IItemDefManager *idef, const std::string &player = ""); bool removeDetachedInventory(const std::string &name); + bool checkDetachedInventoryAccess(const InventoryLocation &loc, const std::string &player) const; void sendDetachedInventories(const std::string &peer_name, bool incremental, std::function apply_cb); From 176f5866cbc8946c55a0a9bd0978a804ad310211 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sun, 7 Mar 2021 11:35:53 +0100 Subject: [PATCH 079/110] Protect dropping from far node inventories Also changes if/if to switch/case --- src/network/serverpackethandler.cpp | 47 ++++++++++++++--------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index f1ed42302..b863e1828 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -628,23 +628,34 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt) auto check_inv_access = [player, player_has_interact, this] ( const InventoryLocation &loc) -> bool { - if (loc.type == InventoryLocation::CURRENT_PLAYER) - return false; // Only used internally on the client, never sent - if (loc.type == InventoryLocation::PLAYER) { - // Allow access to own inventory in all cases - return loc.name == player->getName(); - } - if (loc.type == InventoryLocation::DETACHED) { - if (!getInventoryMgr()->checkDetachedInventoryAccess(loc, player->getName())) - return false; - } - if (!player_has_interact) { + // Players without interact may modify their own inventory + if (!player_has_interact && loc.type != InventoryLocation::PLAYER) { infostream << "Cannot modify foreign inventory: " << "No interact privilege" << std::endl; return false; } - return true; + + switch (loc.type) { + case InventoryLocation::CURRENT_PLAYER: + // Only used internally on the client, never sent + return false; + case InventoryLocation::PLAYER: + // Allow access to own inventory in all cases + return loc.name == player->getName(); + case InventoryLocation::NODEMETA: + { + // Check for out-of-range interaction + v3f node_pos = intToFloat(loc.p, BS); + v3f player_pos = player->getPlayerSAO()->getEyePosition(); + f32 d = player_pos.getDistanceFrom(node_pos); + return checkInteractDistance(player, d, "inventory"); + } + case InventoryLocation::DETACHED: + return getInventoryMgr()->checkDetachedInventoryAccess(loc, player->getName()); + default: + return false; + } }; /* @@ -664,18 +675,6 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt) !check_inv_access(ma->to_inv)) return; - InventoryLocation *remote = ma->from_inv.type == InventoryLocation::PLAYER ? - &ma->to_inv : &ma->from_inv; - - // Check for out-of-range interaction - if (remote->type == InventoryLocation::NODEMETA) { - v3f node_pos = intToFloat(remote->p, BS); - v3f player_pos = player->getPlayerSAO()->getEyePosition(); - f32 d = player_pos.getDistanceFrom(node_pos); - if (!checkInteractDistance(player, d, "inventory")) - return; - } - /* Disable moving items out of craftpreview */ From c48bbfd067da51a41f2facccf3cc3ee7660807a5 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 8 Mar 2021 19:27:32 +0000 Subject: [PATCH 080/110] Fix misleading chat messages of /clearobjects (#10690) --- builtin/game/chat.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/builtin/game/chat.lua b/builtin/game/chat.lua index eb3364d60..e05e83a27 100644 --- a/builtin/game/chat.lua +++ b/builtin/game/chat.lua @@ -1075,10 +1075,12 @@ core.register_chatcommand("clearobjects", { return false, S("Invalid usage, see /help clearobjects.") end - core.log("action", name .. " clears all objects (" + core.log("action", name .. " clears objects (" .. options.mode .. " mode).") - core.chat_send_all(S("Clearing all objects. This may take a long time. " - .. "You may experience a timeout. (by @1)", name)) + if options.mode == "full" then + core.chat_send_all(S("Clearing all objects. This may take a long time. " + .. "You may experience a timeout. (by @1)", name)) + end core.clear_objects(options) core.log("action", "Object clearing done.") core.chat_send_all("*** "..S("Cleared all objects.")) From a21402b38faab484195224205ef0bbd112f72162 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 8 Mar 2021 19:27:48 +0000 Subject: [PATCH 081/110] Translate builtin into German (server-side) (#11032) --- builtin/locale/__builtin.de.tr | 225 +++++++++++++++++++++++++++++++++ 1 file changed, 225 insertions(+) create mode 100644 builtin/locale/__builtin.de.tr diff --git a/builtin/locale/__builtin.de.tr b/builtin/locale/__builtin.de.tr new file mode 100644 index 000000000..eaadf611b --- /dev/null +++ b/builtin/locale/__builtin.de.tr @@ -0,0 +1,225 @@ +# textdomain: __builtin +Empty command.=Leerer Befehl. +Invalid command: @1=Ungültiger Befehl: @1 +Invalid command usage.=Ungültige Befehlsverwendung. +You don't have permission to run this command (missing privileges: @1).=Sie haben keine Erlaubnis, diesen Befehl auszuführen (fehlende Privilegien: @1). +Unable to get position of player @1.=Konnte Position vom Spieler @1 nicht ermitteln. +Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=Ungültiges Gebietsformat. Erwartet: (x1,y1,z1) (x2,y2,z2) += +Show chat action (e.g., '/me orders a pizza' displays ' orders a pizza')=Chataktion zeigen (z.B. wird „/me isst Pizza“ zu „ isst Pizza“) +Show the name of the server owner=Den Namen des Servereigentümers zeigen +The administrator of this server is @1.=Der Administrator dieses Servers ist @1. +There's no administrator named in the config file.=In der Konfigurationsdatei wurde kein Administrator angegeben. +[]=[] +Show privileges of yourself or another player=Ihre eigenen Privilegien oder die eines anderen Spielers anzeigen +Player @1 does not exist.=Spieler @1 existiert nicht. +Privileges of @1: @2=Privilegien von @1: @2 += +Return list of all online players with privilege=Liste aller Spieler mit einem Privileg ausgeben +Invalid parameters (see /help haspriv).=Ungültige Parameter (siehe „/help haspriv“). +Unknown privilege!=Unbekanntes Privileg! +Players online with the "@1" privilege: @2=Derzeit online spielende Spieler mit dem „@1“-Privileg: @2 +Your privileges are insufficient.=Ihre Privilegien sind unzureichend. +Unknown privilege: @1=Unbekanntes Privileg: @1 +@1 granted you privileges: @2=@1 gewährte Ihnen Privilegien: @2 + ( | all)= ( | all) +Give privileges to player=Privileg an Spieler vergeben +Invalid parameters (see /help grant).=Ungültige Parameter (siehe „/help grant“). + | all= | all +Grant privileges to yourself=Privilegien an Ihnen selbst vergeben +Invalid parameters (see /help grantme).=Ungültige Parameter (siehe „/help grantme“). +@1 revoked privileges from you: @2=@1 entfernte Privilegien von Ihnen: @2 +Remove privileges from player=Privilegien von Spieler entfernen +Invalid parameters (see /help revoke).=Ungültige Parameter (siehe „/help revoke“). +Revoke privileges from yourself=Privilegien von Ihnen selbst entfernen +Invalid parameters (see /help revokeme).=Ungültige Parameter (siehe „/help revokeme“). + = +Set player's password=Passwort von Spieler setzen +Name field required.=Namensfeld benötigt. +Your password was cleared by @1.=Ihr Passwort wurde von @1 geleert. +Password of player "@1" cleared.=Passwort von Spieler „@1“ geleert. +Your password was set by @1.=Ihr Passwort wurde von @1 gesetzt. +Password of player "@1" set.=Passwort von Spieler „@1“ gesetzt. += +Set empty password for a player=Leeres Passwort für einen Spieler setzen +Reload authentication data=Authentifizierungsdaten erneut laden +Done.=Fertig. +Failed.=Fehlgeschlagen. +Remove a player's data=Daten eines Spielers löschen +Player "@1" removed.=Spieler „@1“ gelöscht. +No such player "@1" to remove.=Es gibt keinen Spieler „@1“, der gelöscht werden könnte. +Player "@1" is connected, cannot remove.=Spieler „@1“ ist verbunden, er kann nicht gelöscht werden. +Unhandled remove_player return code @1.=Nicht berücksichtigter remove_player-Rückgabewert @1. +Cannot teleport out of map bounds!=Eine Teleportation außerhalb der Kartengrenzen ist nicht möglich! +Cannot get player with name @1.=Spieler mit Namen @1 kann nicht gefunden werden. +Cannot teleport, @1 is attached to an object!=Teleportation nicht möglich, @1 ist an einem Objekt befestigt! +Teleporting @1 to @2.=Teleportation von @1 nach @2 +One does not teleport to oneself.=Man teleportiert sich doch nicht zu sich selbst. +Cannot get teleportee with name @1.=Der zu teleportierende Spieler mit Namen @1 kann nicht gefunden werden. +Cannot get target player with name @1.=Zielspieler mit Namen @1 kann nicht gefunden werden. +Teleporting @1 to @2 at @3.=Teleportation von @1 zu @2 bei @3 +,, | | ,, | =,, | | ,, | +Teleport to position or player=Zu Position oder Spieler teleportieren +You don't have permission to teleport other players (missing privilege: @1).=Sie haben nicht die Erlaubnis, andere Spieler zu teleportieren (fehlendes Privileg: @1). +([-n] ) | =([-n] ) | +Set or read server configuration setting=Serverkonfigurationseinstellung setzen oder lesen +Failed. Use '/set -n ' to create a new setting.=Fehlgeschlagen. Benutzen Sie „/set -n “, um eine neue Einstellung zu erstellen. +@1 @= @2=@1 @= @2 += +Invalid parameters (see /help set).=Ungültige Parameter (siehe „/help set“). +Finished emerging @1 blocks in @2ms.=Fertig mit Erzeugung von @1 Blöcken in @2 ms. +emergeblocks update: @1/@2 blocks emerged (@3%)=emergeblocks-Update: @1/@2 Kartenblöcke geladen (@3%) +(here []) | ( )=(here []) | ( ) +Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 ( and must be in parentheses)=Lade (oder, wenn nicht existent, generiere) Kartenblöcke im Gebiet zwischen Pos1 und Pos2 ( und müssen in Klammern stehen) +Started emerge of area ranging from @1 to @2.=Start des Ladevorgangs des Gebiets zwischen @1 und @2. +Delete map blocks contained in area pos1 to pos2 ( and must be in parentheses)=Kartenblöcke innerhalb des Gebiets zwischen Pos1 und Pos2 löschen ( und müssen in Klammern stehen) +Successfully cleared area ranging from @1 to @2.=Gebiet zwischen @1 und @2 erfolgreich geleert. +Failed to clear one or more blocks in area.=Fehlgeschlagen: Ein oder mehrere Kartenblöcke im Gebiet konnten nicht geleert werden. +Resets lighting in the area between pos1 and pos2 ( and must be in parentheses)=Setzt das Licht im Gebiet zwischen Pos1 und Pos2 zurück ( und müssen in Klammern stehen) +Successfully reset light in the area ranging from @1 to @2.=Das Licht im Gebiet zwischen @1 und @2 wurde erfolgreich zurückgesetzt. +Failed to load one or more blocks in area.=Fehlgeschlagen: Ein oder mehrere Kartenblöcke im Gebiet konnten nicht geladen werden. +List mods installed on the server=Installierte Mods auf dem Server auflisten +Cannot give an empty item.=Ein leerer Gegenstand kann nicht gegeben werden. +Cannot give an unknown item.=Ein unbekannter Gegenstand kann nicht gegeben werden. +Giving 'ignore' is not allowed.=„ignore“ darf nicht gegeben werden. +@1 is not a known player.=@1 ist kein bekannter Spieler. +@1 partially added to inventory.=@1 teilweise ins Inventar eingefügt. +@1 could not be added to inventory.=@1 konnte nicht ins Inventar eingefügt werden. +@1 added to inventory.=@1 zum Inventar hinzugefügt. +@1 partially added to inventory of @2.=@1 teilweise ins Inventar von @2 eingefügt. +@1 could not be added to inventory of @2.=@1 konnte nicht ins Inventar von @2 eingefügt werden. +@1 added to inventory of @2.=@1 ins Inventar von @2 eingefügt. + [ []]= [ []] +Give item to player=Gegenstand an Spieler geben +Name and ItemString required.=Name und ItemString benötigt. + [ []]= [ []] +Give item to yourself=Gegenstand Ihnen selbst geben +ItemString required.=ItemString benötigt. + [,,]= [,,] +Spawn entity at given (or your) position=Entity an angegebener (oder Ihrer eigenen) Position spawnen +EntityName required.=EntityName benötigt. +Unable to spawn entity, player is nil.=Entity konnte nicht gespawnt werden, Spieler ist nil. +Cannot spawn an unknown entity.=Ein unbekanntes Entity kann nicht gespawnt werden. +Invalid parameters (@1).=Ungültige Parameter (@1). +@1 spawned.=@1 gespawnt. +@1 failed to spawn.=@1 konnte nicht gespawnt werden. +Destroy item in hand=Gegenstand in der Hand zerstören +Unable to pulverize, no player.=Konnte nicht pulverisieren, kein Spieler. +Unable to pulverize, no item in hand.=Konnte nicht pulverisieren, kein Gegenstand in der Hand. +An item was pulverized.=Ein Gegenstand wurde pulverisiert. +[] [] []=[] [] [] +Check who last touched a node or a node near it within the time specified by . Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set to inf for no time limit=Überprüfen, wer als letztes einen Node oder einen Node in der Nähe innerhalb der in angegebenen Zeitspanne angefasst hat. Standard: Reichweite @= 0, Sekunden @= 86400 @= 24h, Limit @= 5. auf „inf“ setzen, um Zeitlimit zu deaktivieren. +Rollback functions are disabled.=Rollback-Funktionen sind deaktiviert. +That limit is too high!=Dieses Limit ist zu hoch! +Checking @1 ...=Überprüfe @1 ... +Nobody has touched the specified location in @1 seconds.=Niemand hat die angegebene Position seit @1 Sekunden angefasst. +@1 @2 @3 -> @4 @5 seconds ago.=@1 @2 @3 -> @4 vor @5 Sekunden. +Punch a node (range@=@1, seconds@=@2, limit@=@3).=Hauen Sie einen Node (Reichweite@=@1, Sekunden@=@2, Limit@=@3). +( []) | (: [])=( []) | (: []) +Revert actions of a player. Default for is 60. Set to inf for no time limit=Aktionen eines Spielers zurückrollen. Standard für ist 60. auf „inf“ setzen, um Zeitlimit zu deaktivieren +Invalid parameters. See /help rollback and /help rollback_check.=Ungültige Parameter. Siehe /help rollback und /help rollback_check. +Reverting actions of player '@1' since @2 seconds.=Die Aktionen des Spielers „@1“ seit @2 Sekunden werden rückgängig gemacht. +Reverting actions of @1 since @2 seconds.=Die Aktionen von @1 seit @2 Sekunden werden rückgängig gemacht. +(log is too long to show)=(Protokoll ist zu lang für die Anzeige) +Reverting actions succeeded.=Die Aktionen wurden erfolgreich rückgängig gemacht. +Reverting actions FAILED.=FEHLGESCHLAGEN: Die Aktionen konnten nicht rückgängig gemacht werden. +Show server status=Serverstatus anzeigen +This command was disabled by a mod or game.=Dieser Befehl wurde von einer Mod oder einem Spiel deaktiviert. +[<0..23>:<0..59> | <0..24000>]=[<0..23>:<0..59> | <0..24000>] +Show or set time of day=Tageszeit anzeigen oder setzen +Current time is @1:@2.=Es ist jetzt @1:@2 Uhr. +You don't have permission to run this command (missing privilege: @1).=Sie haben nicht die Erlaubnis, diesen Befehl auszuführen (fehlendes Privileg: @1). +Invalid time.=Ungültige Zeit. +Time of day changed.=Tageszeit geändert. +Invalid hour (must be between 0 and 23 inclusive).=Ungültige Stunde (muss zwischen 0 und 23 inklusive liegen). +Invalid minute (must be between 0 and 59 inclusive).=Ungültige Minute (muss zwischen 0 und 59 inklusive liegen). +Show day count since world creation=Anzahl Tage seit der Erschaffung der Welt anzeigen +Current day is @1.=Aktueller Tag ist @1. +[ | -1] [reconnect] []=[ | -1] [reconnect] [] +Shutdown server (-1 cancels a delayed shutdown)=Server herunterfahren (-1 bricht einen verzögerten Abschaltvorgang ab) +Server shutting down (operator request).=Server wird heruntergefahren (Betreiberanfrage). +Ban the IP of a player or show the ban list=Die IP eines Spielers verbannen oder die Bannliste anzeigen +The ban list is empty.=Die Bannliste ist leer. +Ban list: @1=Bannliste: @1 +Player is not online.=Spieler ist nicht online. +Failed to ban player.=Konnte Spieler nicht verbannen. +Banned @1.=@1 verbannt. + | = | +Remove IP ban belonging to a player/IP=Einen IP-Bann auf einen Spieler zurücknehmen +Failed to unban player/IP.=Konnte Bann auf Spieler/IP nicht zurücknehmen. +Unbanned @1.=Bann auf @1 zurückgenommen. + []= [] +Kick a player=Spieler hinauswerfen +Failed to kick player @1.=Spieler @1 konnte nicht hinausgeworfen werden. +Kicked @1.=@1 hinausgeworfen. +[full | quick]=[full | quick] +Clear all objects in world=Alle Objekte in der Welt löschen +Invalid usage, see /help clearobjects.=Ungültige Verwendung, siehe /help clearobjects. +Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=Lösche alle Objekte. Dies kann eine lange Zeit dauern. Eine Netzwerkzeitüberschreitung könnte für Sie auftreten. (von @1) +Objects cleared.=Objekte gelöscht. +Cleared all objects.=Alle Objekte gelöscht. + = +Send a direct message to a player=Eine Direktnachricht an einen Spieler senden +Invalid usage, see /help msg.=Ungültige Verwendung, siehe /help msg. +The player @1 is not online.=Der Spieler @1 ist nicht online. +DM from @1: @2=DN von @1: @2 +Message sent.=Nachricht gesendet. +Get the last login time of a player or yourself=Den letzten Loginzeitpunkt eines Spielers oder Ihren eigenen anfragen +@1's last login time was @2.=Letzter Loginzeitpunkt von @1 war @2. +@1's last login time is unknown.=Letzter Loginzeitpunkt von @1 ist unbekannt. +Clear the inventory of yourself or another player=Das Inventar von Ihnen oder einem anderen Spieler leeren +You don't have permission to clear another player's inventory (missing privilege: @1).=Sie haben nicht die Erlaubnis, das Inventar eines anderen Spielers zu leeren (fehlendes Privileg: @1). +@1 cleared your inventory.=@1 hat Ihr Inventar geleert. +Cleared @1's inventory.=Inventar von @1 geleert. +Player must be online to clear inventory!=Spieler muss online sein, um das Inventar leeren zu können! +Players can't be killed, damage has been disabled.=Spieler können nicht getötet werden, Schaden ist deaktiviert. +Player @1 is not online.=Spieler @1 ist nicht online. +You are already dead.=Sie sind schon tot. +@1 is already dead.=@1 ist bereits tot. +@1 has been killed.=@1 wurde getötet. +Kill player or yourself=Einen Spieler oder Sie selbst töten +Available commands: @1=Verfügbare Befehle: @1 +Use '/help ' to get more information, or '/help all' to list everything.=„/help “ benutzen, um mehr Informationen zu erhalten, oder „/help all“, um alles aufzulisten. +Available commands:=Verfügbare Befehle: +Command not available: @1=Befehl nicht verfügbar: @1 +[all | privs | ]=[all | privs | ] +Get help for commands or list privileges=Hilfe für Befehle erhalten oder Privilegien auflisten +Available privileges:=Verfügbare Privilegien: +Command=Befehl +Parameters=Parameter +For more information, click on any entry in the list.=Für mehr Informationen klicken Sie auf einen beliebigen Eintrag in der Liste. +Double-click to copy the entry to the chat history.=Doppelklicken, um den Eintrag in die Chathistorie einzufügen. +Command: @1 @2=Befehl: @1 @2 +Available commands: (see also: /help )=Verfügbare Befehle: (siehe auch: /help ) +Close=Schließen +Privilege=Privileg +Description=Beschreibung +print [] | dump [] | save [ []] | reset=print [] | dump [] | save [ []] +Handle the profiler and profiling data=Den Profiler und Profilingdaten verwalten +Statistics written to action log.=Statistiken zum Aktionsprotokoll geschrieben. +Statistics were reset.=Statistiken wurden zurückgesetzt. +Usage: @1=Verwendung: @1 +Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=Format kann entweder „txt“, „csv“, „lua“, „json“ oder „json_pretty“ sein (die Struktur kann sich in Zukunft ändern). +(no description)=(keine Beschreibung) +Can interact with things and modify the world=Kann mit Dingen interagieren und die Welt verändern +Can speak in chat=Kann im Chat sprechen +Can modify 'shout' and 'interact' privileges=Kann die „shout“- und „interact“-Privilegien anpassen +Can modify privileges=Kann Privilegien anpassen +Can teleport self=Kann sich selbst teleportieren +Can teleport other players=Kann andere Spieler teleportieren +Can set the time of day using /time=Kann die Tageszeit mit /time setzen +Can do server maintenance stuff=Kann Serverwartungsdinge machen +Can bypass node protection in the world=Kann den Schutz auf Blöcken in der Welt umgehen +Can ban and unban players=Kann Spieler verbannen und entbannen +Can kick players=Kann Spieler hinauswerfen +Can use /give and /giveme=Kann /give und /giveme benutzen +Can use /setpassword and /clearpassword=Kann /setpassword und /clearpassword benutzen +Can use fly mode=Kann den Flugmodus benutzen +Can use fast mode=Kann den Schnellmodus benutzen +Can fly through solid nodes using noclip mode=Kann durch feste Blöcke mit dem Geistmodus fliegen +Can use the rollback functionality=Kann die Rollback-Funktionalität benutzen +Allows enabling various debug options that may affect gameplay=Erlaubt die Aktivierung diverser Debugoptionen, die das Spielgeschehen beeinflussen könnten +Unknown Item=Unbekannter Gegenstand +Air=Luft +Ignore=Ignorieren +You can't place 'ignore' nodes!=Sie können keine „ignore“-Blöcke platzieren! From bf8fb2672e53f6a3eff15184328b881446a183dd Mon Sep 17 00:00:00 2001 From: sfan5 Date: Tue, 9 Mar 2021 00:56:53 +0100 Subject: [PATCH 082/110] Use place_param2 client-side for item appearance & prediction (#11024) --- src/client/game.cpp | 36 ++++++++++++++++----------------- src/client/wieldmesh.cpp | 33 ++++++++++++++++++++---------- src/itemdef.cpp | 14 +++++++------ src/itemdef.h | 1 + src/script/common/c_content.cpp | 2 ++ 5 files changed, 51 insertions(+), 35 deletions(-) diff --git a/src/client/game.cpp b/src/client/game.cpp index 27eaec3b8..2575e5406 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -3287,7 +3287,8 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, const ItemStack &selected_item, const v3s16 &nodepos, const v3s16 &neighbourpos, const PointedThing &pointed, const NodeMetadata *meta) { - std::string prediction = selected_def.node_placement_prediction; + const auto &prediction = selected_def.node_placement_prediction; + const NodeDefManager *nodedef = client->ndef(); ClientMap &map = client->getEnv().getClientMap(); MapNode node; @@ -3357,8 +3358,7 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, if (!found) { errorstream << "Node placement prediction failed for " - << selected_def.name << " (places " - << prediction + << selected_def.name << " (places " << prediction << ") - Name not known" << std::endl; // Handle this as if prediction was empty // Report to server @@ -3369,9 +3369,14 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, const ContentFeatures &predicted_f = nodedef->get(id); // Predict param2 for facedir and wallmounted nodes + // Compare core.item_place_node() for what the server does u8 param2 = 0; - if (predicted_f.param_type_2 == CPT2_WALLMOUNTED || + const u8 place_param2 = selected_def.place_param2; + + if (place_param2) { + param2 = place_param2; + } else if (predicted_f.param_type_2 == CPT2_WALLMOUNTED || predicted_f.param_type_2 == CPT2_COLORED_WALLMOUNTED) { v3s16 dir = nodepos - neighbourpos; @@ -3382,9 +3387,7 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, } else { param2 = dir.Z < 0 ? 5 : 4; } - } - - if (predicted_f.param_type_2 == CPT2_FACEDIR || + } else if (predicted_f.param_type_2 == CPT2_FACEDIR || predicted_f.param_type_2 == CPT2_COLORED_FACEDIR) { v3s16 dir = nodepos - floatToInt(client->getEnv().getLocalPlayer()->getPosition(), BS); @@ -3395,11 +3398,9 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, } } - assert(param2 <= 5); - - //Check attachment if node is in group attached_node - if (((ItemGroupList) predicted_f.groups)["attached_node"] != 0) { - static v3s16 wallmounted_dirs[8] = { + // Check attachment if node is in group attached_node + if (itemgroup_get(predicted_f.groups, "attached_node") != 0) { + const static v3s16 wallmounted_dirs[8] = { v3s16(0, 1, 0), v3s16(0, -1, 0), v3s16(1, 0, 0), @@ -3424,11 +3425,11 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, } // Apply color - if ((predicted_f.param_type_2 == CPT2_COLOR + if (!place_param2 && (predicted_f.param_type_2 == CPT2_COLOR || predicted_f.param_type_2 == CPT2_COLORED_FACEDIR || predicted_f.param_type_2 == CPT2_COLORED_WALLMOUNTED)) { - const std::string &indexstr = selected_item.metadata.getString( - "palette_index", 0); + const auto &indexstr = selected_item.metadata. + getString("palette_index", 0); if (!indexstr.empty()) { s32 index = mystoi(indexstr); if (predicted_f.param_type_2 == CPT2_COLOR) { @@ -3468,11 +3469,10 @@ bool Game::nodePlacement(const ItemDefinition &selected_def, soundmaker->m_player_rightpunch_sound = selected_def.sound_place_failed; return false; } - } catch (InvalidPositionException &e) { + } catch (const InvalidPositionException &e) { errorstream << "Node placement prediction failed for " << selected_def.name << " (places " - << prediction - << ") - Position not loaded" << std::endl; + << prediction << ") - Position not loaded" << std::endl; soundmaker->m_player_rightpunch_sound = selected_def.sound_place_failed; return false; } diff --git a/src/client/wieldmesh.cpp b/src/client/wieldmesh.cpp index ad583210a..387eb17c3 100644 --- a/src/client/wieldmesh.cpp +++ b/src/client/wieldmesh.cpp @@ -294,7 +294,7 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename, } material.setFlag(video::EMF_ANISOTROPIC_FILTER, m_anisotropic_filter); // mipmaps cause "thin black line" artifacts -#if (IRRLICHT_VERSION_MAJOR >= 1 && IRRLICHT_VERSION_MINOR >= 8) || IRRLICHT_VERSION_MAJOR >= 2 +#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR >= 8) || IRRLICHT_VERSION_MAJOR >= 2 material.setFlag(video::EMF_USE_MIP_MAPS, false); #endif if (m_enable_shaders) { @@ -303,23 +303,26 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename, } } -scene::SMesh *createSpecialNodeMesh(Client *client, content_t id, std::vector *colors, const ContentFeatures &f) +static scene::SMesh *createSpecialNodeMesh(Client *client, MapNode n, + std::vector *colors, const ContentFeatures &f) { MeshMakeData mesh_make_data(client, false); MeshCollector collector; mesh_make_data.setSmoothLighting(false); MapblockMeshGenerator gen(&mesh_make_data, &collector); - u8 param2 = 0; - if (f.param_type_2 == CPT2_WALLMOUNTED || + + if (n.getParam2()) { + // keep it + } else if (f.param_type_2 == CPT2_WALLMOUNTED || f.param_type_2 == CPT2_COLORED_WALLMOUNTED) { if (f.drawtype == NDT_TORCHLIKE) - param2 = 1; + n.setParam2(1); else if (f.drawtype == NDT_SIGNLIKE || f.drawtype == NDT_NODEBOX || f.drawtype == NDT_MESH) - param2 = 4; + n.setParam2(4); } - gen.renderSingle(id, param2); + gen.renderSingle(n.getContent(), n.getParam2()); colors->clear(); scene::SMesh *mesh = new scene::SMesh(); @@ -413,9 +416,12 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che case NDT_LIQUID: setCube(f, def.wield_scale); break; - default: + default: { // Render non-trivial drawtypes like the actual node - mesh = createSpecialNodeMesh(client, id, &m_colors, f); + MapNode n(id); + n.setParam2(def.place_param2); + + mesh = createSpecialNodeMesh(client, n, &m_colors, f); changeToMesh(mesh); mesh->drop(); m_meshnode->setScale( @@ -423,6 +429,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che / (BS * f.visual_scale)); break; } + } u32 material_count = m_meshnode->getMaterialCount(); for (u32 i = 0; i < material_count; ++i) { @@ -585,12 +592,16 @@ void getItemMesh(Client *client, const ItemStack &item, ItemMesh *result) result->buffer_colors.emplace_back(l0.has_color, l0.color); break; } - default: + default: { // Render non-trivial drawtypes like the actual node - mesh = createSpecialNodeMesh(client, id, &result->buffer_colors, f); + MapNode n(id); + n.setParam2(def.place_param2); + + mesh = createSpecialNodeMesh(client, n, &result->buffer_colors, f); scaleMesh(mesh, v3f(0.12, 0.12, 0.12)); break; } + } u32 mc = mesh->getMeshBufferCount(); for (u32 i = 0; i < mc; ++i) { diff --git a/src/itemdef.cpp b/src/itemdef.cpp index 5fb1e4c47..d79d6b263 100644 --- a/src/itemdef.cpp +++ b/src/itemdef.cpp @@ -71,13 +71,11 @@ ItemDefinition& ItemDefinition::operator=(const ItemDefinition &def) stack_max = def.stack_max; usable = def.usable; liquids_pointable = def.liquids_pointable; - if(def.tool_capabilities) - { - tool_capabilities = new ToolCapabilities( - *def.tool_capabilities); - } + if (def.tool_capabilities) + tool_capabilities = new ToolCapabilities(*def.tool_capabilities); groups = def.groups; node_placement_prediction = def.node_placement_prediction; + place_param2 = def.place_param2; sound_place = def.sound_place; sound_place_failed = def.sound_place_failed; range = def.range; @@ -120,8 +118,8 @@ void ItemDefinition::reset() sound_place = SimpleSoundSpec(); sound_place_failed = SimpleSoundSpec(); range = -1; - node_placement_prediction = ""; + place_param2 = 0; } void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const @@ -166,6 +164,8 @@ void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const os << serializeString16(wield_overlay); os << serializeString16(short_description); + + os << place_param2; } void ItemDefinition::deSerialize(std::istream &is) @@ -219,6 +219,8 @@ void ItemDefinition::deSerialize(std::istream &is) // block to not need to increase the version. try { short_description = deSerializeString16(is); + + place_param2 = readU8(is); // 0 if missing } catch(SerializationError &e) {}; } diff --git a/src/itemdef.h b/src/itemdef.h index ebf0d3527..3e302840f 100644 --- a/src/itemdef.h +++ b/src/itemdef.h @@ -86,6 +86,7 @@ struct ItemDefinition // Server will update the precise end result a moment later. // "" = no prediction std::string node_placement_prediction; + u8 place_param2; /* Some helpful methods diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 6995f6b61..eca0c89d1 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -119,6 +119,8 @@ void read_item_definition(lua_State* L, int index, // "" = no prediction getstringfield(L, index, "node_placement_prediction", def.node_placement_prediction); + + getintfield(L, index, "place_param2", def.place_param2); } /******************************************************************************/ From 13b50f55a45b8e68a787e7793d5e6e612d95a5a0 Mon Sep 17 00:00:00 2001 From: Lejo Date: Tue, 9 Mar 2021 00:57:12 +0100 Subject: [PATCH 083/110] Fix missing jsoncpp in the Docker image --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 871ca9825..33eba64ca 100644 --- a/Dockerfile +++ b/Dockerfile @@ -51,7 +51,7 @@ RUN mkdir build && \ FROM alpine:3.11 -RUN apk add --no-cache sqlite-libs curl gmp libstdc++ libgcc libpq luajit && \ +RUN apk add --no-cache sqlite-libs curl gmp libstdc++ libgcc libpq luajit jsoncpp && \ adduser -D minetest --uid 30000 -h /var/lib/minetest && \ chown -R minetest:minetest /var/lib/minetest From 3579dd21867598ff30867ebd68b690c85ba14f9b Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 17 May 2020 01:03:33 +0200 Subject: [PATCH 084/110] Restore Irrlicht 1.9 support --- misc/Info.plist | 6 +++++ src/client/render/interlaced.cpp | 4 ++++ src/client/renderingengine.cpp | 2 ++ src/client/sky.cpp | 5 ++-- src/gui/guiButton.cpp | 7 ++++++ src/gui/guiButton.h | 35 ++++++++++++++++++---------- src/irrlicht_changes/static_text.cpp | 6 +++++ src/irrlicht_changes/static_text.h | 5 ++++ 8 files changed, 56 insertions(+), 14 deletions(-) diff --git a/misc/Info.plist b/misc/Info.plist index 1498ee474..0491d2fc1 100644 --- a/misc/Info.plist +++ b/misc/Info.plist @@ -8,7 +8,13 @@ minetest CFBundleIconFile minetest-icon.icns + CFBundleName + Minetest + CFBundleDisplayName + Minetest CFBundleIdentifier net.minetest.minetest + NSHighResolutionCapable + diff --git a/src/client/render/interlaced.cpp b/src/client/render/interlaced.cpp index ce8e92f21..3f79a8eb5 100644 --- a/src/client/render/interlaced.cpp +++ b/src/client/render/interlaced.cpp @@ -35,7 +35,11 @@ void RenderingCoreInterlaced::initMaterial() IShaderSource *s = client->getShaderSource(); mat.UseMipMaps = false; mat.ZBuffer = false; +#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8 + mat.ZWriteEnable = video::EZW_OFF; +#else mat.ZWriteEnable = false; +#endif u32 shader = s->getShader("3d_interlaced_merge", TILE_MATERIAL_BASIC); mat.MaterialType = s->getShaderInfo(shader).material; for (int k = 0; k < 3; ++k) { diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp index 99ff8c1ee..055a555ab 100644 --- a/src/client/renderingengine.cpp +++ b/src/client/renderingengine.cpp @@ -325,9 +325,11 @@ static bool getWindowHandle(irr::video::IVideoDriver *driver, HWND &hWnd) const video::SExposedVideoData exposedData = driver->getExposedVideoData(); switch (driver->getDriverType()) { +#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9 case video::EDT_DIRECT3D8: hWnd = reinterpret_cast(exposedData.D3D8.HWnd); break; +#endif case video::EDT_DIRECT3D9: hWnd = reinterpret_cast(exposedData.D3D9.HWnd); break; diff --git a/src/client/sky.cpp b/src/client/sky.cpp index 3a40321dd..caf695e7a 100644 --- a/src/client/sky.cpp +++ b/src/client/sky.cpp @@ -39,12 +39,13 @@ static video::SMaterial baseMaterial() { video::SMaterial mat; mat.Lighting = false; -#if ENABLE_GLES +#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8 mat.ZBuffer = video::ECFN_DISABLED; + mat.ZWriteEnable = video::EZW_OFF; #else + mat.ZWriteEnable = false; mat.ZBuffer = video::ECFN_NEVER; #endif - mat.ZWriteEnable = false; mat.AntiAliasing = 0; mat.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE; mat.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; diff --git a/src/gui/guiButton.cpp b/src/gui/guiButton.cpp index b98e5de82..d6dbddf54 100644 --- a/src/gui/guiButton.cpp +++ b/src/gui/guiButton.cpp @@ -506,6 +506,13 @@ video::SColor GUIButton::getOverrideColor() const return OverrideColor; } +#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8 +video::SColor GUIButton::getActiveColor() const +{ + return video::SColor(0,0,0,0); // unused? +} +#endif + void GUIButton::enableOverrideColor(bool enable) { OverrideColorEnabled = enable; diff --git a/src/gui/guiButton.h b/src/gui/guiButton.h index 4e1b04aac..834405f51 100644 --- a/src/gui/guiButton.h +++ b/src/gui/guiButton.h @@ -69,6 +69,12 @@ using namespace irr; class ISimpleTextureSource; +#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR <= 8) +#define OVERRIDE_19 +#else +#define OVERRIDE_19 override +#endif + class GUIButton : public gui::IGUIButton { public: @@ -97,22 +103,27 @@ public: virtual gui::IGUIFont* getActiveFont() const override; //! Sets another color for the button text. - virtual void setOverrideColor(video::SColor color); + virtual void setOverrideColor(video::SColor color) OVERRIDE_19; //! Gets the override color - virtual video::SColor getOverrideColor(void) const; + virtual video::SColor getOverrideColor(void) const OVERRIDE_19; + + #if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8 + //! Gets the currently used text color + virtual video::SColor getActiveColor() const override; + #endif //! Sets if the button text should use the override color or the color in the gui skin. - virtual void enableOverrideColor(bool enable); + virtual void enableOverrideColor(bool enable) OVERRIDE_19; //! Checks if an override color is enabled - virtual bool isOverrideColorEnabled(void) const; + virtual bool isOverrideColorEnabled(void) const OVERRIDE_19; // PATCH //! Sets an image which should be displayed on the button when it is in the given state. virtual void setImage(gui::EGUI_BUTTON_IMAGE_STATE state, video::ITexture* image=nullptr, - const core::rect& sourceRect=core::rect(0,0,0,0)); + const core::rect& sourceRect=core::rect(0,0,0,0)) OVERRIDE_19; //! Sets an image which should be displayed on the button when it is in normal state. virtual void setImage(video::ITexture* image=nullptr) override; @@ -141,7 +152,7 @@ public: */ virtual void setSprite(gui::EGUI_BUTTON_STATE state, s32 index, video::SColor color=video::SColor(255,255,255,255), - bool loop=false, bool scale=false); + bool loop=false, bool scale=false) OVERRIDE_19; #if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR <= 8) void setSprite(gui::EGUI_BUTTON_STATE state, s32 index, video::SColor color, bool loop) override { @@ -150,16 +161,16 @@ public: #endif //! Get the sprite-index for the given state or -1 when no sprite is set - virtual s32 getSpriteIndex(gui::EGUI_BUTTON_STATE state) const; + virtual s32 getSpriteIndex(gui::EGUI_BUTTON_STATE state) const OVERRIDE_19; //! Get the sprite color for the given state. Color is only used when a sprite is set. - virtual video::SColor getSpriteColor(gui::EGUI_BUTTON_STATE state) const; + virtual video::SColor getSpriteColor(gui::EGUI_BUTTON_STATE state) const OVERRIDE_19; //! Returns if the sprite in the given state does loop - virtual bool getSpriteLoop(gui::EGUI_BUTTON_STATE state) const; + virtual bool getSpriteLoop(gui::EGUI_BUTTON_STATE state) const OVERRIDE_19; //! Returns if the sprite in the given state is scaled - virtual bool getSpriteScale(gui::EGUI_BUTTON_STATE state) const; + virtual bool getSpriteScale(gui::EGUI_BUTTON_STATE state) const OVERRIDE_19; //! Sets if the button should behave like a push button. Which means it //! can be in two states: Normal or Pressed. With a click on the button, @@ -199,13 +210,13 @@ public: virtual bool isScalingImage() const override; //! Get if the shift key was pressed in last EGET_BUTTON_CLICKED event - virtual bool getClickShiftState() const + virtual bool getClickShiftState() const OVERRIDE_19 { return ClickShiftState; } //! Get if the control key was pressed in last EGET_BUTTON_CLICKED event - virtual bool getClickControlState() const + virtual bool getClickControlState() const OVERRIDE_19 { return ClickControlState; } diff --git a/src/irrlicht_changes/static_text.cpp b/src/irrlicht_changes/static_text.cpp index bf61cd64e..a8cc33352 100644 --- a/src/irrlicht_changes/static_text.cpp +++ b/src/irrlicht_changes/static_text.cpp @@ -255,6 +255,12 @@ video::SColor StaticText::getOverrideColor() const return ColoredText.getDefaultColor(); } +#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8 +video::SColor StaticText::getActiveColor() const +{ + return getOverrideColor(); +} +#endif //! Sets if the static text should use the overide color or the //! color in the gui skin. diff --git a/src/irrlicht_changes/static_text.h b/src/irrlicht_changes/static_text.h index 1f111ea56..786129d57 100644 --- a/src/irrlicht_changes/static_text.h +++ b/src/irrlicht_changes/static_text.h @@ -140,6 +140,11 @@ namespace gui virtual video::SColor getOverrideColor() const; #endif + #if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8 + //! Gets the currently used text color + virtual video::SColor getActiveColor() const; + #endif + //! Sets if the static text should use the overide color or the //! color in the gui skin. virtual void enableOverrideColor(bool enable); From 91c9313c87bfec8b44e5adb91b06aba9f343dd53 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Thu, 18 Feb 2021 14:50:47 +0100 Subject: [PATCH 085/110] Switch Irrlicht dependency to our own fork -> https://github.com/minetest/irrlicht --- CMakeLists.txt | 23 ++++++++++++++ README.md | 20 ++++++------- cmake/Modules/FindIrrlicht.cmake | 51 +++++--------------------------- src/CMakeLists.txt | 1 - 4 files changed, 39 insertions(+), 56 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 31e914c76..67a35fda9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,6 +61,29 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") # This is done here so that relative search paths are more reasonable find_package(Irrlicht) +if(BUILD_CLIENT AND NOT IRRLICHT_FOUND) + message(FATAL_ERROR "Irrlicht is required to build the client, but it was not found.") +elseif(IRRLICHT_INCLUDE_DIR STREQUAL "") + message(FATAL_ERROR "Irrlicht headers are required to build the server, but none found.") +endif() + +include(CheckSymbolExists) +set(CMAKE_REQUIRED_INCLUDES ${IRRLICHT_INCLUDE_DIR}) +unset(HAS_FORKED_IRRLICHT CACHE) +check_symbol_exists(IRRLICHT_VERSION_MT "IrrCompileConfig.h" HAS_FORKED_IRRLICHT) +if(NOT HAS_FORKED_IRRLICHT) + string(CONCAT EXPLANATION_MSG + "Irrlicht found, but it is not Minetest's Irrlicht fork. " + "The Minetest team has forked Irrlicht to make their own customizations. " + "It can be found here: https://github.com/minetest/irrlicht") + if(BUILD_CLIENT) + message(FATAL_ERROR "${EXPLANATION_MSG}\n" + "Building the client with upstream Irrlicht is no longer possible.") + else() + message(WARNING "${EXPLANATION_MSG}\n" + "The server can still be built with upstream Irrlicht but this is DISCOURAGED.") + endif() +endif() # Installation diff --git a/README.md b/README.md index 1d8f754fe..8e2f1be57 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,7 @@ Compiling |------------|---------|------------| | GCC | 4.9+ | Can be replaced with Clang 3.4+ | | CMake | 2.6+ | | -| Irrlicht | 1.7.3+ | | +| Irrlicht | - | Custom version required, see https://github.com/minetest/irrlicht | | SQLite3 | 3.0+ | | | LuaJIT | 2.0+ | Bundled Lua 5.1 is used if not present | | GMP | 5.0.0+ | Bundled mini-GMP is used if not present | @@ -142,19 +142,19 @@ Compiling For Debian/Ubuntu users: - sudo apt install g++ make libc6-dev libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev + sudo apt install g++ make libc6-dev cmake libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev For Fedora users: - sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel irrlicht-devel bzip2-libs gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel doxygen spatialindex-devel bzip2-devel + sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel For Arch users: - sudo pacman -S base-devel libcurl-gnutls cmake libxxf86vm irrlicht libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses + sudo pacman -S base-devel libcurl-gnutls cmake libxxf86vm libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses For Alpine users: - sudo apk add build-base irrlicht-dev cmake bzip2-dev libpng-dev jpeg-dev libxxf86vm-dev mesa-dev sqlite-dev libogg-dev libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev gmp-dev jsoncpp-dev luajit-dev + sudo apk add build-base cmake libpng-dev jpeg-dev libxxf86vm-dev mesa-dev sqlite-dev libogg-dev libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev gmp-dev jsoncpp-dev luajit-dev #### Download @@ -209,8 +209,8 @@ Run it: - You can disable the client build by specifying `-DBUILD_CLIENT=FALSE`. - You can select between Release and Debug build by `-DCMAKE_BUILD_TYPE=`. - Debug build is slower, but gives much more useful output in a debugger. -- If you build a bare server you don't need to have Irrlicht installed. - - In that case use `-DIRRLICHT_SOURCE_DIR=/the/irrlicht/source`. +- If you build a bare server you don't need to have the Irrlicht library installed. + - In that case use `-DIRRLICHT_INCLUDE_DIR=/some/where/irrlicht/include`. ### CMake options @@ -246,8 +246,6 @@ General options and their default values: Library specific options: - BZIP2_INCLUDE_DIR - Linux only; directory where bzlib.h is located - BZIP2_LIBRARY - Linux only; path to libbz2.a/libbz2.so CURL_DLL - Only if building with cURL on Windows; path to libcurl.dll CURL_INCLUDE_DIR - Only if building with cURL; directory where curl.h is located CURL_LIBRARY - Only if building with cURL; path to libcurl.a/libcurl.so/libcurl.lib @@ -276,7 +274,6 @@ Library specific options: SPATIAL_LIBRARY - Only when building with LibSpatial; path to libspatialindex_c.so/spatialindex-32.lib LUA_INCLUDE_DIR - Only if you want to use LuaJIT; directory where luajit.h is located LUA_LIBRARY - Only if you want to use LuaJIT; path to libluajit.a/libluajit.so - MINGWM10_DLL - Only if compiling with MinGW; path to mingwm10.dll OGG_DLL - Only if building with sound on Windows; path to libogg.dll OGG_INCLUDE_DIR - Only if building with sound; directory that contains an ogg directory which contains ogg.h OGG_LIBRARY - Only if building with sound; path to libogg.a/libogg.so/libogg.dll.a @@ -314,9 +311,10 @@ It is highly recommended to use vcpkg as package manager. After you successfully built vcpkg you can easily install the required libraries: ```powershell -vcpkg install irrlicht zlib curl[winssl] openal-soft libvorbis libogg sqlite3 freetype luajit gmp jsoncpp --triplet x64-windows +vcpkg install zlib curl[winssl] openal-soft libvorbis libogg sqlite3 freetype luajit gmp jsoncpp --triplet x64-windows ``` +- **Note that you currently need to build irrlicht on your own** - `curl` is optional, but required to read the serverlist, `curl[winssl]` is required to use the content store. - `openal-soft`, `libvorbis` and `libogg` are optional, but required to use sound. - `freetype` is optional, it allows true-type font rendering. diff --git a/cmake/Modules/FindIrrlicht.cmake b/cmake/Modules/FindIrrlicht.cmake index 6f361e829..8296de685 100644 --- a/cmake/Modules/FindIrrlicht.cmake +++ b/cmake/Modules/FindIrrlicht.cmake @@ -1,44 +1,11 @@ mark_as_advanced(IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR IRRLICHT_DLL) -set(IRRLICHT_SOURCE_DIR "" CACHE PATH "Path to irrlicht source directory (optional)") +# Find include directory and libraries -# Find include directory - -if(NOT IRRLICHT_SOURCE_DIR STREQUAL "") - set(IRRLICHT_SOURCE_DIR_INCLUDE - "${IRRLICHT_SOURCE_DIR}/include" - ) - - set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a Irrlicht Irrlicht.lib) - - if(WIN32) - if(MSVC) - set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Win32-visualstudio") - set(IRRLICHT_LIBRARY_NAMES Irrlicht.lib) - else() - set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Win32-gcc") - set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a libIrrlicht.dll.a) - endif() - else() - set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Linux") - set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a) - endif() - - find_path(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h - PATHS - ${IRRLICHT_SOURCE_DIR_INCLUDE} - NO_DEFAULT_PATH - ) - - find_library(IRRLICHT_LIBRARY NAMES ${IRRLICHT_LIBRARY_NAMES} - PATHS - ${IRRLICHT_SOURCE_DIR_LIBS} - NO_DEFAULT_PATH - ) - -else() +if(TRUE) find_path(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h + DOC "Path to the directory with Irrlicht includes" PATHS /usr/local/include/irrlicht /usr/include/irrlicht @@ -46,7 +13,8 @@ else() PATH_SUFFIXES "include/irrlicht" ) - find_library(IRRLICHT_LIBRARY NAMES libIrrlicht.so libIrrlicht.a Irrlicht + find_library(IRRLICHT_LIBRARY NAMES libIrrlicht Irrlicht + DOC "Path to the Irrlicht library file" PATHS /usr/local/lib /usr/lib @@ -54,19 +22,14 @@ else() ) endif() +# Users will likely need to edit these +mark_as_advanced(CLEAR IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR) # On Windows, find the DLL for installation if(WIN32) # If VCPKG_APPLOCAL_DEPS is ON, dll's are automatically handled by VCPKG if(NOT VCPKG_APPLOCAL_DEPS) - if(MSVC) - set(IRRLICHT_COMPILER "VisualStudio") - else() - set(IRRLICHT_COMPILER "gcc") - endif() find_file(IRRLICHT_DLL NAMES Irrlicht.dll - PATHS - "${IRRLICHT_SOURCE_DIR}/bin/Win32-${IRRLICHT_COMPILER}" DOC "Path of the Irrlicht dll (for installation)" ) endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7bcf8d6c7..62d604820 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -295,7 +295,6 @@ else() endif(NOT HAIKU AND NOT APPLE) find_package(JPEG REQUIRED) - find_package(BZip2 REQUIRED) find_package(PNG REQUIRED) if(APPLE) find_library(CARBON_LIB Carbon REQUIRED) From 75eb28b95994781d52eb2c09303b1cd04e32b6c5 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 7 Mar 2021 13:58:27 +0100 Subject: [PATCH 086/110] CI: update configurations for Irrlicht fork --- .github/workflows/build.yml | 7 +++++-- util/buildbot/buildwin32.sh | 12 +++++++----- util/buildbot/buildwin64.sh | 12 +++++++----- util/ci/common.sh | 10 +++++++++- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a3cc92a8e..ae24dc574 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -124,7 +124,7 @@ jobs: - name: Install deps run: | source ./util/ci/common.sh - install_linux_deps clang-9 + install_linux_deps --old-irr clang-9 - name: Build prometheus-cpp run: | @@ -212,7 +212,10 @@ jobs: msvc: name: VS 2019 ${{ matrix.config.arch }}-${{ matrix.type }} - runs-on: windows-2019 + runs-on: windows-2019 + #### Disabled due to Irrlicht switch + if: false + #### Disabled due to Irrlicht switch env: VCPKG_VERSION: 0bf3923f9fab4001c00f0f429682a0853b5749e0 # 2020.11 diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh index a296d9999..715a89822 100755 --- a/util/buildbot/buildwin32.sh +++ b/util/buildbot/buildwin32.sh @@ -31,7 +31,7 @@ if [ -z "$toolchain_file" ]; then fi echo "Using $toolchain_file" -irrlicht_version=1.8.4 +irrlicht_version=1.9.0mt0 ogg_version=1.3.2 vorbis_version=1.3.5 curl_version=7.65.3 @@ -48,7 +48,7 @@ mkdir -p $libdir cd $builddir # Get stuff -[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget http://minetest.kitsunemimi.pw/irrlicht-$irrlicht_version-win32.zip \ +[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget https://github.com/minetest/irrlicht/releases/download/$irrlicht_version/win32.zip \ -c -O $packagedir/irrlicht-$irrlicht_version.zip [ -e $packagedir/zlib-$zlib_version.zip ] || wget http://minetest.kitsunemimi.pw/zlib-$zlib_version-win32.zip \ -c -O $packagedir/zlib-$zlib_version.zip @@ -102,6 +102,8 @@ if [ "x$NO_MINETEST_GAME" = "x" ]; then cd .. fi +irr_dlls=$(echo $libdir/irrlicht/bin/*.dll | tr ' ' ';') + # Build the thing [ -d _build ] && rm -Rf _build/ mkdir _build @@ -118,9 +120,9 @@ cmake .. \ -DENABLE_FREETYPE=1 \ -DENABLE_LEVELDB=1 \ \ - -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include \ - -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/Win32-gcc/libIrrlicht.dll.a \ - -DIRRLICHT_DLL=$libdir/irrlicht/bin/Win32-gcc/Irrlicht.dll \ + -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include/irrlicht \ + -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/libIrrlicht.dll.a \ + -DIRRLICHT_DLL="$irr_dlls" \ \ -DZLIB_INCLUDE_DIR=$libdir/zlib/include \ -DZLIB_LIBRARIES=$libdir/zlib/lib/libz.dll.a \ diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh index 94e009c29..226ef84c1 100755 --- a/util/buildbot/buildwin64.sh +++ b/util/buildbot/buildwin64.sh @@ -20,7 +20,7 @@ packagedir=$builddir/packages libdir=$builddir/libs toolchain_file=$dir/toolchain_x86_64-w64-mingw32.cmake -irrlicht_version=1.8.4 +irrlicht_version=1.9.0mt0 ogg_version=1.3.2 vorbis_version=1.3.5 curl_version=7.65.3 @@ -37,7 +37,7 @@ mkdir -p $libdir cd $builddir # Get stuff -[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget http://minetest.kitsunemimi.pw/irrlicht-$irrlicht_version-win64.zip \ +[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget https://github.com/minetest/irrlicht/releases/download/$irrlicht_version/win64.zip \ -c -O $packagedir/irrlicht-$irrlicht_version.zip [ -e $packagedir/zlib-$zlib_version.zip ] || wget http://minetest.kitsunemimi.pw/zlib-$zlib_version-win64.zip \ -c -O $packagedir/zlib-$zlib_version.zip @@ -92,6 +92,8 @@ if [ "x$NO_MINETEST_GAME" = "x" ]; then cd .. fi +irr_dlls=$(echo $libdir/irrlicht/bin/*.dll | tr ' ' ';') + # Build the thing [ -d _build ] && rm -Rf _build/ mkdir _build @@ -108,9 +110,9 @@ cmake .. \ -DENABLE_FREETYPE=1 \ -DENABLE_LEVELDB=1 \ \ - -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include \ - -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/Win64-gcc/libIrrlicht.dll.a \ - -DIRRLICHT_DLL=$libdir/irrlicht/bin/Win64-gcc/Irrlicht.dll \ + -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include/irrlicht \ + -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/libIrrlicht.dll.a \ + -DIRRLICHT_DLL="$irr_dlls" \ \ -DZLIB_INCLUDE_DIR=$libdir/zlib/include \ -DZLIB_LIBRARIES=$libdir/zlib/lib/libz.dll.a \ diff --git a/util/ci/common.sh b/util/ci/common.sh index 7523fa7ff..d73c31b2f 100644 --- a/util/ci/common.sh +++ b/util/ci/common.sh @@ -2,12 +2,20 @@ # Linux build only install_linux_deps() { - local pkgs=(libirrlicht-dev cmake libbz2-dev libpng-dev \ + local pkgs=(cmake libpng-dev \ libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev \ libhiredis-dev libogg-dev libgmp-dev libvorbis-dev libopenal-dev \ gettext libpq-dev postgresql-server-dev-all libleveldb-dev \ libcurl4-openssl-dev) + if [[ "$1" == "--old-irr" ]]; then + shift + pkgs+=(libirrlicht-dev) + else + wget "https://github.com/minetest/irrlicht/releases/download/1.9.0mt0/ubuntu-bionic.tar.gz" + sudo tar -xaf ubuntu-bionic.tar.gz -C /usr/local + fi + sudo apt-get update sudo apt-get install -y --no-install-recommends ${pkgs[@]} "$@" } From bb1c4badfbd1a81922fcb56cbe6c8427a868f0f8 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Wed, 10 Mar 2021 14:48:53 +0100 Subject: [PATCH 087/110] Clean up cmake DLL installation and other minor things --- CMakeLists.txt | 5 +--- README.md | 6 ++-- cmake/Modules/FindGettextLib.cmake | 9 ------ src/CMakeLists.txt | 47 ++++++++++++------------------ util/buildbot/buildwin32.sh | 8 ++--- util/buildbot/buildwin64.sh | 8 ++--- 6 files changed, 29 insertions(+), 54 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 67a35fda9..e4bda3afb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,5 @@ cmake_minimum_required(VERSION 3.5) -cmake_policy(SET CMP0025 OLD) - # This can be read from ${PROJECT_NAME} after project() is called project(minetest) set(PROJECT_NAME_CAPITALIZED "Minetest") @@ -192,7 +190,6 @@ install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/devtest" DESTINATION "${SHA if(BUILD_CLIENT) install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/client/shaders" DESTINATION "${SHAREDIR}/client") install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/textures/base/pack" DESTINATION "${SHAREDIR}/textures/base") - install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fonts" DESTINATION "${SHAREDIR}") if(RUN_IN_PLACE) install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/clientmods" DESTINATION "${SHAREDIR}") install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/client/serverlist" DESTINATION "${SHAREDIR}/client") @@ -237,7 +234,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") message(FATAL_ERROR "Insufficient gcc version, found ${CMAKE_CXX_COMPILER_VERSION}. " "Version ${GCC_MINIMUM_VERSION} or higher is required.") endif() -elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +elseif(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?Clang") if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "${CLANG_MINIMUM_VERSION}") message(FATAL_ERROR "Insufficient clang version, found ${CMAKE_CXX_COMPILER_VERSION}. " "Version ${CLANG_MINIMUM_VERSION} or higher is required.") diff --git a/README.md b/README.md index 8e2f1be57..e767f1fe3 100644 --- a/README.md +++ b/README.md @@ -255,8 +255,7 @@ Library specific options: FREETYPE_INCLUDE_DIR_ft2build - Only if building with FreeType 2; directory that contains ft2build.h FREETYPE_LIBRARY - Only if building with FreeType 2; path to libfreetype.a/libfreetype.so/freetype.lib FREETYPE_DLL - Only if building with FreeType 2 on Windows; path to libfreetype.dll - GETTEXT_DLL - Only when building with gettext on Windows; path to libintl3.dll - GETTEXT_ICONV_DLL - Only when building with gettext on Windows; path to libiconv2.dll + GETTEXT_DLL - Only when building with gettext on Windows; paths to libintl + libiconv DLLs GETTEXT_INCLUDE_DIR - Only when building with gettext; directory that contains iconv.h GETTEXT_LIBRARY - Only when building with gettext on Windows; path to libintl.dll.a GETTEXT_MSGFMT - Only when building with gettext; path to msgfmt/msgfmt.exe @@ -284,9 +283,8 @@ Library specific options: OPENGLES2_LIBRARY - Only if building with GLES; path to libGLESv2.a/libGLESv2.so SQLITE3_INCLUDE_DIR - Directory that contains sqlite3.h SQLITE3_LIBRARY - Path to libsqlite3.a/libsqlite3.so/sqlite3.lib - VORBISFILE_DLL - Only if building with sound on Windows; path to libvorbisfile-3.dll VORBISFILE_LIBRARY - Only if building with sound; path to libvorbisfile.a/libvorbisfile.so/libvorbisfile.dll.a - VORBIS_DLL - Only if building with sound on Windows; path to libvorbis-0.dll + VORBIS_DLL - Only if building with sound on Windows; paths to vorbis DLLs VORBIS_INCLUDE_DIR - Only if building with sound; directory that contains a directory vorbis with vorbisenc.h inside VORBIS_LIBRARY - Only if building with sound; path to libvorbis.a/libvorbis.so/libvorbis.dll.a XXF86VM_LIBRARY - Only on Linux; path to libXXf86vm.a/libXXf86vm.so diff --git a/cmake/Modules/FindGettextLib.cmake b/cmake/Modules/FindGettextLib.cmake index 529452a4a..b7681827c 100644 --- a/cmake/Modules/FindGettextLib.cmake +++ b/cmake/Modules/FindGettextLib.cmake @@ -42,15 +42,6 @@ if(WIN32) NAMES ${GETTEXT_LIB_NAMES} PATHS "${CUSTOM_GETTEXT_PATH}/lib" DOC "GetText library") - find_file(GETTEXT_DLL - NAMES libintl.dll intl.dll libintl3.dll intl3.dll - PATHS "${CUSTOM_GETTEXT_PATH}/bin" "${CUSTOM_GETTEXT_PATH}/lib" - DOC "gettext *intl*.dll") - find_file(GETTEXT_ICONV_DLL - NAMES libiconv2.dll - PATHS "${CUSTOM_GETTEXT_PATH}/bin" "${CUSTOM_GETTEXT_PATH}/lib" - DOC "gettext *iconv*.lib") - set(GETTEXT_REQUIRED_VARS ${GETTEXT_REQUIRED_VARS} GETTEXT_DLL GETTEXT_ICONV_DLL) endif(WIN32) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 62d604820..8a6eabccc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -63,14 +63,13 @@ if(ENABLE_GETTEXT) if(GETTEXTLIB_FOUND) if(WIN32) message(STATUS "GetText library: ${GETTEXT_LIBRARY}") - message(STATUS "GetText DLL: ${GETTEXT_DLL}") - message(STATUS "GetText iconv DLL: ${GETTEXT_ICONV_DLL}") + message(STATUS "GetText DLL(s): ${GETTEXT_DLL}") endif() set(USE_GETTEXT TRUE) message(STATUS "GetText enabled; locales found: ${GETTEXT_AVAILABLE_LOCALES}") endif(GETTEXTLIB_FOUND) else() - mark_as_advanced(GETTEXT_ICONV_DLL GETTEXT_INCLUDE_DIR GETTEXT_LIBRARY GETTEXT_MSGFMT) + mark_as_advanced(GETTEXT_INCLUDE_DIR GETTEXT_LIBRARY GETTEXT_MSGFMT) message(STATUS "GetText disabled.") endif() @@ -268,8 +267,10 @@ if(WIN32) if(ENABLE_SOUND) set(OPENAL_DLL "" CACHE FILEPATH "Path to OpenAL32.dll for installation (optional)") set(OGG_DLL "" CACHE FILEPATH "Path to libogg.dll for installation (optional)") - set(VORBIS_DLL "" CACHE FILEPATH "Path to libvorbis.dll for installation (optional)") - set(VORBISFILE_DLL "" CACHE FILEPATH "Path to libvorbisfile.dll for installation (optional)") + set(VORBIS_DLL "" CACHE FILEPATH "Path to Vorbis DLLs for installation (optional)") + endif() + if(USE_GETTEXT) + set(GETTEXT_DLL "" CACHE FILEPATH "Path to Intl/Iconv DLLs for installation (optional)") endif() if(USE_LUAJIT) set(LUA_DLL "" CACHE FILEPATH "Path to luajit-5.1.dll for installation (optional)") @@ -712,7 +713,7 @@ if(MSVC) # Flags that cannot be shared between cl and clang-cl # https://clang.llvm.org/docs/UsersManual.html#clang-cl - if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=lld") # Disable pragma-pack warning @@ -730,7 +731,7 @@ else() else() set(RELEASE_WARNING_FLAGS "") endif() - if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + if(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?Clang") set(WARNING_FLAGS "${WARNING_FLAGS} -Wsign-compare") endif() @@ -767,7 +768,7 @@ else() else() set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MATH_FLAGS}") endif() - endif(CMAKE_SYSTEM_NAME MATCHES "(Darwin|BSD|DragonFly)") + endif() set(CMAKE_CXX_FLAGS_SEMIDEBUG "-g -O1 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}") set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}") @@ -804,7 +805,7 @@ if(WIN32) FILES_MATCHING PATTERN "*.dll") else() # Use the old-style way to install dll's - if(USE_SOUND) + if(BUILD_CLIENT AND USE_SOUND) if(OPENAL_DLL) install(FILES ${OPENAL_DLL} DESTINATION ${BINDIR}) endif() @@ -814,9 +815,6 @@ if(WIN32) if(VORBIS_DLL) install(FILES ${VORBIS_DLL} DESTINATION ${BINDIR}) endif() - if(VORBISFILE_DLL) - install(FILES ${VORBISFILE_DLL} DESTINATION ${BINDIR}) - endif() endif() if(CURL_DLL) install(FILES ${CURL_DLL} DESTINATION ${BINDIR}) @@ -824,7 +822,7 @@ if(WIN32) if(ZLIB_DLL) install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR}) endif() - if(FREETYPE_DLL) + if(BUILD_CLIENT AND FREETYPE_DLL) install(FILES ${FREETYPE_DLL} DESTINATION ${BINDIR}) endif() if(SQLITE3_DLL) @@ -836,6 +834,12 @@ if(WIN32) if(LUA_DLL) install(FILES ${LUA_DLL} DESTINATION ${BINDIR}) endif() + if(BUILD_CLIENT AND IRRLICHT_DLL) + install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR}) + endif() + if(BUILD_CLIENT AND USE_GETTEXT AND GETTEXT_DLL) + install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR}) + endif() endif() endif() @@ -863,6 +867,7 @@ if(BUILD_CLIENT) endforeach() endif() + # Install necessary fonts depending on configuration if(USE_FREETYPE) install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../fonts" DESTINATION "${SHAREDIR}" FILES_MATCHING PATTERN "*.ttf" PATTERN "*.txt") @@ -870,22 +875,6 @@ if(BUILD_CLIENT) install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../fonts" DESTINATION "${SHAREDIR}" FILES_MATCHING PATTERN "*.png" PATTERN "*.xml") endif() - - if(WIN32) - if(NOT VCPKG_APPLOCAL_DEPS) - if(DEFINED IRRLICHT_DLL) - install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR}) - endif() - if(USE_GETTEXT) - if(DEFINED GETTEXT_DLL) - install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR}) - endif() - if(DEFINED GETTEXT_ICONV_DLL) - install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR}) - endif() - endif() - endif() - endif() endif(BUILD_CLIENT) if(BUILD_SERVER) diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh index 715a89822..db3a23375 100755 --- a/util/buildbot/buildwin32.sh +++ b/util/buildbot/buildwin32.sh @@ -103,6 +103,8 @@ if [ "x$NO_MINETEST_GAME" = "x" ]; then fi irr_dlls=$(echo $libdir/irrlicht/bin/*.dll | tr ' ' ';') +vorbis_dlls=$(echo $libdir/libvorbis/bin/libvorbis{,file}-*.dll | tr ' ' ';') +gettext_dlls=$(echo $libdir/gettext/bin/lib{intl,iconv}-*.dll | tr ' ' ';') # Build the thing [ -d _build ] && rm -Rf _build/ @@ -137,9 +139,8 @@ cmake .. \ \ -DVORBIS_INCLUDE_DIR=$libdir/libvorbis/include \ -DVORBIS_LIBRARY=$libdir/libvorbis/lib/libvorbis.dll.a \ - -DVORBIS_DLL=$libdir/libvorbis/bin/libvorbis-0.dll \ + -DVORBIS_DLL="$vorbis_dlls" \ -DVORBISFILE_LIBRARY=$libdir/libvorbis/lib/libvorbisfile.dll.a \ - -DVORBISFILE_DLL=$libdir/libvorbis/bin/libvorbisfile-3.dll \ \ -DOPENAL_INCLUDE_DIR=$libdir/openal_stripped/include/AL \ -DOPENAL_LIBRARY=$libdir/openal_stripped/lib/libOpenAL32.dll.a \ @@ -150,8 +151,7 @@ cmake .. \ -DCURL_LIBRARY=$libdir/libcurl/lib/libcurl.dll.a \ \ -DGETTEXT_MSGFMT=`which msgfmt` \ - -DGETTEXT_DLL=$libdir/gettext/bin/libintl-8.dll \ - -DGETTEXT_ICONV_DLL=$libdir/gettext/bin/libiconv-2.dll \ + -DGETTEXT_DLL="$gettext_dlls" \ -DGETTEXT_INCLUDE_DIR=$libdir/gettext/include \ -DGETTEXT_LIBRARY=$libdir/gettext/lib/libintl.dll.a \ \ diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh index 226ef84c1..53c6d1ea9 100755 --- a/util/buildbot/buildwin64.sh +++ b/util/buildbot/buildwin64.sh @@ -93,6 +93,8 @@ if [ "x$NO_MINETEST_GAME" = "x" ]; then fi irr_dlls=$(echo $libdir/irrlicht/bin/*.dll | tr ' ' ';') +vorbis_dlls=$(echo $libdir/libvorbis/bin/libvorbis{,file}-*.dll | tr ' ' ';') +gettext_dlls=$(echo $libdir/gettext/bin/lib{intl,iconv}-*.dll | tr ' ' ';') # Build the thing [ -d _build ] && rm -Rf _build/ @@ -127,9 +129,8 @@ cmake .. \ \ -DVORBIS_INCLUDE_DIR=$libdir/libvorbis/include \ -DVORBIS_LIBRARY=$libdir/libvorbis/lib/libvorbis.dll.a \ - -DVORBIS_DLL=$libdir/libvorbis/bin/libvorbis-0.dll \ + -DVORBIS_DLL="$vorbis_dlls" \ -DVORBISFILE_LIBRARY=$libdir/libvorbis/lib/libvorbisfile.dll.a \ - -DVORBISFILE_DLL=$libdir/libvorbis/bin/libvorbisfile-3.dll \ \ -DOPENAL_INCLUDE_DIR=$libdir/openal_stripped/include/AL \ -DOPENAL_LIBRARY=$libdir/openal_stripped/lib/libOpenAL32.dll.a \ @@ -140,8 +141,7 @@ cmake .. \ -DCURL_LIBRARY=$libdir/libcurl/lib/libcurl.dll.a \ \ -DGETTEXT_MSGFMT=`which msgfmt` \ - -DGETTEXT_DLL=$libdir/gettext/bin/libintl-8.dll \ - -DGETTEXT_ICONV_DLL=$libdir/gettext/bin/libiconv-2.dll \ + -DGETTEXT_DLL="$gettext_dlls" \ -DGETTEXT_INCLUDE_DIR=$libdir/gettext/include \ -DGETTEXT_LIBRARY=$libdir/gettext/lib/libintl.dll.a \ \ From f213376b35795982edbdeb2caeb7ca9495b3848e Mon Sep 17 00:00:00 2001 From: sfan5 Date: Wed, 10 Mar 2021 15:27:19 +0100 Subject: [PATCH 088/110] Update Gitlab-CI configuration too --- .gitlab-ci.yml | 45 +++++++++++++++++++++++---------------------- misc/debpkg-control | 11 ++++------- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0441aeaa1..39ff576cf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,16 +9,24 @@ stages: - deploy variables: + IRRLICHT_TAG: "1.9.0mt0" MINETEST_GAME_REPO: "https://github.com/minetest/minetest_game.git" CONTAINER_IMAGE: registry.gitlab.com/$CI_PROJECT_PATH .build_template: stage: build + before_script: + - apt-get update + - apt-get -y install build-essential git cmake libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libleveldb-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev script: + - git clone https://github.com/minetest/irrlicht -b $IRRLICHT_TAG + - cd irrlicht + - cmake . -DBUILD_SHARED_LIBS=OFF + - make -j2 + - cd .. - mkdir cmakebuild - - mkdir -p artifact/minetest/usr/ - cd cmakebuild - - cmake -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DCMAKE_BUILD_TYPE=Release -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE -DENABLE_SYSTEM_JSONCPP=TRUE -DBUILD_SERVER=TRUE .. + - cmake -DIRRLICHT_LIBRARY=$PWD/../irrlicht/lib/Linux/libIrrlicht.a -DIRRLICHT_INCLUDE_DIR=$PWD/../irrlicht/include -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DCMAKE_BUILD_TYPE=Release -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE -DBUILD_SERVER=TRUE .. - make -j2 - make install artifacts: @@ -30,7 +38,7 @@ variables: .debpkg_template: stage: package before_script: - - apt-get update -y + - apt-get update - apt-get install -y git - mkdir -p build/deb/minetest/DEBIAN/ - cp misc/debpkg-control build/deb/minetest/DEBIAN/control @@ -39,6 +47,7 @@ variables: - git clone $MINETEST_GAME_REPO build/deb/minetest/usr/share/minetest/games/minetest_game - rm -rf build/deb/minetest/usr/share/minetest/games/minetest/.git - sed -i 's/DATEPLACEHOLDER/'$(date +%y.%m.%d)'/g' build/deb/minetest/DEBIAN/control + - sed -i 's/JPEG_PLACEHOLDER/'$JPEG_PKG'/g' build/deb/minetest/DEBIAN/control - sed -i 's/LEVELDB_PLACEHOLDER/'$LEVELDB_PKG'/g' build/deb/minetest/DEBIAN/control - cd build/deb/ && dpkg-deb -b minetest/ && mv minetest.deb ../../ artifacts: @@ -49,7 +58,7 @@ variables: .debpkg_install: stage: deploy before_script: - - apt-get update -y + - apt-get update script: - apt-get install -y ./*.deb - minetest --version @@ -63,9 +72,6 @@ variables: build:debian-9: extends: .build_template image: debian:9 - before_script: - - apt-get update -y - - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev package:debian-9: extends: .debpkg_template @@ -74,6 +80,7 @@ package:debian-9: - build:debian-9 variables: LEVELDB_PKG: libleveldb1v5 + JPEG_PKG: libjpeg62-turbo deploy:debian-9: extends: .debpkg_install @@ -86,9 +93,6 @@ deploy:debian-9: build:debian-10: extends: .build_template image: debian:10 - before_script: - - apt-get update -y - - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev package:debian-10: extends: .debpkg_template @@ -97,6 +101,7 @@ package:debian-10: - build:debian-10 variables: LEVELDB_PKG: libleveldb1d + JPEG_PKG: libjpeg62-turbo deploy:debian-10: extends: .debpkg_install @@ -113,9 +118,6 @@ deploy:debian-10: build:ubuntu-16.04: extends: .build_template image: ubuntu:xenial - before_script: - - apt-get update -y - - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev package:ubuntu-16.04: extends: .debpkg_template @@ -124,6 +126,7 @@ package:ubuntu-16.04: - build:ubuntu-16.04 variables: LEVELDB_PKG: libleveldb1v5 + JPEG_PKG: libjpeg-turbo8 deploy:ubuntu-16.04: extends: .debpkg_install @@ -136,9 +139,6 @@ deploy:ubuntu-16.04: build:ubuntu-18.04: extends: .build_template image: ubuntu:bionic - before_script: - - apt-get update -y - - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev package:ubuntu-18.04: extends: .debpkg_template @@ -147,6 +147,7 @@ package:ubuntu-18.04: - build:ubuntu-18.04 variables: LEVELDB_PKG: libleveldb1v5 + JPEG_PKG: libjpeg-turbo8 deploy:ubuntu-18.04: extends: .debpkg_install @@ -163,7 +164,7 @@ build:fedora-28: extends: .build_template image: fedora:28 before_script: - - dnf -y install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel irrlicht-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel + - dnf -y install make git gcc gcc-c++ kernel-devel cmake libjpeg-devel libpng-devel libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel ## ## MinGW for Windows @@ -172,7 +173,7 @@ build:fedora-28: .generic_win_template: image: ubuntu:bionic before_script: - - apt-get update -y + - apt-get update - apt-get install -y wget xz-utils unzip git cmake gettext - wget -nv http://minetest.kitsunemimi.pw/mingw-w64-${WIN_ARCH}_9.2.0_ubuntu18.04.tar.xz -O mingw.tar.xz - tar -xaf mingw.tar.xz -C /usr @@ -183,13 +184,13 @@ build:fedora-28: artifacts: expire_in: 1h paths: - - build/minetest/_build/* + - _build/* .package_win_template: extends: .generic_win_template stage: package script: - - unzip build/minetest/_build/minetest-*.zip + - unzip _build/minetest-*.zip - cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libgcc*.dll minetest-*-win*/bin/ - cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libstdc++*.dll minetest-*-win*/bin/ - cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libwinpthread*.dll minetest-*-win*/bin/ @@ -201,7 +202,7 @@ build:fedora-28: build:win32: extends: .build_win_template script: - - ./util/buildbot/buildwin32.sh build + - EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin32.sh build variables: WIN_ARCH: "i686" @@ -216,7 +217,7 @@ package:win32: build:win64: extends: .build_win_template script: - - ./util/buildbot/buildwin64.sh build + - EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin64.sh build variables: WIN_ARCH: "x86_64" diff --git a/misc/debpkg-control b/misc/debpkg-control index 30dc94088..1fef17fd9 100644 --- a/misc/debpkg-control +++ b/misc/debpkg-control @@ -2,8 +2,8 @@ Section: games Priority: extra Standards-Version: 3.6.2 Package: minetest-staging -Version: 0.4.15-DATEPLACEHOLDER -Depends: libc6, libcurl3-gnutls, libfreetype6, libirrlicht1.8, libjsoncpp1, LEVELDB_PLACEHOLDER, liblua5.1-0, libluajit-5.1-2, libopenal1, libsqlite3-0, libstdc++6, libvorbisfile3, libx11-6, zlib1g +Version: 5.4.0-DATEPLACEHOLDER +Depends: libc6, libcurl3-gnutls, libfreetype6, libgl1, JPEG_PLACEHOLDER, libjsoncpp1, LEVELDB_PLACEHOLDER, libopenal1, libpng16-16, libsqlite3-0, libstdc++6, libvorbisfile3, libx11-6, libxxf86vm1, zlib1g Maintainer: Loic Blot Homepage: https://www.minetest.net/ Vcs-Git: https://github.com/minetest/minetest.git @@ -12,15 +12,12 @@ Architecture: amd64 Build-Depends: cmake, gettext, - libbz2-dev, libcurl4-gnutls-dev, libfreetype6-dev, - libglu1-mesa-dev, - libirrlicht-dev (>= 1.7.0), + libgl1-mesa-dev, libjpeg-dev, libjsoncpp-dev, libleveldb-dev, - libluajit-5.1-dev | liblua5.1-dev, libogg-dev, libopenal-dev, libpng-dev, @@ -28,7 +25,7 @@ Build-Depends: libvorbis-dev, libx11-dev, zlib1g-dev -Description: Multiplayer infinite-world block sandbox (server) +Description: Multiplayer infinite-world block sandbox game Minetest is a minecraft-inspired game written from scratch and licensed under the LGPL (version 2.1 or later). It supports both survival and creative modes along with multiplayer support, dynamic lighting, and an "infinite" map From cff35cf0b328635b2c77c024343f8e7f2d016990 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 12 Mar 2021 19:30:56 +0100 Subject: [PATCH 089/110] Handle mesh load failure without crashing --- src/client/client.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/client/client.cpp b/src/client/client.cpp index ef4a3cdfc..746c6c080 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -1921,6 +1921,8 @@ scene::IAnimatedMesh* Client::getMesh(const std::string &filename, bool cache) scene::IAnimatedMesh *mesh = RenderingEngine::get_scene_manager()->getMesh(rfile); rfile->drop(); + if (!mesh) + return nullptr; mesh->grab(); if (!cache) RenderingEngine::get_mesh_cache()->removeMesh(mesh); From 1bc85a47cb794a4a23cd8a2a1142aa20c1c1cfae Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 12 Mar 2021 19:36:58 +0100 Subject: [PATCH 090/110] Avoid unnecessary copies during media/mesh loading --- src/client/client.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/client/client.cpp b/src/client/client.cpp index 746c6c080..0486bc0a9 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -663,12 +663,15 @@ bool Client::loadMedia(const std::string &data, const std::string &filename, io::IFileSystem *irrfs = RenderingEngine::get_filesystem(); video::IVideoDriver *vdrv = RenderingEngine::get_video_driver(); +#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8 + io::IReadFile *rfile = irrfs->createMemoryReadFile( + data.c_str(), data.size(), "_tempreadfile"); +#else // Silly irrlicht's const-incorrectness Buffer data_rw(data.c_str(), data.size()); - - // Create an irrlicht memory file io::IReadFile *rfile = irrfs->createMemoryReadFile( *data_rw, data_rw.getSize(), "_tempreadfile"); +#endif FATAL_ERROR_IF(!rfile, "Could not create irrlicht memory file."); @@ -1914,9 +1917,14 @@ scene::IAnimatedMesh* Client::getMesh(const std::string &filename, bool cache) // Create the mesh, remove it from cache and return it // This allows unique vertex colors and other properties for each instance +#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8 + io::IReadFile *rfile = RenderingEngine::get_filesystem()->createMemoryReadFile( + data.c_str(), data.size(), filename.c_str()); +#else Buffer data_rw(data.c_str(), data.size()); // Const-incorrect Irrlicht - io::IReadFile *rfile = RenderingEngine::get_filesystem()->createMemoryReadFile( + io::IReadFile *rfile = RenderingEngine::get_filesystem()->createMemoryReadFile( *data_rw, data_rw.getSize(), filename.c_str()); +#endif FATAL_ERROR_IF(!rfile, "Could not create/open RAM file"); scene::IAnimatedMesh *mesh = RenderingEngine::get_scene_manager()->getMesh(rfile); From 051bc9e6624c63c3612e041644ec587b328bae55 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 12 Mar 2021 20:23:11 +0100 Subject: [PATCH 091/110] Enable Irrlicht debug logging with --trace --- src/client/renderingengine.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp index 055a555ab..4f59bbae3 100644 --- a/src/client/renderingengine.cpp +++ b/src/client/renderingengine.cpp @@ -118,6 +118,8 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver) } SIrrlichtCreationParameters params = SIrrlichtCreationParameters(); + if (g_logger.getTraceEnabled()) + params.LoggingLevel = irr::ELL_DEBUG; params.DriverType = driverType; params.WindowSize = core::dimension2d(screen_w, screen_h); params.Bits = bits; From 88b052cbea346fd29120837f5b802427bc889be2 Mon Sep 17 00:00:00 2001 From: HybridDog <3192173+HybridDog@users.noreply.github.com> Date: Sat, 13 Mar 2021 11:18:25 +0100 Subject: [PATCH 092/110] Chatcommands: Show the execution time if the command takes a long time (#10472) --- builtin/game/chat.lua | 20 ++++++++++++++++++-- builtin/settingtypes.txt | 4 ++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/builtin/game/chat.lua b/builtin/game/chat.lua index e05e83a27..bf2d7851e 100644 --- a/builtin/game/chat.lua +++ b/builtin/game/chat.lua @@ -47,6 +47,8 @@ end core.chatcommands = core.registered_chatcommands -- BACKWARDS COMPATIBILITY +local msg_time_threshold = + tonumber(core.settings:get("chatcommand_msg_time_threshold")) or 0.1 core.register_on_chat_message(function(name, message) if message:sub(1,1) ~= "/" then return @@ -73,7 +75,9 @@ core.register_on_chat_message(function(name, message) local has_privs, missing_privs = core.check_player_privs(name, cmd_def.privs) if has_privs then core.set_last_run_mod(cmd_def.mod_origin) + local t_before = minetest.get_us_time() local success, result = cmd_def.func(name, param) + local delay = (minetest.get_us_time() - t_before) / 1000000 if success == false and result == nil then core.chat_send_player(name, "-!- "..S("Invalid command usage.")) local help_def = core.registered_chatcommands["help"] @@ -83,8 +87,20 @@ core.register_on_chat_message(function(name, message) core.chat_send_player(name, helpmsg) end end - elseif result then - core.chat_send_player(name, result) + else + if delay > msg_time_threshold then + -- Show how much time it took to execute the command + if result then + result = result .. + minetest.colorize("#f3d2ff", " (%.5g s)"):format(delay) + else + result = minetest.colorize("#f3d2ff", + "Command execution took %.5f s"):format(delay) + end + end + if result then + core.chat_send_player(name, result) + end end else core.chat_send_player(name, diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 62f1ee2d0..75efe64da 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -1136,6 +1136,10 @@ enable_rollback_recording (Rollback recording) bool false # @name, @message, @timestamp (optional) chat_message_format (Chat message format) string <@name> @message +# If the execution of a chat command takes longer than this specified time in +# seconds, add the time information to the chat command message +chatcommand_msg_time_threshold (Chat command time message threshold) float 0.1 + # A message to be displayed to all clients when the server shuts down. kick_msg_shutdown (Shutdown message) string Server shutting down. From 88f514ad7a849eb4a67b5ee2c41c93856cf3808f Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 15 Mar 2021 09:13:15 +0000 Subject: [PATCH 093/110] Devtest: Fix missing log level in minetest.log (#11068) --- games/devtest/mods/experimental/commands.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/games/devtest/mods/experimental/commands.lua b/games/devtest/mods/experimental/commands.lua index 132b08b0b..8bfa467e1 100644 --- a/games/devtest/mods/experimental/commands.lua +++ b/games/devtest/mods/experimental/commands.lua @@ -215,5 +215,5 @@ minetest.register_chatcommand("test_place_nodes", { }) core.register_on_chatcommand(function(name, command, params) - minetest.log("caught command '"..command.."', issued by '"..name.."'. Parameters: '"..params.."'") + minetest.log("action", "caught command '"..command.."', issued by '"..name.."'. Parameters: '"..params.."'") end) From 91135381421f646e0f6a8d9201b5cdc7e42605e1 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 16 Mar 2021 17:37:24 +0000 Subject: [PATCH 094/110] DevTest: Formspec tests, children getter, better lighttool (#10918) --- games/devtest/mods/testformspec/formspec.lua | 37 +++- games/devtest/mods/testtools/README.md | 21 ++ games/devtest/mods/testtools/init.lua | 196 ++++++++++++++++-- games/devtest/mods/testtools/light.lua | 31 ++- .../textures/testtools_children_getter.png | Bin 0 -> 281 bytes .../textures/testtools_node_meta_editor.png | Bin 0 -> 135 bytes 6 files changed, 253 insertions(+), 32 deletions(-) create mode 100644 games/devtest/mods/testtools/textures/testtools_children_getter.png create mode 100644 games/devtest/mods/testtools/textures/testtools_node_meta_editor.png diff --git a/games/devtest/mods/testformspec/formspec.lua b/games/devtest/mods/testformspec/formspec.lua index 2a2bdad60..501b5e354 100644 --- a/games/devtest/mods/testformspec/formspec.lua +++ b/games/devtest/mods/testformspec/formspec.lua @@ -362,20 +362,51 @@ Number] animated_image[5.5,0.5;5,2;;testformspec_animation.png;4;100] animated_image[5.5,2.75;5,2;;testformspec_animation.jpg;4;100] + ]], + + -- Model + [[ + formspec_version[3] + size[12,13] style[m1;bgcolor=black] - model[0.5,6;4,4;m1;testformspec_character.b3d;testformspec_character.png] - model[5,6;4,4;m2;testformspec_chest.obj;default_chest_top.png,default_chest_top.png,default_chest_side.png,default_chest_side.png,default_chest_front.png,default_chest_inside.png;30,1;true;true] + style[m2;bgcolor=black] + label[5,1;all defaults] + label[5,5.1;angle = 0, 180 +continuous = false +mouse control = false +frame loop range = 0,30] + label[5,9.2;continuous = true +mouse control = true] + model[0.5,0.1;4,4;m1;testformspec_character.b3d;testformspec_character.png] + model[0.5,4.2;4,4;m2;testformspec_character.b3d;testformspec_character.png;0,180;false;false;0,30] + model[0.5,8.3;4,4;m3;testformspec_chest.obj;default_chest_top.png,default_chest_top.png,default_chest_side.png,default_chest_side.png,default_chest_front.png,default_chest_inside.png;30,1;true;true] ]], -- Scroll containers "formspec_version[3]size[12,13]" .. scroll_fs, + + -- Sound + [[ + formspec_version[3] + size[12,13] + style[snd_btn;sound=soundstuff_mono] + style[snd_ibtn;sound=soundstuff_mono] + style[snd_drp;sound=soundstuff_mono] + style[snd_chk;sound=soundstuff_mono] + style[snd_tab;sound=soundstuff_mono] + button[0.5,0.5;2,1;snd_btn;Sound] + image_button[0.5,2;2,1;testformspec_item.png;snd_ibtn;Sound] + dropdown[0.5,4;4;snd_drp;Sound,Two,Three;] + checkbox[0.5,5.5.5;snd_chk;Sound;] + tabheader[0.5,7;8,0.65;snd_tab;Soundtab1,Soundtab2,Soundtab3;1;false;false] + ]], } local function show_test_formspec(pname, page_id) page_id = page_id or 2 - local fs = pages[page_id] .. "tabheader[0,0;8,0.65;maintabs;Real Coord,Styles,Noclip,Hypertext,Tabs,Invs,Anim,ScrollC;" .. page_id .. ";false;false]" + local fs = pages[page_id] .. "tabheader[0,0;8,0.65;maintabs;Real Coord,Styles,Noclip,Hypertext,Tabs,Invs,Anim,Model,ScrollC,Sound;" .. page_id .. ";false;false]" minetest.show_formspec(pname, "testformspec:formspec", fs) end diff --git a/games/devtest/mods/testtools/README.md b/games/devtest/mods/testtools/README.md index 9cfe29ea4..a1eb95ed7 100644 --- a/games/devtest/mods/testtools/README.md +++ b/games/devtest/mods/testtools/README.md @@ -33,6 +33,13 @@ Usage: * Punch node: Make it fall * Place: Try to teleport up to 2 units upwards, then make it fall +## Node Meta Editor +Edit and view metadata of nodes. + +Usage: + +* Punch: Open node metadata editor + ## Entity Rotator Changes the entity rotation (with `set_rotation`). @@ -90,6 +97,13 @@ Usage: * Place: Increase move distance * Sneak+place: Decrease move distance +## Children Getter +Shows list of objects that are attached to an object (aka "children") in chat. + +Usage: +* Punch object: Show children of punched object +* Punch air: Show your own children + ## Entity Visual Scaler Change visual size of entities @@ -97,3 +111,10 @@ Usage: * Punch entity to increase visual size * Sneak+punch entity to decrease visual size + +## Light Tool +Show light level of node. + +Usage: +* Punch: Show light info of node in front of the punched node's side +* Place: Show light info of the node that you touched diff --git a/games/devtest/mods/testtools/init.lua b/games/devtest/mods/testtools/init.lua index d578b264a..1041acdeb 100644 --- a/games/devtest/mods/testtools/init.lua +++ b/games/devtest/mods/testtools/init.lua @@ -3,8 +3,6 @@ local F = minetest.formspec_escape dofile(minetest.get_modpath("testtools") .. "/light.lua") --- TODO: Add a Node Metadata tool - minetest.register_tool("testtools:param2tool", { description = S("Param2 Tool") .."\n".. S("Modify param2 value of nodes") .."\n".. @@ -111,25 +109,6 @@ minetest.register_tool("testtools:node_setter", { end, }) -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname == "testtools:node_setter" then - local playername = player:get_player_name() - local witem = player:get_wielded_item() - if witem:get_name() == "testtools:node_setter" then - if fields.nodename and fields.param2 then - local param2 = tonumber(fields.param2) - if not param2 then - return - end - local meta = witem:get_meta() - meta:set_string("node", fields.nodename) - meta:set_int("node_param2", param2) - player:set_wielded_item(witem) - end - end - end -end) - minetest.register_tool("testtools:remover", { description = S("Remover") .."\n".. S("Punch: Remove pointed node or object"), @@ -634,6 +613,54 @@ minetest.register_tool("testtools:object_attacher", { end, }) +local function print_object(obj) + if obj:is_player() then + return "player '"..obj:get_player_name().."'" + elseif obj:get_luaentity() then + return "LuaEntity '"..obj:get_luaentity().name.."'" + else + return "object" + end +end + +minetest.register_tool("testtools:children_getter", { + description = S("Children Getter") .."\n".. + S("Shows list of objects attached to object") .."\n".. + S("Punch object to show its 'children'") .."\n".. + S("Punch air to show your own 'children'"), + inventory_image = "testtools_children_getter.png", + groups = { testtool = 1, disable_repair = 1 }, + on_use = function(itemstack, user, pointed_thing) + if user and user:is_player() then + local name = user:get_player_name() + local selected_object + local self_name + if pointed_thing.type == "object" then + selected_object = pointed_thing.ref + elseif pointed_thing.type == "nothing" then + selected_object = user + else + return + end + self_name = print_object(selected_object) + local children = selected_object:get_children() + local ret = "" + for c=1, #children do + ret = ret .. "* " .. print_object(children[c]) + if c < #children then + ret = ret .. "\n" + end + end + if ret == "" then + ret = S("No children attached to @1.", self_name) + else + ret = S("Children of @1:", self_name) .. "\n" .. ret + end + minetest.chat_send_player(user:get_player_name(), ret) + end + end, +}) + -- Use loadstring to parse param as a Lua value local function use_loadstring(param, player) -- For security reasons, require 'server' priv, just in case @@ -666,6 +693,68 @@ local function use_loadstring(param, player) return true, errOrResult end +-- Node Meta Editor +local node_meta_posses = {} +local node_meta_latest_keylist = {} + +local function show_node_meta_formspec(user, pos, key, value, keylist) + local textlist + if keylist then + textlist = "textlist[0,0.5;2.5,6.5;keylist;"..keylist.."]" + else + textlist = "" + end + minetest.show_formspec(user:get_player_name(), + "testtools:node_meta_editor", + "size[15,9]".. + "label[0,0;"..F(S("Current keys:")).."]".. + textlist.. + "field[3,0.5;12,1;key;"..F(S("Key"))..";"..F(key).."]".. + "textarea[3,1.5;12,6;value;"..F(S("Value (use empty value to delete key)"))..";"..F(value).."]".. + "button[0,8;3,1;get;"..F(S("Get value")).."]".. + "button[4,8;3,1;set;"..F(S("Set value")).."]".. + "label[0,7.2;"..F(S("pos = @1", minetest.pos_to_string(pos))).."]") +end + +local function get_node_meta_keylist(meta, playername, escaped) + local keys = {} + local ekeys = {} + local mtable = meta:to_table() + for k,_ in pairs(mtable.fields) do + table.insert(keys, k) + if escaped then + table.insert(ekeys, F(k)) + else + table.insert(ekeys, k) + end + end + if playername then + node_meta_latest_keylist[playername] = keys + end + return table.concat(ekeys, ",") +end + +minetest.register_tool("testtools:node_meta_editor", { + description = S("Node Meta Editor") .. "\n" .. + S("Place: Edit node metadata"), + inventory_image = "testtools_node_meta_editor.png", + groups = { testtool = 1, disable_repair = 1 }, + on_place = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + if not user:is_player() then + return itemstack + end + local pos = pointed_thing.under + node_meta_posses[user:get_player_name()] = pos + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + show_node_meta_formspec(user, pos, "", "", get_node_meta_keylist(meta, user:get_player_name(), true)) + return itemstack + end, +}) + minetest.register_on_player_receive_fields(function(player, formname, fields) if not (player and player:is_player()) then return @@ -728,5 +817,70 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) editor_formspec(name, selected_objects[name], prop_to_string(props[key]), sel) return end + elseif formname == "testtools:node_setter" then + local playername = player:get_player_name() + local witem = player:get_wielded_item() + if witem:get_name() == "testtools:node_setter" then + if fields.nodename and fields.param2 then + local param2 = tonumber(fields.param2) + if not param2 then + return + end + local meta = witem:get_meta() + meta:set_string("node", fields.nodename) + meta:set_int("node_param2", param2) + player:set_wielded_item(witem) + end + end + elseif formname == "testtools:node_meta_editor" then + local name = player:get_player_name() + local pos = node_meta_posses[name] + if fields.keylist then + local evnt = minetest.explode_textlist_event(fields.keylist) + if evnt.type == "DCL" or evnt.type == "CHG" then + local keylist_table = node_meta_latest_keylist[name] + if not pos then + return + end + local meta = minetest.get_meta(pos) + if not keylist_table then + return + end + if #keylist_table == 0 then + return + end + local key = keylist_table[evnt.index] + local value = meta:get_string(key) + local keylist_escaped = {} + for k,v in pairs(keylist_table) do + keylist_escaped[k] = F(v) + end + local keylist = table.concat(keylist_escaped, ",") + show_node_meta_formspec(player, pos, key, value, keylist) + return + end + elseif fields.key and fields.key ~= "" and fields.value then + if not pos then + return + end + local meta = minetest.get_meta(pos) + if fields.get then + local value = meta:get_string(fields.key) + show_node_meta_formspec(player, pos, fields.key, value, + get_node_meta_keylist(meta, name, true)) + return + elseif fields.set then + meta:set_string(fields.key, fields.value) + show_node_meta_formspec(player, pos, fields.key, fields.value, + get_node_meta_keylist(meta, name, true)) + return + end + end end end) + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + node_meta_latest_keylist[name] = nil + node_meta_posses[name] = nil +end) diff --git a/games/devtest/mods/testtools/light.lua b/games/devtest/mods/testtools/light.lua index a9458ca6b..afca9a489 100644 --- a/games/devtest/mods/testtools/light.lua +++ b/games/devtest/mods/testtools/light.lua @@ -1,22 +1,37 @@ local S = minetest.get_translator("testtools") -minetest.register_tool("testtools:lighttool", { - description = S("Light tool"), - inventory_image = "testtools_lighttool.png", - groups = { testtool = 1, disable_repair = 1 }, - on_use = function(itemstack, user, pointed_thing) - local pos = pointed_thing.above +local function get_func(is_place) + return function(itemstack, user, pointed_thing) + local pos + if is_place then + pos = pointed_thing.under + else + pos = pointed_thing.above + end if pointed_thing.type ~= "node" or not pos then return end local node = minetest.get_node(pos) + local pstr = minetest.pos_to_string(pos) local time = minetest.get_timeofday() local sunlight = minetest.get_natural_light(pos) local artificial = minetest.get_artificial_light(node.param1) - local message = ("param1 0x%02x | time %.5f | sunlight %d | artificial %d") - :format(node.param1, time, sunlight, artificial) + local message = ("pos=%s | param1=0x%02x | " .. + "sunlight=%d | artificial=%d | timeofday=%.5f" ) + :format(pstr, node.param1, sunlight, artificial, time) minetest.chat_send_player(user:get_player_name(), message) end +end + +minetest.register_tool("testtools:lighttool", { + description = S("Light Tool") .. "\n" .. + S("Show light values of node") .. "\n" .. + S("Punch: Light of node above touched node") .. "\n" .. + S("Place: Light of touched node itself"), + inventory_image = "testtools_lighttool.png", + groups = { testtool = 1, disable_repair = 1 }, + on_use = get_func(false), + on_place = get_func(true), }) diff --git a/games/devtest/mods/testtools/textures/testtools_children_getter.png b/games/devtest/mods/testtools/textures/testtools_children_getter.png new file mode 100644 index 0000000000000000000000000000000000000000..b7fa340258f97da1ddb42d66eb3cabfa8dc7c092 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=De8Ak0{?)V>TT$X?><>&pI=iG^R)VoT8JM?fLT64!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aiF3`PZ!4!i_=SkPxCq`a;!cwH>PQ#&8|7YKlzS{+iR#ys8}fy zy*eQ+=jxQN;>OBcDGS6prha76m<08%4U9uePm)2xA&Zxinl-Oq?%%`Y5NUUcFyBqe84Pt(6G6R T@8&(AV;DSL{an^LB{Ts5?l4~@ literal 0 HcmV?d00001 diff --git a/games/devtest/mods/testtools/textures/testtools_node_meta_editor.png b/games/devtest/mods/testtools/textures/testtools_node_meta_editor.png new file mode 100644 index 0000000000000000000000000000000000000000..89eafd65cf92dda7565c70cbbc46a4a2d20ca566 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`ex5FlAr*|t3M_v5Ovx5M{yZ~@ z`}*I|p!0$K1v8B{$%X>PDZaC~4R{yqXwsS}~a0j1cRaWG= iV3^44;d}223&YAw%kNGpxaI&fnZeW5&t;ucLK6THcPrii literal 0 HcmV?d00001 From 62e3593944846c0e7395586183986e0f11ad9544 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 15 Mar 2021 01:59:52 +0100 Subject: [PATCH 095/110] Tweak duration_to_string formatting --- src/util/string.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/util/string.h b/src/util/string.h index d4afcaec8..21f1d6877 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -670,15 +670,19 @@ inline const std::string duration_to_string(int sec) std::stringstream ss; if (hour > 0) { - ss << hour << "h "; + ss << hour << "h"; + if (min > 0 || sec > 0) + ss << " "; } if (min > 0) { - ss << min << "m "; + ss << min << "min"; + if (sec > 0) + ss << " "; } if (sec > 0) { - ss << sec << "s "; + ss << sec << "s"; } return ss.str(); From 66b5c086644ac18845731d6f3556d9e7cde4ee28 Mon Sep 17 00:00:00 2001 From: Jean-Patrick Guerrero Date: Tue, 16 Mar 2021 19:55:10 +0100 Subject: [PATCH 096/110] Fix deprecated calls with Irrlicht 1.9 --- src/client/guiscalingfilter.cpp | 2 +- src/client/shader.h | 5 +++-- src/client/tile.cpp | 6 ++---- src/irrlicht_changes/CGUITTFont.cpp | 6 ++---- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/client/guiscalingfilter.cpp b/src/client/guiscalingfilter.cpp index 406c096e6..8c565a52f 100644 --- a/src/client/guiscalingfilter.cpp +++ b/src/client/guiscalingfilter.cpp @@ -129,7 +129,7 @@ video::ITexture *guiScalingResizeCached(video::IVideoDriver *driver, #endif // Convert the scaled image back into a texture. - scaled = driver->addTexture(scalename, destimg, NULL); + scaled = driver->addTexture(scalename, destimg); destimg->drop(); g_txrCache[scalename] = scaled; diff --git a/src/client/shader.h b/src/client/shader.h index 38ab76704..49a563115 100644 --- a/src/client/shader.h +++ b/src/client/shader.h @@ -96,9 +96,10 @@ public: if (has_been_set && std::equal(m_sent, m_sent + count, value)) return; if (is_pixel) - services->setPixelShaderConstant(m_name, value, count); + services->setPixelShaderConstant(services->getPixelShaderConstantID(m_name), value, count); else - services->setVertexShaderConstant(m_name, value, count); + services->setVertexShaderConstant(services->getVertexShaderConstantID(m_name), value, count); + std::copy(value, value + count, m_sent); has_been_set = true; } diff --git a/src/client/tile.cpp b/src/client/tile.cpp index f2639757e..7e3901247 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -837,17 +837,16 @@ static video::IImage *createInventoryCubeImage( image = scaled; } sanity_check(image->getPitch() == 4 * size); - return reinterpret_cast(image->lock()); + return reinterpret_cast(image->getData()); }; auto free_image = [] (video::IImage *image) -> void { - image->unlock(); image->drop(); }; video::IImage *result = driver->createImage(video::ECF_A8R8G8B8, {cube_size, cube_size}); sanity_check(result->getPitch() == 4 * cube_size); result->fill(video::SColor(0x00000000u)); - u32 *target = reinterpret_cast(result->lock()); + u32 *target = reinterpret_cast(result->getData()); // Draws single cube face // `shade_factor` is face brightness, in range [0.0, 1.0] @@ -906,7 +905,6 @@ static video::IImage *createInventoryCubeImage( {0, 5}, {1, 5}, }); - result->unlock(); return result; } diff --git a/src/irrlicht_changes/CGUITTFont.cpp b/src/irrlicht_changes/CGUITTFont.cpp index bd4e700de..960b2320a 100644 --- a/src/irrlicht_changes/CGUITTFont.cpp +++ b/src/irrlicht_changes/CGUITTFont.cpp @@ -103,7 +103,7 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide // Load the monochrome data in. const u32 image_pitch = image->getPitch() / sizeof(u16); - u16* image_data = (u16*)image->lock(); + u16* image_data = (u16*)image->getData(); u8* glyph_data = bits.buffer; for (s32 y = 0; y < (s32)bits.rows; ++y) @@ -119,7 +119,6 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide } image_data += image_pitch; } - image->unlock(); break; } @@ -133,7 +132,7 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide // Load the grayscale data in. const float gray_count = static_cast(bits.num_grays); const u32 image_pitch = image->getPitch() / sizeof(u32); - u32* image_data = (u32*)image->lock(); + u32* image_data = (u32*)image->getData(); u8* glyph_data = bits.buffer; for (s32 y = 0; y < (s32)bits.rows; ++y) { @@ -145,7 +144,6 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide } glyph_data += bits.pitch; } - image->unlock(); break; } default: From 285ba74723695c4b51192dac0e1e17c5d8f880db Mon Sep 17 00:00:00 2001 From: Jean-Patrick Guerrero Date: Tue, 16 Mar 2021 23:28:16 +0100 Subject: [PATCH 097/110] GUIScene: Clear depth buffer + replace deprecated clearZBuffer calls --- doc/lua_api.txt | 3 ++- src/client/camera.cpp | 2 +- src/client/hud.cpp | 2 +- src/client/render/anaglyph.cpp | 2 +- src/gui/guiFormSpecMenu.cpp | 4 +++- src/gui/guiScene.cpp | 15 ++++++++++++--- src/gui/guiScene.h | 1 + 7 files changed, 21 insertions(+), 8 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index c09578a15..abbe88f80 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2299,7 +2299,7 @@ Elements * `frame duration`: Milliseconds between each frame. `0` means the frames don't advance. * `frame start` (Optional): The index of the frame to start on. Default `1`. -### `model[,;,;;;;;;;]` +### `model[,;,;;;;;;;;]` * Show a mesh model. * `name`: Element name that can be used for styling @@ -2313,6 +2313,7 @@ Elements * `frame loop range` (Optional): Range of the animation frames. * Defaults to the full range of all available frames. * Syntax: `,` +* `animation speed` (Optional): Sets the animation speed. Default 0 FPS. ### `item_image[,;,;]` diff --git a/src/client/camera.cpp b/src/client/camera.cpp index 350b685e1..5158d0dd1 100644 --- a/src/client/camera.cpp +++ b/src/client/camera.cpp @@ -664,7 +664,7 @@ void Camera::wield(const ItemStack &item) void Camera::drawWieldedTool(irr::core::matrix4* translation) { // Clear Z buffer so that the wielded tool stays in front of world geometry - m_wieldmgr->getVideoDriver()->clearZBuffer(); + m_wieldmgr->getVideoDriver()->clearBuffers(video::ECBF_DEPTH); // Draw the wielded node (in a separate scene manager) scene::ICameraSceneNode* cam = m_wieldmgr->getActiveCamera(); diff --git a/src/client/hud.cpp b/src/client/hud.cpp index 46736b325..74c1828e3 100644 --- a/src/client/hud.cpp +++ b/src/client/hud.cpp @@ -950,7 +950,7 @@ void drawItemStack( if (imesh && imesh->mesh) { scene::IMesh *mesh = imesh->mesh; - driver->clearZBuffer(); + driver->clearBuffers(video::ECBF_DEPTH); s32 delta = 0; if (rotation_kind < IT_ROT_NONE) { MeshTimeInfo &ti = rotation_time_infos[rotation_kind]; diff --git a/src/client/render/anaglyph.cpp b/src/client/render/anaglyph.cpp index 9ba4464a2..153e77400 100644 --- a/src/client/render/anaglyph.cpp +++ b/src/client/render/anaglyph.cpp @@ -40,7 +40,7 @@ void RenderingCoreAnaglyph::setupMaterial(int color_mask) void RenderingCoreAnaglyph::useEye(bool right) { RenderingCoreStereo::useEye(right); - driver->clearZBuffer(); + driver->clearBuffers(video::ECBF_DEPTH); setupMaterial(right ? video::ECP_GREEN | video::ECP_BLUE : video::ECP_RED); } diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 5aa6dc9ae..5d763a4be 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -2746,7 +2746,7 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element) { std::vector parts = split(element, ';'); - if (parts.size() < 5 || (parts.size() > 9 && + if (parts.size() < 5 || (parts.size() > 10 && m_formspec_version <= FORMSPEC_API_VERSION)) { errorstream << "Invalid model element (" << parts.size() << "): '" << element << "'" << std::endl; @@ -2766,6 +2766,7 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element) bool inf_rotation = is_yes(parts[6]); bool mousectrl = is_yes(parts[7]) || parts[7].empty(); // default true std::vector frame_loop = split(parts[8], ','); + std::string speed = unescape_string(parts[9]); MY_CHECKPOS("model", 0); MY_CHECKGEOM("model", 1); @@ -2825,6 +2826,7 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element) } e->setFrameLoop(frame_loop_begin, frame_loop_end); + e->setAnimationSpeed(stof(speed)); auto style = getStyleForElement("model", spec.fname); e->setStyles(style); diff --git a/src/gui/guiScene.cpp b/src/gui/guiScene.cpp index 5f4c50b91..f0cfbec5e 100644 --- a/src/gui/guiScene.cpp +++ b/src/gui/guiScene.cpp @@ -34,9 +34,6 @@ GUIScene::GUIScene(gui::IGUIEnvironment *env, scene::ISceneManager *smgr, m_cam = m_smgr->addCameraSceneNode(0, v3f(0.f, 0.f, -100.f), v3f(0.f)); m_cam->setFOV(30.f * core::DEGTORAD); - scene::ILightSceneNode *light = m_smgr->addLightSceneNode(m_cam); - light->setRadius(1000.f); - m_smgr->getParameters()->setAttribute(scene::ALLOW_ZWRITE_ON_TRANSPARENT, true); } @@ -60,6 +57,7 @@ scene::IAnimatedMeshSceneNode *GUIScene::setMesh(scene::IAnimatedMesh *mesh) m_mesh = m_smgr->addAnimatedMeshSceneNode(mesh); m_mesh->setPosition(-m_mesh->getBoundingBox().getCenter()); m_mesh->animateJoints(); + return m_mesh; } @@ -73,10 +71,13 @@ void GUIScene::setTexture(u32 idx, video::ITexture *texture) material.setFlag(video::EMF_FOG_ENABLE, true); material.setFlag(video::EMF_BILINEAR_FILTER, false); material.setFlag(video::EMF_BACK_FACE_CULLING, false); + material.setFlag(video::EMF_ZWRITE_ENABLE, true); } void GUIScene::draw() { + m_driver->clearBuffers(video::ECBF_DEPTH); + // Control rotation speed based on time u64 new_time = porting::getTimeMs(); u64 dtime_ms = 0; @@ -161,6 +162,14 @@ void GUIScene::setFrameLoop(s32 begin, s32 end) m_mesh->setFrameLoop(begin, end); } +/** + * Sets the animation speed (FPS) for the mesh + */ +void GUIScene::setAnimationSpeed(f32 speed) +{ + m_mesh->setAnimationSpeed(speed); +} + /* Camera control functions */ inline void GUIScene::calcOptimalDistance() diff --git a/src/gui/guiScene.h b/src/gui/guiScene.h index 08eb7f350..0f5f3a891 100644 --- a/src/gui/guiScene.h +++ b/src/gui/guiScene.h @@ -37,6 +37,7 @@ public: void setTexture(u32 idx, video::ITexture *texture); void setBackgroundColor(const video::SColor &color) noexcept { m_bgcolor = color; }; void setFrameLoop(s32 begin, s32 end); + void setAnimationSpeed(f32 speed); void enableMouseControl(bool enable) noexcept { m_mouse_ctrl = enable; }; void setRotation(v2f rot) noexcept { m_custom_rot = rot; }; void enableContinuousRotation(bool enable) noexcept { m_inf_rot = enable; }; From 96d4df995c1baf364217699cd43e5ab71918c9d8 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 19 Mar 2021 18:44:32 +0100 Subject: [PATCH 098/110] Drop old text input workarounds (#11089) * Drop unused intlGUIEditBox * Drop unnecessary Linux text input workarounds --- src/gui/CMakeLists.txt | 1 - src/gui/guiChatConsole.cpp | 8 +- src/gui/guiConfirmRegistration.cpp | 9 +- src/gui/guiEditBox.cpp | 23 +- src/gui/guiFormSpecMenu.cpp | 23 +- src/gui/intlGUIEditBox.cpp | 626 ----------------------------- src/gui/intlGUIEditBox.h | 68 ---- 7 files changed, 13 insertions(+), 745 deletions(-) delete mode 100644 src/gui/intlGUIEditBox.cpp delete mode 100644 src/gui/intlGUIEditBox.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index fdd36914a..5552cebea 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -23,7 +23,6 @@ set(gui_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/guiTable.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiHyperText.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiVolumeChange.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/intlGUIEditBox.cpp ${CMAKE_CURRENT_SOURCE_DIR}/modalMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/profilergraph.cpp PARENT_SCOPE diff --git a/src/gui/guiChatConsole.cpp b/src/gui/guiChatConsole.cpp index ef471106d..a4e91fe78 100644 --- a/src/gui/guiChatConsole.cpp +++ b/src/gui/guiChatConsole.cpp @@ -607,13 +607,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event) prompt.nickCompletion(names, backwards); return true; } else if (!iswcntrl(event.KeyInput.Char) && !event.KeyInput.Control) { - #if defined(__linux__) && (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9) - wchar_t wc = L'_'; - mbtowc( &wc, (char *) &event.KeyInput.Char, sizeof(event.KeyInput.Char) ); - prompt.input(wc); - #else - prompt.input(event.KeyInput.Char); - #endif + prompt.input(event.KeyInput.Char); return true; } } diff --git a/src/gui/guiConfirmRegistration.cpp b/src/gui/guiConfirmRegistration.cpp index 4a798c39b..4ca9a64ed 100644 --- a/src/gui/guiConfirmRegistration.cpp +++ b/src/gui/guiConfirmRegistration.cpp @@ -25,7 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include -#include "intlGUIEditBox.h" +#include "guiEditBoxWithScrollbar.h" #include "porting.h" #include "gettext.h" @@ -109,10 +109,9 @@ void GUIConfirmRegistration::regenerateGui(v2u32 screensize) porting::mt_snprintf(info_text_buf, sizeof(info_text_buf), info_text_template.c_str(), m_playername.c_str()); - wchar_t *info_text_buf_wide = utf8_to_wide_c(info_text_buf); - gui::IGUIEditBox *e = new gui::intlGUIEditBox(info_text_buf_wide, true, - Environment, this, ID_intotext, rect2, false, true); - delete[] info_text_buf_wide; + std::wstring info_text_w = utf8_to_wide(info_text_buf); + gui::IGUIEditBox *e = new GUIEditBoxWithScrollBar(info_text_w.c_str(), + true, Environment, this, ID_intotext, rect2, false, true); e->drop(); e->setMultiLine(true); e->setWordWrap(true); diff --git a/src/gui/guiEditBox.cpp b/src/gui/guiEditBox.cpp index 79979dbc3..cd5a0868d 100644 --- a/src/gui/guiEditBox.cpp +++ b/src/gui/guiEditBox.cpp @@ -208,31 +208,10 @@ bool GUIEditBox::OnEvent(const SEvent &event) } } break; - case EET_KEY_INPUT_EVENT: { -#if (defined(__linux__) || defined(__FreeBSD__)) || defined(__DragonFly__) - // ################################################################ - // ValkaTR: - // This part is the difference from the original intlGUIEditBox - // It converts UTF-8 character into a UCS-2 (wchar_t) - wchar_t wc = L'_'; - mbtowc(&wc, (char *)&event.KeyInput.Char, - sizeof(event.KeyInput.Char)); - - // printf( "char: %lc (%u) \r\n", wc, wc ); - - SEvent irrevent(event); - irrevent.KeyInput.Char = wc; - // ################################################################ - - if (processKey(irrevent)) - return true; -#else + case EET_KEY_INPUT_EVENT: if (processKey(event)) return true; -#endif // defined(linux) - break; - } case EET_MOUSE_INPUT_EVENT: if (processMouse(event)) return true; diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 5d763a4be..4661e505d 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -65,7 +65,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "guiInventoryList.h" #include "guiItemImage.h" #include "guiScrollContainer.h" -#include "intlGUIEditBox.h" #include "guiHyperText.h" #include "guiScene.h" @@ -1547,21 +1546,13 @@ void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec, } gui::IGUIEditBox *e = nullptr; - static constexpr bool use_intl_edit_box = USE_FREETYPE && - IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9; - - if (use_intl_edit_box && g_settings->getBool("freetype")) { - e = new gui::intlGUIEditBox(spec.fdefault.c_str(), true, Environment, - data->current_parent, spec.fid, rect, is_editable, is_multiline); - } else { - if (is_multiline) { - e = new GUIEditBoxWithScrollBar(spec.fdefault.c_str(), true, Environment, - data->current_parent, spec.fid, rect, is_editable, true); - } else if (is_editable) { - e = Environment->addEditBox(spec.fdefault.c_str(), rect, true, - data->current_parent, spec.fid); - e->grab(); - } + if (is_multiline) { + e = new GUIEditBoxWithScrollBar(spec.fdefault.c_str(), true, Environment, + data->current_parent, spec.fid, rect, is_editable, true); + } else if (is_editable) { + e = Environment->addEditBox(spec.fdefault.c_str(), rect, true, + data->current_parent, spec.fid); + e->grab(); } auto style = getDefaultStyleForElement(is_multiline ? "textarea" : "field", spec.fname); diff --git a/src/gui/intlGUIEditBox.cpp b/src/gui/intlGUIEditBox.cpp deleted file mode 100644 index 0f09ea746..000000000 --- a/src/gui/intlGUIEditBox.cpp +++ /dev/null @@ -1,626 +0,0 @@ -// 11.11.2011 11:11 ValkaTR -// -// This is a copy of intlGUIEditBox from the irrlicht, but with a -// fix in the OnEvent function, which doesn't allowed input of -// other keyboard layouts than latin-1 -// -// Characters like: ä ö ü õ ы й ю я ъ № € ° ... -// -// This fix is only needed for linux, because of a bug -// in the CIrrDeviceLinux.cpp:1014-1015 of the irrlicht -// -// Also locale in the programm should not be changed to -// a "C", "POSIX" or whatever, it should be set to "", -// or XLookupString will return nothing for the international -// characters. -// -// From the "man setlocale": -// -// On startup of the main program, the portable "C" locale -// is selected as default. A program may be made -// portable to all locales by calling: -// -// setlocale(LC_ALL, ""); -// -// after program initialization.... -// - -// Copyright (C) 2002-2013 Nikolaus Gebhardt -// This file is part of the "Irrlicht Engine". -// For conditions of distribution and use, see copyright notice in irrlicht.h - -#include -#include "intlGUIEditBox.h" - -#include "IGUISkin.h" -#include "IGUIEnvironment.h" -#include "IGUIFont.h" -#include "IVideoDriver.h" -//#include "irrlicht/os.cpp" -#include "porting.h" -//#include "Keycodes.h" -#include "log.h" - -/* - todo: - optional scrollbars - ctrl+left/right to select word - double click/ctrl click: word select + drag to select whole words, triple click to select line - optional? dragging selected text - numerical -*/ - -namespace irr -{ -namespace gui -{ - -//! constructor -intlGUIEditBox::intlGUIEditBox(const wchar_t* text, bool border, - IGUIEnvironment* environment, IGUIElement* parent, s32 id, - const core::rect& rectangle, bool writable, bool has_vscrollbar) - : GUIEditBox(environment, parent, id, rectangle, border, writable) -{ - #ifdef _DEBUG - setDebugName("intlintlGUIEditBox"); - #endif - - Text = text; - - if (Environment) - m_operator = Environment->getOSOperator(); - - if (m_operator) - m_operator->grab(); - - // this element can be tabbed to - setTabStop(true); - setTabOrder(-1); - - IGUISkin *skin = 0; - if (Environment) - skin = Environment->getSkin(); - if (m_border && skin) - { - m_frame_rect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1; - m_frame_rect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; - m_frame_rect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1; - m_frame_rect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; - } - - if (skin && has_vscrollbar) { - m_scrollbar_width = skin->getSize(gui::EGDS_SCROLLBAR_SIZE); - - if (m_scrollbar_width > 0) { - createVScrollBar(); - } - } - - breakText(); - - calculateScrollPos(); - setWritable(writable); -} - -//! Sets whether to draw the background -void intlGUIEditBox::setDrawBackground(bool draw) -{ -} - -void intlGUIEditBox::updateAbsolutePosition() -{ - core::rect oldAbsoluteRect(AbsoluteRect); - IGUIElement::updateAbsolutePosition(); - if ( oldAbsoluteRect != AbsoluteRect ) - { - breakText(); - } -} - - -//! draws the element and its children -void intlGUIEditBox::draw() -{ - if (!IsVisible) - return; - - const bool focus = Environment->hasFocus(this); - - IGUISkin* skin = Environment->getSkin(); - if (!skin) - return; - - m_frame_rect = AbsoluteRect; - - // draw the border - - if (m_border) - { - if (m_writable) { - skin->draw3DSunkenPane(this, skin->getColor(EGDC_WINDOW), - false, true, m_frame_rect, &AbsoluteClippingRect); - } - - m_frame_rect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1; - m_frame_rect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; - m_frame_rect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1; - m_frame_rect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; - } - - updateVScrollBar(); - core::rect localClipRect = m_frame_rect; - localClipRect.clipAgainst(AbsoluteClippingRect); - - // draw the text - - IGUIFont* font = m_override_font; - if (!m_override_font) - font = skin->getFont(); - - s32 cursorLine = 0; - s32 charcursorpos = 0; - - if (font) - { - if (m_last_break_font != font) - { - breakText(); - } - - // calculate cursor pos - - core::stringw *txtLine = &Text; - s32 startPos = 0; - - core::stringw s, s2; - - // get mark position - const bool ml = (!m_passwordbox && (m_word_wrap || m_multiline)); - const s32 realmbgn = m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end; - const s32 realmend = m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin; - const s32 hlineStart = ml ? getLineFromPos(realmbgn) : 0; - const s32 hlineCount = ml ? getLineFromPos(realmend) - hlineStart + 1 : 1; - const s32 lineCount = ml ? m_broken_text.size() : 1; - - // Save the override color information. - // Then, alter it if the edit box is disabled. - const bool prevOver = m_override_color_enabled; - const video::SColor prevColor = m_override_color; - - if (!Text.empty()) { - if (!IsEnabled && !m_override_color_enabled) - { - m_override_color_enabled = true; - m_override_color = skin->getColor(EGDC_GRAY_TEXT); - } - - for (s32 i=0; i < lineCount; ++i) - { - setTextRect(i); - - // clipping test - don't draw anything outside the visible area - core::rect c = localClipRect; - c.clipAgainst(m_current_text_rect); - if (!c.isValid()) - continue; - - // get current line - if (m_passwordbox) - { - if (m_broken_text.size() != 1) - { - m_broken_text.clear(); - m_broken_text.emplace_back(); - } - if (m_broken_text[0].size() != Text.size()) - { - m_broken_text[0] = Text; - for (u32 q = 0; q < Text.size(); ++q) - { - m_broken_text[0] [q] = m_passwordchar; - } - } - txtLine = &m_broken_text[0]; - startPos = 0; - } - else - { - txtLine = ml ? &m_broken_text[i] : &Text; - startPos = ml ? m_broken_text_positions[i] : 0; - } - - - // draw normal text - font->draw(txtLine->c_str(), m_current_text_rect, - m_override_color_enabled ? m_override_color : skin->getColor(EGDC_BUTTON_TEXT), - false, true, &localClipRect); - - // draw mark and marked text - if (focus && m_mark_begin != m_mark_end && i >= hlineStart && i < hlineStart + hlineCount) - { - - s32 mbegin = 0, mend = 0; - s32 lineStartPos = 0, lineEndPos = txtLine->size(); - - if (i == hlineStart) - { - // highlight start is on this line - s = txtLine->subString(0, realmbgn - startPos); - mbegin = font->getDimension(s.c_str()).Width; - - // deal with kerning - mbegin += font->getKerningWidth( - &((*txtLine)[realmbgn - startPos]), - realmbgn - startPos > 0 ? &((*txtLine)[realmbgn - startPos - 1]) : 0); - - lineStartPos = realmbgn - startPos; - } - if (i == hlineStart + hlineCount - 1) - { - // highlight end is on this line - s2 = txtLine->subString(0, realmend - startPos); - mend = font->getDimension(s2.c_str()).Width; - lineEndPos = (s32)s2.size(); - } - else - mend = font->getDimension(txtLine->c_str()).Width; - - m_current_text_rect.UpperLeftCorner.X += mbegin; - m_current_text_rect.LowerRightCorner.X = m_current_text_rect.UpperLeftCorner.X + mend - mbegin; - - // draw mark - skin->draw2DRectangle(this, skin->getColor(EGDC_HIGH_LIGHT), m_current_text_rect, &localClipRect); - - // draw marked text - s = txtLine->subString(lineStartPos, lineEndPos - lineStartPos); - - if (!s.empty()) - font->draw(s.c_str(), m_current_text_rect, - m_override_color_enabled ? m_override_color : skin->getColor(EGDC_HIGH_LIGHT_TEXT), - false, true, &localClipRect); - - } - } - - // Return the override color information to its previous settings. - m_override_color_enabled = prevOver; - m_override_color = prevColor; - } - - // draw cursor - - if (m_word_wrap || m_multiline) - { - cursorLine = getLineFromPos(m_cursor_pos); - txtLine = &m_broken_text[cursorLine]; - startPos = m_broken_text_positions[cursorLine]; - } - s = txtLine->subString(0,m_cursor_pos-startPos); - charcursorpos = font->getDimension(s.c_str()).Width + - font->getKerningWidth(L"_", m_cursor_pos-startPos > 0 ? &((*txtLine)[m_cursor_pos-startPos-1]) : 0); - - if (m_writable) { - if (focus && (porting::getTimeMs() - m_blink_start_time) % 700 < 350) { - setTextRect(cursorLine); - m_current_text_rect.UpperLeftCorner.X += charcursorpos; - - font->draw(L"_", m_current_text_rect, - m_override_color_enabled ? m_override_color : skin->getColor(EGDC_BUTTON_TEXT), - false, true, &localClipRect); - } - } - } - - // draw children - IGUIElement::draw(); -} - - -s32 intlGUIEditBox::getCursorPos(s32 x, s32 y) -{ - IGUIFont* font = getActiveFont(); - - const u32 lineCount = (m_word_wrap || m_multiline) ? m_broken_text.size() : 1; - - core::stringw *txtLine = NULL; - s32 startPos = 0; - u32 curr_line_idx = 0; - x += 3; - - for (; curr_line_idx < lineCount; ++curr_line_idx) { - setTextRect(curr_line_idx); - if (curr_line_idx == 0 && y < m_current_text_rect.UpperLeftCorner.Y) - y = m_current_text_rect.UpperLeftCorner.Y; - if (curr_line_idx == lineCount - 1 && y > m_current_text_rect.LowerRightCorner.Y) - y = m_current_text_rect.LowerRightCorner.Y; - - // is it inside this region? - if (y >= m_current_text_rect.UpperLeftCorner.Y && y <= m_current_text_rect.LowerRightCorner.Y) { - // we've found the clicked line - txtLine = (m_word_wrap || m_multiline) ? &m_broken_text[curr_line_idx] : &Text; - startPos = (m_word_wrap || m_multiline) ? m_broken_text_positions[curr_line_idx] : 0; - break; - } - } - - if (x < m_current_text_rect.UpperLeftCorner.X) - x = m_current_text_rect.UpperLeftCorner.X; - else if (x > m_current_text_rect.LowerRightCorner.X) - x = m_current_text_rect.LowerRightCorner.X; - - s32 idx = font->getCharacterFromPos(txtLine->c_str(), x - m_current_text_rect.UpperLeftCorner.X); - // Special handling for last line, if we are on limits, add 1 extra shift because idx - // will be the last char, not null char of the wstring - if (curr_line_idx == lineCount - 1 && x == m_current_text_rect.LowerRightCorner.X) - idx++; - - return rangelim(idx + startPos, 0, S32_MAX); -} - - -//! Breaks the single text line. -void intlGUIEditBox::breakText() -{ - IGUISkin* skin = Environment->getSkin(); - - if ((!m_word_wrap && !m_multiline) || !skin) - return; - - m_broken_text.clear(); // need to reallocate :/ - m_broken_text_positions.clear(); - - IGUIFont* font = m_override_font; - if (!m_override_font) - font = skin->getFont(); - - if (!font) - return; - - m_last_break_font = font; - - core::stringw line; - core::stringw word; - core::stringw whitespace; - s32 lastLineStart = 0; - s32 size = Text.size(); - s32 length = 0; - s32 elWidth = RelativeRect.getWidth() - m_scrollbar_width - 10; - wchar_t c; - - for (s32 i=0; igetDimension(whitespace.c_str()).Width; - s32 worldlgth = font->getDimension(word.c_str()).Width; - - if (m_word_wrap && length + worldlgth + whitelgth > elWidth) - { - // break to next line - length = worldlgth; - m_broken_text.push_back(line); - m_broken_text_positions.push_back(lastLineStart); - lastLineStart = i - (s32)word.size(); - line = word; - } - else - { - // add word to line - line += whitespace; - line += word; - length += whitelgth + worldlgth; - } - - word = L""; - whitespace = L""; - } - - whitespace += c; - - // compute line break - if (lineBreak) - { - line += whitespace; - line += word; - m_broken_text.push_back(line); - m_broken_text_positions.push_back(lastLineStart); - lastLineStart = i+1; - line = L""; - word = L""; - whitespace = L""; - length = 0; - } - } - else - { - // yippee this is a word.. - word += c; - } - } - - line += whitespace; - line += word; - m_broken_text.push_back(line); - m_broken_text_positions.push_back(lastLineStart); -} - - -void intlGUIEditBox::setTextRect(s32 line) -{ - core::dimension2du d; - - IGUISkin* skin = Environment->getSkin(); - if (!skin) - return; - - IGUIFont* font = m_override_font ? m_override_font : skin->getFont(); - - if (!font) - return; - - // get text dimension - const u32 lineCount = (m_word_wrap || m_multiline) ? m_broken_text.size() : 1; - if (m_word_wrap || m_multiline) - { - d = font->getDimension(m_broken_text[line].c_str()); - } - else - { - d = font->getDimension(Text.c_str()); - d.Height = AbsoluteRect.getHeight(); - } - d.Height += font->getKerningHeight(); - - // justification - switch (m_halign) - { - case EGUIA_CENTER: - // align to h centre - m_current_text_rect.UpperLeftCorner.X = (m_frame_rect.getWidth()/2) - (d.Width/2); - m_current_text_rect.LowerRightCorner.X = (m_frame_rect.getWidth()/2) + (d.Width/2); - break; - case EGUIA_LOWERRIGHT: - // align to right edge - m_current_text_rect.UpperLeftCorner.X = m_frame_rect.getWidth() - d.Width; - m_current_text_rect.LowerRightCorner.X = m_frame_rect.getWidth(); - break; - default: - // align to left edge - m_current_text_rect.UpperLeftCorner.X = 0; - m_current_text_rect.LowerRightCorner.X = d.Width; - - } - - switch (m_valign) - { - case EGUIA_CENTER: - // align to v centre - m_current_text_rect.UpperLeftCorner.Y = - (m_frame_rect.getHeight()/2) - (lineCount*d.Height)/2 + d.Height*line; - break; - case EGUIA_LOWERRIGHT: - // align to bottom edge - m_current_text_rect.UpperLeftCorner.Y = - m_frame_rect.getHeight() - lineCount*d.Height + d.Height*line; - break; - default: - // align to top edge - m_current_text_rect.UpperLeftCorner.Y = d.Height*line; - break; - } - - m_current_text_rect.UpperLeftCorner.X -= m_hscroll_pos; - m_current_text_rect.LowerRightCorner.X -= m_hscroll_pos; - m_current_text_rect.UpperLeftCorner.Y -= m_vscroll_pos; - m_current_text_rect.LowerRightCorner.Y = m_current_text_rect.UpperLeftCorner.Y + d.Height; - - m_current_text_rect += m_frame_rect.UpperLeftCorner; - -} - -void intlGUIEditBox::calculateScrollPos() -{ - if (!m_autoscroll) - return; - - // calculate horizontal scroll position - s32 cursLine = getLineFromPos(m_cursor_pos); - setTextRect(cursLine); - - // don't do horizontal scrolling when wordwrap is enabled. - if (!m_word_wrap) - { - // get cursor position - IGUISkin* skin = Environment->getSkin(); - if (!skin) - return; - IGUIFont* font = m_override_font ? m_override_font : skin->getFont(); - if (!font) - return; - - core::stringw *txtLine = m_multiline ? &m_broken_text[cursLine] : &Text; - s32 cPos = m_multiline ? m_cursor_pos - m_broken_text_positions[cursLine] : m_cursor_pos; - - s32 cStart = m_current_text_rect.UpperLeftCorner.X + m_hscroll_pos + - font->getDimension(txtLine->subString(0, cPos).c_str()).Width; - - s32 cEnd = cStart + font->getDimension(L"_ ").Width; - - if (m_frame_rect.LowerRightCorner.X < cEnd) - m_hscroll_pos = cEnd - m_frame_rect.LowerRightCorner.X; - else if (m_frame_rect.UpperLeftCorner.X > cStart) - m_hscroll_pos = cStart - m_frame_rect.UpperLeftCorner.X; - else - m_hscroll_pos = 0; - - // todo: adjust scrollbar - } - - if (!m_word_wrap && !m_multiline) - return; - - // vertical scroll position - if (m_frame_rect.LowerRightCorner.Y < m_current_text_rect.LowerRightCorner.Y) - m_vscroll_pos += m_current_text_rect.LowerRightCorner.Y - m_frame_rect.LowerRightCorner.Y; // scrolling downwards - else if (m_frame_rect.UpperLeftCorner.Y > m_current_text_rect.UpperLeftCorner.Y) - m_vscroll_pos += m_current_text_rect.UpperLeftCorner.Y - m_frame_rect.UpperLeftCorner.Y; // scrolling upwards - - // todo: adjust scrollbar - if (m_vscrollbar) - m_vscrollbar->setPos(m_vscroll_pos); -} - - -//! Create a vertical scrollbar -void intlGUIEditBox::createVScrollBar() -{ - s32 fontHeight = 1; - - if (m_override_font) { - fontHeight = m_override_font->getDimension(L"").Height; - } else { - if (IGUISkin* skin = Environment->getSkin()) { - if (IGUIFont* font = skin->getFont()) { - fontHeight = font->getDimension(L"").Height; - } - } - } - - irr::core::rect scrollbarrect = m_frame_rect; - scrollbarrect.UpperLeftCorner.X += m_frame_rect.getWidth() - m_scrollbar_width; - m_vscrollbar = new GUIScrollBar(Environment, getParent(), -1, - scrollbarrect, false, true); - - m_vscrollbar->setVisible(false); - m_vscrollbar->setSmallStep(3 * fontHeight); - m_vscrollbar->setLargeStep(10 * fontHeight); -} - -} // end namespace gui -} // end namespace irr diff --git a/src/gui/intlGUIEditBox.h b/src/gui/intlGUIEditBox.h deleted file mode 100644 index 007fe1c93..000000000 --- a/src/gui/intlGUIEditBox.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (C) 2002-2013 Nikolaus Gebhardt -// This file is part of the "Irrlicht Engine". -// For conditions of distribution and use, see copyright notice in irrlicht.h - -#pragma once - -#include "IrrCompileConfig.h" -//#ifdef _IRR_COMPILE_WITH_GUI_ - -#include "guiEditBox.h" -#include "irrArray.h" -#include "IOSOperator.h" - -namespace irr -{ -namespace gui -{ - class intlGUIEditBox : public GUIEditBox - { - public: - - //! constructor - intlGUIEditBox(const wchar_t* text, bool border, IGUIEnvironment* environment, - IGUIElement* parent, s32 id, const core::rect& rectangle, - bool writable = true, bool has_vscrollbar = false); - - //! destructor - virtual ~intlGUIEditBox() {} - - //! Sets whether to draw the background - virtual void setDrawBackground(bool draw); - - virtual bool isDrawBackgroundEnabled() const { return true; } - - //! draws the element and its children - virtual void draw(); - - //! Updates the absolute position, splits text if required - virtual void updateAbsolutePosition(); - - virtual void setCursorChar(const wchar_t cursorChar) {} - - virtual wchar_t getCursorChar() const { return L'|'; } - - virtual void setCursorBlinkTime(u32 timeMs) {} - - virtual u32 getCursorBlinkTime() const { return 500; } - - protected: - //! Breaks the single text line. - virtual void breakText(); - //! sets the area of the given line - virtual void setTextRect(s32 line); - - //! calculates the current scroll position - void calculateScrollPos(); - - s32 getCursorPos(s32 x, s32 y); - - //! Create a vertical scrollbar - void createVScrollBar(); - }; - - -} // end namespace gui -} // end namespace irr - -//#endif // _IRR_COMPILE_WITH_GUI_ From 59a1b53d675ee404cb32564262282a3ecf69d94c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20=C3=85str=C3=B6m?= Date: Fri, 19 Mar 2021 21:43:01 +0100 Subject: [PATCH 099/110] Scale mouse/joystick sensitivity depending on FOV (#11007) --- src/client/game.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/client/game.cpp b/src/client/game.cpp index 2575e5406..9cc359843 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -829,6 +829,8 @@ private: const NodeMetadata *meta); static const ClientEventHandler clientEventHandler[CLIENTEVENT_MAX]; + f32 getSensitivityScaleFactor() const; + InputHandler *input = nullptr; Client *client = nullptr; @@ -2341,7 +2343,6 @@ void Game::checkZoomEnabled() m_game_ui->showTranslatedStatusText("Zoom currently disabled by game or mod"); } - void Game::updateCameraDirection(CameraOrientation *cam, float dtime) { if ((device->isWindowActive() && device->isWindowFocused() @@ -2377,6 +2378,18 @@ void Game::updateCameraDirection(CameraOrientation *cam, float dtime) } } +// Get the factor to multiply with sensitivity to get the same mouse/joystick +// responsiveness independently of FOV. +f32 Game::getSensitivityScaleFactor() const +{ + f32 fov_y = client->getCamera()->getFovY(); + + // Multiply by a constant such that it becomes 1.0 at 72 degree FOV and + // 16:9 aspect ratio to minimize disruption of existing sensitivity + // settings. + return tan(fov_y / 2.0f) * 1.3763818698f; +} + void Game::updateCameraOrientation(CameraOrientation *cam, float dtime) { #ifdef HAVE_TOUCHSCREENGUI @@ -2392,8 +2405,9 @@ void Game::updateCameraOrientation(CameraOrientation *cam, float dtime) dist.Y = -dist.Y; } - cam->camera_yaw -= dist.X * m_cache_mouse_sensitivity; - cam->camera_pitch += dist.Y * m_cache_mouse_sensitivity; + f32 sens_scale = getSensitivityScaleFactor(); + cam->camera_yaw -= dist.X * m_cache_mouse_sensitivity * sens_scale; + cam->camera_pitch += dist.Y * m_cache_mouse_sensitivity * sens_scale; if (dist.X != 0 || dist.Y != 0) input->setMousePos(center.X, center.Y); @@ -2402,7 +2416,8 @@ void Game::updateCameraOrientation(CameraOrientation *cam, float dtime) #endif if (m_cache_enable_joysticks) { - f32 c = m_cache_joystick_frustum_sensitivity * (1.f / 32767.f) * dtime; + f32 sens_scale = getSensitivityScaleFactor(); + f32 c = m_cache_joystick_frustum_sensitivity * (1.f / 32767.f) * dtime * sens_scale; cam->camera_yaw -= input->joystick.getAxisWithoutDead(JA_FRUSTUM_HORIZONTAL) * c; cam->camera_pitch += input->joystick.getAxisWithoutDead(JA_FRUSTUM_VERTICAL) * c; } From 492110a640dd8d01838e95aba00f650b37b7ed11 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein <54945686+EliasFleckenstein03@users.noreply.github.com> Date: Fri, 19 Mar 2021 21:45:29 +0100 Subject: [PATCH 100/110] Check for duplicate login in TOSERVER_INIT handler (#11017) i.e. checks for duplicate logins before sending all media data to the client. --- src/network/serverpackethandler.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index b863e1828..5b378a083 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -174,6 +174,16 @@ void Server::handleCommand_Init(NetworkPacket* pkt) return; } + RemotePlayer *player = m_env->getPlayer(playername); + + // If player is already connected, cancel + if (player && player->getPeerId() != PEER_ID_INEXISTENT) { + actionstream << "Server: Player with name \"" << playername << + "\" tried to connect, but player with same name is already connected" << std::endl; + DenyAccess(peer_id, SERVER_ACCESSDENIED_ALREADY_CONNECTED); + return; + } + m_clients.setPlayerName(peer_id, playername); //TODO (later) case insensitivity From ee2d46dcbeca010a8198ead21b759f132920fdea Mon Sep 17 00:00:00 2001 From: Zughy <63455151+Zughy@users.noreply.github.com> Date: Fri, 19 Mar 2021 21:45:46 +0100 Subject: [PATCH 101/110] Builtin: Italian translation (#11038) --- builtin/locale/__builtin.it.tr | 224 +++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 builtin/locale/__builtin.it.tr diff --git a/builtin/locale/__builtin.it.tr b/builtin/locale/__builtin.it.tr new file mode 100644 index 000000000..94bc870c8 --- /dev/null +++ b/builtin/locale/__builtin.it.tr @@ -0,0 +1,224 @@ +# textdomain: __builtin +Empty command.=Comando vuoto. +Invalid command: @1=Comando non valido: @1 +Invalid command usage.=Utilizzo del comando non valido. +You don't have permission to run this command (missing privileges: @1).=Non hai il permesso di eseguire questo comando (privilegi mancanti: @1). +Unable to get position of player @1.=Impossibile ottenere la posizione del giocatore @1. +Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=Formato dell'area non corretto. Richiesto: (x1,y1,z1) (x2,y2,z2) += +Show chat action (e.g., '/me orders a pizza' displays ' orders a pizza')=Mostra un'azione in chat (es. `/me ordina una pizza` mostra ` ordina una pizza`) +Show the name of the server owner=Mostra il nome del proprietario del server +The administrator of this server is @1.=L'amministratore di questo server è @1. +There's no administrator named in the config file.=Non c'è nessun amministratore nel file di configurazione. +[]=[] +Show privileges of yourself or another player=Mostra i privilegi propri o di un altro giocatore +Player @1 does not exist.=Il giocatore @1 non esiste. +Privileges of @1: @2=Privilegi di @1: @2 += +Return list of all online players with privilege=Ritorna una lista di tutti i giocatori connessi col tale privilegio +Invalid parameters (see /help haspriv).=Parametri non validi (vedi /help haspriv). +Unknown privilege!=Privilegio sconosciuto! +Players online with the "@1" privilege: @2=Giocatori connessi con il privilegio "@1": @2 +Your privileges are insufficient.=I tuoi privilegi sono insufficienti. +Unknown privilege: @1=Privilegio sconosciuto: @1 +@1 granted you privileges: @2=@1 ti ha assegnato i seguenti privilegi: @2 + ( | all)= ( | all) +Give privileges to player=Dà privilegi al giocatore +Invalid parameters (see /help grant).=Parametri non validi (vedi /help grant). + | all= | all +Grant privileges to yourself=Assegna dei privilegi a te stessǝ +Invalid parameters (see /help grantme).=Parametri non validi (vedi /help grantme). +@1 revoked privileges from you: @2=@1 ti ha revocato i seguenti privilegi: @2 +Remove privileges from player=Rimuove privilegi dal giocatore +Invalid parameters (see /help revoke).=Parametri non validi (vedi /help revoke). +Revoke privileges from yourself=Revoca privilegi a te stessǝ +Invalid parameters (see /help revokeme).=Parametri non validi (vedi /help revokeme). + = +Set player's password=Imposta la password del giocatore +Name field required.=Campo "nome" richiesto. +Your password was cleared by @1.=La tua password è stata resettata da @1. +Password of player "@1" cleared.=Password del giocatore "@1" resettata. +Your password was set by @1.=La tua password è stata impostata da @1. +Password of player "@1" set.=Password del giocatore "@1" impostata. += +Set empty password for a player=Imposta una password vuota a un giocatore +Reload authentication data=Ricarica i dati d'autenticazione +Done.=Fatto. +Failed.=Errore. +Remove a player's data=Rimuove i dati di un giocatore +Player "@1" removed.=Giocatore "@1" rimosso. +No such player "@1" to remove.=Non è presente nessun giocatore "@1" da rimuovere. +Player "@1" is connected, cannot remove.=Il giocatore "@1" è connesso, non può essere rimosso. +Unhandled remove_player return code @1.=Codice ritornato da remove_player non gestito (@1). +Cannot teleport out of map bounds!=Non ci si può teletrasportare fuori dai limiti della mappa! +Cannot get player with name @1.=Impossibile trovare il giocatore chiamato @1. +Cannot teleport, @1 is attached to an object!=Impossibile teletrasportare, @1 è attaccato a un oggetto! +Teleporting @1 to @2.=Teletrasportando @1 da @2. +One does not teleport to oneself.=Non ci si può teletrasportare su se stessi. +Cannot get teleportee with name @1.=Impossibile trovare il giocatore chiamato @1 per il teletrasporto +Cannot get target player with name @1.=Impossibile trovare il giocatore chiamato @1 per il teletrasporto +Teleporting @1 to @2 at @3.=Teletrasportando @1 da @2 a @3 +,, | | ,, | =,, | | ,, | +Teleport to position or player=Teletrasporta a una posizione o da un giocatore +You don't have permission to teleport other players (missing privilege: @1).=Non hai il permesso di teletrasportare altri giocatori (privilegio mancante: @1). +([-n] ) | =([-n] ) | +Set or read server configuration setting=Imposta o ottieni le configurazioni del server +Failed. Use '/set -n ' to create a new setting.=Errore. Usa 'set -n ' per creare una nuova impostazione +@1 @= @2=@1 @= @2 += +Invalid parameters (see /help set).=Parametri non validi (vedi /help set). +Finished emerging @1 blocks in @2ms.=Finito di emergere @1 blocchi in @2ms +emergeblocks update: @1/@2 blocks emerged (@3%)=aggiornamento emergeblocks: @1/@2 blocchi emersi (@3%) +(here []) | ( )=(here []) | ( ) +Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 ( and must be in parentheses)=Carica (o, se non esiste, genera) blocchi mappa contenuti nell'area tra pos1 e pos2 ( e vanno tra parentesi) +Started emerge of area ranging from @1 to @2.=Iniziata emersione dell'area tra @1 e @2. +Delete map blocks contained in area pos1 to pos2 ( and must be in parentheses)=Cancella i blocchi mappa contenuti nell'area tra pos1 e pos2 ( e vanno tra parentesi) +Successfully cleared area ranging from @1 to @2.=Area tra @1 e @2 ripulita con successo. +Failed to clear one or more blocks in area.=Errore nel ripulire uno o più blocchi mappa nell'area +Resets lighting in the area between pos1 and pos2 ( and must be in parentheses)=Reimposta l'illuminazione nell'area tra pos1 e po2 ( e vanno tra parentesi) +Successfully reset light in the area ranging from @1 to @2.=Luce nell'area tra @1 e @2 reimpostata con successo. +Failed to load one or more blocks in area.=Errore nel caricare uno o più blocchi mappa nell'area. +List mods installed on the server=Elenca le mod installate nel server +Cannot give an empty item.=Impossibile dare un oggetto vuoto. +Cannot give an unknown item.=Impossibile dare un oggetto sconosciuto. +Giving 'ignore' is not allowed.=Non è permesso dare 'ignore'. +@1 is not a known player.=@1 non è un giocatore conosciuto. +@1 partially added to inventory.=@1 parzialmente aggiunto all'inventario. +@1 could not be added to inventory.=@1 non può essere aggiunto all'inventario. +@1 added to inventory.=@1 aggiunto all'inventario. +@1 partially added to inventory of @2.=@1 parzialmente aggiunto all'inventario di @2. +@1 could not be added to inventory of @2.=Non è stato possibile aggiungere @1 all'inventario di @2. +@1 added to inventory of @2.=@1 aggiunto all'inventario di @2. + [ []]= [ []] +Give item to player=Dà oggetti ai giocatori +Name and ItemString required.=Richiesti nome e NomeOggetto. + [ []]= [ []] +Give item to yourself=Dà oggetti a te stessǝ +ItemString required.=Richiesto NomeOggetto. + [,,]= [,,] +Spawn entity at given (or your) position=Genera un'entità alla data coordinata (o la tua) +EntityName required.=Richiesto NomeEntità +Unable to spawn entity, player is nil.=Impossibile generare l'entità, il giocatore è nil. +Cannot spawn an unknown entity.=Impossibile generare un'entità sconosciuta. +Invalid parameters (@1).=Parametri non validi (@1). +@1 spawned.=Generata entità @1. +@1 failed to spawn.=Errore nel generare @1 +Destroy item in hand=Distrugge l'oggetto in mano +Unable to pulverize, no player.=Impossibile polverizzare, nessun giocatore. +Unable to pulverize, no item in hand.=Impossibile polverizzare, nessun oggetto in mano. +An item was pulverized.=Un oggetto è stato polverizzato. +[] [] []=[] [] [] +Check who last touched a node or a node near it within the time specified by . Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set to inf for no time limit=Controlla chi è l'ultimo giocatore che ha toccato un nodo o un nodo nelle sue vicinanze, negli ultimi secondi indicati. Di base: raggio @= 0, secondi @= 86400 @= 24h, limite @= 5. +Rollback functions are disabled.=Le funzioni di rollback sono disabilitate. +That limit is too high!=Il limite è troppo alto! +Checking @1 ...=Controllando @1 ... +Nobody has touched the specified location in @1 seconds.=Nessuno ha toccato il punto specificato negli ultimi @1 secondi. +@1 @2 @3 -> @4 @5 seconds ago.=@1 @2 @3 -> @4 @5 secondi fa. +Punch a node (range@=@1, seconds@=@2, limit@=@3).=Colpisce un nodo (raggio@=@1, secondi@=@2, limite@=@3) +( []) | (: [])=( []) | (: []) +Revert actions of a player. Default for is 60. Set to inf for no time limit=Riavvolge le azioni di un giocatore. Di base, è 60. Imposta a inf per nessun limite di tempo +Invalid parameters. See /help rollback and /help rollback_check.=Parametri non validi. Vedi /help rollback e /help rollback_check. +Reverting actions of player '@1' since @2 seconds.=Riavvolge le azioni del giocatore '@1' avvenute negli ultimi @2 secondi. +Reverting actions of @1 since @2 seconds.=Riavvolge le azioni di @1 avvenute negli ultimi @2 secondi. +(log is too long to show)=(il log è troppo lungo per essere mostrato) +Reverting actions succeeded.=Riavvolgimento azioni avvenuto con successo. +Reverting actions FAILED.=Errore nel riavvolgere le azioni. +Show server status=Mostra lo stato del server +This command was disabled by a mod or game.=Questo comando è stato disabilitato da una mod o dal gioco. +[<0..23>:<0..59> | <0..24000>]=[<0..23>:<0..59> | <0..24000>] +Show or set time of day=Mostra o imposta l'orario della giornata +Current time is @1:@2.=Orario corrente: @1:@2. +You don't have permission to run this command (missing privilege: @1).=Non hai il permesso di eseguire questo comando (privilegio mancante: @1) +Invalid time.=Orario non valido. +Time of day changed.=Orario della giornata cambiato. +Invalid hour (must be between 0 and 23 inclusive).=Ora non valida (deve essere tra 0 e 23 inclusi) +Invalid minute (must be between 0 and 59 inclusive).=Minuto non valido (deve essere tra 0 e 59 inclusi) +Show day count since world creation=Mostra il conteggio dei giorni da quando il mondo è stato creato +Current day is @1.=Giorno attuale: @1. +[ | -1] [reconnect] []=[ | -1] [reconnect] [] +Shutdown server (-1 cancels a delayed shutdown)=Arresta il server (-1 annulla un arresto programmato) +Server shutting down (operator request).=Arresto del server in corso (per richiesta dell'operatore) +Ban the IP of a player or show the ban list=Bandisce l'IP del giocatore o mostra la lista di quelli banditi +The ban list is empty.=La lista banditi è vuota. +Ban list: @1=Lista banditi: @1 +Player is not online.=Il giocatore non è connesso. +Failed to ban player.=Errore nel bandire il giocatore. +Banned @1.=@1 banditǝ. + | = | +Remove IP ban belonging to a player/IP=Perdona l'IP appartenente a un giocatore/IP +Failed to unban player/IP.=Errore nel perdonare il giocatore/IP +Unbanned @1.=@1 perdonatǝ + []= [] +Kick a player=Caccia un giocatore +Failed to kick player @1.=Errore nel cacciare il giocatore @1. +Kicked @1.=@1 cacciatǝ. +[full | quick]=[full | quick] +Clear all objects in world=Elimina tutti gli oggetti/entità nel mondo +Invalid usage, see /help clearobjects.=Uso incorretto, vedi /help clearobjects. +Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=Eliminando tutti gli oggetti/entità. Questo potrebbe richiedere molto tempo e farti eventualmente crashare. (di @1) +Cleared all objects.=Tutti gli oggetti sono stati eliminati. + = +Send a direct message to a player=Invia un messaggio privato al giocatore +Invalid usage, see /help msg.=Uso incorretto, vedi /help msg +The player @1 is not online.=Il giocatore @1 non è connesso. +DM from @1: @2=Messaggio privato da @1: @2 +Message sent.=Messaggio inviato. +Get the last login time of a player or yourself=Ritorna l'ultimo accesso di un giocatore o di te stessǝ +@1's last login time was @2.=L'ultimo accesso di @1 è avvenuto il @2 +@1's last login time is unknown.=L'ultimo accesso di @1 non è conosciuto +Clear the inventory of yourself or another player=Svuota l'inventario tuo o di un altro giocatore +You don't have permission to clear another player's inventory (missing privilege: @1).=Non hai il permesso di svuotare l'inventario di un altro giocatore (privilegio mancante: @1). +@1 cleared your inventory.=@1 ha svuotato il tuo inventario. +Cleared @1's inventory.=L'inventario di @1 è stato svuotato. +Player must be online to clear inventory!=Il giocatore deve essere connesso per svuotarne l'inventario! +Players can't be killed, damage has been disabled.=I giocatori non possono essere uccisi, il danno è disabilitato. +Player @1 is not online.=Il giocatore @1 non è connesso. +You are already dead.=Sei già mortǝ. +@1 is already dead.=@1 è già mortǝ. +@1 has been killed.=@1 è stato uccisǝ. +Kill player or yourself=Uccide un giocatore o te stessǝ +Available commands: @1=Comandi disponibili: @1 +Use '/help ' to get more information, or '/help all' to list everything.=Usa '/help ' per ottenere più informazioni, o '/help all' per elencare tutti i comandi. +Available commands:=Comandi disponibili: +Command not available: @1=Comando non disponibile: @1 +[all | privs | ]=[all | privs | ] +Get help for commands or list privileges=Richiama la finestra d'aiuto dei comandi o dei privilegi +Available privileges:=Privilegi disponibili: +Command=Comando +Parameters=Parametri +For more information, click on any entry in the list.=Per più informazioni, clicca su una qualsiasi voce dell'elenco. +Double-click to copy the entry to the chat history.=Doppio click per copiare la voce nella cronologia della chat. +Command: @1 @2=Comando: @1 @2 +Available commands: (see also: /help )=Comandi disponibili: (vedi anche /help ) +Close=Chiudi +Privilege=Privilegio +Description=Descrizione +print [] | dump [] | save [ []] | reset=print [] | dump [] | save [ []] | reset +Handle the profiler and profiling data=Gestisce il profiler e i dati da esso elaborati +Statistics written to action log.=Statistiche scritte nel log delle azioni. +Statistics were reset.=Le statistiche sono state resettate. +Usage: @1=Utilizzo: @1 +Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=I formati supportati sono txt, csv, lua, json e json_pretty (le strutture potrebbero essere soggetti a cambiamenti). +(no description)=(nessuna descrizione) +Can interact with things and modify the world=Si può interagire con le cose e modificare il mondo +Can speak in chat=Si può parlare in chat +Can modify 'shout' and 'interact' privileges=Si possono modificare i privilegi 'shout' e 'interact' +Can modify privileges=Si possono modificare i privilegi +Can teleport self=Si può teletrasportare se stessз +Can teleport other players=Si possono teletrasportare gli altri giocatori +Can set the time of day using /time=Si può impostate l'orario della giornata tramite /time +Can do server maintenance stuff=Si possono eseguire operazioni di manutenzione del server +Can bypass node protection in the world=Si può aggirare la protezione dei nodi nel mondo +Can ban and unban players=Si possono bandire e perdonare i giocatori +Can kick players=Si possono cacciare i giocatori +Can use /give and /giveme=Si possono usare /give e /give me +Can use /setpassword and /clearpassword=Si possono usare /setpassword e /clearpassword +Can use fly mode=Si può usare la modalità volo +Can use fast mode=Si può usare la modalità rapida +Can fly through solid nodes using noclip mode=Si può volare attraverso i nodi solidi con la modalità incorporea +Can use the rollback functionality=Si può usare la funzione di rollback +Allows enabling various debug options that may affect gameplay=Permette di abilitare varie opzioni di debug che potrebbero influenzare l'esperienza di gioco +Unknown Item=Oggetto sconosciuto +Air=Aria +Ignore=Ignora +You can't place 'ignore' nodes!=Non puoi piazzare nodi 'ignore'! From a8cc3bdb0890c89d600ef6543c5e9b1b55bcf2b6 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Fri, 19 Mar 2021 20:46:11 +0000 Subject: [PATCH 102/110] Builtin: Translatable join, leave, profiler msgs (#11064) --- builtin/game/misc.lua | 8 +++++--- builtin/profiler/reporter.lua | 19 +++++++++++-------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index b8c5e16a9..fcb86146d 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -1,5 +1,7 @@ -- Minetest: builtin/misc.lua +local S = core.get_translator("__builtin") + -- -- Misc. API functions -- @@ -42,15 +44,15 @@ end function core.send_join_message(player_name) if not core.is_singleplayer() then - core.chat_send_all("*** " .. player_name .. " joined the game.") + core.chat_send_all("*** " .. S("@1 joined the game.", player_name)) end end function core.send_leave_message(player_name, timed_out) - local announcement = "*** " .. player_name .. " left the game." + local announcement = "*** " .. S("@1 left the game.", player_name) if timed_out then - announcement = announcement .. " (timed out)" + announcement = "*** " .. S("@1 left the game (timed out).", player_name) end core.chat_send_all(announcement) end diff --git a/builtin/profiler/reporter.lua b/builtin/profiler/reporter.lua index fed47a36b..5928a3718 100644 --- a/builtin/profiler/reporter.lua +++ b/builtin/profiler/reporter.lua @@ -15,6 +15,10 @@ --with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +local S = core.get_translator("__builtin") +-- Note: In this file, only messages are translated +-- but not the table itself, to keep it simple. + local DIR_DELIM, LINE_DELIM = DIR_DELIM, "\n" local table, unpack, string, pairs, io, os = table, unpack, string, pairs, io, os local rep, sprintf, tonumber = string.rep, string.format, tonumber @@ -104,11 +108,11 @@ local TxtFormatter = Formatter:new { end, format = function(self, filter) local profile = self.profile - self:print("Values below show absolute/relative times spend per server step by the instrumented function.") - self:print("A total of %d samples were taken", profile.stats_total.samples) + self:print(S("Values below show absolute/relative times spend per server step by the instrumented function.")) + self:print(S("A total of @1 sample(s) were taken.", profile.stats_total.samples)) if filter then - self:print("The output is limited to '%s'", filter) + self:print(S("The output is limited to '@1'.", filter)) end self:print() @@ -259,19 +263,18 @@ function reporter.save(profile, format, filter) local output, io_err = io.open(path, "w") if not output then - return false, "Saving of profile failed with: " .. io_err + return false, S("Saving of profile failed: @1", io_err) end local content, err = serialize_profile(profile, format, filter) if not content then output:close() - return false, "Saving of profile failed with: " .. err + return false, S("Saving of profile failed: @1", err) end output:write(content) output:close() - local logmessage = "Profile saved to " .. path - core.log("action", logmessage) - return true, logmessage + core.log("action", "Profile saved to " .. path) + return true, S("Profile saved to @1", path) end return reporter From 05719913aca97e53ff5b1dde49e1a033a327551f Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sat, 20 Mar 2021 13:02:15 +0100 Subject: [PATCH 103/110] Schematic: Properly deal with before/after node resolving and document (#11011) This fixes an out-of-bounds index access when the node resolver was already applied to the schematic (i.e. biome decoration). Also improves the handling of the two cases: prior node resolving (m_nodenames), and after node resolving (manual lookup) --- src/mapgen/mg_schematic.cpp | 129 +++++++++++++++++------------ src/mapgen/mg_schematic.h | 16 ++-- src/nodedef.cpp | 16 +++- src/nodedef.h | 33 +++++++- src/script/lua_api/l_mapgen.cpp | 5 +- src/unittest/test_noderesolver.cpp | 2 + src/unittest/test_schematic.cpp | 40 +++++---- 7 files changed, 154 insertions(+), 87 deletions(-) diff --git a/src/mapgen/mg_schematic.cpp b/src/mapgen/mg_schematic.cpp index e70e97e48..653bad4fe 100644 --- a/src/mapgen/mg_schematic.cpp +++ b/src/mapgen/mg_schematic.cpp @@ -76,10 +76,6 @@ void SchematicManager::clear() /////////////////////////////////////////////////////////////////////////////// -Schematic::Schematic() -= default; - - Schematic::~Schematic() { delete []schemdata; @@ -108,13 +104,19 @@ ObjDef *Schematic::clone() const void Schematic::resolveNodeNames() { + c_nodes.clear(); getIdsFromNrBacklog(&c_nodes, true, CONTENT_AIR); size_t bufsize = size.X * size.Y * size.Z; for (size_t i = 0; i != bufsize; i++) { content_t c_original = schemdata[i].getContent(); - content_t c_new = c_nodes[c_original]; - schemdata[i].setContent(c_new); + if (c_original >= c_nodes.size()) { + errorstream << "Corrupt schematic. name=\"" << name + << "\" at index " << i << std::endl; + c_original = 0; + } + // Unfold condensed ID layout to content_t + schemdata[i].setContent(c_nodes[c_original]); } } @@ -279,8 +281,7 @@ void Schematic::placeOnMap(ServerMap *map, v3s16 p, u32 flags, } -bool Schematic::deserializeFromMts(std::istream *is, - std::vector *names) +bool Schematic::deserializeFromMts(std::istream *is) { std::istream &ss = *is; content_t cignore = CONTENT_IGNORE; @@ -312,6 +313,8 @@ bool Schematic::deserializeFromMts(std::istream *is, slice_probs[y] = (version >= 3) ? readU8(ss) : MTSCHEM_PROB_ALWAYS_OLD; //// Read node names + NodeResolver::reset(); + u16 nidmapcount = readU16(ss); for (int i = 0; i != nidmapcount; i++) { std::string name = deSerializeString16(ss); @@ -324,9 +327,12 @@ bool Schematic::deserializeFromMts(std::istream *is, have_cignore = true; } - names->push_back(name); + m_nodenames.push_back(name); } + // Prepare for node resolver + m_nnlistsizes.push_back(m_nodenames.size()); + //// Read node data size_t nodecount = size.X * size.Y * size.Z; @@ -358,9 +364,11 @@ bool Schematic::deserializeFromMts(std::istream *is, } -bool Schematic::serializeToMts(std::ostream *os, - const std::vector &names) const +bool Schematic::serializeToMts(std::ostream *os) const { + // Nodes must not be resolved (-> condensed) + // checking here is not possible because "schemdata" might be temporary. + std::ostream &ss = *os; writeU32(ss, MTSCHEM_FILE_SIGNATURE); // signature @@ -370,9 +378,10 @@ bool Schematic::serializeToMts(std::ostream *os, for (int y = 0; y != size.Y; y++) // Y slice probabilities writeU8(ss, slice_probs[y]); - writeU16(ss, names.size()); // name count - for (size_t i = 0; i != names.size(); i++) - ss << serializeString16(names[i]); // node names + writeU16(ss, m_nodenames.size()); // name count + for (size_t i = 0; i != m_nodenames.size(); i++) { + ss << serializeString16(m_nodenames[i]); // node names + } // compressed bulk node data MapNode::serializeBulk(ss, SER_FMT_VER_HIGHEST_WRITE, @@ -382,8 +391,7 @@ bool Schematic::serializeToMts(std::ostream *os, } -bool Schematic::serializeToLua(std::ostream *os, - const std::vector &names, bool use_comments, +bool Schematic::serializeToLua(std::ostream *os, bool use_comments, u32 indent_spaces) const { std::ostream &ss = *os; @@ -392,6 +400,9 @@ bool Schematic::serializeToLua(std::ostream *os, if (indent_spaces > 0) indent.assign(indent_spaces, ' '); + bool resolve_done = isResolveDone(); + FATAL_ERROR_IF(resolve_done && !m_ndef, "serializeToLua: NodeDefManager is required"); + //// Write header { ss << "schematic = {" << std::endl; @@ -436,9 +447,22 @@ bool Schematic::serializeToLua(std::ostream *os, u8 probability = schemdata[i].param1 & MTSCHEM_PROB_MASK; bool force_place = schemdata[i].param1 & MTSCHEM_FORCE_PLACE; - ss << indent << indent << "{" - << "name=\"" << names[schemdata[i].getContent()] - << "\", prob=" << (u16)probability * 2 + // After node resolving: real content_t, lookup using NodeDefManager + // Prior node resolving: condensed ID, lookup using m_nodenames + content_t c = schemdata[i].getContent(); + + ss << indent << indent << "{" << "name=\""; + + if (!resolve_done) { + // Prior node resolving (eg. direct schematic load) + FATAL_ERROR_IF(c >= m_nodenames.size(), "Invalid node list"); + ss << m_nodenames[c]; + } else { + // After node resolving (eg. biome decoration) + ss << m_ndef->get(c).name; + } + + ss << "\", prob=" << (u16)probability * 2 << ", param2=" << (u16)schemdata[i].param2; if (force_place) @@ -467,25 +491,24 @@ bool Schematic::loadSchematicFromFile(const std::string &filename, return false; } - size_t origsize = m_nodenames.size(); - if (!deserializeFromMts(&is, &m_nodenames)) - return false; + if (!m_ndef) + m_ndef = ndef; - m_nnlistsizes.push_back(m_nodenames.size() - origsize); + if (!deserializeFromMts(&is)) + return false; name = filename; if (replace_names) { - for (size_t i = origsize; i < m_nodenames.size(); i++) { - std::string &node_name = m_nodenames[i]; + for (std::string &node_name : m_nodenames) { StringMap::iterator it = replace_names->find(node_name); if (it != replace_names->end()) node_name = it->second; } } - if (ndef) - ndef->pendNodeResolve(this); + if (m_ndef) + m_ndef->pendNodeResolve(this); return true; } @@ -494,33 +517,26 @@ bool Schematic::loadSchematicFromFile(const std::string &filename, bool Schematic::saveSchematicToFile(const std::string &filename, const NodeDefManager *ndef) { - MapNode *orig_schemdata = schemdata; - std::vector ndef_nodenames; - std::vector *names; + Schematic *schem = this; - if (m_resolve_done && ndef == NULL) - ndef = m_ndef; + bool needs_condense = isResolveDone(); - if (ndef) { - names = &ndef_nodenames; + if (!m_ndef) + m_ndef = ndef; - u32 volume = size.X * size.Y * size.Z; - schemdata = new MapNode[volume]; - for (u32 i = 0; i != volume; i++) - schemdata[i] = orig_schemdata[i]; + if (needs_condense) { + if (!m_ndef) + return false; - generate_nodelist_and_update_ids(schemdata, volume, names, ndef); - } else { // otherwise, use the names we have on hand in the list - names = &m_nodenames; + schem = (Schematic *)this->clone(); + schem->condenseContentIds(); } std::ostringstream os(std::ios_base::binary); - bool status = serializeToMts(&os, *names); + bool status = schem->serializeToMts(&os); - if (ndef) { - delete []schemdata; - schemdata = orig_schemdata; - } + if (needs_condense) + delete schem; if (!status) return false; @@ -556,6 +572,10 @@ bool Schematic::getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2) } delete vm; + + // Reset and mark as complete + NodeResolver::reset(true); + return true; } @@ -584,26 +604,29 @@ void Schematic::applyProbabilities(v3s16 p0, } -void generate_nodelist_and_update_ids(MapNode *nodes, size_t nodecount, - std::vector *usednodes, const NodeDefManager *ndef) +void Schematic::condenseContentIds() { std::unordered_map nodeidmap; content_t numids = 0; + // Reset node resolve fields + NodeResolver::reset(); + + size_t nodecount = size.X * size.Y * size.Z; for (size_t i = 0; i != nodecount; i++) { content_t id; - content_t c = nodes[i].getContent(); + content_t c = schemdata[i].getContent(); - std::unordered_map::const_iterator it = nodeidmap.find(c); + auto it = nodeidmap.find(c); if (it == nodeidmap.end()) { id = numids; numids++; - usednodes->push_back(ndef->get(c).name); - nodeidmap.insert(std::make_pair(c, id)); + m_nodenames.push_back(m_ndef->get(c).name); + nodeidmap.emplace(std::make_pair(c, id)); } else { id = it->second; } - nodes[i].setContent(id); + schemdata[i].setContent(id); } } diff --git a/src/mapgen/mg_schematic.h b/src/mapgen/mg_schematic.h index 6b31251b6..5f64ea280 100644 --- a/src/mapgen/mg_schematic.h +++ b/src/mapgen/mg_schematic.h @@ -92,7 +92,7 @@ enum SchematicFormatType { class Schematic : public ObjDef, public NodeResolver { public: - Schematic(); + Schematic() = default; virtual ~Schematic(); ObjDef *clone() const; @@ -105,11 +105,9 @@ public: const NodeDefManager *ndef); bool getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2); - bool deserializeFromMts(std::istream *is, std::vector *names); - bool serializeToMts(std::ostream *os, - const std::vector &names) const; - bool serializeToLua(std::ostream *os, const std::vector &names, - bool use_comments, u32 indent_spaces) const; + bool deserializeFromMts(std::istream *is); + bool serializeToMts(std::ostream *os) const; + bool serializeToLua(std::ostream *os, bool use_comments, u32 indent_spaces) const; void blitToVManip(MMVManip *vm, v3s16 p, Rotation rot, bool force_place); bool placeOnVManip(MMVManip *vm, v3s16 p, u32 flags, Rotation rot, bool force_place); @@ -124,6 +122,10 @@ public: v3s16 size; MapNode *schemdata = nullptr; u8 *slice_probs = nullptr; + +private: + // Counterpart to the node resolver: Condense content_t to a sequential "m_nodenames" list + void condenseContentIds(); }; class SchematicManager : public ObjDefManager { @@ -151,5 +153,3 @@ private: Server *m_server; }; -void generate_nodelist_and_update_ids(MapNode *nodes, size_t nodecount, - std::vector *usednodes, const NodeDefManager *ndef); diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 57d4c008f..8a1f6203b 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -1675,8 +1675,7 @@ bool NodeDefManager::nodeboxConnects(MapNode from, MapNode to, NodeResolver::NodeResolver() { - m_nodenames.reserve(16); - m_nnlistsizes.reserve(4); + reset(); } @@ -1779,3 +1778,16 @@ bool NodeResolver::getIdsFromNrBacklog(std::vector *result_out, return success; } + +void NodeResolver::reset(bool resolve_done) +{ + m_nodenames.clear(); + m_nodenames_idx = 0; + m_nnlistsizes.clear(); + m_nnlistsizes_idx = 0; + + m_resolve_done = resolve_done; + + m_nodenames.reserve(16); + m_nnlistsizes.reserve(4); +} diff --git a/src/nodedef.h b/src/nodedef.h index 6fc20518d..3e77624eb 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -44,6 +44,9 @@ class ITextureSource; class IShaderSource; class IGameDef; class NodeResolver; +#if BUILD_UNITTESTS +class TestSchematic; +#endif enum ContentParamType { @@ -789,10 +792,13 @@ private: NodeDefManager *createNodeDefManager(); +// NodeResolver: Queue for node names which are then translated +// to content_t after the NodeDefManager was initialized class NodeResolver { public: NodeResolver(); virtual ~NodeResolver(); + // Callback which is run as soon NodeDefManager is ready virtual void resolveNodeNames() = 0; // required because this class is used as mixin for ObjDef @@ -804,12 +810,31 @@ public: bool getIdsFromNrBacklog(std::vector *result_out, bool all_required = false, content_t c_fallback = CONTENT_IGNORE); + inline bool isResolveDone() const { return m_resolve_done; } + void reset(bool resolve_done = false); + + // Vector containing all node names in the resolve "queue" + std::vector m_nodenames; + // Specifies the "set size" of node names which are to be processed + // this is used for getIdsFromNrBacklog + // TODO: replace or remove + std::vector m_nnlistsizes; + +protected: + friend class NodeDefManager; // m_ndef + + const NodeDefManager *m_ndef = nullptr; + // Index of the next "m_nodenames" entry to resolve + u32 m_nodenames_idx = 0; + +private: +#if BUILD_UNITTESTS + // Unittest requires access to m_resolve_done + friend class TestSchematic; +#endif void nodeResolveInternal(); - u32 m_nodenames_idx = 0; + // Index of the next "m_nnlistsizes" entry to process u32 m_nnlistsizes_idx = 0; - std::vector m_nodenames; - std::vector m_nnlistsizes; - const NodeDefManager *m_ndef = nullptr; bool m_resolve_done = false; }; diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 12a497b1e..cc93bdbd0 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -1734,11 +1734,10 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L) std::ostringstream os(std::ios_base::binary); switch (schem_format) { case SCHEM_FMT_MTS: - schem->serializeToMts(&os, schem->m_nodenames); + schem->serializeToMts(&os); break; case SCHEM_FMT_LUA: - schem->serializeToLua(&os, schem->m_nodenames, - use_comments, indent_spaces); + schem->serializeToLua(&os, use_comments, indent_spaces); break; default: return 0; diff --git a/src/unittest/test_noderesolver.cpp b/src/unittest/test_noderesolver.cpp index 28da43620..ed66093a9 100644 --- a/src/unittest/test_noderesolver.cpp +++ b/src/unittest/test_noderesolver.cpp @@ -56,6 +56,8 @@ void TestNodeResolver::runTests(IGameDef *gamedef) class Foobar : public NodeResolver { public: + friend class TestNodeResolver; // m_ndef + void resolveNodeNames(); content_t test_nr_node1; diff --git a/src/unittest/test_schematic.cpp b/src/unittest/test_schematic.cpp index da4ce50d2..d2f027eb4 100644 --- a/src/unittest/test_schematic.cpp +++ b/src/unittest/test_schematic.cpp @@ -66,13 +66,14 @@ void TestSchematic::testMtsSerializeDeserialize(const NodeDefManager *ndef) std::stringstream ss(std::ios_base::binary | std::ios_base::in | std::ios_base::out); - std::vector names; - names.emplace_back("foo"); - names.emplace_back("bar"); - names.emplace_back("baz"); - names.emplace_back("qux"); - - Schematic schem, schem2; + Schematic schem; + { + std::vector &names = schem.m_nodenames; + names.emplace_back("foo"); + names.emplace_back("bar"); + names.emplace_back("baz"); + names.emplace_back("qux"); + } schem.flags = 0; schem.size = size; @@ -83,18 +84,21 @@ void TestSchematic::testMtsSerializeDeserialize(const NodeDefManager *ndef) for (s16 y = 0; y != size.Y; y++) schem.slice_probs[y] = MTSCHEM_PROB_ALWAYS; - UASSERT(schem.serializeToMts(&ss, names)); + UASSERT(schem.serializeToMts(&ss)); ss.seekg(0); - names.clear(); - UASSERT(schem2.deserializeFromMts(&ss, &names)); + Schematic schem2; + UASSERT(schem2.deserializeFromMts(&ss)); - UASSERTEQ(size_t, names.size(), 4); - UASSERTEQ(std::string, names[0], "foo"); - UASSERTEQ(std::string, names[1], "bar"); - UASSERTEQ(std::string, names[2], "baz"); - UASSERTEQ(std::string, names[3], "qux"); + { + std::vector &names = schem2.m_nodenames; + UASSERTEQ(size_t, names.size(), 4); + UASSERTEQ(std::string, names[0], "foo"); + UASSERTEQ(std::string, names[1], "bar"); + UASSERTEQ(std::string, names[2], "baz"); + UASSERTEQ(std::string, names[3], "qux"); + } UASSERT(schem2.size == size); for (size_t i = 0; i != volume; i++) @@ -120,14 +124,14 @@ void TestSchematic::testLuaTableSerialize(const NodeDefManager *ndef) for (s16 y = 0; y != size.Y; y++) schem.slice_probs[y] = MTSCHEM_PROB_ALWAYS; - std::vector names; + std::vector &names = schem.m_nodenames; names.emplace_back("air"); names.emplace_back("default:lava_source"); names.emplace_back("default:glass"); std::ostringstream ss(std::ios_base::binary); - UASSERT(schem.serializeToLua(&ss, names, false, 0)); + UASSERT(schem.serializeToLua(&ss, false, 0)); UASSERTEQ(std::string, ss.str(), expected_lua_output); } @@ -159,6 +163,8 @@ void TestSchematic::testFileSerializeDeserialize(const NodeDefManager *ndef) schem1.slice_probs[0] = 80; schem1.slice_probs[1] = 160; schem1.slice_probs[2] = 240; + // Node resolving happened manually. + schem1.m_resolve_done = true; for (size_t i = 0; i != volume; i++) { content_t c = content_map[test_schem2_data[i]]; From 042131d91d0f61d1252d240aa799f3b12b509cfe Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 20 Mar 2021 19:48:25 +0100 Subject: [PATCH 104/110] Mainmenu: Improve "Join Game" tab (#11078) --- LICENSE.txt | 10 +- builtin/fstk/tabview.lua | 54 +-- builtin/mainmenu/common.lua | 110 ++--- builtin/mainmenu/tab_online.lua | 452 +++++++++--------- ...flags_favorite.png => server_favorite.png} | Bin textures/base/pack/server_incompatible.png | Bin 0 -> 385 bytes textures/base/pack/server_public.png | Bin 0 -> 492 bytes 7 files changed, 307 insertions(+), 319 deletions(-) rename textures/base/pack/{server_flags_favorite.png => server_favorite.png} (100%) create mode 100644 textures/base/pack/server_incompatible.png create mode 100644 textures/base/pack/server_public.png diff --git a/LICENSE.txt b/LICENSE.txt index 9b8ee851a..2d1c0c795 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -14,6 +14,9 @@ https://www.apache.org/licenses/LICENSE-2.0.html Textures by Zughy are under CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/ +textures/base/pack/server_public.png is under CC-BY 4.0, taken from Twitter's Twemoji set +https://creativecommons.org/licenses/by/4.0/ + Authors of media files ----------------------- Everything not listed in here: @@ -39,10 +42,10 @@ erlehmann: misc/minetest.svg textures/base/pack/logo.png -JRottm +JRottm: textures/base/pack/player_marker.png -srifqi +srifqi: textures/base/pack/chat_hide_btn.png textures/base/pack/chat_show_btn.png textures/base/pack/joystick_bg.png @@ -58,6 +61,9 @@ Zughy: textures/base/pack/cdb_update.png textures/base/pack/cdb_viewonline.png +appgurueu: + textures/base/pack/server_incompatible.png + License of Minetest source code ------------------------------- diff --git a/builtin/fstk/tabview.lua b/builtin/fstk/tabview.lua index 3715e231b..424d329fb 100644 --- a/builtin/fstk/tabview.lua +++ b/builtin/fstk/tabview.lua @@ -58,26 +58,20 @@ end -------------------------------------------------------------------------------- local function get_formspec(self) - local formspec = "" - - if not self.hidden and (self.parent == nil or not self.parent.hidden) then - - if self.parent == nil then - local tsize = self.tablist[self.last_tab_index].tabsize or - {width=self.width, height=self.height} - formspec = formspec .. - string.format("size[%f,%f,%s]",tsize.width,tsize.height, - dump(self.fixed_size)) - end - formspec = formspec .. self:tab_header() - formspec = formspec .. - self.tablist[self.last_tab_index].get_formspec( - self, - self.tablist[self.last_tab_index].name, - self.tablist[self.last_tab_index].tabdata, - self.tablist[self.last_tab_index].tabsize - ) + if self.hidden or (self.parent ~= nil and self.parent.hidden) then + return "" end + local tab = self.tablist[self.last_tab_index] + + local content, prepend = tab.get_formspec(self, tab.name, tab.tabdata, tab.tabsize) + + if self.parent == nil and not prepend then + local tsize = tab.tabsize or {width=self.width, height=self.height} + prepend = string.format("size[%f,%f,%s]", tsize.width, tsize.height, + dump(self.fixed_size)) + end + + local formspec = (prepend or "") .. self:tab_header() .. content return formspec end @@ -97,14 +91,9 @@ local function handle_buttons(self,fields) return true end - if self.tablist[self.last_tab_index].button_handler ~= nil then - return - self.tablist[self.last_tab_index].button_handler( - self, - fields, - self.tablist[self.last_tab_index].name, - self.tablist[self.last_tab_index].tabdata - ) + local tab = self.tablist[self.last_tab_index] + if tab.button_handler ~= nil then + return tab.button_handler(self, fields, tab.name, tab.tabdata) end return false @@ -122,14 +111,9 @@ local function handle_events(self,event) return true end - if self.tablist[self.last_tab_index].evt_handler ~= nil then - return - self.tablist[self.last_tab_index].evt_handler( - self, - event, - self.tablist[self.last_tab_index].name, - self.tablist[self.last_tab_index].tabdata - ) + local tab = self.tablist[self.last_tab_index] + if tab.evt_handler ~= nil then + return tab.evt_handler(self, event, tab.name, tab.tabdata) end return false diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua index cd896f9ec..6db351048 100644 --- a/builtin/mainmenu/common.lua +++ b/builtin/mainmenu/common.lua @@ -14,14 +14,11 @@ --You should have received a copy of the GNU Lesser General Public License along --with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. --------------------------------------------------------------------------------- + -- Global menu data --------------------------------------------------------------------------------- menudata = {} --------------------------------------------------------------------------------- -- Local cached values --------------------------------------------------------------------------------- local min_supp_proto, max_supp_proto function common_update_cached_supp_proto() @@ -29,14 +26,12 @@ function common_update_cached_supp_proto() max_supp_proto = core.get_max_supp_proto() end common_update_cached_supp_proto() --------------------------------------------------------------------------------- --- Menu helper functions --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- +-- Menu helper functions + local function render_client_count(n) - if n > 99 then return '99+' - elseif n >= 0 then return tostring(n) + if n > 999 then return '99+' + elseif n >= 0 then return tostring(n) else return '?' end end @@ -50,21 +45,7 @@ local function configure_selected_world_params(idx) end end --------------------------------------------------------------------------------- -function image_column(tooltip, flagname) - return "image,tooltip=" .. core.formspec_escape(tooltip) .. "," .. - "0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," .. - "1=" .. core.formspec_escape(defaulttexturedir .. - (flagname and "server_flags_" .. flagname .. ".png" or "blank.png")) .. "," .. - "2=" .. core.formspec_escape(defaulttexturedir .. "server_ping_4.png") .. "," .. - "3=" .. core.formspec_escape(defaulttexturedir .. "server_ping_3.png") .. "," .. - "4=" .. core.formspec_escape(defaulttexturedir .. "server_ping_2.png") .. "," .. - "5=" .. core.formspec_escape(defaulttexturedir .. "server_ping_1.png") -end - - --------------------------------------------------------------------------------- -function render_serverlist_row(spec, is_favorite) +function render_serverlist_row(spec) local text = "" if spec.name then text = text .. core.formspec_escape(spec.name:trim()) @@ -75,31 +56,29 @@ function render_serverlist_row(spec, is_favorite) end end - local grey_out = not is_server_protocol_compat(spec.proto_min, spec.proto_max) + local grey_out = not spec.is_compatible - local details - if is_favorite then - details = "1," - else - details = "0," - end + local details = {} - if spec.ping then - local ping = spec.ping * 1000 - if ping <= 50 then - details = details .. "2," - elseif ping <= 100 then - details = details .. "3," - elseif ping <= 250 then - details = details .. "4," + if spec.lag or spec.ping then + local lag = (spec.lag or 0) * 1000 + (spec.ping or 0) * 250 + if lag <= 125 then + table.insert(details, "1") + elseif lag <= 175 then + table.insert(details, "2") + elseif lag <= 250 then + table.insert(details, "3") else - details = details .. "5," + table.insert(details, "4") end else - details = details .. "0," + table.insert(details, "0") end - if spec.clients and spec.clients_max then + table.insert(details, ",") + + local color = (grey_out and "#aaaaaa") or ((spec.is_favorite and "#ddddaa") or "#ffffff") + if spec.clients and (spec.clients_max or 0) > 0 then local clients_percent = 100 * spec.clients / spec.clients_max -- Choose a color depending on how many clients are connected @@ -110,38 +89,35 @@ function render_serverlist_row(spec, is_favorite) elseif clients_percent <= 60 then clients_color = '#a1e587' -- 0-60%: green elseif clients_percent <= 90 then clients_color = '#ffdc97' -- 60-90%: yellow elseif clients_percent == 100 then clients_color = '#dd5b5b' -- full server: red (darker) - else clients_color = '#ffba97' -- 90-100%: orange + else clients_color = '#ffba97' -- 90-100%: orange end - details = details .. clients_color .. ',' .. - render_client_count(spec.clients) .. ',/,' .. - render_client_count(spec.clients_max) .. ',' - - elseif grey_out then - details = details .. '#aaaaaa,?,/,?,' + table.insert(details, clients_color) + table.insert(details, render_client_count(spec.clients) .. " / " .. + render_client_count(spec.clients_max)) else - details = details .. ',?,/,?,' + table.insert(details, color) + table.insert(details, "?") end if spec.creative then - details = details .. "1," + table.insert(details, "1") -- creative icon else - details = details .. "0," - end - - if spec.damage then - details = details .. "1," - else - details = details .. "0," + table.insert(details, "0") end if spec.pvp then - details = details .. "1," + table.insert(details, "2") -- pvp icon + elseif spec.damage then + table.insert(details, "1") -- heart icon else - details = details .. "0," + table.insert(details, "0") end - return details .. (grey_out and '#aaaaaa,' or ',') .. text + table.insert(details, color) + table.insert(details, text) + + return table.concat(details, ",") end -------------------------------------------------------------------------------- @@ -150,14 +126,13 @@ os.tempfolder = function() return temp .. DIR_DELIM .. "MT_" .. math.random(0, 10000) end --------------------------------------------------------------------------------- os.tmpname = function() local path = os.tempfolder() io.open(path, "w"):close() return path end - -------------------------------------------------------------------------------- + function menu_render_worldlist() local retval = "" local current_worldlist = menudata.worldlist:get_list() @@ -171,7 +146,6 @@ function menu_render_worldlist() return retval end --------------------------------------------------------------------------------- function menu_handle_key_up_down(fields, textlist, settingname) local oldidx, newidx = core.get_textlist_index(textlist), 1 if fields.key_up or fields.key_down then @@ -188,7 +162,6 @@ function menu_handle_key_up_down(fields, textlist, settingname) return false end --------------------------------------------------------------------------------- function text2textlist(xpos, ypos, width, height, tl_name, textlen, text, transparency) local textlines = core.wrap_text(text, textlen, true) local retval = "textlist[" .. xpos .. "," .. ypos .. ";" .. width .. @@ -206,7 +179,6 @@ function text2textlist(xpos, ypos, width, height, tl_name, textlen, text, transp return retval end --------------------------------------------------------------------------------- function is_server_protocol_compat(server_proto_min, server_proto_max) if (not server_proto_min) or (not server_proto_max) then -- There is no info. Assume the best and act as if we would be compatible. @@ -214,7 +186,7 @@ function is_server_protocol_compat(server_proto_min, server_proto_max) end return min_supp_proto <= server_proto_max and max_supp_proto >= server_proto_min end --------------------------------------------------------------------------------- + function is_server_protocol_compat_or_error(server_proto_min, server_proto_max) if not is_server_protocol_compat(server_proto_min, server_proto_max) then local server_prot_ver_info, client_prot_ver_info @@ -242,7 +214,7 @@ function is_server_protocol_compat_or_error(server_proto_min, server_proto_max) return true end --------------------------------------------------------------------------------- + function menu_worldmt(selected, setting, value) local world = menudata.worldlist:get_list()[selected] if world then diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua index e6748ed88..fb7409864 100644 --- a/builtin/mainmenu/tab_online.lua +++ b/builtin/mainmenu/tab_online.lua @@ -15,17 +15,50 @@ --with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. --------------------------------------------------------------------------------- +local function get_sorted_servers() + local servers = { + fav = {}, + public = {}, + incompatible = {} + } + + local favs = serverlistmgr.get_favorites() + local taken_favs = {} + local result = menudata.search_result or serverlistmgr.servers + for _, server in ipairs(result) do + server.is_favorite = false + for index, fav in ipairs(favs) do + if server.address == fav.address and server.port == fav.port then + taken_favs[index] = true + server.is_favorite = true + break + end + end + server.is_compatible = is_server_protocol_compat(server.proto_min, server.proto_max) + if server.is_favorite then + table.insert(servers.fav, server) + elseif server.is_compatible then + table.insert(servers.public, server) + else + table.insert(servers.incompatible, server) + end + end + + if not menudata.search_result then + for index, fav in ipairs(favs) do + if not taken_favs[index] then + table.insert(servers.fav, fav) + end + end + end + + return servers +end + local function get_formspec(tabview, name, tabdata) -- Update the cached supported proto info, -- it may have changed after a change by the settings menu. common_update_cached_supp_proto() - local selected - if menudata.search_result then - selected = menudata.search_result[tabdata.selected] - else - selected = serverlistmgr.servers[tabdata.selected] - end if not tabdata.search_for then tabdata.search_for = "" @@ -33,128 +66,221 @@ local function get_formspec(tabview, name, tabdata) local retval = -- Search - "field[0.15,0.075;5.91,1;te_search;;" .. core.formspec_escape(tabdata.search_for) .. "]" .. - "image_button[5.63,-.165;.83,.83;" .. core.formspec_escape(defaulttexturedir .. "search.png") .. ";btn_mp_search;]" .. - "image_button[6.3,-.165;.83,.83;" .. core.formspec_escape(defaulttexturedir .. "clear.png") .. ";btn_mp_clear;]" .. - "image_button[6.97,-.165;.83,.83;" .. core.formspec_escape(defaulttexturedir .. "refresh.png") - .. ";btn_mp_refresh;]" .. + "field[0.25,0.25;7,0.75;te_search;;" .. core.formspec_escape(tabdata.search_for) .. "]" .. + "container[7.25,0.25]" .. + "image_button[0,0;0.75,0.75;" .. core.formspec_escape(defaulttexturedir .. "search.png") .. ";btn_mp_search;]" .. + "image_button[0.75,0;0.75,0.75;" .. core.formspec_escape(defaulttexturedir .. "clear.png") .. ";btn_mp_clear;]" .. + "image_button[1.5,0;0.75,0.75;" .. core.formspec_escape(defaulttexturedir .. "refresh.png") .. ";btn_mp_refresh;]" .. + "tooltip[btn_mp_clear;" .. fgettext("Clear") .. "]" .. + "tooltip[btn_mp_search;" .. fgettext("Search") .. "]" .. + "tooltip[btn_mp_refresh;" .. fgettext("Refresh") .. "]" .. + "container_end[]" .. + + "container[9.75,0]" .. + "box[0,0;5.75,7;#666666]" .. -- Address / Port - "label[7.75,-0.25;" .. fgettext("Address / Port") .. "]" .. - "field[8,0.65;3.25,0.5;te_address;;" .. + "label[0.25,0.35;" .. fgettext("Address") .. "]" .. + "label[4.25,0.35;" .. fgettext("Port") .. "]" .. + "field[0.25,0.5;4,0.75;te_address;;" .. core.formspec_escape(core.settings:get("address")) .. "]" .. - "field[11.1,0.65;1.4,0.5;te_port;;" .. + "field[4.25,0.5;1.25,0.75;te_port;;" .. core.formspec_escape(core.settings:get("remote_port")) .. "]" .. -- Name / Password - "label[7.75,0.95;" .. fgettext("Name / Password") .. "]" .. - "field[8,1.85;2.9,0.5;te_name;;" .. + "label[0.25,1.55;" .. fgettext("Name") .. "]" .. + "label[3,1.55;" .. fgettext("Password") .. "]" .. + "field[0.25,1.75;2.75,0.75;te_name;;" .. core.formspec_escape(core.settings:get("name")) .. "]" .. - "pwdfield[10.73,1.85;1.77,0.5;te_pwd;]" .. + "pwdfield[3,1.75;2.5,0.75;te_pwd;]" .. -- Description Background - "box[7.73,2.25;4.25,2.6;#999999]".. + "label[0.25,2.75;" .. fgettext("Server Description") .. "]" .. + "box[0.25,3;5.25,2.75;#999999]".. -- Connect - "button[9.88,4.9;2.3,1;btn_mp_connect;" .. fgettext("Connect") .. "]" + "button[3,6;2.5,0.75;btn_mp_connect;" .. fgettext("Connect") .. "]" - if tabdata.selected and selected then + if tabdata.selected then if gamedata.fav then - retval = retval .. "button[7.73,4.9;2.3,1;btn_delete_favorite;" .. + retval = retval .. "button[0.25,6;2.5,0.75;btn_delete_favorite;" .. fgettext("Del. Favorite") .. "]" end - if selected.description then - retval = retval .. "textarea[8.1,2.3;4.23,2.9;;;" .. - core.formspec_escape((gamedata.serverdescription or ""), true) .. "]" + if gamedata.serverdescription then + retval = retval .. "textarea[0.25,3;5.25,2.75;;;" .. + core.formspec_escape(gamedata.serverdescription) .. "]" end end - --favorites + retval = retval .. "container_end[]" + + -- Table retval = retval .. "tablecolumns[" .. - image_column(fgettext("Favorite"), "favorite") .. ";" .. - image_column(fgettext("Ping")) .. ",padding=0.25;" .. - "color,span=3;" .. - "text,align=right;" .. -- clients - "text,align=center,padding=0.25;" .. -- "/" - "text,align=right,padding=0.25;" .. -- clients_max - image_column(fgettext("Creative mode"), "creative") .. ",padding=1;" .. - image_column(fgettext("Damage enabled"), "damage") .. ",padding=0.25;" .. - --~ PvP = Player versus Player - image_column(fgettext("PvP enabled"), "pvp") .. ",padding=0.25;" .. + "image,tooltip=" .. fgettext("Ping") .. "," .. + "0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," .. + "1=" .. core.formspec_escape(defaulttexturedir .. "server_ping_4.png") .. "," .. + "2=" .. core.formspec_escape(defaulttexturedir .. "server_ping_3.png") .. "," .. + "3=" .. core.formspec_escape(defaulttexturedir .. "server_ping_2.png") .. "," .. + "4=" .. core.formspec_escape(defaulttexturedir .. "server_ping_1.png") .. "," .. + "5=" .. core.formspec_escape(defaulttexturedir .. "server_favorite.png") .. "," .. + "6=" .. core.formspec_escape(defaulttexturedir .. "server_public.png") .. "," .. + "7=" .. core.formspec_escape(defaulttexturedir .. "server_incompatible.png") .. ";" .. "color,span=1;" .. - "text,padding=1]" .. - "table[-0.15,0.6;7.75,5.15;favorites;" + "text,align=inline;".. + "color,span=1;" .. + "text,align=inline,width=4.25;" .. + "image,tooltip=" .. fgettext("Creative mode") .. "," .. + "0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," .. + "1=" .. core.formspec_escape(defaulttexturedir .. "server_flags_creative.png") .. "," .. + "align=inline,padding=0.25,width=1.5;" .. + --~ PvP = Player versus Player + "image,tooltip=" .. fgettext("Damage / PvP") .. "," .. + "0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," .. + "1=" .. core.formspec_escape(defaulttexturedir .. "server_flags_damage.png") .. "," .. + "2=" .. core.formspec_escape(defaulttexturedir .. "server_flags_pvp.png") .. "," .. + "align=inline,padding=0.25,width=1.5;" .. + "color,align=inline,span=1;" .. + "text,align=inline,padding=1]" .. + "table[0.25,1;9.25,5.75;servers;" - if menudata.search_result then - local favs = serverlistmgr.get_favorites() - for i = 1, #menudata.search_result do - local server = menudata.search_result[i] - for fav_id = 1, #favs do - if server.address == favs[fav_id].address and - server.port == favs[fav_id].port then - server.is_favorite = true - end + local servers = get_sorted_servers() + + local dividers = { + fav = "5,#ffff00," .. fgettext("Favorites") .. ",,,0,0,,", + public = "6,#4bdd42," .. fgettext("Public Servers") .. ",,,0,0,,", + incompatible = "7,"..mt_color_grey.."," .. fgettext("Incompatible Servers") .. ",,,0,0,," + } + local order = {"fav", "public", "incompatible"} + + tabdata.lookup = {} -- maps row number to server + local rows = {} + for _, section in ipairs(order) do + local section_servers = servers[section] + if next(section_servers) ~= nil then + rows[#rows + 1] = dividers[section] + for _, server in ipairs(section_servers) do + tabdata.lookup[#rows + 1] = server + rows[#rows + 1] = render_serverlist_row(server) end - - if i ~= 1 then - retval = retval .. "," - end - - retval = retval .. render_serverlist_row(server, server.is_favorite) - end - elseif #serverlistmgr.servers > 0 then - local favs = serverlistmgr.get_favorites() - if #favs > 0 then - for i = 1, #favs do - for j = 1, #serverlistmgr.servers do - if serverlistmgr.servers[j].address == favs[i].address and - serverlistmgr.servers[j].port == favs[i].port then - table.insert(serverlistmgr.servers, i, table.remove(serverlistmgr.servers, j)) - end - end - if favs[i].address ~= serverlistmgr.servers[i].address then - table.insert(serverlistmgr.servers, i, favs[i]) - end - end - end - - retval = retval .. render_serverlist_row(serverlistmgr.servers[1], (#favs > 0)) - for i = 2, #serverlistmgr.servers do - retval = retval .. "," .. render_serverlist_row(serverlistmgr.servers[i], (i <= #favs)) end end + retval = retval .. table.concat(rows, ",") + if tabdata.selected then retval = retval .. ";" .. tabdata.selected .. "]" else retval = retval .. ";0]" end - return retval + return retval, "size[15.5,7,false]real_coordinates[true]" end -------------------------------------------------------------------------------- -local function main_button_handler(tabview, fields, name, tabdata) - local serverlist = menudata.search_result or serverlistmgr.servers +local function search_server_list(input) + menudata.search_result = nil + if #serverlistmgr.servers < 2 then + return + end + + -- setup the keyword list + local keywords = {} + for word in input:gmatch("%S+") do + word = word:gsub("(%W)", "%%%1") + table.insert(keywords, word) + end + + if #keywords == 0 then + return + end + + menudata.search_result = {} + + -- Search the serverlist + local search_result = {} + for i = 1, #serverlistmgr.servers do + local server = serverlistmgr.servers[i] + local found = 0 + for k = 1, #keywords do + local keyword = keywords[k] + if server.name then + local sername = server.name:lower() + local _, count = sername:gsub(keyword, keyword) + found = found + count * 4 + end + + if server.description then + local desc = server.description:lower() + local _, count = desc:gsub(keyword, keyword) + found = found + count * 2 + end + end + if found > 0 then + local points = (#serverlistmgr.servers - i) / 5 + found + server.points = points + table.insert(search_result, server) + end + end + + if #search_result == 0 then + return + end + + table.sort(search_result, function(a, b) + return a.points > b.points + end) + menudata.search_result = search_result +end + +local function set_selected_server(tabdata, idx, server) + -- reset selection + if idx == nil or server == nil then + tabdata.selected = nil + + core.settings:set("address", "") + core.settings:set("remote_port", "30000") + return + end + + local address = server.address + local port = server.port + gamedata.serverdescription = server.description + + gamedata.fav = false + for _, fav in ipairs(serverlistmgr.get_favorites()) do + if address == fav.address and port == fav.port then + gamedata.fav = true + break + end + end + + if address and port then + core.settings:set("address", address) + core.settings:set("remote_port", port) + end + tabdata.selected = idx +end + +local function main_button_handler(tabview, fields, name, tabdata) if fields.te_name then gamedata.playername = fields.te_name core.settings:set("name", fields.te_name) end - if fields.favorites then - local event = core.explode_table_event(fields.favorites) - local fav = serverlist[event.row] + if fields.servers then + local event = core.explode_table_event(fields.servers) + local server = tabdata.lookup[event.row] - if event.type == "DCL" then - if event.row <= #serverlist then + if server then + if event.type == "DCL" then if not is_server_protocol_compat_or_error( - fav.proto_min, fav.proto_max) then + server.proto_min, server.proto_max) then return true end - gamedata.address = fav.address - gamedata.port = fav.port + gamedata.address = server.address + gamedata.port = server.port gamedata.playername = fields.te_name gamedata.selected_world = 0 @@ -162,84 +288,32 @@ local function main_button_handler(tabview, fields, name, tabdata) gamedata.password = fields.te_pwd end - gamedata.servername = fav.name - gamedata.serverdescription = fav.description + gamedata.servername = server.name + gamedata.serverdescription = server.description if gamedata.address and gamedata.port then core.settings:set("address", gamedata.address) core.settings:set("remote_port", gamedata.port) core.start() end + return true end - return true - end - - if event.type == "CHG" then - if event.row <= #serverlist then - gamedata.fav = false - local favs = serverlistmgr.get_favorites() - local address = fav.address - local port = fav.port - gamedata.serverdescription = fav.description - - for i = 1, #favs do - if fav.address == favs[i].address and - fav.port == favs[i].port then - gamedata.fav = true - end - end - - if address and port then - core.settings:set("address", address) - core.settings:set("remote_port", port) - end - tabdata.selected = event.row + if event.type == "CHG" then + set_selected_server(tabdata, event.row, server) + return true end - return true end end - if fields.key_up or fields.key_down then - local fav_idx = core.get_table_index("favorites") - local fav = serverlist[fav_idx] - - if fav_idx then - if fields.key_up and fav_idx > 1 then - fav_idx = fav_idx - 1 - elseif fields.key_down and fav_idx < #serverlistmgr.servers then - fav_idx = fav_idx + 1 - end - else - fav_idx = 1 - end - - if not serverlistmgr.servers or not fav then - tabdata.selected = 0 - return true - end - - local address = fav.address - local port = fav.port - gamedata.serverdescription = fav.description - if address and port then - core.settings:set("address", address) - core.settings:set("remote_port", port) - end - - tabdata.selected = fav_idx - return true - end - if fields.btn_delete_favorite then - local current_favorite = core.get_table_index("favorites") - if not current_favorite then return end + local idx = core.get_table_index("servers") + if not idx then return end + local server = tabdata.lookup[idx] + if not server then return end - serverlistmgr.delete_favorite(serverlistmgr.servers[current_favorite]) - serverlistmgr.sync() - tabdata.selected = nil - - core.settings:set("address", "") - core.settings:set("remote_port", "30000") + serverlistmgr.delete_favorite(server) + -- the server at [idx+1] will be at idx once list is refreshed + set_selected_server(tabdata, idx, tabdata.lookup[idx+1]) return true end @@ -250,63 +324,13 @@ local function main_button_handler(tabview, fields, name, tabdata) end if fields.btn_mp_search or fields.key_enter_field == "te_search" then - tabdata.selected = 1 - local input = fields.te_search:lower() tabdata.search_for = fields.te_search - - if #serverlistmgr.servers < 2 then - return true + search_server_list(fields.te_search:lower()) + if menudata.search_result then + -- first server in row 2 due to header + set_selected_server(tabdata, 2, menudata.search_result[1]) end - menudata.search_result = {} - - -- setup the keyword list - local keywords = {} - for word in input:gmatch("%S+") do - word = word:gsub("(%W)", "%%%1") - table.insert(keywords, word) - end - - if #keywords == 0 then - menudata.search_result = nil - return true - end - - -- Search the serverlist - local search_result = {} - for i = 1, #serverlistmgr.servers do - local server = serverlistmgr.servers[i] - local found = 0 - for k = 1, #keywords do - local keyword = keywords[k] - if server.name then - local sername = server.name:lower() - local _, count = sername:gsub(keyword, keyword) - found = found + count * 4 - end - - if server.description then - local desc = server.description:lower() - local _, count = desc:gsub(keyword, keyword) - found = found + count * 2 - end - end - if found > 0 then - local points = (#serverlistmgr.servers - i) / 5 + found - server.points = points - table.insert(search_result, server) - end - end - if #search_result > 0 then - table.sort(search_result, function(a, b) - return a.points > b.points - end) - menudata.search_result = search_result - local first_server = search_result[1] - core.settings:set("address", first_server.address) - core.settings:set("remote_port", first_server.port) - gamedata.serverdescription = first_server.description - end return true end @@ -322,20 +346,22 @@ local function main_button_handler(tabview, fields, name, tabdata) gamedata.address = fields.te_address gamedata.port = tonumber(fields.te_port) gamedata.selected_world = 0 - local fav_idx = core.get_table_index("favorites") - local fav = serverlist[fav_idx] - if fav_idx and fav_idx <= #serverlist and - fav.address == gamedata.address and - fav.port == gamedata.port then + local idx = core.get_table_index("servers") + local server = idx and tabdata.lookup[idx] - serverlistmgr.add_favorite(fav) + set_selected_server(tabdata) - gamedata.servername = fav.name - gamedata.serverdescription = fav.description + if server and server.address == gamedata.address and + server.port == gamedata.port then + + serverlistmgr.add_favorite(server) + + gamedata.servername = server.name + gamedata.serverdescription = server.description if not is_server_protocol_compat_or_error( - fav.proto_min, fav.proto_max) then + server.proto_min, server.proto_max) then return true end else @@ -354,6 +380,7 @@ local function main_button_handler(tabview, fields, name, tabdata) core.start() return true end + return false end @@ -362,7 +389,6 @@ local function on_change(type, old_tab, new_tab) serverlistmgr.sync() end --------------------------------------------------------------------------------- return { name = "online", caption = fgettext("Join Game"), diff --git a/textures/base/pack/server_flags_favorite.png b/textures/base/pack/server_favorite.png similarity index 100% rename from textures/base/pack/server_flags_favorite.png rename to textures/base/pack/server_favorite.png diff --git a/textures/base/pack/server_incompatible.png b/textures/base/pack/server_incompatible.png new file mode 100644 index 0000000000000000000000000000000000000000..9076ab58f06b5ac6b1ca8ebd44773c4140a64b0f GIT binary patch literal 385 zcmV-{0e=38P)At56opTM;395u(j|@t5+o`v;wFM1*2ztmJ}4dP)F0sF)Ck&a`5*p=IEkZwLKHDC za=O%jtuYpQ$9KPT-hKBx;6I8&xEu_o5A(J?Wwq)8fC>QE?RI#28nf4%CyLAEISgZr z(`k3z==U9Zo@BS{#)>PI8Al^Y%lfHY1aJ;?&Or zWx0Ig;gCYTE^s`mlv2Vl1bp99*6WwMw_i9x|J~Hlb}#IUEKom6E@5CNrm|Nv6|N;Ic$j&0@9sP&S+QBm-r?f2EWM fgkd&`eW<c#H5WF&~;`|^V2tXiU#NGRa%j6XzR0MXT!n)lTND#sgSe=0M6n9RkQc*B$e?fo| zyKtX^luR)ef@G>&-0du8ZpXPE(rKBn#u+Q_Sn$k(XI9*?##uTolm7by-cQOmELgDM zi4_l7i02flF=-rUA)d41fdx-2SkP!W_@kK=B@2|r>fu$HIp-V)iWVt2rR&fSkovEVk;@H3bySTP$8Q3%0DtS+HZlC2KR8#a3Qy^-|-K z1-tgVO{bg0vBp^@)t8U@^DPN(y3)E5_8`GcGAYkU<7X0^I~Lr2`1<|br?4ikxc(b~ zS6tIo#mS^RW5KQSieDU%lcMl~c+mTr2LZVkL{b#({bNI*$o-yRulF?%v?1_{qP>4~ zEU}fa`9BH&ZlWEV*sgB#_kx{QyEx^6SG(|nT|*q}bh=48ixjt{C|F~C+5@Y-_7=%G z=V-JXkk~qtN?EMV0*0qnnF53aYa0DH&I65>gX1t&ZJ4TY7OGyDdd*#=(@jERa~8Wl i#98c~#O4Rh9sCB{Tao+q-1zta0000 Date: Sat, 20 Mar 2021 22:06:17 +0100 Subject: [PATCH 105/110] Serialize tool capabilities JSON without whitespace fixes #11087 --- src/convert_json.cpp | 11 ++++++++--- src/convert_json.h | 3 +++ src/tool.cpp | 3 ++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/convert_json.cpp b/src/convert_json.cpp index c774aa002..e9ff1e56c 100644 --- a/src/convert_json.cpp +++ b/src/convert_json.cpp @@ -68,12 +68,17 @@ Json::Value fetchJsonValue(const std::string &url, return root; } -std::string fastWriteJson(const Json::Value &value) +void fastWriteJson(const Json::Value &value, std::ostream &to) { - std::ostringstream oss; Json::StreamWriterBuilder builder; builder["indentation"] = ""; std::unique_ptr writer(builder.newStreamWriter()); - writer->write(value, &oss); + writer->write(value, &to); +} + +std::string fastWriteJson(const Json::Value &value) +{ + std::ostringstream oss; + fastWriteJson(value, oss); return oss.str(); } diff --git a/src/convert_json.h b/src/convert_json.h index d8825acdc..2c094a946 100644 --- a/src/convert_json.h +++ b/src/convert_json.h @@ -20,8 +20,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include +#include Json::Value fetchJsonValue(const std::string &url, std::vector *extra_headers); +void fastWriteJson(const Json::Value &value, std::ostream &to); + std::string fastWriteJson(const Json::Value &value); diff --git a/src/tool.cpp b/src/tool.cpp index 90f4f9c12..3f639a69e 100644 --- a/src/tool.cpp +++ b/src/tool.cpp @@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "inventory.h" #include "exceptions.h" +#include "convert_json.h" #include "util/serialize.h" #include "util/numeric.h" @@ -142,7 +143,7 @@ void ToolCapabilities::serializeJson(std::ostream &os) const } root["damage_groups"] = damage_groups_object; - os << root; + fastWriteJson(root, os); } void ToolCapabilities::deserializeJson(std::istream &is) From 44ed05ddf0c74f3ea26cfb4adbbaed4b6038361f Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Mon, 22 Mar 2021 01:22:22 +0300 Subject: [PATCH 106/110] Restore minimal normal texture support (for minimap shading) --- src/client/game.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/client/game.cpp b/src/client/game.cpp index 9cc359843..31c782c51 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -426,6 +426,7 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter CachedPixelShaderSetting m_camera_offset_pixel; CachedPixelShaderSetting m_camera_offset_vertex; CachedPixelShaderSetting m_base_texture; + CachedPixelShaderSetting m_normal_texture; Client *m_client; public: @@ -459,6 +460,7 @@ public: m_camera_offset_pixel("cameraOffset"), m_camera_offset_vertex("cameraOffset"), m_base_texture("baseTexture"), + m_normal_texture("normalTexture"), m_client(client) { g_settings->registerChangedCallback("enable_fog", settingsCallback, this); @@ -546,8 +548,9 @@ public: m_camera_offset_pixel.set(camera_offset_array, services); m_camera_offset_vertex.set(camera_offset_array, services); - SamplerLayer_t base_tex = 0; + SamplerLayer_t base_tex = 0, normal_tex = 1; m_base_texture.set(&base_tex, services); + m_normal_texture.set(&normal_tex, services); } }; From afe988d83d00462af70730237362f0d42eb7c638 Mon Sep 17 00:00:00 2001 From: Hugues Ross Date: Sun, 21 Mar 2021 18:23:14 -0400 Subject: [PATCH 107/110] lua_api.txt: Fix style selector examples --- doc/lua_api.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index abbe88f80..737a690f6 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2679,7 +2679,7 @@ Elements * `span=`: number of following columns to affect (default: infinite). -### `style[,;;;...]` +### `style[,,...;;;...]` * Set the style for the element(s) matching `selector` by name. * `selector` can be one of: @@ -2692,7 +2692,7 @@ Elements * See [Styling Formspecs]. -### `style_type[,;;;...]` +### `style_type[,,...;;;...]` * Set the style for the element(s) matching `selector` by type. * `selector` can be one of: @@ -2765,10 +2765,10 @@ Styling Formspecs Formspec elements can be themed using the style elements: - style[,;;;...] - style[:,:;;;...] - style_type[,;;;...] - style_type[:,:;;;...] + style[,,...;;;...] + style[:,:,...;;;...] + style_type[,,...;;;...] + style_type[:,:,...;;;...] Where a prop is: From c9eba8440d3dc293a8aa6ffafc045737732da1e1 Mon Sep 17 00:00:00 2001 From: Jean-Patrick Guerrero Date: Sun, 21 Mar 2021 23:23:30 +0100 Subject: [PATCH 108/110] Fix segfault for model[] without animation speed --- src/gui/guiFormSpecMenu.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 4661e505d..fd35f2d84 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -2745,8 +2745,8 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element) } // Avoid length checks by resizing - if (parts.size() < 9) - parts.resize(9); + if (parts.size() < 10) + parts.resize(10); std::vector v_pos = split(parts[0], ','); std::vector v_geom = split(parts[1], ','); From 2da1eee394554879bf1cee6bc0f7b77acf0b6c43 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Tue, 23 Mar 2021 15:43:26 +0100 Subject: [PATCH 109/110] Fix broken `BiomeGen` abstraction (#11107) --- src/emerge.cpp | 16 ++++- src/emerge.h | 7 +- src/mapgen/mapgen.cpp | 4 +- src/mapgen/mapgen_valleys.cpp | 3 +- src/mapgen/mg_biome.cpp | 94 ++++++-------------------- src/mapgen/mg_biome.h | 27 +++++--- src/noise.cpp | 6 +- src/noise.h | 6 +- src/script/lua_api/l_mapgen.cpp | 116 ++++++++------------------------ 9 files changed, 92 insertions(+), 187 deletions(-) diff --git a/src/emerge.cpp b/src/emerge.cpp index e0dc5628e..32e7d9f24 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -113,13 +113,15 @@ EmergeParams::~EmergeParams() { infostream << "EmergeParams: destroying " << this << std::endl; // Delete everything that was cloned on creation of EmergeParams + delete biomegen; delete biomemgr; delete oremgr; delete decomgr; delete schemmgr; } -EmergeParams::EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr, +EmergeParams::EmergeParams(EmergeManager *parent, const BiomeGen *biomegen, + const BiomeManager *biomemgr, const OreManager *oremgr, const DecorationManager *decomgr, const SchematicManager *schemmgr) : ndef(parent->ndef), @@ -129,6 +131,7 @@ EmergeParams::EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr, biomemgr(biomemgr->clone()), oremgr(oremgr->clone()), decomgr(decomgr->clone()), schemmgr(schemmgr->clone()) { + this->biomegen = biomegen->clone(this->biomemgr); } //// @@ -143,6 +146,10 @@ EmergeManager::EmergeManager(Server *server) this->decomgr = new DecorationManager(server); this->schemmgr = new SchematicManager(server); + // initialized later + this->mgparams = nullptr; + this->biomegen = nullptr; + // Note that accesses to this variable are not synchronized. // This is because the *only* thread ever starting or stopping // EmergeThreads should be the ServerThread. @@ -240,9 +247,12 @@ void EmergeManager::initMapgens(MapgenParams *params) mgparams = params; + v3s16 csize = v3s16(1, 1, 1) * (params->chunksize * MAP_BLOCKSIZE); + biomegen = biomemgr->createBiomeGen(BIOMEGEN_ORIGINAL, params->bparams, csize); + for (u32 i = 0; i != m_threads.size(); i++) { - EmergeParams *p = new EmergeParams( - this, biomemgr, oremgr, decomgr, schemmgr); + EmergeParams *p = new EmergeParams(this, biomegen, + biomemgr, oremgr, decomgr, schemmgr); infostream << "EmergeManager: Created params " << p << " for thread " << i << std::endl; m_mapgens.push_back(Mapgen::createMapgen(params->mgtype, params, p)); diff --git a/src/emerge.h b/src/emerge.h index da845e243..aac3e7dd3 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -99,13 +99,15 @@ public: u32 gen_notify_on; const std::set *gen_notify_on_deco_ids; // shared + BiomeGen *biomegen; BiomeManager *biomemgr; OreManager *oremgr; DecorationManager *decomgr; SchematicManager *schemmgr; private: - EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr, + EmergeParams(EmergeManager *parent, const BiomeGen *biomegen, + const BiomeManager *biomemgr, const OreManager *oremgr, const DecorationManager *decomgr, const SchematicManager *schemmgr); }; @@ -140,6 +142,8 @@ public: ~EmergeManager(); DISABLE_CLASS_COPY(EmergeManager); + const BiomeGen *getBiomeGen() const { return biomegen; } + // no usage restrictions const BiomeManager *getBiomeManager() const { return biomemgr; } const OreManager *getOreManager() const { return oremgr; } @@ -196,6 +200,7 @@ private: // Managers of various map generation-related components // Note that each Mapgen gets a copy(!) of these to work with + BiomeGen *biomegen; BiomeManager *biomemgr; OreManager *oremgr; DecorationManager *decomgr; diff --git a/src/mapgen/mapgen.cpp b/src/mapgen/mapgen.cpp index e0dfd2d71..7984ff609 100644 --- a/src/mapgen/mapgen.cpp +++ b/src/mapgen/mapgen.cpp @@ -595,7 +595,8 @@ MapgenBasic::MapgenBasic(int mapgenid, MapgenParams *params, EmergeParams *emerg this->heightmap = new s16[csize.X * csize.Z]; //// Initialize biome generator - biomegen = m_bmgr->createBiomeGen(BIOMEGEN_ORIGINAL, params->bparams, csize); + biomegen = emerge->biomegen; + biomegen->assertChunkSize(csize); biomemap = biomegen->biomemap; //// Look up some commonly used content @@ -621,7 +622,6 @@ MapgenBasic::MapgenBasic(int mapgenid, MapgenParams *params, EmergeParams *emerg MapgenBasic::~MapgenBasic() { - delete biomegen; delete []heightmap; delete m_emerge; // destroying EmergeParams is our responsibility diff --git a/src/mapgen/mapgen_valleys.cpp b/src/mapgen/mapgen_valleys.cpp index c4234857e..80a99b1f0 100644 --- a/src/mapgen/mapgen_valleys.cpp +++ b/src/mapgen/mapgen_valleys.cpp @@ -57,7 +57,8 @@ FlagDesc flagdesc_mapgen_valleys[] = { MapgenValleys::MapgenValleys(MapgenValleysParams *params, EmergeParams *emerge) : MapgenBasic(MAPGEN_VALLEYS, params, emerge) { - // NOTE: MapgenValleys has a hard dependency on BiomeGenOriginal + FATAL_ERROR_IF(biomegen->getType() != BIOMEGEN_ORIGINAL, + "MapgenValleys has a hard dependency on BiomeGenOriginal"); m_bgen = (BiomeGenOriginal *)biomegen; spflags = params->spflags; diff --git a/src/mapgen/mg_biome.cpp b/src/mapgen/mg_biome.cpp index 610c38594..f08cc190f 100644 --- a/src/mapgen/mg_biome.cpp +++ b/src/mapgen/mg_biome.cpp @@ -101,71 +101,6 @@ BiomeManager *BiomeManager::clone() const return mgr; } - -// For BiomeGen type 'BiomeGenOriginal' -float BiomeManager::getHeatAtPosOriginal(v3s16 pos, NoiseParams &np_heat, - NoiseParams &np_heat_blend, u64 seed) const -{ - return - NoisePerlin2D(&np_heat, pos.X, pos.Z, seed) + - NoisePerlin2D(&np_heat_blend, pos.X, pos.Z, seed); -} - - -// For BiomeGen type 'BiomeGenOriginal' -float BiomeManager::getHumidityAtPosOriginal(v3s16 pos, NoiseParams &np_humidity, - NoiseParams &np_humidity_blend, u64 seed) const -{ - return - NoisePerlin2D(&np_humidity, pos.X, pos.Z, seed) + - NoisePerlin2D(&np_humidity_blend, pos.X, pos.Z, seed); -} - - -// For BiomeGen type 'BiomeGenOriginal' -const Biome *BiomeManager::getBiomeFromNoiseOriginal(float heat, - float humidity, v3s16 pos) const -{ - Biome *biome_closest = nullptr; - Biome *biome_closest_blend = nullptr; - float dist_min = FLT_MAX; - float dist_min_blend = FLT_MAX; - - for (size_t i = 1; i < getNumObjects(); i++) { - Biome *b = (Biome *)getRaw(i); - if (!b || - pos.Y < b->min_pos.Y || pos.Y > b->max_pos.Y + b->vertical_blend || - pos.X < b->min_pos.X || pos.X > b->max_pos.X || - pos.Z < b->min_pos.Z || pos.Z > b->max_pos.Z) - continue; - - float d_heat = heat - b->heat_point; - float d_humidity = humidity - b->humidity_point; - float dist = (d_heat * d_heat) + (d_humidity * d_humidity); - - if (pos.Y <= b->max_pos.Y) { // Within y limits of biome b - if (dist < dist_min) { - dist_min = dist; - biome_closest = b; - } - } else if (dist < dist_min_blend) { // Blend area above biome b - dist_min_blend = dist; - biome_closest_blend = b; - } - } - - const u64 seed = pos.Y + (heat + humidity) * 0.9f; - PcgRandom rng(seed); - - if (biome_closest_blend && dist_min_blend <= dist_min && - rng.range(0, biome_closest_blend->vertical_blend) >= - pos.Y - biome_closest_blend->max_pos.Y) - return biome_closest_blend; - - return (biome_closest) ? biome_closest : (Biome *)getRaw(BIOME_NONE); -} - - //////////////////////////////////////////////////////////////////////////////// void BiomeParamsOriginal::readParams(const Settings *settings) @@ -189,7 +124,7 @@ void BiomeParamsOriginal::writeParams(Settings *settings) const //////////////////////////////////////////////////////////////////////////////// BiomeGenOriginal::BiomeGenOriginal(BiomeManager *biomemgr, - BiomeParamsOriginal *params, v3s16 chunksize) + const BiomeParamsOriginal *params, v3s16 chunksize) { m_bmgr = biomemgr; m_params = params; @@ -224,17 +159,26 @@ BiomeGenOriginal::~BiomeGenOriginal() delete noise_humidity_blend; } -// Only usable in a mapgen thread +BiomeGen *BiomeGenOriginal::clone(BiomeManager *biomemgr) const +{ + return new BiomeGenOriginal(biomemgr, m_params, m_csize); +} + +float BiomeGenOriginal::calcHeatAtPoint(v3s16 pos) const +{ + return NoisePerlin2D(&m_params->np_heat, pos.X, pos.Z, m_params->seed) + + NoisePerlin2D(&m_params->np_heat_blend, pos.X, pos.Z, m_params->seed); +} + +float BiomeGenOriginal::calcHumidityAtPoint(v3s16 pos) const +{ + return NoisePerlin2D(&m_params->np_humidity, pos.X, pos.Z, m_params->seed) + + NoisePerlin2D(&m_params->np_humidity_blend, pos.X, pos.Z, m_params->seed); +} + Biome *BiomeGenOriginal::calcBiomeAtPoint(v3s16 pos) const { - float heat = - NoisePerlin2D(&m_params->np_heat, pos.X, pos.Z, m_params->seed) + - NoisePerlin2D(&m_params->np_heat_blend, pos.X, pos.Z, m_params->seed); - float humidity = - NoisePerlin2D(&m_params->np_humidity, pos.X, pos.Z, m_params->seed) + - NoisePerlin2D(&m_params->np_humidity_blend, pos.X, pos.Z, m_params->seed); - - return calcBiomeFromNoise(heat, humidity, pos); + return calcBiomeFromNoise(calcHeatAtPoint(pos), calcHumidityAtPoint(pos), pos); } diff --git a/src/mapgen/mg_biome.h b/src/mapgen/mg_biome.h index be4cfea4d..c85afc3a0 100644 --- a/src/mapgen/mg_biome.h +++ b/src/mapgen/mg_biome.h @@ -97,6 +97,15 @@ public: virtual BiomeGenType getType() const = 0; + // Clone this BiomeGen and set a the new BiomeManager to be used by the copy + virtual BiomeGen *clone(BiomeManager *biomemgr) const = 0; + + // Check that the internal chunk size is what the mapgen expects, just to be sure. + inline void assertChunkSize(v3s16 expect) const + { + FATAL_ERROR_IF(m_csize != expect, "Chunk size mismatches"); + } + // Calculates the biome at the exact position provided. This function can // be called at any time, but may be less efficient than the latter methods, // depending on implementation. @@ -158,12 +167,18 @@ struct BiomeParamsOriginal : public BiomeParams { class BiomeGenOriginal : public BiomeGen { public: BiomeGenOriginal(BiomeManager *biomemgr, - BiomeParamsOriginal *params, v3s16 chunksize); + const BiomeParamsOriginal *params, v3s16 chunksize); virtual ~BiomeGenOriginal(); BiomeGenType getType() const { return BIOMEGEN_ORIGINAL; } + BiomeGen *clone(BiomeManager *biomemgr) const; + + // Slower, meant for Script API use + float calcHeatAtPoint(v3s16 pos) const; + float calcHumidityAtPoint(v3s16 pos) const; Biome *calcBiomeAtPoint(v3s16 pos) const; + void calcBiomeNoise(v3s16 pmin); biome_t *getBiomes(s16 *heightmap, v3s16 pmin); @@ -176,7 +191,7 @@ public: float *humidmap; private: - BiomeParamsOriginal *m_params; + const BiomeParamsOriginal *m_params; Noise *noise_heat; Noise *noise_humidity; @@ -229,14 +244,6 @@ public: virtual void clear(); - // For BiomeGen type 'BiomeGenOriginal' - float getHeatAtPosOriginal(v3s16 pos, NoiseParams &np_heat, - NoiseParams &np_heat_blend, u64 seed) const; - float getHumidityAtPosOriginal(v3s16 pos, NoiseParams &np_humidity, - NoiseParams &np_humidity_blend, u64 seed) const; - const Biome *getBiomeFromNoiseOriginal(float heat, float humidity, - v3s16 pos) const; - private: BiomeManager() {}; diff --git a/src/noise.cpp b/src/noise.cpp index e16564b05..a10efa3c4 100644 --- a/src/noise.cpp +++ b/src/noise.cpp @@ -369,7 +369,7 @@ float contour(float v) ///////////////////////// [ New noise ] //////////////////////////// -float NoisePerlin2D(NoiseParams *np, float x, float y, s32 seed) +float NoisePerlin2D(const NoiseParams *np, float x, float y, s32 seed) { float a = 0; float f = 1.0; @@ -395,7 +395,7 @@ float NoisePerlin2D(NoiseParams *np, float x, float y, s32 seed) } -float NoisePerlin3D(NoiseParams *np, float x, float y, float z, s32 seed) +float NoisePerlin3D(const NoiseParams *np, float x, float y, float z, s32 seed) { float a = 0; float f = 1.0; @@ -422,7 +422,7 @@ float NoisePerlin3D(NoiseParams *np, float x, float y, float z, s32 seed) } -Noise::Noise(NoiseParams *np_, s32 seed, u32 sx, u32 sy, u32 sz) +Noise::Noise(const NoiseParams *np_, s32 seed, u32 sx, u32 sy, u32 sz) { np = *np_; this->seed = seed; diff --git a/src/noise.h b/src/noise.h index 613879890..854781731 100644 --- a/src/noise.h +++ b/src/noise.h @@ -146,7 +146,7 @@ public: float *persist_buf = nullptr; float *result = nullptr; - Noise(NoiseParams *np, s32 seed, u32 sx, u32 sy, u32 sz=1); + Noise(const NoiseParams *np, s32 seed, u32 sx, u32 sy, u32 sz=1); ~Noise(); void setSize(u32 sx, u32 sy, u32 sz=1); @@ -192,8 +192,8 @@ private: }; -float NoisePerlin2D(NoiseParams *np, float x, float y, s32 seed); -float NoisePerlin3D(NoiseParams *np, float x, float y, float z, s32 seed); +float NoisePerlin2D(const NoiseParams *np, float x, float y, s32 seed); +float NoisePerlin3D(const NoiseParams *np, float x, float y, float z, s32 seed); inline float NoisePerlin2D_PO(NoiseParams *np, float x, float xoff, float y, float yoff, s32 seed) diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index cc93bdbd0..eb3d49a5e 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -482,9 +482,7 @@ int ModApiMapgen::l_get_biome_id(lua_State *L) { NO_MAP_LOCK_REQUIRED; - const char *biome_str = lua_tostring(L, 1); - if (!biome_str) - return 0; + const char *biome_str = luaL_checkstring(L, 1); const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager(); if (!bmgr) @@ -527,30 +525,12 @@ int ModApiMapgen::l_get_heat(lua_State *L) v3s16 pos = read_v3s16(L, 1); - NoiseParams np_heat; - NoiseParams np_heat_blend; + const BiomeGen *biomegen = getServer(L)->getEmergeManager()->getBiomeGen(); - MapSettingsManager *settingsmgr = - getServer(L)->getEmergeManager()->map_settings_mgr; - - if (!settingsmgr->getMapSettingNoiseParams("mg_biome_np_heat", - &np_heat) || - !settingsmgr->getMapSettingNoiseParams("mg_biome_np_heat_blend", - &np_heat_blend)) + if (!biomegen || biomegen->getType() != BIOMEGEN_ORIGINAL) return 0; - std::string value; - if (!settingsmgr->getMapSetting("seed", &value)) - return 0; - std::istringstream ss(value); - u64 seed; - ss >> seed; - - const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager(); - if (!bmgr) - return 0; - - float heat = bmgr->getHeatAtPosOriginal(pos, np_heat, np_heat_blend, seed); + float heat = ((BiomeGenOriginal*) biomegen)->calcHeatAtPoint(pos); lua_pushnumber(L, heat); @@ -566,31 +546,12 @@ int ModApiMapgen::l_get_humidity(lua_State *L) v3s16 pos = read_v3s16(L, 1); - NoiseParams np_humidity; - NoiseParams np_humidity_blend; + const BiomeGen *biomegen = getServer(L)->getEmergeManager()->getBiomeGen(); - MapSettingsManager *settingsmgr = - getServer(L)->getEmergeManager()->map_settings_mgr; - - if (!settingsmgr->getMapSettingNoiseParams("mg_biome_np_humidity", - &np_humidity) || - !settingsmgr->getMapSettingNoiseParams("mg_biome_np_humidity_blend", - &np_humidity_blend)) + if (!biomegen || biomegen->getType() != BIOMEGEN_ORIGINAL) return 0; - std::string value; - if (!settingsmgr->getMapSetting("seed", &value)) - return 0; - std::istringstream ss(value); - u64 seed; - ss >> seed; - - const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager(); - if (!bmgr) - return 0; - - float humidity = bmgr->getHumidityAtPosOriginal(pos, np_humidity, - np_humidity_blend, seed); + float humidity = ((BiomeGenOriginal*) biomegen)->calcHumidityAtPoint(pos); lua_pushnumber(L, humidity); @@ -606,45 +567,11 @@ int ModApiMapgen::l_get_biome_data(lua_State *L) v3s16 pos = read_v3s16(L, 1); - NoiseParams np_heat; - NoiseParams np_heat_blend; - NoiseParams np_humidity; - NoiseParams np_humidity_blend; - - MapSettingsManager *settingsmgr = - getServer(L)->getEmergeManager()->map_settings_mgr; - - if (!settingsmgr->getMapSettingNoiseParams("mg_biome_np_heat", - &np_heat) || - !settingsmgr->getMapSettingNoiseParams("mg_biome_np_heat_blend", - &np_heat_blend) || - !settingsmgr->getMapSettingNoiseParams("mg_biome_np_humidity", - &np_humidity) || - !settingsmgr->getMapSettingNoiseParams("mg_biome_np_humidity_blend", - &np_humidity_blend)) + const BiomeGen *biomegen = getServer(L)->getEmergeManager()->getBiomeGen(); + if (!biomegen) return 0; - std::string value; - if (!settingsmgr->getMapSetting("seed", &value)) - return 0; - std::istringstream ss(value); - u64 seed; - ss >> seed; - - const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager(); - if (!bmgr) - return 0; - - float heat = bmgr->getHeatAtPosOriginal(pos, np_heat, np_heat_blend, seed); - if (!heat) - return 0; - - float humidity = bmgr->getHumidityAtPosOriginal(pos, np_humidity, - np_humidity_blend, seed); - if (!humidity) - return 0; - - const Biome *biome = bmgr->getBiomeFromNoiseOriginal(heat, humidity, pos); + const Biome *biome = biomegen->calcBiomeAtPoint(pos); if (!biome || biome->index == OBJDEF_INVALID_INDEX) return 0; @@ -653,11 +580,16 @@ int ModApiMapgen::l_get_biome_data(lua_State *L) lua_pushinteger(L, biome->index); lua_setfield(L, -2, "biome"); - lua_pushnumber(L, heat); - lua_setfield(L, -2, "heat"); + if (biomegen->getType() == BIOMEGEN_ORIGINAL) { + float heat = ((BiomeGenOriginal*) biomegen)->calcHeatAtPoint(pos); + float humidity = ((BiomeGenOriginal*) biomegen)->calcHumidityAtPoint(pos); - lua_pushnumber(L, humidity); - lua_setfield(L, -2, "humidity"); + lua_pushnumber(L, heat); + lua_setfield(L, -2, "heat"); + + lua_pushnumber(L, humidity); + lua_setfield(L, -2, "humidity"); + } return 1; } @@ -1493,9 +1425,12 @@ int ModApiMapgen::l_generate_ores(lua_State *L) NO_MAP_LOCK_REQUIRED; EmergeManager *emerge = getServer(L)->getEmergeManager(); + if (!emerge || !emerge->mgparams) + return 0; Mapgen mg; - mg.seed = emerge->mgparams->seed; + // Intentionally truncates to s32, see Mapgen::Mapgen() + mg.seed = (s32)emerge->mgparams->seed; mg.vm = LuaVoxelManip::checkobject(L, 1)->vm; mg.ndef = getServer(L)->getNodeDefManager(); @@ -1519,9 +1454,12 @@ int ModApiMapgen::l_generate_decorations(lua_State *L) NO_MAP_LOCK_REQUIRED; EmergeManager *emerge = getServer(L)->getEmergeManager(); + if (!emerge || !emerge->mgparams) + return 0; Mapgen mg; - mg.seed = emerge->mgparams->seed; + // Intentionally truncates to s32, see Mapgen::Mapgen() + mg.seed = (s32)emerge->mgparams->seed; mg.vm = LuaVoxelManip::checkobject(L, 1)->vm; mg.ndef = getServer(L)->getNodeDefManager(); From 437d01196899f85bbc77d71123018aa26be337da Mon Sep 17 00:00:00 2001 From: Desour Date: Tue, 23 Mar 2021 01:02:49 +0100 Subject: [PATCH 110/110] Fix attached-to-object sounds having a higher reference distance --- src/client/sound_openal.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/sound_openal.cpp b/src/client/sound_openal.cpp index f4e61f93e..8dceeede6 100644 --- a/src/client/sound_openal.cpp +++ b/src/client/sound_openal.cpp @@ -671,8 +671,8 @@ public: alSourcei(sound->source_id, AL_SOURCE_RELATIVE, false); alSource3f(sound->source_id, AL_POSITION, pos.X, pos.Y, pos.Z); - alSource3f(sound->source_id, AL_VELOCITY, 0, 0, 0); - alSourcef(sound->source_id, AL_REFERENCE_DISTANCE, 30.0); + alSource3f(sound->source_id, AL_VELOCITY, 0.0f, 0.0f, 0.0f); + alSourcef(sound->source_id, AL_REFERENCE_DISTANCE, 10.0f); } bool updateSoundGain(int id, float gain)