Merge pull request #3 from minetest/master

Merge pull request #3 from minetest/master
This commit is contained in:
johndc 2013-12-18 14:23:10 -08:00
commit d202ac144b
257 changed files with 19550 additions and 9896 deletions

1
.gitignore vendored
View File

@ -31,6 +31,7 @@ CMakeFiles/*
src/CMakeFiles/*
src/Makefile
src/cmake_config.h
src/cmake_config_githash.h
src/cmake_install.cmake
src/script/CMakeFiles/*
src/script/common/CMakeFiles/*

View File

@ -12,9 +12,12 @@ set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
# Also remember to set PROTOCOL_VERSION in clientserver.h when releasing
set(VERSION_MAJOR 0)
set(VERSION_MINOR 4)
set(VERSION_PATCH 7)
set(VERSION_PATCH 8)
if(VERSION_EXTRA)
set(VERSION_PATCH ${VERSION_PATCH}-${VERSION_EXTRA})
else()
# Comment the following line during release
set(VERSION_PATCH ${VERSION_PATCH}-dev)
endif()
set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")

19
builtin/async_env.lua Normal file
View File

@ -0,0 +1,19 @@
engine.log("info","Initializing Asynchronous environment")
dofile(SCRIPTDIR .. DIR_DELIM .. "misc_helpers.lua")
function engine.job_processor(serialized_function, serialized_data)
local fct = marshal.decode(serialized_function)
local params = marshal.decode(serialized_data)
local retval = marshal.encode(nil)
if fct ~= nil and type(fct) == "function" then
local result = fct(params)
retval = marshal.encode(result)
else
engine.log("error","ASYNC WORKER: unable to deserialize function")
end
return retval,retval:len()
end

59
builtin/async_event.lua Normal file
View File

@ -0,0 +1,59 @@
local tbl = engine or minetest
tbl.async_jobs = {}
if engine ~= nil then
function tbl.async_event_handler(jobid, serialized_retval)
local retval = nil
if serialized_retval ~= "ERROR" then
retval= marshal.decode(serialized_retval)
else
tbl.log("error","Error fetching async result")
end
assert(type(tbl.async_jobs[jobid]) == "function")
tbl.async_jobs[jobid](retval)
tbl.async_jobs[jobid] = nil
end
else
minetest.register_globalstep(
function(dtime)
local list = tbl.get_finished_jobs()
for i=1,#list,1 do
local retval = marshal.decode(list[i].retval)
assert(type(tbl.async_jobs[jobid]) == "function")
tbl.async_jobs[list[i].jobid](retval)
tbl.async_jobs[list[i].jobid] = nil
end
end)
end
function tbl.handle_async(fct, parameters, callback)
--serialize fct
local serialized_fct = marshal.encode(fct)
assert(marshal.decode(serialized_fct) ~= nil)
--serialize parameters
local serialized_params = marshal.encode(parameters)
if serialized_fct == nil or
serialized_params == nil or
serialized_fct:len() == 0 or
serialized_params:len() == 0 then
return false
end
local jobid = tbl.do_async_callback( serialized_fct,
serialized_fct:len(),
serialized_params,
serialized_params:len())
tbl.async_jobs[jobid] = callback
return true
end

View File

@ -471,10 +471,10 @@ minetest.register_chatcommand("spawnentity", {
minetest.chat_send_player(name, "entityname required")
return
end
print('/spawnentity invoked, entityname="'..entityname..'"')
minetest.log("action", '/spawnentity invoked, entityname="'..entityname..'"')
local player = minetest.get_player_by_name(name)
if player == nil then
print("Unable to spawn entity, player is nil")
minetest.log("error", "Unable to spawn entity, player is nil")
return true -- Handled chat message
end
local p = player:getpos()
@ -491,7 +491,7 @@ minetest.register_chatcommand("pulverize", {
func = function(name, param)
local player = minetest.get_player_by_name(name)
if player == nil then
print("Unable to pulverize, player is nil")
minetest.log("error", "Unable to pulverize, player is nil")
return true -- Handled chat message
end
if player:get_wielded_item():is_empty() then
@ -515,34 +515,45 @@ minetest.register_on_punchnode(function(pos, node, puncher)
end)
minetest.register_chatcommand("rollback_check", {
params = "[<range>] [<seconds>]",
params = "[<range>] [<seconds>] [limit]",
description = "check who has last touched a node or near it, "..
"max. <seconds> ago (default range=0, seconds=86400=24h)",
"max. <seconds> ago (default range=0, seconds=86400=24h, limit=5)",
privs = {rollback=true},
func = function(name, param)
local range, seconds = string.match(param, "(%d+) *(%d*)")
local range, seconds, limit =
param:match("(%d+) *(%d*) *(%d*)")
range = tonumber(range) or 0
seconds = tonumber(seconds) or 86400
minetest.chat_send_player(name, "Punch a node (limits set: range="..
dump(range).." seconds="..dump(seconds).."s)")
limit = tonumber(limit) or 5
if limit > 100 then
minetest.chat_send_player(name, "That limit is too high!")
return
end
minetest.chat_send_player(name, "Punch a node (range="..
range..", seconds="..seconds.."s, limit="..limit..")")
minetest.rollback_punch_callbacks[name] = function(pos, node, puncher)
local name = puncher:get_player_name()
minetest.chat_send_player(name, "Checking...")
local actor, act_p, act_seconds =
minetest.rollback_get_last_node_actor(pos, range, seconds)
if actor == "" then
minetest.chat_send_player(name, "Checking "..minetest.pos_to_string(pos).."...")
local actions = minetest.rollback_get_node_actions(pos, range, seconds, limit)
local num_actions = #actions
if num_actions == 0 then
minetest.chat_send_player(name, "Nobody has touched the "..
"specified location in "..dump(seconds).." seconds")
"specified location in "..seconds.." seconds")
return
end
local nodedesc = "this node"
if act_p.x ~= pos.x or act_p.y ~= pos.y or act_p.z ~= pos.z then
nodedesc = minetest.pos_to_string(act_p)
local time = os.time()
for i = num_actions, 1, -1 do
local action = actions[i]
minetest.chat_send_player(name,
("%s %s %s -> %s %d seconds ago.")
:format(
minetest.pos_to_string(action.pos),
action.actor,
action.oldnode.name,
action.newnode.name,
time - action.time))
end
local nodename = minetest.get_node(act_p).name
minetest.chat_send_player(name, "Last actor on "..nodedesc..
" was "..actor..", "..dump(act_seconds)..
"s ago (node is now "..nodename..")")
end
end,
})
@ -554,7 +565,7 @@ minetest.register_chatcommand("rollback", {
func = function(name, param)
local target_name, seconds = string.match(param, ":([^ ]+) *(%d*)")
if not target_name then
local player_name = nil;
local player_name = nil
player_name, seconds = string.match(param, "([^ ]+) *(%d*)")
if not player_name then
minetest.chat_send_player(name, "Invalid parameters. See /help rollback and /help rollback_check")
@ -564,13 +575,13 @@ minetest.register_chatcommand("rollback", {
end
seconds = tonumber(seconds) or 60
minetest.chat_send_player(name, "Reverting actions of "..
dump(target_name).." since "..dump(seconds).." seconds.")
target_name.." since "..seconds.." seconds.")
local success, log = minetest.rollback_revert_actions_by(
target_name, seconds)
if #log > 10 then
if #log > 100 then
minetest.chat_send_player(name, "(log is too long to show)")
else
for _,line in ipairs(log) do
for _, line in pairs(log) do
minetest.chat_send_player(name, line)
end
end

View File

@ -46,3 +46,8 @@ setmetatable(minetest.env, {
return rawget(table, key)
end
})
function minetest.rollback_get_last_node_actor(pos, range, seconds)
return minetest.rollback_get_node_actions(pos, range, seconds, 1)[1]
end

View File

@ -54,19 +54,25 @@ minetest.register_entity("__builtin:falling_node", {
local pos = self.object:getpos()
local bcp = {x=pos.x, y=pos.y-0.7, z=pos.z} -- Position of bottom center point
local bcn = minetest.get_node(bcp)
local bcd = minetest.registered_nodes[bcn.name]
-- Note: walkable is in the node definition, not in item groups
if minetest.registered_nodes[bcn.name] and
minetest.registered_nodes[bcn.name].walkable or
(minetest.get_node_group(self.node.name, "float") ~= 0 and minetest.registered_nodes[bcn.name].liquidtype ~= "none")
then
if minetest.registered_nodes[bcn.name].leveled and bcn.name == self.node.name then
if not bcd or
(bcd.walkable or
(minetest.get_node_group(self.node.name, "float") ~= 0 and
bcd.liquidtype ~= "none")) then
if bcd and bcd.leveled and
bcn.name == self.node.name then
local addlevel = self.node.level
if addlevel == nil or addlevel <= 0 then addlevel = minetest.registered_nodes[bcn.name].leveled end
if minetest.env:add_node_level(bcp, addlevel) == 0 then
if addlevel == nil or addlevel <= 0 then
addlevel = bcd.leveled
end
if minetest.add_node_level(bcp, addlevel) == 0 then
self.object:remove()
return
end
elseif minetest.registered_nodes[bcn.name].buildable_to and (minetest.get_node_group(self.node.name, "float") == 0 or minetest.registered_nodes[bcn.name].liquidtype == "none") then
elseif bcd and bcd.buildable_to and
(minetest.get_node_group(self.node.name, "float") == 0 or
bcd.liquidtype == "none") then
minetest.remove_node(bcp)
return
end

View File

@ -6,6 +6,7 @@ minetest.features = {
chat_send_player_param3 = true,
get_all_craft_recipes_works = true,
use_texture_alpha = true,
no_legacy_abms = true,
}
function minetest.has_feature(arg)

View File

@ -17,6 +17,20 @@
--------------------------------------------------------------------------------
-- Generic implementation of a filter/sortable list --
-- Usage: --
-- Filterlist needs to be initialized on creation. To achieve this you need to --
-- pass following functions: --
-- raw_fct() (mandatory): --
-- function returning a table containing the elements to be filtered --
-- compare_fct(element1,element2) (mandatory): --
-- function returning true/false if element1 is same element as element2 --
-- uid_match_fct(element1,uid) (optional) --
-- function telling if uid is attached to element1 --
-- filter_fct(element,filtercriteria) (optional) --
-- function returning true/false if filtercriteria met to element --
-- fetch_param (optional) --
-- parameter passed to raw_fct to aquire correct raw data --
-- --
--------------------------------------------------------------------------------
filterlist = {}
@ -157,7 +171,7 @@ function filterlist.process(this)
this.m_processed_list = {}
for k,v in pairs(this.m_raw_list) do
if this.m_filtercriteria == nil or
if this.m_filtercriteria == nil or
this.m_filter_fct(v,this.m_filtercriteria) then
table.insert(this.m_processed_list,v)
end
@ -167,7 +181,7 @@ function filterlist.process(this)
return
end
if this.m_sort_list[this.m_sortmode] ~= nil and
if this.m_sort_list[this.m_sortmode] ~= nil and
type(this.m_sort_list[this.m_sortmode]) == "function" then
this.m_sort_list[this.m_sortmode](this)
@ -237,7 +251,7 @@ function compare_worlds(world1,world2)
end
--------------------------------------------------------------------------------
function sort_worlds_alphabetic(this)
function sort_worlds_alphabetic(this)
table.sort(this.m_processed_list, function(a, b)
--fixes issue #857 (crash due to sorting nil in worldlist)

View File

@ -98,7 +98,7 @@ function minetest.facedir_to_dir(facedir)
--indexed into by a table of correlating facedirs
[({[0]=1, 2, 3, 4,
5, 2, 6, 4,
5, 4, 6, 2,
6, 2, 5, 4,
1, 5, 3, 6,
1, 6, 3, 5,
@ -179,11 +179,11 @@ function minetest.get_node_drops(nodename, toolname)
return got_items
end
function minetest.item_place_node(itemstack, placer, pointed_thing)
function minetest.item_place_node(itemstack, placer, pointed_thing, param2)
local item = itemstack:peek_item()
local def = itemstack:get_definition()
if def.type ~= "node" or pointed_thing.type ~= "node" then
return itemstack
return itemstack, false
end
local under = pointed_thing.under
@ -194,7 +194,7 @@ function minetest.item_place_node(itemstack, placer, pointed_thing)
if not oldnode_under or not oldnode_above then
minetest.log("info", placer:get_player_name() .. " tried to place"
.. " node in unloaded position " .. minetest.pos_to_string(above))
return itemstack
return itemstack, false
end
local olddef_under = ItemStack({name=oldnode_under.name}):get_definition()
@ -206,7 +206,7 @@ function minetest.item_place_node(itemstack, placer, pointed_thing)
minetest.log("info", placer:get_player_name() .. " tried to place"
.. " node in invalid position " .. minetest.pos_to_string(above)
.. ", replacing " .. oldnode_above.name)
return itemstack
return itemstack, false
end
-- Place above pointed node
@ -218,14 +218,23 @@ function minetest.item_place_node(itemstack, placer, pointed_thing)
place_to = {x = under.x, y = under.y, z = under.z}
end
if minetest.is_protected(place_to, placer:get_player_name()) then
minetest.log("action", placer:get_player_name()
.. " tried to place " .. def.name
.. " at protected position "
.. minetest.pos_to_string(place_to))
minetest.record_protection_violation(place_to, placer:get_player_name())
return itemstack
end
minetest.log("action", placer:get_player_name() .. " places node "
.. def.name .. " at " .. minetest.pos_to_string(place_to))
local oldnode = minetest.get_node(place_to)
local newnode = {name = def.name, param1 = 0, param2 = 0}
local newnode = {name = def.name, param1 = 0, param2 = param2}
-- Calculate direction for wall mounted stuff like torches and signs
if def.paramtype2 == 'wallmounted' then
if def.paramtype2 == 'wallmounted' and not param2 then
local dir = {
x = under.x - above.x,
y = under.y - above.y,
@ -233,7 +242,7 @@ function minetest.item_place_node(itemstack, placer, pointed_thing)
}
newnode.param2 = minetest.dir_to_wallmounted(dir)
-- Calculate the direction for furnaces and chests and stuff
elseif def.paramtype2 == 'facedir' then
elseif def.paramtype2 == 'facedir' and not param2 then
local placer_pos = placer:getpos()
if placer_pos then
local dir = {
@ -251,7 +260,7 @@ function minetest.item_place_node(itemstack, placer, pointed_thing)
not check_attached_node(place_to, newnode) then
minetest.log("action", "attached node " .. def.name ..
" can not be placed at " .. minetest.pos_to_string(place_to))
return itemstack
return itemstack, false
end
-- Add node and update
@ -283,7 +292,7 @@ function minetest.item_place_node(itemstack, placer, pointed_thing)
if take_item then
itemstack:take_item()
end
return itemstack
return itemstack, true
end
function minetest.item_place_object(itemstack, placer, pointed_thing)
@ -295,19 +304,19 @@ function minetest.item_place_object(itemstack, placer, pointed_thing)
return itemstack
end
function minetest.item_place(itemstack, placer, pointed_thing)
function minetest.item_place(itemstack, placer, pointed_thing, param2)
-- Call on_rightclick if the pointed node defines it
if pointed_thing.type == "node" and placer and
not placer:get_player_control().sneak then
local n = minetest.get_node(pointed_thing.under)
local nn = n.name
if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].on_rightclick then
return minetest.registered_nodes[nn].on_rightclick(pointed_thing.under, n, placer, itemstack) or itemstack
return minetest.registered_nodes[nn].on_rightclick(pointed_thing.under, n, placer, itemstack) or itemstack, false
end
end
if itemstack:get_definition().type == "node" then
return minetest.item_place_node(itemstack, placer, pointed_thing)
return minetest.item_place_node(itemstack, placer, pointed_thing, param2)
end
return itemstack
end
@ -370,27 +379,40 @@ end
function minetest.node_dig(pos, node, digger)
local def = ItemStack({name=node.name}):get_definition()
-- Check if def ~= 0 because we always want to be able to remove unknown nodes
if #def ~= 0 and not def.diggable or (def.can_dig and not def.can_dig(pos,digger)) then
if not def.diggable or (def.can_dig and not def.can_dig(pos,digger)) then
minetest.log("info", digger:get_player_name() .. " tried to dig "
.. node.name .. " which is not diggable "
.. minetest.pos_to_string(pos))
return
end
if minetest.is_protected(pos, digger:get_player_name()) then
minetest.log("action", digger:get_player_name()
.. " tried to dig " .. node.name
.. " at protected position "
.. minetest.pos_to_string(pos))
minetest.record_protection_violation(pos, digger:get_player_name())
return
end
minetest.log('action', digger:get_player_name() .. " digs "
.. node.name .. " at " .. minetest.pos_to_string(pos))
local wielded = digger:get_wielded_item()
local drops = minetest.get_node_drops(node.name, wielded:get_name())
-- Wear out tool
if not minetest.setting_getbool("creative_mode") then
local tp = wielded:get_tool_capabilities()
local dp = minetest.get_dig_params(def.groups, tp)
wielded:add_wear(dp.wear)
digger:set_wielded_item(wielded)
local wdef = wielded:get_definition()
local tp = wielded:get_tool_capabilities()
local dp = minetest.get_dig_params(def.groups, tp)
if wdef and wdef.after_use then
wielded = wdef.after_use(wielded, digger, node, dp) or wielded
else
-- Wear out tool
if not minetest.setting_getbool("creative_mode") then
wielded:add_wear(dp.wear)
end
end
digger:set_wielded_item(wielded)
-- Handle drops
minetest.handle_node_drops(pos, drops, digger)
@ -479,7 +501,7 @@ minetest.nodedef_default = {
post_effect_color = {a=0, r=0, g=0, b=0},
paramtype = "none",
paramtype2 = "none",
is_ground_content = false,
is_ground_content = true,
sunlight_propagates = false,
walkable = true,
pointable = true,

File diff suppressed because it is too large Load Diff

View File

@ -40,15 +40,24 @@ function minetest.check_player_privs(name, privs)
return true, ""
end
local player_list = {}
minetest.register_on_joinplayer(function(player)
player_list[player:get_player_name()] = player
end)
minetest.register_on_leaveplayer(function(player)
player_list[player:get_player_name()] = nil
end)
function minetest.get_connected_players()
-- This could be optimized a bit, but leave that for later
local list = {}
for _, obj in pairs(minetest.get_objects_inside_radius({x=0,y=0,z=0}, 1000000)) do
if obj:is_player() then
table.insert(list, obj)
local temp_table = {}
for index, value in pairs(player_list) do
if value:is_player_connected() then
table.insert(temp_table, value)
end
end
return list
return temp_table
end
function minetest.hash_node_position(pos)
@ -99,3 +108,14 @@ function minetest.setting_get_pos(name)
return minetest.string_to_pos(value)
end
-- To be overriden by protection mods
function minetest.is_protected(pos, name)
return false
end
function minetest.record_protection_violation(pos, name)
for _, func in pairs(minetest.registered_on_protection_violation) do
func(pos, name)
end
end

View File

@ -205,6 +205,155 @@ function tbl.formspec_escape(text)
return text
end
function tbl.splittext(text,charlimit)
local retval = {}
local current_idx = 1
local start,stop = string.find(text," ",current_idx)
local nl_start,nl_stop = string.find(text,"\n",current_idx)
local gotnewline = false
if nl_start ~= nil and (start == nil or nl_start < start) then
start = nl_start
stop = nl_stop
gotnewline = true
end
local last_line = ""
while start ~= nil do
if string.len(last_line) + (stop-start) > charlimit then
table.insert(retval,last_line)
last_line = ""
end
if last_line ~= "" then
last_line = last_line .. " "
end
last_line = last_line .. string.sub(text,current_idx,stop -1)
if gotnewline then
table.insert(retval,last_line)
last_line = ""
gotnewline = false
end
current_idx = stop+1
start,stop = string.find(text," ",current_idx)
nl_start,nl_stop = string.find(text,"\n",current_idx)
if nl_start ~= nil and (start == nil or nl_start < start) then
start = nl_start
stop = nl_stop
gotnewline = true
end
end
--add last part of text
if string.len(last_line) + (string.len(text) - current_idx) > charlimit then
table.insert(retval,last_line)
table.insert(retval,string.sub(text,current_idx))
else
last_line = last_line .. " " .. string.sub(text,current_idx)
table.insert(retval,last_line)
end
return retval
end
--------------------------------------------------------------------------------
if minetest then
local dirs1 = { 9, 18, 7, 12 }
local dirs2 = { 20, 23, 22, 21 }
function minetest.rotate_and_place(itemstack, placer, pointed_thing, infinitestacks, orient_flags)
orient_flags = orient_flags or {}
local node = minetest.get_node(pointed_thing.under)
if not minetest.registered_nodes[node.name]
or not minetest.registered_nodes[node.name].on_rightclick then
local above = pointed_thing.above
local under = pointed_thing.under
local pitch = placer:get_look_pitch()
local pname = minetest.get_node(under).name
local node = minetest.get_node(above)
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
local wield_name = itemstack:get_name()
local reg_node = minetest.registered_nodes[pname]
if not reg_node or not reg_node.on_rightclick then
local iswall = (above.x ~= under.x) or (above.z ~= under.z)
local isceiling = (above.x == under.x) and (above.z == under.z)
and (pitch > 0)
local pos1 = above
if reg_node and reg_node.buildable_to then
pos1 = under
iswall = false
end
reg_node = minetest.registered_nodes[minetest.get_node(pos1).name]
if not reg_node or not reg_node.buildable_to then
return
end
if orient_flags.force_floor then
iswall = false
isceiling = false
elseif orient_flags.force_ceiling then
iswall = false
isceiling = true
elseif orient_flags.force_wall then
iswall = true
isceiling = false
elseif orient_flags.invert_wall then
iswall = not iswall
end
if iswall then
minetest.add_node(pos1, {name = wield_name, param2 = dirs1[fdir+1] })
elseif isceiling then
if orient_flags.force_facedir then
minetest.add_node(pos1, {name = wield_name, param2 = 20 })
else
minetest.add_node(pos1, {name = wield_name, param2 = dirs2[fdir+1] })
end
else -- place right side up
if orient_flags.force_facedir then
minetest.add_node(pos1, {name = wield_name, param2 = 0 })
else
minetest.add_node(pos1, {name = wield_name, param2 = fdir })
end
end
if not infinitestacks then
itemstack:take_item()
return itemstack
end
end
else
minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack)
end
end
--------------------------------------------------------------------------------
--Wrapper for rotate_and_place() to check for sneak and assume Creative mode
--implies infinite stacks when performing a 6d rotation.
--------------------------------------------------------------------------------
minetest.rotate_node = function(itemstack, placer, pointed_thing)
minetest.rotate_and_place(itemstack, placer, pointed_thing,
minetest.setting_getbool("creative_mode"),
{invert_wall = placer:get_player_control().sneak})
return itemstack
end
end
--------------------------------------------------------------------------------
-- mainmenu only functions
--------------------------------------------------------------------------------

View File

@ -24,17 +24,15 @@ minetest.registered_aliases = {}
-- For tables that are indexed by item name:
-- If table[X] does not exist, default to table[minetest.registered_aliases[X]]
local function set_alias_metatable(table)
setmetatable(table, {
__index = function(name)
return rawget(table, minetest.registered_aliases[name])
end
})
end
set_alias_metatable(minetest.registered_items)
set_alias_metatable(minetest.registered_nodes)
set_alias_metatable(minetest.registered_craftitems)
set_alias_metatable(minetest.registered_tools)
local alias_metatable = {
__index = function(t, name)
return rawget(t, minetest.registered_aliases[name])
end
}
setmetatable(minetest.registered_items, alias_metatable)
setmetatable(minetest.registered_nodes, alias_metatable)
setmetatable(minetest.registered_craftitems, alias_metatable)
setmetatable(minetest.registered_tools, alias_metatable)
-- These item names may not be used because they would interfere
-- with legacy itemstrings
@ -106,6 +104,11 @@ function minetest.register_item(name, itemdef)
-- Use the nodebox as selection box if it's not set manually
if itemdef.drawtype == "nodebox" and not itemdef.selection_box then
itemdef.selection_box = itemdef.node_box
elseif itemdef.drawtype == "fencelike" and not itemdef.selection_box then
itemdef.selection_box = {
type = "fixed",
fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8},
}
end
setmetatable(itemdef, {__index = minetest.nodedef_default})
minetest.registered_nodes[itemdef.name] = itemdef
@ -230,6 +233,20 @@ function minetest.register_biome(biome)
register_biome_raw(biome)
end
function minetest.on_craft(itemstack, player, old_craft_list, craft_inv)
for _, func in ipairs(minetest.registered_on_crafts) do
itemstack = func(itemstack, player, old_craft_list, craft_inv) or itemstack
end
return itemstack
end
function minetest.craft_predict(itemstack, player, old_craft_list, craft_inv)
for _, func in ipairs(minetest.registered_craft_predicts) do
itemstack = func(itemstack, player, old_craft_list, craft_inv) or itemstack
end
return itemstack
end
-- Alias the forbidden item names to "" so they can't be
-- created via itemstrings (e.g. /give)
local name
@ -256,6 +273,7 @@ minetest.register_item(":unknown", {
on_place = minetest.item_place,
on_drop = minetest.item_drop,
groups = {not_in_creative_inventory=1},
diggable = true,
})
minetest.register_node(":air", {
@ -296,6 +314,45 @@ minetest.register_item(":", {
groups = {not_in_creative_inventory=1},
})
function minetest.run_callbacks(callbacks, mode, ...)
assert(type(callbacks) == "table")
local cb_len = #callbacks
if cb_len == 0 then
if mode == 2 or mode == 3 then
return true
elseif mode == 4 or mode == 5 then
return false
end
end
local ret = nil
for i = 1, cb_len do
local cb_ret = callbacks[i](...)
if mode == 0 and i == 1 then
ret = cb_ret
elseif mode == 1 and i == cb_len then
ret = cb_ret
elseif mode == 2 then
if not cb_ret or i == 1 then
ret = cb_ret
end
elseif mode == 3 then
if cb_ret then
return cb_ret
end
ret = cb_ret
elseif mode == 4 then
if (cb_ret and not ret) or i == 1 then
ret = cb_ret
end
elseif mode == 5 and cb_ret then
return cb_ret
end
end
return ret
end
--
-- Callback registration
--
@ -323,8 +380,12 @@ minetest.registered_on_generateds, minetest.register_on_generated = make_registr
minetest.registered_on_newplayers, minetest.register_on_newplayer = make_registration()
minetest.registered_on_dieplayers, minetest.register_on_dieplayer = make_registration()
minetest.registered_on_respawnplayers, minetest.register_on_respawnplayer = make_registration()
minetest.registered_on_prejoinplayers, minetest.register_on_prejoinplayer = make_registration()
minetest.registered_on_joinplayers, minetest.register_on_joinplayer = make_registration()
minetest.registered_on_leaveplayers, minetest.register_on_leaveplayer = make_registration()
minetest.registered_on_player_receive_fields, minetest.register_on_player_receive_fields = make_registration_reverse()
minetest.registered_on_cheats, minetest.register_on_cheat = make_registration()
minetest.registered_on_crafts, minetest.register_on_craft = make_registration()
minetest.registered_craft_predicts, minetest.register_craft_predict = make_registration()
minetest.registered_on_protection_violation, minetest.register_on_protection_violation = make_registration()

View File

@ -30,27 +30,28 @@ end
--------------------------------------------------------------------------------
function menubar.refresh()
menubar.formspec = "box[-0.3,5.625;12.4,1.3;000000]" ..
"box[-0.3,5.6;12.4,0.05;FFFFFF]"
menubar.formspec = "box[-0.3,5.625;12.4,1.2;#000000]" ..
"box[-0.3,5.6;12.4,0.05;#FFFFFF]"
menubar.buttons = {}
local button_base = -0.25
local button_base = -0.08
local maxbuttons = #gamemgr.games
if maxbuttons > 10 then
maxbuttons = 10
if maxbuttons > 11 then
maxbuttons = 11
end
for i=1,maxbuttons,1 do
local btn_name = "menubar_btn_" .. gamemgr.games[i].id
local buttonpos = button_base + (i-1) * 1.245
local buttonpos = button_base + (i-1) * 1.1
if gamemgr.games[i].menuicon_path ~= nil and
gamemgr.games[i].menuicon_path ~= "" then
menubar.formspec = menubar.formspec ..
"image_button[" .. buttonpos .. ",5.7;1.3,1.3;" ..
"image_button[" .. buttonpos .. ",5.72;1.165,1.175;" ..
engine.formspec_escape(gamemgr.games[i].menuicon_path) .. ";" ..
btn_name .. ";;true;false]"
else
@ -65,7 +66,7 @@ function menubar.refresh()
text = text .. "\n" .. part3
end
menubar.formspec = menubar.formspec ..
"image_button[" .. buttonpos .. ",5.7;1.3,1.3;;" ..btn_name ..
"image_button[" .. buttonpos .. ",5.72;1.165,1.175;;" ..btn_name ..
";" .. text .. ";true;true]"
end

File diff suppressed because it is too large Load Diff

View File

@ -21,22 +21,68 @@
modstore = {}
--------------------------------------------------------------------------------
-- @function [parent=#modstore] init
function modstore.init()
modstore.tabnames = {}
table.insert(modstore.tabnames,"dialog_modstore_unsorted")
table.insert(modstore.tabnames,"dialog_modstore_search")
modstore.modsperpage = 5
modstore.basetexturedir = engine.get_texturepath() .. DIR_DELIM .. "base" ..
modstore.basetexturedir = engine.get_texturepath() .. DIR_DELIM .. "base" ..
DIR_DELIM .. "pack" .. DIR_DELIM
modstore.lastmodtitle = ""
modstore.last_search = ""
modstore.searchlist = filterlist.create(
function()
if modstore.modlist_unsorted ~= nil and
modstore.modlist_unsorted.data ~= nil then
return modstore.modlist_unsorted.data
end
return {}
end,
function(element,modid)
if element.id == modid then
return true
end
return false
end, --compare fct
nil, --uid match fct
function(element,substring)
if substring == nil or
substring == "" then
return false
end
substring = substring:upper()
if element.title ~= nil and
element.title:upper():find(substring) ~= nil then
return true
end
if element.details ~= nil and
element.details.author ~= nil and
element.details.author:upper():find(substring) ~= nil then
return true
end
if element.details ~= nil and
element.details.description ~= nil and
element.details.description:upper():find(substring) ~= nil then
return true
end
return false
end --filter fct
)
modstore.current_list = nil
modstore.details_cache = {}
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] nametoindex
function modstore.nametoindex(name)
for i=1,#modstore.tabnames,1 do
@ -49,55 +95,94 @@ function modstore.nametoindex(name)
end
--------------------------------------------------------------------------------
function modstore.gettab(tabname)
-- @function [parent=#modstore] getsuccessfuldialog
function modstore.getsuccessfuldialog()
local retval = ""
retval = retval .. "size[6,2]"
if modstore.lastmodentry ~= nil then
retval = retval .. "label[0,0.25;" .. fgettext("Successfully installed:") .. "]"
retval = retval .. "label[3,0.25;" .. modstore.lastmodentry.moddetails.title .. "]"
local is_modstore_tab = false
if tabname == "dialog_modstore_unsorted" then
retval = modstore.getmodlist(modstore.modlist_unsorted)
is_modstore_tab = true
end
if tabname == "dialog_modstore_search" then
is_modstore_tab = true
end
if is_modstore_tab then
return modstore.tabheader(tabname) .. retval
end
if tabname == "modstore_mod_installed" then
return "size[6,2]label[0.25,0.25;Mod: " .. modstore.lastmodtitle ..
" installed successfully]" ..
"button[2.5,1.5;1,0.5;btn_confirm_mod_successfull;ok]"
end
return ""
end
retval = retval .. "label[0,0.75;" .. fgettext("Shortname:") .. "]"
retval = retval .. "label[3,0.75;" .. engine.formspec_escape(modstore.lastmodentry.moddetails.basename) .. "]"
--------------------------------------------------------------------------------
function modstore.tabheader(tabname)
local retval = "size[12,9.25]"
retval = retval .. "tabheader[-0.3,-0.99;modstore_tab;" ..
"Unsorted,Search;" ..
modstore.nametoindex(tabname) .. ";true;false]"
end
retval = retval .. "button[2.5,1.5;1,0.5;btn_confirm_mod_successfull;" .. fgettext("ok") .. "]"
return retval
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] gettab
function modstore.gettab(tabname)
local retval = ""
local is_modstore_tab = false
if tabname == "dialog_modstore_unsorted" then
modstore.modsperpage = 5
retval = modstore.getmodlist(modstore.modlist_unsorted)
is_modstore_tab = true
end
if tabname == "dialog_modstore_search" then
retval = modstore.getsearchpage()
is_modstore_tab = true
end
if is_modstore_tab then
return modstore.tabheader(tabname) .. retval
end
if tabname == "modstore_mod_installed" then
return modstore.getsuccessfuldialog()
end
if tabname == "modstore_downloading" then
return "size[6,2]label[0.25,0.75;" .. fgettext("Downloading") ..
" " .. modstore.lastmodtitle .. " " ..
fgettext("please wait...") .. "]"
end
return ""
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] tabheader
function modstore.tabheader(tabname)
local retval = "size[12,10.25]"
retval = retval .. "tabheader[-0.3,-0.99;modstore_tab;" ..
"Unsorted,Search;" ..
modstore.nametoindex(tabname) .. ";true;false]" ..
"button[4,9.9;4,0.5;btn_modstore_close;" ..
fgettext("Close modstore") .. "]"
return retval
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] handle_buttons
function modstore.handle_buttons(current_tab,fields)
modstore.lastmodtitle = ""
if fields["modstore_tab"] then
local index = tonumber(fields["modstore_tab"])
if index > 0 and
index <= #modstore.tabnames then
if modstore.tabnames[index] == "dialog_modstore_search" then
filterlist.set_filtercriteria(modstore.searchlist,modstore.last_search)
filterlist.refresh(modstore.searchlist)
modstore.modsperpage = 4
modstore.currentlist = {
page = 0,
pagecount =
math.ceil(filterlist.size(modstore.searchlist) / modstore.modsperpage),
data = filterlist.get_list(modstore.searchlist),
}
end
return {
current_tab = modstore.tabnames[index],
is_dialog = true,
@ -105,170 +190,426 @@ function modstore.handle_buttons(current_tab,fields)
}
end
modstore.modlist_page = 0
end
if fields["btn_modstore_page_up"] then
if modstore.current_list ~= nil and modstore.current_list.page > 0 then
modstore.current_list.page = modstore.current_list.page - 1
end
end
if fields["btn_modstore_page_down"] then
if modstore.current_list ~= nil and
if modstore.current_list ~= nil and
modstore.current_list.page <modstore.current_list.pagecount-1 then
modstore.current_list.page = modstore.current_list.page +1
end
end
if fields["btn_hidden_close_download"] ~= nil then
if fields["btn_hidden_close_download"].successfull then
modstore.lastmodentry = fields["btn_hidden_close_download"]
return {
current_tab = "modstore_mod_installed",
is_dialog = true,
show_buttons = false
}
else
modstore.lastmodtitle = ""
return {
current_tab = modstore.tabnames[1],
is_dialog = true,
show_buttons = false
}
end
end
if fields["btn_confirm_mod_successfull"] then
modstore.lastmodentry = nil
modstore.lastmodtitle = ""
return {
current_tab = modstore.tabnames[1],
is_dialog = true,
show_buttons = false
}
end
if fields["btn_modstore_search"] or
(fields["key_enter"] and fields["te_modstore_search"] ~= nil) then
modstore.last_search = fields["te_modstore_search"]
filterlist.set_filtercriteria(modstore.searchlist,fields["te_modstore_search"])
filterlist.refresh(modstore.searchlist)
modstore.currentlist = {
page = 0,
pagecount = math.ceil(filterlist.size(modstore.searchlist) / modstore.modsperpage),
data = filterlist.get_list(modstore.searchlist),
}
end
for i=1, modstore.modsperpage, 1 do
local installbtn = "btn_install_mod_" .. i
if fields[installbtn] then
local modlistentry =
modstore.current_list.page * modstore.modsperpage + i
local moddetails = modstore.get_details(modstore.current_list.data[modlistentry].id)
local fullurl = engine.setting_get("modstore_download_url") ..
moddetails.download_url
local modfilename = os.tempfolder() .. ".zip"
if engine.download_file(fullurl,modfilename) then
modmgr.installmod(modfilename,moddetails.basename)
os.remove(modfilename)
modstore.lastmodtitle = modstore.current_list.data[modlistentry].title
return {
current_tab = "modstore_mod_installed",
is_dialog = true,
show_buttons = false
}
else
gamedata.errormessage = "Unable to download " ..
moddetails.download_url .. " (internet connection?)"
if fields["btn_modstore_close"] then
return {
is_dialog = false,
show_buttons = true,
current_tab = engine.setting_get("main_menu_tab")
}
end
for key,value in pairs(fields) do
local foundat = key:find("btn_install_mod_")
if ( foundat == 1) then
local modid = tonumber(key:sub(17))
for i=1,#modstore.modlist_unsorted.data,1 do
if modstore.modlist_unsorted.data[i].id == modid then
local moddetails = modstore.modlist_unsorted.data[i].details
if modstore.lastmodtitle ~= "" then
modstore.lastmodtitle = modstore.lastmodtitle .. ", "
end
modstore.lastmodtitle = modstore.lastmodtitle .. moddetails.title
engine.handle_async(
function(param)
local fullurl = engine.setting_get("modstore_download_url") ..
param.moddetails.download_url
if param.version ~= nil then
local found = false
for i=1,#param.moddetails.versions, 1 do
if param.moddetails.versions[i].date:sub(1,10) == param.version then
fullurl = engine.setting_get("modstore_download_url") ..
param.moddetails.versions[i].download_url
found = true
end
end
if not found then
return {
moddetails = param.moddetails,
successfull = false
}
end
end
if engine.download_file(fullurl,param.filename) then
return {
texturename = param.texturename,
moddetails = param.moddetails,
filename = param.filename,
successfull = true
}
else
return {
modtitle = param.title,
successfull = false
}
end
end,
{
moddetails = moddetails,
version = fields["dd_version" .. modid],
filename = os.tempfolder() .. "_MODNAME_" .. moddetails.basename .. ".zip",
texturename = modstore.modlist_unsorted.data[i].texturename
},
function(result)
if result.successfull then
modmgr.installmod(result.filename,result.moddetails.basename)
os.remove(result.filename)
else
gamedata.errormessage = "Failed to download " .. result.moddetails.title
end
if gamedata.errormessage == nil then
engine.button_handler({btn_hidden_close_download=result})
else
engine.button_handler({btn_hidden_close_download={successfull=false}})
end
end
)
return {
current_tab = "modstore_downloading",
is_dialog = true,
show_buttons = false,
ignore_menu_quit = true
}
end
end
break
end
end
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] update_modlist
function modstore.update_modlist()
modstore.modlist_unsorted = {}
modstore.modlist_unsorted.data = engine.get_modstore_list()
if modstore.modlist_unsorted.data ~= nil then
modstore.modlist_unsorted.pagecount =
math.ceil((#modstore.modlist_unsorted.data / modstore.modsperpage))
else
modstore.modlist_unsorted.data = {}
modstore.modlist_unsorted.pagecount = 1
end
modstore.modlist_unsorted.data = {}
modstore.modlist_unsorted.pagecount = 1
modstore.modlist_unsorted.page = 0
engine.handle_async(
function(param)
return engine.get_modstore_list()
end,
nil,
function(result)
if result ~= nil then
modstore.modlist_unsorted = {}
modstore.modlist_unsorted.data = result
if modstore.modlist_unsorted.data ~= nil then
modstore.modlist_unsorted.pagecount =
math.ceil((#modstore.modlist_unsorted.data / modstore.modsperpage))
else
modstore.modlist_unsorted.data = {}
modstore.modlist_unsorted.pagecount = 1
end
modstore.modlist_unsorted.page = 0
modstore.fetchdetails()
engine.event_handler("Refresh")
end
end
)
end
--------------------------------------------------------------------------------
function modstore.getmodlist(list)
local retval = ""
retval = retval .. "label[10,-0.4;" .. fgettext("Page $1 of $2", list.page+1, list.pagecount) .. "]"
retval = retval .. "button[11.6,-0.1;0.5,0.5;btn_modstore_page_up;^]"
retval = retval .. "box[11.6,0.35;0.28,8.6;000000]"
local scrollbarpos = 0.35 + (8.1/(list.pagecount-1)) * list.page
retval = retval .. "box[11.6," ..scrollbarpos .. ";0.28,0.5;32CD32]"
retval = retval .. "button[11.6,9.0;0.5,0.5;btn_modstore_page_down;v]"
if #list.data < (list.page * modstore.modsperpage) then
return retval
-- @function [parent=#modstore] fetchdetails
function modstore.fetchdetails()
for i=1,#modstore.modlist_unsorted.data,1 do
engine.handle_async(
function(param)
param.details = engine.get_modstore_details(tostring(param.modid))
return param
end,
{
modid=modstore.modlist_unsorted.data[i].id,
listindex=i
},
function(result)
if result ~= nil and
modstore.modlist_unsorted ~= nil
and modstore.modlist_unsorted.data ~= nil and
modstore.modlist_unsorted.data[result.listindex] ~= nil and
modstore.modlist_unsorted.data[result.listindex].id ~= nil then
modstore.modlist_unsorted.data[result.listindex].details = result.details
engine.event_handler("Refresh")
end
end
)
end
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] getscreenshot
function modstore.getscreenshot(ypos,listentry)
if listentry.details ~= nil and
(listentry.details.screenshot_url == nil or
listentry.details.screenshot_url == "") then
if listentry.texturename == nil then
listentry.texturename = modstore.basetexturedir .. "no_screenshot.png"
end
return "image[0,".. ypos .. ";3,2;" ..
engine.formspec_escape(listentry.texturename) .. "]"
end
local endmod = (list.page * modstore.modsperpage) + modstore.modsperpage
if listentry.details ~= nil and
listentry.texturename == nil then
--make sure we don't download multiple times
listentry.texturename = "in progress"
--prepare url and filename
local fullurl = engine.setting_get("modstore_download_url") ..
listentry.details.screenshot_url
local filename = os.tempfolder() .. "_MID_" .. listentry.id
--trigger download
engine.handle_async(
--first param is downloadfct
function(param)
param.successfull = engine.download_file(param.fullurl,param.filename)
return param
end,
--second parameter is data passed to async job
{
fullurl = fullurl,
filename = filename,
modid = listentry.id
},
--integrate result to raw list
function(result)
if result.successfull then
local found = false
for i=1,#modstore.modlist_unsorted.data,1 do
if modstore.modlist_unsorted.data[i].id == result.modid then
found = true
modstore.modlist_unsorted.data[i].texturename = result.filename
break
end
end
if found then
engine.event_handler("Refresh")
else
engine.log("error","got screenshot but didn't find matching mod: " .. result.modid)
end
end
end
)
end
if listentry.texturename ~= nil and
listentry.texturename ~= "in progress" then
return "image[0,".. ypos .. ";3,2;" ..
engine.formspec_escape(listentry.texturename) .. "]"
end
return ""
end
--------------------------------------------------------------------------------
--@function [parent=#modstore] getshortmodinfo
function modstore.getshortmodinfo(ypos,listentry,details)
local retval = ""
retval = retval .. "box[0," .. ypos .. ";11.4,1.75;#FFFFFF]"
--screenshot
retval = retval .. modstore.getscreenshot(ypos,listentry)
--title + author
retval = retval .."label[2.75," .. ypos .. ";" ..
engine.formspec_escape(details.title) .. " (" .. details.author .. ")]"
--description
local descriptiony = ypos + 0.5
retval = retval .. "textarea[3," .. descriptiony .. ";6.5,1.55;;" ..
engine.formspec_escape(details.description) .. ";]"
--rating
local ratingy = ypos
retval = retval .."label[7," .. ratingy .. ";" ..
fgettext("Rating") .. ":]"
retval = retval .. "label[8.7," .. ratingy .. ";" .. details.rating .."]"
--versions (IMPORTANT has to be defined AFTER rating)
if details.versions ~= nil and
#details.versions > 1 then
local versiony = ypos + 0.05
retval = retval .. "dropdown[9.1," .. versiony .. ";2.48,0.25;dd_version" .. details.id .. ";"
local versions = ""
for i=1,#details.versions , 1 do
if versions ~= "" then
versions = versions .. ","
end
versions = versions .. details.versions[i].date:sub(1,10)
end
retval = retval .. versions .. ";1]"
end
if details.basename then
--install button
local buttony = ypos + 1.2
retval = retval .."button[9.1," .. buttony .. ";2.5,0.5;btn_install_mod_" .. details.id .. ";"
if modmgr.mod_exists(details.basename) then
retval = retval .. fgettext("re-Install") .."]"
else
retval = retval .. fgettext("Install") .."]"
end
end
return retval
end
--------------------------------------------------------------------------------
--@function [parent=#modstore] getmodlist
function modstore.getmodlist(list,yoffset)
modstore.current_list = list
if #list.data == 0 then
return ""
end
if yoffset == nil then
yoffset = 0
end
local scrollbar = ""
scrollbar = scrollbar .. "label[0.1,9.5;"
.. fgettext("Page $1 of $2", list.page+1, list.pagecount) .. "]"
scrollbar = scrollbar .. "box[11.6," .. (yoffset + 0.35) .. ";0.28,"
.. (8.6 - yoffset) .. ";#000000]"
local scrollbarpos = (yoffset + 0.75) +
((7.7 -yoffset)/(list.pagecount-1)) * list.page
scrollbar = scrollbar .. "box[11.6," ..scrollbarpos .. ";0.28,0.5;#32CD32]"
scrollbar = scrollbar .. "button[11.6," .. (yoffset + (0.3))
.. ";0.5,0.5;btn_modstore_page_up;^]"
scrollbar = scrollbar .. "button[11.6," .. 9.0
.. ";0.5,0.5;btn_modstore_page_down;v]"
local retval = ""
local endmod = (list.page * modstore.modsperpage) + modstore.modsperpage
if (endmod > #list.data) then
endmod = #list.data
end
for i=(list.page * modstore.modsperpage) +1, endmod, 1 do
--getmoddetails
local details = modstore.get_details(list.data[i].id)
local details = list.data[i].details
if details == nil then
details = {}
details.title = list.data[i].title
details.author = ""
details.rating = -1
details.description = ""
end
if details ~= nil then
local screenshot_ypos = (i-1 - (list.page * modstore.modsperpage))*1.9 +0.2
retval = retval .. "box[0," .. screenshot_ypos .. ";11.4,1.75;FFFFFF]"
--screenshot
if details.screenshot_url ~= nil and
details.screenshot_url ~= "" then
if list.data[i].texturename == nil then
local fullurl = engine.setting_get("modstore_download_url") ..
details.screenshot_url
local filename = os.tempfolder()
if engine.download_file(fullurl,filename) then
list.data[i].texturename = filename
end
end
end
if list.data[i].texturename == nil then
list.data[i].texturename = modstore.basetexturedir .. "no_screenshot.png"
end
retval = retval .. "image[0,".. screenshot_ypos .. ";3,2;" ..
engine.formspec_escape(list.data[i].texturename) .. "]"
--title + author
retval = retval .."label[2.75," .. screenshot_ypos .. ";" ..
engine.formspec_escape(details.title) .. " (" .. details.author .. ")]"
--description
local descriptiony = screenshot_ypos + 0.5
retval = retval .. "textarea[3," .. descriptiony .. ";6.5,1.55;;" ..
engine.formspec_escape(details.description) .. ";]"
--rating
local ratingy = screenshot_ypos + 0.6
retval = retval .."label[10.1," .. ratingy .. ";" ..
fgettext("Rating") .. ": " .. details.rating .."]"
--install button
local buttony = screenshot_ypos + 1.2
local buttonnumber = (i - (list.page * modstore.modsperpage))
retval = retval .."button[9.6," .. buttony .. ";2,0.5;btn_install_mod_" .. buttonnumber .. ";"
if modmgr.mod_exists(details.basename) then
retval = retval .. fgettext("re-Install") .."]"
else
retval = retval .. fgettext("Install") .."]"
end
local screenshot_ypos =
yoffset +(i-1 - (list.page * modstore.modsperpage))*1.9 +0.2
retval = retval .. modstore.getshortmodinfo(screenshot_ypos,
list.data[i],
details)
end
end
modstore.current_list = list
return retval
return retval .. scrollbar
end
--------------------------------------------------------------------------------
function modstore.get_details(modid)
if modstore.details_cache[modid] ~= nil then
return modstore.details_cache[modid]
end
--@function [parent=#modstore] getsearchpage
function modstore.getsearchpage()
local retval = ""
local search = ""
local retval = engine.get_modstore_details(tostring(modid))
modstore.details_cache[modid] = retval
return retval
if modstore.last_search ~= nil then
search = modstore.last_search
end
retval = retval ..
"button[9.5,0.2;2.5,0.5;btn_modstore_search;".. fgettext("Search") .. "]" ..
"field[0.5,0.5;9,0.5;te_modstore_search;;" .. search .. "]"
--show 4 mods only
modstore.modsperpage = 4
retval = retval ..
modstore.getmodlist(
modstore.currentlist,
1.75)
return retval;
end

View File

@ -178,7 +178,7 @@ function minetest.deserialize(sdata)
if okay then
return results
end
print('error:'.. results)
minetest.log('error', 'minetest.deserialize(): '.. results)
return nil
end

View File

@ -1,45 +1,46 @@
vector = {}
local function assert_vector(v)
assert(type(v) == "table" and v.x and v.y and v.z, "Invalid vector")
end
function vector.new(a, b, c)
v = {x=0, y=0, z=0}
if type(a) == "table" then
v = {x=a.x, y=a.y, z=a.z}
elseif a and b and c then
v = {x=a, y=b, z=c}
assert(a.x and a.y and a.z, "Invalid vector passed to vector.new()")
return {x=a.x, y=a.y, z=a.z}
elseif a then
assert(b and c, "Invalid arguments for vector.new()")
return {x=a, y=b, z=c}
end
setmetatable(v, {
__add = vector.add,
__sub = vector.subtract,
__mul = vector.multiply,
__div = vector.divide,
__umn = function(v) return vector.multiply(v, -1) end,
__len = vector.length,
__eq = vector.equals,
})
return v
return {x=0, y=0, z=0}
end
function vector.equals(a, b)
assert_vector(a)
assert_vector(b)
return a.x == b.x and
a.y == b.y and
a.z == b.z
end
function vector.length(v)
assert_vector(v)
return math.hypot(v.x, math.hypot(v.y, v.z))
end
function vector.normalize(v)
assert_vector(v)
local len = vector.length(v)
if len == 0 then
return vector.new()
return {x=0, y=0, z=0}
else
return vector.divide(v, len)
end
end
function vector.round(v)
assert_vector(v)
return {
x = math.floor(v.x + 0.5),
y = math.floor(v.y + 0.5),
@ -48,6 +49,8 @@ function vector.round(v)
end
function vector.distance(a, b)
assert_vector(a)
assert_vector(b)
local x = a.x - b.x
local y = a.y - b.y
local z = a.z - b.z
@ -55,6 +58,8 @@ function vector.distance(a, b)
end
function vector.direction(pos1, pos2)
assert_vector(pos1)
assert_vector(pos2)
local x_raw = pos2.x - pos1.x
local y_raw = pos2.y - pos1.y
local z_raw = pos2.z - pos1.z
@ -84,58 +89,58 @@ end
function vector.add(a, b)
assert_vector(a)
if type(b) == "table" then
return vector.new(
a.x + b.x,
a.y + b.y,
a.z + b.z)
assert_vector(b)
return {x = a.x + b.x,
y = a.y + b.y,
z = a.z + b.z}
else
return vector.new(
a.x + b,
a.y + b,
a.z + b)
return {x = a.x + b,
y = a.y + b,
z = a.z + b}
end
end
function vector.subtract(a, b)
assert_vector(a)
if type(b) == "table" then
return vector.new(
a.x - b.x,
a.y - b.y,
a.z - b.z)
assert_vector(b)
return {x = a.x - b.x,
y = a.y - b.y,
z = a.z - b.z}
else
return vector.new(
a.x - b,
a.y - b,
a.z - b)
return {x = a.x - b,
y = a.y - b,
z = a.z - b}
end
end
function vector.multiply(a, b)
assert_vector(a)
if type(b) == "table" then
return vector.new(
a.x * b.x,
a.y * b.y,
a.z * b.z)
assert_vector(b)
return {x = a.x * b.x,
y = a.y * b.y,
z = a.z * b.z}
else
return vector.new(
a.x * b,
a.y * b,
a.z * b)
return {x = a.x * b,
y = a.y * b,
z = a.z * b}
end
end
function vector.divide(a, b)
assert_vector(a)
if type(b) == "table" then
return vector.new(
a.x / b.x,
a.y / b.y,
a.z / b.z)
assert_vector(b)
return {x = a.x / b.x,
y = a.y / b.y,
z = a.z / b.z}
else
return vector.new(
a.x / b,
a.y / b,
a.z / b)
return {x = a.x / b,
y = a.y / b,
z = a.z / b}
end
end

View File

@ -0,0 +1,71 @@
uniform sampler2D baseTexture;
uniform sampler2D normalTexture;
uniform sampler2D useNormalmap;
uniform vec4 skyBgColor;
uniform float fogDistance;
uniform vec3 eyePosition;
varying vec3 vPosition;
varying vec3 eyeVec;
#ifdef ENABLE_PARALLAX_OCCLUSION
varying vec3 tsEyeVec;
#endif
const float e = 2.718281828459;
void main (void)
{
vec3 color;
vec2 uv = gl_TexCoord[0].st;
#ifdef USE_NORMALMAPS
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
#endif
#ifdef ENABLE_PARALLAX_OCCLUSION
float height;
vec2 tsEye = vec2(tsEyeVec.x,-tsEyeVec.y);
if (use_normalmap > 0.0) {
float map_height = texture2D(normalTexture, uv).a;
if (map_height < 1.0){
float height = PARALLAX_OCCLUSION_SCALE * map_height - PARALLAX_OCCLUSION_BIAS;
uv = uv + height * tsEye;
}
}
#endif
#ifdef ENABLE_BUMPMAPPING
if (use_normalmap > 0.0) {
vec3 base = texture2D(baseTexture, uv).rgb;
vec3 vVec = normalize(eyeVec);
vec3 bump = normalize(texture2D(normalTexture, uv).xyz * 2.0 - 1.0);
vec3 R = reflect(-vVec, bump);
vec3 lVec = normalize(vVec);
float diffuse = max(dot(lVec, bump), 0.0);
float specular = pow(clamp(dot(R, lVec), 0.0, 1.0),1.0);
color = mix (base,diffuse*base,1.0) + 0.1 * specular * diffuse;
} else {
color = texture2D(baseTexture, uv).rgb;
}
#else
color = texture2D(baseTexture, uv).rgb;
#endif
float alpha = texture2D(baseTexture, uv).a;
vec4 col = vec4(color.r, color.g, color.b, alpha);
col *= gl_Color;
col = col * col; // SRGB -> Linear
col *= 1.8;
col.r = 1.0 - exp(1.0 - col.r) / e;
col.g = 1.0 - exp(1.0 - col.g) / e;
col.b = 1.0 - exp(1.0 - col.b) / e;
col = sqrt(col); // Linear -> SRGB
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
col = mix(col, skyBgColor, d);
}
gl_FragColor = vec4(col.r, col.g, col.b, alpha);
}

View File

@ -0,0 +1,102 @@
uniform mat4 mWorldViewProj;
uniform mat4 mInvWorld;
uniform mat4 mTransWorld;
uniform float dayNightRatio;
uniform vec3 eyePosition;
varying vec3 vPosition;
varying vec3 eyeVec;
#ifdef ENABLE_PARALLAX_OCCLUSION
varying vec3 tsEyeVec;
#endif
void main(void)
{
gl_Position = mWorldViewProj * gl_Vertex;
vPosition = (mWorldViewProj * gl_Vertex).xyz;
eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz;
#ifdef ENABLE_PARALLAX_OCCLUSION
vec3 normal,tangent,binormal;
normal = normalize(gl_NormalMatrix * gl_Normal);
if (gl_Normal.x > 0.5) {
// 1.0, 0.0, 0.0
tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, -1.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
} else if (gl_Normal.x < -0.5) {
// -1.0, 0.0, 0.0
tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
} else if (gl_Normal.y > 0.5) {
// 0.0, 1.0, 0.0
tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
} else if (gl_Normal.y < -0.5) {
// 0.0, -1.0, 0.0
tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
} else if (gl_Normal.z > 0.5) {
// 0.0, 0.0, 1.0
tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
} else if (gl_Normal.z < -0.5) {
// 0.0, 0.0, -1.0
tangent = normalize(gl_NormalMatrix * vec3(-1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
}
mat3 tbnMatrix = mat3( tangent.x, binormal.x, normal.x,
tangent.y, binormal.y, normal.y,
tangent.z, binormal.z, normal.z);
tsEyeVec = normalize(eyeVec * tbnMatrix);
#endif
vec4 color;
//color = vec4(1.0, 1.0, 1.0, 1.0);
float day = gl_Color.r;
float night = gl_Color.g;
float light_source = gl_Color.b;
/*color.r = mix(night, day, dayNightRatio);
color.g = color.r;
color.b = color.r;*/
float rg = mix(night, day, dayNightRatio);
rg += light_source * 2.5; // Make light sources brighter
float b = rg;
// Moonlight is blue
b += (day - night) / 13.0;
rg -= (day - night) / 13.0;
// Emphase blue a bit in darker places
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);
// Artificial light is yellow-ish
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
color.r = clamp(rg,0.0,1.0);
color.g = clamp(rg,0.0,1.0);
color.b = clamp(b,0.0,1.0);
// Make sides and bottom darker than the top
color = color * color; // SRGB -> Linear
if(gl_Normal.y <= 0.5)
color *= 0.6;
//color *= 0.7;
color = sqrt(color); // Linear -> SRGB
color.a = gl_Color.a;
gl_FrontColor = gl_BackColor = color;
gl_TexCoord[0] = gl_MultiTexCoord0;
}

View File

@ -1,46 +0,0 @@
uniform sampler2D myTexture;
uniform sampler2D normalTexture;
uniform vec4 skyBgColor;
uniform float fogDistance;
varying vec3 vPosition;
varying vec3 viewVec;
void main (void)
{
vec4 col = texture2D(myTexture, vec2(gl_TexCoord[0]));
float alpha = col.a;
vec2 uv = gl_TexCoord[0].st;
vec4 base = texture2D(myTexture, uv);
vec4 final_color = vec4(0.2, 0.2, 0.2, 1.0) * base;
vec3 vVec = normalize(viewVec);
vec3 bump = normalize(texture2D(normalTexture, uv).xyz * 2.0 - 1.0);
vec3 R = reflect(-vVec, bump);
vec3 lVec = normalize(vec3(0.0, -0.4, 0.5));
float diffuse = max(dot(lVec, bump), 0.0);
vec3 color = diffuse * texture2D(myTexture, gl_TexCoord[0].st).rgb;
float specular = pow(clamp(dot(R, lVec), 0.0, 1.0),1.0);
color += vec3(0.2*specular*diffuse);
col = vec4(color.r, color.g, color.b, alpha);
col *= gl_Color;
col = col * col; // SRGB -> Linear
col *= 1.8;
col.r = 1.0 - exp(1.0 - col.r) / exp(1.0);
col.g = 1.0 - exp(1.0 - col.g) / exp(1.0);
col.b = 1.0 - exp(1.0 - col.b) / exp(1.0);
col = sqrt(col); // Linear -> SRGB
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
alpha = mix(alpha, 0.0, d);
}
gl_FragColor = vec4(col.r, col.g, col.b, alpha);
}

View File

@ -1,45 +0,0 @@
uniform sampler2D myTexture;
uniform sampler2D normalTexture;
uniform vec4 skyBgColor;
uniform float fogDistance;
varying vec3 vPosition;
varying vec3 viewVec;
void main (void)
{
vec4 col = texture2D(myTexture, vec2(gl_TexCoord[0]));
float alpha = col.a;
vec2 uv = gl_TexCoord[0].st;
vec4 base = texture2D(myTexture, uv);
vec4 final_color = vec4(0.2, 0.2, 0.2, 1.0) * base;
vec3 vVec = normalize(viewVec);
vec3 bump = normalize(texture2D(normalTexture, uv).xyz * 2.0 - 1.0);
vec3 R = reflect(-vVec, bump);
vec3 lVec = normalize(vec3(0.0, -0.4, 0.5));
float diffuse = max(dot(lVec, bump), 0.0);
vec3 color = diffuse * texture2D(myTexture, gl_TexCoord[0].st).rgb;
float specular = pow(clamp(dot(R, lVec), 0.0, 1.0),1.0);
color += vec3(0.2*specular*diffuse);
col = vec4(color.r, color.g, color.b, alpha);
col *= gl_Color;
col = col * col; // SRGB -> Linear
col *= 1.8;
col.r = 1.0 - exp(1.0 - col.r) / exp(1.0);
col.g = 1.0 - exp(1.0 - col.g) / exp(1.0);
col.b = 1.0 - exp(1.0 - col.b) / exp(1.0);
col = sqrt(col); // Linear -> SRGB
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
col = mix(col, skyBgColor, d);
}
gl_FragColor = vec4(col.r, col.g, col.b, alpha);
}

View File

@ -0,0 +1,54 @@
uniform sampler2D baseTexture;
uniform sampler2D normalTexture;
uniform sampler2D useNormalmap;
uniform vec4 skyBgColor;
uniform float fogDistance;
uniform vec3 eyePosition;
varying vec3 vPosition;
varying vec3 eyeVec;
const float e = 2.718281828459;
void main (void)
{
vec3 color;
vec2 uv = gl_TexCoord[0].st;
#ifdef USE_NORMALMAPS
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
#endif
#ifdef ENABLE_BUMPMAPPING
if (use_normalmap > 0.0) {
vec3 base = texture2D(baseTexture, uv).rgb;
vec3 vVec = normalize(eyeVec);
vec3 bump = normalize(texture2D(normalTexture, uv).xyz * 2.0 - 1.0);
vec3 R = reflect(-vVec, bump);
vec3 lVec = normalize(vVec);
float diffuse = max(dot(lVec, bump), 0.0);
float specular = pow(clamp(dot(R, lVec), 0.0, 1.0),1.0);
color = mix (base,diffuse*base,1.0) + 0.1 * specular * diffuse;
} else {
color = texture2D(baseTexture, uv).rgb;
}
#else
color = texture2D(baseTexture, uv).rgb;
#endif
float alpha = texture2D(baseTexture, uv).a;
vec4 col = vec4(color.r, color.g, color.b, alpha);
col *= gl_Color;
col = col * col; // SRGB -> Linear
col *= 1.8;
col.r = 1.0 - exp(1.0 - col.r) / e;
col.g = 1.0 - exp(1.0 - col.g) / e;
col.b = 1.0 - exp(1.0 - col.b) / e;
col = sqrt(col); // Linear -> SRGB
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
col = mix(col, skyBgColor, d);
}
gl_FragColor = vec4(col.r, col.g, col.b, alpha);
}

View File

@ -1,37 +1,44 @@
uniform mat4 mWorldViewProj;
uniform mat4 mInvWorld;
uniform mat4 mTransWorld;
uniform float dayNightRatio;
uniform float animationTimer;
uniform vec3 eyePosition;
varying vec3 vPosition;
varying vec3 viewVec;
varying vec3 eyeVec;
#ifdef ENABLE_WAVING_LEAVES
float smoothCurve( float x ) {
return x * x *( 3.0 - 2.0 * x );
}
float triangleWave( float x ) {
return abs( fract( x + 0.5 ) * 2.0 - 1.0 );
}
float smoothTriangleWave( float x ) {
return smoothCurve( triangleWave( x ) ) * 2.0 - 1.0;
}
#endif
void main(void)
{
gl_TexCoord[0] = gl_MultiTexCoord0;
#ifdef ENABLE_WAVING_LEAVES
vec4 pos = gl_Vertex;
vec4 pos2 = mTransWorld*gl_Vertex;
pos.x += (smoothTriangleWave(animationTimer*10.0 + pos2.x * 0.01 + pos2.z * 0.01) * 2.0 - 1.0) * 0.4;
pos.y += (smoothTriangleWave(animationTimer*15.0 + pos2.x * -0.01 + pos2.z * -0.01) * 2.0 - 1.0) * 0.2;
pos.z += (smoothTriangleWave(animationTimer*10.0 + pos2.x * -0.01 + pos2.z * -0.01) * 2.0 - 1.0) * 0.4;
gl_Position = mWorldViewProj * pos;
#else
gl_Position = mWorldViewProj * gl_Vertex;
#endif
vPosition = (mWorldViewProj * gl_Vertex).xyz;
vec3 tangent;
vec3 binormal;
vec3 c1 = cross( gl_Normal, vec3(0.0, 0.0, 1.0) );
vec3 c2 = cross( gl_Normal, vec3(0.0, 1.0, 0.0) );
if( length(c1)>length(c2) )
{
tangent = c1;
}
else
{
tangent = c2;
}
tangent = normalize(tangent);
//binormal = cross(gl_Normal, tangent);
//binormal = normalize(binormal);
eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz;
vec4 color;
//color = vec4(1.0, 1.0, 1.0, 1.0);
@ -45,7 +52,7 @@ void main(void)
color.b = color.r;*/
float rg = mix(night, day, dayNightRatio);
rg += light_source * 1.5; // Make light sources brighter
rg += light_source * 2.5; // Make light sources brighter
float b = rg;
// Moonlight is blue
@ -60,9 +67,9 @@ void main(void)
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
color.r = rg;
color.g = rg;
color.b = b;
color.r = clamp(rg,0.0,1.0);
color.g = clamp(rg,0.0,1.0);
color.b = clamp(b,0.0,1.0);
// Make sides and bottom darker than the top
color = color * color; // SRGB -> Linear
@ -76,23 +83,5 @@ void main(void)
gl_FrontColor = gl_BackColor = color;
gl_TexCoord[0] = gl_MultiTexCoord0;
vec3 n1 = normalize(gl_NormalMatrix * gl_Normal);
vec4 tangent1 = vec4(tangent.x, tangent.y, tangent.z, 0);
//vec3 t1 = normalize(gl_NormalMatrix * tangent1);
//vec3 b1 = cross(n1, t1);
vec3 v;
vec3 vVertex = vec3(gl_ModelViewMatrix * gl_Vertex);
vec3 vVec = -vVertex;
//v.x = dot(vVec, t1);
//v.y = dot(vVec, b1);
//v.z = dot(vVec, n1);
//viewVec = vVec;
viewVec = normalize(vec3(0.0, -0.4, 0.5));
//Vector representing the 0th texture coordinate passed to fragment shader
//gl_TexCoord[0] = vec2(gl_MultiTexCoord0);
// Transform the current vertex
//gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

View File

@ -0,0 +1,54 @@
uniform sampler2D baseTexture;
uniform sampler2D normalTexture;
uniform sampler2D useNormalmap;
uniform vec4 skyBgColor;
uniform float fogDistance;
uniform vec3 eyePosition;
varying vec3 vPosition;
varying vec3 eyeVec;
const float e = 2.718281828459;
void main (void)
{
vec3 color;
vec2 uv = gl_TexCoord[0].st;
#ifdef USE_NORMALMAPS
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
#endif
#ifdef ENABLE_BUMPMAPPING
if (use_normalmap > 0.0) {
vec3 base = texture2D(baseTexture, uv).rgb;
vec3 vVec = normalize(eyeVec);
vec3 bump = normalize(texture2D(normalTexture, uv).xyz * 2.0 - 1.0);
vec3 R = reflect(-vVec, bump);
vec3 lVec = normalize(vVec);
float diffuse = max(dot(vec3(-1.0, -0.4, 0.5), bump), 0.0);
float specular = pow(clamp(dot(R, lVec), 0.0, 1.0),1.0);
color = mix (base,diffuse*base,1.0) + 0.1 * specular * diffuse;
} else {
color = texture2D(baseTexture, uv).rgb;
}
#else
color = texture2D(baseTexture, uv).rgb;
#endif
float alpha = gl_Color.a;
vec4 col = vec4(color.r, color.g, color.b, alpha);
col *= gl_Color;
col = col * col; // SRGB -> Linear
col *= 1.8;
col.r = 1.0 - exp(1.0 - col.r) / e;
col.g = 1.0 - exp(1.0 - col.g) / e;
col.b = 1.0 - exp(1.0 - col.b) / e;
col = sqrt(col); // Linear -> SRGB
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
alpha = mix(alpha, 0.0, d);
}
gl_FragColor = vec4(col.r, col.g, col.b, alpha);
}

View File

@ -1,15 +1,27 @@
uniform mat4 mWorldViewProj;
uniform mat4 mInvWorld;
uniform mat4 mTransWorld;
uniform float dayNightRatio;
uniform float animationTimer;
uniform vec3 eyePosition;
varying vec3 vPosition;
varying vec3 eyeVec;
void main(void)
{
#ifdef ENABLE_WAVING_WATER
vec4 pos2 = gl_Vertex;
pos2.y -= 2.0;
pos2.y -= sin (pos2.z/WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH) * WATER_WAVE_HEIGHT
+ sin ((pos2.z/WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH) / 7.0) * WATER_WAVE_HEIGHT;
gl_Position = mWorldViewProj * pos2;
#else
gl_Position = mWorldViewProj * gl_Vertex;
#endif
eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz;
vPosition = (mWorldViewProj * gl_Vertex).xyz;
vec4 color;
@ -24,7 +36,7 @@ void main(void)
color.b = color.r;*/
float rg = mix(night, day, dayNightRatio);
rg += light_source * 1.0; // Make light sources brighter
rg += light_source * 2.5; // Make light sources brighter
float b = rg;
// Moonlight is blue
@ -39,20 +51,13 @@ void main(void)
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
color.r = rg;
color.g = rg;
color.b = b;
// Make sides and bottom darker than the top
color = color * color; // SRGB -> Linear
if(gl_Normal.y <= 0.5)
color *= 0.6;
//color *= 0.7;
color = sqrt(color); // Linear -> SRGB
color.r = clamp(rg,0.0,1.0);
color.g = clamp(rg,0.0,1.0);
color.b = clamp(b,0.0,1.0);
color.a = gl_Color.a;
gl_FrontColor = gl_BackColor = color;
gl_TexCoord[0] = gl_MultiTexCoord0;
}

View File

@ -0,0 +1,54 @@
uniform sampler2D baseTexture;
uniform sampler2D normalTexture;
uniform sampler2D useNormalmap;
uniform vec4 skyBgColor;
uniform float fogDistance;
uniform vec3 eyePosition;
varying vec3 vPosition;
varying vec3 eyeVec;
const float e = 2.718281828459;
void main (void)
{
vec3 color;
vec2 uv = gl_TexCoord[0].st;
#ifdef USE_NORMALMAPS
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
#endif
#ifdef ENABLE_BUMPMAPPING
if (use_normalmap > 0.0) {
vec3 base = texture2D(baseTexture, uv).rgb;
vec3 vVec = normalize(eyeVec);
vec3 bump = normalize(texture2D(normalTexture, uv).xyz * 2.0 - 1.0);
vec3 R = reflect(-vVec, bump);
vec3 lVec = normalize(vVec);
float diffuse = max(dot(lVec, bump), 0.0);
float specular = pow(clamp(dot(R, lVec), 0.0, 1.0),1.0);
color = mix (base,diffuse*base,1.0) + 0.1 * specular * diffuse;
} else {
color = texture2D(baseTexture, uv).rgb;
}
#else
color = texture2D(baseTexture, uv).rgb;
#endif
float alpha = texture2D(baseTexture, uv).a;
vec4 col = vec4(color.r, color.g, color.b, alpha);
col *= gl_Color;
col = col * col; // SRGB -> Linear
col *= 1.8;
col.r = 1.0 - exp(1.0 - col.r) / e;
col.g = 1.0 - exp(1.0 - col.g) / e;
col.b = 1.0 - exp(1.0 - col.b) / e;
col = sqrt(col); // Linear -> SRGB
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
col = mix(col, skyBgColor, d);
}
gl_FragColor = vec4(col.r, col.g, col.b, alpha);
}

View File

@ -1,37 +1,45 @@
uniform mat4 mWorldViewProj;
uniform mat4 mInvWorld;
uniform mat4 mTransWorld;
uniform float dayNightRatio;
uniform float animationTimer;
uniform vec3 eyePosition;
varying vec3 vPosition;
varying vec3 viewVec;
varying vec3 eyeVec;
#ifdef ENABLE_WAVING_PLANTS
float smoothCurve( float x ) {
return x * x *( 3.0 - 2.0 * x );
}
float triangleWave( float x ) {
return abs( fract( x + 0.5 ) * 2.0 - 1.0 );
}
float smoothTriangleWave( float x ) {
return smoothCurve( triangleWave( x ) ) * 2.0 - 1.0;
}
#endif
void main(void)
{
gl_TexCoord[0] = gl_MultiTexCoord0;
#ifdef ENABLE_WAVING_PLANTS
vec4 pos = gl_Vertex;
vec4 pos2 = mTransWorld * gl_Vertex;
if (gl_TexCoord[0].y < 0.05) {
pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2.x * 0.1 + pos2.z * 0.1) * 2.0 - 1.0) * 0.8;
pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2.x * -0.5 + pos2.z * -0.5) * 2.0 - 1.0) * 0.4;
}
gl_Position = mWorldViewProj * pos;
#else
gl_Position = mWorldViewProj * gl_Vertex;
#endif
vPosition = (mWorldViewProj * gl_Vertex).xyz;
vec3 tangent;
vec3 binormal;
vec3 c1 = cross( gl_Normal, vec3(0.0, 0.0, 1.0) );
vec3 c2 = cross( gl_Normal, vec3(0.0, 1.0, 0.0) );
if( length(c1)>length(c2) )
{
tangent = c1;
}
else
{
tangent = c2;
}
tangent = normalize(tangent);
//binormal = cross(gl_Normal, tangent);
//binormal = normalize(binormal);
eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz;
vec4 color;
//color = vec4(1.0, 1.0, 1.0, 1.0);
@ -45,7 +53,7 @@ void main(void)
color.b = color.r;*/
float rg = mix(night, day, dayNightRatio);
rg += light_source * 1.5; // Make light sources brighter
rg += light_source * 2.5; // Make light sources brighter
float b = rg;
// Moonlight is blue
@ -60,9 +68,9 @@ void main(void)
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
color.r = rg;
color.g = rg;
color.b = b;
color.r = clamp(rg,0.0,1.0);
color.g = clamp(rg,0.0,1.0);
color.b = clamp(b,0.0,1.0);
// Make sides and bottom darker than the top
color = color * color; // SRGB -> Linear
@ -75,24 +83,4 @@ void main(void)
gl_FrontColor = gl_BackColor = color;
gl_TexCoord[0] = gl_MultiTexCoord0;
vec3 n1 = normalize(gl_NormalMatrix * gl_Normal);
vec4 tangent1 = vec4(tangent.x, tangent.y, tangent.z, 0);
//vec3 t1 = normalize(gl_NormalMatrix * tangent1);
//vec3 b1 = cross(n1, t1);
vec3 v;
vec3 vVertex = vec3(gl_ModelViewMatrix * gl_Vertex);
vec3 vVec = -vVertex;
//v.x = dot(vVec, t1);
//v.y = dot(vVec, b1);
//v.z = dot(vVec, n1);
//viewVec = vVec;
viewVec = normalize(vec3(0.0, -0.4, 0.5));
//Vector representing the 0th texture coordinate passed to fragment shader
//gl_TexCoord[0] = vec2(gl_MultiTexCoord0);
// Transform the current vertex
//gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

View File

@ -0,0 +1 @@
trans_alphach_ref

View File

@ -0,0 +1,90 @@
uniform sampler2D baseTexture;
uniform sampler2D normalTexture;
uniform sampler2D useNormalmap;
uniform vec4 skyBgColor;
uniform float fogDistance;
uniform vec3 eyePosition;
varying vec3 vPosition;
varying vec3 eyeVec;
#ifdef ENABLE_PARALLAX_OCCLUSION
varying vec3 tsEyeVec;
#endif
const float e = 2.718281828459;
void main (void)
{
vec3 color;
vec2 uv = gl_TexCoord[0].st;
#ifdef USE_NORMALMAPS
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
#endif
#ifdef ENABLE_PARALLAX_OCCLUSION
float height;
vec2 tsEye = vec2(tsEyeVec.x,-tsEyeVec.y);
if (use_normalmap > 0.0) {
float map_height = texture2D(normalTexture, uv).a;
if (map_height < 1.0){
float height = PARALLAX_OCCLUSION_SCALE * map_height - PARALLAX_OCCLUSION_BIAS;
uv = uv + height * tsEye;
}
}
#endif
/* Steep parallax code, for future use
if ((parallaxMappingMode == 2.0) && (use_normalmap > 0.0)) {
const float numSteps = 40.0;
float height = 1.0;
float step = 1.0 / numSteps;
vec4 NB = texture2D(normalTexture, uv);
vec2 delta = tsEye * parallaxMappingScale / numSteps;
for (float i = 0.0; i < numSteps; i++) {
if (NB.a < height) {
height -= step;
uv += delta;
NB = texture2D(normalTexture, uv);
} else {
break;
}
}
}
*/
#ifdef ENABLE_BUMPMAPPING
if (use_normalmap > 0.0) {
vec3 base = texture2D(baseTexture, uv).rgb;
vec3 vVec = normalize(eyeVec);
vec3 bump = normalize(texture2D(normalTexture, uv).xyz * 2.0 - 1.0);
vec3 R = reflect(-vVec, bump);
vec3 lVec = normalize(vVec);
float diffuse = max(dot(lVec, bump), 0.0);
float specular = pow(clamp(dot(R, lVec), 0.0, 1.0),1.0);
color = mix (base,diffuse*base,1.0) + 0.1 * specular * diffuse;
} else {
color = texture2D(baseTexture, uv).rgb;
}
#else
color = texture2D(baseTexture, uv).rgb;
#endif
float alpha = texture2D(baseTexture, uv).a;
vec4 col = vec4(color.r, color.g, color.b, alpha);
col *= gl_Color;
col = col * col; // SRGB -> Linear
col *= 1.8;
col.r = 1.0 - exp(1.0 - col.r) / e;
col.g = 1.0 - exp(1.0 - col.g) / e;
col.b = 1.0 - exp(1.0 - col.b) / e;
col = sqrt(col); // Linear -> SRGB
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
col = mix(col, skyBgColor, d);
}
gl_FragColor = vec4(col.r, col.g, col.b, alpha);
}

View File

@ -0,0 +1,102 @@
uniform mat4 mWorldViewProj;
uniform mat4 mInvWorld;
uniform mat4 mTransWorld;
uniform float dayNightRatio;
uniform vec3 eyePosition;
varying vec3 vPosition;
varying vec3 eyeVec;
#ifdef ENABLE_PARALLAX_OCCLUSION
varying vec3 tsEyeVec;
#endif
void main(void)
{
gl_Position = mWorldViewProj * gl_Vertex;
vPosition = (mWorldViewProj * gl_Vertex).xyz;
eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz;
#ifdef ENABLE_PARALLAX_OCCLUSION
vec3 normal,tangent,binormal;
normal = normalize(gl_NormalMatrix * gl_Normal);
if (gl_Normal.x > 0.5) {
// 1.0, 0.0, 0.0
tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, -1.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
} else if (gl_Normal.x < -0.5) {
// -1.0, 0.0, 0.0
tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
} else if (gl_Normal.y > 0.5) {
// 0.0, 1.0, 0.0
tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
} else if (gl_Normal.y < -0.5) {
// 0.0, -1.0, 0.0
tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
} else if (gl_Normal.z > 0.5) {
// 0.0, 0.0, 1.0
tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
} else if (gl_Normal.z < -0.5) {
// 0.0, 0.0, -1.0
tangent = normalize(gl_NormalMatrix * vec3(-1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
}
mat3 tbnMatrix = mat3( tangent.x, binormal.x, normal.x,
tangent.y, binormal.y, normal.y,
tangent.z, binormal.z, normal.z);
tsEyeVec = normalize(eyeVec * tbnMatrix);
#endif
vec4 color;
//color = vec4(1.0, 1.0, 1.0, 1.0);
float day = gl_Color.r;
float night = gl_Color.g;
float light_source = gl_Color.b;
/*color.r = mix(night, day, dayNightRatio);
color.g = color.r;
color.b = color.r;*/
float rg = mix(night, day, dayNightRatio);
rg += light_source * 2.5; // Make light sources brighter
float b = rg;
// Moonlight is blue
b += (day - night) / 13.0;
rg -= (day - night) / 13.0;
// Emphase blue a bit in darker places
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);
// Artificial light is yellow-ish
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
color.r = clamp(rg,0.0,1.0);
color.g = clamp(rg,0.0,1.0);
color.b = clamp(b,0.0,1.0);
// Make sides and bottom darker than the top
color = color * color; // SRGB -> Linear
if(gl_Normal.y <= 0.5)
color *= 0.6;
//color *= 0.7;
color = sqrt(color); // Linear -> SRGB
color.a = gl_Color.a;
gl_FrontColor = gl_BackColor = color;
gl_TexCoord[0] = gl_MultiTexCoord0;
}

View File

@ -1,25 +0,0 @@
uniform sampler2D myTexture;
uniform vec4 skyBgColor;
uniform float fogDistance;
varying vec3 vPosition;
void main (void)
{
//vec4 col = vec4(1.0, 0.0, 0.0, 1.0);
vec4 col = texture2D(myTexture, vec2(gl_TexCoord[0]));
float a = col.a;
col *= gl_Color;
col = col * col; // SRGB -> Linear
col *= 1.8;
col.r = 1.0 - exp(1.0 - col.r) / exp(1.0);
col.g = 1.0 - exp(1.0 - col.g) / exp(1.0);
col.b = 1.0 - exp(1.0 - col.b) / exp(1.0);
col = sqrt(col); // Linear -> SRGB
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
col = mix(col, skyBgColor, d);
}
gl_FragColor = vec4(col.r, col.g, col.b, a);
}

View File

@ -1,23 +0,0 @@
uniform sampler2D myTexture;
uniform float fogDistance;
varying vec3 vPosition;
void main (void)
{
vec4 col = texture2D(myTexture, vec2(gl_TexCoord[0]));
col *= gl_Color;
float a = gl_Color.a;
col = col * col; // SRGB -> Linear
col *= 1.8;
col.r = 1.0 - exp(1.0 - col.r) / exp(1.0);
col.g = 1.0 - exp(1.0 - col.g) / exp(1.0);
col.b = 1.0 - exp(1.0 - col.b) / exp(1.0);
col = sqrt(col); // Linear -> SRGB
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
a = mix(a, 0.0, d);
}
gl_FragColor = vec4(col.r, col.g, col.b, a);
}

View File

@ -1,51 +0,0 @@
uniform mat4 mWorldViewProj;
uniform mat4 mInvWorld;
uniform mat4 mTransWorld;
uniform float dayNightRatio;
varying vec3 vPosition;
void main(void)
{
gl_Position = mWorldViewProj * gl_Vertex;
vPosition = (mWorldViewProj * gl_Vertex).xyz;
vec4 color;
//color = vec4(1.0, 1.0, 1.0, 1.0);
float day = gl_Color.r;
float night = gl_Color.g;
float light_source = gl_Color.b;
/*color.r = mix(night, day, dayNightRatio);
color.g = color.r;
color.b = color.r;*/
float rg = mix(night, day, dayNightRatio);
rg += light_source * 1.0; // Make light sources brighter
float b = rg;
// Moonlight is blue
b += (day - night) / 13.0;
rg -= (day - night) / 13.0;
// Emphase blue a bit in darker places
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);
// Artificial light is yellow-ish
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
color.r = rg;
color.g = rg;
color.b = b;
color.a = gl_Color.a;
gl_FrontColor = gl_BackColor = color;
gl_TexCoord[0] = gl_MultiTexCoord0;
}

View File

@ -1 +0,0 @@
trans_alphach

View File

@ -1,25 +0,0 @@
uniform sampler2D myTexture;
uniform float fogDistance;
varying vec3 vPosition;
void main (void)
{
vec4 col = texture2D(myTexture, vec2(gl_TexCoord[0]));
col *= gl_Color;
float a = col.a;
col = col * col; // SRGB -> Linear
col *= 1.8;
col.r = 1.0 - exp(1.0 - col.r) / exp(1.0);
col.g = 1.0 - exp(1.0 - col.g) / exp(1.0);
col.b = 1.0 - exp(1.0 - col.b) / exp(1.0);
col = sqrt(col); // Linear -> SRGB
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
a = mix(a, 0.0, d);
}
gl_FragColor = vec4(col.r, col.g, col.b, a);
}

View File

@ -1,51 +0,0 @@
uniform mat4 mWorldViewProj;
uniform mat4 mInvWorld;
uniform mat4 mTransWorld;
uniform float dayNightRatio;
varying vec3 vPosition;
void main(void)
{
gl_Position = mWorldViewProj * gl_Vertex;
vPosition = (mWorldViewProj * gl_Vertex).xyz;
vec4 color;
//color = vec4(1.0, 1.0, 1.0, 1.0);
float day = gl_Color.r;
float night = gl_Color.g;
float light_source = gl_Color.b;
/*color.r = mix(night, day, dayNightRatio);
color.g = color.r;
color.b = color.r;*/
float rg = mix(night, day, dayNightRatio);
rg += light_source * 1.0; // Make light sources brighter
float b = rg;
// Moonlight is blue
b += (day - night) / 13.0;
rg -= (day - night) / 13.0;
// Emphase blue a bit in darker places
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);
// Artificial light is yellow-ish
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
color.r = rg;
color.g = rg;
color.b = b;
color.a = gl_Color.a;
gl_FrontColor = gl_BackColor = color;
gl_TexCoord[0] = gl_MultiTexCoord0;
}

View File

@ -20,6 +20,10 @@ if( UNIX )
else( UNIX )
FIND_PATH(CURL_INCLUDE_DIR NAMES curl/curl.h) # Look for the header file.
FIND_LIBRARY(CURL_LIBRARY NAMES curl) # Look for the library.
FIND_FILE(CURL_DLL NAMES libcurl.dll
PATHS
"c:/windows/system32"
DOC "Path of the cURL dll (for installation)")
INCLUDE(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set CURL_FOUND to TRUE if
FIND_PACKAGE_HANDLE_STANDARD_ARGS(CURL DEFAULT_MSG CURL_LIBRARY CURL_INCLUDE_DIR) # all listed variables are TRUE
endif( UNIX )
@ -40,3 +44,4 @@ endif ( WIN32 )
MESSAGE(STATUS "CURL_INCLUDE_DIR = ${CURL_INCLUDE_DIR}")
MESSAGE(STATUS "CURL_LIBRARY = ${CURL_LIBRARY}")
MESSAGE(STATUS "CURL_DLL = ${CURL_DLL}")

View File

@ -0,0 +1,20 @@
# Always run during 'make'
if(VERSION_EXTRA)
set(VERSION_GITHASH "${VERSION_STRING}")
else(VERSION_EXTRA)
execute_process(COMMAND git describe --always --tag --dirty
WORKING_DIRECTORY "${GENERATE_VERSION_SOURCE_DIR}"
OUTPUT_VARIABLE VERSION_GITHASH OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET)
if(VERSION_GITHASH)
message(STATUS "*** Detected git version ${VERSION_GITHASH} ***")
else()
set(VERSION_GITHASH "${VERSION_STRING}")
endif()
endif()
configure_file(
${GENERATE_VERSION_SOURCE_DIR}/cmake_config_githash.h.in
${GENERATE_VERSION_BINARY_DIR}/cmake_config_githash.h)

View File

@ -1,339 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 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 General Public License for more details.
You should have received a copy of the GNU 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.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

502
doc/lgpl-2.1.txt Normal file
View File

@ -0,0 +1,502 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library 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 library 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 library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

View File

@ -1,4 +1,4 @@
Minetest Lua Modding API Reference 0.4.7
Minetest Lua Modding API Reference 0.4.8
========================================
More information at http://www.minetest.net/
Developer Wiki: http://dev.minetest.net/
@ -100,6 +100,8 @@ Mod directory structure
mods
|-- modname
| |-- depends.txt
| |-- screenshot.png
| |-- description.txt
| |-- init.lua
| |-- textures
| | |-- modname_stuff.png
@ -121,12 +123,11 @@ depends.txt:
to a single modname. Their meaning is that if the specified mod
is missing, that does not prevent this mod from being loaded.
optdepends.txt:
An alternative way of specifying optional dependencies.
Like depends.txt, a single line contains a single modname.
screenshot.png:
A screenshot shown in modmanager within mainmenu.
NOTE: This file exists for compatibility purposes only and
support for it will be removed from the engine by the end of 2013.
description.txt:
File containing desctiption to be shown within mainmenu.
init.lua:
The main Lua script. Running this script should register everything it
@ -873,6 +874,22 @@ list[<inventory location>;<list name>;<X>,<Y>;<W>,<H>;]
list[<inventory location>;<list name>;<X>,<Y>;<W>,<H>;<starting item index>]
^ Show an inventory list
listcolors[<slot_bg_normal>;<slot_bg_hover>]
^ Sets background color of slots in HEX-Color format
^ Sets background color of slots on mouse hovering
listcolors[<slot_bg_normal>;<slot_bg_hover>;<slot_border>]
^ Sets background color of slots in HEX-Color format
^ Sets background color of slots on mouse hovering
^ Sets color of slots border
listcolors[<slot_bg_normal>;<slot_bg_hover>;<slot_border>;<tooltip_bgcolor>;<tooltip_fontcolor>]
^ Sets background color of slots in HEX-Color format
^ Sets background color of slots on mouse hovering
^ Sets color of slots border
^ Sets background color of tooltips
^ Sets font color of tooltips
image[<X>,<Y>;<W>,<H>;<texture name>]
^ Show an image
^ Position and size units are inventory slots
@ -881,11 +898,21 @@ item_image[<X>,<Y>;<W>,<H>;<item name>]
^ Show an inventory image of registered item/node
^ Position and size units are inventory slots
bgcolor[<color>;<fullscreen>]
^ Sets background color of formspec in HEX-Color format
^ If true the background color is drawn fullscreen (does not effect the size of the formspec)
background[<X>,<Y>;<W>,<H>;<texture name>]
^ Use a background. Inventory rectangles are not drawn then.
^ Position and size units are inventory slots
^ Example for formspec 8x4 in 16x resolution: image shall be sized 8*16px x 4*16px
background[<X>,<Y>;<W>,<H>;<texture name>;<auto_clip>]
^ Use a background. Inventory rectangles are not drawn then.
^ Position and size units are inventory slots
^ Example for formspec 8x4 in 16x resolution: image shall be sized 8*16px x 4*16px
^ If true the background is clipped to formspec size (x and y are used as offset values, w and h are ignored)
pwdfield[<X>,<Y>;<W>,<H>;<name>;<label>]
^ Textual password style field; will be sent to server when a button is clicked
^ x and y position the field relative to the top left of the menu
@ -972,7 +999,7 @@ textlist[<X>,<Y>;<W>,<H>;<name>;<listelem 1>,<listelem 2>,...,<listelem n>]
^ x and y position the itemlist relative to the top left of the menu
^ w and h are the size of the itemlist
^ name fieldname sent to server on doubleclick value is current selected element
^ listelements can be prepended by #color in hexadecimal format RRGGBB,
^ listelements can be prepended by #color in hexadecimal format RRGGBB (only),
^ if you want a listelement to start with # write ##
textlist[<X>,<Y>;<W>,<H>;<name>;<listelem 1>,<listelem 2>,...,<listelem n>;<selected idx>;<transparent>]
@ -980,7 +1007,7 @@ textlist[<X>,<Y>;<W>,<H>;<name>;<listelem 1>,<listelem 2>,...,<listelem n>;<sele
^ x and y position the itemlist relative to the top left of the menu
^ w and h are the size of the itemlist
^ name fieldname sent to server on doubleclick value is current selected element
^ listelements can be prepended by #RRGGBB in hexadecimal format
^ listelements can be prepended by #RRGGBB (only) in hexadecimal format
^ if you want a listelement to start with # write ##
^ index to be selected within textlist
^ true/false draw transparent background
@ -998,7 +1025,7 @@ box[<X>,<Y>;<W>,<H>;<color>]
^ simple colored semitransparent box
^ x and y position the box relative to the top left of the menu
^ w and h are the size of box
^ color in hexadecimal format RRGGBB
^ color in HEX-Color format
dropdown[<X>,<Y>;<W>;<name>;<item 1>,<item 2>, ...,<item n>;<selected idx>]
^ show a dropdown field
@ -1007,7 +1034,7 @@ dropdown[<X>,<Y>;<W>;<name>;<item 1>,<item 2>, ...,<item n>;<selected idx>]
^ fieldname data is transfered to lua
^ items to be shown in dropdown
^ index of currently selected dropdown item
^ color in hexadecimal format RRGGBB
^ color in hexadecimal format RRGGBB (only)
checkbox[<X>,<Y>;<name>;<label>;<selected>]
^ show a checkbox
@ -1027,6 +1054,17 @@ Inventory location:
- "nodemeta:<X>,<Y>,<Z>": Any node metadata
- "detached:<name>": A detached inventory
HEX-Color
---------
#RGB
^ defines a color in hexadecimal format
#RGBA
^ defines a color in hexadecimal format and alpha channel
#RRGGBB
^ defines a color in hexadecimal format
#RRGGBBAA
^ defines a color in hexadecimal format and alpha channel
Vector helpers
---------------
vector.new([x[, y, z]]) -> vector
@ -1036,23 +1074,13 @@ vector.distance(p1, p2) -> number
vector.length(v) -> number
vector.normalize(v) -> vector
vector.round(v) -> vector
vector.equal(v1, v2) -> bool
vector.equals(v1, v2) -> bool
For the folowing x can be either a vector or a number.
vector.add(v, x) -> vector
^ x can be annother vector or a number
vector.subtract(v, x) -> vector
vector.multiply(v, x) -> vector
vector.divide(v, x) -> vector
You can also use Lua operators on vectors.
For example:
v1 = vector.new()
v1 = v1 + 5
v2 = vector.new(v1)
v1 = v1 * v2
if v1 == v2 then
error("Math broke")
end
Helper functions
-----------------
dump2(obj, name="_", dumped={})
@ -1070,6 +1098,7 @@ minetest.pos_to_string({x=X,y=Y,z=Z}) -> "(X,Y,Z)"
^ Convert position to a printable string
minetest.string_to_pos(string) -> position
^ Same but in reverse
minetest.formspec_escape(string) -> string
^ escapes characters [ ] \ , ; that can not be used in formspecs
minetest.is_yes(arg)
^ returns whether arg can be interpreted as yes
@ -1139,6 +1168,9 @@ minetest.register_on_respawnplayer(func(ObjectRef))
^ Called when player is to be respawned
^ Called _before_ repositioning of player occurs
^ return true in func to disable regular player placement
minetest.register_on_prejoinplayer(func(name, ip))
^ Called before a player joins the game
^ If it returns a string, the player is disconnected with that string as reason
minetest.register_on_joinplayer(func(ObjectRef))
^ Called when a player joins the game
minetest.register_on_leaveplayer(func(ObjectRef))
@ -1155,6 +1187,22 @@ minetest.register_on_player_receive_fields(func(player, formname, fields))
minetest.register_on_mapgen_init(func(MapgenParams))
^ Called just before the map generator is initialized but before the environment is initialized
^ MapgenParams consists of a table with the fields mgname, seed, water_level, and flags
minetest.register_on_craft(func(itemstack, player, old_craft_grid, craft_inv))
^ Called when player crafts something
^ itemstack is the output
^ old_craft_grid contains the recipe (Note: the one in the inventory is cleared)
^ craft_inv is the inventory with the crafting grid
^ Return either an ItemStack, to replace the output, or nil, to not modify it
minetest.register_craft_predict(func(itemstack, player, old_craft_grid, craft_inv))
^ The same as before, except that it is called before the player crafts, to make
^ craft prediction, and it should not change anything.
minetest.register_on_protection_violation(func(pos, name))
^ Called by builtin and mods when a player violates protection at a position
(eg, digs a node or punches a protected entity).
^ The registered functions can be called using minetest.record_protection_violation
^ The provided function should check that the position is protected by the mod
calling this function before it prints a message, if it does, to allow for
multiple protection mods.
Other registration functions:
minetest.register_chatcommand(cmd, chatcommand definition)
@ -1203,6 +1251,8 @@ Environment access:
minetest.set_node(pos, node)
minetest.add_node(pos, node): alias set_node(pos, node)
^ Set node at position (node = {name="foo", param1=0, param2=0})
minetest.swap_node(pos, node)
^ Set node at position, but don't remove metadata
minetest.remove_node(pos)
^ Equivalent to set_node(pos, "air")
minetest.get_node(pos)
@ -1239,6 +1289,10 @@ minetest.get_perlin(seeddiff, octaves, persistence, scale)
^ Return world-specific perlin noise (int(worldseed)+seeddiff)
minetest.get_voxel_manip()
^ Return voxel manipulator object
minetest.set_gen_notify(flags)
^ Set the types of on-generate notifications that should be collected
^ flags is a comma-delimited combination of:
^ dungeon, temple, cave_begin, cave_end, large_cave_begin, large_cave_end
minetest.get_mapgen_object(objectname)
^ Return requested mapgen object if available (see Mapgen objects)
minetest.set_mapgen_params(MapgenParams)
@ -1251,8 +1305,9 @@ minetest.set_mapgen_params(MapgenParams)
^ flags and flagmask are in the same format and have the same options as 'mgflags' in minetest.conf
minetest.clear_objects()
^ clear all objects in the environments
minetest.line_of_sight(pos1,pos2,stepsize) ->true/false
^ checkif there is a direct line of sight between pos1 and pos2
minetest.line_of_sight(pos1, pos2, stepsize) -> true/false, pos
^ Check if there is a direct line of sight between pos1 and pos2
^ Returns the position of the blocking node when false
^ pos1 First position
^ pos2 Second position
^ stepsize smaller gives more accurate results but requires more computing
@ -1351,8 +1406,8 @@ minetest.handle_node_drops(pos, drops, digger)
^ Can be overridden to get different functionality (eg. dropping items on
ground)
Rollbacks:
minetest.rollback_get_last_node_actor(p, range, seconds) -> actor, p, seconds
Rollback:
minetest.rollback_get_node_actions(pos, range, seconds, limit) -> {{actor, pos, time, oldnode, newnode}, ...}
^ Find who has done something to a node, or near a node
^ actor: "player:<name>", also "liquid".
minetest.rollback_revert_actions_by(actor, seconds) -> bool, log messages
@ -1361,14 +1416,18 @@ minetest.rollback_revert_actions_by(actor, seconds) -> bool, log messages
Defaults for the on_* item definition functions:
(These return the leftover itemstack)
minetest.item_place_node(itemstack, placer, pointed_thing)
minetest.item_place_node(itemstack, placer, pointed_thing, param2)
^ Place item as a node
^ param2 overrides facedir and wallmounted param2
^ returns itemstack, success
minetest.item_place_object(itemstack, placer, pointed_thing)
^ Place item as-is
minetest.item_place(itemstack, placer, pointed_thing)
minetest.item_place(itemstack, placer, pointed_thing, param2)
^ Use one of the above based on what the item is.
^ Calls on_rightclick of pointed_thing.under if defined instead
^ Note: is not called when wielded item overrides on_place
^ param2 overrides facedir and wallmounted param2
^ returns itemstack, success
minetest.item_drop(itemstack, dropper, pos)
^ Drop the item
minetest.item_eat(hp_change, replace_with_item)
@ -1434,7 +1493,7 @@ minetest.delete_particlespawner(id, player)
^ otherwise on all clients
Schematics:
minetest.create_schematic(p1, p2, probability_list, filename)
minetest.create_schematic(p1, p2, probability_list, filename, slice_prob_list)
^ Create a schematic from the volume of map specified by the box formed by p1 and p2.
^ Apply the specified probability values to the specified nodes in probability_list.
^ probability_list is an array of tables containing two fields, pos and prob.
@ -1443,6 +1502,9 @@ minetest.create_schematic(p1, p2, probability_list, filename)
^ If there are two or more entries with the same pos value, the last occuring in the array is used.
^ If pos is not inside the box formed by p1 and p2, it is ignored.
^ If probability_list is nil, no probabilities are applied.
^ Slice probability works in the same manner, except takes a field called ypos instead which indicates
^ the y position of the slice with a probability applied.
^ If slice probability list is nil, no slice probabilities are applied.
^ Saves schematic in the Minetest Schematic format to filename.
minetest.place_schematic(pos, schematic, rotation, replacements)
@ -1468,7 +1530,16 @@ minetest.parse_json(string[, nullvalue]) -> something
^ nullvalue: returned in place of the JSON null; defaults to nil
^ On success returns a table, a string, a number, a boolean or nullvalue
^ On failure outputs an error message and returns nil
^ Example: parse_json("[10, {\"a\":false}]") -> {[1] = 10, [2] = {a = false}}
^ Example: parse_json("[10, {\"a\":false}]") -> {10, {a = false}}
minetest.write_json(data[, styled]) -> string
^ Convert a Lua table into a JSON string
^ styled: Outputs in a human-readable format if this is set, defaults to false
^ Un-serializable things like functions and userdata are saved as null.
^ Warning: JSON is more strict than the Lua table format.
1. You can only use strings and positive integers of at least one as keys.
2. You can not mix string and integer keys.
This is due to the fact that Javascript has two distinct array and object values.
^ Example: write_json({10, {a = false}}) -> "[10, {\"a\": false}]"
minetest.serialize(table) -> string
^ Convert a table containing tables, strings, numbers, booleans and nils
into string form readable by minetest.deserialize
@ -1480,6 +1551,44 @@ minetest.deserialize(string) -> table
^ Example: deserialize('return { ["foo"] = "bar" }') -> {foo='bar'}
^ Example: deserialize('print("foo")') -> nil (function call fails)
^ error:[string "print("foo")"]:1: attempt to call global 'print' (a nil value)
minetest.is_protected(pos, name) -> bool
^ This function should be overriden by protection mods and should be used to
check if a player can interact at a position.
^ This function should call the old version of itself if the position is not
protected by the mod.
^ Example:
local old_is_protected = minetest.is_protected
function minetest.is_protected(pos, name)
if mymod:position_protected_from(pos, name) then
return true
end
return old_is_protected(pos, name)
end
minetest.record_protection_violation(pos, name)
^ This function calls functions registered with
minetest.register_on_protection_violation.
minetest.rotate_and_place(itemstack, placer, pointed_thing, infinitestacks, orient_flags)
^ Attempt to predict the desired orientation of the facedir-capable node
defined by itemstack, and place it accordingly (on-wall, on the floor, or
hanging from the ceiling). Stacks are handled normally if the infinitestacks
field is false or omitted (else, the itemstack is not changed). orient_flags
is an optional table containing extra tweaks to the placement code:
invert_wall: if true, place wall-orientation on the ground and ground-
orientation on the wall.
force_wall: if true, always place the node in wall orientation.
force_ceiling: if true, always place on the ceiling.
force_floor: if true, always place the node on the floor.
The above four options are mutually-exclusive; the last in the list takes
precedence over the first.
force_facedir: if true, forcably reset the facedir to north when placing on
the floor or ceiling
minetest.rotate_node(itemstack, placer, pointed_thing)
^ calls rotate_and_place() with infinitestacks set according to the state of
the creative mode setting, and checks for "sneak" to set the invert_wall
parameter.
Global objects:
minetest.env - EnvRef of the server environment and world.
@ -1608,10 +1717,13 @@ Player-only: (no-op for other objects)
{jump=bool,right=bool,left=bool,LMB=bool,RMB=bool,sneak=bool,aux1=bool,down=bool,up=bool}
- get_player_control_bits(): returns integer with bit packed player pressed keys
bit nr/meaning: 0/up ,1/down ,2/left ,3/right ,4/jump ,5/aux1 ,6/sneak ,7/LMB ,8/RMB
- set_physics_override(speed, jump, gravity)
modifies per-player walking speed, jump height, and gravity.
Values default to 1 and act as offsets to the physics settings
in minetest.conf. nil will keep the current setting.
- set_physics_override({
speed = 1.0, -- multiplier to default value
jump = 1.0, -- multiplier to default value
gravity = 1.0, -- multiplier to default value
sneak = true, -- whether player can sneak
sneak_glitch = true, -- whether player can use the sneak glitch
})
- hud_add(hud definition): add a HUD element described by HUD def, returns ID number on success
- hud_remove(id): remove the HUD element of the specified id
- hud_change(id, stat, value): change a value of a previously added HUD element
@ -1633,6 +1745,7 @@ methods:
- is_empty(listname): return true if list is empty
- get_size(listname): get size of a list
- set_size(listname, size): set size of a list
^ returns false on error (e.g. invalid listname or listsize)
- get_width(listname): get width of a list
- set_width(listname, width): set width of list; currently used for crafting
- get_stack(listname, i): get a copy of stack index i in list
@ -1654,9 +1767,13 @@ ItemStack: A stack of items.
methods:
- is_empty(): return true if stack is empty
- get_name(): returns item name (e.g. "default:stone")
- set_name(itemname)
- get_count(): returns number of items on the stack
- set_count(count)
- get_wear(): returns tool wear (0-65535), 0 for non-tools
- set_wear(wear)
- get_metadata(): returns metadata (a string attached to an item stack)
- set_metadata(metadata)
- 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)
@ -1717,11 +1834,19 @@ methods:
- update_map(): Update map after writing chunk back to map.
^ To be used only by VoxelManip objects created by the mod itself; not a VoxelManip that was
^ retrieved from minetest.get_mapgen_object
- set_lighting(light): Set the lighting within the VoxelManip
- set_lighting(light, p1, p2): Set the lighting within the VoxelManip to a uniform value
^ light is a table, {day=<0...15>, night=<0...15>}
^ To be used only by a VoxelManip object from minetest.get_mapgen_object
- calc_lighting(): Calculate lighting within the VoxelManip
^ (p1, p2) is the area in which lighting is set; defaults to the whole area if left out
- get_light_data(): Gets the light data read into the VoxelManip object
^ Returns an array (indicies 1 to volume) of integers ranging from 0 to 255
^ Each value is the bitwise combination of day and night light values (0..15 each)
^ light = day + (night * 16)
- set_light_data(light_data): Sets the param1 (light) contents of each node in the VoxelManip
^ expects lighting data in the same format that get_light_data() returns
- calc_lighting(p1, p2): Calculate lighting within the VoxelManip
^ To be used only by a VoxelManip object from minetest.get_mapgen_object
^ (p1, p2) is the area in which lighting is set; defaults to the whole area if left out
- update_liquids(): Update liquid flow
VoxelArea: A helper class for voxel areas
@ -1782,6 +1907,12 @@ the current mapgen.
Returns an array containing the humidity values of nodes in the most recently generated chunk by the
current mapgen.
- gennotify
Returns a table mapping requested generation notification types to arrays of positions at which the
corresponding generated structures are located at within the current chunk. To set the capture of positions
of interest to be recorded on generate, use minetest.set_gen_notify().
Possible fields of the table returned are: dungeon, temple, cave_begin, cave_end, large_cave_begin, large_cave_end
Registered entities
--------------------
- Functions receive a "luaentity" as self:
@ -1972,6 +2103,15 @@ Item definition (register_node, register_craftitem, register_tool)
eg. itemstack:take_item(); return itemstack
^ Otherwise, the function is free to do what it wants.
^ The default functions handle regular use cases.
after_use = func(itemstack, user, node, digparams),
^ default: nil
^ If defined, should return an itemstack and will be called instead of
wearing out the tool. If returns nil, does nothing.
If after_use doesn't exist, it is the same as:
function(itemstack, user, node, digparams)
itemstack:add_wear(digparams.wear)
return itemstack
end
}
Tile definition:
@ -1991,6 +2131,10 @@ Node definition (register_node)
drawtype = "normal", -- See "Node drawtypes"
visual_scale = 1.0,
^ Supported for drawtypes "plantlike", "signlike", "torchlike".
^ For plantlike, the image will start at the bottom of the node; for the
^ other drawtypes, the image will be centered on the node.
^ Note that positioning for "torchlike" may still change.
tiles = {tile definition 1, def2, def3, def4, def5, def6},
^ Textures of node; +Y, -Y, +X, -X, +Z, -Z (old field name: tile_images)
^ List can be shortened to needed length

View File

@ -33,9 +33,9 @@ engine.close()
Filesystem:
engine.get_scriptdir()
^ returns directory of script
engine.get_modpath()
engine.get_modpath() (possible in async calls)
^ returns path to global modpath
engine.get_modstore_details(modid)
engine.get_modstore_details(modid) (possible in async calls)
^ modid numeric id of mod in modstore
^ returns {
id = <numeric id of mod in modstore>,
@ -47,7 +47,7 @@ engine.get_modstore_details(modid)
license = <short description of license>,
rating = <float value of current rating>
}
engine.get_modstore_list()
engine.get_modstore_list() (possible in async calls)
^ returns {
[1] = {
id = <numeric id of mod in modstore>,
@ -55,19 +55,21 @@ engine.get_modstore_list()
basename = <basename for mod>
}
}
engine.get_gamepath()
engine.get_gamepath() (possible in async calls)
^ returns path to global gamepath
engine.get_dirlist(path,onlydirs)
engine.get_texturepath() (possible in async calls)
^ returns path to default textures
engine.get_dirlist(path,onlydirs) (possible in async calls)
^ path to get subdirs from
^ onlydirs should result contain only dirs?
^ returns list of folders within path
engine.create_dir(absolute_path)
engine.create_dir(absolute_path) (possible in async calls)
^ absolute_path to directory to create (needs to be absolute)
^ returns true/false
engine.delete_dir(absolute_path)
engine.delete_dir(absolute_path) (possible in async calls)
^ absolute_path to directory to delete (needs to be absolute)
^ returns true/false
engine.copy_dir(source,destination,keep_soure)
engine.copy_dir(source,destination,keep_soure) (possible in async calls)
^ source folder
^ destination folder
^ keep_source DEFAULT true --> if set to false source is deleted after copying
@ -76,11 +78,11 @@ engine.extract_zip(zipfile,destination) [unzip within path required]
^ zipfile to extract
^ destination folder to extract to
^ returns true/false
engine.download_file(url,target)
engine.download_file(url,target) (possible in async calls)
^ url to download
^ target to store to
^ returns true/false
engine.get_version()
engine.get_version() (possible in async calls)
^ returns current minetest version
engine.sound_play(spec, looped) -> handle
^ spec = SimpleSoundSpec (see lua-api.txt)
@ -105,10 +107,10 @@ engine.get_game(index)
DEPRECATED:
addon_mods_paths = {[1] = <path>,},
}
engine.get_games() -> table of all games in upper format
engine.get_games() -> table of all games in upper format (possible in async calls)
Favorites:
engine.get_favorites(location) -> list of favorites
engine.get_favorites(location) -> list of favorites (possible in async calls)
^ location: "local" or "online"
^ returns {
[1] = {
@ -128,21 +130,21 @@ engine.get_favorites(location) -> list of favorites
engine.delete_favorite(id, location) -> success
Logging:
engine.debug(line)
engine.debug(line) (possible in async calls)
^ Always printed to stderr and logfile (print() is redirected here)
engine.log(line)
engine.log(loglevel, line)
engine.log(line) (possible in async calls)
engine.log(loglevel, line) (possible in async calls)
^ loglevel one of "error", "action", "info", "verbose"
Settings:
engine.setting_set(name, value)
engine.setting_get(name) -> string or nil
engine.setting_get(name) -> string or nil (possible in async calls)
engine.setting_setbool(name, value)
engine.setting_getbool(name) -> bool or nil
engine.setting_getbool(name) -> bool or nil (possible in async calls)
engine.setting_save() -> nil, save all settings to config file
Worlds:
engine.get_worlds() -> list of worlds
engine.get_worlds() -> list of worlds (possible in async calls)
^ returns {
[1] = {
path = <full path to world>,
@ -174,7 +176,7 @@ engine.gettext(string) -> string
fgettext(string, ...) -> string
^ call engine.gettext(string), replace "$1"..."$9" with the given
^ extra arguments, call engine.formspec_escape and return the result
engine.parse_json(string[, nullvalue]) -> something
engine.parse_json(string[, nullvalue]) -> something (possible in async calls)
^ see minetest.parse_json (lua_api.txt)
dump(obj, dumped={})
^ Return object serialized as a string
@ -182,9 +184,24 @@ string:split(separator)
^ eg. string:split("a,b", ",") == {"a","b"}
string:trim()
^ eg. string.trim("\n \t\tfoo bar\t ") == "foo bar"
minetest.is_yes(arg)
minetest.is_yes(arg) (possible in async calls)
^ returns whether arg can be interpreted as yes
Async:
engine.handle_async(async_job,parameters,finished)
^ execute a function asynchronously
^ async_job is a function receiving one parameter and returning one parameter
^ parameters parameter table passed to async_job
^ finished function to be called once async_job has finished
^ the result of async_job is passed to this function
Limitations of Async operations
-No access to global lua variables, don't even try
-Limited set of available functions
e.g. No access to functions modifying menu like engine.start,engine.close,
engine.file_open_dialog
Class reference
----------------
Settings: see lua_api.txt

View File

@ -37,6 +37,9 @@ Disable main menu
\-\-help
Show allowed options
.TP
\-\-version
Show version information
.TP
\-\-logfile <value>
Set logfile path (debug.txt)
.TP

View File

@ -31,6 +31,9 @@ Set gameid
\-\-help
Show allowed options
.TP
\-\-version
Show version information
.TP
\-\-logfile <value>
Set logfile path (debug.txt)
.TP

View File

@ -712,7 +712,6 @@ end
minetest.register_node("default:stone", {
description = "Stone",
tiles ={"default_stone.png"},
is_ground_content = true,
groups = {cracky=3},
drop = 'default:cobble',
legacy_mineral = true,
@ -722,7 +721,6 @@ minetest.register_node("default:stone", {
minetest.register_node("default:stone_with_coal", {
description = "Stone with coal",
tiles ={"default_stone.png^default_mineral_coal.png"},
is_ground_content = true,
groups = {cracky=3},
drop = 'default:coal_lump',
sounds = default.node_sound_stone_defaults(),
@ -731,7 +729,6 @@ minetest.register_node("default:stone_with_coal", {
minetest.register_node("default:stone_with_iron", {
description = "Stone with iron",
tiles ={"default_stone.png^default_mineral_iron.png"},
is_ground_content = true,
groups = {cracky=3},
drop = 'default:iron_lump',
sounds = default.node_sound_stone_defaults(),
@ -740,7 +737,6 @@ minetest.register_node("default:stone_with_iron", {
minetest.register_node("default:dirt_with_grass", {
description = "Dirt with grass",
tiles ={"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
is_ground_content = true,
groups = {crumbly=3, soil=1},
drop = 'default:dirt',
sounds = default.node_sound_dirt_defaults({
@ -751,7 +747,6 @@ minetest.register_node("default:dirt_with_grass", {
minetest.register_node("default:dirt_with_grass_footsteps", {
description = "Dirt with grass and footsteps",
tiles ={"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
is_ground_content = true,
groups = {crumbly=3, soil=1},
drop = 'default:dirt',
sounds = default.node_sound_dirt_defaults({
@ -762,7 +757,6 @@ minetest.register_node("default:dirt_with_grass_footsteps", {
minetest.register_node("default:dirt", {
description = "Dirt",
tiles ={"default_dirt.png"},
is_ground_content = true,
groups = {crumbly=3, soil=1},
sounds = default.node_sound_dirt_defaults(),
})
@ -770,7 +764,6 @@ minetest.register_node("default:dirt", {
minetest.register_node("default:sand", {
description = "Sand",
tiles ={"default_sand.png"},
is_ground_content = true,
groups = {crumbly=3, falling_node=1},
sounds = default.node_sound_sand_defaults(),
})
@ -778,7 +771,6 @@ minetest.register_node("default:sand", {
minetest.register_node("default:gravel", {
description = "Gravel",
tiles ={"default_gravel.png"},
is_ground_content = true,
groups = {crumbly=2, falling_node=1},
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_gravel_footstep", gain=0.45},
@ -788,7 +780,6 @@ minetest.register_node("default:gravel", {
minetest.register_node("default:sandstone", {
description = "Sandstone",
tiles ={"default_sandstone.png"},
is_ground_content = true,
groups = {crumbly=2,cracky=2},
drop = 'default:sand',
sounds = default.node_sound_stone_defaults(),
@ -797,7 +788,6 @@ minetest.register_node("default:sandstone", {
minetest.register_node("default:clay", {
description = "Clay",
tiles ={"default_clay.png"},
is_ground_content = true,
groups = {crumbly=3},
drop = 'default:clay_lump 4',
sounds = default.node_sound_dirt_defaults({
@ -808,7 +798,6 @@ minetest.register_node("default:clay", {
minetest.register_node("default:brick", {
description = "Brick",
tiles ={"default_brick.png"},
is_ground_content = true,
groups = {cracky=3},
drop = 'default:clay_brick 4',
sounds = default.node_sound_stone_defaults(),
@ -817,7 +806,6 @@ minetest.register_node("default:brick", {
minetest.register_node("default:tree", {
description = "Tree",
tiles ={"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
is_ground_content = true,
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=1},
sounds = default.node_sound_wood_defaults(),
})
@ -825,7 +813,6 @@ minetest.register_node("default:tree", {
minetest.register_node("default:jungletree", {
description = "Jungle Tree",
tiles ={"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
is_ground_content = true,
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=1},
sounds = default.node_sound_wood_defaults(),
})
@ -849,6 +836,7 @@ minetest.register_node("default:leaves", {
visual_scale = 1.3,
tiles ={"default_leaves.png"},
paramtype = "light",
is_ground_content = false,
groups = {snappy=3},
drop = {
max_items = 1,
@ -871,7 +859,6 @@ minetest.register_node("default:leaves", {
minetest.register_node("default:cactus", {
description = "Cactus",
tiles ={"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
is_ground_content = true,
groups = {snappy=2,choppy=3},
sounds = default.node_sound_wood_defaults(),
})
@ -883,7 +870,6 @@ minetest.register_node("default:papyrus", {
inventory_image = "default_papyrus.png",
wield_image = "default_papyrus.png",
paramtype = "light",
is_ground_content = true,
walkable = false,
groups = {snappy=3},
sounds = default.node_sound_leaves_defaults(),
@ -892,7 +878,6 @@ minetest.register_node("default:papyrus", {
minetest.register_node("default:bookshelf", {
description = "Bookshelf",
tiles ={"default_wood.png", "default_wood.png", "default_bookshelf.png"},
is_ground_content = true,
groups = {snappy=2,choppy=3,oddly_breakable_by_hand=2},
sounds = default.node_sound_wood_defaults(),
})
@ -904,7 +889,6 @@ minetest.register_node("default:glass", {
inventory_image = minetest.inventorycube("default_glass.png"),
paramtype = "light",
sunlight_propagates = true,
is_ground_content = true,
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
sounds = default.node_sound_glass_defaults(),
})
@ -916,7 +900,6 @@ minetest.register_node("default:fence_wood", {
inventory_image = "default_fence.png",
wield_image = "default_fence.png",
paramtype = "light",
is_ground_content = true,
selection_box = {
type = "fixed",
fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
@ -932,7 +915,6 @@ minetest.register_node("default:rail", {
inventory_image = "default_rail.png",
wield_image = "default_rail.png",
paramtype = "light",
is_ground_content = true,
walkable = false,
selection_box = {
type = "fixed",
@ -949,7 +931,6 @@ minetest.register_node("default:ladder", {
wield_image = "default_ladder.png",
paramtype = "light",
paramtype2 = "wallmounted",
is_ground_content = true,
walkable = false,
climbable = true,
selection_box = {
@ -966,7 +947,6 @@ minetest.register_node("default:ladder", {
minetest.register_node("default:wood", {
description = "Wood",
tiles ={"default_wood.png"},
is_ground_content = true,
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
sounds = default.node_sound_wood_defaults(),
})
@ -974,7 +954,6 @@ minetest.register_node("default:wood", {
minetest.register_node("default:mese", {
description = "Mese",
tiles ={"default_mese.png"},
is_ground_content = true,
groups = {cracky=1,level=2},
sounds = default.node_sound_defaults(),
})
@ -982,7 +961,6 @@ minetest.register_node("default:mese", {
minetest.register_node("default:cloud", {
description = "Cloud",
tiles ={"default_cloud.png"},
is_ground_content = true,
sounds = default.node_sound_defaults(),
})
@ -1104,6 +1082,7 @@ minetest.register_node("default:torch", {
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
is_ground_content = false,
walkable = false,
light_source = LIGHT_MAX-1,
selection_box = {
@ -1126,6 +1105,7 @@ minetest.register_node("default:sign_wall", {
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
is_ground_content = false,
walkable = false,
selection_box = {
type = "wallmounted",
@ -1160,6 +1140,7 @@ minetest.register_node("default:chest", {
paramtype2 = "facedir",
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
legacy_facedir_simple = true,
is_ground_content = false,
sounds = default.node_sound_wood_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
@ -1192,6 +1173,7 @@ minetest.register_node("default:chest_locked", {
paramtype2 = "facedir",
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
legacy_facedir_simple = true,
is_ground_content = false,
sounds = default.node_sound_wood_defaults(),
after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos)
@ -1277,6 +1259,7 @@ minetest.register_node("default:furnace", {
paramtype2 = "facedir",
groups = {cracky=2},
legacy_facedir_simple = true,
is_ground_content = false,
sounds = default.node_sound_stone_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
@ -1310,6 +1293,7 @@ minetest.register_node("default:furnace_active", {
drop = "default:furnace",
groups = {cracky=2},
legacy_facedir_simple = true,
is_ground_content = false,
sounds = default.node_sound_stone_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
@ -1334,18 +1318,13 @@ minetest.register_node("default:furnace_active", {
end,
})
function hacky_swap_node(pos,name)
function swap_node(pos,name)
local node = minetest.get_node(pos)
local meta = minetest.get_meta(pos)
local meta0 = meta:to_table()
if node.name == name then
return
end
node.name = name
local meta0 = meta:to_table()
minetest.set_node(pos,node)
meta = minetest.get_meta(pos)
meta:from_table(meta0)
minetest.swap_node(pos, node)
end
minetest.register_abm({
@ -1400,7 +1379,7 @@ minetest.register_abm({
local percent = math.floor(meta:get_float("fuel_time") /
meta:get_float("fuel_totaltime") * 100)
meta:set_string("infotext","Furnace active: "..percent.."%")
hacky_swap_node(pos,"default:furnace_active")
swap_node(pos,"default:furnace_active")
meta:set_string("formspec",
"size[8,9]"..
"image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:"..
@ -1426,7 +1405,7 @@ minetest.register_abm({
if fuel.time <= 0 then
meta:set_string("infotext","Furnace out of fuel")
hacky_swap_node(pos,"default:furnace")
swap_node(pos,"default:furnace")
meta:set_string("formspec", default.furnace_inactive_formspec)
return
end
@ -1434,7 +1413,7 @@ minetest.register_abm({
if cooked.item:is_empty() then
if was_active then
meta:set_string("infotext","Furnace is empty")
hacky_swap_node(pos,"default:furnace")
swap_node(pos,"default:furnace")
meta:set_string("formspec", default.furnace_inactive_formspec)
end
return
@ -1452,7 +1431,6 @@ minetest.register_abm({
minetest.register_node("default:cobble", {
description = "Cobble",
tiles ={"default_cobble.png"},
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
@ -1460,7 +1438,6 @@ minetest.register_node("default:cobble", {
minetest.register_node("default:mossycobble", {
description = "Mossy Cobble",
tiles ={"default_mossycobble.png"},
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
@ -1468,7 +1445,6 @@ minetest.register_node("default:mossycobble", {
minetest.register_node("default:steelblock", {
description = "Steel Block",
tiles ={"default_steel_block.png"},
is_ground_content = true,
groups = {snappy=1,bendy=2},
sounds = default.node_sound_stone_defaults(),
})
@ -1481,6 +1457,7 @@ minetest.register_node("default:nyancat", {
paramtype2 = "facedir",
groups = {cracky=2},
legacy_facedir_simple = true,
is_ground_content = false,
sounds = default.node_sound_defaults(),
})
@ -1488,6 +1465,7 @@ minetest.register_node("default:nyancat_rainbow", {
description = "Nyancat Rainbow",
tiles ={"default_nc_rb.png"},
inventory_image = "default_nc_rb.png",
is_ground_content = false,
groups = {cracky=2},
sounds = default.node_sound_defaults(),
})
@ -1519,6 +1497,133 @@ minetest.register_node("default:apple", {
sounds = default.node_sound_defaults(),
})
local c_air = minetest.get_content_id("air")
local c_ignore = minetest.get_content_id("ignore")
local c_tree = minetest.get_content_id("default:tree")
local c_leaves = minetest.get_content_id("default:leaves")
local c_apple = minetest.get_content_id("default:apple")
function default.grow_tree(data, a, pos, is_apple_tree, seed)
--[[
NOTE: Tree-placing code is currently duplicated in the engine
and in games that have saplings; both are deprecated but not
replaced yet
]]--
local pr = PseudoRandom(seed)
local th = pr:next(4, 5)
local x, y, z = pos.x, pos.y, pos.z
for yy = y, y+th-1 do
local vi = a:index(x, yy, z)
if a:contains(x, yy, z) and (data[vi] == c_air or yy == y) then
data[vi] = c_tree
end
end
y = y+th-1 -- (x, y, z) is now last piece of trunk
local leaves_a = VoxelArea:new{MinEdge={x=-2, y=-1, z=-2}, MaxEdge={x=2, y=2, z=2}}
local leaves_buffer = {}
-- Force leaves near the trunk
local d = 1
for xi = -d, d do
for yi = -d, d do
for zi = -d, d do
leaves_buffer[leaves_a:index(xi, yi, zi)] = true
end
end
end
-- Add leaves randomly
for iii = 1, 8 do
local d = 1
local xx = pr:next(leaves_a.MinEdge.x, leaves_a.MaxEdge.x - d)
local yy = pr:next(leaves_a.MinEdge.y, leaves_a.MaxEdge.y - d)
local zz = pr:next(leaves_a.MinEdge.z, leaves_a.MaxEdge.z - d)
for xi = 0, d do
for yi = 0, d do
for zi = 0, d do
leaves_buffer[leaves_a:index(xx+xi, yy+yi, zz+zi)] = true
end
end
end
end
-- Add the leaves
for xi = leaves_a.MinEdge.x, leaves_a.MaxEdge.x do
for yi = leaves_a.MinEdge.y, leaves_a.MaxEdge.y do
for zi = leaves_a.MinEdge.z, leaves_a.MaxEdge.z do
if a:contains(x+xi, y+yi, z+zi) then
local vi = a:index(x+xi, y+yi, z+zi)
if data[vi] == c_air or data[vi] == c_ignore then
if leaves_buffer[leaves_a:index(xi, yi, zi)] then
if is_apple_tree and pr:next(1, 100) <= 10 then
data[vi] = c_apple
else
data[vi] = c_leaves
end
end
end
end
end
end
end
end
minetest.register_abm({
nodenames = {"default:sapling"},
interval = 10,
chance = 50,
action = function(pos, node)
local is_soil = minetest.registered_nodes[minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name].groups.soil
if is_soil == nil or is_soil == 0 then return end
print("A sapling grows into a tree at "..minetest.pos_to_string(pos))
local vm = minetest.get_voxel_manip()
local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16})
local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp}
local data = vm:get_data()
default.grow_tree(data, a, pos, math.random(1, 4) == 1, math.random(1,100000))
vm:set_data(data)
vm:write_to_map(data)
vm:update_map()
end
})
minetest.register_abm({
nodenames = {"default:dirt"},
interval = 2,
chance = 200,
action = function(pos, node)
local above = {x=pos.x, y=pos.y+1, z=pos.z}
local name = minetest.get_node(above).name
local nodedef = minetest.registered_nodes[name]
if nodedef and (nodedef.sunlight_propagates or nodedef.paramtype == "light")
and nodedef.liquidtype == "none"
and (minetest.get_node_light(above) or 0) >= 13 then
if name == "default:snow" or name == "default:snowblock" then
minetest.set_node(pos, {name = "default:dirt_with_snow"})
else
minetest.set_node(pos, {name = "default:dirt_with_grass"})
end
end
end
})
minetest.register_abm({
nodenames = {"default:dirt_with_grass"},
interval = 2,
chance = 20,
action = function(pos, node)
local above = {x=pos.x, y=pos.y+1, z=pos.z}
local name = minetest.get_node(above).name
local nodedef = minetest.registered_nodes[name]
if name ~= "ignore" and nodedef
and not ((nodedef.sunlight_propagates or nodedef.paramtype == "light")
and nodedef.liquidtype == "none") then
minetest.set_node(pos, {name = "default:dirt"})
end
end
})
--
-- Crafting items
--

View File

@ -4,7 +4,6 @@
-- Aliases for map generator outputs
--
minetest.register_alias("mapgen_air", "air")
minetest.register_alias("mapgen_stone", "default:stone")
minetest.register_alias("mapgen_tree", "default:tree")
minetest.register_alias("mapgen_leaves", "default:leaves")

View File

@ -22,15 +22,15 @@
# Client and server
#
# Network port (UDP)
#port =
# Name of player; on a server this is the main admin
#name =
#name =
#
# Client stuff
#
# Port to connect to (UDP)
#remote_port =
# Key mappings
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
#keymap_forward = KEY_KEY_W
@ -82,7 +82,7 @@
#vsync = false
#fov = 72
# Address to connect to (#blank = start local server)
#address =
#address =
# Enable random user input, for testing
#random_input = false
# Timeout for client to remove unused map data from memory
@ -94,7 +94,7 @@
# Constant volume liquids
#liquid_finite = false
# Max liquids processed per step
#liquid_loop_max = 1000
#liquid_loop_max = 10000
# Update liquids every .. recommend for finite: 0.2
#liquid_update = 1.0
# Relax flowing blocks to source if level near max and N nearby
@ -115,7 +115,7 @@
# disable for speed or for different looks.
#smooth_lighting = true
# Path to texture directory. All textures are first searched from here.
#texture_path =
#texture_path =
# Video back-end.
# Possible values: null, software, burningsvideo, direct3d8, direct3d9, opengl
#video_driver = opengl
@ -170,13 +170,37 @@
#enable_shaders = true
# Set to true to enable textures bumpmapping. Requires shaders enabled.
#enable_bumpmapping = false
# Set to true enables parallax occlusion mapping. Requires shaders enabled.
#enable_parallax_occlusion = false
# Scale of parallax occlusion effect
#parallax_mapping_scale = 0.08
# Bias of parallax occlusion effect, usually scale/2
#parallax_mapping_scale = 0.04
# Set to true enables waving water. Requires shaders enabled.
#enable_waving_water = false
# Parameters for waving water:
#water_wave_height = 1.0
#water_wave_length = 20.0
#water_wave_speed = 5.0
# Set to true enables waving leaves. Requires shaders enabled.
#enable_waving_leaves = false
# Set to true enables waving plants. Requires shaders enabled.
#enable_waving_plants = false
# The time in seconds it takes between repeated
# right clicks when holding the right mouse button
#repeat_rightclick_time = 0.25
# Make fog and sky colors depend on daytime (dawn/sunset) and view direction
#directional_colored_fog = true
# will only work for servers which use remote_media setting
# and only for clients compiled with cURL
#media_fetch_threads = 8
# Default timeout for cURL, in milliseconds
# Only has an effect if compiled with cURL
#curl_timeout = 5000
# Limits number of parallel HTTP requests. Affects:
# - Media fetch if server uses remote_media setting
# - Serverlist download and server announcement
# - Downloads performed by main menu (e.g. mod manager)
# Only has an effect if compiled with cURL
#curl_parallel_limit = 8
# Url to the server list displayed in the Multiplayer Tab
#serverlist_url = servers.minetest.net
@ -188,17 +212,24 @@
# Path to TrueTypeFont or bitmap
#font_path = fonts/liberationsans.ttf
#font_size = 13
# Font shadow offset, if 0 then shadow will not be drawn.
#font_shadow = 1
# Font shadow alpha (opaqueness, between 0 and 255)
#font_shadow_alpha = 128
#mono_font_path = fonts/liberationmono.ttf
#mono_font_size = 13
# This font will be used for certain languages
#fallback_font_path = fonts/DroidSansFallbackFull.ttf
#fallback_font_size = 13
#fallback_font_shadow = 1
#fallback_font_shadow_alpha = 128
#
# Server stuff
#
# Network port to listen (UDP)
#port =
# Name of server
#server_name = Minetest server
# Description of server
@ -218,7 +249,7 @@
# Message of the Day
#motd = Welcome to this awesome Minetest server!
# Maximum number of players connected simultaneously
#max_users = 100
#max_users = 15
# Set to true to disallow old clients from connecting
#strict_protocol_version_checking = false
# Set to true to enable creative mode (unlimited inventory)
@ -232,7 +263,7 @@
# Gives some stuff to players at the beginning
#give_initial_stuff = false
# New users need to input this password
#default_password =
#default_password =
# Available privileges: interact, shout, teleport, settime, privs, ...
# See /privs in game for a full list on your server and mod configuration.
#default_privs = interact, shout
@ -248,6 +279,10 @@
#disable_anticheat = false
# If true, actions are recorded for rollback
#enable_rollback_recording = false
# If true, blocks are cached (and generated if not before) before a player is spawned.
#cache_block_before_spawn = true
# Defines the maximum height a player can spawn in a map, above water level
#max_spawn_height = 50
# Profiler data print interval. #0 = disable.
#profiler_print_interval = 0
@ -308,7 +343,7 @@
#emergequeue_limit_diskonly =
# Maximum number of blocks to be queued that are to be generated.
# Leave blank for an appropriate amount to be chosen automatically.
#emergequeue_limit_generate =
#emergequeue_limit_generate =
# Number of emerge threads to use. Make this field blank, or increase this number, to use multiple threads.
# On multiprocessor systems, this will improve mapgen speed greatly, at the cost of slightly buggy caves.
#num_emerge_threads = 1

999
po/cs/minetest.po Normal file
View File

@ -0,0 +1,999 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: 2013-10-30 15:04+0200\n"
"Last-Translator: Jakub Vaněk <vanek.jakub4@seznam.cz>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"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 1.7-dev\n"
#: builtin/gamemgr.lua:23
msgid "Game Name"
msgstr "Název hry"
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr "Vytvořit"
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Zrušit"
#: builtin/gamemgr.lua:118
msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
msgstr "Gamemgr: Nepovedlo se zkopírovat mod \"$1\" do hry\"$2\""
#: builtin/gamemgr.lua:216
msgid "GAMES"
msgstr "HRY"
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
msgid "Games"
msgstr "Hry"
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr "Mody:"
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr "upravit hru"
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr "nová hra"
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr "UPRAVIT HRU"
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr "Odstranit vybraný mod"
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr "<<-- Přidat mod"
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr "Ok"
#: builtin/mainmenu.lua:297
msgid "World name"
msgstr "Název světa"
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr "Generátor světa"
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr "Hra"
#: builtin/mainmenu.lua:319
msgid "Delete World \"$1\"?"
msgstr "Doopravdy chcete smazat svět \"$1\"?"
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr "Ano"
#: builtin/mainmenu.lua:321
msgid "No"
msgstr "Ne"
#: builtin/mainmenu.lua:364
msgid "A world named \"$1\" already exists"
msgstr "Svět s názvem \"$1\" už existuje"
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr "Nebyla vybrána žádná hra"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr "CLIENT"
#: builtin/mainmenu.lua:819
msgid "Favorites:"
msgstr "Oblíbené:"
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr "Adresa/port"
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr "Jméno/Heslo"
#: builtin/mainmenu.lua:824
msgid "Public Serverlist"
msgstr "Veřejný seznam serverů"
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr "Vymazat"
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr "Připojit"
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr "Nový"
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr "Nastavit"
#: builtin/mainmenu.lua:877
msgid "Start Game"
msgstr "Začít hru"
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr "Vyber svět:"
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr "MÍSTNÍ SERVER"
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr "Kreativní mód"
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr "Povolit poškození"
#: builtin/mainmenu.lua:884
msgid "Public"
msgstr "Veřejný"
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr "Jméno"
#: builtin/mainmenu.lua:888
msgid "Password"
msgstr "Heslo"
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr "Port serveru"
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr "NASTAVENÍ"
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr "Pěkné stromy"
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr "Hladké osvětlení"
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr "3D Mraky"
#: builtin/mainmenu.lua:906
msgid "Opaque Water"
msgstr "Neprůhledná voda"
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr "Mip-Mapování"
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr "Anizotropní filtrování"
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr "Bilineární filtrování"
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr "Trilineární filtrování"
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr "Shadery"
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr "Přednačtené textury itemů"
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr "Povolit Částice"
#: builtin/mainmenu.lua:924
msgid "Finite Liquid"
msgstr "Konečná voda"
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr "Změnit nastavení klávesy"
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr "Hrát"
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr "HRA JEDNOHO HRÁČE"
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr "Vyberte balíček textur:"
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr "BALÍČKY TEXTUR"
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr "Žádné informace dostupné"
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr "Vývojáři jádra"
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr "Aktivní přispěvatelé"
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr "Bývalí přispěvatelé"
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr "Hra jednoho hráče"
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr "Hra více hráčů"
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr "Místní server"
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr "Nastavení"
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr "Balíčky textur"
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr "Mody"
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr "Autoři"
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr "MODY"
#: builtin/modmgr.lua:237
msgid "Installed Mods:"
msgstr "Instalované Mody:"
#: builtin/modmgr.lua:243
#, fuzzy
msgid "Add mod:"
msgstr "<<-- Přidat mod"
#: builtin/modmgr.lua:244
#, fuzzy
msgid "Local install"
msgstr "Instalovat"
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
#, fuzzy
msgid "No mod description available"
msgstr "Žádné informace dostupné"
#: builtin/modmgr.lua:288
#, fuzzy
msgid "Mod information:"
msgstr "Žádné informace dostupné"
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr "Přejmenovat"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:312
#, fuzzy
msgid "Uninstall selected mod"
msgstr "Odstranit vybraný mod"
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr "Přejmenovat Modpack:"
#: builtin/modmgr.lua:329 src/keycode.cpp:227
msgid "Accept"
msgstr "Přijmout"
#: builtin/modmgr.lua:423
msgid "World:"
msgstr "Svět:"
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
msgid "Hide Game"
msgstr "Skrýt Hru"
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr "Skrýt obsah mp"
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr "Mody:"
#: builtin/modmgr.lua:444
msgid "Depends:"
msgstr "Závislosti:"
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Uložit"
#: builtin/modmgr.lua:464
msgid "Enable MP"
msgstr "Povolit Hru více hráčů"
#: builtin/modmgr.lua:466
msgid "Disable MP"
msgstr "Zakázat Hru více hráčů"
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr "povoleno"
#: builtin/modmgr.lua:478
msgid "Enable all"
msgstr "Povolit vše"
#: builtin/modmgr.lua:577
msgid "Select Mod File:"
msgstr "Vybrat Soubor s Modem:"
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr "Instalace Modu: ze souboru: \"$1\""
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
msgstr ""
"\n"
"Instalace Modu: nepodporovaný typ souboru \"$1\""
#: builtin/modmgr.lua:638
msgid "Failed to install $1 to $2"
msgstr "Selhala instalace $1 do $2"
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr "Install Mod: nenalezen adresář s příslušným názvem pro balíček modu $1"
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr "Install Mod: Nenašel jsem skutečné jméno modu: $1"
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr "Modmgr: Nepodařilo se odstranit \"$1\""
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr "Modmgr: Neplatná cesta k modu \"$1\""
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr "Skutečně chcete odstranit \"$1\"?"
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr "Jistě, že ne!"
#: builtin/modstore.lua:183
msgid "Page $1 of $2"
msgstr "Strana $1 z $2"
#: builtin/modstore.lua:243
msgid "Rating"
msgstr "Hodnocení"
#: builtin/modstore.lua:251
msgid "re-Install"
msgstr "přeinstalovat"
#: builtin/modstore.lua:253
msgid "Install"
msgstr "Instalovat"
#: src/client.cpp:2917
msgid "Item textures..."
msgstr "Textury předmětů..."
#: src/game.cpp:940
msgid "Loading..."
msgstr "Nahrávám..."
#: src/game.cpp:1000
msgid "Creating server...."
msgstr "Vytvářím server..."
#: src/game.cpp:1016
msgid "Creating client..."
msgstr "Vytvářím klienta..."
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr "Překládám adresu..."
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr "Připojuji se k serveru..."
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr "Definice předmětů..."
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr "Definice uzlů..."
#: src/game.cpp:1233
msgid "Media..."
msgstr "Média..."
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr "Vypínám to..."
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Pro detaily se podívej do debug.txt."
#: src/guiDeathScreen.cpp:96
msgid "You died."
msgstr "Zemřel jsi."
#: src/guiDeathScreen.cpp:104
msgid "Respawn"
msgstr "Oživení"
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr "Pokračovat"
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
"Nastavení kláves. (Pokud tohle menu nebude v pořádku, odstraňte nastavení z "
"minetest.conf)"
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr "\"Použít\" = slézt dolů"
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr "Dvakrát zmáčkněte \"skok\" pro zapnutí létání"
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr "Klávesa je již používána"
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr "stiskni klávesu"
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr "Vpřed"
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr "Vzad"
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr "Vlevo"
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr "Vpravo"
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr "Použít"
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr "Skočit"
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr "Plížení"
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr "Zahodit"
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr "Inventář"
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr "Chat"
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr "Příkaz"
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr "Konzole"
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr "Přepnout létání"
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr "Přepnout rychlý pohyb"
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr "Zapnout noclip"
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr "Vybrat rozmezí"
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr "Vytisknout zásobníky"
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr "Staré heslo"
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr "Nové heslo"
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr "Potvrdit heslo"
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr "Změnit"
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr "Hesla si neodpovídají!"
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr "Pokračovat"
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr "Změnit heslo"
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr "Hlasitost"
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr "Odejít do Nabídky"
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr "Ukončit hru"
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- T: chat\n"
msgstr ""
"Výchozí ovládání:\n"
"- WASD: pohyb\n"
"- Mezera: skákání/šplhání\n"
"- Shift: plížení\n"
"- Q: zahodit\n"
"- I: inventář\n"
"- Myš: otáčení,rozhlížení\n"
"- Myš(levé tl.): kopat, štípat\n"
"- Myš(pravé tl.): položit, použít\n"
"- Myš(kolečko): vybrat předmět\n"
"- T: chat\n"
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr "Hlasitost: "
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr "Odejít"
#: src/keycode.cpp:223
msgid "Left Button"
msgstr "Levé tlačítko myši"
#: src/keycode.cpp:223
msgid "Middle Button"
msgstr "Prostřední tlačítko myši"
#: src/keycode.cpp:223
msgid "Right Button"
msgstr "Pravé tlačítko myši"
#: src/keycode.cpp:223
msgid "X Button 1"
msgstr "X Tlačítko 1"
#: src/keycode.cpp:224
msgid "Back"
msgstr "Zpět"
#: src/keycode.cpp:224
msgid "Clear"
msgstr "Vyčistit"
#: src/keycode.cpp:224
msgid "Return"
msgstr "Vrátit"
#: src/keycode.cpp:224
msgid "Tab"
msgstr "Tabulátor"
#: src/keycode.cpp:224
msgid "X Button 2"
msgstr "X Tlačítko 2"
#: src/keycode.cpp:225
msgid "Capital"
msgstr "Klávesa velkého písmene"
#: src/keycode.cpp:225
msgid "Control"
msgstr "Control"
#: src/keycode.cpp:225
msgid "Kana"
msgstr "Kana"
#: src/keycode.cpp:225
msgid "Menu"
msgstr "Nabídka"
#: src/keycode.cpp:225
msgid "Pause"
msgstr "Pauza"
#: src/keycode.cpp:225
msgid "Shift"
msgstr "Shift"
#: src/keycode.cpp:226
msgid "Convert"
msgstr "Převádět"
#: src/keycode.cpp:226
msgid "Escape"
msgstr "Esc"
#: src/keycode.cpp:226
msgid "Final"
msgstr "Konečný"
#: src/keycode.cpp:226
msgid "Junja"
msgstr "Junja"
#: src/keycode.cpp:226
msgid "Kanji"
msgstr "Kanji"
#: src/keycode.cpp:226
msgid "Nonconvert"
msgstr "Nepřevádět"
#: src/keycode.cpp:227
msgid "End"
msgstr "End"
#: src/keycode.cpp:227
msgid "Home"
msgstr "Home"
#: src/keycode.cpp:227
msgid "Mode Change"
msgstr "Změna modu"
#: src/keycode.cpp:227
msgid "Next"
msgstr "Další"
#: src/keycode.cpp:227
msgid "Prior"
msgstr "Předchozí"
#: src/keycode.cpp:227
msgid "Space"
msgstr "Mezerník"
#: src/keycode.cpp:228
msgid "Down"
msgstr "Dolů"
#: src/keycode.cpp:228
msgid "Execute"
msgstr "Spustit"
#: src/keycode.cpp:228
msgid "Print"
msgstr "Print Screen"
#: src/keycode.cpp:228
msgid "Select"
msgstr "Vybrat"
#: src/keycode.cpp:228
msgid "Up"
msgstr "Nahoru"
#: src/keycode.cpp:229
msgid "Help"
msgstr "Pomoc"
#: src/keycode.cpp:229
msgid "Insert"
msgstr "Vložit"
#: src/keycode.cpp:229
msgid "Snapshot"
msgstr "Momentka"
#: src/keycode.cpp:232
msgid "Left Windows"
msgstr "Levá klávesa Windows"
#: src/keycode.cpp:233
msgid "Apps"
msgstr "Aplikace"
#: src/keycode.cpp:233
msgid "Numpad 0"
msgstr "Numerická klávesnice: 0"
#: src/keycode.cpp:233
msgid "Numpad 1"
msgstr "Numerická klávesnice: 1"
#: src/keycode.cpp:233
msgid "Right Windows"
msgstr "Pravá klávesa Windows"
#: src/keycode.cpp:233
msgid "Sleep"
msgstr "Spát"
#: src/keycode.cpp:234
msgid "Numpad 2"
msgstr "Numerická klávesnice: 2"
#: src/keycode.cpp:234
msgid "Numpad 3"
msgstr "Numerická klávesnice: 3"
#: src/keycode.cpp:234
msgid "Numpad 4"
msgstr "Numerická klávesnice: 4"
#: src/keycode.cpp:234
msgid "Numpad 5"
msgstr "Numerická klávesnice: 5"
#: src/keycode.cpp:234
msgid "Numpad 6"
msgstr "Numerická klávesnice: 6"
#: src/keycode.cpp:234
msgid "Numpad 7"
msgstr "Numerická klávesnice: 7"
#: src/keycode.cpp:235
msgid "Numpad *"
msgstr "Numerická klávesnice: *"
#: src/keycode.cpp:235
msgid "Numpad +"
msgstr "Numerická klávesnice: +"
#: src/keycode.cpp:235
msgid "Numpad -"
msgstr "Numerická klávesnice: -"
#: src/keycode.cpp:235
msgid "Numpad /"
msgstr "Numerická klávesnice: /"
#: src/keycode.cpp:235
msgid "Numpad 8"
msgstr "Numerická klávesnice: 8"
#: src/keycode.cpp:235
msgid "Numpad 9"
msgstr "Numerická klávesnice: 9"
#: src/keycode.cpp:239
msgid "Num Lock"
msgstr "Num Lock"
#: src/keycode.cpp:239
msgid "Scroll Lock"
msgstr "Scroll Lock"
#: src/keycode.cpp:240
msgid "Left Shift"
msgstr "Levý Shift"
#: src/keycode.cpp:240
msgid "Right Shift"
msgstr "Pravý Shift"
#: src/keycode.cpp:241
msgid "Left Control"
msgstr "Levý Control"
#: src/keycode.cpp:241
msgid "Left Menu"
msgstr "Levá klávesa Menu"
#: src/keycode.cpp:241
msgid "Right Control"
msgstr "Pravý Control"
#: src/keycode.cpp:241
msgid "Right Menu"
msgstr "Pravá klávesa Menu"
#: src/keycode.cpp:243
msgid "Comma"
msgstr "Čárka"
#: src/keycode.cpp:243
msgid "Minus"
msgstr "Mínus"
#: src/keycode.cpp:243
msgid "Period"
msgstr "Tečka"
#: src/keycode.cpp:243
msgid "Plus"
msgstr "Plus"
#: src/keycode.cpp:247
msgid "Attn"
msgstr "Attn"
#: src/keycode.cpp:247
msgid "CrSel"
msgstr "CrSel"
#: src/keycode.cpp:248
msgid "Erase OEF"
msgstr "Smazat EOF"
#: src/keycode.cpp:248
msgid "ExSel"
msgstr "ExSel"
#: src/keycode.cpp:248
msgid "OEM Clear"
msgstr "OEM Clear"
#: src/keycode.cpp:248
msgid "PA1"
msgstr "PA1"
#: src/keycode.cpp:248
msgid "Zoom"
msgstr "Přiblížení"
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr "vyžaduje_fallback_font"
#: src/main.cpp:1547
msgid "Main Menu"
msgstr "Hlavní nabídka"
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
"Nebyl vybrán žádný svět a nebyla poskytnuta žádná adresa. Nemám co dělat."
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr "Hru nebylo možné najít nebo nahrát \""
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr "Neplatná specifikace hry."
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr "Chyba spojení (vypršel čas?)"
#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr ""
#~ "Levý klik: Přesunout všechny předměty, Pravý klik: Přesunout jeden předmět"
#~ msgid "Download"
#~ msgstr "Stáhnout"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-07 22:01+0400\n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: 2013-02-17 00:41+0200\n"
"Last-Translator: Rune Biskopstö Christensen <lakersforce@gmail.com>\n"
"Language-Team: \n"
@ -23,12 +23,12 @@ msgstr ""
msgid "Game Name"
msgstr "Spil"
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:301
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr "Skab"
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:302 builtin/modmgr.lua:289
#: builtin/modmgr.lua:406 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Anuller"
@ -40,36 +40,36 @@ msgstr ""
msgid "GAMES"
msgstr ""
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:859
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
#, fuzzy
msgid "Games"
msgstr "Spil"
#: builtin/gamemgr.lua:233
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr ""
#: builtin/gamemgr.lua:234
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr ""
#: builtin/gamemgr.lua:237
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr ""
#: builtin/gamemgr.lua:247
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr ""
#: builtin/gamemgr.lua:267
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr ""
#: builtin/gamemgr.lua:270
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr ""
#: builtin/mainmenu.lua:159
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr ""
@ -77,230 +77,238 @@ msgstr ""
msgid "World name"
msgstr "Verdens navn"
#: builtin/mainmenu.lua:298
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr ""
#: builtin/mainmenu.lua:300
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr "Spil"
#: builtin/mainmenu.lua:314
#: builtin/mainmenu.lua:319
#, fuzzy
msgid "Delete World \"$1\"?"
msgstr "Slet verden"
#: builtin/mainmenu.lua:315 builtin/modmgr.lua:846
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr "Ja"
#: builtin/mainmenu.lua:316
#: builtin/mainmenu.lua:321
msgid "No"
msgstr "Nej"
#: builtin/mainmenu.lua:384
#: builtin/mainmenu.lua:364
#, fuzzy
msgid "A world named \"$1\" already exists"
msgstr "Kan ikke skabe verden: en verden med dette navn eksisterer allerede"
#: builtin/mainmenu.lua:399
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr ""
#: builtin/mainmenu.lua:852
msgid "Singleplayer"
msgstr "Enligspiller"
#: builtin/mainmenu.lua:853
msgid "Client"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:854
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:855
msgid "Settings"
msgstr "Indstillinger"
#: builtin/mainmenu.lua:856
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:863
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:865
msgid "Credits"
msgstr "Skabt af"
#: builtin/mainmenu.lua:885
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr ""
#: builtin/mainmenu.lua:886
#: builtin/mainmenu.lua:819
#, fuzzy
msgid "Favorites:"
msgstr "Vis favoritter"
#: builtin/mainmenu.lua:887
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr "Adresse/port"
#: builtin/mainmenu.lua:888
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr "Navn/kodeord"
#: builtin/mainmenu.lua:891
#: builtin/mainmenu.lua:824
msgid "Public Serverlist"
msgstr ""
#: builtin/mainmenu.lua:896 builtin/mainmenu.lua:941 builtin/mainmenu.lua:1004
#: builtin/modmgr.lua:271 src/keycode.cpp:229
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr "Slet"
#: builtin/mainmenu.lua:900
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr "Forbind"
#: builtin/mainmenu.lua:942 builtin/mainmenu.lua:1005
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr "Ny"
#: builtin/mainmenu.lua:943 builtin/mainmenu.lua:1006
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr "Konfigurér"
#: builtin/mainmenu.lua:944
#: builtin/mainmenu.lua:877
#, fuzzy
msgid "Start Game"
msgstr "Start spil / Forbind"
#: builtin/mainmenu.lua:945 builtin/mainmenu.lua:1008
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr "Vælg verden:"
#: builtin/mainmenu.lua:946
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr ""
#: builtin/mainmenu.lua:947 builtin/mainmenu.lua:1010
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr "Kreativ tilstand"
#: builtin/mainmenu.lua:949 builtin/mainmenu.lua:1012
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr "Aktivér skade"
#: builtin/mainmenu.lua:951
#: builtin/mainmenu.lua:884
#, fuzzy
msgid "Public"
msgstr "Vis offentlig"
#: builtin/mainmenu.lua:953
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr ""
#: builtin/mainmenu.lua:955
#: builtin/mainmenu.lua:888
#, fuzzy
msgid "Password"
msgstr "Gammelt kodeord"
#: builtin/mainmenu.lua:956
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr ""
#: builtin/mainmenu.lua:966
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr ""
#: builtin/mainmenu.lua:967
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr "\"Smarte\" træer"
#: builtin/mainmenu.lua:969
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr "Glat belysning"
#: builtin/mainmenu.lua:971
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr "3D skyer"
#: builtin/mainmenu.lua:973
#: builtin/mainmenu.lua:906
#, fuzzy
msgid "Opaque Water"
msgstr "Opakt (uigennemsigtigt) vand"
#: builtin/mainmenu.lua:976
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr "Mip-mapping"
#: builtin/mainmenu.lua:978
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr "Anisotropisk filtréring"
#: builtin/mainmenu.lua:980
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr "Bi-lineær filtréring"
#: builtin/mainmenu.lua:982
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr "Tri-lineær filtréring"
#: builtin/mainmenu.lua:985
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr "Shadere"
#: builtin/mainmenu.lua:987
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr "For-indlæs elementernes grafik"
#: builtin/mainmenu.lua:989
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr "Aktivér partikler"
#: builtin/mainmenu.lua:991
#: builtin/mainmenu.lua:924
msgid "Finite Liquid"
msgstr ""
#: builtin/mainmenu.lua:994
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr "Skift bindinger"
#: builtin/mainmenu.lua:1007 src/keycode.cpp:248
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr "Afspil"
#: builtin/mainmenu.lua:1009
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr ""
#: builtin/mainmenu.lua:1022
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr ""
#: builtin/mainmenu.lua:1023
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr ""
#: builtin/mainmenu.lua:1043
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr ""
#: builtin/mainmenu.lua:1071
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr ""
#: builtin/mainmenu.lua:1082
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr ""
#: builtin/mainmenu.lua:1092
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr ""
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr "Enligspiller"
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr ""
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr "Indstillinger"
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr "Skabt af"
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr ""
@ -309,114 +317,133 @@ msgstr ""
msgid "Installed Mods:"
msgstr ""
#: builtin/modmgr.lua:243 builtin/modstore.lua:253
msgid "Install"
#: builtin/modmgr.lua:243
msgid "Add mod:"
msgstr ""
#: builtin/modmgr.lua:244
#, fuzzy
msgid "Download"
msgstr "Ned"
msgid "Local install"
msgstr ""
#: builtin/modmgr.lua:256
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
msgid "No mod description available"
msgstr ""
#: builtin/modmgr.lua:288
msgid "Mod information:"
msgstr ""
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr ""
#: builtin/modmgr.lua:260 builtin/modmgr.lua:402
#, fuzzy
msgid "Depends:"
msgstr "afhænger af:"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:282
#: builtin/modmgr.lua:312
msgid "Uninstall selected mod"
msgstr ""
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr ""
#: builtin/modmgr.lua:287 src/keycode.cpp:227
#: builtin/modmgr.lua:329 src/keycode.cpp:227
msgid "Accept"
msgstr "Accepter"
#: builtin/modmgr.lua:381
#: builtin/modmgr.lua:423
#, fuzzy
msgid "World:"
msgstr "Vælg verden:"
#: builtin/modmgr.lua:385 builtin/modmgr.lua:387
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
#, fuzzy
msgid "Hide Game"
msgstr "Spil"
#: builtin/modmgr.lua:391 builtin/modmgr.lua:393
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr ""
#: builtin/modmgr.lua:400
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr ""
#: builtin/modmgr.lua:405 src/guiKeyChangeMenu.cpp:187
#: builtin/modmgr.lua:444
#, fuzzy
msgid "Depends:"
msgstr "afhænger af:"
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Gem"
#: builtin/modmgr.lua:422
#: builtin/modmgr.lua:464
#, fuzzy
msgid "Enable MP"
msgstr "Aktivér alle"
#: builtin/modmgr.lua:424
#: builtin/modmgr.lua:466
#, fuzzy
msgid "Disable MP"
msgstr "Deaktivér alle"
#: builtin/modmgr.lua:428 builtin/modmgr.lua:430
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr "aktiveret"
#: builtin/modmgr.lua:436
#: builtin/modmgr.lua:478
#, fuzzy
msgid "Enable all"
msgstr "Aktivér alle"
#: builtin/modmgr.lua:551
#: builtin/modmgr.lua:577
#, fuzzy
msgid "Select Mod File:"
msgstr "Vælg verden:"
#: builtin/modmgr.lua:590
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr ""
#: builtin/modmgr.lua:591
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
msgstr ""
#: builtin/modmgr.lua:612
#: builtin/modmgr.lua:638
#, fuzzy
msgid "Failed to install $1 to $2"
msgstr "Mislykkedes i at initialisere verden"
#: builtin/modmgr.lua:615
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
#: builtin/modmgr.lua:635
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
#: builtin/modmgr.lua:824
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
#: builtin/modmgr.lua:828
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
#: builtin/modmgr.lua:845
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
#: builtin/modmgr.lua:847
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr ""
@ -432,47 +459,51 @@ msgstr ""
msgid "re-Install"
msgstr ""
#: src/client.cpp:2915
#: builtin/modstore.lua:253
msgid "Install"
msgstr ""
#: src/client.cpp:2917
msgid "Item textures..."
msgstr ""
#: src/game.cpp:939
#: src/game.cpp:940
msgid "Loading..."
msgstr ""
#: src/game.cpp:999
#: src/game.cpp:1000
msgid "Creating server...."
msgstr ""
#: src/game.cpp:1015
#: src/game.cpp:1016
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1024
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1121
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:1218
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr ""
#: src/game.cpp:1225
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr ""
#: src/game.cpp:1232
#: src/game.cpp:1233
msgid "Media..."
msgstr ""
#: src/game.cpp:3405
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3435
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
@ -488,12 +519,8 @@ msgstr "Du døde."
msgid "Respawn"
msgstr "Genopstå"
#: src/guiFormSpecMenu.cpp:1569
msgid "Left click: Move all items, Right click: Move single item"
msgstr "Venstre klik: flyt alle enheder. Højre klik: flyt en enkelt enhed"
#: src/guiFormSpecMenu.cpp:1595 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:140
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr "Fortsæt"
@ -513,99 +540,99 @@ msgstr ""
"Tryk på \"hop\" hurtigt to gange for at skifte frem og tilbage mellem flyve-"
"tilstand"
#: src/guiKeyChangeMenu.cpp:290
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr "Tast allerede i brug"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr "Tryk på en tast"
#: src/guiKeyChangeMenu.cpp:400
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr "Fremad"
#: src/guiKeyChangeMenu.cpp:401
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr "Baglæns"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr "Venstre"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr "Højre"
#: src/guiKeyChangeMenu.cpp:404
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr "Brug"
#: src/guiKeyChangeMenu.cpp:405
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr "Hop"
#: src/guiKeyChangeMenu.cpp:406
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr "Snige"
#: src/guiKeyChangeMenu.cpp:407
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr "Slip"
#: src/guiKeyChangeMenu.cpp:408
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr "Beholdning"
#: src/guiKeyChangeMenu.cpp:409
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr "Snak"
#: src/guiKeyChangeMenu.cpp:410
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr "Kommando"
#: src/guiKeyChangeMenu.cpp:411
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr "Konsol"
#: src/guiKeyChangeMenu.cpp:412
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr "Omstil flyvning"
#: src/guiKeyChangeMenu.cpp:413
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr "Omstil hurtig"
#: src/guiKeyChangeMenu.cpp:414
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr "Omstil fylde"
#: src/guiKeyChangeMenu.cpp:415
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr "Afstands vælg"
#: src/guiKeyChangeMenu.cpp:416
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr "Udskriv stakke"
#: src/guiPasswordChange.cpp:107
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr "Gammelt kodeord"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr "Nyt kodeord"
#: src/guiPasswordChange.cpp:142
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr "Bekræft kodeord"
#: src/guiPasswordChange.cpp:160
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr "Skift"
#: src/guiPasswordChange.cpp:169
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr "Kodeordene er ikke ens!"
@ -644,11 +671,11 @@ msgid ""
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr ""
#: src/guiVolumeChange.cpp:122
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr ""
@ -943,77 +970,46 @@ msgstr "PA1"
msgid "Zoom"
msgstr "Zoom"
#: src/main.cpp:1411
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr ""
#: src/main.cpp:1486
#: src/main.cpp:1547
msgid "Main Menu"
msgstr "Hovedmenu"
#: src/main.cpp:1662
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr "Ingen verden valgt og ingen adresse angivet. Ingen opgave at lave."
#: src/main.cpp:1670
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr "Kunne ikke finde eller indlæse spil \""
#: src/main.cpp:1684
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr "Ugyldig spilspecifikationer."
#: src/main.cpp:1729
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr "Forbindelses fejl (udløbelse af tidsfrist?)"
#~ msgid "is required by:"
#~ msgstr "er påkrævet af:"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "Advarsel: nogle modifikationer er endnu ikke konfigureret.\n"
#~ "De vil blive aktiveret som standard når du gemmer konfigurationen. "
#~ msgid "Configuration saved. "
#~ msgstr "Konfiguration gemt. "
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
#~ "Their setting will be removed when you save the configuration. "
#~ msgstr ""
#~ "Advarsel: nogle konfigurerede modifikationer mangler.\n"
#~ "Deres indstillinger vil blive fjernet når du gemmer konfigurationen. "
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Advarsel: konfigurationen er ikke sammenhængende. "
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Kan ikke skabe verden: navnet indeholder ugyldige bogstaver"
#~ msgid "Multiplayer"
#~ msgstr "Flerspiller"
#~ msgid "Advanced"
#~ msgstr "Avanceret"
#~ msgid "Show Public"
#~ msgstr "Vis offentlig"
#~ msgid "Show Favorites"
#~ msgstr "Vis favoritter"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Lad adresse-feltet være tomt for at starte en lokal server."
#~ msgid "Create world"
#~ msgstr "Skab verden"
#~ msgid "Address required."
#~ msgstr "Adresse påkrævet."
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Kan ikke slette verden: ingenting valgt"
#~ msgid "Files to be deleted"
#~ msgstr "Filer som slettes"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Kan ikke skabe verden: ingen spil fundet"
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Kan ikke konfigurere verden: ingenting valgt"
#~ msgid "Failed to delete all world files"
#~ msgstr "Mislykkedes i at slette alle verdenens filer"
#~ msgid "Delete map"
#~ msgstr "Slet mappen"
#~ msgid ""
#~ "Default Controls:\n"
@ -1040,19 +1036,57 @@ msgstr "Forbindelses fejl (udløbelse af tidsfrist?)"
#~ "- ESC: denne menu\n"
#~ "- T: snak\n"
#~ msgid "Delete map"
#~ msgstr "Slet mappen"
#~ msgid "Failed to delete all world files"
#~ msgstr "Mislykkedes i at slette alle verdenens filer"
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
#~ "Their setting will be removed when you save the configuration. "
#~ msgstr ""
#~ "Advarsel: nogle konfigurerede modifikationer mangler.\n"
#~ "Deres indstillinger vil blive fjernet når du gemmer konfigurationen. "
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Kan ikke konfigurere verden: ingenting valgt"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "Advarsel: nogle modifikationer er endnu ikke konfigureret.\n"
#~ "De vil blive aktiveret som standard når du gemmer konfigurationen. "
#~ msgid "Cannot create world: No games found"
#~ msgstr "Kan ikke skabe verden: ingen spil fundet"
#~ msgid "Files to be deleted"
#~ msgstr "Filer som slettes"
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Kan ikke slette verden: ingenting valgt"
#~ msgid "Address required."
#~ msgstr "Adresse påkrævet."
#~ msgid "Create world"
#~ msgstr "Skab verden"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Lad adresse-feltet være tomt for at starte en lokal server."
#~ msgid "Show Favorites"
#~ msgstr "Vis favoritter"
#~ msgid "Show Public"
#~ msgstr "Vis offentlig"
#~ msgid "Advanced"
#~ msgstr "Avanceret"
#~ msgid "Multiplayer"
#~ msgstr "Flerspiller"
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Kan ikke skabe verden: navnet indeholder ugyldige bogstaver"
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Advarsel: konfigurationen er ikke sammenhængende. "
#~ msgid "Configuration saved. "
#~ msgstr "Konfiguration gemt. "
#~ msgid "is required by:"
#~ msgstr "er påkrævet af:"
#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr "Venstre klik: flyt alle enheder. Højre klik: flyt en enkelt enhed"
#, fuzzy
#~ msgid "Download"
#~ msgstr "Ned"

View File

@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-07 22:01+0400\n"
"PO-Revision-Date: 2013-09-06 21:24+0200\n"
"Last-Translator: Block Men <nmuelll@web.de>\n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: 2013-09-09 18:31+0200\n"
"Last-Translator: Pilz Adam <PilzAdam@gmx.de>\n"
"Language-Team: Deutsch <>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
@ -22,12 +22,12 @@ msgstr ""
msgid "Game Name"
msgstr "Spielname"
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:301
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr "Erstellen"
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:302 builtin/modmgr.lua:289
#: builtin/modmgr.lua:406 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Abbrechen"
@ -39,35 +39,35 @@ msgstr "Gamemgr: Kann mod \"$1\" nicht in Spiel \"$2\" kopieren"
msgid "GAMES"
msgstr "SPIELE"
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:859
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
msgid "Games"
msgstr "Spiele"
#: builtin/gamemgr.lua:233
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr "Mods:"
#: builtin/gamemgr.lua:234
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr "Spiel ändern"
#: builtin/gamemgr.lua:237
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr "neues Spiel"
#: builtin/gamemgr.lua:247
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr "SPIEL ÄNDERN"
#: builtin/gamemgr.lua:267
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr "Ausgewählte Mod löschen"
#: builtin/gamemgr.lua:270
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr "<<-- Mod hinzufügen"
#: builtin/mainmenu.lua:159
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr "Ok"
@ -75,223 +75,231 @@ msgstr "Ok"
msgid "World name"
msgstr "Weltname"
#: builtin/mainmenu.lua:298
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr "Weltgenerator"
#: builtin/mainmenu.lua:300
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr "Spiel"
#: builtin/mainmenu.lua:314
#: builtin/mainmenu.lua:319
msgid "Delete World \"$1\"?"
msgstr "Welt \"$1\" löschen?"
#: builtin/mainmenu.lua:315 builtin/modmgr.lua:846
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr "Ja"
#: builtin/mainmenu.lua:316
#: builtin/mainmenu.lua:321
msgid "No"
msgstr "Nein"
#: builtin/mainmenu.lua:384
#: builtin/mainmenu.lua:364
msgid "A world named \"$1\" already exists"
msgstr "Eine Welt namens \"$1\" existiert bereits"
#: builtin/mainmenu.lua:399
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr "Keine Weltname gegeben oder kein Spiel ausgewählt"
#: builtin/mainmenu.lua:852
msgid "Singleplayer"
msgstr "Einzelspieler"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:853
msgid "Client"
msgstr "Client"
#: builtin/mainmenu.lua:854
msgid "Server"
msgstr "Server"
#: builtin/mainmenu.lua:855
msgid "Settings"
msgstr "Einstellungen"
#: builtin/mainmenu.lua:856
msgid "Texture Packs"
msgstr "Texturen Pakete"
#: builtin/mainmenu.lua:863
msgid "Mods"
msgstr "Mods"
#: builtin/mainmenu.lua:865
msgid "Credits"
msgstr "Credits"
#: builtin/mainmenu.lua:885
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr "CLIENT"
#: builtin/mainmenu.lua:886
#: builtin/mainmenu.lua:819
msgid "Favorites:"
msgstr "Favoriten:"
#: builtin/mainmenu.lua:887
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr "Adresse / Port"
#: builtin/mainmenu.lua:888
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr "Name/Passwort"
#: builtin/mainmenu.lua:891
#: builtin/mainmenu.lua:824
msgid "Public Serverlist"
msgstr "Öffentliche Serverliste"
#: builtin/mainmenu.lua:896 builtin/mainmenu.lua:941 builtin/mainmenu.lua:1004
#: builtin/modmgr.lua:271 src/keycode.cpp:229
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr "Entfernen"
#: builtin/mainmenu.lua:900
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr "Verbinden"
#: builtin/mainmenu.lua:942 builtin/mainmenu.lua:1005
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr "Neu"
#: builtin/mainmenu.lua:943 builtin/mainmenu.lua:1006
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr "Konfigurieren"
#: builtin/mainmenu.lua:944
#: builtin/mainmenu.lua:877
msgid "Start Game"
msgstr "Spiel starten"
#: builtin/mainmenu.lua:945 builtin/mainmenu.lua:1008
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr "Welt wählen:"
#: builtin/mainmenu.lua:946
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr "SERVER STARTEN"
#: builtin/mainmenu.lua:947 builtin/mainmenu.lua:1010
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr "Kreativitätsmodus"
#: builtin/mainmenu.lua:949 builtin/mainmenu.lua:1012
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr "Schaden einschalten"
#: builtin/mainmenu.lua:951
#: builtin/mainmenu.lua:884
msgid "Public"
msgstr "Öffentlich"
#: builtin/mainmenu.lua:953
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr "Name"
#: builtin/mainmenu.lua:955
#: builtin/mainmenu.lua:888
msgid "Password"
msgstr "Passwort"
#: builtin/mainmenu.lua:956
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr "Server Port"
#: builtin/mainmenu.lua:966
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr "EINSTELLUNGEN"
#: builtin/mainmenu.lua:967
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr "Schöne Bäume"
#: builtin/mainmenu.lua:969
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr "Besseres Licht"
#: builtin/mainmenu.lua:971
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr "3D Wolken"
#: builtin/mainmenu.lua:973
#: builtin/mainmenu.lua:906
msgid "Opaque Water"
msgstr "Undurchs. Wasser"
#: builtin/mainmenu.lua:976
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr "Mip-Mapping"
#: builtin/mainmenu.lua:978
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr "Anisotroper Filter"
#: builtin/mainmenu.lua:980
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr "Bi-Linearer Filter"
#: builtin/mainmenu.lua:982
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr "Tri-Linearer Filter"
#: builtin/mainmenu.lua:985
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr "Shader"
#: builtin/mainmenu.lua:987
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr "Lade Inventarbilder vor"
#: builtin/mainmenu.lua:989
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr "Aktiviere Partikel"
#: builtin/mainmenu.lua:991
#: builtin/mainmenu.lua:924
msgid "Finite Liquid"
msgstr "Endliches Wasser"
#: builtin/mainmenu.lua:994
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr "Tasten ändern"
#: builtin/mainmenu.lua:1007 src/keycode.cpp:248
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr "Spielen"
#: builtin/mainmenu.lua:1009
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr "EINZELSPIELER"
#: builtin/mainmenu.lua:1022
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr "Texturen Paket auswählen:"
#: builtin/mainmenu.lua:1023
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr "TEXTUREN PAKETE"
#: builtin/mainmenu.lua:1043
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr "Keine Informationen vorhanden"
#: builtin/mainmenu.lua:1071
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr "Core Entwickler"
#: builtin/mainmenu.lua:1082
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr "Aktive Mitwirkende"
#: builtin/mainmenu.lua:1092
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr "Frühere Mitwirkende"
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr "Einzelspieler"
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr "Client"
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr "Server"
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr "Einstellungen"
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr "Texturen Pakete"
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr "Mods"
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr "Credits"
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr "MODS"
@ -300,75 +308,100 @@ msgstr "MODS"
msgid "Installed Mods:"
msgstr "Installierte Mods:"
#: builtin/modmgr.lua:243 builtin/modstore.lua:253
msgid "Install"
msgstr "Installieren"
#: builtin/modmgr.lua:243
#, fuzzy
msgid "Add mod:"
msgstr "<<-- Mod hinzufügen"
#: builtin/modmgr.lua:244
msgid "Download"
msgstr "Runterladen"
#, fuzzy
msgid "Local install"
msgstr "Installieren"
#: builtin/modmgr.lua:256
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
#, fuzzy
msgid "No mod description available"
msgstr "Keine Informationen vorhanden"
#: builtin/modmgr.lua:288
#, fuzzy
msgid "Mod information:"
msgstr "Keine Informationen vorhanden"
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr "Umbenennen"
#: builtin/modmgr.lua:260 builtin/modmgr.lua:402
msgid "Depends:"
msgstr "Abhängig von:"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:282
#: builtin/modmgr.lua:312
#, fuzzy
msgid "Uninstall selected mod"
msgstr "Ausgewählte Mod löschen"
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr "Modpack umbenennen:"
#: builtin/modmgr.lua:287 src/keycode.cpp:227
#: builtin/modmgr.lua:329 src/keycode.cpp:227
msgid "Accept"
msgstr "Annehmen"
#: builtin/modmgr.lua:381
#: builtin/modmgr.lua:423
msgid "World:"
msgstr "Welt:"
#: builtin/modmgr.lua:385 builtin/modmgr.lua:387
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
msgid "Hide Game"
msgstr "Spiel verstecken"
#: builtin/modmgr.lua:391 builtin/modmgr.lua:393
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr "MP mods verstecken"
#: builtin/modmgr.lua:400
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr "Mod:"
#: builtin/modmgr.lua:405 src/guiKeyChangeMenu.cpp:187
#: builtin/modmgr.lua:444
msgid "Depends:"
msgstr "Abhängig von:"
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Speichern"
#: builtin/modmgr.lua:422
#: builtin/modmgr.lua:464
msgid "Enable MP"
msgstr "MP aktivieren"
#: builtin/modmgr.lua:424
#: builtin/modmgr.lua:466
msgid "Disable MP"
msgstr "MP deaktivieren"
#: builtin/modmgr.lua:428 builtin/modmgr.lua:430
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr "Aktiviert"
#: builtin/modmgr.lua:436
#: builtin/modmgr.lua:478
msgid "Enable all"
msgstr "Alle an"
#: builtin/modmgr.lua:551
#: builtin/modmgr.lua:577
msgid "Select Mod File:"
msgstr "Mod Datei auswählen:"
#: builtin/modmgr.lua:590
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr "Mod installieren: Datei: \"$1\""
#: builtin/modmgr.lua:591
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
@ -376,31 +409,31 @@ msgstr ""
"\n"
"Mod installieren: Nicht unterstützter Dateityp \"$1\""
#: builtin/modmgr.lua:612
#: builtin/modmgr.lua:638
msgid "Failed to install $1 to $2"
msgstr "Fehler beim installieren von $1 zu $2"
#: builtin/modmgr.lua:615
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr "Mod installieren: Kann keinen Ordnernamen für Modpack $1 finden"
#: builtin/modmgr.lua:635
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr "Mod installieren: Kann echten Namen für $1 nicht finden"
#: builtin/modmgr.lua:824
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr "Modmgr: Fehler beim löschen von \"$1\""
#: builtin/modmgr.lua:828
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr "Modmgr: Unzulässiger Modpfad \"$1\""
#: builtin/modmgr.lua:845
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr "\"$1\" wirklich löschen?"
#: builtin/modmgr.lua:847
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr "Nein, natürlich nicht!"
@ -416,47 +449,51 @@ msgstr "Bewertung"
msgid "re-Install"
msgstr "erneut installieren"
#: src/client.cpp:2915
#: builtin/modstore.lua:253
msgid "Install"
msgstr "Installieren"
#: src/client.cpp:2917
msgid "Item textures..."
msgstr "Inventarbilder..."
#: src/game.cpp:939
#: src/game.cpp:940
msgid "Loading..."
msgstr "Lädt..."
#: src/game.cpp:999
#: src/game.cpp:1000
msgid "Creating server...."
msgstr "Erstelle Server..."
#: src/game.cpp:1015
#: src/game.cpp:1016
msgid "Creating client..."
msgstr "Erstelle Client..."
#: src/game.cpp:1024
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr "Löse Adresse auf..."
#: src/game.cpp:1121
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr "Verbinde zum Server..."
#: src/game.cpp:1218
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr "Item Definitionen..."
#: src/game.cpp:1225
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr "Node Definitionen..."
#: src/game.cpp:1232
#: src/game.cpp:1233
msgid "Media..."
msgstr "Medien..."
#: src/game.cpp:3405
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr "Herunterfahren..."
#: src/game.cpp:3435
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
@ -472,12 +509,8 @@ msgstr "Sie sind gestorben."
msgid "Respawn"
msgstr "Wiederbeleben"
#: src/guiFormSpecMenu.cpp:1569
msgid "Left click: Move all items, Right click: Move single item"
msgstr "Linksklick: Alle Items bewegen, Rechtsklick: Einzelnes Item bewegen"
#: src/guiFormSpecMenu.cpp:1595 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:140
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr "Fortsetzen"
@ -493,99 +526,99 @@ msgstr "\"Benutzen\" = herunterklettern"
msgid "Double tap \"jump\" to toggle fly"
msgstr "Doppelt \"springen\" zum fliegen"
#: src/guiKeyChangeMenu.cpp:290
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr "Taste bereits in Benutzung"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr "Taste drücken"
#: src/guiKeyChangeMenu.cpp:400
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr "Vorwärts"
#: src/guiKeyChangeMenu.cpp:401
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr "Rückwärts"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr "Links"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr "Rechts"
#: src/guiKeyChangeMenu.cpp:404
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr "Benutzen"
#: src/guiKeyChangeMenu.cpp:405
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr "Springen"
#: src/guiKeyChangeMenu.cpp:406
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr "Schleichen"
#: src/guiKeyChangeMenu.cpp:407
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr "Wegwerfen"
#: src/guiKeyChangeMenu.cpp:408
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr "Inventar"
#: src/guiKeyChangeMenu.cpp:409
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr "Chat"
#: src/guiKeyChangeMenu.cpp:410
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr "Befehl"
#: src/guiKeyChangeMenu.cpp:411
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr "Konsole"
#: src/guiKeyChangeMenu.cpp:412
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr "Fliegen umsch."
#: src/guiKeyChangeMenu.cpp:413
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr "Speed umsch."
#: src/guiKeyChangeMenu.cpp:414
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr "Noclip umsch."
#: src/guiKeyChangeMenu.cpp:415
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr "Entfernung wählen"
#: src/guiKeyChangeMenu.cpp:416
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr "Stack ausgeben"
#: src/guiPasswordChange.cpp:107
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr "Altes Passwort"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr "Neues Passwort"
#: src/guiPasswordChange.cpp:142
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr "Passwort wiederholen"
#: src/guiPasswordChange.cpp:160
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr "Ändern"
#: src/guiPasswordChange.cpp:169
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr "Passwörter passen nicht zusammen!"
@ -635,11 +668,11 @@ msgstr ""
"- Mausrad: Item auswählen\n"
"- T: Chat\n"
#: src/guiVolumeChange.cpp:108
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr "Sound Lautstärke: "
#: src/guiVolumeChange.cpp:122
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr "Zurück"
@ -931,77 +964,50 @@ msgstr "PA1"
msgid "Zoom"
msgstr "Zoom"
#: src/main.cpp:1411
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr ""
msgstr "no"
#: src/main.cpp:1486
#: src/main.cpp:1547
msgid "Main Menu"
msgstr "Hauptmenü"
#: src/main.cpp:1662
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr "Keine Welt ausgewählt und keine Adresse angegeben. Nichts zu tun."
#: src/main.cpp:1670
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr "Kann Spiel nicht finden/laden \""
#: src/main.cpp:1684
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr "Invalide Spielspezif."
#: src/main.cpp:1729
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr "Verbindungsfehler (Zeitüberschreitung?)"
#~ msgid "is required by:"
#~ msgstr "wird benötigt von:"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "Warnung: Einige Mods sind noch nicht konfiguriert.\n"
#~ "Sie werden aktiviert wenn die Konfiguration gespeichert wird. "
#~ msgid "Configuration saved. "
#~ msgstr "Konfiguration gespeichert. "
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
#~ "Their setting will be removed when you save the configuration. "
#~ msgstr ""
#~ "Warnung: Einige konfigurierte Mods fehlen.\n"
#~ "Mod Einstellungen werden gelöscht wenn die Konfiguration gespeichert "
#~ "wird. "
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Warnung: Konfiguration nicht konsistent. "
#~ msgid "KEYBINDINGS"
#~ msgstr "TASTEN EINST."
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Kann Welt nicht erstellen: Name enthält ungültige Zeichen"
#~ msgid "Multiplayer"
#~ msgstr "Mehrspieler"
#~ msgid "Advanced"
#~ msgstr "Erweitert"
#~ msgid "Show Public"
#~ msgstr "Zeige öffentliche"
#~ msgid "Show Favorites"
#~ msgstr "Zeige Favoriten"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Lasse die Adresse frei um einen eigenen Server zu starten."
#~ msgid "Create world"
#~ msgstr "Welt erstellen"
#~ msgid "Address required."
#~ msgstr "Adresse benötigt."
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Kann Welt nicht löchen: Nichts ausgewählt"
#~ msgid "Files to be deleted"
#~ msgstr "Zu löschende Dateien"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Kann Welt nicht erstellen: Keine Spiele gefunden"
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Kann Welt nicht konfigurieren: Nichts ausgewählt"
#~ msgid "Failed to delete all world files"
#~ msgstr "Es konnten nicht alle Welt Dateien gelöscht werden"
#~ msgid "Delete map"
#~ msgstr "Karte löschen"
#~ msgid ""
#~ "Default Controls:\n"
@ -1027,23 +1033,56 @@ msgstr "Verbindungsfehler (Zeitüberschreitung?)"
#~ "- I: Inventar\n"
#~ "- T: Chat\n"
#~ msgid "Delete map"
#~ msgstr "Karte löschen"
#~ msgid "Failed to delete all world files"
#~ msgstr "Es konnten nicht alle Welt Dateien gelöscht werden"
#~ msgid "KEYBINDINGS"
#~ msgstr "TASTEN EINST."
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Kann Welt nicht konfigurieren: Nichts ausgewählt"
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
#~ "Their setting will be removed when you save the configuration. "
#~ msgstr ""
#~ "Warnung: Einige konfigurierte Mods fehlen.\n"
#~ "Mod Einstellungen werden gelöscht wenn die Konfiguration gespeichert "
#~ "wird. "
#~ msgid "Cannot create world: No games found"
#~ msgstr "Kann Welt nicht erstellen: Keine Spiele gefunden"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "Warnung: Einige Mods sind noch nicht konfiguriert.\n"
#~ "Sie werden aktiviert wenn die Konfiguration gespeichert wird. "
#~ msgid "Files to be deleted"
#~ msgstr "Zu löschende Dateien"
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Kann Welt nicht löchen: Nichts ausgewählt"
#~ msgid "Address required."
#~ msgstr "Adresse benötigt."
#~ msgid "Create world"
#~ msgstr "Welt erstellen"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Lasse die Adresse frei um einen eigenen Server zu starten."
#~ msgid "Show Favorites"
#~ msgstr "Zeige Favoriten"
#~ msgid "Show Public"
#~ msgstr "Zeige öffentliche"
#~ msgid "Advanced"
#~ msgstr "Erweitert"
#~ msgid "Multiplayer"
#~ msgstr "Mehrspieler"
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Kann Welt nicht erstellen: Name enthält ungültige Zeichen"
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Warnung: Konfiguration nicht konsistent. "
#~ msgid "Configuration saved. "
#~ msgstr "Konfiguration gespeichert. "
#~ msgid "is required by:"
#~ msgstr "wird benötigt von:"
#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr "Linksklick: Alle Items bewegen, Rechtsklick: Einzelnes Item bewegen"
#~ msgid "Download"
#~ msgstr "Runterladen"

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-07 22:01+0400\n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: 2013-06-21 15:47+0200\n"
"Last-Translator: sfan5 <sfan5@live.de>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -23,12 +23,12 @@ msgstr ""
msgid "Game Name"
msgstr "Mäng"
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:301
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr "Loo"
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:302 builtin/modmgr.lua:289
#: builtin/modmgr.lua:406 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Tühista"
@ -40,36 +40,36 @@ msgstr ""
msgid "GAMES"
msgstr ""
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:859
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
#, fuzzy
msgid "Games"
msgstr "Mäng"
#: builtin/gamemgr.lua:233
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr ""
#: builtin/gamemgr.lua:234
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr ""
#: builtin/gamemgr.lua:237
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr ""
#: builtin/gamemgr.lua:247
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr ""
#: builtin/gamemgr.lua:267
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr ""
#: builtin/gamemgr.lua:270
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr ""
#: builtin/mainmenu.lua:159
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr ""
@ -77,230 +77,238 @@ msgstr ""
msgid "World name"
msgstr "Maailma nimi"
#: builtin/mainmenu.lua:298
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr ""
#: builtin/mainmenu.lua:300
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr "Mäng"
#: builtin/mainmenu.lua:314
#: builtin/mainmenu.lua:319
#, fuzzy
msgid "Delete World \"$1\"?"
msgstr "Kustuta maailm"
#: builtin/mainmenu.lua:315 builtin/modmgr.lua:846
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr "Jah"
#: builtin/mainmenu.lua:316
#: builtin/mainmenu.lua:321
msgid "No"
msgstr "Ei"
#: builtin/mainmenu.lua:384
#: builtin/mainmenu.lua:364
#, fuzzy
msgid "A world named \"$1\" already exists"
msgstr "Maailma loomine ebaõnnestus: Samanimeline maailm on juba olemas"
#: builtin/mainmenu.lua:399
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr ""
#: builtin/mainmenu.lua:852
msgid "Singleplayer"
msgstr "Üksikmäng"
#: builtin/mainmenu.lua:853
msgid "Client"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:854
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:855
msgid "Settings"
msgstr "Sätted"
#: builtin/mainmenu.lua:856
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:863
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:865
msgid "Credits"
msgstr "Tänuavaldused"
#: builtin/mainmenu.lua:885
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr ""
#: builtin/mainmenu.lua:886
#: builtin/mainmenu.lua:819
msgid "Favorites:"
msgstr "Lemmikud:"
#: builtin/mainmenu.lua:887
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr "IP/Port"
#: builtin/mainmenu.lua:888
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr "Nimi/Parool"
#: builtin/mainmenu.lua:891
#: builtin/mainmenu.lua:824
#, fuzzy
msgid "Public Serverlist"
msgstr "Avatud serverite nimekiri:"
#: builtin/mainmenu.lua:896 builtin/mainmenu.lua:941 builtin/mainmenu.lua:1004
#: builtin/modmgr.lua:271 src/keycode.cpp:229
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr "Kustuta"
#: builtin/mainmenu.lua:900
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr "Liitu"
#: builtin/mainmenu.lua:942 builtin/mainmenu.lua:1005
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr "Uus"
#: builtin/mainmenu.lua:943 builtin/mainmenu.lua:1006
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr "Konfigureeri"
#: builtin/mainmenu.lua:944
#: builtin/mainmenu.lua:877
#, fuzzy
msgid "Start Game"
msgstr "Alusta mängu / Liitu"
#: builtin/mainmenu.lua:945 builtin/mainmenu.lua:1008
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr "Vali maailm:"
#: builtin/mainmenu.lua:946
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr ""
#: builtin/mainmenu.lua:947 builtin/mainmenu.lua:1010
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr "Kujunduslik mängumood"
#: builtin/mainmenu.lua:949 builtin/mainmenu.lua:1012
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr "Lülita valu sisse"
#: builtin/mainmenu.lua:951
#: builtin/mainmenu.lua:884
msgid "Public"
msgstr "Avalik"
#: builtin/mainmenu.lua:953
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr ""
#: builtin/mainmenu.lua:955
#: builtin/mainmenu.lua:888
#, fuzzy
msgid "Password"
msgstr "Vana parool"
#: builtin/mainmenu.lua:956
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr ""
#: builtin/mainmenu.lua:966
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr ""
#: builtin/mainmenu.lua:967
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr "Uhked puud"
#: builtin/mainmenu.lua:969
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr "Ilus valgustus"
#: builtin/mainmenu.lua:971
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr "3D pilved"
#: builtin/mainmenu.lua:973
#: builtin/mainmenu.lua:906
#, fuzzy
msgid "Opaque Water"
msgstr "Läbipaistmatu vesi"
#: builtin/mainmenu.lua:976
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr "Väga hea kvaliteet"
#: builtin/mainmenu.lua:978
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr "Anisotroopne Filtreerimine"
#: builtin/mainmenu.lua:980
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr "Bi-lineaarsed Filtreerimine"
#: builtin/mainmenu.lua:982
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr "Tri-Linear Filtreerimine"
#: builtin/mainmenu.lua:985
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr "Varjutajad"
#: builtin/mainmenu.lua:987
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr "Lae asjade visuaale"
#: builtin/mainmenu.lua:989
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr "Lülita osakesed sisse"
#: builtin/mainmenu.lua:991
#: builtin/mainmenu.lua:924
#, fuzzy
msgid "Finite Liquid"
msgstr "Löppev vedelik"
#: builtin/mainmenu.lua:994
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr "Vaheta nuppe"
#: builtin/mainmenu.lua:1007 src/keycode.cpp:248
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr "Mängi"
#: builtin/mainmenu.lua:1009
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr ""
#: builtin/mainmenu.lua:1022
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr ""
#: builtin/mainmenu.lua:1023
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr ""
#: builtin/mainmenu.lua:1043
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr ""
#: builtin/mainmenu.lua:1071
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr ""
#: builtin/mainmenu.lua:1082
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr ""
#: builtin/mainmenu.lua:1092
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr ""
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr "Üksikmäng"
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr ""
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr "Sätted"
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr "Tänuavaldused"
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr ""
@ -309,114 +317,133 @@ msgstr ""
msgid "Installed Mods:"
msgstr ""
#: builtin/modmgr.lua:243 builtin/modstore.lua:253
msgid "Install"
#: builtin/modmgr.lua:243
msgid "Add mod:"
msgstr ""
#: builtin/modmgr.lua:244
#, fuzzy
msgid "Download"
msgstr "Alla"
msgid "Local install"
msgstr ""
#: builtin/modmgr.lua:256
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
msgid "No mod description available"
msgstr ""
#: builtin/modmgr.lua:288
msgid "Mod information:"
msgstr ""
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr ""
#: builtin/modmgr.lua:260 builtin/modmgr.lua:402
#, fuzzy
msgid "Depends:"
msgstr "Vajab:"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:282
#: builtin/modmgr.lua:312
msgid "Uninstall selected mod"
msgstr ""
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr ""
#: builtin/modmgr.lua:287 src/keycode.cpp:227
#: builtin/modmgr.lua:329 src/keycode.cpp:227
msgid "Accept"
msgstr "Nõustu"
#: builtin/modmgr.lua:381
#: builtin/modmgr.lua:423
#, fuzzy
msgid "World:"
msgstr "Vali maailm:"
#: builtin/modmgr.lua:385 builtin/modmgr.lua:387
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
#, fuzzy
msgid "Hide Game"
msgstr "Mäng"
#: builtin/modmgr.lua:391 builtin/modmgr.lua:393
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr ""
#: builtin/modmgr.lua:400
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr ""
#: builtin/modmgr.lua:405 src/guiKeyChangeMenu.cpp:187
#: builtin/modmgr.lua:444
#, fuzzy
msgid "Depends:"
msgstr "Vajab:"
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Salvesta"
#: builtin/modmgr.lua:422
#: builtin/modmgr.lua:464
#, fuzzy
msgid "Enable MP"
msgstr "Lülita kõik sisse"
#: builtin/modmgr.lua:424
#: builtin/modmgr.lua:466
#, fuzzy
msgid "Disable MP"
msgstr "Lülita kõik välja"
#: builtin/modmgr.lua:428 builtin/modmgr.lua:430
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr "Sisse lülitatud"
#: builtin/modmgr.lua:436
#: builtin/modmgr.lua:478
#, fuzzy
msgid "Enable all"
msgstr "Lülita kõik sisse"
#: builtin/modmgr.lua:551
#: builtin/modmgr.lua:577
#, fuzzy
msgid "Select Mod File:"
msgstr "Vali maailm:"
#: builtin/modmgr.lua:590
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr ""
#: builtin/modmgr.lua:591
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
msgstr ""
#: builtin/modmgr.lua:612
#: builtin/modmgr.lua:638
#, fuzzy
msgid "Failed to install $1 to $2"
msgstr "Maailma initsialiseerimine ebaõnnestus"
#: builtin/modmgr.lua:615
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
#: builtin/modmgr.lua:635
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
#: builtin/modmgr.lua:824
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
#: builtin/modmgr.lua:828
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
#: builtin/modmgr.lua:845
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
#: builtin/modmgr.lua:847
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr ""
@ -432,47 +459,51 @@ msgstr ""
msgid "re-Install"
msgstr ""
#: src/client.cpp:2915
#: builtin/modstore.lua:253
msgid "Install"
msgstr ""
#: src/client.cpp:2917
msgid "Item textures..."
msgstr ""
#: src/game.cpp:939
#: src/game.cpp:940
msgid "Loading..."
msgstr ""
#: src/game.cpp:999
#: src/game.cpp:1000
msgid "Creating server...."
msgstr ""
#: src/game.cpp:1015
#: src/game.cpp:1016
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1024
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1121
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:1218
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr ""
#: src/game.cpp:1225
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr ""
#: src/game.cpp:1232
#: src/game.cpp:1233
msgid "Media..."
msgstr ""
#: src/game.cpp:3405
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3435
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
@ -488,13 +519,8 @@ msgstr "Sa surid."
msgid "Respawn"
msgstr "Ärka ellu"
#: src/guiFormSpecMenu.cpp:1569
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
"Vasak hiireklõps: Liiguta kõiki asju, Parem hiireklõps: Liiguta üksikut asja"
#: src/guiFormSpecMenu.cpp:1595 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:140
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr "Jätka"
@ -512,99 +538,99 @@ msgstr "\"Tegevus\" = Roni alla"
msgid "Double tap \"jump\" to toggle fly"
msgstr "Topeltklõpsa \"Hüppamist\" et sisse lülitada lendamine"
#: src/guiKeyChangeMenu.cpp:290
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr "Nupp juba kasutuses"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr "Vajuta nuppu"
#: src/guiKeyChangeMenu.cpp:400
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr "Edasi"
#: src/guiKeyChangeMenu.cpp:401
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr "Tagasi"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr "Vasakule"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr "Paremale"
#: src/guiKeyChangeMenu.cpp:404
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr "Tegevus"
#: src/guiKeyChangeMenu.cpp:405
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr "Hüppamine"
#: src/guiKeyChangeMenu.cpp:406
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr "Hiilimine"
#: src/guiKeyChangeMenu.cpp:407
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr "Viska maha"
#: src/guiKeyChangeMenu.cpp:408
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr "Seljakott"
#: src/guiKeyChangeMenu.cpp:409
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr "Jututuba"
#: src/guiKeyChangeMenu.cpp:410
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr "Käsklus"
#: src/guiKeyChangeMenu.cpp:411
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr "Konsool"
#: src/guiKeyChangeMenu.cpp:412
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr "Lülita lendamine sisse"
#: src/guiKeyChangeMenu.cpp:413
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr "Lülita kiirus sisse"
#: src/guiKeyChangeMenu.cpp:414
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr "Lülita läbi seinte minek sisse"
#: src/guiKeyChangeMenu.cpp:415
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr "Kauguse valik"
#: src/guiKeyChangeMenu.cpp:416
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr "Prindi kogused"
#: src/guiPasswordChange.cpp:107
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr "Vana parool"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr "Uus parool"
#: src/guiPasswordChange.cpp:142
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr "Kinnita parooli"
#: src/guiPasswordChange.cpp:160
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr "Muuda"
#: src/guiPasswordChange.cpp:169
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr "Paroolid ei ole samad!"
@ -643,11 +669,11 @@ msgid ""
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr "Hääle Volüüm: "
#: src/guiVolumeChange.cpp:122
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr "Välju"
@ -939,77 +965,43 @@ msgstr "PA1"
msgid "Zoom"
msgstr "Suumi"
#: src/main.cpp:1411
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr ""
#: src/main.cpp:1486
#: src/main.cpp:1547
msgid "Main Menu"
msgstr "Menüü"
#: src/main.cpp:1662
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr "Pole valitud ei maailma ega IP aadressi. Pole midagi teha."
#: src/main.cpp:1670
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr "Ei leia ega suuda jätkata mängu \""
#: src/main.cpp:1684
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr "Vale mängu ID."
#: src/main.cpp:1729
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr "Ühenduse viga (Aeg otsas?)"
#~ msgid "is required by:"
#~ msgstr "Seda vajavad:"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "Hoiatus: Mõned modifikatsioonid pole sätitud veel.\n"
#~ "Need lülitatakse sisse kohe pärast sätete salvestamist."
#~ msgid "Configuration saved. "
#~ msgstr "Konfiguratsioon salvestatud. "
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Hoiatus: Konfiguratsioon pole kindel."
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Maailma loomine ebaõnnestus: Nimes esineb keelatud tähti"
#~ msgid "Multiplayer"
#~ msgstr "Mitmikmäng"
#~ msgid "Advanced"
#~ msgstr "Arenenud sätted"
#~ msgid "Show Public"
#~ msgstr "Näita avalikke"
#~ msgid "Show Favorites"
#~ msgstr "Näita lemmikuid"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Jäta IP lahter tühjaks et alustada LAN serverit."
#~ msgid "Create world"
#~ msgstr "Loo maailm"
#~ msgid "Address required."
#~ msgstr "IP on vajalkik."
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Maailma kustutamine ebaõnnestus: Maailma pole valitud"
#~ msgid "Files to be deleted"
#~ msgstr "Failid mida kustutada"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Maailma loomine ebaõnnestus: Mängu ei leitud"
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Maailma konfigureerimine ebaõnnestus: Pole midagi valitud"
#~ msgid "Failed to delete all world files"
#~ msgstr "Kõigi maailma failide kustutamine ebaõnnestus"
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
#~ "Their setting will be removed when you save the configuration. "
#~ msgstr ""
#~ "Hoiatus: Mõned konfigureeritud modifikatsioonid on kaotsi läinud.\n"
#~ "Nende sätted kustutatakse kui salvestada konfiguratsioon."
#~ msgid ""
#~ "Default Controls:\n"
@ -1036,16 +1028,59 @@ msgstr "Ühenduse viga (Aeg otsas?)"
#~ "- ESC: Menüü\n"
#~ "- T: Jututupa\n"
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
#~ "Their setting will be removed when you save the configuration. "
#~ msgstr ""
#~ "Hoiatus: Mõned konfigureeritud modifikatsioonid on kaotsi läinud.\n"
#~ "Nende sätted kustutatakse kui salvestada konfiguratsioon."
#~ msgid "Failed to delete all world files"
#~ msgstr "Kõigi maailma failide kustutamine ebaõnnestus"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Maailma konfigureerimine ebaõnnestus: Pole midagi valitud"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Maailma loomine ebaõnnestus: Mängu ei leitud"
#~ msgid "Files to be deleted"
#~ msgstr "Failid mida kustutada"
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Maailma kustutamine ebaõnnestus: Maailma pole valitud"
#~ msgid "Address required."
#~ msgstr "IP on vajalkik."
#~ msgid "Create world"
#~ msgstr "Loo maailm"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Jäta IP lahter tühjaks et alustada LAN serverit."
#~ msgid "Show Favorites"
#~ msgstr "Näita lemmikuid"
#~ msgid "Show Public"
#~ msgstr "Näita avalikke"
#~ msgid "Advanced"
#~ msgstr "Arenenud sätted"
#~ msgid "Multiplayer"
#~ msgstr "Mitmikmäng"
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Maailma loomine ebaõnnestus: Nimes esineb keelatud tähti"
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Hoiatus: Konfiguratsioon pole kindel."
#~ msgid "Configuration saved. "
#~ msgstr "Konfiguratsioon salvestatud. "
#~ msgid "is required by:"
#~ msgstr "Seda vajavad:"
#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr ""
#~ "Hoiatus: Mõned modifikatsioonid pole sätitud veel.\n"
#~ "Need lülitatakse sisse kohe pärast sätete salvestamist."
#~ "Vasak hiireklõps: Liiguta kõiki asju, Parem hiireklõps: Liiguta üksikut "
#~ "asja"
#, fuzzy
#~ msgid "Download"
#~ msgstr "Alla"

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-07 22:01+0400\n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: 2013-08-11 03:05+0200\n"
"Last-Translator: Sasikaa Lacikaa <sasikaa@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -23,12 +23,12 @@ msgstr ""
msgid "Game Name"
msgstr "Játék"
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:301
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr "Létrehozás"
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:302 builtin/modmgr.lua:289
#: builtin/modmgr.lua:406 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Mégse"
@ -40,36 +40,36 @@ msgstr ""
msgid "GAMES"
msgstr ""
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:859
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
#, fuzzy
msgid "Games"
msgstr "Játék"
#: builtin/gamemgr.lua:233
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr ""
#: builtin/gamemgr.lua:234
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr ""
#: builtin/gamemgr.lua:237
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr ""
#: builtin/gamemgr.lua:247
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr ""
#: builtin/gamemgr.lua:267
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr ""
#: builtin/gamemgr.lua:270
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr ""
#: builtin/mainmenu.lua:159
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr ""
@ -77,230 +77,238 @@ msgstr ""
msgid "World name"
msgstr "Világ neve"
#: builtin/mainmenu.lua:298
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr ""
#: builtin/mainmenu.lua:300
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr "Játék"
#: builtin/mainmenu.lua:314
#: builtin/mainmenu.lua:319
#, fuzzy
msgid "Delete World \"$1\"?"
msgstr "Világ törlése"
#: builtin/mainmenu.lua:315 builtin/modmgr.lua:846
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr "Igen"
#: builtin/mainmenu.lua:316
#: builtin/mainmenu.lua:321
msgid "No"
msgstr "Nem"
#: builtin/mainmenu.lua:384
#: builtin/mainmenu.lua:364
#, fuzzy
msgid "A world named \"$1\" already exists"
msgstr "Nem sikerült a viág létrehozása: A világ neve már használva van"
#: builtin/mainmenu.lua:399
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr ""
#: builtin/mainmenu.lua:852
msgid "Singleplayer"
msgstr "Egyjátékos mód"
#: builtin/mainmenu.lua:853
msgid "Client"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:854
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:855
msgid "Settings"
msgstr "Beállítások"
#: builtin/mainmenu.lua:856
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:863
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:865
msgid "Credits"
msgstr "Stáblista"
#: builtin/mainmenu.lua:885
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr ""
#: builtin/mainmenu.lua:886
#: builtin/mainmenu.lua:819
msgid "Favorites:"
msgstr "Kedvencek:"
#: builtin/mainmenu.lua:887
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr "Cím/Port"
#: builtin/mainmenu.lua:888
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr "Név/jelszó"
#: builtin/mainmenu.lua:891
#: builtin/mainmenu.lua:824
#, fuzzy
msgid "Public Serverlist"
msgstr "Publikus Szerver Lista:"
#: builtin/mainmenu.lua:896 builtin/mainmenu.lua:941 builtin/mainmenu.lua:1004
#: builtin/modmgr.lua:271 src/keycode.cpp:229
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr "Törlés"
#: builtin/mainmenu.lua:900
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr "Csatlakozás"
#: builtin/mainmenu.lua:942 builtin/mainmenu.lua:1005
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr "Új"
#: builtin/mainmenu.lua:943 builtin/mainmenu.lua:1006
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr "Beállítás"
#: builtin/mainmenu.lua:944
#: builtin/mainmenu.lua:877
#, fuzzy
msgid "Start Game"
msgstr "Játék indítása / Csatlakozás"
#: builtin/mainmenu.lua:945 builtin/mainmenu.lua:1008
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr "Világ kiválasztása:"
#: builtin/mainmenu.lua:946
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr ""
#: builtin/mainmenu.lua:947 builtin/mainmenu.lua:1010
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr "Kreatív mód"
#: builtin/mainmenu.lua:949 builtin/mainmenu.lua:1012
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr "Sérülés engedélyezése"
#: builtin/mainmenu.lua:951
#: builtin/mainmenu.lua:884
msgid "Public"
msgstr "Publikus"
#: builtin/mainmenu.lua:953
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr ""
#: builtin/mainmenu.lua:955
#: builtin/mainmenu.lua:888
#, fuzzy
msgid "Password"
msgstr "Régi jelszó"
#: builtin/mainmenu.lua:956
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr ""
#: builtin/mainmenu.lua:966
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr ""
#: builtin/mainmenu.lua:967
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr "Szép fák"
#: builtin/mainmenu.lua:969
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr "Simított megvilágítás"
#: builtin/mainmenu.lua:971
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr "3D Felhők"
#: builtin/mainmenu.lua:973
#: builtin/mainmenu.lua:906
#, fuzzy
msgid "Opaque Water"
msgstr "Átlátszó víz"
#: builtin/mainmenu.lua:976
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr "Mip-mapping"
#: builtin/mainmenu.lua:978
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr "Anzisztrópikus szűrés"
#: builtin/mainmenu.lua:980
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr "Bi-Linear Szűrés"
#: builtin/mainmenu.lua:982
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr "Tri-Linear Szűrés"
#: builtin/mainmenu.lua:985
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr "Shaderek"
#: builtin/mainmenu.lua:987
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr "Előretöltött tárgy láthatóság"
#: builtin/mainmenu.lua:989
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr "Részecskék engedélyezése"
#: builtin/mainmenu.lua:991
#: builtin/mainmenu.lua:924
#, fuzzy
msgid "Finite Liquid"
msgstr "Végtelen folyadék"
#: builtin/mainmenu.lua:994
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr "Gomb választása"
#: builtin/mainmenu.lua:1007 src/keycode.cpp:248
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr "Játék"
#: builtin/mainmenu.lua:1009
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr ""
#: builtin/mainmenu.lua:1022
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr ""
#: builtin/mainmenu.lua:1023
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr ""
#: builtin/mainmenu.lua:1043
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr ""
#: builtin/mainmenu.lua:1071
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr ""
#: builtin/mainmenu.lua:1082
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr ""
#: builtin/mainmenu.lua:1092
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr ""
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr "Egyjátékos mód"
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr ""
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr "Beállítások"
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr "Stáblista"
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr ""
@ -309,114 +317,133 @@ msgstr ""
msgid "Installed Mods:"
msgstr ""
#: builtin/modmgr.lua:243 builtin/modstore.lua:253
msgid "Install"
#: builtin/modmgr.lua:243
msgid "Add mod:"
msgstr ""
#: builtin/modmgr.lua:244
#, fuzzy
msgid "Download"
msgstr "Le"
msgid "Local install"
msgstr ""
#: builtin/modmgr.lua:256
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
msgid "No mod description available"
msgstr ""
#: builtin/modmgr.lua:288
msgid "Mod information:"
msgstr ""
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr ""
#: builtin/modmgr.lua:260 builtin/modmgr.lua:402
#, fuzzy
msgid "Depends:"
msgstr "Attól függ:"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:282
#: builtin/modmgr.lua:312
msgid "Uninstall selected mod"
msgstr ""
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr ""
#: builtin/modmgr.lua:287 src/keycode.cpp:227
#: builtin/modmgr.lua:329 src/keycode.cpp:227
msgid "Accept"
msgstr "Elfogadva"
#: builtin/modmgr.lua:381
#: builtin/modmgr.lua:423
#, fuzzy
msgid "World:"
msgstr "Világ kiválasztása:"
#: builtin/modmgr.lua:385 builtin/modmgr.lua:387
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
#, fuzzy
msgid "Hide Game"
msgstr "Játék"
#: builtin/modmgr.lua:391 builtin/modmgr.lua:393
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr ""
#: builtin/modmgr.lua:400
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr ""
#: builtin/modmgr.lua:405 src/guiKeyChangeMenu.cpp:187
#: builtin/modmgr.lua:444
#, fuzzy
msgid "Depends:"
msgstr "Attól függ:"
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Mentés"
#: builtin/modmgr.lua:422
#: builtin/modmgr.lua:464
#, fuzzy
msgid "Enable MP"
msgstr "Összes engedélyezve"
#: builtin/modmgr.lua:424
#: builtin/modmgr.lua:466
#, fuzzy
msgid "Disable MP"
msgstr "Összes tiltva"
#: builtin/modmgr.lua:428 builtin/modmgr.lua:430
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr "Engedélyezve"
#: builtin/modmgr.lua:436
#: builtin/modmgr.lua:478
#, fuzzy
msgid "Enable all"
msgstr "Összes engedélyezve"
#: builtin/modmgr.lua:551
#: builtin/modmgr.lua:577
#, fuzzy
msgid "Select Mod File:"
msgstr "Világ kiválasztása:"
#: builtin/modmgr.lua:590
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr ""
#: builtin/modmgr.lua:591
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
msgstr ""
#: builtin/modmgr.lua:612
#: builtin/modmgr.lua:638
#, fuzzy
msgid "Failed to install $1 to $2"
msgstr "A világ betöltése közben hiba"
#: builtin/modmgr.lua:615
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
#: builtin/modmgr.lua:635
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
#: builtin/modmgr.lua:824
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
#: builtin/modmgr.lua:828
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
#: builtin/modmgr.lua:845
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
#: builtin/modmgr.lua:847
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr ""
@ -432,47 +459,51 @@ msgstr ""
msgid "re-Install"
msgstr ""
#: src/client.cpp:2915
#: builtin/modstore.lua:253
msgid "Install"
msgstr ""
#: src/client.cpp:2917
msgid "Item textures..."
msgstr "Tárgy textúrák..."
#: src/game.cpp:939
#: src/game.cpp:940
msgid "Loading..."
msgstr "Betöltés..."
#: src/game.cpp:999
#: src/game.cpp:1000
msgid "Creating server...."
msgstr "Szerver létrehozása..."
#: src/game.cpp:1015
#: src/game.cpp:1016
msgid "Creating client..."
msgstr "Kliens létrehozása..."
#: src/game.cpp:1024
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr "Cím létrehozása..."
#: src/game.cpp:1121
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr "Csatlakozás a szerverhez..."
#: src/game.cpp:1218
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr ""
#: src/game.cpp:1225
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr ""
#: src/game.cpp:1232
#: src/game.cpp:1233
msgid "Media..."
msgstr ""
#: src/game.cpp:3405
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr "Dolog leállítása..."
#: src/game.cpp:3435
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
@ -486,12 +517,8 @@ msgstr "Meghaltál."
msgid "Respawn"
msgstr "Újra éledés"
#: src/guiFormSpecMenu.cpp:1569
msgid "Left click: Move all items, Right click: Move single item"
msgstr "Ball gomb: Tárgyak mozgatása, Jobb gomb: egy tárgyat mozgat"
#: src/guiFormSpecMenu.cpp:1595 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:140
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr "Elfogadva"
@ -509,99 +536,99 @@ msgstr "\"Használat\" = Lemászás"
msgid "Double tap \"jump\" to toggle fly"
msgstr "Duplán nyomd meg az \"ugrás\" gombot ahhoz hogy repülj"
#: src/guiKeyChangeMenu.cpp:290
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr "A gomb már használatban van"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr "Nyomj meg egy gombot"
#: src/guiKeyChangeMenu.cpp:400
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr "Vissza"
#: src/guiKeyChangeMenu.cpp:401
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr "Előre"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr "Bal"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr "Jobb"
#: src/guiKeyChangeMenu.cpp:404
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr "Használni"
#: src/guiKeyChangeMenu.cpp:405
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr "Ugrás"
#: src/guiKeyChangeMenu.cpp:406
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr "Lopakodás"
#: src/guiKeyChangeMenu.cpp:407
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr "Dobás"
#: src/guiKeyChangeMenu.cpp:408
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr "Invertory"
#: src/guiKeyChangeMenu.cpp:409
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr "Beszélgetés"
#: src/guiKeyChangeMenu.cpp:410
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr "Parancs"
#: src/guiKeyChangeMenu.cpp:411
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr "Konzol"
#: src/guiKeyChangeMenu.cpp:412
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr "Repülés bekapcsolása"
#: src/guiKeyChangeMenu.cpp:413
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr "Gyorsaság bekapcsolása"
#: src/guiKeyChangeMenu.cpp:414
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr "váltás noclip-re"
#: src/guiKeyChangeMenu.cpp:415
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr "Távolság választása"
#: src/guiKeyChangeMenu.cpp:416
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr "Stacks nyomtatása"
#: src/guiPasswordChange.cpp:107
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr "Régi jelszó"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr "Új jelszó"
#: src/guiPasswordChange.cpp:142
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr "Jelszó visszaigazolás"
#: src/guiPasswordChange.cpp:160
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr "Változtat"
#: src/guiPasswordChange.cpp:169
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr "Nem eggyeznek a jelszavak!"
@ -651,11 +678,11 @@ msgstr ""
"- Egér görgő: Tárgyak kiválasztása\n"
"- T: Beszélgetés\n"
#: src/guiVolumeChange.cpp:108
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr "Hangerő: "
#: src/guiVolumeChange.cpp:122
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr "Kilépés"
@ -947,74 +974,81 @@ msgstr "PA11"
msgid "Zoom"
msgstr "Nagyítás"
#: src/main.cpp:1411
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr ""
#: src/main.cpp:1486
#: src/main.cpp:1547
msgid "Main Menu"
msgstr "Fő menü"
#: src/main.cpp:1662
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr "Nincs kiválasztott világ, nincs cím. Nincs mit tenni."
#: src/main.cpp:1670
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr "Nem található, vagy nem betöltött játék \""
#: src/main.cpp:1684
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr "Nem valós játék spec."
#: src/main.cpp:1729
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr "Csatlakozási hiba (Idő lejárt?)"
#~ msgid "is required by:"
#~ msgstr "kell neki:"
#~ msgid "Configuration saved. "
#~ msgstr "Beállítások mentve. "
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Figyelem: A beállítások nem egyformák. "
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Nem sikerült a világ létrehozása: A névben nem jó karakterek vannak"
#~ msgid "Multiplayer"
#~ msgstr "Többjátékos mód"
#~ msgid "Advanced"
#~ msgstr "Haladó"
#~ msgid "Show Public"
#~ msgstr "Publikus mutatása"
#~ msgid "Show Favorites"
#~ msgstr "Kedvencek mutatása"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Hagyd el a nevét, hogy helyi szervert indíts."
#~ msgid "Create world"
#~ msgstr "Világ létrehozása"
#~ msgid "Address required."
#~ msgstr "Cím szükséges."
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Nem törölhető a világ: Nincs kiválasztva"
#~ msgid "Files to be deleted"
#~ msgstr "A fájl törölve lett"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Nem sikerült a világot létrehozni: Nem található a játék"
#~ msgid "Failed to delete all world files"
#~ msgstr "Hiba az összes világ törlése közben"
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Nem sikerült a világ beállítása: Nincs kiválasztva"
#~ msgid "Failed to delete all world files"
#~ msgstr "Hiba az összes világ törlése közben"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Nem sikerült a világot létrehozni: Nem található a játék"
#~ msgid "Files to be deleted"
#~ msgstr "A fájl törölve lett"
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Nem törölhető a világ: Nincs kiválasztva"
#~ msgid "Address required."
#~ msgstr "Cím szükséges."
#~ msgid "Create world"
#~ msgstr "Világ létrehozása"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Hagyd el a nevét, hogy helyi szervert indíts."
#~ msgid "Show Favorites"
#~ msgstr "Kedvencek mutatása"
#~ msgid "Show Public"
#~ msgstr "Publikus mutatása"
#~ msgid "Advanced"
#~ msgstr "Haladó"
#~ msgid "Multiplayer"
#~ msgstr "Többjátékos mód"
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Nem sikerült a világ létrehozása: A névben nem jó karakterek vannak"
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Figyelem: A beállítások nem egyformák. "
#~ msgid "Configuration saved. "
#~ msgstr "Beállítások mentve. "
#~ msgid "is required by:"
#~ msgstr "kell neki:"
#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr "Ball gomb: Tárgyak mozgatása, Jobb gomb: egy tárgyat mozgat"
#, fuzzy
#~ msgid "Download"
#~ msgstr "Le"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-07 22:01+0400\n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: 2013-03-30 20:50+0200\n"
"Last-Translator: Fabio Luongo <e249260@rmqkr.net>\n"
"Language-Team: Italian\n"
@ -23,12 +23,12 @@ msgstr ""
msgid "Game Name"
msgstr "Gioco"
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:301
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr "Crea"
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:302 builtin/modmgr.lua:289
#: builtin/modmgr.lua:406 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Annulla"
@ -40,36 +40,36 @@ msgstr ""
msgid "GAMES"
msgstr ""
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:859
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
#, fuzzy
msgid "Games"
msgstr "Gioco"
#: builtin/gamemgr.lua:233
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr ""
#: builtin/gamemgr.lua:234
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr ""
#: builtin/gamemgr.lua:237
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr ""
#: builtin/gamemgr.lua:247
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr ""
#: builtin/gamemgr.lua:267
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr ""
#: builtin/gamemgr.lua:270
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr ""
#: builtin/mainmenu.lua:159
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr ""
@ -77,230 +77,238 @@ msgstr ""
msgid "World name"
msgstr "Nome mondo"
#: builtin/mainmenu.lua:298
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr ""
#: builtin/mainmenu.lua:300
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr "Gioco"
#: builtin/mainmenu.lua:314
#: builtin/mainmenu.lua:319
#, fuzzy
msgid "Delete World \"$1\"?"
msgstr "Cancella il mondo"
#: builtin/mainmenu.lua:315 builtin/modmgr.lua:846
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr "Sì"
#: builtin/mainmenu.lua:316
#: builtin/mainmenu.lua:321
msgid "No"
msgstr "No"
#: builtin/mainmenu.lua:384
#: builtin/mainmenu.lua:364
#, fuzzy
msgid "A world named \"$1\" already exists"
msgstr "Impossibile creare il mondo: un mondo con questo nome già esiste"
#: builtin/mainmenu.lua:399
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr ""
#: builtin/mainmenu.lua:852
msgid "Singleplayer"
msgstr "Giocatore singolo"
#: builtin/mainmenu.lua:853
msgid "Client"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:854
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:855
msgid "Settings"
msgstr "Opzioni"
#: builtin/mainmenu.lua:856
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:863
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:865
msgid "Credits"
msgstr "Crediti"
#: builtin/mainmenu.lua:885
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr ""
#: builtin/mainmenu.lua:886
#: builtin/mainmenu.lua:819
#, fuzzy
msgid "Favorites:"
msgstr "Mostra preferiti"
#: builtin/mainmenu.lua:887
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr "Indirizzo/Porta"
#: builtin/mainmenu.lua:888
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr "Nome/Password"
#: builtin/mainmenu.lua:891
#: builtin/mainmenu.lua:824
msgid "Public Serverlist"
msgstr ""
#: builtin/mainmenu.lua:896 builtin/mainmenu.lua:941 builtin/mainmenu.lua:1004
#: builtin/modmgr.lua:271 src/keycode.cpp:229
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr "Cancella"
#: builtin/mainmenu.lua:900
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr "Connetti"
#: builtin/mainmenu.lua:942 builtin/mainmenu.lua:1005
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr "Nuovo"
#: builtin/mainmenu.lua:943 builtin/mainmenu.lua:1006
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr "Configura"
#: builtin/mainmenu.lua:944
#: builtin/mainmenu.lua:877
#, fuzzy
msgid "Start Game"
msgstr "Avvia gioco/Connetti"
#: builtin/mainmenu.lua:945 builtin/mainmenu.lua:1008
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr "Seleziona mondo:"
#: builtin/mainmenu.lua:946
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr ""
#: builtin/mainmenu.lua:947 builtin/mainmenu.lua:1010
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr "Modalità creativa"
#: builtin/mainmenu.lua:949 builtin/mainmenu.lua:1012
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr "Attiva danno"
#: builtin/mainmenu.lua:951
#: builtin/mainmenu.lua:884
#, fuzzy
msgid "Public"
msgstr "Lista server pubblici"
#: builtin/mainmenu.lua:953
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr ""
#: builtin/mainmenu.lua:955
#: builtin/mainmenu.lua:888
#, fuzzy
msgid "Password"
msgstr "Vecchia password"
#: builtin/mainmenu.lua:956
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr ""
#: builtin/mainmenu.lua:966
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr ""
#: builtin/mainmenu.lua:967
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr "Alberi migliori"
#: builtin/mainmenu.lua:969
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr "Luce uniforme"
#: builtin/mainmenu.lua:971
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr "Nuvole 3D"
#: builtin/mainmenu.lua:973
#: builtin/mainmenu.lua:906
#, fuzzy
msgid "Opaque Water"
msgstr "Acqua opaca"
#: builtin/mainmenu.lua:976
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr "Mipmapping"
#: builtin/mainmenu.lua:978
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr "Filtro anisotropico"
#: builtin/mainmenu.lua:980
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr "Filtro bilineare"
#: builtin/mainmenu.lua:982
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr "Filtro trilineare"
#: builtin/mainmenu.lua:985
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr "Shader"
#: builtin/mainmenu.lua:987
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr "Pre-carica le immagini degli oggetti"
#: builtin/mainmenu.lua:989
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr "Attiva particelle"
#: builtin/mainmenu.lua:991
#: builtin/mainmenu.lua:924
msgid "Finite Liquid"
msgstr ""
#: builtin/mainmenu.lua:994
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr "Modifica tasti"
#: builtin/mainmenu.lua:1007 src/keycode.cpp:248
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr "Gioca"
#: builtin/mainmenu.lua:1009
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr ""
#: builtin/mainmenu.lua:1022
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr ""
#: builtin/mainmenu.lua:1023
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr ""
#: builtin/mainmenu.lua:1043
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr ""
#: builtin/mainmenu.lua:1071
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr ""
#: builtin/mainmenu.lua:1082
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr ""
#: builtin/mainmenu.lua:1092
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr ""
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr "Giocatore singolo"
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr ""
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr "Opzioni"
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr "Crediti"
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr ""
@ -309,114 +317,133 @@ msgstr ""
msgid "Installed Mods:"
msgstr ""
#: builtin/modmgr.lua:243 builtin/modstore.lua:253
msgid "Install"
#: builtin/modmgr.lua:243
msgid "Add mod:"
msgstr ""
#: builtin/modmgr.lua:244
#, fuzzy
msgid "Download"
msgstr "Giù"
msgid "Local install"
msgstr ""
#: builtin/modmgr.lua:256
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
msgid "No mod description available"
msgstr ""
#: builtin/modmgr.lua:288
msgid "Mod information:"
msgstr ""
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr ""
#: builtin/modmgr.lua:260 builtin/modmgr.lua:402
#, fuzzy
msgid "Depends:"
msgstr "dipende da:"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:282
#: builtin/modmgr.lua:312
msgid "Uninstall selected mod"
msgstr ""
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr ""
#: builtin/modmgr.lua:287 src/keycode.cpp:227
#: builtin/modmgr.lua:329 src/keycode.cpp:227
msgid "Accept"
msgstr "Accetta"
#: builtin/modmgr.lua:381
#: builtin/modmgr.lua:423
#, fuzzy
msgid "World:"
msgstr "Seleziona mondo:"
#: builtin/modmgr.lua:385 builtin/modmgr.lua:387
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
#, fuzzy
msgid "Hide Game"
msgstr "Gioco"
#: builtin/modmgr.lua:391 builtin/modmgr.lua:393
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr ""
#: builtin/modmgr.lua:400
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr ""
#: builtin/modmgr.lua:405 src/guiKeyChangeMenu.cpp:187
#: builtin/modmgr.lua:444
#, fuzzy
msgid "Depends:"
msgstr "dipende da:"
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Salva"
#: builtin/modmgr.lua:422
#: builtin/modmgr.lua:464
#, fuzzy
msgid "Enable MP"
msgstr "Attiva tutto"
#: builtin/modmgr.lua:424
#: builtin/modmgr.lua:466
#, fuzzy
msgid "Disable MP"
msgstr "Disabilita tutto"
#: builtin/modmgr.lua:428 builtin/modmgr.lua:430
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr "attivato"
#: builtin/modmgr.lua:436
#: builtin/modmgr.lua:478
#, fuzzy
msgid "Enable all"
msgstr "Attiva tutto"
#: builtin/modmgr.lua:551
#: builtin/modmgr.lua:577
#, fuzzy
msgid "Select Mod File:"
msgstr "Seleziona mondo:"
#: builtin/modmgr.lua:590
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr ""
#: builtin/modmgr.lua:591
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
msgstr ""
#: builtin/modmgr.lua:612
#: builtin/modmgr.lua:638
#, fuzzy
msgid "Failed to install $1 to $2"
msgstr "Fallimento nell'inizializzare il mondo"
#: builtin/modmgr.lua:615
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
#: builtin/modmgr.lua:635
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
#: builtin/modmgr.lua:824
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
#: builtin/modmgr.lua:828
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
#: builtin/modmgr.lua:845
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
#: builtin/modmgr.lua:847
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr ""
@ -432,47 +459,51 @@ msgstr ""
msgid "re-Install"
msgstr ""
#: src/client.cpp:2915
#: builtin/modstore.lua:253
msgid "Install"
msgstr ""
#: src/client.cpp:2917
msgid "Item textures..."
msgstr ""
#: src/game.cpp:939
#: src/game.cpp:940
msgid "Loading..."
msgstr ""
#: src/game.cpp:999
#: src/game.cpp:1000
msgid "Creating server...."
msgstr ""
#: src/game.cpp:1015
#: src/game.cpp:1016
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1024
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1121
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:1218
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr ""
#: src/game.cpp:1225
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr ""
#: src/game.cpp:1232
#: src/game.cpp:1233
msgid "Media..."
msgstr ""
#: src/game.cpp:3405
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3435
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
@ -488,13 +519,8 @@ msgstr "Sei morto."
msgid "Respawn"
msgstr "Ricomincia"
#: src/guiFormSpecMenu.cpp:1569
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
"Click sinistro: muovi tutti gli oggetti; click destro: muovi un solo oggetto"
#: src/guiFormSpecMenu.cpp:1595 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:140
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr "Procedi"
@ -512,99 +538,99 @@ msgstr "\"Usa\" = scendi sotto"
msgid "Double tap \"jump\" to toggle fly"
msgstr "Premi due volte \"salto\" per volare"
#: src/guiKeyChangeMenu.cpp:290
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr "Tasto già usato"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr "premi il tasto"
#: src/guiKeyChangeMenu.cpp:400
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr "Avanti"
#: src/guiKeyChangeMenu.cpp:401
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr "Indietro"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr "Sinistra"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr "Destra"
#: src/guiKeyChangeMenu.cpp:404
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr "Usa"
#: src/guiKeyChangeMenu.cpp:405
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr "Salta"
#: src/guiKeyChangeMenu.cpp:406
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr "Abbassati"
#: src/guiKeyChangeMenu.cpp:407
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr "Lancia"
#: src/guiKeyChangeMenu.cpp:408
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr "Inventario"
#: src/guiKeyChangeMenu.cpp:409
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr "Parla"
#: src/guiKeyChangeMenu.cpp:410
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr "Comando"
#: src/guiKeyChangeMenu.cpp:411
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr "Console"
#: src/guiKeyChangeMenu.cpp:412
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr "Attiva volo"
#: src/guiKeyChangeMenu.cpp:413
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr "Aumenta velocità"
#: src/guiKeyChangeMenu.cpp:414
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr "(Non) attraversi blocchi"
#: src/guiKeyChangeMenu.cpp:415
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr "Distanza di rendering"
#: src/guiKeyChangeMenu.cpp:416
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr "Stampa stack"
#: src/guiPasswordChange.cpp:107
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr "Vecchia password"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr "Nuova password"
#: src/guiPasswordChange.cpp:142
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr "Conferma password"
#: src/guiPasswordChange.cpp:160
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr "Modifica"
#: src/guiPasswordChange.cpp:169
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr "Le password non corrispondono!"
@ -643,11 +669,11 @@ msgid ""
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr ""
#: src/guiVolumeChange.cpp:122
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr ""
@ -939,77 +965,47 @@ msgstr ""
msgid "Zoom"
msgstr ""
#: src/main.cpp:1411
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr ""
#: src/main.cpp:1486
#: src/main.cpp:1547
msgid "Main Menu"
msgstr "Menu principale"
#: src/main.cpp:1662
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr "Nessun mondo selezionato e nessun indirizzo fornito. Niente da fare."
#: src/main.cpp:1670
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr "Impossibile trovare o caricare il gioco \""
#: src/main.cpp:1684
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr "Specifiche di gioco non valide."
#: src/main.cpp:1729
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr "Errore connessione (tempo scaduto?)"
#~ msgid "is required by:"
#~ msgstr "è richiesto da:"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "Attenzione: alcune mod non sono ancora configurate.\n"
#~ "Saranno abilitate di default quando salverai la configurazione. "
#~ msgid "Configuration saved. "
#~ msgstr "Configurazione salvata. "
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
#~ "Their setting will be removed when you save the configuration. "
#~ msgstr ""
#~ "Attenzione: mancano alcune mod configurate.\n"
#~ "Le loro impostazioni saranno rimosse al salvataggio della "
#~ "configurazione. "
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Attenzione: configurazione non corretta. "
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Impossibile creare il mondo: il nome contiene caratteri non validi"
#~ msgid "Multiplayer"
#~ msgstr "Multigiocatore"
#~ msgid "Advanced"
#~ msgstr "Avanzato"
#~ msgid "Show Public"
#~ msgstr "Lista server pubblici"
#~ msgid "Show Favorites"
#~ msgstr "Mostra preferiti"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Lascia vuoto l'indirizzo per avviare un server locale."
#~ msgid "Create world"
#~ msgstr "Crea mondo"
#~ msgid "Address required."
#~ msgstr "Indirizzo necessario."
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Impossibile eliminare il mondo: nessun mondo selezionato"
#~ msgid "Files to be deleted"
#~ msgstr "File da eliminarsi"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Impossibile creare il mondo: nessun gioco trovato"
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Impossibile configurare il mondo: nessun mondo selezionato"
#~ msgid "Failed to delete all world files"
#~ msgstr "Eliminazione di tutti i file del mondo fallita"
#~ msgid "Delete map"
#~ msgstr "Cancella mappa"
#~ msgid ""
#~ "Default Controls:\n"
@ -1036,20 +1032,59 @@ msgstr "Errore connessione (tempo scaduto?)"
#~ "- ESC: questo menu\n"
#~ "- T: chat\n"
#~ msgid "Delete map"
#~ msgstr "Cancella mappa"
#~ msgid "Failed to delete all world files"
#~ msgstr "Eliminazione di tutti i file del mondo fallita"
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
#~ "Their setting will be removed when you save the configuration. "
#~ msgstr ""
#~ "Attenzione: mancano alcune mod configurate.\n"
#~ "Le loro impostazioni saranno rimosse al salvataggio della "
#~ "configurazione. "
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Impossibile configurare il mondo: nessun mondo selezionato"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgid "Cannot create world: No games found"
#~ msgstr "Impossibile creare il mondo: nessun gioco trovato"
#~ msgid "Files to be deleted"
#~ msgstr "File da eliminarsi"
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Impossibile eliminare il mondo: nessun mondo selezionato"
#~ msgid "Address required."
#~ msgstr "Indirizzo necessario."
#~ msgid "Create world"
#~ msgstr "Crea mondo"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Lascia vuoto l'indirizzo per avviare un server locale."
#~ msgid "Show Favorites"
#~ msgstr "Mostra preferiti"
#~ msgid "Show Public"
#~ msgstr "Lista server pubblici"
#~ msgid "Advanced"
#~ msgstr "Avanzato"
#~ msgid "Multiplayer"
#~ msgstr "Multigiocatore"
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Impossibile creare il mondo: il nome contiene caratteri non validi"
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Attenzione: configurazione non corretta. "
#~ msgid "Configuration saved. "
#~ msgstr "Configurazione salvata. "
#~ msgid "is required by:"
#~ msgstr "è richiesto da:"
#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr ""
#~ "Attenzione: alcune mod non sono ancora configurate.\n"
#~ "Saranno abilitate di default quando salverai la configurazione. "
#~ "Click sinistro: muovi tutti gli oggetti; click destro: muovi un solo "
#~ "oggetto"
#, fuzzy
#~ msgid "Download"
#~ msgstr "Giù"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-07 22:01+0400\n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: 2013-03-07 23:06+0200\n"
"Last-Translator: Mitori Itoshiki <mito551@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -23,12 +23,12 @@ msgstr ""
msgid "Game Name"
msgstr "ゲーム"
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:301
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr "作成"
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:302 builtin/modmgr.lua:289
#: builtin/modmgr.lua:406 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "キャンセル"
@ -40,36 +40,36 @@ msgstr ""
msgid "GAMES"
msgstr ""
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:859
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
#, fuzzy
msgid "Games"
msgstr "ゲーム"
#: builtin/gamemgr.lua:233
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr ""
#: builtin/gamemgr.lua:234
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr ""
#: builtin/gamemgr.lua:237
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr ""
#: builtin/gamemgr.lua:247
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr ""
#: builtin/gamemgr.lua:267
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr ""
#: builtin/gamemgr.lua:270
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr ""
#: builtin/mainmenu.lua:159
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr ""
@ -77,231 +77,239 @@ msgstr ""
msgid "World name"
msgstr "ワールド名"
#: builtin/mainmenu.lua:298
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr ""
#: builtin/mainmenu.lua:300
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr "ゲーム"
#: builtin/mainmenu.lua:314
#: builtin/mainmenu.lua:319
#, fuzzy
msgid "Delete World \"$1\"?"
msgstr "ワールド削除"
#: builtin/mainmenu.lua:315 builtin/modmgr.lua:846
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr "はい"
#: builtin/mainmenu.lua:316
#: builtin/mainmenu.lua:321
msgid "No"
msgstr "いいえ"
#: builtin/mainmenu.lua:384
#: builtin/mainmenu.lua:364
#, fuzzy
msgid "A world named \"$1\" already exists"
msgstr "ワールドを作成できません: 同名のワールドが既に存在しています"
#: builtin/mainmenu.lua:399
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr ""
#: builtin/mainmenu.lua:852
msgid "Singleplayer"
msgstr "シングルプレイヤー"
#: builtin/mainmenu.lua:853
msgid "Client"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:854
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:855
msgid "Settings"
msgstr "設定"
#: builtin/mainmenu.lua:856
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:863
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:865
msgid "Credits"
msgstr "クレジット"
#: builtin/mainmenu.lua:885
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr ""
#: builtin/mainmenu.lua:886
#: builtin/mainmenu.lua:819
#, fuzzy
msgid "Favorites:"
msgstr "お気に入りを見せる"
#: builtin/mainmenu.lua:887
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr "アドレス/ポート"
#: builtin/mainmenu.lua:888
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr "名前/パスワード"
#: builtin/mainmenu.lua:891
#: builtin/mainmenu.lua:824
msgid "Public Serverlist"
msgstr ""
#: builtin/mainmenu.lua:896 builtin/mainmenu.lua:941 builtin/mainmenu.lua:1004
#: builtin/modmgr.lua:271 src/keycode.cpp:229
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr "削除"
#: builtin/mainmenu.lua:900
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr "接続"
#: builtin/mainmenu.lua:942 builtin/mainmenu.lua:1005
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr "新規作成"
#: builtin/mainmenu.lua:943 builtin/mainmenu.lua:1006
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr "設定"
#: builtin/mainmenu.lua:944
#: builtin/mainmenu.lua:877
#, fuzzy
msgid "Start Game"
msgstr "ゲーム開始 / 接続"
#: builtin/mainmenu.lua:945 builtin/mainmenu.lua:1008
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr "ワールド選択:"
#: builtin/mainmenu.lua:946
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr ""
#: builtin/mainmenu.lua:947 builtin/mainmenu.lua:1010
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr "クリエイティブモード"
#: builtin/mainmenu.lua:949 builtin/mainmenu.lua:1012
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr "ダメージ有効"
#: builtin/mainmenu.lua:951
#: builtin/mainmenu.lua:884
#, fuzzy
msgid "Public"
msgstr "公共を見せる"
#: builtin/mainmenu.lua:953
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr ""
#: builtin/mainmenu.lua:955
#: builtin/mainmenu.lua:888
#, fuzzy
msgid "Password"
msgstr "古いパスワード"
#: builtin/mainmenu.lua:956
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr ""
#: builtin/mainmenu.lua:966
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr ""
#: builtin/mainmenu.lua:967
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr "きれいな木"
#: builtin/mainmenu.lua:969
#: builtin/mainmenu.lua:902
#, fuzzy
msgid "Smooth Lighting"
msgstr "自然な光表現"
#: builtin/mainmenu.lua:971
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr "3Dの雲"
#: builtin/mainmenu.lua:973
#: builtin/mainmenu.lua:906
#, fuzzy
msgid "Opaque Water"
msgstr "不透明な水面"
#: builtin/mainmenu.lua:976
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr "ミップマップ"
#: builtin/mainmenu.lua:978
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr "異方性フィルタリング"
#: builtin/mainmenu.lua:980
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr "バイリニアフィルタリング"
#: builtin/mainmenu.lua:982
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr "トリリニアフィルタリング"
#: builtin/mainmenu.lua:985
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr "シェーダー"
#: builtin/mainmenu.lua:987
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr "アイテム外観のプリロード"
#: builtin/mainmenu.lua:989
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr "破片表現の有効化"
#: builtin/mainmenu.lua:991
#: builtin/mainmenu.lua:924
msgid "Finite Liquid"
msgstr ""
#: builtin/mainmenu.lua:994
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr "キー割当て変更"
#: builtin/mainmenu.lua:1007 src/keycode.cpp:248
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr "選択した世界に入る"
#: builtin/mainmenu.lua:1009
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr ""
#: builtin/mainmenu.lua:1022
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr ""
#: builtin/mainmenu.lua:1023
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr ""
#: builtin/mainmenu.lua:1043
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr ""
#: builtin/mainmenu.lua:1071
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr ""
#: builtin/mainmenu.lua:1082
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr ""
#: builtin/mainmenu.lua:1092
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr ""
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr "シングルプレイヤー"
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr ""
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr "設定"
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr "クレジット"
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr ""
@ -310,115 +318,134 @@ msgstr ""
msgid "Installed Mods:"
msgstr ""
#: builtin/modmgr.lua:243 builtin/modstore.lua:253
msgid "Install"
#: builtin/modmgr.lua:243
msgid "Add mod:"
msgstr ""
#: builtin/modmgr.lua:244
#, fuzzy
msgid "Download"
msgstr "Down"
msgid "Local install"
msgstr ""
#: builtin/modmgr.lua:256
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
msgid "No mod description available"
msgstr ""
#: builtin/modmgr.lua:288
msgid "Mod information:"
msgstr ""
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr ""
#: builtin/modmgr.lua:260 builtin/modmgr.lua:402
#, fuzzy
msgid "Depends:"
msgstr "この改造ファイルが必要です:"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:282
#: builtin/modmgr.lua:312
msgid "Uninstall selected mod"
msgstr ""
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr ""
#: builtin/modmgr.lua:287 src/keycode.cpp:227
#: builtin/modmgr.lua:329 src/keycode.cpp:227
#, fuzzy
msgid "Accept"
msgstr "Accept"
#: builtin/modmgr.lua:381
#: builtin/modmgr.lua:423
#, fuzzy
msgid "World:"
msgstr "ワールド選択:"
#: builtin/modmgr.lua:385 builtin/modmgr.lua:387
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
#, fuzzy
msgid "Hide Game"
msgstr "ゲーム"
#: builtin/modmgr.lua:391 builtin/modmgr.lua:393
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr ""
#: builtin/modmgr.lua:400
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr ""
#: builtin/modmgr.lua:405 src/guiKeyChangeMenu.cpp:187
#: builtin/modmgr.lua:444
#, fuzzy
msgid "Depends:"
msgstr "この改造ファイルが必要です:"
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "保存"
#: builtin/modmgr.lua:422
#: builtin/modmgr.lua:464
#, fuzzy
msgid "Enable MP"
msgstr "全部を有効にしました"
#: builtin/modmgr.lua:424
#: builtin/modmgr.lua:466
#, fuzzy
msgid "Disable MP"
msgstr "全部を無効にしました"
#: builtin/modmgr.lua:428 builtin/modmgr.lua:430
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr "有効にしました"
#: builtin/modmgr.lua:436
#: builtin/modmgr.lua:478
#, fuzzy
msgid "Enable all"
msgstr "全部を有効にしました"
#: builtin/modmgr.lua:551
#: builtin/modmgr.lua:577
#, fuzzy
msgid "Select Mod File:"
msgstr "ワールド選択:"
#: builtin/modmgr.lua:590
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr ""
#: builtin/modmgr.lua:591
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
msgstr ""
#: builtin/modmgr.lua:612
#: builtin/modmgr.lua:638
#, fuzzy
msgid "Failed to install $1 to $2"
msgstr "ワールドの初期化に失敗"
#: builtin/modmgr.lua:615
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
#: builtin/modmgr.lua:635
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
#: builtin/modmgr.lua:824
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
#: builtin/modmgr.lua:828
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
#: builtin/modmgr.lua:845
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
#: builtin/modmgr.lua:847
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr ""
@ -434,47 +461,51 @@ msgstr ""
msgid "re-Install"
msgstr ""
#: src/client.cpp:2915
#: builtin/modstore.lua:253
msgid "Install"
msgstr ""
#: src/client.cpp:2917
msgid "Item textures..."
msgstr ""
#: src/game.cpp:939
#: src/game.cpp:940
msgid "Loading..."
msgstr ""
#: src/game.cpp:999
#: src/game.cpp:1000
msgid "Creating server...."
msgstr ""
#: src/game.cpp:1015
#: src/game.cpp:1016
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1024
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1121
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:1218
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr ""
#: src/game.cpp:1225
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr ""
#: src/game.cpp:1232
#: src/game.cpp:1233
msgid "Media..."
msgstr ""
#: src/game.cpp:3405
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3435
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
@ -488,12 +519,8 @@ msgstr "死亡しました。"
msgid "Respawn"
msgstr "リスポーン"
#: src/guiFormSpecMenu.cpp:1569
msgid "Left click: Move all items, Right click: Move single item"
msgstr "左クリックは全部のアイテムを動かす,右クリックは一つのアイテムを動かす"
#: src/guiFormSpecMenu.cpp:1595 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:140
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr "続く"
@ -509,99 +536,99 @@ msgstr "「使う」は下りる"
msgid "Double tap \"jump\" to toggle fly"
msgstr "「ジャンプ」を二回押すと飛べる"
#: src/guiKeyChangeMenu.cpp:290
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr "既に使われているキーです"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr "キー入力待ち"
#: src/guiKeyChangeMenu.cpp:400
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr "前進"
#: src/guiKeyChangeMenu.cpp:401
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr "後退"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr "左へ進む"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr "右へ進む"
#: src/guiKeyChangeMenu.cpp:404
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr "使う"
#: src/guiKeyChangeMenu.cpp:405
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr "ジャンプ"
#: src/guiKeyChangeMenu.cpp:406
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr "こっそり進む"
#: src/guiKeyChangeMenu.cpp:407
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr "落とす"
#: src/guiKeyChangeMenu.cpp:408
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr "インベントリ"
#: src/guiKeyChangeMenu.cpp:409
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr "チャット"
#: src/guiKeyChangeMenu.cpp:410
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr "コマンド"
#: src/guiKeyChangeMenu.cpp:411
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr "コンソール"
#: src/guiKeyChangeMenu.cpp:412
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr "飛べるモードをトグル"
#: src/guiKeyChangeMenu.cpp:413
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr "ファストモードをトグル"
#: src/guiKeyChangeMenu.cpp:414
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr "ノクリップモードをトグル"
#: src/guiKeyChangeMenu.cpp:415
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr "範囲選択"
#: src/guiKeyChangeMenu.cpp:416
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr "スタックの表示"
#: src/guiPasswordChange.cpp:107
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr "古いパスワード"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr "新しいパスワード"
#: src/guiPasswordChange.cpp:142
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr "パスワードの確認"
#: src/guiPasswordChange.cpp:160
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr "変更"
#: src/guiPasswordChange.cpp:169
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr "新しいパスワードが一致しません!"
@ -640,11 +667,11 @@ msgid ""
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr ""
#: src/guiVolumeChange.cpp:122
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr ""
@ -971,77 +998,36 @@ msgstr "PA1"
msgid "Zoom"
msgstr "ズーム"
#: src/main.cpp:1411
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr "yes"
#: src/main.cpp:1486
#: src/main.cpp:1547
msgid "Main Menu"
msgstr "メインメニュー"
#: src/main.cpp:1662
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
#: src/main.cpp:1670
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr "ゲームをロードか見つかるのに失敗"
#: src/main.cpp:1684
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr ""
#: src/main.cpp:1729
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr "接続エラー (タイムアウトか?)"
#~ msgid "is required by:"
#~ msgstr "この改造に必要されます:"
#~ msgid "Configuration saved. "
#~ msgstr "設定を保存しました. "
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "注意:設定が一定でわありません。"
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "ワールドを作成できません: 名前に無効な文字が含まれています"
#~ msgid "Multiplayer"
#~ msgstr "マルチプレイヤー"
#~ msgid "Advanced"
#~ msgstr "高度"
#~ msgid "Show Public"
#~ msgstr "公共を見せる"
#~ msgid "Show Favorites"
#~ msgstr "お気に入りを見せる"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "アドレスを入力しないかぎりロカルサーバーを開始。"
#~ msgid "Create world"
#~ msgstr "ワールド作成"
#~ msgid "Address required."
#~ msgstr "アドレスが必要です."
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "ワールドを削除できません: 何も選択されていません"
#~ msgid "Files to be deleted"
#~ msgstr "削除されるファイル"
#~ msgid "Cannot create world: No games found"
#~ msgstr "ワールドを作成できません: ゲームが見つかりませんでした"
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "ワールドの設定ができません: 何も選択されていません"
#~ msgid "Failed to delete all world files"
#~ msgstr "ワールドファイルの全ての削除に失敗"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "警告: マインテストの改造がいくつか設定されていません。\n"
#~ "これらを設定を保存すると自動で有効化されます。 "
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
@ -1050,9 +1036,58 @@ msgstr "接続エラー (タイムアウトか?)"
#~ "警告: いくつかの設定みの改造ファイルが見つかりません.\n"
#~ "これらの情報は設定を保存すると削除されます. "
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgid "Failed to delete all world files"
#~ msgstr "ワールドファイルの全ての削除に失敗"
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "ワールドの設定ができません: 何も選択されていません"
#~ msgid "Cannot create world: No games found"
#~ msgstr "ワールドを作成できません: ゲームが見つかりませんでした"
#~ msgid "Files to be deleted"
#~ msgstr "削除されるファイル"
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "ワールドを削除できません: 何も選択されていません"
#~ msgid "Address required."
#~ msgstr "アドレスが必要です."
#~ msgid "Create world"
#~ msgstr "ワールド作成"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "アドレスを入力しないかぎりロカルサーバーを開始。"
#~ msgid "Show Favorites"
#~ msgstr "お気に入りを見せる"
#~ msgid "Show Public"
#~ msgstr "公共を見せる"
#~ msgid "Advanced"
#~ msgstr "高度"
#~ msgid "Multiplayer"
#~ msgstr "マルチプレイヤー"
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "ワールドを作成できません: 名前に無効な文字が含まれています"
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "注意:設定が一定でわありません。"
#~ msgid "Configuration saved. "
#~ msgstr "設定を保存しました. "
#~ msgid "is required by:"
#~ msgstr "この改造に必要されます:"
#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr ""
#~ "警告: マインテストの改造がいくつか設定されていません。\n"
#~ "これらを設定を保存すると自動で有効化されます。 "
#~ "左クリックは全部のアイテムを動かす,右クリックは一つのアイテムを動かす"
#, fuzzy
#~ msgid "Download"
#~ msgstr "Down"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-07 22:01+0400\n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -21,12 +21,12 @@ msgstr ""
msgid "Game Name"
msgstr ""
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:301
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr ""
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:302 builtin/modmgr.lua:289
#: builtin/modmgr.lua:406 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr ""
@ -38,35 +38,35 @@ msgstr ""
msgid "GAMES"
msgstr ""
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:859
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
msgid "Games"
msgstr ""
#: builtin/gamemgr.lua:233
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr ""
#: builtin/gamemgr.lua:234
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr ""
#: builtin/gamemgr.lua:237
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr ""
#: builtin/gamemgr.lua:247
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr ""
#: builtin/gamemgr.lua:267
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr ""
#: builtin/gamemgr.lua:270
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr ""
#: builtin/mainmenu.lua:159
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr ""
@ -74,223 +74,231 @@ msgstr ""
msgid "World name"
msgstr ""
#: builtin/mainmenu.lua:298
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr ""
#: builtin/mainmenu.lua:300
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr ""
#: builtin/mainmenu.lua:314
#: builtin/mainmenu.lua:319
msgid "Delete World \"$1\"?"
msgstr ""
#: builtin/mainmenu.lua:315 builtin/modmgr.lua:846
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr ""
#: builtin/mainmenu.lua:316
#: builtin/mainmenu.lua:321
msgid "No"
msgstr ""
#: builtin/mainmenu.lua:384
#: builtin/mainmenu.lua:364
msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu.lua:399
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr ""
#: builtin/mainmenu.lua:852
msgid "Singleplayer"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:853
msgid "Client"
msgstr ""
#: builtin/mainmenu.lua:854
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:855
msgid "Settings"
msgstr ""
#: builtin/mainmenu.lua:856
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:863
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:865
msgid "Credits"
msgstr ""
#: builtin/mainmenu.lua:885
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr ""
#: builtin/mainmenu.lua:886
#: builtin/mainmenu.lua:819
msgid "Favorites:"
msgstr ""
#: builtin/mainmenu.lua:887
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr ""
#: builtin/mainmenu.lua:888
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr ""
#: builtin/mainmenu.lua:891
#: builtin/mainmenu.lua:824
msgid "Public Serverlist"
msgstr ""
#: builtin/mainmenu.lua:896 builtin/mainmenu.lua:941 builtin/mainmenu.lua:1004
#: builtin/modmgr.lua:271 src/keycode.cpp:229
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr ""
#: builtin/mainmenu.lua:900
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr ""
#: builtin/mainmenu.lua:942 builtin/mainmenu.lua:1005
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr ""
#: builtin/mainmenu.lua:943 builtin/mainmenu.lua:1006
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr ""
#: builtin/mainmenu.lua:944
#: builtin/mainmenu.lua:877
msgid "Start Game"
msgstr ""
#: builtin/mainmenu.lua:945 builtin/mainmenu.lua:1008
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr ""
#: builtin/mainmenu.lua:946
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr ""
#: builtin/mainmenu.lua:947 builtin/mainmenu.lua:1010
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr ""
#: builtin/mainmenu.lua:949 builtin/mainmenu.lua:1012
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr ""
#: builtin/mainmenu.lua:951
#: builtin/mainmenu.lua:884
msgid "Public"
msgstr ""
#: builtin/mainmenu.lua:953
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr ""
#: builtin/mainmenu.lua:955
#: builtin/mainmenu.lua:888
msgid "Password"
msgstr ""
#: builtin/mainmenu.lua:956
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr ""
#: builtin/mainmenu.lua:966
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr ""
#: builtin/mainmenu.lua:967
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr ""
#: builtin/mainmenu.lua:969
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr ""
#: builtin/mainmenu.lua:971
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr ""
#: builtin/mainmenu.lua:973
#: builtin/mainmenu.lua:906
msgid "Opaque Water"
msgstr ""
#: builtin/mainmenu.lua:976
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr ""
#: builtin/mainmenu.lua:978
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr ""
#: builtin/mainmenu.lua:980
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr ""
#: builtin/mainmenu.lua:982
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr ""
#: builtin/mainmenu.lua:985
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr ""
#: builtin/mainmenu.lua:987
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr ""
#: builtin/mainmenu.lua:989
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr ""
#: builtin/mainmenu.lua:991
#: builtin/mainmenu.lua:924
msgid "Finite Liquid"
msgstr ""
#: builtin/mainmenu.lua:994
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr ""
#: builtin/mainmenu.lua:1007 src/keycode.cpp:248
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr ""
#: builtin/mainmenu.lua:1009
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr ""
#: builtin/mainmenu.lua:1022
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr ""
#: builtin/mainmenu.lua:1023
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr ""
#: builtin/mainmenu.lua:1043
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr ""
#: builtin/mainmenu.lua:1071
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr ""
#: builtin/mainmenu.lua:1082
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr ""
#: builtin/mainmenu.lua:1092
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr ""
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr ""
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr ""
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr ""
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr ""
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr ""
@ -299,105 +307,125 @@ msgstr ""
msgid "Installed Mods:"
msgstr ""
#: builtin/modmgr.lua:243 builtin/modstore.lua:253
msgid "Install"
#: builtin/modmgr.lua:243
msgid "Add mod:"
msgstr ""
#: builtin/modmgr.lua:244
msgid "Download"
msgid "Local install"
msgstr ""
#: builtin/modmgr.lua:256
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
msgid "No mod description available"
msgstr ""
#: builtin/modmgr.lua:288
msgid "Mod information:"
msgstr ""
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr ""
#: builtin/modmgr.lua:260 builtin/modmgr.lua:402
msgid "Depends:"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:282
#: builtin/modmgr.lua:312
msgid "Uninstall selected mod"
msgstr ""
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr ""
#: builtin/modmgr.lua:287 src/keycode.cpp:227
#: builtin/modmgr.lua:329 src/keycode.cpp:227
msgid "Accept"
msgstr ""
#: builtin/modmgr.lua:381
#: builtin/modmgr.lua:423
msgid "World:"
msgstr ""
#: builtin/modmgr.lua:385 builtin/modmgr.lua:387
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
msgid "Hide Game"
msgstr ""
#: builtin/modmgr.lua:391 builtin/modmgr.lua:393
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr ""
#: builtin/modmgr.lua:400
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr ""
#: builtin/modmgr.lua:405 src/guiKeyChangeMenu.cpp:187
#: builtin/modmgr.lua:444
msgid "Depends:"
msgstr ""
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr ""
#: builtin/modmgr.lua:422
#: builtin/modmgr.lua:464
msgid "Enable MP"
msgstr ""
#: builtin/modmgr.lua:424
#: builtin/modmgr.lua:466
msgid "Disable MP"
msgstr ""
#: builtin/modmgr.lua:428 builtin/modmgr.lua:430
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr ""
#: builtin/modmgr.lua:436
#: builtin/modmgr.lua:478
msgid "Enable all"
msgstr ""
#: builtin/modmgr.lua:551
#: builtin/modmgr.lua:577
msgid "Select Mod File:"
msgstr ""
#: builtin/modmgr.lua:590
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr ""
#: builtin/modmgr.lua:591
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
msgstr ""
#: builtin/modmgr.lua:612
#: builtin/modmgr.lua:638
msgid "Failed to install $1 to $2"
msgstr ""
#: builtin/modmgr.lua:615
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
#: builtin/modmgr.lua:635
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
#: builtin/modmgr.lua:824
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
#: builtin/modmgr.lua:828
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
#: builtin/modmgr.lua:845
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
#: builtin/modmgr.lua:847
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr ""
@ -413,47 +441,51 @@ msgstr ""
msgid "re-Install"
msgstr ""
#: src/client.cpp:2915
#: builtin/modstore.lua:253
msgid "Install"
msgstr ""
#: src/client.cpp:2917
msgid "Item textures..."
msgstr ""
#: src/game.cpp:939
#: src/game.cpp:940
msgid "Loading..."
msgstr ""
#: src/game.cpp:999
#: src/game.cpp:1000
msgid "Creating server...."
msgstr ""
#: src/game.cpp:1015
#: src/game.cpp:1016
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1024
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1121
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:1218
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr ""
#: src/game.cpp:1225
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr ""
#: src/game.cpp:1232
#: src/game.cpp:1233
msgid "Media..."
msgstr ""
#: src/game.cpp:3405
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3435
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
@ -467,12 +499,8 @@ msgstr ""
msgid "Respawn"
msgstr ""
#: src/guiFormSpecMenu.cpp:1569
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
#: src/guiFormSpecMenu.cpp:1595 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:140
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr ""
@ -488,99 +516,99 @@ msgstr ""
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:290
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr ""
#: src/guiKeyChangeMenu.cpp:400
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:401
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr ""
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr ""
#: src/guiKeyChangeMenu.cpp:404
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:405
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr ""
#: src/guiKeyChangeMenu.cpp:406
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr ""
#: src/guiKeyChangeMenu.cpp:407
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr ""
#: src/guiKeyChangeMenu.cpp:408
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr ""
#: src/guiKeyChangeMenu.cpp:409
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr ""
#: src/guiKeyChangeMenu.cpp:410
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr ""
#: src/guiKeyChangeMenu.cpp:411
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr ""
#: src/guiKeyChangeMenu.cpp:412
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:413
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr ""
#: src/guiKeyChangeMenu.cpp:414
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr ""
#: src/guiKeyChangeMenu.cpp:415
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr ""
#: src/guiKeyChangeMenu.cpp:416
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr ""
#: src/guiPasswordChange.cpp:107
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr ""
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr ""
#: src/guiPasswordChange.cpp:142
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr ""
#: src/guiPasswordChange.cpp:160
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr ""
#: src/guiPasswordChange.cpp:169
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr ""
@ -619,11 +647,11 @@ msgid ""
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr ""
#: src/guiVolumeChange.cpp:122
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr ""
@ -915,26 +943,26 @@ msgstr ""
msgid "Zoom"
msgstr ""
#: src/main.cpp:1411
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr "yes"
#: src/main.cpp:1486
#: src/main.cpp:1547
msgid "Main Menu"
msgstr ""
#: src/main.cpp:1662
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
#: src/main.cpp:1670
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr ""
#: src/main.cpp:1684
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr ""
#: src/main.cpp:1729
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-07 22:01+0400\n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: 2013-06-01 18:09+0200\n"
"Last-Translator: Chynggyz Jumaliev <translatorky@lavabit.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -23,12 +23,12 @@ msgstr ""
msgid "Game Name"
msgstr "Оюн"
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:301
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr "Жаратуу"
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:302 builtin/modmgr.lua:289
#: builtin/modmgr.lua:406 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Жокко чыгаруу"
@ -40,36 +40,36 @@ msgstr ""
msgid "GAMES"
msgstr ""
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:859
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
#, fuzzy
msgid "Games"
msgstr "Оюн"
#: builtin/gamemgr.lua:233
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr ""
#: builtin/gamemgr.lua:234
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr ""
#: builtin/gamemgr.lua:237
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr ""
#: builtin/gamemgr.lua:247
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr ""
#: builtin/gamemgr.lua:267
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr ""
#: builtin/gamemgr.lua:270
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr ""
#: builtin/mainmenu.lua:159
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr ""
@ -77,229 +77,237 @@ msgstr ""
msgid "World name"
msgstr "Дүйнө аты"
#: builtin/mainmenu.lua:298
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr ""
#: builtin/mainmenu.lua:300
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr "Оюн"
#: builtin/mainmenu.lua:314
#: builtin/mainmenu.lua:319
#, fuzzy
msgid "Delete World \"$1\"?"
msgstr "Дүйнөнү өчүрүү"
#: builtin/mainmenu.lua:315 builtin/modmgr.lua:846
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr "Ооба"
#: builtin/mainmenu.lua:316
#: builtin/mainmenu.lua:321
msgid "No"
msgstr "Жок"
#: builtin/mainmenu.lua:384
#: builtin/mainmenu.lua:364
msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu.lua:399
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr ""
#: builtin/mainmenu.lua:852
msgid "Singleplayer"
msgstr "Бир кишилик"
#: builtin/mainmenu.lua:853
msgid "Client"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:854
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:855
msgid "Settings"
msgstr "Ырастоолор"
#: builtin/mainmenu.lua:856
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:863
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:865
msgid "Credits"
msgstr "Алкыштар"
#: builtin/mainmenu.lua:885
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr ""
#: builtin/mainmenu.lua:886
#: builtin/mainmenu.lua:819
msgid "Favorites:"
msgstr "Тандалмалар:"
#: builtin/mainmenu.lua:887
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr "Дареги/порту"
#: builtin/mainmenu.lua:888
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr "Аты/сырсөзү"
#: builtin/mainmenu.lua:891
#: builtin/mainmenu.lua:824
#, fuzzy
msgid "Public Serverlist"
msgstr "Жалпылык серверлердин тизмеси:"
#: builtin/mainmenu.lua:896 builtin/mainmenu.lua:941 builtin/mainmenu.lua:1004
#: builtin/modmgr.lua:271 src/keycode.cpp:229
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr "Өчүрүү"
#: builtin/mainmenu.lua:900
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr "Туташуу"
#: builtin/mainmenu.lua:942 builtin/mainmenu.lua:1005
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr "Жаңы"
#: builtin/mainmenu.lua:943 builtin/mainmenu.lua:1006
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr "Ырастоо"
#: builtin/mainmenu.lua:944
#: builtin/mainmenu.lua:877
#, fuzzy
msgid "Start Game"
msgstr "Оюнду баштоо/туташуу"
#: builtin/mainmenu.lua:945 builtin/mainmenu.lua:1008
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr "Дүйнөнү тандаңыз:"
#: builtin/mainmenu.lua:946
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr ""
#: builtin/mainmenu.lua:947 builtin/mainmenu.lua:1010
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr "Жаратуу режими"
#: builtin/mainmenu.lua:949 builtin/mainmenu.lua:1012
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr "Убалды күйгүзүү"
#: builtin/mainmenu.lua:951
#: builtin/mainmenu.lua:884
msgid "Public"
msgstr "Жалпылык"
#: builtin/mainmenu.lua:953
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr ""
#: builtin/mainmenu.lua:955
#: builtin/mainmenu.lua:888
#, fuzzy
msgid "Password"
msgstr "Эски сырсөз"
#: builtin/mainmenu.lua:956
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr ""
#: builtin/mainmenu.lua:966
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr ""
#: builtin/mainmenu.lua:967
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr "Кооз бактар"
#: builtin/mainmenu.lua:969
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr "Тегиз жарык"
#: builtin/mainmenu.lua:971
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr "3D-булуттар"
#: builtin/mainmenu.lua:973
#: builtin/mainmenu.lua:906
#, fuzzy
msgid "Opaque Water"
msgstr "Күңүрт суу"
#: builtin/mainmenu.lua:976
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr "Mip-текстуралоо"
#: builtin/mainmenu.lua:978
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr "Анизатропия чыпкалоосу"
#: builtin/mainmenu.lua:980
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr "Экисызык чыпкалоосу"
#: builtin/mainmenu.lua:982
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr "Үчсызык чыпкалоосу"
#: builtin/mainmenu.lua:985
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr "Көлөкөлөгүчтөр"
#: builtin/mainmenu.lua:987
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr ""
#: builtin/mainmenu.lua:989
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr "Бөлүкчөлөрдү күйгүзүү"
#: builtin/mainmenu.lua:991
#: builtin/mainmenu.lua:924
#, fuzzy
msgid "Finite Liquid"
msgstr "Чектүү суюктук"
#: builtin/mainmenu.lua:994
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr "Баскычтарды өзгөртүү"
#: builtin/mainmenu.lua:1007 src/keycode.cpp:248
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr "Ойноо"
#: builtin/mainmenu.lua:1009
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr ""
#: builtin/mainmenu.lua:1022
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr ""
#: builtin/mainmenu.lua:1023
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr ""
#: builtin/mainmenu.lua:1043
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr ""
#: builtin/mainmenu.lua:1071
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr ""
#: builtin/mainmenu.lua:1082
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr ""
#: builtin/mainmenu.lua:1092
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr ""
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr "Бир кишилик"
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr ""
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr "Ырастоолор"
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr "Алкыштар"
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr ""
@ -308,114 +316,133 @@ msgstr ""
msgid "Installed Mods:"
msgstr ""
#: builtin/modmgr.lua:243 builtin/modstore.lua:253
msgid "Install"
#: builtin/modmgr.lua:243
msgid "Add mod:"
msgstr ""
#: builtin/modmgr.lua:244
#, fuzzy
msgid "Download"
msgstr "Ылдый"
msgid "Local install"
msgstr ""
#: builtin/modmgr.lua:256
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
msgid "No mod description available"
msgstr ""
#: builtin/modmgr.lua:288
msgid "Mod information:"
msgstr ""
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr ""
#: builtin/modmgr.lua:260 builtin/modmgr.lua:402
#, fuzzy
msgid "Depends:"
msgstr "көз карандылыктары:"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:282
#: builtin/modmgr.lua:312
msgid "Uninstall selected mod"
msgstr ""
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr ""
#: builtin/modmgr.lua:287 src/keycode.cpp:227
#: builtin/modmgr.lua:329 src/keycode.cpp:227
msgid "Accept"
msgstr "Кабыл алуу"
#: builtin/modmgr.lua:381
#: builtin/modmgr.lua:423
#, fuzzy
msgid "World:"
msgstr "Дүйнөнү тандаңыз:"
#: builtin/modmgr.lua:385 builtin/modmgr.lua:387
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
#, fuzzy
msgid "Hide Game"
msgstr "Оюн"
#: builtin/modmgr.lua:391 builtin/modmgr.lua:393
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr ""
#: builtin/modmgr.lua:400
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr ""
#: builtin/modmgr.lua:405 src/guiKeyChangeMenu.cpp:187
#: builtin/modmgr.lua:444
#, fuzzy
msgid "Depends:"
msgstr "көз карандылыктары:"
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Сактоо"
#: builtin/modmgr.lua:422
#: builtin/modmgr.lua:464
#, fuzzy
msgid "Enable MP"
msgstr "Баарын күйгүзүү"
#: builtin/modmgr.lua:424
#: builtin/modmgr.lua:466
#, fuzzy
msgid "Disable MP"
msgstr "Баарын өчүрүү"
#: builtin/modmgr.lua:428 builtin/modmgr.lua:430
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr "күйгүзүлгөн"
#: builtin/modmgr.lua:436
#: builtin/modmgr.lua:478
#, fuzzy
msgid "Enable all"
msgstr "Баарын күйгүзүү"
#: builtin/modmgr.lua:551
#: builtin/modmgr.lua:577
#, fuzzy
msgid "Select Mod File:"
msgstr "Дүйнөнү тандаңыз:"
#: builtin/modmgr.lua:590
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr ""
#: builtin/modmgr.lua:591
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
msgstr ""
#: builtin/modmgr.lua:612
#: builtin/modmgr.lua:638
#, fuzzy
msgid "Failed to install $1 to $2"
msgstr "Дүйнөнү инициалдаштыруу катасы"
#: builtin/modmgr.lua:615
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
#: builtin/modmgr.lua:635
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
#: builtin/modmgr.lua:824
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
#: builtin/modmgr.lua:828
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
#: builtin/modmgr.lua:845
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
#: builtin/modmgr.lua:847
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr ""
@ -431,48 +458,52 @@ msgstr ""
msgid "re-Install"
msgstr ""
#: src/client.cpp:2915
#: builtin/modstore.lua:253
msgid "Install"
msgstr ""
#: src/client.cpp:2917
msgid "Item textures..."
msgstr "Буюм текстуралары..."
#: src/game.cpp:939
#: src/game.cpp:940
msgid "Loading..."
msgstr "Жүктөлүүдө..."
#: src/game.cpp:999
#: src/game.cpp:1000
msgid "Creating server...."
msgstr "Сервер жаратылууда...."
#: src/game.cpp:1015
#: src/game.cpp:1016
msgid "Creating client..."
msgstr "Клиент жаратылууда..."
#: src/game.cpp:1024
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr "Дареги чечилүүдө..."
#: src/game.cpp:1121
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr "Серверге туташтырылууда..."
#: src/game.cpp:1218
#: src/game.cpp:1219
#, fuzzy
msgid "Item definitions..."
msgstr "Буюм текстуралары..."
#: src/game.cpp:1225
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr ""
#: src/game.cpp:1232
#: src/game.cpp:1233
msgid "Media..."
msgstr ""
#: src/game.cpp:3405
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr "Оюн өчүрүлүүдө..."
#: src/game.cpp:3435
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
@ -488,12 +519,8 @@ msgstr "Сиз өлдүңүз."
msgid "Respawn"
msgstr "Кайтадан жаралуу"
#: src/guiFormSpecMenu.cpp:1569
msgid "Left click: Move all items, Right click: Move single item"
msgstr "Сол баскычы: Бардык буюмдарды ташуу, Оң баскычы: Бир буюмду ташуу"
#: src/guiFormSpecMenu.cpp:1595 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:140
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr "Улантуу"
@ -509,99 +536,99 @@ msgstr ""
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:290
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr "баскычты басыңыз"
#: src/guiKeyChangeMenu.cpp:400
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr "Алга"
#: src/guiKeyChangeMenu.cpp:401
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr "Артка"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr "Солго"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr "Оңго"
#: src/guiKeyChangeMenu.cpp:404
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr "Колдонуу"
#: src/guiKeyChangeMenu.cpp:405
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr "Секирүү"
#: src/guiKeyChangeMenu.cpp:406
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr "Уурданып басуу"
#: src/guiKeyChangeMenu.cpp:407
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr "Ыргытуу"
#: src/guiKeyChangeMenu.cpp:408
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr "Мүлк-шайман"
#: src/guiKeyChangeMenu.cpp:409
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr "Маек"
#: src/guiKeyChangeMenu.cpp:410
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr "Команда"
#: src/guiKeyChangeMenu.cpp:411
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr "Консоль"
#: src/guiKeyChangeMenu.cpp:412
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr "Учууга которуу"
#: src/guiKeyChangeMenu.cpp:413
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr "Тез басууга которуу"
#: src/guiKeyChangeMenu.cpp:414
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr ""
#: src/guiKeyChangeMenu.cpp:415
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr ""
#: src/guiKeyChangeMenu.cpp:416
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr ""
#: src/guiPasswordChange.cpp:107
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr "Эски сырсөз"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr "Жаңы сырсөз"
#: src/guiPasswordChange.cpp:142
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr "Сырсөздү аныктоо"
#: src/guiPasswordChange.cpp:160
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr "Өзгөртүү"
#: src/guiPasswordChange.cpp:169
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr "Сырсөздөр дал келген жок!"
@ -651,11 +678,11 @@ msgstr ""
"- Чычкан дөңгөлөгү: буюмду тандоо\n"
"- T: маек\n"
#: src/guiVolumeChange.cpp:108
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr "Үн көлөмү: "
#: src/guiVolumeChange.cpp:122
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr "Чыгуу"
@ -947,75 +974,30 @@ msgstr ""
msgid "Zoom"
msgstr "Масштаб"
#: src/main.cpp:1411
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr ""
#: src/main.cpp:1486
#: src/main.cpp:1547
msgid "Main Menu"
msgstr "Башкы меню"
#: src/main.cpp:1662
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr "Дүйнө тандалган жок жана дареги киргизилген жок. Кылууга эч нерсе жок."
#: src/main.cpp:1670
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr "Оюнду табуу же жүктөө мүмкүн эмес \""
#: src/main.cpp:1684
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr ""
#: src/main.cpp:1729
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr "Туташтыруу катасы (убактыңыз өтүп кеттиби?)"
#~ msgid "is required by:"
#~ msgstr "талап кылынганы:"
#~ msgid "Configuration saved. "
#~ msgstr "Конфигурация сакталды. "
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Эскертүү: Туура эмес конфигурация. "
#~ msgid "Multiplayer"
#~ msgstr "Көп кишилик"
#~ msgid "Advanced"
#~ msgstr "Кошумча"
#~ msgid "Show Public"
#~ msgstr "Жалпылыкты көрсөтүү"
#~ msgid "Show Favorites"
#~ msgstr "Тандалмаларды көрсөтүү"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Жергиликтүү серверди жүргүзүү үчүн даректи бош калтырыңыз."
#~ msgid "Create world"
#~ msgstr "Дүйнөнү жаратуу"
#~ msgid "Address required."
#~ msgstr "Дареги талап кылынат."
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Дүнөнү жаратуу мүмкүн эмес: Эч нерсе тандалган жок"
#~ msgid "Files to be deleted"
#~ msgstr "Өчүрүлө турган файлдар"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Дүйнөнү жаратуу мүмкүн эмес: Оюндар табылган жок"
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Дүйнөнү ырастоо мүмкүн эмес: Эч нерсе тандалган жок"
#~ msgid "Failed to delete all world files"
#~ msgstr "Бардык дүйнө файлдарын өчүрүү оңунан чыккан жок"
#~ msgid ""
#~ "Default Controls:\n"
#~ "- WASD: Walk\n"
@ -1040,3 +1022,55 @@ msgstr "Туташтыруу катасы (убактыңыз өтүп кетт
#~ "- I: мүлк-шайман\n"
#~ "- ESC: бул меню\n"
#~ "- T: маек\n"
#~ msgid "Failed to delete all world files"
#~ msgstr "Бардык дүйнө файлдарын өчүрүү оңунан чыккан жок"
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Дүйнөнү ырастоо мүмкүн эмес: Эч нерсе тандалган жок"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Дүйнөнү жаратуу мүмкүн эмес: Оюндар табылган жок"
#~ msgid "Files to be deleted"
#~ msgstr "Өчүрүлө турган файлдар"
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Дүнөнү жаратуу мүмкүн эмес: Эч нерсе тандалган жок"
#~ msgid "Address required."
#~ msgstr "Дареги талап кылынат."
#~ msgid "Create world"
#~ msgstr "Дүйнөнү жаратуу"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Жергиликтүү серверди жүргүзүү үчүн даректи бош калтырыңыз."
#~ msgid "Show Favorites"
#~ msgstr "Тандалмаларды көрсөтүү"
#~ msgid "Show Public"
#~ msgstr "Жалпылыкты көрсөтүү"
#~ msgid "Advanced"
#~ msgstr "Кошумча"
#~ msgid "Multiplayer"
#~ msgstr "Көп кишилик"
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Эскертүү: Туура эмес конфигурация. "
#~ msgid "Configuration saved. "
#~ msgstr "Конфигурация сакталды. "
#~ msgid "is required by:"
#~ msgstr "талап кылынганы:"
#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr "Сол баскычы: Бардык буюмдарды ташуу, Оң баскычы: Бир буюмду ташуу"
#, fuzzy
#~ msgid "Download"
#~ msgstr "Ылдый"

968
po/lt/minetest.po Normal file
View File

@ -0,0 +1,968 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: builtin/gamemgr.lua:23
msgid "Game Name"
msgstr ""
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr ""
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr ""
#: builtin/gamemgr.lua:118
msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
msgstr ""
#: builtin/gamemgr.lua:216
msgid "GAMES"
msgstr ""
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
msgid "Games"
msgstr ""
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr ""
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr ""
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr ""
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr ""
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr ""
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr ""
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr ""
#: builtin/mainmenu.lua:297
msgid "World name"
msgstr ""
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr ""
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr ""
#: builtin/mainmenu.lua:319
msgid "Delete World \"$1\"?"
msgstr ""
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr ""
#: builtin/mainmenu.lua:321
msgid "No"
msgstr ""
#: builtin/mainmenu.lua:364
msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr ""
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr ""
#: builtin/mainmenu.lua:819
msgid "Favorites:"
msgstr ""
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr ""
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr ""
#: builtin/mainmenu.lua:824
msgid "Public Serverlist"
msgstr ""
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr ""
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr ""
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr ""
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr ""
#: builtin/mainmenu.lua:877
msgid "Start Game"
msgstr ""
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr ""
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr ""
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr ""
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr ""
#: builtin/mainmenu.lua:884
msgid "Public"
msgstr ""
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr ""
#: builtin/mainmenu.lua:888
msgid "Password"
msgstr ""
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr ""
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr ""
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr ""
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr ""
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr ""
#: builtin/mainmenu.lua:906
msgid "Opaque Water"
msgstr ""
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr ""
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr ""
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr ""
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr ""
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr ""
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr ""
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr ""
#: builtin/mainmenu.lua:924
msgid "Finite Liquid"
msgstr ""
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr ""
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr ""
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr ""
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr ""
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr ""
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr ""
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr ""
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr ""
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr ""
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr ""
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr ""
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr ""
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr ""
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr ""
#: builtin/modmgr.lua:237
msgid "Installed Mods:"
msgstr ""
#: builtin/modmgr.lua:243
msgid "Add mod:"
msgstr ""
#: builtin/modmgr.lua:244
msgid "Local install"
msgstr ""
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
msgid "No mod description available"
msgstr ""
#: builtin/modmgr.lua:288
msgid "Mod information:"
msgstr ""
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr ""
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:312
msgid "Uninstall selected mod"
msgstr ""
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr ""
#: builtin/modmgr.lua:329 src/keycode.cpp:227
msgid "Accept"
msgstr ""
#: builtin/modmgr.lua:423
msgid "World:"
msgstr ""
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
msgid "Hide Game"
msgstr ""
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr ""
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr ""
#: builtin/modmgr.lua:444
msgid "Depends:"
msgstr ""
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr ""
#: builtin/modmgr.lua:464
msgid "Enable MP"
msgstr ""
#: builtin/modmgr.lua:466
msgid "Disable MP"
msgstr ""
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr ""
#: builtin/modmgr.lua:478
msgid "Enable all"
msgstr ""
#: builtin/modmgr.lua:577
msgid "Select Mod File:"
msgstr ""
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr ""
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
msgstr ""
#: builtin/modmgr.lua:638
msgid "Failed to install $1 to $2"
msgstr ""
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr ""
#: builtin/modstore.lua:183
msgid "Page $1 of $2"
msgstr ""
#: builtin/modstore.lua:243
msgid "Rating"
msgstr ""
#: builtin/modstore.lua:251
msgid "re-Install"
msgstr ""
#: builtin/modstore.lua:253
msgid "Install"
msgstr ""
#: src/client.cpp:2917
msgid "Item textures..."
msgstr ""
#: src/game.cpp:940
msgid "Loading..."
msgstr ""
#: src/game.cpp:1000
msgid "Creating server...."
msgstr ""
#: src/game.cpp:1016
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr ""
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr ""
#: src/game.cpp:1233
msgid "Media..."
msgstr ""
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
#: src/guiDeathScreen.cpp:96
msgid "You died."
msgstr ""
#: src/guiDeathScreen.cpp:104
msgid "Respawn"
msgstr ""
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr ""
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr ""
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr ""
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr ""
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr ""
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr ""
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr ""
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr ""
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr ""
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr ""
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr ""
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr ""
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr ""
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr ""
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr ""
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr ""
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr ""
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr ""
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr ""
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr ""
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr ""
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr ""
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr ""
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr ""
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr ""
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr ""
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr ""
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr ""
#: src/keycode.cpp:223
msgid "Left Button"
msgstr ""
#: src/keycode.cpp:223
msgid "Middle Button"
msgstr ""
#: src/keycode.cpp:223
msgid "Right Button"
msgstr ""
#: src/keycode.cpp:223
msgid "X Button 1"
msgstr ""
#: src/keycode.cpp:224
msgid "Back"
msgstr ""
#: src/keycode.cpp:224
msgid "Clear"
msgstr ""
#: src/keycode.cpp:224
msgid "Return"
msgstr ""
#: src/keycode.cpp:224
msgid "Tab"
msgstr ""
#: src/keycode.cpp:224
msgid "X Button 2"
msgstr ""
#: src/keycode.cpp:225
msgid "Capital"
msgstr ""
#: src/keycode.cpp:225
msgid "Control"
msgstr ""
#: src/keycode.cpp:225
msgid "Kana"
msgstr ""
#: src/keycode.cpp:225
msgid "Menu"
msgstr ""
#: src/keycode.cpp:225
msgid "Pause"
msgstr ""
#: src/keycode.cpp:225
msgid "Shift"
msgstr ""
#: src/keycode.cpp:226
msgid "Convert"
msgstr ""
#: src/keycode.cpp:226
msgid "Escape"
msgstr ""
#: src/keycode.cpp:226
msgid "Final"
msgstr ""
#: src/keycode.cpp:226
msgid "Junja"
msgstr ""
#: src/keycode.cpp:226
msgid "Kanji"
msgstr ""
#: src/keycode.cpp:226
msgid "Nonconvert"
msgstr ""
#: src/keycode.cpp:227
msgid "End"
msgstr ""
#: src/keycode.cpp:227
msgid "Home"
msgstr ""
#: src/keycode.cpp:227
msgid "Mode Change"
msgstr ""
#: src/keycode.cpp:227
msgid "Next"
msgstr ""
#: src/keycode.cpp:227
msgid "Prior"
msgstr ""
#: src/keycode.cpp:227
msgid "Space"
msgstr ""
#: src/keycode.cpp:228
msgid "Down"
msgstr ""
#: src/keycode.cpp:228
msgid "Execute"
msgstr ""
#: src/keycode.cpp:228
msgid "Print"
msgstr ""
#: src/keycode.cpp:228
msgid "Select"
msgstr ""
#: src/keycode.cpp:228
msgid "Up"
msgstr ""
#: src/keycode.cpp:229
msgid "Help"
msgstr ""
#: src/keycode.cpp:229
msgid "Insert"
msgstr ""
#: src/keycode.cpp:229
msgid "Snapshot"
msgstr ""
#: src/keycode.cpp:232
msgid "Left Windows"
msgstr ""
#: src/keycode.cpp:233
msgid "Apps"
msgstr ""
#: src/keycode.cpp:233
msgid "Numpad 0"
msgstr ""
#: src/keycode.cpp:233
msgid "Numpad 1"
msgstr ""
#: src/keycode.cpp:233
msgid "Right Windows"
msgstr ""
#: src/keycode.cpp:233
msgid "Sleep"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 2"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 3"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 4"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 5"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 6"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 7"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad *"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad +"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad -"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad /"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad 8"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad 9"
msgstr ""
#: src/keycode.cpp:239
msgid "Num Lock"
msgstr ""
#: src/keycode.cpp:239
msgid "Scroll Lock"
msgstr ""
#: src/keycode.cpp:240
msgid "Left Shift"
msgstr ""
#: src/keycode.cpp:240
msgid "Right Shift"
msgstr ""
#: src/keycode.cpp:241
msgid "Left Control"
msgstr ""
#: src/keycode.cpp:241
msgid "Left Menu"
msgstr ""
#: src/keycode.cpp:241
msgid "Right Control"
msgstr ""
#: src/keycode.cpp:241
msgid "Right Menu"
msgstr ""
#: src/keycode.cpp:243
msgid "Comma"
msgstr ""
#: src/keycode.cpp:243
msgid "Minus"
msgstr ""
#: src/keycode.cpp:243
msgid "Period"
msgstr ""
#: src/keycode.cpp:243
msgid "Plus"
msgstr ""
#: src/keycode.cpp:247
msgid "Attn"
msgstr ""
#: src/keycode.cpp:247
msgid "CrSel"
msgstr ""
#: src/keycode.cpp:248
msgid "Erase OEF"
msgstr ""
#: src/keycode.cpp:248
msgid "ExSel"
msgstr ""
#: src/keycode.cpp:248
msgid "OEM Clear"
msgstr ""
#: src/keycode.cpp:248
msgid "PA1"
msgstr ""
#: src/keycode.cpp:248
msgid "Zoom"
msgstr ""
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr ""
#: src/main.cpp:1547
msgid "Main Menu"
msgstr ""
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr ""
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr ""
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-07 22:01+0400\n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -21,12 +21,12 @@ msgstr ""
msgid "Game Name"
msgstr ""
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:301
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr ""
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:302 builtin/modmgr.lua:289
#: builtin/modmgr.lua:406 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr ""
@ -38,35 +38,35 @@ msgstr ""
msgid "GAMES"
msgstr ""
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:859
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
msgid "Games"
msgstr ""
#: builtin/gamemgr.lua:233
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr ""
#: builtin/gamemgr.lua:234
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr ""
#: builtin/gamemgr.lua:237
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr ""
#: builtin/gamemgr.lua:247
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr ""
#: builtin/gamemgr.lua:267
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr ""
#: builtin/gamemgr.lua:270
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr ""
#: builtin/mainmenu.lua:159
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr ""
@ -74,223 +74,231 @@ msgstr ""
msgid "World name"
msgstr ""
#: builtin/mainmenu.lua:298
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr ""
#: builtin/mainmenu.lua:300
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr ""
#: builtin/mainmenu.lua:314
#: builtin/mainmenu.lua:319
msgid "Delete World \"$1\"?"
msgstr ""
#: builtin/mainmenu.lua:315 builtin/modmgr.lua:846
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr ""
#: builtin/mainmenu.lua:316
#: builtin/mainmenu.lua:321
msgid "No"
msgstr ""
#: builtin/mainmenu.lua:384
#: builtin/mainmenu.lua:364
msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu.lua:399
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr ""
#: builtin/mainmenu.lua:852
msgid "Singleplayer"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:853
msgid "Client"
msgstr ""
#: builtin/mainmenu.lua:854
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:855
msgid "Settings"
msgstr ""
#: builtin/mainmenu.lua:856
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:863
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:865
msgid "Credits"
msgstr ""
#: builtin/mainmenu.lua:885
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr ""
#: builtin/mainmenu.lua:886
#: builtin/mainmenu.lua:819
msgid "Favorites:"
msgstr ""
#: builtin/mainmenu.lua:887
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr ""
#: builtin/mainmenu.lua:888
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr ""
#: builtin/mainmenu.lua:891
#: builtin/mainmenu.lua:824
msgid "Public Serverlist"
msgstr ""
#: builtin/mainmenu.lua:896 builtin/mainmenu.lua:941 builtin/mainmenu.lua:1004
#: builtin/modmgr.lua:271 src/keycode.cpp:229
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr ""
#: builtin/mainmenu.lua:900
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr ""
#: builtin/mainmenu.lua:942 builtin/mainmenu.lua:1005
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr ""
#: builtin/mainmenu.lua:943 builtin/mainmenu.lua:1006
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr ""
#: builtin/mainmenu.lua:944
#: builtin/mainmenu.lua:877
msgid "Start Game"
msgstr ""
#: builtin/mainmenu.lua:945 builtin/mainmenu.lua:1008
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr ""
#: builtin/mainmenu.lua:946
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr ""
#: builtin/mainmenu.lua:947 builtin/mainmenu.lua:1010
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr ""
#: builtin/mainmenu.lua:949 builtin/mainmenu.lua:1012
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr ""
#: builtin/mainmenu.lua:951
#: builtin/mainmenu.lua:884
msgid "Public"
msgstr ""
#: builtin/mainmenu.lua:953
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr ""
#: builtin/mainmenu.lua:955
#: builtin/mainmenu.lua:888
msgid "Password"
msgstr ""
#: builtin/mainmenu.lua:956
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr ""
#: builtin/mainmenu.lua:966
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr ""
#: builtin/mainmenu.lua:967
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr ""
#: builtin/mainmenu.lua:969
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr ""
#: builtin/mainmenu.lua:971
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr ""
#: builtin/mainmenu.lua:973
#: builtin/mainmenu.lua:906
msgid "Opaque Water"
msgstr ""
#: builtin/mainmenu.lua:976
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr ""
#: builtin/mainmenu.lua:978
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr ""
#: builtin/mainmenu.lua:980
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr ""
#: builtin/mainmenu.lua:982
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr ""
#: builtin/mainmenu.lua:985
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr ""
#: builtin/mainmenu.lua:987
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr ""
#: builtin/mainmenu.lua:989
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr ""
#: builtin/mainmenu.lua:991
#: builtin/mainmenu.lua:924
msgid "Finite Liquid"
msgstr ""
#: builtin/mainmenu.lua:994
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr ""
#: builtin/mainmenu.lua:1007 src/keycode.cpp:248
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr ""
#: builtin/mainmenu.lua:1009
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr ""
#: builtin/mainmenu.lua:1022
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr ""
#: builtin/mainmenu.lua:1023
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr ""
#: builtin/mainmenu.lua:1043
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr ""
#: builtin/mainmenu.lua:1071
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr ""
#: builtin/mainmenu.lua:1082
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr ""
#: builtin/mainmenu.lua:1092
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr ""
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr ""
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr ""
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr ""
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr ""
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr ""
@ -299,105 +307,125 @@ msgstr ""
msgid "Installed Mods:"
msgstr ""
#: builtin/modmgr.lua:243 builtin/modstore.lua:253
msgid "Install"
#: builtin/modmgr.lua:243
msgid "Add mod:"
msgstr ""
#: builtin/modmgr.lua:244
msgid "Download"
msgid "Local install"
msgstr ""
#: builtin/modmgr.lua:256
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
msgid "No mod description available"
msgstr ""
#: builtin/modmgr.lua:288
msgid "Mod information:"
msgstr ""
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr ""
#: builtin/modmgr.lua:260 builtin/modmgr.lua:402
msgid "Depends:"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:282
#: builtin/modmgr.lua:312
msgid "Uninstall selected mod"
msgstr ""
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr ""
#: builtin/modmgr.lua:287 src/keycode.cpp:227
#: builtin/modmgr.lua:329 src/keycode.cpp:227
msgid "Accept"
msgstr ""
#: builtin/modmgr.lua:381
#: builtin/modmgr.lua:423
msgid "World:"
msgstr ""
#: builtin/modmgr.lua:385 builtin/modmgr.lua:387
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
msgid "Hide Game"
msgstr ""
#: builtin/modmgr.lua:391 builtin/modmgr.lua:393
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr ""
#: builtin/modmgr.lua:400
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr ""
#: builtin/modmgr.lua:405 src/guiKeyChangeMenu.cpp:187
#: builtin/modmgr.lua:444
msgid "Depends:"
msgstr ""
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr ""
#: builtin/modmgr.lua:422
#: builtin/modmgr.lua:464
msgid "Enable MP"
msgstr ""
#: builtin/modmgr.lua:424
#: builtin/modmgr.lua:466
msgid "Disable MP"
msgstr ""
#: builtin/modmgr.lua:428 builtin/modmgr.lua:430
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr ""
#: builtin/modmgr.lua:436
#: builtin/modmgr.lua:478
msgid "Enable all"
msgstr ""
#: builtin/modmgr.lua:551
#: builtin/modmgr.lua:577
msgid "Select Mod File:"
msgstr ""
#: builtin/modmgr.lua:590
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr ""
#: builtin/modmgr.lua:591
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
msgstr ""
#: builtin/modmgr.lua:612
#: builtin/modmgr.lua:638
msgid "Failed to install $1 to $2"
msgstr ""
#: builtin/modmgr.lua:615
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
#: builtin/modmgr.lua:635
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
#: builtin/modmgr.lua:824
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
#: builtin/modmgr.lua:828
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
#: builtin/modmgr.lua:845
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
#: builtin/modmgr.lua:847
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr ""
@ -413,47 +441,51 @@ msgstr ""
msgid "re-Install"
msgstr ""
#: src/client.cpp:2915
#: builtin/modstore.lua:253
msgid "Install"
msgstr ""
#: src/client.cpp:2917
msgid "Item textures..."
msgstr ""
#: src/game.cpp:939
#: src/game.cpp:940
msgid "Loading..."
msgstr ""
#: src/game.cpp:999
#: src/game.cpp:1000
msgid "Creating server...."
msgstr ""
#: src/game.cpp:1015
#: src/game.cpp:1016
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1024
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1121
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:1218
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr ""
#: src/game.cpp:1225
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr ""
#: src/game.cpp:1232
#: src/game.cpp:1233
msgid "Media..."
msgstr ""
#: src/game.cpp:3405
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3435
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
@ -467,12 +499,8 @@ msgstr ""
msgid "Respawn"
msgstr ""
#: src/guiFormSpecMenu.cpp:1569
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
#: src/guiFormSpecMenu.cpp:1595 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:140
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr ""
@ -488,99 +516,99 @@ msgstr ""
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:290
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr ""
#: src/guiKeyChangeMenu.cpp:400
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:401
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr ""
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr ""
#: src/guiKeyChangeMenu.cpp:404
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:405
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr ""
#: src/guiKeyChangeMenu.cpp:406
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr ""
#: src/guiKeyChangeMenu.cpp:407
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr ""
#: src/guiKeyChangeMenu.cpp:408
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr ""
#: src/guiKeyChangeMenu.cpp:409
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr ""
#: src/guiKeyChangeMenu.cpp:410
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr ""
#: src/guiKeyChangeMenu.cpp:411
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr ""
#: src/guiKeyChangeMenu.cpp:412
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:413
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr ""
#: src/guiKeyChangeMenu.cpp:414
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr ""
#: src/guiKeyChangeMenu.cpp:415
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr ""
#: src/guiKeyChangeMenu.cpp:416
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr ""
#: src/guiPasswordChange.cpp:107
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr ""
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr ""
#: src/guiPasswordChange.cpp:142
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr ""
#: src/guiPasswordChange.cpp:160
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr ""
#: src/guiPasswordChange.cpp:169
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr ""
@ -619,11 +647,11 @@ msgid ""
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr ""
#: src/guiVolumeChange.cpp:122
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr ""
@ -915,26 +943,26 @@ msgstr ""
msgid "Zoom"
msgstr ""
#: src/main.cpp:1411
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr ""
#: src/main.cpp:1486
#: src/main.cpp:1547
msgid "Main Menu"
msgstr ""
#: src/main.cpp:1662
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
#: src/main.cpp:1670
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr ""
#: src/main.cpp:1684
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr ""
#: src/main.cpp:1729
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-07 22:01+0400\n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: 2013-06-21 15:48+0200\n"
"Last-Translator: sfan5 <sfan5@live.de>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -23,12 +23,12 @@ msgstr ""
msgid "Game Name"
msgstr "Spill"
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:301
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr "Opprett"
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:302 builtin/modmgr.lua:289
#: builtin/modmgr.lua:406 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Avbryt"
@ -40,36 +40,36 @@ msgstr ""
msgid "GAMES"
msgstr ""
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:859
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
#, fuzzy
msgid "Games"
msgstr "Spill"
#: builtin/gamemgr.lua:233
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr ""
#: builtin/gamemgr.lua:234
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr ""
#: builtin/gamemgr.lua:237
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr ""
#: builtin/gamemgr.lua:247
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr ""
#: builtin/gamemgr.lua:267
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr ""
#: builtin/gamemgr.lua:270
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr ""
#: builtin/mainmenu.lua:159
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr ""
@ -77,223 +77,231 @@ msgstr ""
msgid "World name"
msgstr "Navnet på verdenen"
#: builtin/mainmenu.lua:298
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr ""
#: builtin/mainmenu.lua:300
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr "Spill"
#: builtin/mainmenu.lua:314
#: builtin/mainmenu.lua:319
msgid "Delete World \"$1\"?"
msgstr ""
#: builtin/mainmenu.lua:315 builtin/modmgr.lua:846
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr "Ja"
#: builtin/mainmenu.lua:316
#: builtin/mainmenu.lua:321
msgid "No"
msgstr "Nei"
#: builtin/mainmenu.lua:384
#: builtin/mainmenu.lua:364
msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu.lua:399
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr ""
#: builtin/mainmenu.lua:852
msgid "Singleplayer"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:853
msgid "Client"
msgstr ""
#: builtin/mainmenu.lua:854
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:855
msgid "Settings"
msgstr ""
#: builtin/mainmenu.lua:856
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:863
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:865
msgid "Credits"
msgstr ""
#: builtin/mainmenu.lua:885
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr ""
#: builtin/mainmenu.lua:886
#: builtin/mainmenu.lua:819
msgid "Favorites:"
msgstr ""
#: builtin/mainmenu.lua:887
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr ""
#: builtin/mainmenu.lua:888
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr ""
#: builtin/mainmenu.lua:891
#: builtin/mainmenu.lua:824
msgid "Public Serverlist"
msgstr ""
#: builtin/mainmenu.lua:896 builtin/mainmenu.lua:941 builtin/mainmenu.lua:1004
#: builtin/modmgr.lua:271 src/keycode.cpp:229
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr ""
#: builtin/mainmenu.lua:900
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr ""
#: builtin/mainmenu.lua:942 builtin/mainmenu.lua:1005
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr ""
#: builtin/mainmenu.lua:943 builtin/mainmenu.lua:1006
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr ""
#: builtin/mainmenu.lua:944
#: builtin/mainmenu.lua:877
msgid "Start Game"
msgstr ""
#: builtin/mainmenu.lua:945 builtin/mainmenu.lua:1008
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr ""
#: builtin/mainmenu.lua:946
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr ""
#: builtin/mainmenu.lua:947 builtin/mainmenu.lua:1010
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr ""
#: builtin/mainmenu.lua:949 builtin/mainmenu.lua:1012
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr ""
#: builtin/mainmenu.lua:951
#: builtin/mainmenu.lua:884
msgid "Public"
msgstr ""
#: builtin/mainmenu.lua:953
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr ""
#: builtin/mainmenu.lua:955
#: builtin/mainmenu.lua:888
msgid "Password"
msgstr ""
#: builtin/mainmenu.lua:956
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr ""
#: builtin/mainmenu.lua:966
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr ""
#: builtin/mainmenu.lua:967
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr ""
#: builtin/mainmenu.lua:969
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr ""
#: builtin/mainmenu.lua:971
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr ""
#: builtin/mainmenu.lua:973
#: builtin/mainmenu.lua:906
msgid "Opaque Water"
msgstr ""
#: builtin/mainmenu.lua:976
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr ""
#: builtin/mainmenu.lua:978
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr ""
#: builtin/mainmenu.lua:980
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr ""
#: builtin/mainmenu.lua:982
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr ""
#: builtin/mainmenu.lua:985
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr ""
#: builtin/mainmenu.lua:987
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr ""
#: builtin/mainmenu.lua:989
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr ""
#: builtin/mainmenu.lua:991
#: builtin/mainmenu.lua:924
msgid "Finite Liquid"
msgstr ""
#: builtin/mainmenu.lua:994
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr ""
#: builtin/mainmenu.lua:1007 src/keycode.cpp:248
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr ""
#: builtin/mainmenu.lua:1009
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr ""
#: builtin/mainmenu.lua:1022
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr ""
#: builtin/mainmenu.lua:1023
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr ""
#: builtin/mainmenu.lua:1043
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr ""
#: builtin/mainmenu.lua:1071
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr ""
#: builtin/mainmenu.lua:1082
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr ""
#: builtin/mainmenu.lua:1092
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr ""
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr ""
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr ""
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr ""
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr ""
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr ""
@ -302,111 +310,131 @@ msgstr ""
msgid "Installed Mods:"
msgstr ""
#: builtin/modmgr.lua:243 builtin/modstore.lua:253
msgid "Install"
#: builtin/modmgr.lua:243
msgid "Add mod:"
msgstr ""
#: builtin/modmgr.lua:244
msgid "Download"
msgid "Local install"
msgstr ""
#: builtin/modmgr.lua:256
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
msgid "No mod description available"
msgstr ""
#: builtin/modmgr.lua:288
msgid "Mod information:"
msgstr ""
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr ""
#: builtin/modmgr.lua:260 builtin/modmgr.lua:402
#, fuzzy
msgid "Depends:"
msgstr "Avhenger av:"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:282
#: builtin/modmgr.lua:312
msgid "Uninstall selected mod"
msgstr ""
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr ""
#: builtin/modmgr.lua:287 src/keycode.cpp:227
#: builtin/modmgr.lua:329 src/keycode.cpp:227
msgid "Accept"
msgstr ""
#: builtin/modmgr.lua:381
#: builtin/modmgr.lua:423
#, fuzzy
msgid "World:"
msgstr "Navnet på verdenen"
#: builtin/modmgr.lua:385 builtin/modmgr.lua:387
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
#, fuzzy
msgid "Hide Game"
msgstr "Spill"
#: builtin/modmgr.lua:391 builtin/modmgr.lua:393
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr ""
#: builtin/modmgr.lua:400
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr ""
#: builtin/modmgr.lua:405 src/guiKeyChangeMenu.cpp:187
#: builtin/modmgr.lua:444
#, fuzzy
msgid "Depends:"
msgstr "Avhenger av:"
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Lagre"
#: builtin/modmgr.lua:422
#: builtin/modmgr.lua:464
#, fuzzy
msgid "Enable MP"
msgstr "Aktiver Alle"
#: builtin/modmgr.lua:424
#: builtin/modmgr.lua:466
#, fuzzy
msgid "Disable MP"
msgstr "Deaktiver Alle"
#: builtin/modmgr.lua:428 builtin/modmgr.lua:430
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr "aktivert"
#: builtin/modmgr.lua:436
#: builtin/modmgr.lua:478
#, fuzzy
msgid "Enable all"
msgstr "Aktiver Alle"
#: builtin/modmgr.lua:551
#: builtin/modmgr.lua:577
msgid "Select Mod File:"
msgstr ""
#: builtin/modmgr.lua:590
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr ""
#: builtin/modmgr.lua:591
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
msgstr ""
#: builtin/modmgr.lua:612
#: builtin/modmgr.lua:638
msgid "Failed to install $1 to $2"
msgstr ""
#: builtin/modmgr.lua:615
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
#: builtin/modmgr.lua:635
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
#: builtin/modmgr.lua:824
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
#: builtin/modmgr.lua:828
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
#: builtin/modmgr.lua:845
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
#: builtin/modmgr.lua:847
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr ""
@ -422,47 +450,51 @@ msgstr ""
msgid "re-Install"
msgstr ""
#: src/client.cpp:2915
#: builtin/modstore.lua:253
msgid "Install"
msgstr ""
#: src/client.cpp:2917
msgid "Item textures..."
msgstr ""
#: src/game.cpp:939
#: src/game.cpp:940
msgid "Loading..."
msgstr ""
#: src/game.cpp:999
#: src/game.cpp:1000
msgid "Creating server...."
msgstr ""
#: src/game.cpp:1015
#: src/game.cpp:1016
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1024
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1121
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:1218
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr ""
#: src/game.cpp:1225
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr ""
#: src/game.cpp:1232
#: src/game.cpp:1233
msgid "Media..."
msgstr ""
#: src/game.cpp:3405
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3435
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
@ -476,12 +508,8 @@ msgstr "Du døde."
msgid "Respawn"
msgstr ""
#: src/guiFormSpecMenu.cpp:1569
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
#: src/guiFormSpecMenu.cpp:1595 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:140
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr ""
@ -497,99 +525,99 @@ msgstr ""
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:290
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr ""
#: src/guiKeyChangeMenu.cpp:400
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:401
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr ""
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr ""
#: src/guiKeyChangeMenu.cpp:404
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:405
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr ""
#: src/guiKeyChangeMenu.cpp:406
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr ""
#: src/guiKeyChangeMenu.cpp:407
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr ""
#: src/guiKeyChangeMenu.cpp:408
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr ""
#: src/guiKeyChangeMenu.cpp:409
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr ""
#: src/guiKeyChangeMenu.cpp:410
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr ""
#: src/guiKeyChangeMenu.cpp:411
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr ""
#: src/guiKeyChangeMenu.cpp:412
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:413
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr ""
#: src/guiKeyChangeMenu.cpp:414
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr ""
#: src/guiKeyChangeMenu.cpp:415
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr ""
#: src/guiKeyChangeMenu.cpp:416
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr ""
#: src/guiPasswordChange.cpp:107
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr ""
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr ""
#: src/guiPasswordChange.cpp:142
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr ""
#: src/guiPasswordChange.cpp:160
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr ""
#: src/guiPasswordChange.cpp:169
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr ""
@ -628,11 +656,11 @@ msgid ""
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr ""
#: src/guiVolumeChange.cpp:122
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr ""
@ -924,35 +952,36 @@ msgstr ""
msgid "Zoom"
msgstr ""
#: src/main.cpp:1411
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr ""
#: src/main.cpp:1486
#: src/main.cpp:1547
msgid "Main Menu"
msgstr ""
#: src/main.cpp:1662
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
#: src/main.cpp:1670
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr ""
#: src/main.cpp:1684
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr ""
#: src/main.cpp:1729
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr ""
#~ msgid "is required by:"
#~ msgstr "trengs av:"
#~ msgid "Configuration saved. "
#~ msgstr "Konfigurasjon lagret. "
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "Advarsel: Noen modifikasjoner er ikke konfigurert enda. \n"
#~ "De vil bli aktivert som standard når du lagrer konfigurasjonen."
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
@ -961,9 +990,8 @@ msgstr ""
#~ "Advarsel: Noen konfigurerte modifikasjoner mangler. \n"
#~ "Instillingene deres vil bli fjernet når du lagrer konfigurasjonen."
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "Advarsel: Noen modifikasjoner er ikke konfigurert enda. \n"
#~ "De vil bli aktivert som standard når du lagrer konfigurasjonen."
#~ msgid "Configuration saved. "
#~ msgstr "Konfigurasjon lagret. "
#~ msgid "is required by:"
#~ msgstr "trengs av:"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-07 22:01+0400\n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: 2013-09-05 12:47+0200\n"
"Last-Translator: Leonardo Costa <k95leo@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -22,12 +22,12 @@ msgstr ""
msgid "Game Name"
msgstr "Nome do Jogo"
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:301
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr "Criar"
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:302 builtin/modmgr.lua:289
#: builtin/modmgr.lua:406 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Cancelar"
@ -40,35 +40,35 @@ msgstr ""
msgid "GAMES"
msgstr "JOGOS"
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:859
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
msgid "Games"
msgstr "Jogos"
#: builtin/gamemgr.lua:233
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr "Extras:"
#: builtin/gamemgr.lua:234
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr "editar jogo"
#: builtin/gamemgr.lua:237
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr "novo jogo"
#: builtin/gamemgr.lua:247
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr "EDITAR JOGO"
#: builtin/gamemgr.lua:267
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr "Remover extra selecionado"
#: builtin/gamemgr.lua:270
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr "<<-- Adicionar extra"
#: builtin/mainmenu.lua:159
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr "Ok"
@ -76,223 +76,231 @@ msgstr "Ok"
msgid "World name"
msgstr "Nome do Mundo"
#: builtin/mainmenu.lua:298
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr "Geração de Mapa"
#: builtin/mainmenu.lua:300
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr "Jogo"
#: builtin/mainmenu.lua:314
#: builtin/mainmenu.lua:319
msgid "Delete World \"$1\"?"
msgstr "Eliminar Mundo \"$1\"?"
#: builtin/mainmenu.lua:315 builtin/modmgr.lua:846
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr "Sim"
#: builtin/mainmenu.lua:316
#: builtin/mainmenu.lua:321
msgid "No"
msgstr "Não"
#: builtin/mainmenu.lua:384
#: builtin/mainmenu.lua:364
msgid "A world named \"$1\" already exists"
msgstr "O mundo com o nome \"$1\" já existe"
#: builtin/mainmenu.lua:399
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr "Mundo sem nome ou nenhum jogo selecionado"
#: builtin/mainmenu.lua:852
msgid "Singleplayer"
msgstr "Um Jogador"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:853
msgid "Client"
msgstr "Cliente"
#: builtin/mainmenu.lua:854
msgid "Server"
msgstr "Servidor"
#: builtin/mainmenu.lua:855
msgid "Settings"
msgstr "Definições"
#: builtin/mainmenu.lua:856
msgid "Texture Packs"
msgstr "Pacotes de Texturas"
#: builtin/mainmenu.lua:863
msgid "Mods"
msgstr "Extras"
#: builtin/mainmenu.lua:865
msgid "Credits"
msgstr "Créditos"
#: builtin/mainmenu.lua:885
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr "CLIENTE"
#: builtin/mainmenu.lua:886
#: builtin/mainmenu.lua:819
msgid "Favorites:"
msgstr "Favoritos:"
#: builtin/mainmenu.lua:887
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr "Endereço/Porta"
#: builtin/mainmenu.lua:888
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr "Nome/Senha"
#: builtin/mainmenu.lua:891
#: builtin/mainmenu.lua:824
msgid "Public Serverlist"
msgstr "Lista de Servidores Públicos"
#: builtin/mainmenu.lua:896 builtin/mainmenu.lua:941 builtin/mainmenu.lua:1004
#: builtin/modmgr.lua:271 src/keycode.cpp:229
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr "Eliminar"
#: builtin/mainmenu.lua:900
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr "Ligar"
#: builtin/mainmenu.lua:942 builtin/mainmenu.lua:1005
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr "Novo"
#: builtin/mainmenu.lua:943 builtin/mainmenu.lua:1006
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr "Configurar"
#: builtin/mainmenu.lua:944
#: builtin/mainmenu.lua:877
msgid "Start Game"
msgstr "Jogar"
#: builtin/mainmenu.lua:945 builtin/mainmenu.lua:1008
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr "Seleccionar Mundo:"
#: builtin/mainmenu.lua:946
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr "INICIAR SERVIDOR"
#: builtin/mainmenu.lua:947 builtin/mainmenu.lua:1010
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr "Modo Criativo"
#: builtin/mainmenu.lua:949 builtin/mainmenu.lua:1012
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr "Ativar Dano"
#: builtin/mainmenu.lua:951
#: builtin/mainmenu.lua:884
msgid "Public"
msgstr "Público"
#: builtin/mainmenu.lua:953
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr "Nome"
#: builtin/mainmenu.lua:955
#: builtin/mainmenu.lua:888
msgid "Password"
msgstr "Senha"
#: builtin/mainmenu.lua:956
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr "Porta"
#: builtin/mainmenu.lua:966
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr "DEFINIÇÕES"
#: builtin/mainmenu.lua:967
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr "Árvores Melhoradas"
#: builtin/mainmenu.lua:969
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr "Iluminação Suave"
#: builtin/mainmenu.lua:971
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr "Nuvens 3D"
#: builtin/mainmenu.lua:973
#: builtin/mainmenu.lua:906
msgid "Opaque Water"
msgstr "Água Opaca"
#: builtin/mainmenu.lua:976
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr "Mip-Mapping"
#: builtin/mainmenu.lua:978
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr "Filtro Anisotrópico"
#: builtin/mainmenu.lua:980
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr "Filtro Bi-Linear"
#: builtin/mainmenu.lua:982
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr "Filtro Tri-Linear"
#: builtin/mainmenu.lua:985
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr "Sombras"
#: builtin/mainmenu.lua:987
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr "Pré-carregamento dos itens"
#: builtin/mainmenu.lua:989
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr "Ativar Partículas"
#: builtin/mainmenu.lua:991
#: builtin/mainmenu.lua:924
msgid "Finite Liquid"
msgstr "Líquido Finito"
#: builtin/mainmenu.lua:994
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr "Mudar teclas"
#: builtin/mainmenu.lua:1007 src/keycode.cpp:248
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr "Jogar"
#: builtin/mainmenu.lua:1009
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr "Um Jogador"
#: builtin/mainmenu.lua:1022
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr "Selecione um pacote de texturas:"
#: builtin/mainmenu.lua:1023
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr "PACOTES DE TEXTURAS"
#: builtin/mainmenu.lua:1043
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr "Sem informação"
#: builtin/mainmenu.lua:1071
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr "Desenvolvedores Chave"
#: builtin/mainmenu.lua:1082
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr "Contribuintes Ativos"
#: builtin/mainmenu.lua:1092
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr "Antigos Contribuintes"
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr "Um Jogador"
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr "Cliente"
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr "Servidor"
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr "Definições"
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr "Pacotes de Texturas"
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr "Extras"
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr "Créditos"
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr "EXTRAS"
@ -301,78 +309,103 @@ msgstr "EXTRAS"
msgid "Installed Mods:"
msgstr "Extras Instalados:"
#: builtin/modmgr.lua:243 builtin/modstore.lua:253
msgid "Install"
msgstr "Instalar"
#: builtin/modmgr.lua:243
#, fuzzy
msgid "Add mod:"
msgstr "<<-- Adicionar extra"
#: builtin/modmgr.lua:244
msgid "Download"
msgstr "Descarregar"
#, fuzzy
msgid "Local install"
msgstr "Instalar"
#: builtin/modmgr.lua:256
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
#, fuzzy
msgid "No mod description available"
msgstr "Sem informação"
#: builtin/modmgr.lua:288
#, fuzzy
msgid "Mod information:"
msgstr "Sem informação"
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr "Renomear"
#: builtin/modmgr.lua:260 builtin/modmgr.lua:402
msgid "Depends:"
msgstr "Depende de:"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:282
#: builtin/modmgr.lua:312
#, fuzzy
msgid "Uninstall selected mod"
msgstr "Remover extra selecionado"
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr "Renomear Pacote de Extras:"
#: builtin/modmgr.lua:287 src/keycode.cpp:227
#: builtin/modmgr.lua:329 src/keycode.cpp:227
msgid "Accept"
msgstr "Aceitar"
#: builtin/modmgr.lua:381
#: builtin/modmgr.lua:423
msgid "World:"
msgstr "Mundo:"
#: builtin/modmgr.lua:385 builtin/modmgr.lua:387
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
msgid "Hide Game"
msgstr "Esconder Jogo"
#: builtin/modmgr.lua:391 builtin/modmgr.lua:393
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr ""
#: builtin/modmgr.lua:400
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr "Extra:"
#: builtin/modmgr.lua:405 src/guiKeyChangeMenu.cpp:187
#: builtin/modmgr.lua:444
msgid "Depends:"
msgstr "Depende de:"
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Guardar"
#: builtin/modmgr.lua:422
#: builtin/modmgr.lua:464
#, fuzzy
msgid "Enable MP"
msgstr "Ativar Tudo"
#: builtin/modmgr.lua:424
#: builtin/modmgr.lua:466
#, fuzzy
msgid "Disable MP"
msgstr "Desativar Tudo"
#: builtin/modmgr.lua:428 builtin/modmgr.lua:430
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr "ativo"
#: builtin/modmgr.lua:436
#: builtin/modmgr.lua:478
#, fuzzy
msgid "Enable all"
msgstr "Ativar Tudo"
#: builtin/modmgr.lua:551
#: builtin/modmgr.lua:577
msgid "Select Mod File:"
msgstr "Seleccionar ficheiro de Extra:"
#: builtin/modmgr.lua:590
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr "Instalar Extra: ficheiro: \"$1\""
#: builtin/modmgr.lua:591
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
@ -380,31 +413,31 @@ msgstr ""
"\n"
"Instalar Extra: tipo de ficheiro desconhecido \"$1\""
#: builtin/modmgr.lua:612
#: builtin/modmgr.lua:638
msgid "Failed to install $1 to $2"
msgstr "Falha ao instalar de $1 ao $2"
#: builtin/modmgr.lua:615
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
#: builtin/modmgr.lua:635
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
#: builtin/modmgr.lua:824
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr "Mensagem de Extra: falhou a eliminação de \"$1\""
#: builtin/modmgr.lua:828
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr "Mensagem de extra: caminho inválido \"$1\""
#: builtin/modmgr.lua:845
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr "Tem a certeza que pertende eliminar \"$1\"?"
#: builtin/modmgr.lua:847
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr "Não, é claro que não!"
@ -420,47 +453,51 @@ msgstr "Classificação"
msgid "re-Install"
msgstr "re-Instalar"
#: src/client.cpp:2915
#: builtin/modstore.lua:253
msgid "Install"
msgstr "Instalar"
#: src/client.cpp:2917
msgid "Item textures..."
msgstr "Texturas dos items..."
#: src/game.cpp:939
#: src/game.cpp:940
msgid "Loading..."
msgstr "A carregar..."
#: src/game.cpp:999
#: src/game.cpp:1000
msgid "Creating server...."
msgstr "A criar servidor..."
#: src/game.cpp:1015
#: src/game.cpp:1016
msgid "Creating client..."
msgstr "A criar cliente..."
#: src/game.cpp:1024
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr "A resolver endereço..."
#: src/game.cpp:1121
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr "A conectar ao servidor..."
#: src/game.cpp:1218
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr "Definições dos Itens..."
#: src/game.cpp:1225
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr ""
#: src/game.cpp:1232
#: src/game.cpp:1233
msgid "Media..."
msgstr "Dados..."
#: src/game.cpp:3405
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr "A desligar..."
#: src/game.cpp:3435
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
@ -476,12 +513,8 @@ msgstr "Morreste."
msgid "Respawn"
msgstr "Reaparecer"
#: src/guiFormSpecMenu.cpp:1569
msgid "Left click: Move all items, Right click: Move single item"
msgstr "Botão esq: Mover todos os itens Botão dir: Mover um item"
#: src/guiFormSpecMenu.cpp:1595 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:140
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr "Continuar"
@ -497,99 +530,99 @@ msgstr "\"Use\" = descer"
msgid "Double tap \"jump\" to toggle fly"
msgstr "Carregue duas vezes em \"saltar\" para ativar o vôo"
#: src/guiKeyChangeMenu.cpp:290
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr "Tecla já em uso"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr "pressione a tecla"
#: src/guiKeyChangeMenu.cpp:400
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr "Avançar"
#: src/guiKeyChangeMenu.cpp:401
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr "Recuar"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr "Esquerda"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr "Direita"
#: src/guiKeyChangeMenu.cpp:404
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr "Usar"
#: src/guiKeyChangeMenu.cpp:405
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr "Saltar"
#: src/guiKeyChangeMenu.cpp:406
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr "Agachar"
#: src/guiKeyChangeMenu.cpp:407
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr "Largar"
#: src/guiKeyChangeMenu.cpp:408
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr "Inventário"
#: src/guiKeyChangeMenu.cpp:409
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr "Conversa"
#: src/guiKeyChangeMenu.cpp:410
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr "Comando"
#: src/guiKeyChangeMenu.cpp:411
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr "Consola"
#: src/guiKeyChangeMenu.cpp:412
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr "Ativar/Desativar vôo"
#: src/guiKeyChangeMenu.cpp:413
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr "Ativar/Desativar correr"
#: src/guiKeyChangeMenu.cpp:414
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr "Ativar/Desativar noclip"
#: src/guiKeyChangeMenu.cpp:415
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr "Seleccionar Distância"
#: src/guiKeyChangeMenu.cpp:416
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr "Imprimir stacks"
#: src/guiPasswordChange.cpp:107
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr "Senha antiga"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr "Senha Nova"
#: src/guiPasswordChange.cpp:142
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr "Confirmar Senha"
#: src/guiPasswordChange.cpp:160
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr "Mudar"
#: src/guiPasswordChange.cpp:169
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr "Senhas não correspondem!"
@ -639,11 +672,11 @@ msgstr ""
"- Roda do rato: seleccionar item\n"
"- T: conversação\n"
#: src/guiVolumeChange.cpp:108
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr "Volume do som: "
#: src/guiVolumeChange.cpp:122
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr "Sair"
@ -935,78 +968,44 @@ msgstr "PAL"
msgid "Zoom"
msgstr "Zoom"
#: src/main.cpp:1411
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr ""
#: src/main.cpp:1486
#: src/main.cpp:1547
msgid "Main Menu"
msgstr "Menu Principal"
#: src/main.cpp:1662
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
"Nenhum mundo seleccionado e nenhum endereço providenciado. Nada para fazer."
#: src/main.cpp:1670
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr "Não foi possível encontrar ou carregar jogo \""
#: src/main.cpp:1684
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr "gamespec inválido."
#: src/main.cpp:1729
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr "Erro de conexão (excedeu tempo?)"
#~ msgid "is required by:"
#~ msgstr "é necessário pelo:"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "Atenção: Alguns mods ainda não estão configurados.\n"
#~ "Eles vão ser ativados por predefinição quando guardar a configuração. "
#~ msgid "Configuration saved. "
#~ msgstr "Configuração gravada. "
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Atenção: Configuração não compatível. "
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Não foi possível criar mundo: Nome com caracteres inválidos"
#~ msgid "Multiplayer"
#~ msgstr "Vários jogadores"
#~ msgid "Advanced"
#~ msgstr "Avançado"
#~ msgid "Show Public"
#~ msgstr "Mostrar Públicos"
#~ msgid "Show Favorites"
#~ msgstr "Mostrar Favoritos"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Deixe endereço em branco para iniciar servidor local."
#~ msgid "Create world"
#~ msgstr "Criar mundo"
#~ msgid "Address required."
#~ msgstr "Endereço necessário."
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Não foi possível eliminar mundo: Nada seleccionado"
#~ msgid "Files to be deleted"
#~ msgstr "Ficheiros para eliminar"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Não foi possível criar mundo: Não foram detectados jogos"
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Não foi possível configurar mundo: Nada seleccionado"
#~ msgid "Failed to delete all world files"
#~ msgstr "Falhou a remoção de todos os ficheiros dos mundos"
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
#~ "Their setting will be removed when you save the configuration. "
#~ msgstr ""
#~ "Atenção: Alguns mods configurados estão em falta.\n"
#~ "As suas definições vão ser removidas quando gravar a configuração. "
#~ msgid ""
#~ "Default Controls:\n"
@ -1033,16 +1032,56 @@ msgstr "Erro de conexão (excedeu tempo?)"
#~ "- ESC: Este menu\n"
#~ "- T: Chat\n"
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
#~ "Their setting will be removed when you save the configuration. "
#~ msgstr ""
#~ "Atenção: Alguns mods configurados estão em falta.\n"
#~ "As suas definições vão ser removidas quando gravar a configuração. "
#~ msgid "Failed to delete all world files"
#~ msgstr "Falhou a remoção de todos os ficheiros dos mundos"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "Atenção: Alguns mods ainda não estão configurados.\n"
#~ "Eles vão ser ativados por predefinição quando guardar a configuração. "
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Não foi possível configurar mundo: Nada seleccionado"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Não foi possível criar mundo: Não foram detectados jogos"
#~ msgid "Files to be deleted"
#~ msgstr "Ficheiros para eliminar"
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Não foi possível eliminar mundo: Nada seleccionado"
#~ msgid "Address required."
#~ msgstr "Endereço necessário."
#~ msgid "Create world"
#~ msgstr "Criar mundo"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Deixe endereço em branco para iniciar servidor local."
#~ msgid "Show Favorites"
#~ msgstr "Mostrar Favoritos"
#~ msgid "Show Public"
#~ msgstr "Mostrar Públicos"
#~ msgid "Advanced"
#~ msgstr "Avançado"
#~ msgid "Multiplayer"
#~ msgstr "Vários jogadores"
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Não foi possível criar mundo: Nome com caracteres inválidos"
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Atenção: Configuração não compatível. "
#~ msgid "Configuration saved. "
#~ msgstr "Configuração gravada. "
#~ msgid "is required by:"
#~ msgstr "é necessário pelo:"
#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr "Botão esq: Mover todos os itens Botão dir: Mover um item"
#~ msgid "Download"
#~ msgstr "Descarregar"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-07 22:01+0400\n"
"PO-Revision-Date: 2013-08-30 23:15+0200\n"
"Last-Translator: Ilya Zhuravlev <zhuravlevilya@ya.ru>\n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: 2013-11-22 11:45+0200\n"
"Last-Translator: Anton Tsyganenko <anton-tsyganenko@yandex.ru>\n"
"Language-Team: Russian\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
@ -23,12 +23,12 @@ msgstr ""
msgid "Game Name"
msgstr "Название"
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:301
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr "Создать"
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:302 builtin/modmgr.lua:289
#: builtin/modmgr.lua:406 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Отменить"
@ -40,35 +40,35 @@ msgstr "Gamemgr: Не могу скопировать мод \"$1\" в игру
msgid "GAMES"
msgstr "ИГРЫ"
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:859
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
msgid "Games"
msgstr "Игры"
#: builtin/gamemgr.lua:233
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr "Моды:"
#: builtin/gamemgr.lua:234
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr "Редактировать"
#: builtin/gamemgr.lua:237
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr "Создать игру"
#: builtin/gamemgr.lua:247
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr "РЕДАКТИРОВАНИЕ"
#: builtin/gamemgr.lua:267
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr "Удалить мод"
#: builtin/gamemgr.lua:270
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr "<<-- Добавить мод"
#: builtin/mainmenu.lua:159
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr "Ok"
@ -76,223 +76,231 @@ msgstr "Ok"
msgid "World name"
msgstr "Название мира"
#: builtin/mainmenu.lua:298
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr "Генератор карты"
#: builtin/mainmenu.lua:300
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr "Игра"
#: builtin/mainmenu.lua:314
#: builtin/mainmenu.lua:319
msgid "Delete World \"$1\"?"
msgstr "Удалить мир \"$1\"?"
#: builtin/mainmenu.lua:315 builtin/modmgr.lua:846
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr "Да"
#: builtin/mainmenu.lua:316
#: builtin/mainmenu.lua:321
msgid "No"
msgstr "Нет"
#: builtin/mainmenu.lua:384
#: builtin/mainmenu.lua:364
msgid "A world named \"$1\" already exists"
msgstr "Мир под названием \"$1\" уже существует"
#: builtin/mainmenu.lua:399
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr "Не задано имя мира или не выбрана игра"
#: builtin/mainmenu.lua:852
msgid "Singleplayer"
msgstr "Одиночная игра"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:853
msgid "Client"
msgstr "Клиент"
#: builtin/mainmenu.lua:854
msgid "Server"
msgstr "Сервер"
#: builtin/mainmenu.lua:855
msgid "Settings"
msgstr "Настройки"
#: builtin/mainmenu.lua:856
msgid "Texture Packs"
msgstr "Пакеты текстур"
#: builtin/mainmenu.lua:863
msgid "Mods"
msgstr "Моды"
#: builtin/mainmenu.lua:865
msgid "Credits"
msgstr "Благодарности"
#: builtin/mainmenu.lua:885
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr "КЛИЕНТ"
#: builtin/mainmenu.lua:886
#: builtin/mainmenu.lua:819
msgid "Favorites:"
msgstr "Избранное:"
#: builtin/mainmenu.lua:887
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr "Адрес/Порт"
#: builtin/mainmenu.lua:888
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr "Имя/Пароль"
#: builtin/mainmenu.lua:891
#: builtin/mainmenu.lua:824
msgid "Public Serverlist"
msgstr "Список публичных серверов"
#: builtin/mainmenu.lua:896 builtin/mainmenu.lua:941 builtin/mainmenu.lua:1004
#: builtin/modmgr.lua:271 src/keycode.cpp:229
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr "Удалить"
#: builtin/mainmenu.lua:900
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr "Подключиться"
#: builtin/mainmenu.lua:942 builtin/mainmenu.lua:1005
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr "Новый"
#: builtin/mainmenu.lua:943 builtin/mainmenu.lua:1006
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr "Настроить"
#: builtin/mainmenu.lua:944
#: builtin/mainmenu.lua:877
msgid "Start Game"
msgstr "Начать игру"
#: builtin/mainmenu.lua:945 builtin/mainmenu.lua:1008
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr "Выберите мир:"
#: builtin/mainmenu.lua:946
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr "СЕРВЕР"
#: builtin/mainmenu.lua:947 builtin/mainmenu.lua:1010
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr "Режим создания"
#: builtin/mainmenu.lua:949 builtin/mainmenu.lua:1012
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr "Включить урон"
#: builtin/mainmenu.lua:951
#: builtin/mainmenu.lua:884
msgid "Public"
msgstr "Публичные"
#: builtin/mainmenu.lua:953
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr "Имя"
#: builtin/mainmenu.lua:955
#: builtin/mainmenu.lua:888
msgid "Password"
msgstr "Пароль"
#: builtin/mainmenu.lua:956
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr "Порт"
#: builtin/mainmenu.lua:966
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr "НАСТРОЙКИ"
#: builtin/mainmenu.lua:967
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr "Красивые деревья"
#: builtin/mainmenu.lua:969
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr "Мягкое освещение"
#: builtin/mainmenu.lua:971
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr "3D облака"
#: builtin/mainmenu.lua:973
#: builtin/mainmenu.lua:906
msgid "Opaque Water"
msgstr "Непрозрачная вода"
#: builtin/mainmenu.lua:976
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr "Mip-текстурирование"
#: builtin/mainmenu.lua:978
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr "Анизотропная фильтрация"
#: builtin/mainmenu.lua:980
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr "Билинейная фильтрация"
#: builtin/mainmenu.lua:982
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr "Трилинейная фильтрация"
#: builtin/mainmenu.lua:985
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr "Шейдеры"
#: builtin/mainmenu.lua:987
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr "Предзагрузка изображений"
#: builtin/mainmenu.lua:989
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr "Включить частицы"
#: builtin/mainmenu.lua:991
#: builtin/mainmenu.lua:924
msgid "Finite Liquid"
msgstr "Конечные жидкости"
#: builtin/mainmenu.lua:994
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr "Смена управления"
#: builtin/mainmenu.lua:1007 src/keycode.cpp:248
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr "Играть"
#: builtin/mainmenu.lua:1009
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr "ОДИНОЧНАЯ ИГРА"
#: builtin/mainmenu.lua:1022
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr "Выберите пакет текстур:"
#: builtin/mainmenu.lua:1023
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr "ПАКЕТЫ ТЕКСТУР"
#: builtin/mainmenu.lua:1043
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr "Описание отсутствует"
#: builtin/mainmenu.lua:1071
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr "Основные разработчики"
#: builtin/mainmenu.lua:1082
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr "Активные контрибьюторы"
#: builtin/mainmenu.lua:1092
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr "В отставке"
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr "Одиночная игра"
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr "Клиент"
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr "Сервер"
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr "Настройки"
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr "Пакеты текстур"
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr "Моды"
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr "Благодарности"
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr "МОДЫ"
@ -301,78 +309,102 @@ msgstr "МОДЫ"
msgid "Installed Mods:"
msgstr "Установленные моды:"
#: builtin/modmgr.lua:243 builtin/modstore.lua:253
msgid "Install"
msgstr "Установить"
#: builtin/modmgr.lua:243
#, fuzzy
msgid "Add mod:"
msgstr "<<-- Добавить мод"
#: builtin/modmgr.lua:244
msgid "Download"
msgstr "Загрузить"
#, fuzzy
msgid "Local install"
msgstr "Установить"
#: builtin/modmgr.lua:256
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
#, fuzzy
msgid "No mod description available"
msgstr "Описание отсутствует"
#: builtin/modmgr.lua:288
#, fuzzy
msgid "Mod information:"
msgstr "Описание отсутствует"
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr "Переименовать"
#: builtin/modmgr.lua:260 builtin/modmgr.lua:402
msgid "Depends:"
msgstr "Зависит от:"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:282
#: builtin/modmgr.lua:312
#, fuzzy
msgid "Uninstall selected mod"
msgstr "Удалить мод"
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr "Переименовать модпак:"
#: builtin/modmgr.lua:287 src/keycode.cpp:227
#: builtin/modmgr.lua:329 src/keycode.cpp:227
msgid "Accept"
msgstr "Принять"
#: builtin/modmgr.lua:381
#: builtin/modmgr.lua:423
msgid "World:"
msgstr "Мир:"
#: builtin/modmgr.lua:385 builtin/modmgr.lua:387
#, fuzzy
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
msgid "Hide Game"
msgstr "Игра"
msgstr "Скрыть игру"
#: builtin/modmgr.lua:391 builtin/modmgr.lua:393
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr "Скрыть содержимое модпака"
#: builtin/modmgr.lua:400
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr "Мод:"
#: builtin/modmgr.lua:405 src/guiKeyChangeMenu.cpp:187
#: builtin/modmgr.lua:444
msgid "Depends:"
msgstr "Зависит от:"
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Сохранить"
#: builtin/modmgr.lua:422
#: builtin/modmgr.lua:464
#, fuzzy
msgid "Enable MP"
msgstr "Включить Всё"
#: builtin/modmgr.lua:424
#: builtin/modmgr.lua:466
#, fuzzy
msgid "Disable MP"
msgstr "Отключить Всё"
#: builtin/modmgr.lua:428 builtin/modmgr.lua:430
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr "включено"
#: builtin/modmgr.lua:436
#: builtin/modmgr.lua:478
msgid "Enable all"
msgstr "Включить всё"
#: builtin/modmgr.lua:551
#: builtin/modmgr.lua:577
msgid "Select Mod File:"
msgstr "Выберите файл с модом:"
#: builtin/modmgr.lua:590
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr "Установка мода: файл \"$1\""
#: builtin/modmgr.lua:591
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
@ -380,32 +412,32 @@ msgstr ""
"\n"
"Установка мода: неподдерживаемый тип \"$1\""
#: builtin/modmgr.lua:612
#: builtin/modmgr.lua:638
msgid "Failed to install $1 to $2"
msgstr "Ошибка при установке $1 в $2"
#: builtin/modmgr.lua:615
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
"Установка мода: невозможно найти подходящее имя директории для модпака $1"
#: builtin/modmgr.lua:635
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr "Установка мода: невозможно определить название мода для $1"
#: builtin/modmgr.lua:824
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr "Modmgr: невозможно удалить \"$1\""
#: builtin/modmgr.lua:828
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr "Modmgr: неправильный путь \"$1\""
#: builtin/modmgr.lua:845
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr "Уверены, что хотите удалить \"$1\"?"
#: builtin/modmgr.lua:847
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr "Никак нет!"
@ -421,47 +453,51 @@ msgstr "Рейтинг"
msgid "re-Install"
msgstr "Переустановить"
#: src/client.cpp:2915
#: builtin/modstore.lua:253
msgid "Install"
msgstr "Установить"
#: src/client.cpp:2917
msgid "Item textures..."
msgstr "Текстуры предметов..."
#: src/game.cpp:939
#: src/game.cpp:940
msgid "Loading..."
msgstr "Загрузка..."
#: src/game.cpp:999
#: src/game.cpp:1000
msgid "Creating server...."
msgstr "Создание сервера..."
#: src/game.cpp:1015
#: src/game.cpp:1016
msgid "Creating client..."
msgstr "Создание клиента..."
#: src/game.cpp:1024
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr "Получение адреса..."
#: src/game.cpp:1121
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr "Подключение к серверу..."
#: src/game.cpp:1218
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr "Описания предметов..."
#: src/game.cpp:1225
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr "Описания нод..."
#: src/game.cpp:1232
#: src/game.cpp:1233
msgid "Media..."
msgstr "Медиафайлы..."
#: src/game.cpp:3405
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr "Завершение работы..."
#: src/game.cpp:3435
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
@ -477,12 +513,8 @@ msgstr "Вы умерли."
msgid "Respawn"
msgstr "Возродиться"
#: src/guiFormSpecMenu.cpp:1569
msgid "Left click: Move all items, Right click: Move single item"
msgstr "ЛКМ: Переместить все предметы, ПКМ: Переместить один предмет"
#: src/guiFormSpecMenu.cpp:1595 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:140
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr "Продолжить"
@ -500,99 +532,99 @@ msgstr "\"Использовать\" = вниз"
msgid "Double tap \"jump\" to toggle fly"
msgstr "Двойной прыжок = летать"
#: src/guiKeyChangeMenu.cpp:290
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr "Клавиша уже используется"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr "нажмите клавишу"
#: src/guiKeyChangeMenu.cpp:400
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr "Вперед"
#: src/guiKeyChangeMenu.cpp:401
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr "Назад"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr "Влево"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr "Вправо"
#: src/guiKeyChangeMenu.cpp:404
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr "Использовать"
#: src/guiKeyChangeMenu.cpp:405
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr "Прыжок"
#: src/guiKeyChangeMenu.cpp:406
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr "Красться"
#: src/guiKeyChangeMenu.cpp:407
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr "Бросить"
#: src/guiKeyChangeMenu.cpp:408
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr "Инвентарь"
#: src/guiKeyChangeMenu.cpp:409
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr "Чат"
#: src/guiKeyChangeMenu.cpp:410
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr "Команда"
#: src/guiKeyChangeMenu.cpp:411
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr "Консоль"
#: src/guiKeyChangeMenu.cpp:412
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr "Полёт"
#: src/guiKeyChangeMenu.cpp:413
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr "Ускорение"
#: src/guiKeyChangeMenu.cpp:414
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr "Включить noclip"
#: src/guiKeyChangeMenu.cpp:415
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr "Зона видимости"
#: src/guiKeyChangeMenu.cpp:416
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr "Печать стеков"
#: src/guiPasswordChange.cpp:107
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr "Старый пароль"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr "Новый пароль"
#: src/guiPasswordChange.cpp:142
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr "Подтверждение пароля"
#: src/guiPasswordChange.cpp:160
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr "Изменить"
#: src/guiPasswordChange.cpp:169
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr "Пароли не совпадают!"
@ -642,11 +674,11 @@ msgstr ""
"- Колесико мыши: выбор предмета\n"
"- T: чат\n"
#: src/guiVolumeChange.cpp:108
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr "Громкость звука: "
#: src/guiVolumeChange.cpp:122
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr "Выход"
@ -938,77 +970,44 @@ msgstr "PA1"
msgid "Zoom"
msgstr "Масштаб"
#: src/main.cpp:1411
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr ""
#: src/main.cpp:1486
#: src/main.cpp:1547
msgid "Main Menu"
msgstr "Главное меню"
#: src/main.cpp:1662
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr "Не выбран мир и не введен адрес."
#: src/main.cpp:1670
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr "Невозможно найти или загрузить игру \""
#: src/main.cpp:1684
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr "Неправильная конфигурация игры."
#: src/main.cpp:1729
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr "Ошибка соединения (таймаут?)"
#~ msgid "is required by:"
#~ msgstr "требуется для:"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "Предупреждение: Некоторые моды еще не настроены.\n"
#~ "Их стандартные настройки будут установлены, когда вы сохраните "
#~ "конфигурацию. "
#~ msgid "Configuration saved. "
#~ msgstr "Настройки сохранены. "
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Предупреждение: Неверная конфигурация. "
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Невозможно создать мир: Имя содержит недопустимые символы"
#~ msgid "Multiplayer"
#~ msgstr "Сетевая игра"
#~ msgid "Advanced"
#~ msgstr "Дополнительно"
#~ msgid "Show Public"
#~ msgstr "Публичные"
#~ msgid "Show Favorites"
#~ msgstr "Избранные"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Оставьте адрес пустым для запуска локального сервера."
#~ msgid "Create world"
#~ msgstr "Создать мир"
#~ msgid "Address required."
#~ msgstr "Нужно ввести адрес."
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Невозможно удалить мир: Ничего не выбрано"
#~ msgid "Files to be deleted"
#~ msgstr "Следующие файлы будут удалены"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Невозможно создать мир: Ни одной игры не найдено"
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Невозможно настроить мир: ничего не выбрано"
#~ msgid "Failed to delete all world files"
#~ msgstr "Ошибка при удалении файлов мира"
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
#~ "Their setting will be removed when you save the configuration. "
#~ msgstr ""
#~ "Предупреждение: Некоторые моды не найдены.\n"
#~ "Их настройки будут удалены, когда вы сохраните конфигурацию. "
#~ msgid ""
#~ "Default Controls:\n"
@ -1035,17 +1034,56 @@ msgstr "Ошибка соединения (таймаут?)"
#~ "- ESC: это меню\n"
#~ "- T: чат\n"
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
#~ "Their setting will be removed when you save the configuration. "
#~ msgstr ""
#~ "Предупреждение: Некоторые моды не найдены.\n"
#~ "Их настройки будут удалены, когда вы сохраните конфигурацию. "
#~ msgid "Failed to delete all world files"
#~ msgstr "Ошибка при удалении файлов мира"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "Предупреждение: Некоторые моды еще не настроены.\n"
#~ "Их стандартные настройки будут установлены, когда вы сохраните "
#~ "конфигурацию. "
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Невозможно настроить мир: ничего не выбрано"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Невозможно создать мир: Ни одной игры не найдено"
#~ msgid "Files to be deleted"
#~ msgstr "Следующие файлы будут удалены"
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Невозможно удалить мир: Ничего не выбрано"
#~ msgid "Address required."
#~ msgstr "Нужно ввести адрес."
#~ msgid "Create world"
#~ msgstr "Создать мир"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Оставьте адрес пустым для запуска локального сервера."
#~ msgid "Show Favorites"
#~ msgstr "Избранные"
#~ msgid "Show Public"
#~ msgstr "Публичные"
#~ msgid "Advanced"
#~ msgstr "Дополнительно"
#~ msgid "Multiplayer"
#~ msgstr "Сетевая игра"
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Невозможно создать мир: Имя содержит недопустимые символы"
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Предупреждение: Неверная конфигурация. "
#~ msgid "Configuration saved. "
#~ msgstr "Настройки сохранены. "
#~ msgid "is required by:"
#~ msgstr "требуется для:"
#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr "ЛКМ: Переместить все предметы, ПКМ: Переместить один предмет"
#~ msgid "Download"
#~ msgstr "Загрузить"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-07 22:01+0400\n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: 2013-06-27 01:22+0200\n"
"Last-Translator: Vladimir a <c-vld@ya.ru>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -24,12 +24,12 @@ msgstr ""
msgid "Game Name"
msgstr "Гра"
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:301
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr "Створити"
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:302 builtin/modmgr.lua:289
#: builtin/modmgr.lua:406 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Відміна"
@ -41,36 +41,36 @@ msgstr ""
msgid "GAMES"
msgstr ""
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:859
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
#, fuzzy
msgid "Games"
msgstr "Гра"
#: builtin/gamemgr.lua:233
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr ""
#: builtin/gamemgr.lua:234
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr ""
#: builtin/gamemgr.lua:237
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr ""
#: builtin/gamemgr.lua:247
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr ""
#: builtin/gamemgr.lua:267
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr ""
#: builtin/gamemgr.lua:270
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr ""
#: builtin/mainmenu.lua:159
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr ""
@ -78,230 +78,238 @@ msgstr ""
msgid "World name"
msgstr "Назва Світу"
#: builtin/mainmenu.lua:298
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr ""
#: builtin/mainmenu.lua:300
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr "Гра"
#: builtin/mainmenu.lua:314
#: builtin/mainmenu.lua:319
#, fuzzy
msgid "Delete World \"$1\"?"
msgstr "Видалити світ"
#: builtin/mainmenu.lua:315 builtin/modmgr.lua:846
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr "Так"
#: builtin/mainmenu.lua:316
#: builtin/mainmenu.lua:321
msgid "No"
msgstr "Ні"
#: builtin/mainmenu.lua:384
#: builtin/mainmenu.lua:364
#, fuzzy
msgid "A world named \"$1\" already exists"
msgstr "Неможливо створити світ: Світ з таким ім'ям вже існує"
#: builtin/mainmenu.lua:399
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr ""
#: builtin/mainmenu.lua:852
msgid "Singleplayer"
msgstr "Одиночна гра"
#: builtin/mainmenu.lua:853
msgid "Client"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:854
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:855
msgid "Settings"
msgstr "Налаштування"
#: builtin/mainmenu.lua:856
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:863
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:865
msgid "Credits"
msgstr "Подяка"
#: builtin/mainmenu.lua:885
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr ""
#: builtin/mainmenu.lua:886
#: builtin/mainmenu.lua:819
msgid "Favorites:"
msgstr "Улюблені:"
#: builtin/mainmenu.lua:887
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr "Адреса/Порт"
#: builtin/mainmenu.lua:888
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr "Ім'я/Пароль"
#: builtin/mainmenu.lua:891
#: builtin/mainmenu.lua:824
#, fuzzy
msgid "Public Serverlist"
msgstr "Список публічних серверів:"
#: builtin/mainmenu.lua:896 builtin/mainmenu.lua:941 builtin/mainmenu.lua:1004
#: builtin/modmgr.lua:271 src/keycode.cpp:229
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr "Видалити"
#: builtin/mainmenu.lua:900
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr "Підключитися"
#: builtin/mainmenu.lua:942 builtin/mainmenu.lua:1005
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr "Новий"
#: builtin/mainmenu.lua:943 builtin/mainmenu.lua:1006
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr "Налаштувати"
#: builtin/mainmenu.lua:944
#: builtin/mainmenu.lua:877
#, fuzzy
msgid "Start Game"
msgstr "Почати гру / Підключитися"
#: builtin/mainmenu.lua:945 builtin/mainmenu.lua:1008
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr "Виберіть світ:"
#: builtin/mainmenu.lua:946
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr ""
#: builtin/mainmenu.lua:947 builtin/mainmenu.lua:1010
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr "Режим Створення"
#: builtin/mainmenu.lua:949 builtin/mainmenu.lua:1012
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr "Ввімкнути урон"
#: builtin/mainmenu.lua:951
#: builtin/mainmenu.lua:884
msgid "Public"
msgstr "Публичний"
#: builtin/mainmenu.lua:953
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr ""
#: builtin/mainmenu.lua:955
#: builtin/mainmenu.lua:888
#, fuzzy
msgid "Password"
msgstr "Старий Пароль"
#: builtin/mainmenu.lua:956
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr ""
#: builtin/mainmenu.lua:966
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr ""
#: builtin/mainmenu.lua:967
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr "Гарні дерева"
#: builtin/mainmenu.lua:969
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr "Рівне освітлення"
#: builtin/mainmenu.lua:971
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr "3D Хмари"
#: builtin/mainmenu.lua:973
#: builtin/mainmenu.lua:906
#, fuzzy
msgid "Opaque Water"
msgstr "Непрозора вода"
#: builtin/mainmenu.lua:976
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr "MIP-текстурування"
#: builtin/mainmenu.lua:978
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr "Анізотропна фільтрація"
#: builtin/mainmenu.lua:980
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr "Білінійна фільтрація"
#: builtin/mainmenu.lua:982
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr "Трилінійна фільтрація"
#: builtin/mainmenu.lua:985
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr "Шейдери"
#: builtin/mainmenu.lua:987
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr "Попереднє завантаження зображень"
#: builtin/mainmenu.lua:989
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr "Ввімкнути частки"
#: builtin/mainmenu.lua:991
#: builtin/mainmenu.lua:924
#, fuzzy
msgid "Finite Liquid"
msgstr "Кінцеві рідини"
#: builtin/mainmenu.lua:994
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr "Змінити клавіши"
#: builtin/mainmenu.lua:1007 src/keycode.cpp:248
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr "Грати"
#: builtin/mainmenu.lua:1009
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr ""
#: builtin/mainmenu.lua:1022
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr ""
#: builtin/mainmenu.lua:1023
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr ""
#: builtin/mainmenu.lua:1043
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr ""
#: builtin/mainmenu.lua:1071
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr ""
#: builtin/mainmenu.lua:1082
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr ""
#: builtin/mainmenu.lua:1092
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr ""
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr "Одиночна гра"
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr ""
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr ""
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr "Налаштування"
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr ""
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr ""
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr "Подяка"
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr ""
@ -310,115 +318,134 @@ msgstr ""
msgid "Installed Mods:"
msgstr ""
#: builtin/modmgr.lua:243 builtin/modstore.lua:253
msgid "Install"
#: builtin/modmgr.lua:243
msgid "Add mod:"
msgstr ""
#: builtin/modmgr.lua:244
#, fuzzy
msgid "Download"
msgstr "Вниз"
msgid "Local install"
msgstr ""
#: builtin/modmgr.lua:256
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
msgid "No mod description available"
msgstr ""
#: builtin/modmgr.lua:288
msgid "Mod information:"
msgstr ""
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr ""
#: builtin/modmgr.lua:260 builtin/modmgr.lua:402
#, fuzzy
msgid "Depends:"
msgstr "залежить від:"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:282
#: builtin/modmgr.lua:312
msgid "Uninstall selected mod"
msgstr ""
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr ""
#: builtin/modmgr.lua:287 src/keycode.cpp:227
#: builtin/modmgr.lua:329 src/keycode.cpp:227
#, fuzzy
msgid "Accept"
msgstr "Підтвердити"
#: builtin/modmgr.lua:381
#: builtin/modmgr.lua:423
#, fuzzy
msgid "World:"
msgstr "Виберіть світ:"
#: builtin/modmgr.lua:385 builtin/modmgr.lua:387
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
#, fuzzy
msgid "Hide Game"
msgstr "Гра"
#: builtin/modmgr.lua:391 builtin/modmgr.lua:393
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr ""
#: builtin/modmgr.lua:400
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr ""
#: builtin/modmgr.lua:405 src/guiKeyChangeMenu.cpp:187
#: builtin/modmgr.lua:444
#, fuzzy
msgid "Depends:"
msgstr "залежить від:"
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Зберегти"
#: builtin/modmgr.lua:422
#: builtin/modmgr.lua:464
#, fuzzy
msgid "Enable MP"
msgstr "Увімкнути Все"
#: builtin/modmgr.lua:424
#: builtin/modmgr.lua:466
#, fuzzy
msgid "Disable MP"
msgstr "Вимкнути Усе"
#: builtin/modmgr.lua:428 builtin/modmgr.lua:430
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr "Увімкнено"
#: builtin/modmgr.lua:436
#: builtin/modmgr.lua:478
#, fuzzy
msgid "Enable all"
msgstr "Увімкнути Все"
#: builtin/modmgr.lua:551
#: builtin/modmgr.lua:577
#, fuzzy
msgid "Select Mod File:"
msgstr "Виберіть світ:"
#: builtin/modmgr.lua:590
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr ""
#: builtin/modmgr.lua:591
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
msgstr ""
#: builtin/modmgr.lua:612
#: builtin/modmgr.lua:638
#, fuzzy
msgid "Failed to install $1 to $2"
msgstr "Не вдалося ініціалізувати світ"
#: builtin/modmgr.lua:615
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
#: builtin/modmgr.lua:635
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
#: builtin/modmgr.lua:824
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
#: builtin/modmgr.lua:828
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
#: builtin/modmgr.lua:845
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
#: builtin/modmgr.lua:847
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr ""
@ -434,47 +461,51 @@ msgstr ""
msgid "re-Install"
msgstr ""
#: src/client.cpp:2915
#: builtin/modstore.lua:253
msgid "Install"
msgstr ""
#: src/client.cpp:2917
msgid "Item textures..."
msgstr "Текстура предметів..."
#: src/game.cpp:939
#: src/game.cpp:940
msgid "Loading..."
msgstr "Завантаження..."
#: src/game.cpp:999
#: src/game.cpp:1000
msgid "Creating server...."
msgstr "Створення сервера..."
#: src/game.cpp:1015
#: src/game.cpp:1016
msgid "Creating client..."
msgstr "Створення клієнта..."
#: src/game.cpp:1024
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr "Отримання адреси..."
#: src/game.cpp:1121
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr "Підключення до сервера..."
#: src/game.cpp:1218
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr ""
#: src/game.cpp:1225
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr ""
#: src/game.cpp:1232
#: src/game.cpp:1233
msgid "Media..."
msgstr ""
#: src/game.cpp:3405
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3435
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
@ -490,14 +521,8 @@ msgstr "Ви загинули."
msgid "Respawn"
msgstr "Народитися"
#: src/guiFormSpecMenu.cpp:1569
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
"Ліва кнопка миші: Перемістити усі предмети, Права кнопка миші: Перемістити "
"один предмет"
#: src/guiFormSpecMenu.cpp:1595 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:140
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr "Далі"
@ -516,99 +541,99 @@ msgstr "\"Використовувати\" = підніматися в гору"
msgid "Double tap \"jump\" to toggle fly"
msgstr "Подвійний \"Стрибок\" щоб полетіти"
#: src/guiKeyChangeMenu.cpp:290
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr "Клавіша вже використовується"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr "Натисніть клавішу"
#: src/guiKeyChangeMenu.cpp:400
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr "Уперед"
#: src/guiKeyChangeMenu.cpp:401
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr "Назад"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr "Ліворуч"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr "Праворуч"
#: src/guiKeyChangeMenu.cpp:404
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr "Використовувати"
#: src/guiKeyChangeMenu.cpp:405
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr "Стрибок"
#: src/guiKeyChangeMenu.cpp:406
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr "Крастися"
#: src/guiKeyChangeMenu.cpp:407
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr "Викинути"
#: src/guiKeyChangeMenu.cpp:408
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr "Інвентар"
#: src/guiKeyChangeMenu.cpp:409
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr "Чат"
#: src/guiKeyChangeMenu.cpp:410
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr "Комманда"
#: src/guiKeyChangeMenu.cpp:411
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr "Консоль"
#: src/guiKeyChangeMenu.cpp:412
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr "Переключити режим польоту"
#: src/guiKeyChangeMenu.cpp:413
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr "Переключити швидкий режим"
#: src/guiKeyChangeMenu.cpp:414
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr "Переключити режим проходження скрізь стін"
#: src/guiKeyChangeMenu.cpp:415
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr "Вибір діапазону"
#: src/guiKeyChangeMenu.cpp:416
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr "Надрукувати стек"
#: src/guiPasswordChange.cpp:107
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr "Старий Пароль"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr "Новий Пароль"
#: src/guiPasswordChange.cpp:142
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr "Підтвердження нового пароля"
#: src/guiPasswordChange.cpp:160
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr "Змінити"
#: src/guiPasswordChange.cpp:169
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr "Паролі не збігаються!"
@ -659,11 +684,11 @@ msgstr ""
"- Колесо миші: вибір предмета\n"
"- T: чат\n"
#: src/guiVolumeChange.cpp:108
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr "Гучність Звуку: "
#: src/guiVolumeChange.cpp:122
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr "Вихід"
@ -972,74 +997,83 @@ msgstr "PA1"
msgid "Zoom"
msgstr "Збільшити"
#: src/main.cpp:1411
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr ""
#: src/main.cpp:1486
#: src/main.cpp:1547
msgid "Main Menu"
msgstr "Головне Меню"
#: src/main.cpp:1662
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr "Жоден світ не вибрано та не надано адреси. Нічого не робити."
#: src/main.cpp:1670
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr "Неможливо знайти, або завантажити гру \""
#: src/main.cpp:1684
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr "Помилкова конфігурація гри."
#: src/main.cpp:1729
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr "Помилка з'єднання (час вийшов?)"
#~ msgid "is required by:"
#~ msgstr "необхідний для:"
#~ msgid "Configuration saved. "
#~ msgstr "Налаштування Збережено. "
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Попередження: Помилкова конфігурація. "
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Неможливо створити світ: Ім'я містить недопустимі символи"
#~ msgid "Multiplayer"
#~ msgstr "Мережева гра"
#~ msgid "Advanced"
#~ msgstr "Додатково"
#~ msgid "Show Public"
#~ msgstr "Показати Публічні"
#~ msgid "Show Favorites"
#~ msgstr "Показати Улюблені"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Залишіть адресу незаповненою для створення локального серверу."
#~ msgid "Create world"
#~ msgstr "Створити світ"
#~ msgid "Address required."
#~ msgstr "Адреса необхідна."
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Неможливо видалити світ: Нічого не вибрано"
#~ msgid "Files to be deleted"
#~ msgstr "Файлів, що підлягають видаленню"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Неможливо створити світ: Не знайдено жодної гри"
#~ msgid "Failed to delete all world files"
#~ msgstr "Помилка при видаленні файлів світу"
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "Неможливо налаштувати світ: Нічого не вибрано"
#~ msgid "Failed to delete all world files"
#~ msgstr "Помилка при видаленні файлів світу"
#~ msgid "Cannot create world: No games found"
#~ msgstr "Неможливо створити світ: Не знайдено жодної гри"
#~ msgid "Files to be deleted"
#~ msgstr "Файлів, що підлягають видаленню"
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "Неможливо видалити світ: Нічого не вибрано"
#~ msgid "Address required."
#~ msgstr "Адреса необхідна."
#~ msgid "Create world"
#~ msgstr "Створити світ"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Залишіть адресу незаповненою для створення локального серверу."
#~ msgid "Show Favorites"
#~ msgstr "Показати Улюблені"
#~ msgid "Show Public"
#~ msgstr "Показати Публічні"
#~ msgid "Advanced"
#~ msgstr "Додатково"
#~ msgid "Multiplayer"
#~ msgstr "Мережева гра"
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "Неможливо створити світ: Ім'я містить недопустимі символи"
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "Попередження: Помилкова конфігурація. "
#~ msgid "Configuration saved. "
#~ msgstr "Налаштування Збережено. "
#~ msgid "is required by:"
#~ msgstr "необхідний для:"
#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr ""
#~ "Ліва кнопка миші: Перемістити усі предмети, Права кнопка миші: "
#~ "Перемістити один предмет"
#, fuzzy
#~ msgid "Download"
#~ msgstr "Вниз"

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-07 22:01+0400\n"
"PO-Revision-Date: 2013-09-07 16:20+0200\n"
"POT-Creation-Date: 2013-11-23 17:37+0100\n"
"PO-Revision-Date: 2013-09-14 12:52+0200\n"
"Last-Translator: Shen Zheyu <arsdragonfly@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: zh_CN\n"
@ -22,12 +22,12 @@ msgstr ""
msgid "Game Name"
msgstr "游戏名"
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:301
#: builtin/gamemgr.lua:25 builtin/mainmenu.lua:310
msgid "Create"
msgstr "创建"
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:302 builtin/modmgr.lua:289
#: builtin/modmgr.lua:406 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
#: builtin/gamemgr.lua:26 builtin/mainmenu.lua:311 builtin/modmgr.lua:331
#: builtin/modmgr.lua:448 src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "取消"
@ -39,35 +39,35 @@ msgstr "Gamemgr: 无法复制MOD“$1”到游戏“$2”"
msgid "GAMES"
msgstr "游戏"
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:859
#: builtin/gamemgr.lua:217 builtin/mainmenu.lua:1076
msgid "Games"
msgstr "游戏"
#: builtin/gamemgr.lua:233
#: builtin/gamemgr.lua:234
msgid "Mods:"
msgstr "MODS"
#: builtin/gamemgr.lua:234
#: builtin/gamemgr.lua:235
msgid "edit game"
msgstr "编辑游戏"
#: builtin/gamemgr.lua:237
#: builtin/gamemgr.lua:238
msgid "new game"
msgstr "新建游戏"
#: builtin/gamemgr.lua:247
#: builtin/gamemgr.lua:248
msgid "EDIT GAME"
msgstr "编辑游戏"
#: builtin/gamemgr.lua:267
#: builtin/gamemgr.lua:269
msgid "Remove selected mod"
msgstr "删除选中MOD"
#: builtin/gamemgr.lua:270
#: builtin/gamemgr.lua:272
msgid "<<-- Add mod"
msgstr "<<-- 添加MOD"
#: builtin/mainmenu.lua:159
#: builtin/mainmenu.lua:158
msgid "Ok"
msgstr "OK"
@ -75,224 +75,231 @@ msgstr "OK"
msgid "World name"
msgstr "世界名称"
#: builtin/mainmenu.lua:298
msgid "Mapgen"
#: builtin/mainmenu.lua:300
msgid "Seed"
msgstr ""
#: builtin/mainmenu.lua:300
#: builtin/mainmenu.lua:303
msgid "Mapgen"
msgstr "地图生成器"
#: builtin/mainmenu.lua:306
msgid "Game"
msgstr "游戏"
#: builtin/mainmenu.lua:314
#: builtin/mainmenu.lua:319
msgid "Delete World \"$1\"?"
msgstr "删除世界“$1”?"
#: builtin/mainmenu.lua:315 builtin/modmgr.lua:846
#: builtin/mainmenu.lua:320 builtin/modmgr.lua:877
msgid "Yes"
msgstr "是"
#: builtin/mainmenu.lua:316
#: builtin/mainmenu.lua:321
msgid "No"
msgstr "否"
#: builtin/mainmenu.lua:384
#: builtin/mainmenu.lua:364
msgid "A world named \"$1\" already exists"
msgstr "名为 \"$1\" 的世界已经存在"
#: builtin/mainmenu.lua:399
#: builtin/mainmenu.lua:381
msgid "No worldname given or no game selected"
msgstr "未给定世界名或未选择游戏"
#: builtin/mainmenu.lua:852
msgid "Singleplayer"
msgstr "单人游戏"
#: builtin/mainmenu.lua:650
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
#: builtin/mainmenu.lua:853
msgid "Client"
msgstr "客户端"
#: builtin/mainmenu.lua:854
msgid "Server"
msgstr "服务器"
#: builtin/mainmenu.lua:855
msgid "Settings"
msgstr "设置"
#: builtin/mainmenu.lua:856
msgid "Texture Packs"
msgstr "材质包"
#: builtin/mainmenu.lua:863
msgid "Mods"
msgstr "MODS"
#: builtin/mainmenu.lua:865
msgid "Credits"
msgstr "关于"
#: builtin/mainmenu.lua:885
#: builtin/mainmenu.lua:818
msgid "CLIENT"
msgstr "客户端"
#: builtin/mainmenu.lua:886
#: builtin/mainmenu.lua:819
msgid "Favorites:"
msgstr "最爱的服务器:"
#: builtin/mainmenu.lua:887
#: builtin/mainmenu.lua:820
msgid "Address/Port"
msgstr "地址/端口"
#: builtin/mainmenu.lua:888
#: builtin/mainmenu.lua:821
msgid "Name/Password"
msgstr "名字/密码"
#: builtin/mainmenu.lua:891
#: builtin/mainmenu.lua:824
msgid "Public Serverlist"
msgstr "公共服务器列表"
#: builtin/mainmenu.lua:896 builtin/mainmenu.lua:941 builtin/mainmenu.lua:1004
#: builtin/modmgr.lua:271 src/keycode.cpp:229
#: builtin/mainmenu.lua:829 builtin/mainmenu.lua:874 builtin/mainmenu.lua:937
#: src/keycode.cpp:229
msgid "Delete"
msgstr "删除"
#: builtin/mainmenu.lua:900
#: builtin/mainmenu.lua:833
msgid "Connect"
msgstr "连接"
#: builtin/mainmenu.lua:942 builtin/mainmenu.lua:1005
#: builtin/mainmenu.lua:875 builtin/mainmenu.lua:938
msgid "New"
msgstr "新建"
#: builtin/mainmenu.lua:943 builtin/mainmenu.lua:1006
#: builtin/mainmenu.lua:876 builtin/mainmenu.lua:939
msgid "Configure"
msgstr "配置"
#: builtin/mainmenu.lua:944
#, fuzzy
#: builtin/mainmenu.lua:877
msgid "Start Game"
msgstr "启动游戏"
#: builtin/mainmenu.lua:945 builtin/mainmenu.lua:1008
#: builtin/mainmenu.lua:878 builtin/mainmenu.lua:941
msgid "Select World:"
msgstr "选择世界:"
#: builtin/mainmenu.lua:946
#: builtin/mainmenu.lua:879
msgid "START SERVER"
msgstr "启动服务器"
#: builtin/mainmenu.lua:947 builtin/mainmenu.lua:1010
#: builtin/mainmenu.lua:880 builtin/mainmenu.lua:943
msgid "Creative Mode"
msgstr "创造模式"
#: builtin/mainmenu.lua:949 builtin/mainmenu.lua:1012
#: builtin/mainmenu.lua:882 builtin/mainmenu.lua:945
msgid "Enable Damage"
msgstr "开启伤害"
#: builtin/mainmenu.lua:951
#: builtin/mainmenu.lua:884
msgid "Public"
msgstr "公共服务器"
#: builtin/mainmenu.lua:953
#: builtin/mainmenu.lua:886
msgid "Name"
msgstr "名字"
#: builtin/mainmenu.lua:955
#: builtin/mainmenu.lua:888
msgid "Password"
msgstr "密码"
#: builtin/mainmenu.lua:956
#: builtin/mainmenu.lua:889
msgid "Server Port"
msgstr "服务器端口"
#: builtin/mainmenu.lua:966
#: builtin/mainmenu.lua:899
msgid "SETTINGS"
msgstr "设置"
#: builtin/mainmenu.lua:967
#: builtin/mainmenu.lua:900
msgid "Fancy trees"
msgstr "更漂亮的树"
#: builtin/mainmenu.lua:969
#: builtin/mainmenu.lua:902
msgid "Smooth Lighting"
msgstr "平滑光照"
#: builtin/mainmenu.lua:971
#: builtin/mainmenu.lua:904
msgid "3D Clouds"
msgstr "3D云彩"
#: builtin/mainmenu.lua:973
#: builtin/mainmenu.lua:906
msgid "Opaque Water"
msgstr "不透明的水"
#: builtin/mainmenu.lua:976
#: builtin/mainmenu.lua:909
msgid "Mip-Mapping"
msgstr "贴图处理"
#: builtin/mainmenu.lua:978
#: builtin/mainmenu.lua:911
msgid "Anisotropic Filtering"
msgstr "各向异性过滤"
#: builtin/mainmenu.lua:980
#: builtin/mainmenu.lua:913
msgid "Bi-Linear Filtering"
msgstr "双线性过滤"
#: builtin/mainmenu.lua:982
#: builtin/mainmenu.lua:915
msgid "Tri-Linear Filtering"
msgstr "三线性过滤"
#: builtin/mainmenu.lua:985
#: builtin/mainmenu.lua:918
msgid "Shaders"
msgstr "着色器"
#: builtin/mainmenu.lua:987
#: builtin/mainmenu.lua:920
msgid "Preload item visuals"
msgstr "预先加载物品图像"
#: builtin/mainmenu.lua:989
#: builtin/mainmenu.lua:922
msgid "Enable Particles"
msgstr "启用粒子效果"
#: builtin/mainmenu.lua:991
#: builtin/mainmenu.lua:924
msgid "Finite Liquid"
msgstr "液体有限延伸"
#: builtin/mainmenu.lua:994
#: builtin/mainmenu.lua:927
msgid "Change keys"
msgstr "改变键位设置"
#: builtin/mainmenu.lua:1007 src/keycode.cpp:248
#: builtin/mainmenu.lua:940 src/keycode.cpp:248
msgid "Play"
msgstr "开始游戏"
#: builtin/mainmenu.lua:1009
#: builtin/mainmenu.lua:942
msgid "SINGLE PLAYER"
msgstr "单人游戏"
#: builtin/mainmenu.lua:1022
#: builtin/mainmenu.lua:955
msgid "Select texture pack:"
msgstr "选择材质包:"
#: builtin/mainmenu.lua:1023
#: builtin/mainmenu.lua:956
msgid "TEXTURE PACKS"
msgstr "材质包"
#: builtin/mainmenu.lua:1043
#: builtin/mainmenu.lua:976
msgid "No information available"
msgstr "无可用信息"
#: builtin/mainmenu.lua:1071
#: builtin/mainmenu.lua:1005
msgid "Core Developers"
msgstr "核心开发人员"
#: builtin/mainmenu.lua:1082
#: builtin/mainmenu.lua:1020
msgid "Active Contributors"
msgstr "活跃的贡献者"
#: builtin/mainmenu.lua:1092
#: builtin/mainmenu.lua:1028
msgid "Previous Contributors"
msgstr "以往的贡献者"
#: builtin/mainmenu.lua:1069
msgid "Singleplayer"
msgstr "单人游戏"
#: builtin/mainmenu.lua:1070
msgid "Client"
msgstr "客户端"
#: builtin/mainmenu.lua:1071
msgid "Server"
msgstr "服务器"
#: builtin/mainmenu.lua:1072
msgid "Settings"
msgstr "设置"
#: builtin/mainmenu.lua:1073
msgid "Texture Packs"
msgstr "材质包"
#: builtin/mainmenu.lua:1080
msgid "Mods"
msgstr "MODS"
#: builtin/mainmenu.lua:1082
msgid "Credits"
msgstr "关于"
#: builtin/modmgr.lua:236
msgid "MODS"
msgstr "MODS"
@ -301,168 +308,192 @@ msgstr "MODS"
msgid "Installed Mods:"
msgstr "已安装的MOD"
#: builtin/modmgr.lua:243 builtin/modstore.lua:253
msgid "Install"
msgstr "安装"
#: builtin/modmgr.lua:243
#, fuzzy
msgid "Add mod:"
msgstr "<<-- 添加MOD"
#: builtin/modmgr.lua:244
msgid "Download"
msgstr "下载"
#, fuzzy
msgid "Local install"
msgstr "安装"
#: builtin/modmgr.lua:256
#: builtin/modmgr.lua:245
msgid "Online mod repository"
msgstr ""
#: builtin/modmgr.lua:284
#, fuzzy
msgid "No mod description available"
msgstr "无可用信息"
#: builtin/modmgr.lua:288
#, fuzzy
msgid "Mod information:"
msgstr "无可用信息"
#: builtin/modmgr.lua:299
msgid "Rename"
msgstr "重命名"
#: builtin/modmgr.lua:260 builtin/modmgr.lua:402
msgid "Depends:"
msgstr "依赖于:"
#: builtin/modmgr.lua:301
msgid "Uninstall selected modpack"
msgstr ""
#: builtin/modmgr.lua:282
#: builtin/modmgr.lua:312
#, fuzzy
msgid "Uninstall selected mod"
msgstr "删除选中MOD"
#: builtin/modmgr.lua:324
msgid "Rename Modpack:"
msgstr "重命名MOD包"
#: builtin/modmgr.lua:287 src/keycode.cpp:227
#: builtin/modmgr.lua:329 src/keycode.cpp:227
msgid "Accept"
msgstr "接受"
#: builtin/modmgr.lua:381
#: builtin/modmgr.lua:423
msgid "World:"
msgstr "世界:"
#: builtin/modmgr.lua:385 builtin/modmgr.lua:387
#: builtin/modmgr.lua:427 builtin/modmgr.lua:429
msgid "Hide Game"
msgstr "隐藏游戏"
#: builtin/modmgr.lua:391 builtin/modmgr.lua:393
#, fuzzy
#: builtin/modmgr.lua:433 builtin/modmgr.lua:435
msgid "Hide mp content"
msgstr "隐藏mp内容"
msgstr "隐藏MOD包内容"
#: builtin/modmgr.lua:400
#: builtin/modmgr.lua:442
msgid "Mod:"
msgstr "MOD"
#: builtin/modmgr.lua:405 src/guiKeyChangeMenu.cpp:187
#: builtin/modmgr.lua:444
msgid "Depends:"
msgstr "依赖于:"
#: builtin/modmgr.lua:447 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "保存"
#: builtin/modmgr.lua:422
#, fuzzy
#: builtin/modmgr.lua:464
msgid "Enable MP"
msgstr "启用MP"
msgstr "启用MOD包"
#: builtin/modmgr.lua:424
#, fuzzy
#: builtin/modmgr.lua:466
msgid "Disable MP"
msgstr "全部禁用"
msgstr "禁用MOD包"
#: builtin/modmgr.lua:428 builtin/modmgr.lua:430
#: builtin/modmgr.lua:470 builtin/modmgr.lua:472
msgid "enabled"
msgstr "启用"
#: builtin/modmgr.lua:436
#, fuzzy
#: builtin/modmgr.lua:478
msgid "Enable all"
msgstr "全部启用"
#: builtin/modmgr.lua:551
#, fuzzy
#: builtin/modmgr.lua:577
msgid "Select Mod File:"
msgstr "选择世界"
msgstr "选择MOD文件"
#: builtin/modmgr.lua:590
#: builtin/modmgr.lua:616
msgid "Install Mod: file: \"$1\""
msgstr ""
msgstr "安装MOD文件”$1“"
#: builtin/modmgr.lua:591
#: builtin/modmgr.lua:617
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\""
msgstr ""
"\n"
"安装MOD不支持的文件类型“$1“"
#: builtin/modmgr.lua:612
#, fuzzy
#: builtin/modmgr.lua:638
msgid "Failed to install $1 to $2"
msgstr "无法初始化世界"
msgstr "无法安装$1到$2"
#: builtin/modmgr.lua:615
#: builtin/modmgr.lua:641
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
msgstr "安装MOD找不到MOD包$1的合适文件夹名"
#: builtin/modmgr.lua:635
#: builtin/modmgr.lua:661
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
msgstr "安装MOD找不到$1的真正MOD名"
#: builtin/modmgr.lua:824
#: builtin/modmgr.lua:855
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
msgstr "MOD管理器无法删除“$1“"
#: builtin/modmgr.lua:828
#: builtin/modmgr.lua:859
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
msgstr "MOD管理器MOD“$1“路径非法"
#: builtin/modmgr.lua:845
#: builtin/modmgr.lua:876
msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
msgstr "你确认要删除\"$1\"?"
#: builtin/modmgr.lua:847
#: builtin/modmgr.lua:878
msgid "No of course not!"
msgstr ""
msgstr "当然不!"
#: builtin/modstore.lua:183
msgid "Page $1 of $2"
msgstr ""
msgstr "第$1页,共$2页"
#: builtin/modstore.lua:243
msgid "Rating"
msgstr ""
msgstr "评级"
#: builtin/modstore.lua:251
msgid "re-Install"
msgstr ""
msgstr "重新安装"
#: src/client.cpp:2915
#: builtin/modstore.lua:253
msgid "Install"
msgstr "安装"
#: src/client.cpp:2917
msgid "Item textures..."
msgstr "物品材质..."
#: src/game.cpp:939
#: src/game.cpp:940
msgid "Loading..."
msgstr "载入中..."
#: src/game.cpp:999
#: src/game.cpp:1000
msgid "Creating server...."
msgstr "正在建立服务器...."
#: src/game.cpp:1015
#: src/game.cpp:1016
msgid "Creating client..."
msgstr "正在建立客户端..."
#: src/game.cpp:1024
#: src/game.cpp:1025
msgid "Resolving address..."
msgstr "正在解析地址..."
#: src/game.cpp:1121
#: src/game.cpp:1122
msgid "Connecting to server..."
msgstr "正在连接服务器..."
#: src/game.cpp:1218
#, fuzzy
#: src/game.cpp:1219
msgid "Item definitions..."
msgstr "物品材质..."
msgstr "物品定义..."
#: src/game.cpp:1225
#: src/game.cpp:1226
msgid "Node definitions..."
msgstr ""
msgstr "方块定义..."
#: src/game.cpp:1232
#: src/game.cpp:1233
msgid "Media..."
msgstr ""
msgstr "媒体..."
#: src/game.cpp:3405
#: src/game.cpp:3409
msgid "Shutting down stuff..."
msgstr "关闭中......"
#: src/game.cpp:3435
#: src/game.cpp:3439
msgid ""
"\n"
"Check debug.txt for details."
@ -478,12 +509,8 @@ msgstr "你死了。"
msgid "Respawn"
msgstr "重生"
#: src/guiFormSpecMenu.cpp:1569
msgid "Left click: Move all items, Right click: Move single item"
msgstr "左键:移动所有物品,右键:移动单个物品"
#: src/guiFormSpecMenu.cpp:1595 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:140
#: src/guiFormSpecMenu.cpp:1656 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:139
msgid "Proceed"
msgstr "继续游戏"
@ -499,99 +526,99 @@ msgstr "“使用” = 向下爬"
msgid "Double tap \"jump\" to toggle fly"
msgstr "连按两次“跳”切换飞行状态"
#: src/guiKeyChangeMenu.cpp:290
#: src/guiKeyChangeMenu.cpp:288
msgid "Key already in use"
msgstr "按键已被占用"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:363
msgid "press key"
msgstr "按键"
#: src/guiKeyChangeMenu.cpp:400
#: src/guiKeyChangeMenu.cpp:389
msgid "Forward"
msgstr "向前"
#: src/guiKeyChangeMenu.cpp:401
#: src/guiKeyChangeMenu.cpp:390
msgid "Backward"
msgstr "向后"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:391 src/keycode.cpp:228
msgid "Left"
msgstr "向左"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:392 src/keycode.cpp:228
msgid "Right"
msgstr "向右"
#: src/guiKeyChangeMenu.cpp:404
#: src/guiKeyChangeMenu.cpp:393
msgid "Use"
msgstr "使用"
#: src/guiKeyChangeMenu.cpp:405
#: src/guiKeyChangeMenu.cpp:394
msgid "Jump"
msgstr "跳"
#: src/guiKeyChangeMenu.cpp:406
#: src/guiKeyChangeMenu.cpp:395
msgid "Sneak"
msgstr "潜行"
#: src/guiKeyChangeMenu.cpp:407
#: src/guiKeyChangeMenu.cpp:396
msgid "Drop"
msgstr "丢出"
#: src/guiKeyChangeMenu.cpp:408
#: src/guiKeyChangeMenu.cpp:397
msgid "Inventory"
msgstr "物品栏"
#: src/guiKeyChangeMenu.cpp:409
#: src/guiKeyChangeMenu.cpp:398
msgid "Chat"
msgstr "聊天"
#: src/guiKeyChangeMenu.cpp:410
#: src/guiKeyChangeMenu.cpp:399
msgid "Command"
msgstr "命令"
#: src/guiKeyChangeMenu.cpp:411
#: src/guiKeyChangeMenu.cpp:400
msgid "Console"
msgstr "控制台"
#: src/guiKeyChangeMenu.cpp:412
#: src/guiKeyChangeMenu.cpp:401
msgid "Toggle fly"
msgstr "切换飞行状态"
#: src/guiKeyChangeMenu.cpp:413
#: src/guiKeyChangeMenu.cpp:402
msgid "Toggle fast"
msgstr "切换快速移动状态"
#: src/guiKeyChangeMenu.cpp:414
#: src/guiKeyChangeMenu.cpp:403
msgid "Toggle noclip"
msgstr "切换穿墙模式"
#: src/guiKeyChangeMenu.cpp:415
#: src/guiKeyChangeMenu.cpp:404
msgid "Range select"
msgstr "选择范围"
#: src/guiKeyChangeMenu.cpp:416
#: src/guiKeyChangeMenu.cpp:405
msgid "Print stacks"
msgstr "打印栈"
#: src/guiPasswordChange.cpp:107
#: src/guiPasswordChange.cpp:106
msgid "Old Password"
msgstr "旧密码"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:122
msgid "New Password"
msgstr "新密码"
#: src/guiPasswordChange.cpp:142
#: src/guiPasswordChange.cpp:137
msgid "Confirm Password"
msgstr "确认密码"
#: src/guiPasswordChange.cpp:160
#: src/guiPasswordChange.cpp:153
msgid "Change"
msgstr "更改"
#: src/guiPasswordChange.cpp:169
#: src/guiPasswordChange.cpp:162
msgid "Passwords do not match!"
msgstr "密码不匹配!"
@ -641,11 +668,11 @@ msgstr ""
"鼠标滚轮: 选择物品\n"
"T: 聊天\n"
#: src/guiVolumeChange.cpp:108
#: src/guiVolumeChange.cpp:107
msgid "Sound Volume: "
msgstr "音量: "
#: src/guiVolumeChange.cpp:122
#: src/guiVolumeChange.cpp:121
msgid "Exit"
msgstr "退出"
@ -937,77 +964,43 @@ msgstr "PA1键"
msgid "Zoom"
msgstr "缩放"
#: src/main.cpp:1411
#: src/main.cpp:1472
msgid "needs_fallback_font"
msgstr "yes"
#: src/main.cpp:1486
#: src/main.cpp:1547
msgid "Main Menu"
msgstr "主菜单"
#: src/main.cpp:1662
#: src/main.cpp:1723
msgid "No world selected and no address provided. Nothing to do."
msgstr "没有选择世界或提供地址。未执行操作。"
#: src/main.cpp:1670
#: src/main.cpp:1731
msgid "Could not find or load game \""
msgstr "无法找到或载入游戏模式“"
#: src/main.cpp:1684
#: src/main.cpp:1745
msgid "Invalid gamespec."
msgstr "非法游戏模式规格。"
#: src/main.cpp:1729
#: src/main.cpp:1790
msgid "Connection error (timed out?)"
msgstr "连接出错(超时?)"
#~ msgid "is required by:"
#~ msgstr "被需要:"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "警告一些MOD仍未设定。\n"
#~ "它们会在你保存配置的时候自动启用。 "
#~ msgid "Configuration saved. "
#~ msgstr "配置已保存。 "
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "警告:配置不一致。 "
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "无法创建世界:名字包含非法字符"
#~ msgid "Multiplayer"
#~ msgstr "多人游戏"
#~ msgid "Advanced"
#~ msgstr "高级联机设置"
#~ msgid "Show Public"
#~ msgstr "显示公共"
#~ msgid "Show Favorites"
#~ msgstr "显示最爱"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "地址栏留空可启动本地服务器。"
#~ msgid "Create world"
#~ msgstr "创造世界"
#~ msgid "Address required."
#~ msgstr "需要地址。"
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "无法删除世界:没有选择世界"
#~ msgid "Files to be deleted"
#~ msgstr "将被删除的文件"
#~ msgid "Cannot create world: No games found"
#~ msgstr "无法创造世界:未找到游戏模式"
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "无法配置世界:没有选择世界"
#~ msgid "Failed to delete all world files"
#~ msgstr "无法删除所有该世界的文件"
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
#~ "Their setting will be removed when you save the configuration. "
#~ msgstr ""
#~ "警告缺少一些设定了的MOD。\n"
#~ "它们的设置会在你保存配置的时候被移除。 "
#~ msgid ""
#~ "Default Controls:\n"
@ -1035,16 +1028,56 @@ msgstr "连接出错(超时?)"
#~ "ESC菜单\n"
#~ "T聊天\n"
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
#~ "Their setting will be removed when you save the configuration. "
#~ msgstr ""
#~ "警告缺少一些设定了的MOD。\n"
#~ "它们的设置会在你保存配置的时候被移除。 "
#~ msgid "Failed to delete all world files"
#~ msgstr "无法删除所有该世界的文件"
#~ msgid ""
#~ "Warning: Some mods are not configured yet.\n"
#~ "They will be enabled by default when you save the configuration. "
#~ msgstr ""
#~ "警告一些MOD仍未设定。\n"
#~ "它们会在你保存配置的时候自动启用。 "
#~ msgid "Cannot configure world: Nothing selected"
#~ msgstr "无法配置世界:没有选择世界"
#~ msgid "Cannot create world: No games found"
#~ msgstr "无法创造世界:未找到游戏模式"
#~ msgid "Files to be deleted"
#~ msgstr "将被删除的文件"
#~ msgid "Cannot delete world: Nothing selected"
#~ msgstr "无法删除世界:没有选择世界"
#~ msgid "Address required."
#~ msgstr "需要地址。"
#~ msgid "Create world"
#~ msgstr "创造世界"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "地址栏留空可启动本地服务器。"
#~ msgid "Show Favorites"
#~ msgstr "显示最爱"
#~ msgid "Show Public"
#~ msgstr "显示公共"
#~ msgid "Advanced"
#~ msgstr "高级联机设置"
#~ msgid "Multiplayer"
#~ msgstr "多人游戏"
#~ msgid "Cannot create world: Name contains invalid characters"
#~ msgstr "无法创建世界:名字包含非法字符"
#~ msgid "Warning: Configuration not consistent. "
#~ msgstr "警告:配置不一致。 "
#~ msgid "Configuration saved. "
#~ msgstr "配置已保存。 "
#~ msgid "is required by:"
#~ msgstr "被需要:"
#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr "左键:移动所有物品,右键:移动单个物品"
#~ msgid "Download"
#~ msgstr "下载"

View File

@ -187,8 +187,10 @@ find_path(LUA_INCLUDE_DIR luajit.h
message (STATUS "LuaJIT library: ${LUA_LIBRARY}")
message (STATUS "LuaJIT headers: ${LUA_INCLUDE_DIR}")
if(LUA_LIBRARY AND LUA_INCLUDE_DIR)
set(USE_LUAJIT 0)
if(LUA_LIBRARY AND LUA_INCLUDE_DIR)
message (STATUS "LuaJIT found.")
set(USE_LUAJIT 1)
else(LUA_LIBRARY AND LUA_INCLUDE_DIR)
message (STATUS "LuaJIT not found, using bundled Lua.")
set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
@ -223,11 +225,22 @@ configure_file(
"${PROJECT_BINARY_DIR}/cmake_config.h"
)
# Add a target that always rebuilds cmake_config_githash.h
add_custom_target(GenerateVersion
COMMAND ${CMAKE_COMMAND}
-D "GENERATE_VERSION_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}"
-D "GENERATE_VERSION_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}"
-D "VERSION_STRING=${VERSION_STRING}"
-D "VERSION_EXTRA=${VERSION_EXTRA}"
-P "${CMAKE_SOURCE_DIR}/cmake/Modules/GenerateVersion.cmake"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
add_subdirectory(jthread)
add_subdirectory(script)
add_subdirectory(util)
set(common_SRCS
version.cpp
rollback_interface.cpp
rollback.cpp
genericobject.cpp
@ -293,6 +306,8 @@ set(common_SRCS
serverlist.cpp
pathfinder.cpp
convert_json.cpp
gettext.cpp
httpfetch.cpp
${JTHREAD_SRCS}
${common_SCRIPT_SRCS}
${UTIL_SRCS}
@ -345,6 +360,7 @@ set(minetest_SRCS
guiDeathScreen.cpp
guiChatConsole.cpp
client.cpp
clientmedia.cpp
filecache.cpp
tile.cpp
shader.cpp
@ -404,6 +420,7 @@ set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
if(BUILD_CLIENT)
add_executable(${PROJECT_NAME} ${minetest_SRCS})
add_dependencies(${PROJECT_NAME} GenerateVersion)
target_link_libraries(
${PROJECT_NAME}
${ZLIB_LIBRARIES}
@ -442,6 +459,7 @@ endif(BUILD_CLIENT)
if(BUILD_SERVER)
add_executable(${PROJECT_NAME}server ${minetestserver_SRCS})
add_dependencies(${PROJECT_NAME}server GenerateVersion)
target_link_libraries(
${PROJECT_NAME}server
${ZLIB_LIBRARIES}
@ -484,7 +502,7 @@ if(MSVC)
# Flags for C files (sqlite)
# /MT = Link statically with standard library stuff
set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT")
if(BUILD_SERVER)
set_target_properties(${PROJECT_NAME}server PROPERTIES
COMPILE_DEFINITIONS "SERVER")
@ -492,13 +510,13 @@ if(MSVC)
else()
# Probably GCC
if(WARN_ALL)
set(RELEASE_WARNING_FLAGS "-Wall")
else()
set(RELEASE_WARNING_FLAGS "")
endif()
if(NOT APPLE AND NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
CHECK_CXX_COMPILER_FLAG("-Wno-unused-but-set-variable" HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
if(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
@ -521,7 +539,7 @@ else()
if(USE_GPROF)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
endif()
if(BUILD_SERVER)
set_target_properties(${PROJECT_NAME}server PROPERTIES
COMPILE_DEFINITIONS "SERVER")

View File

@ -31,7 +31,6 @@ BanManager::BanManager(const std::string &banfilepath):
m_banfilepath(banfilepath),
m_modified(false)
{
m_mutex.Init();
try{
load();
}

View File

@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include "util/numeric.h"
#include "main.h"
#include "util/mathconstants.h"
NoiseParams nparams_biome_def_heat =
{50, 50, v3f(500.0, 500.0, 500.0), 5349, 3, 0.70};

View File

@ -110,9 +110,21 @@ void CaveV6::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) {
(float)(ps->next() % ar.Z) + 0.5
);
int notifytype = large_cave ? GENNOTIFY_LARGECAVE_BEGIN : GENNOTIFY_CAVE_BEGIN;
if (mg->gennotify & (1 << notifytype)) {
std::vector <v3s16> *nvec = mg->gen_notifications[notifytype];
nvec->push_back(v3s16(of.X + orp.X, of.Y + orp.Y, of.Z + orp.Z));
}
// Generate some tunnel starting from orp
for (u16 j = 0; j < tunnel_routepoints; j++)
makeTunnel(j % dswitchint == 0);
notifytype = large_cave ? GENNOTIFY_LARGECAVE_END : GENNOTIFY_CAVE_END;
if (mg->gennotify & (1 << notifytype)) {
std::vector <v3s16> *nvec = mg->gen_notifications[notifytype];
nvec->push_back(v3s16(of.X + orp.X, of.Y + orp.Y, of.Z + orp.Z));
}
}
@ -236,6 +248,9 @@ void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) {
continue;
u32 i = vm->m_area.index(p);
content_t c = vm->m_data[i].getContent();
if (!ndef->get(c).is_ground_content)
continue;
if (large_cave) {
int full_ymin = node_min.Y - MAP_BLOCKSIZE;
@ -250,7 +265,6 @@ void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) {
}
} else {
// Don't replace air or water or lava or ignore
content_t c = vm->m_data[i].getContent();
if (c == CONTENT_IGNORE || c == CONTENT_AIR ||
c == c_water_source || c == c_lava_source)
continue;
@ -345,9 +359,21 @@ void CaveV7::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) {
(float)(ps->next() % ar.Z) + 0.5
);
int notifytype = large_cave ? GENNOTIFY_LARGECAVE_BEGIN : GENNOTIFY_CAVE_BEGIN;
if (mg->gennotify & (1 << notifytype)) {
std::vector <v3s16> *nvec = mg->gen_notifications[notifytype];
nvec->push_back(v3s16(of.X + orp.X, of.Y + orp.Y, of.Z + orp.Z));
}
// Generate some tunnel starting from orp
for (u16 j = 0; j < tunnel_routepoints; j++)
makeTunnel(j % dswitchint == 0);
notifytype = large_cave ? GENNOTIFY_LARGECAVE_END : GENNOTIFY_CAVE_END;
if (mg->gennotify & (1 << notifytype)) {
std::vector <v3s16> *nvec = mg->gen_notifications[notifytype];
nvec->push_back(v3s16(of.X + orp.X, of.Y + orp.Y, of.Z + orp.Z));
}
}
@ -516,7 +542,8 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) {
v3s16 p(cp.X + x0, cp.Y + y0, cp.Z + z0);
p += of;
if (!is_ravine && mg->heightmap && should_make_cave_hole) {
if (!is_ravine && mg->heightmap && should_make_cave_hole &&
p.X <= node_max.X && p.Z <= node_max.Z) {
int maplen = node_max.X - node_min.X + 1;
int idx = (p.Z - node_min.Z) * maplen + (p.X - node_min.X);
if (p.Y >= mg->heightmap[idx] - 2)
@ -530,8 +557,8 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) {
// Don't replace air, water, lava, or ice
content_t c = vm->m_data[i].getContent();
if (c == CONTENT_AIR || c == c_water_source ||
c == c_lava_source || c == c_ice)
if (!ndef->get(c).is_ground_content || c == CONTENT_AIR ||
c == c_water_source || c == c_lava_source || c == c_ice)
continue;
if (large_cave) {

View File

@ -199,7 +199,7 @@ void SGUITTGlyph::unload()
//////////////////////
CGUITTFont* CGUITTFont::createTTFont(IGUIEnvironment *env, const io::path& filename, const u32 size, const bool antialias, const bool transparency)
CGUITTFont* CGUITTFont::createTTFont(IGUIEnvironment *env, const io::path& filename, const u32 size, const bool antialias, const bool transparency, const u32 shadow, const u32 shadow_alpha)
{
if (!c_libraryLoaded)
{
@ -216,6 +216,9 @@ CGUITTFont* CGUITTFont::createTTFont(IGUIEnvironment *env, const io::path& filen
return 0;
}
font->shadow_offset = shadow;
font->shadow_alpha = shadow_alpha;
return font;
}
@ -625,6 +628,14 @@ void CGUITTFont::draw(const core::stringw& text, const core::rect<s32>& position
CGUITTGlyphPage* page = n->getValue();
if (!use_transparency) color.color |= 0xff000000;
if (shadow_offset) {
for (size_t i = 0; i < page->render_positions.size(); ++i)
page->render_positions[i] += core::vector2di(shadow_offset, shadow_offset);
Driver->draw2DImageBatch(page->texture, page->render_positions, page->render_source_rects, clip, video::SColor(shadow_alpha,0,0,0), true);
for (size_t i = 0; i < page->render_positions.size(); ++i)
page->render_positions[i] -= core::vector2di(shadow_offset, shadow_offset);
}
Driver->draw2DImageBatch(page->texture, page->render_positions, page->render_source_rects, clip, color, true);
}
}

View File

@ -207,7 +207,7 @@ namespace gui
//! \param antialias set the use_monochrome (opposite to antialias) flag
//! \param transparency set the use_transparency flag
//! \return Returns a pointer to a CGUITTFont. Will return 0 if the font failed to load.
static CGUITTFont* createTTFont(IGUIEnvironment *env, const io::path& filename, const u32 size, const bool antialias = true, const bool transparency = true);
static CGUITTFont* createTTFont(IGUIEnvironment *env, const io::path& filename, const u32 size, const bool antialias = true, const bool transparency = true, const u32 shadow = 0, const u32 shadow_alpha = 255);
static CGUITTFont* createTTFont(IrrlichtDevice *device, const io::path& filename, const u32 size, const bool antialias = true, const bool transparency = true);
static CGUITTFont* create(IGUIEnvironment *env, const io::path& filename, const u32 size, const bool antialias = true, const bool transparency = true);
static CGUITTFont* create(IrrlichtDevice *device, const io::path& filename, const u32 size, const bool antialias = true, const bool transparency = true);
@ -369,6 +369,8 @@ namespace gui
s32 GlobalKerningWidth;
s32 GlobalKerningHeight;
core::ustring Invisible;
u32 shadow_offset;
u32 shadow_alpha;
};
} // end namespace gui

View File

@ -205,6 +205,10 @@ inline core::array<u8> getUnicodeBOM(EUTF_ENCODE mode)
case EUTFE_UTF32_LE:
COPY_ARRAY(BOM_ENCODE_UTF32_LE, BOM_ENCODE_UTF32_LEN);
break;
case EUTFE_NONE:
// TODO sapier: fixed warning only,
// don't know if something needs to be done here
break;
}
return ret;
@ -257,7 +261,7 @@ public:
_set(c);
return *this;
}
//! Increments the value by 1.
//! \return Myself.
_ustring16_iterator_access& operator++()
@ -392,7 +396,7 @@ public:
return unicode::toUTF32(a[pos], a[pos + 1]);
}
}
//! Sets a uchar32_t at our current position.
void _set(uchar32_t c)
{
@ -707,7 +711,6 @@ public:
//! Moves the iterator to the end of the string.
void toEnd()
{
const uchar16_t* a = ref->c_str();
pos = ref->size_raw();
}
@ -732,12 +735,13 @@ public:
typedef typename _Base::const_pointer const_pointer;
typedef typename _Base::const_reference const_reference;
typedef typename _Base::value_type value_type;
typedef typename _Base::difference_type difference_type;
typedef typename _Base::distance_type distance_type;
typedef access pointer;
typedef access reference;
using _Base::pos;
using _Base::ref;
@ -2096,7 +2100,7 @@ public:
}
#endif
//! Appends a number to this ustring16.
//! \param c Number to append.
//! \return A reference to our current string.
@ -2958,7 +2962,7 @@ public:
if (endian != unicode::EUTFEE_NATIVE && getEndianness() != endian)
{
for (u32 i = 0; i <= used; ++i)
*ptr++ = unicode::swapEndian16(*ptr);
ptr[i] = unicode::swapEndian16(ptr[i]);
}
ret.set_used(used + (addBOM ? unicode::BOM_UTF16_LEN : 0));
ret.push_back(0);

View File

@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client.h"
#include <iostream>
#include <algorithm>
#include "clientserver.h"
#include "jthread/jmutexautolock.h"
#include "main.h"
@ -37,26 +38,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "itemdef.h"
#include "shader.h"
#include <IFileSystem.h>
#include "sha1.h"
#include "base64.h"
#include "clientmap.h"
#include "filecache.h"
#include "clientmedia.h"
#include "sound.h"
#include "util/string.h"
#include "hex.h"
#include "IMeshCache.h"
#include "serialization.h"
#include "util/serialize.h"
#include "config.h"
#include "util/directiontables.h"
#if USE_CURL
#include <curl/curl.h>
#endif
static std::string getMediaCacheDir()
{
return porting::path_user + DIR_DELIM + "cache" + DIR_DELIM + "media";
}
#include "util/pointedthing.h"
#include "version.h"
/*
QueuedMeshUpdate
@ -81,7 +74,6 @@ QueuedMeshUpdate::~QueuedMeshUpdate()
MeshUpdateQueue::MeshUpdateQueue()
{
m_mutex.Init();
}
MeshUpdateQueue::~MeshUpdateQueue()
@ -176,7 +168,7 @@ void * MeshUpdateThread::Thread()
BEGIN_DEBUG_EXCEPTION_HANDLER
while(getRun())
while(!StopRequested())
{
/*// Wait for output queue to flush.
// Allow 2 in queue, this makes less frametime jitter.
@ -222,45 +214,9 @@ void * MeshUpdateThread::Thread()
return NULL;
}
void * MediaFetchThread::Thread()
{
ThreadStarted();
log_register_thread("MediaFetchThread");
DSTACK(__FUNCTION_NAME);
BEGIN_DEBUG_EXCEPTION_HANDLER
#if USE_CURL
CURL *curl;
CURLcode res;
for (std::list<MediaRequest>::iterator i = m_file_requests.begin();
i != m_file_requests.end(); ++i) {
curl = curl_easy_init();
assert(curl);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curl, CURLOPT_URL, (m_remote_url + i->name).c_str());
curl_easy_setopt(curl, CURLOPT_FAILONERROR, true);
std::ostringstream stream;
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &stream);
res = curl_easy_perform(curl);
if (res == CURLE_OK) {
std::string data = stream.str();
m_file_data.push_back(make_pair(i->name, data));
} else {
m_failed.push_back(*i);
infostream << "cURL request failed for " << i->name << " (" << curl_easy_strerror(res) << ")"<< std::endl;
}
curl_easy_cleanup(curl);
}
#endif
END_DEBUG_EXCEPTION_HANDLER(errorstream)
return NULL;
}
/*
Client
*/
Client::Client(
IrrlichtDevice *device,
@ -302,12 +258,9 @@ Client::Client(
m_map_seed(0),
m_password(password),
m_access_denied(false),
m_media_cache(getMediaCacheDir()),
m_media_receive_started(false),
m_media_count(0),
m_media_received_count(0),
m_itemdef_received(false),
m_nodedef_received(false),
m_media_downloader(new ClientMediaDownloader()),
m_time_of_day_set(false),
m_last_time_of_day_f(-1),
m_time_of_day_update_timer(0),
@ -331,9 +284,6 @@ Client::Client(
m_env.addPlayer(player);
}
for (size_t i = 0; i < g_settings->getU16("media_fetch_threads"); ++i)
m_media_fetch_threads.push_back(new MediaFetchThread(this));
}
Client::~Client()
@ -343,9 +293,8 @@ Client::~Client()
m_con.Disconnect();
}
m_mesh_update_thread.setRun(false);
while(m_mesh_update_thread.IsRunning())
sleep_ms(100);
m_mesh_update_thread.Stop();
m_mesh_update_thread.Wait();
while(!m_mesh_update_thread.m_queue_out.empty()) {
MeshUpdateResult r = m_mesh_update_thread.m_queue_out.pop_front();
delete r.mesh;
@ -363,10 +312,6 @@ Client::~Client()
}
}
for (std::list<MediaFetchThread*>::iterator i = m_media_fetch_threads.begin();
i != m_media_fetch_threads.end(); ++i)
delete *i;
// cleanup 3d model meshes on client shutdown
while (m_device->getSceneManager()->getMeshCache()->getMeshCount() != 0) {
scene::IAnimatedMesh * mesh =
@ -472,7 +417,7 @@ void Client::step(float dtime)
core::list<v3s16> deleted_blocks;
float delete_unused_sectors_timeout =
float delete_unused_sectors_timeout =
g_settings->getFloat("client_delete_unused_sectors_timeout");
// Delete sector blocks
@ -796,57 +741,11 @@ void Client::step(float dtime)
/*
Load fetched media
*/
if (m_media_receive_started) {
bool all_stopped = true;
for (std::list<MediaFetchThread*>::iterator thread = m_media_fetch_threads.begin();
thread != m_media_fetch_threads.end(); ++thread) {
all_stopped &= !(*thread)->IsRunning();
while (!(*thread)->m_file_data.empty()) {
std::pair <std::string, std::string> out = (*thread)->m_file_data.pop_front();
if(m_media_received_count < m_media_count)
m_media_received_count++;
bool success = loadMedia(out.second, out.first);
if(success){
verbosestream<<"Client: Loaded received media: "
<<"\""<<out.first<<"\". Caching."<<std::endl;
} else{
infostream<<"Client: Failed to load received media: "
<<"\""<<out.first<<"\". Not caching."<<std::endl;
continue;
}
bool did = fs::CreateAllDirs(getMediaCacheDir());
if(!did){
errorstream<<"Could not create media cache directory"
<<std::endl;
}
{
std::map<std::string, std::string>::iterator n;
n = m_media_name_sha1_map.find(out.first);
if(n == m_media_name_sha1_map.end())
errorstream<<"The server sent a file that has not "
<<"been announced."<<std::endl;
else
m_media_cache.update_sha1(out.second);
}
}
}
if (all_stopped) {
std::list<MediaRequest> fetch_failed;
for (std::list<MediaFetchThread*>::iterator thread = m_media_fetch_threads.begin();
thread != m_media_fetch_threads.end(); ++thread) {
for (std::list<MediaRequest>::iterator request = (*thread)->m_failed.begin();
request != (*thread)->m_failed.end(); ++request)
fetch_failed.push_back(*request);
(*thread)->m_failed.clear();
}
if (fetch_failed.size() > 0) {
infostream << "Failed to remote-fetch " << fetch_failed.size() << " files. "
<< "Requesting them the usual way." << std::endl;
request_media(fetch_failed);
}
if (m_media_downloader && m_media_downloader->isStarted()) {
m_media_downloader->step(this);
if (m_media_downloader->isDone()) {
delete m_media_downloader;
m_media_downloader = NULL;
}
}
@ -1047,15 +946,15 @@ void Client::deletingPeer(con::Peer *peer, bool timeout)
string name
}
*/
void Client::request_media(const std::list<MediaRequest> &file_requests)
void Client::request_media(const std::list<std::string> &file_requests)
{
std::ostringstream os(std::ios_base::binary);
writeU16(os, TOSERVER_REQUEST_MEDIA);
writeU16(os, file_requests.size());
for(std::list<MediaRequest>::const_iterator i = file_requests.begin();
for(std::list<std::string>::const_iterator i = file_requests.begin();
i != file_requests.end(); ++i) {
os<<serializeString(i->name);
os<<serializeString(*i);
}
// Make data buffer
@ -1067,6 +966,19 @@ void Client::request_media(const std::list<MediaRequest> &file_requests)
<<file_requests.size()<<" files)"<<std::endl;
}
void Client::received_media()
{
// notify server we received everything
std::ostringstream os(std::ios_base::binary);
writeU16(os, TOSERVER_RECEIVED_MEDIA);
std::string s = os.str();
SharedBuffer<u8> data((u8*)s.c_str(), s.size());
// Send as reliable
Send(0, data, true);
infostream<<"Client: Notifying server that we received all media"
<<std::endl;
}
void Client::ReceiveAll()
{
DSTACK(__FUNCTION_NAME);
@ -1260,7 +1172,13 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
MapNode n;
n.deSerialize(&data[8], ser_version);
addNode(p, n);
bool remove_metadata = true;
u32 index = 8 + MapNode::serializedLength(ser_version);
if ((datasize >= index+1) && data[index]){
remove_metadata = false;
}
addNode(p, n, remove_metadata);
}
else if(command == TOCLIENT_BLOCKDATA)
{
@ -1653,96 +1571,54 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
std::string datastring((char*)&data[2], datasize-2);
std::istringstream is(datastring, std::ios_base::binary);
// Mesh update thread must be stopped while
// updating content definitions
assert(!m_mesh_update_thread.IsRunning());
int num_files = readU16(is);
infostream<<"Client: Received media announcement: packet size: "
<<datasize<<std::endl;
std::list<MediaRequest> file_requests;
if (m_media_downloader == NULL ||
m_media_downloader->isStarted()) {
const char *problem = m_media_downloader ?
"we already saw another announcement" :
"all media has been received already";
errorstream<<"Client: Received media announcement but "
<<problem<<"! "
<<" files="<<num_files
<<" size="<<datasize<<std::endl;
return;
}
// Mesh update thread must be stopped while
// updating content definitions
assert(!m_mesh_update_thread.IsRunning());
for(int i=0; i<num_files; i++)
{
//read file from cache
std::string name = deSerializeString(is);
std::string sha1_base64 = deSerializeString(is);
// if name contains illegal characters, ignore the file
if(!string_allowed(name, TEXTURENAME_ALLOWED_CHARS)){
errorstream<<"Client: ignoring illegal file name "
<<"sent by server: \""<<name<<"\""<<std::endl;
continue;
}
std::string sha1_raw = base64_decode(sha1_base64);
std::string sha1_hex = hex_encode(sha1_raw);
std::ostringstream tmp_os(std::ios_base::binary);
bool found_in_cache = m_media_cache.load_sha1(sha1_raw, tmp_os);
m_media_name_sha1_map[name] = sha1_raw;
// If found in cache, try to load it from there
if(found_in_cache)
{
bool success = loadMedia(tmp_os.str(), name);
if(success){
verbosestream<<"Client: Loaded cached media: "
<<sha1_hex<<" \""<<name<<"\""<<std::endl;
continue;
} else{
infostream<<"Client: Failed to load cached media: "
<<sha1_hex<<" \""<<name<<"\""<<std::endl;
}
}
// Didn't load from cache; queue it to be requested
verbosestream<<"Client: Adding file to request list: \""
<<sha1_hex<<" \""<<name<<"\""<<std::endl;
file_requests.push_back(MediaRequest(name));
m_media_downloader->addFile(name, sha1_raw);
}
std::string remote_media = "";
std::vector<std::string> remote_media;
try {
remote_media = deSerializeString(is);
Strfnd sf(deSerializeString(is));
while(!sf.atend()) {
std::string baseurl = trim(sf.next(","));
if(baseurl != "")
m_media_downloader->addRemoteServer(baseurl);
}
}
catch(SerializationError) {
// not supported by server or turned off
}
m_media_count = file_requests.size();
m_media_receive_started = true;
if (remote_media == "" || !USE_CURL) {
request_media(file_requests);
} else {
#if USE_CURL
std::list<MediaFetchThread*>::iterator cur = m_media_fetch_threads.begin();
for(std::list<MediaRequest>::iterator i = file_requests.begin();
i != file_requests.end(); ++i) {
(*cur)->m_file_requests.push_back(*i);
cur++;
if (cur == m_media_fetch_threads.end())
cur = m_media_fetch_threads.begin();
}
for (std::list<MediaFetchThread*>::iterator i = m_media_fetch_threads.begin();
i != m_media_fetch_threads.end(); ++i) {
(*i)->m_remote_url = remote_media;
(*i)->Start();
}
#endif
// notify server we received everything
std::ostringstream os(std::ios_base::binary);
writeU16(os, TOSERVER_RECEIVED_MEDIA);
std::string s = os.str();
SharedBuffer<u8> data((u8*)s.c_str(), s.size());
// Send as reliable
Send(0, data, true);
m_media_downloader->step(this);
if (m_media_downloader->isDone()) {
// might be done already if all media is in the cache
delete m_media_downloader;
m_media_downloader = NULL;
}
ClientEvent event;
event.type = CE_TEXTURES_UPDATED;
m_client_event_queue.push_back(event);
}
else if(command == TOCLIENT_MEDIA)
{
@ -1768,67 +1644,37 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
<<num_bunches<<" files="<<num_files
<<" size="<<datasize<<std::endl;
// Check total and received media count
assert(m_media_received_count <= m_media_count);
if (num_files > m_media_count - m_media_received_count) {
errorstream<<"Client: Received more files than requested:"
<<" total count="<<m_media_count
<<" total received="<<m_media_received_count
if (num_files == 0)
return;
if (m_media_downloader == NULL ||
!m_media_downloader->isStarted()) {
const char *problem = m_media_downloader ?
"media has not been requested" :
"all media has been received already";
errorstream<<"Client: Received media but "
<<problem<<"! "
<<" bunch "<<bunch_i<<"/"<<num_bunches
<<" files="<<num_files
<<" size="<<datasize<<std::endl;
num_files = m_media_count - m_media_received_count;
}
if (num_files == 0)
return;
}
// Mesh update thread must be stopped while
// updating content definitions
assert(!m_mesh_update_thread.IsRunning());
for(u32 i=0; i<num_files; i++){
assert(m_media_received_count < m_media_count);
m_media_received_count++;
std::string name = deSerializeString(is);
std::string data = deSerializeLongString(is);
// if name contains illegal characters, ignore the file
if(!string_allowed(name, TEXTURENAME_ALLOWED_CHARS)){
errorstream<<"Client: ignoring illegal file name "
<<"sent by server: \""<<name<<"\""<<std::endl;
continue;
}
bool success = loadMedia(data, name);
if(success){
verbosestream<<"Client: Loaded received media: "
<<"\""<<name<<"\". Caching."<<std::endl;
} else{
infostream<<"Client: Failed to load received media: "
<<"\""<<name<<"\". Not caching."<<std::endl;
continue;
}
bool did = fs::CreateAllDirs(getMediaCacheDir());
if(!did){
errorstream<<"Could not create media cache directory"
<<std::endl;
}
{
std::map<std::string, std::string>::iterator n;
n = m_media_name_sha1_map.find(name);
if(n == m_media_name_sha1_map.end())
errorstream<<"The server sent a file that has not "
<<"been announced."<<std::endl;
else
m_media_cache.update_sha1(data);
}
m_media_downloader->conventionalTransferDone(
name, data, this);
}
ClientEvent event;
event.type = CE_TEXTURES_UPDATED;
m_client_event_queue.push_back(event);
if (m_media_downloader->isDone()) {
delete m_media_downloader;
m_media_downloader = NULL;
}
}
else if(command == TOCLIENT_TOOLDEF)
{
@ -2118,7 +1964,7 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
m_client_event_queue.push_back(event);
}
else if(command == TOCLIENT_HUDCHANGE)
{
{
std::string sdata;
v2f v2fdata;
u32 intdata = 0;
@ -2147,7 +1993,7 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
m_client_event_queue.push_back(event);
}
else if(command == TOCLIENT_HUD_SET_FLAGS)
{
{
std::string datastring((char *)&data[2], datasize - 2);
std::istringstream is(datastring, std::ios_base::binary);
@ -2256,7 +2102,7 @@ void Client::sendNodemetaFields(v3s16 p, const std::string &formname,
Send(0, data, true);
}
void Client::sendInventoryFields(const std::string &formname,
void Client::sendInventoryFields(const std::string &formname,
const std::map<std::string, std::string> &fields)
{
std::ostringstream os(std::ios_base::binary);
@ -2460,7 +2306,7 @@ void Client::sendPlayerPos()
writeV3S32(&data[2], position);
writeV3S32(&data[2+12], speed);
writeS32(&data[2+12+12], pitch);
writeS32(&data[2+12+12+4], yaw);
writeS32(&data[2+12+12+4], yaw);
writeU32(&data[2+12+12+4+4], keyPressed);
// Send as unreliable
Send(0, data, false);
@ -2512,7 +2358,7 @@ void Client::removeNode(v3s16 p)
}
}
void Client::addNode(v3s16 p, MapNode n)
void Client::addNode(v3s16 p, MapNode n, bool remove_metadata)
{
TimeTaker timer1("Client::addNode()");
@ -2521,7 +2367,7 @@ void Client::addNode(v3s16 p, MapNode n)
try
{
//TimeTaker timer3("Client::addNode(): addNodeAndUpdate");
m_env.getMap().addNodeAndUpdate(p, n, modified_blocks);
m_env.getMap().addNodeAndUpdate(p, n, modified_blocks, remove_metadata);
}
catch(InvalidPositionException &e)
{}
@ -2878,6 +2724,14 @@ ClientEvent Client::getClientEvent()
return m_client_event_queue.pop_front();
}
float Client::mediaReceiveProgress()
{
if (m_media_downloader)
return m_media_downloader->getProgress();
else
return 1.0; // downloader only exists when not yet done
}
void draw_load_screen(const std::wstring &text,
IrrlichtDevice* device, gui::IGUIFont* font,
float dtime=0 ,int percent=0, bool clouds=true);
@ -2886,12 +2740,8 @@ void Client::afterContentReceived(IrrlichtDevice *device, gui::IGUIFont* font)
infostream<<"Client::afterContentReceived() started"<<std::endl;
assert(m_itemdef_received);
assert(m_nodedef_received);
assert(texturesReceived());
assert(mediaReceived());
// remove the information about which checksum each texture
// ought to have
m_media_name_sha1_map.clear();
// Rebuild inherited images and recreate textures
infostream<<"- Rebuilding images and textures"<<std::endl;
m_tsrc->rebuildImagesAndTextures();

View File

@ -31,32 +31,21 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "clientobject.h"
#include "gamedef.h"
#include "inventorymanager.h"
#include "filecache.h"
#include "localplayer.h"
#include "server.h"
#include "hud.h"
#include "particles.h"
#include "util/pointedthing.h"
#include <algorithm>
struct MeshMakeData;
class MapBlockMesh;
class IGameDef;
class IWritableTextureSource;
class IWritableShaderSource;
class IWritableItemDefManager;
class IWritableNodeDefManager;
//class IWritableCraftDefManager;
class ClientEnvironment;
class ClientMediaDownloader;
struct MapDrawControl;
class MtEventManager;
class ClientNotReadyException : public BaseException
{
public:
ClientNotReadyException(const char *s):
BaseException(s)
{}
};
struct PointedThing;
struct QueuedMeshUpdate
{
@ -114,7 +103,7 @@ struct MeshUpdateResult
}
};
class MeshUpdateThread : public SimpleThread
class MeshUpdateThread : public JThread
{
public:
@ -132,31 +121,12 @@ public:
IGameDef *m_gamedef;
};
class MediaFetchThread : public SimpleThread
{
public:
MediaFetchThread(IGameDef *gamedef):
m_gamedef(gamedef)
{
}
void * Thread();
std::list<MediaRequest> m_file_requests;
MutexedQueue<std::pair<std::string, std::string> > m_file_data;
std::list<MediaRequest> m_failed;
std::string m_remote_url;
IGameDef *m_gamedef;
};
enum ClientEventType
{
CE_NONE,
CE_PLAYER_DAMAGE,
CE_PLAYER_FORCE_MOVE,
CE_DEATHSCREEN,
CE_TEXTURES_UPDATED,
CE_SHOW_FORMSPEC,
CE_SPAWN_PARTICLE,
CE_ADD_PARTICLESPAWNER,
@ -365,7 +335,7 @@ public:
// Causes urgent mesh updates (unlike Map::add/removeNodeWithEvent)
void removeNode(v3s16 p);
void addNode(v3s16 p, MapNode n);
void addNode(v3s16 p, MapNode n, bool remove_metadata = true);
void setPlayerControl(PlayerControl &control);
@ -426,19 +396,15 @@ public:
std::wstring accessDeniedReason()
{ return m_access_denied_reason; }
float mediaReceiveProgress()
{
if (!m_media_receive_started) return 0;
return 1.0 * m_media_received_count / m_media_count;
}
bool texturesReceived()
{ return m_media_receive_started && m_media_received_count == m_media_count; }
bool itemdefReceived()
{ return m_itemdef_received; }
bool nodedefReceived()
{ return m_nodedef_received; }
bool mediaReceived()
{ return m_media_downloader == NULL; }
float mediaReceiveProgress();
void afterContentReceived(IrrlichtDevice *device, gui::IGUIFont* font);
float getRTT(void);
@ -455,12 +421,15 @@ public:
virtual bool checkLocalPrivilege(const std::string &priv)
{ return checkPrivilege(priv); }
private:
// The following set of functions is used by ClientMediaDownloader
// Insert a media file appropriately into the appropriate manager
bool loadMedia(const std::string &data, const std::string &filename);
// Send a request for conventional media transfer
void request_media(const std::list<std::string> &file_requests);
// Send a notification that no conventional media transfer is needed
void received_media();
void request_media(const std::list<MediaRequest> &file_requests);
private:
// Virtual methods from con::PeerHandler
void peerAdded(con::Peer *peer);
@ -488,7 +457,6 @@ private:
MtEventManager *m_event;
MeshUpdateThread m_mesh_update_thread;
std::list<MediaFetchThread*> m_media_fetch_threads;
ClientEnvironment m_env;
con::Connection m_con;
IrrlichtDevice *m_device;
@ -514,14 +482,9 @@ private:
bool m_access_denied;
std::wstring m_access_denied_reason;
Queue<ClientEvent> m_client_event_queue;
FileCache m_media_cache;
// Mapping from media file name to SHA1 checksum
std::map<std::string, std::string> m_media_name_sha1_map;
bool m_media_receive_started;
u32 m_media_count;
u32 m_media_received_count;
bool m_itemdef_received;
bool m_nodedef_received;
ClientMediaDownloader *m_media_downloader;
// time_of_day speed approximation for old protocol
bool m_time_of_day_set;

View File

@ -50,9 +50,6 @@ ClientMap::ClientMap(
m_camera_direction(0,0,1),
m_camera_fov(M_PI)
{
m_camera_mutex.Init();
assert(m_camera_mutex.IsInitialized());
m_box = core::aabbox3d<f32>(-BS*1000000,-BS*1000000,-BS*1000000,
BS*1000000,BS*1000000,BS*1000000);
}

656
src/clientmedia.cpp Normal file
View File

@ -0,0 +1,656 @@
/*
Minetest
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
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.
*/
#include "clientmedia.h"
#include "httpfetch.h"
#include "client.h"
#include "clientserver.h"
#include "filecache.h"
#include "hex.h"
#include "sha1.h"
#include "debug.h"
#include "log.h"
#include "porting.h"
#include "settings.h"
#include "main.h"
#include "util/serialize.h"
#include "util/string.h"
static std::string getMediaCacheDir()
{
return porting::path_user + DIR_DELIM + "cache" + DIR_DELIM + "media";
}
/*
ClientMediaDownloader
*/
ClientMediaDownloader::ClientMediaDownloader():
m_media_cache(getMediaCacheDir())
{
m_initial_step_done = false;
m_name_bound = ""; // works because "" is an invalid file name
m_uncached_count = 0;
m_uncached_received_count = 0;
m_httpfetch_caller = HTTPFETCH_DISCARD;
m_httpfetch_active = 0;
m_httpfetch_active_limit = 0;
m_httpfetch_next_id = 0;
m_httpfetch_timeout = 0;
m_outstanding_hash_sets = 0;
}
ClientMediaDownloader::~ClientMediaDownloader()
{
if (m_httpfetch_caller != HTTPFETCH_DISCARD)
httpfetch_caller_free(m_httpfetch_caller);
for (std::map<std::string, FileStatus*>::iterator it = m_files.begin();
it != m_files.end(); ++it)
delete it->second;
for (u32 i = 0; i < m_remotes.size(); ++i)
delete m_remotes[i];
}
void ClientMediaDownloader::addFile(std::string name, std::string sha1)
{
assert(!m_initial_step_done);
// if name was already announced, ignore the new announcement
if (m_files.count(name) != 0) {
errorstream << "Client: ignoring duplicate media announcement "
<< "sent by server: \"" << name << "\""
<< std::endl;
return;
}
// if name is empty or contains illegal characters, ignore the file
if (name.empty() || !string_allowed(name, TEXTURENAME_ALLOWED_CHARS)) {
errorstream << "Client: ignoring illegal file name "
<< "sent by server: \"" << name << "\""
<< std::endl;
return;
}
// length of sha1 must be exactly 20 (160 bits), else ignore the file
if (sha1.size() != 20) {
errorstream << "Client: ignoring illegal SHA1 sent by server: "
<< hex_encode(sha1) << " \"" << name << "\""
<< std::endl;
return;
}
FileStatus *filestatus = new FileStatus;
filestatus->received = false;
filestatus->sha1 = sha1;
filestatus->current_remote = -1;
m_files.insert(std::make_pair(name, filestatus));
}
void ClientMediaDownloader::addRemoteServer(std::string baseurl)
{
assert(!m_initial_step_done);
#ifdef USE_CURL
infostream << "Client: Adding remote server \""
<< baseurl << "\" for media download" << std::endl;
RemoteServerStatus *remote = new RemoteServerStatus;
remote->baseurl = baseurl;
remote->active_count = 0;
remote->request_by_filename = false;
m_remotes.push_back(remote);
#else
infostream << "Client: Ignoring remote server \""
<< baseurl << "\" because cURL support is not compiled in"
<< std::endl;
#endif
}
void ClientMediaDownloader::step(Client *client)
{
if (!m_initial_step_done) {
initialStep(client);
m_initial_step_done = true;
}
// Remote media: check for completion of fetches
if (m_httpfetch_active) {
bool fetched_something = false;
HTTPFetchResult fetchresult;
while (httpfetch_async_get(m_httpfetch_caller, fetchresult)) {
m_httpfetch_active--;
fetched_something = true;
// Is this a hashset (index.mth) or a media file?
if (fetchresult.request_id < m_remotes.size())
remoteHashSetReceived(fetchresult);
else
remoteMediaReceived(fetchresult, client);
}
if (fetched_something)
startRemoteMediaTransfers();
// Did all remote transfers end and no new ones can be started?
// If so, request still missing files from the minetest server
// (Or report that we have all files.)
if (m_httpfetch_active == 0) {
if (m_uncached_received_count < m_uncached_count) {
infostream << "Client: Failed to remote-fetch "
<< (m_uncached_count-m_uncached_received_count)
<< " files. Requesting them"
<< " the usual way." << std::endl;
}
startConventionalTransfers(client);
}
}
}
void ClientMediaDownloader::initialStep(Client *client)
{
// Check media cache
m_uncached_count = m_files.size();
for (std::map<std::string, FileStatus*>::iterator
it = m_files.begin();
it != m_files.end(); ++it) {
std::string name = it->first;
FileStatus *filestatus = it->second;
const std::string &sha1 = filestatus->sha1;
std::ostringstream tmp_os(std::ios_base::binary);
bool found_in_cache = m_media_cache.load(hex_encode(sha1), tmp_os);
// If found in cache, try to load it from there
if (found_in_cache) {
bool success = checkAndLoad(name, sha1,
tmp_os.str(), true, client);
if (success) {
filestatus->received = true;
m_uncached_count--;
}
}
}
assert(m_uncached_received_count == 0);
// Create the media cache dir if we are likely to write to it
if (m_uncached_count != 0) {
bool did = fs::CreateAllDirs(getMediaCacheDir());
if (!did) {
errorstream << "Client: "
<< "Could not create media cache directory: "
<< getMediaCacheDir()
<< std::endl;
}
}
// If we found all files in the cache, report this fact to the server.
// If the server reported no remote servers, immediately start
// conventional transfers. Note: if cURL support is not compiled in,
// m_remotes is always empty, so "!USE_CURL" is redundant but may
// reduce the size of the compiled code
if (!USE_CURL || m_uncached_count == 0 || m_remotes.empty()) {
startConventionalTransfers(client);
}
else {
// Otherwise start off by requesting each server's sha1 set
// This is the first time we use httpfetch, so alloc a caller ID
m_httpfetch_caller = httpfetch_caller_alloc();
m_httpfetch_timeout = g_settings->getS32("curl_timeout");
// Set the active fetch limit to curl_parallel_limit or 84,
// whichever is greater. This gives us some leeway so that
// inefficiencies in communicating with the httpfetch thread
// don't slow down fetches too much. (We still want some limit
// so that when the first remote server returns its hash set,
// not all files are requested from that server immediately.)
// One such inefficiency is that ClientMediaDownloader::step()
// is only called a couple times per second, while httpfetch
// might return responses much faster than that.
// Note that httpfetch strictly enforces curl_parallel_limit
// but at no inter-thread communication cost. This however
// doesn't help with the aforementioned inefficiencies.
// The signifance of 84 is that it is 2*6*9 in base 13.
m_httpfetch_active_limit = g_settings->getS32("curl_parallel_limit");
m_httpfetch_active_limit = MYMAX(m_httpfetch_active_limit, 84);
// Write a list of hashes that we need. This will be POSTed
// to the server using Content-Type: application/octet-stream
std::string required_hash_set = serializeRequiredHashSet();
// minor fixme: this loop ignores m_httpfetch_active_limit
// another minor fixme, unlikely to matter in normal usage:
// these index.mth fetches do (however) count against
// m_httpfetch_active_limit when starting actual media file
// requests, so if there are lots of remote servers that are
// not responding, those will stall new media file transfers.
for (u32 i = 0; i < m_remotes.size(); ++i) {
assert(m_httpfetch_next_id == i);
RemoteServerStatus *remote = m_remotes[i];
actionstream << "Client: Contacting remote server \""
<< remote->baseurl << "\"" << std::endl;
HTTPFetchRequest fetchrequest;
fetchrequest.url =
remote->baseurl + MTHASHSET_FILE_NAME;
fetchrequest.caller = m_httpfetch_caller;
fetchrequest.request_id = m_httpfetch_next_id; // == i
fetchrequest.timeout = m_httpfetch_timeout;
fetchrequest.connect_timeout = m_httpfetch_timeout;
fetchrequest.post_fields = required_hash_set;
fetchrequest.extra_headers.push_back(
"Content-Type: application/octet-stream");
httpfetch_async(fetchrequest);
m_httpfetch_active++;
m_httpfetch_next_id++;
m_outstanding_hash_sets++;
}
}
}
void ClientMediaDownloader::remoteHashSetReceived(
const HTTPFetchResult &fetchresult)
{
u32 remote_id = fetchresult.request_id;
assert(remote_id < m_remotes.size());
RemoteServerStatus *remote = m_remotes[remote_id];
m_outstanding_hash_sets--;
if (fetchresult.succeeded) {
try {
// Server sent a list of file hashes that are
// available on it, try to parse the list
std::set<std::string> sha1_set;
deSerializeHashSet(fetchresult.data, sha1_set);
// Parsing succeeded: For every file that is
// available on this server, add this server
// to the available_remotes array
for(std::map<std::string, FileStatus*>::iterator
it = m_files.upper_bound(m_name_bound);
it != m_files.end(); ++it) {
FileStatus *f = it->second;
if (!f->received && sha1_set.count(f->sha1))
f->available_remotes.push_back(remote_id);
}
}
catch (SerializationError &e) {
infostream << "Client: Remote server \""
<< remote->baseurl << "\" sent invalid hash set: "
<< e.what() << std::endl;
}
}
// For compatibility: If index.mth is not found, assume that the
// server contains files named like the original files (not their sha1)
if (!fetchresult.succeeded && !fetchresult.timeout &&
fetchresult.response_code == 404) {
infostream << "Client: Enabling compatibility mode for remote "
<< "server \"" << remote->baseurl << "\"" << std::endl;
remote->request_by_filename = true;
// Assume every file is available on this server
for(std::map<std::string, FileStatus*>::iterator
it = m_files.upper_bound(m_name_bound);
it != m_files.end(); ++it) {
FileStatus *f = it->second;
if (!f->received)
f->available_remotes.push_back(remote_id);
}
}
}
void ClientMediaDownloader::remoteMediaReceived(
const HTTPFetchResult &fetchresult,
Client *client)
{
// Some remote server sent us a file.
// -> decrement number of active fetches
// -> mark file as received if fetch succeeded
// -> try to load media
std::string name;
{
std::map<unsigned long, std::string>::iterator it =
m_remote_file_transfers.find(fetchresult.request_id);
assert(it != m_remote_file_transfers.end());
name = it->second;
m_remote_file_transfers.erase(it);
}
assert(m_files.count(name) != 0);
FileStatus *filestatus = m_files[name];
assert(!filestatus->received);
assert(filestatus->current_remote >= 0);
RemoteServerStatus *remote = m_remotes[filestatus->current_remote];
filestatus->current_remote = -1;
remote->active_count--;
// If fetch succeeded, try to load media file
if (fetchresult.succeeded) {
bool success = checkAndLoad(name, filestatus->sha1,
fetchresult.data, false, client);
if (success) {
filestatus->received = true;
assert(m_uncached_received_count < m_uncached_count);
m_uncached_received_count++;
}
}
}
s32 ClientMediaDownloader::selectRemoteServer(FileStatus *filestatus)
{
assert(filestatus != NULL);
assert(!filestatus->received);
assert(filestatus->current_remote < 0);
if (filestatus->available_remotes.empty())
return -1;
else {
// Of all servers that claim to provide the file (and haven't
// been unsuccessfully tried before), find the one with the
// smallest number of currently active transfers
s32 best = 0;
s32 best_remote_id = filestatus->available_remotes[best];
s32 best_active_count = m_remotes[best_remote_id]->active_count;
for (u32 i = 1; i < filestatus->available_remotes.size(); ++i) {
s32 remote_id = filestatus->available_remotes[i];
s32 active_count = m_remotes[remote_id]->active_count;
if (active_count < best_active_count) {
best = i;
best_remote_id = remote_id;
best_active_count = active_count;
}
}
filestatus->available_remotes.erase(
filestatus->available_remotes.begin() + best);
return best_remote_id;
}
}
void ClientMediaDownloader::startRemoteMediaTransfers()
{
bool changing_name_bound = true;
for (std::map<std::string, FileStatus*>::iterator
files_iter = m_files.upper_bound(m_name_bound);
files_iter != m_files.end(); ++files_iter) {
// Abort if active fetch limit is exceeded
if (m_httpfetch_active >= m_httpfetch_active_limit)
break;
const std::string &name = files_iter->first;
FileStatus *filestatus = files_iter->second;
if (!filestatus->received && filestatus->current_remote < 0) {
// File has not been received yet and is not currently
// being transferred. Choose a server for it.
s32 remote_id = selectRemoteServer(filestatus);
if (remote_id >= 0) {
// Found a server, so start fetching
RemoteServerStatus *remote =
m_remotes[remote_id];
std::string url = remote->baseurl +
(remote->request_by_filename ? name :
hex_encode(filestatus->sha1));
verbosestream << "Client: "
<< "Requesting remote media file "
<< "\"" << name << "\" "
<< "\"" << url << "\"" << std::endl;
HTTPFetchRequest fetchrequest;
fetchrequest.url = url;
fetchrequest.caller = m_httpfetch_caller;
fetchrequest.request_id = m_httpfetch_next_id;
fetchrequest.timeout = 0; // no data timeout!
fetchrequest.connect_timeout =
m_httpfetch_timeout;
httpfetch_async(fetchrequest);
m_remote_file_transfers.insert(std::make_pair(
m_httpfetch_next_id,
name));
filestatus->current_remote = remote_id;
remote->active_count++;
m_httpfetch_active++;
m_httpfetch_next_id++;
}
}
if (filestatus->received ||
(filestatus->current_remote < 0 &&
!m_outstanding_hash_sets)) {
// If we arrive here, we conclusively know that we
// won't fetch this file from a remote server in the
// future. So update the name bound if possible.
if (changing_name_bound)
m_name_bound = name;
}
else
changing_name_bound = false;
}
}
void ClientMediaDownloader::startConventionalTransfers(Client *client)
{
assert(m_httpfetch_active == 0);
if (m_uncached_received_count == m_uncached_count) {
// In this case all media was found in the cache or
// has been downloaded from some remote server;
// report this fact to the server
client->received_media();
}
else {
// Some media files have not been received yet, use the
// conventional slow method (minetest protocol) to get them
std::list<std::string> file_requests;
for (std::map<std::string, FileStatus*>::iterator
it = m_files.begin();
it != m_files.end(); ++it) {
if (!it->second->received)
file_requests.push_back(it->first);
}
assert((s32) file_requests.size() ==
m_uncached_count - m_uncached_received_count);
client->request_media(file_requests);
}
}
void ClientMediaDownloader::conventionalTransferDone(
const std::string &name,
const std::string &data,
Client *client)
{
// Check that file was announced
std::map<std::string, FileStatus*>::iterator
file_iter = m_files.find(name);
if (file_iter == m_files.end()) {
errorstream << "Client: server sent media file that was"
<< "not announced, ignoring it: \"" << name << "\""
<< std::endl;
return;
}
FileStatus *filestatus = file_iter->second;
assert(filestatus != NULL);
// Check that file hasn't already been received
if (filestatus->received) {
errorstream << "Client: server sent media file that we already"
<< "received, ignoring it: \"" << name << "\""
<< std::endl;
return;
}
// Mark file as received, regardless of whether loading it works and
// whether the checksum matches (because at this point there is no
// other server that could send a replacement)
filestatus->received = true;
assert(m_uncached_received_count < m_uncached_count);
m_uncached_received_count++;
// Check that received file matches announced checksum
// If so, load it
checkAndLoad(name, filestatus->sha1, data, false, client);
}
bool ClientMediaDownloader::checkAndLoad(
const std::string &name, const std::string &sha1,
const std::string &data, bool is_from_cache, Client *client)
{
const char *cached_or_received = is_from_cache ? "cached" : "received";
const char *cached_or_received_uc = is_from_cache ? "Cached" : "Received";
std::string sha1_hex = hex_encode(sha1);
// Compute actual checksum of data
std::string data_sha1;
{
SHA1 data_sha1_calculator;
data_sha1_calculator.addBytes(data.c_str(), data.size());
unsigned char *data_tmpdigest = data_sha1_calculator.getDigest();
data_sha1.assign((char*) data_tmpdigest, 20);
free(data_tmpdigest);
}
// Check that received file matches announced checksum
if (data_sha1 != sha1) {
std::string data_sha1_hex = hex_encode(data_sha1);
infostream << "Client: "
<< cached_or_received_uc << " media file "
<< sha1_hex << " \"" << name << "\" "
<< "mismatches actual checksum " << data_sha1_hex
<< std::endl;
return false;
}
// Checksum is ok, try loading the file
bool success = client->loadMedia(data, name);
if (!success) {
infostream << "Client: "
<< "Failed to load " << cached_or_received << " media: "
<< sha1_hex << " \"" << name << "\""
<< std::endl;
return false;
}
verbosestream << "Client: "
<< "Loaded " << cached_or_received << " media: "
<< sha1_hex << " \"" << name << "\""
<< std::endl;
// Update cache (unless we just loaded the file from the cache)
if (!is_from_cache)
m_media_cache.update(sha1_hex, data);
return true;
}
/*
Minetest Hashset File Format
All values are stored in big-endian byte order.
[u32] signature: 'MTHS'
[u16] version: 1
For each hash in set:
[u8*20] SHA1 hash
Version changes:
1 - Initial version
*/
std::string ClientMediaDownloader::serializeRequiredHashSet()
{
std::ostringstream os(std::ios::binary);
writeU32(os, MTHASHSET_FILE_SIGNATURE); // signature
writeU16(os, 1); // version
// Write list of hashes of files that have not been
// received (found in cache) yet
for (std::map<std::string, FileStatus*>::iterator
it = m_files.begin();
it != m_files.end(); ++it) {
if (!it->second->received) {
assert(it->second->sha1.size() == 20);
os << it->second->sha1;
}
}
return os.str();
}
void ClientMediaDownloader::deSerializeHashSet(const std::string &data,
std::set<std::string> &result)
{
if (data.size() < 6 || data.size() % 20 != 6) {
throw SerializationError(
"ClientMediaDownloader::deSerializeHashSet: "
"invalid hash set file size");
}
const u8 *data_cstr = (const u8*) data.c_str();
u32 signature = readU32(&data_cstr[0]);
if (signature != MTHASHSET_FILE_SIGNATURE) {
throw SerializationError(
"ClientMediaDownloader::deSerializeHashSet: "
"invalid hash set file signature");
}
u16 version = readU16(&data_cstr[4]);
if (version != 1) {
throw SerializationError(
"ClientMediaDownloader::deSerializeHashSet: "
"unsupported hash set file version");
}
for (u32 pos = 6; pos < data.size(); pos += 20) {
result.insert(data.substr(pos, 20));
}
}

150
src/clientmedia.h Normal file
View File

@ -0,0 +1,150 @@
/*
Minetest
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
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.
*/
#ifndef CLIENTMEDIA_HEADER
#define CLIENTMEDIA_HEADER
#include "irrlichttypes.h"
#include "filecache.h"
#include <ostream>
#include <map>
#include <set>
#include <vector>
class Client;
struct HTTPFetchResult;
#define MTHASHSET_FILE_SIGNATURE 0x4d544853 // 'MTHS'
#define MTHASHSET_FILE_NAME "index.mth"
class ClientMediaDownloader
{
public:
ClientMediaDownloader();
~ClientMediaDownloader();
float getProgress() const {
if (m_uncached_count >= 1)
return 1.0 * m_uncached_received_count /
m_uncached_count;
else
return 0.0;
}
bool isStarted() const {
return m_initial_step_done;
}
// If this returns true, the downloader is done and can be deleted
bool isDone() const {
return m_initial_step_done &&
m_uncached_received_count == m_uncached_count;
}
// Add a file to the list of required file (but don't fetch it yet)
void addFile(std::string name, std::string sha1);
// Add a remote server to the list; ignored if not built with cURL
void addRemoteServer(std::string baseurl);
// Steps the media downloader:
// - May load media into client by calling client->loadMedia()
// - May check media cache for files
// - May add files to media cache
// - May start remote transfers by calling httpfetch_async
// - May check for completion of current remote transfers
// - May start conventional transfers by calling client->request_media()
// - May inform server that all media has been loaded
// by calling client->received_media()
// After step has been called once, don't call addFile/addRemoteServer.
void step(Client *client);
// Must be called for each file received through TOCLIENT_MEDIA
void conventionalTransferDone(
const std::string &name,
const std::string &data,
Client *client);
private:
struct FileStatus {
bool received;
std::string sha1;
s32 current_remote;
std::vector<s32> available_remotes;
};
struct RemoteServerStatus {
std::string baseurl;
s32 active_count;
bool request_by_filename;
};
void initialStep(Client *client);
void remoteHashSetReceived(const HTTPFetchResult &fetchresult);
void remoteMediaReceived(const HTTPFetchResult &fetchresult,
Client *client);
s32 selectRemoteServer(FileStatus *filestatus);
void startRemoteMediaTransfers();
void startConventionalTransfers(Client *client);
bool checkAndLoad(const std::string &name, const std::string &sha1,
const std::string &data, bool is_from_cache,
Client *client);
std::string serializeRequiredHashSet();
static void deSerializeHashSet(const std::string &data,
std::set<std::string> &result);
// Maps filename to file status
std::map<std::string, FileStatus*> m_files;
// Array of remote media servers
std::vector<RemoteServerStatus*> m_remotes;
// Filesystem-based media cache
FileCache m_media_cache;
// Has an attempt been made to load media files from the file cache?
// Have hash sets been requested from remote servers?
bool m_initial_step_done;
// Total number of media files to load
s32 m_uncached_count;
// Number of media files that have been received
s32 m_uncached_received_count;
// Status of remote transfers
unsigned long m_httpfetch_caller;
unsigned long m_httpfetch_next_id;
long m_httpfetch_timeout;
s32 m_httpfetch_active;
s32 m_httpfetch_active_limit;
s32 m_outstanding_hash_sets;
std::map<unsigned long, std::string> m_remote_file_transfers;
// All files up to this name have either been received from a
// remote server or failed on all remote servers, so those files
// don't need to be looked at again
// (use m_files.upper_bound(m_name_bound) to get an iterator)
std::string m_name_bound;
};
#endif // !CLIENTMEDIA_HEADER

View File

@ -102,7 +102,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
added to object properties
*/
#define LATEST_PROTOCOL_VERSION 21
#define LATEST_PROTOCOL_VERSION 22
// Server's supported network protocol range
#define SERVER_PROTOCOL_VERSION_MIN 13
@ -139,6 +139,12 @@ enum ToClientCommand
TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks
TOCLIENT_ADDNODE = 0x21,
/*
u16 command
v3s16 position
serialized mapnode
u8 keep_metadata // Added in protocol version 22
*/
TOCLIENT_REMOVENODE = 0x22,
TOCLIENT_PLAYERPOS = 0x23, // Obsolete

View File

@ -12,13 +12,14 @@
#define CMAKE_USE_FREETYPE @USE_FREETYPE@
#define CMAKE_STATIC_SHAREDIR "@SHAREDIR@"
#define CMAKE_USE_LEVELDB @USE_LEVELDB@
#define CMAKE_USE_LUAJIT @USE_LUAJIT@
#ifdef NDEBUG
#define CMAKE_BUILD_TYPE "Release"
#else
#define CMAKE_BUILD_TYPE "Debug"
#endif
#define CMAKE_BUILD_INFO "VER=@VERSION_STRING@ BUILD_TYPE="CMAKE_BUILD_TYPE" RUN_IN_PLACE=@RUN_IN_PLACE@ USE_GETTEXT=@USE_GETTEXT@ USE_SOUND=@USE_SOUND@ STATIC_SHAREDIR=@SHAREDIR@"
#define CMAKE_BUILD_INFO "BUILD_TYPE="CMAKE_BUILD_TYPE" RUN_IN_PLACE=@RUN_IN_PLACE@ USE_GETTEXT=@USE_GETTEXT@ USE_SOUND=@USE_SOUND@ USE_CURL=@USE_CURL@ USE_FREETYPE=@USE_FREETYPE@ USE_LUAJIT=@USE_LUAJIT@ STATIC_SHAREDIR=@SHAREDIR@"
#endif

View File

@ -0,0 +1,10 @@
// Filled in by the build system
// Separated from cmake_config.h to avoid excessive rebuilds on every commit
#ifndef CMAKE_CONFIG_GITHASH_H
#define CMAKE_CONFIG_GITHASH_H
#define CMAKE_VERSION_GITHASH "@VERSION_GITHASH@"
#endif

View File

@ -7,22 +7,19 @@
#define CONFIG_H
#define PROJECT_NAME "Minetest"
#define VERSION_STRING "unknown"
#define RUN_IN_PLACE 0
#define USE_GETTEXT 0
#define USE_SOUND 0
#define USE_CURL 0
#define USE_FREETYPE 0
#define STATIC_SHAREDIR ""
#define BUILD_INFO "non-cmake"
#define USE_LEVELDB 0
#define USE_LUAJIT 0
#ifdef USE_CMAKE_CONFIG_H
#include "cmake_config.h"
#undef PROJECT_NAME
#define PROJECT_NAME CMAKE_PROJECT_NAME
#undef VERSION_STRING
#define VERSION_STRING CMAKE_VERSION_STRING
#undef RUN_IN_PLACE
#define RUN_IN_PLACE CMAKE_RUN_IN_PLACE
#undef USE_GETTEXT
@ -35,10 +32,10 @@
#define USE_FREETYPE CMAKE_USE_FREETYPE
#undef STATIC_SHAREDIR
#define STATIC_SHAREDIR CMAKE_STATIC_SHAREDIR
#undef BUILD_INFO
#define BUILD_INFO CMAKE_BUILD_INFO
#undef USE_LEVELDB
#define USE_LEVELDB CMAKE_USE_LEVELDB
#undef USE_LUAJIT
#define USE_LUAJIT CMAKE_USE_LUAJIT
#endif
#endif

View File

@ -556,7 +556,7 @@ Connection::Connection(u32 protocol_id, u32 max_packet_size, float timeout,
Connection::~Connection()
{
stop();
Stop();
// Delete peers
for(std::map<u16, Peer*>::iterator
j = m_peers.begin();
@ -578,7 +578,7 @@ void * Connection::Thread()
u32 curtime = porting::getTimeMs();
u32 lasttime = curtime;
while(getRun())
while(!StopRequested())
{
BEGIN_DEBUG_EXCEPTION_HANDLER

View File

@ -450,11 +450,11 @@ struct ConnectionEvent
return "CONNEVENT_NONE";
case CONNEVENT_DATA_RECEIVED:
return "CONNEVENT_DATA_RECEIVED";
case CONNEVENT_PEER_ADDED:
case CONNEVENT_PEER_ADDED:
return "CONNEVENT_PEER_ADDED";
case CONNEVENT_PEER_REMOVED:
case CONNEVENT_PEER_REMOVED:
return "CONNEVENT_PEER_REMOVED";
case CONNEVENT_BIND_FAILED:
case CONNEVENT_BIND_FAILED:
return "CONNEVENT_BIND_FAILED";
}
return "Invalid ConnectionEvent";
@ -544,7 +544,7 @@ struct ConnectionCommand
}
};
class Connection: public SimpleThread
class Connection: public JThread
{
public:
Connection(u32 protocol_id, u32 max_packet_size, float timeout, bool ipv6);

View File

@ -25,7 +25,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "content_sao.h"
#include "settings.h"
#include "mapblock.h" // For getNodeBlockPos
#include "treegen.h" // For treegen::make_tree
#include "main.h" // for g_settings
#include "map.h"
#include "scripting_game.h"
@ -33,141 +32,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
class GrowGrassABM : public ActiveBlockModifier
{
private:
public:
virtual std::set<std::string> getTriggerContents()
{
std::set<std::string> s;
s.insert("mapgen_dirt");
return s;
}
virtual float getTriggerInterval()
{ return 2.0; }
virtual u32 getTriggerChance()
{ return 200; }
virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n)
{
INodeDefManager *ndef = env->getGameDef()->ndef();
ServerMap *map = &env->getServerMap();
MapNode n_top = map->getNodeNoEx(p+v3s16(0,1,0));
content_t c_snow = ndef->getId("snow");
if(ndef->get(n_top).light_propagates &&
!ndef->get(n_top).isLiquid() &&
n_top.getLightBlend(env->getDayNightRatio(), ndef) >= 13)
{
if(c_snow != CONTENT_IGNORE && n_top.getContent() == c_snow)
n.setContent(ndef->getId("dirt_with_snow"));
else
n.setContent(ndef->getId("mapgen_dirt_with_grass"));
map->addNodeWithEvent(p, n);
}
}
};
class RemoveGrassABM : public ActiveBlockModifier
{
private:
public:
virtual std::set<std::string> getTriggerContents()
{
std::set<std::string> s;
s.insert("mapgen_dirt_with_grass");
return s;
}
virtual float getTriggerInterval()
{ return 2.0; }
virtual u32 getTriggerChance()
{ return 20; }
virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n)
{
INodeDefManager *ndef = env->getGameDef()->ndef();
ServerMap *map = &env->getServerMap();
MapNode n_top = map->getNodeNoEx(p+v3s16(0,1,0));
if((!ndef->get(n_top).light_propagates &&
n_top.getContent() != CONTENT_IGNORE) ||
ndef->get(n_top).isLiquid())
{
n.setContent(ndef->getId("mapgen_dirt"));
map->addNodeWithEvent(p, n);
}
}
};
class MakeTreesFromSaplingsABM : public ActiveBlockModifier
{
private:
content_t c_junglesapling;
public:
MakeTreesFromSaplingsABM(ServerEnvironment *env, INodeDefManager *nodemgr) {
c_junglesapling = nodemgr->getId("junglesapling");
}
virtual std::set<std::string> getTriggerContents()
{
std::set<std::string> s;
s.insert("sapling");
s.insert("junglesapling");
return s;
}
virtual float getTriggerInterval()
{ return 10.0; }
virtual u32 getTriggerChance()
{ return 50; }
virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n,
u32 active_object_count, u32 active_object_count_wider)
{
INodeDefManager *ndef = env->getGameDef()->ndef();
ServerMap *map = &env->getServerMap();
MapNode n_below = map->getNodeNoEx(p - v3s16(0, 1, 0));
if (!((ItemGroupList) ndef->get(n_below).groups)["soil"])
return;
bool is_jungle_tree = n.getContent() == c_junglesapling;
actionstream <<"A " << (is_jungle_tree ? "jungle " : "")
<< "sapling grows into a tree at "
<< PP(p) << std::endl;
std::map<v3s16, MapBlock*> modified_blocks;
v3s16 tree_p = p;
ManualMapVoxelManipulator vmanip(map);
v3s16 tree_blockp = getNodeBlockPos(tree_p);
vmanip.initialEmerge(tree_blockp - v3s16(1,1,1), tree_blockp + v3s16(1,1,1));
if (is_jungle_tree) {
treegen::make_jungletree(vmanip, tree_p, ndef, myrand());
} else {
bool is_apple_tree = myrand() % 4 == 0;
treegen::make_tree(vmanip, tree_p, is_apple_tree, ndef, myrand());
}
vmanip.blitBackAll(&modified_blocks);
// update lighting
std::map<v3s16, MapBlock*> lighting_modified_blocks;
lighting_modified_blocks.insert(modified_blocks.begin(), modified_blocks.end());
map->updateLighting(lighting_modified_blocks, modified_blocks);
// Send a MEET_OTHER event
MapEditEvent event;
event.type = MEET_OTHER;
// event.modified_blocks.insert(modified_blocks.begin(), modified_blocks.end());
for(std::map<v3s16, MapBlock*>::iterator
i = modified_blocks.begin();
i != modified_blocks.end(); ++i)
{
event.modified_blocks.insert(i->first);
}
map->dispatchEvent(&event);
}
};
class LiquidFlowABM : public ActiveBlockModifier {
private:
std::set<std::string> contents;
@ -209,7 +73,7 @@ class LiquidDropABM : public ActiveBlockModifier {
{ return contents; }
virtual std::set<std::string> getRequiredNeighbors() {
std::set<std::string> neighbors;
neighbors.insert("mapgen_air");
neighbors.insert("air");
return neighbors;
}
virtual float getTriggerInterval()
@ -241,7 +105,7 @@ class LiquidFreeze : public ActiveBlockModifier {
}
virtual std::set<std::string> getRequiredNeighbors() {
std::set<std::string> s;
s.insert("mapgen_air");
s.insert("air");
s.insert("group:melts");
return s;
}
@ -303,7 +167,7 @@ class LiquidMeltWeather : public ActiveBlockModifier {
}
virtual std::set<std::string> getRequiredNeighbors() {
std::set<std::string> s;
s.insert("mapgen_air");
s.insert("air");
s.insert("group:freezes");
return s;
}
@ -370,9 +234,6 @@ class LiquidMeltAround : public LiquidMeltHot {
*/
void add_legacy_abms(ServerEnvironment *env, INodeDefManager *nodedef) {
env->addActiveBlockModifier(new GrowGrassABM());
env->addActiveBlockModifier(new RemoveGrassABM());
env->addActiveBlockModifier(new MakeTreesFromSaplingsABM(env, nodedef));
if (g_settings->getBool("liquid_finite")) {
env->addActiveBlockModifier(new LiquidFlowABM(env, nodedef));
env->addActiveBlockModifier(new LiquidDropABM(env, nodedef));

View File

@ -1649,6 +1649,8 @@ public:
m_acceleration = readV3F1000(is);
if(fabs(m_prop.automatic_rotate) < 0.001)
m_yaw = readF1000(is);
else
readF1000(is);
bool do_interpolate = readU8(is);
bool is_end_position = readU8(is);
float update_interval = readF1000(is);
@ -1693,12 +1695,18 @@ public:
float override_speed = readF1000(is);
float override_jump = readF1000(is);
float override_gravity = readF1000(is);
// these are sent inverted so we get true when the server sends nothing
bool sneak = !readU8(is);
bool sneak_glitch = !readU8(is);
if(m_is_local_player)
{
LocalPlayer *player = m_env->getLocalPlayer();
player->physics_override_speed = override_speed;
player->physics_override_jump = override_jump;
player->physics_override_gravity = override_gravity;
player->physics_override_sneak = sneak;
player->physics_override_sneak_glitch = sneak_glitch;
}
}
else if(cmd == GENERIC_CMD_SET_ANIMATION)

View File

@ -395,7 +395,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
l = getInteriorLight(n, 0, data);
video::SColor c = MapBlock_LightColor(f.alpha, l, decode_light(f.light_source));
u8 range = rangelim(nodedef->get(c_flowing).liquid_range, 0, 8);
u8 range = rangelim(nodedef->get(c_flowing).liquid_range, 1, 8);
// Neighbor liquid levels (key = relative position)
// Includes current node
@ -429,7 +429,11 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
if(n2.getContent() == c_source)
level = (-0.5+node_liquid_level) * BS;
else if(n2.getContent() == c_flowing){
u8 liquid_level = (n2.param2&LIQUID_LEVEL_MASK) - (LIQUID_LEVEL_MAX+1-range);
u8 liquid_level = (n2.param2&LIQUID_LEVEL_MASK);
if (liquid_level <= LIQUID_LEVEL_MAX+1-range)
liquid_level = 0;
else
liquid_level -= (LIQUID_LEVEL_MAX+1-range);
level = (-0.5 + ((float)liquid_level+ 0.5) / (float)range * node_liquid_level) * BS;
}
@ -908,13 +912,14 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
u16 l = getInteriorLight(n, 1, data);
video::SColor c = MapBlock_LightColor(255, l, decode_light(f.light_source));
float s = BS/2*f.visual_scale;
// Wall at X+ of node
video::S3DVertex vertices[4] =
{
video::S3DVertex(-BS/2,-BS/2,0, 0,0,0, c, 0,1),
video::S3DVertex(BS/2,-BS/2,0, 0,0,0, c, 1,1),
video::S3DVertex(BS/2,BS/2,0, 0,0,0, c, 1,0),
video::S3DVertex(-BS/2,BS/2,0, 0,0,0, c, 0,0),
video::S3DVertex(-s,-s,0, 0,0,0, c, 0,1),
video::S3DVertex( s,-s,0, 0,0,0, c, 1,1),
video::S3DVertex( s, s,0, 0,0,0, c, 1,0),
video::S3DVertex(-s, s,0, 0,0,0, c, 0,0),
};
for(s32 i=0; i<4; i++)
@ -949,13 +954,14 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
video::SColor c = MapBlock_LightColor(255, l, decode_light(f.light_source));
float d = (float)BS/16;
float s = BS/2*f.visual_scale;
// Wall at X+ of node
video::S3DVertex vertices[4] =
{
video::S3DVertex(BS/2-d,BS/2,BS/2, 0,0,0, c, 0,0),
video::S3DVertex(BS/2-d,BS/2,-BS/2, 0,0,0, c, 1,0),
video::S3DVertex(BS/2-d,-BS/2,-BS/2, 0,0,0, c, 1,1),
video::S3DVertex(BS/2-d,-BS/2,BS/2, 0,0,0, c, 0,1),
video::S3DVertex(BS/2-d, s, s, 0,0,0, c, 0,0),
video::S3DVertex(BS/2-d, s, -s, 0,0,0, c, 1,0),
video::S3DVertex(BS/2-d, -s, -s, 0,0,0, c, 1,1),
video::S3DVertex(BS/2-d, -s, s, 0,0,0, c, 0,1),
};
v3s16 dir = n.getWallMountedDir(nodedef);
@ -990,16 +996,16 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
u16 l = getInteriorLight(n, 1, data);
video::SColor c = MapBlock_LightColor(255, l, decode_light(f.light_source));
float s = BS/2*f.visual_scale;
for(u32 j=0; j<2; j++)
{
video::S3DVertex vertices[4] =
{
video::S3DVertex(-BS/2*f.visual_scale,-BS/2,0, 0,0,0, c, 0,1),
video::S3DVertex( BS/2*f.visual_scale,-BS/2,0, 0,0,0, c, 1,1),
video::S3DVertex( BS/2*f.visual_scale,
-BS/2 + f.visual_scale*BS,0, 0,0,0, c, 1,0),
video::S3DVertex(-BS/2*f.visual_scale,
-BS/2 + f.visual_scale*BS,0, 0,0,0, c, 0,0),
video::S3DVertex(-s,-BS/2, 0, 0,0,0, c, 0,1),
video::S3DVertex( s,-BS/2, 0, 0,0,0, c, 1,1),
video::S3DVertex( s,-BS/2 + s*2,0, 0,0,0, c, 1,0),
video::S3DVertex(-s,-BS/2 + s*2,0, 0,0,0, c, 0,0),
};
if(j == 0)

View File

@ -969,6 +969,8 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_,
m_physics_override_speed(1),
m_physics_override_jump(1),
m_physics_override_gravity(1),
m_physics_override_sneak(true),
m_physics_override_sneak_glitch(true),
m_physics_override_sent(false)
{
assert(m_player);
@ -1060,7 +1062,9 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
os<<serializeLongString(gob_cmd_update_bone_position((*ii).first, (*ii).second.X, (*ii).second.Y)); // m_bone_position.size
}
os<<serializeLongString(gob_cmd_update_attachment(m_attachment_parent_id, m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4
os<<serializeLongString(gob_cmd_update_physics_override(m_physics_override_speed, m_physics_override_jump, m_physics_override_gravity)); // 5
os<<serializeLongString(gob_cmd_update_physics_override(m_physics_override_speed,
m_physics_override_jump, m_physics_override_gravity, m_physics_override_sneak,
m_physics_override_sneak_glitch)); // 5
}
else
{
@ -1187,7 +1191,9 @@ void PlayerSAO::step(float dtime, bool send_recommended)
if(m_physics_override_sent == false){
m_physics_override_sent = true;
std::string str = gob_cmd_update_physics_override(m_physics_override_speed, m_physics_override_jump, m_physics_override_gravity);
std::string str = gob_cmd_update_physics_override(m_physics_override_speed,
m_physics_override_jump, m_physics_override_gravity,
m_physics_override_sneak, m_physics_override_sneak_glitch);
// create message and add to list
ActiveObjectMessage aom(getId(), true, str);
m_messages_out.push_back(aom);

View File

@ -330,6 +330,8 @@ public:
float m_physics_override_speed;
float m_physics_override_jump;
float m_physics_override_gravity;
bool m_physics_override_sneak;
bool m_physics_override_sneak_glitch;
bool m_physics_override_sent;
};

View File

@ -27,57 +27,39 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include "main.h" // for g_settings
#include "settings.h"
#if USE_CURL
#include <curl/curl.h>
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
((std::string*)userp)->append((char*)contents, size * nmemb);
return size * nmemb;
}
#endif
#include "version.h"
#include "httpfetch.h"
Json::Value fetchJsonValue(const std::string url,
struct curl_slist *chunk) {
#if USE_CURL
std::string liststring;
CURL *curl;
curl = curl_easy_init();
if (curl)
{
CURLcode res;
HTTPFetchRequest fetchrequest;
HTTPFetchResult fetchresult;
fetchrequest.url = url;
fetchrequest.useragent = std::string("Minetest ")+minetest_version_hash;
fetchrequest.timeout = g_settings->getS32("curl_timeout");
fetchrequest.caller = HTTPFETCH_SYNC;
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &liststring);
curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, g_settings->getS32("curl_timeout"));
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, g_settings->getS32("curl_timeout"));
if (chunk != 0)
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
res = curl_easy_perform(curl);
if (res != CURLE_OK)
errorstream<<"Jsonreader: "<< url <<" not found (" << curl_easy_strerror(res) << ")" <<std::endl;
curl_easy_cleanup(curl);
struct curl_slist* runptr = chunk;
while(runptr) {
fetchrequest.extra_headers.push_back(runptr->data);
runptr = runptr->next;
}
httpfetch_sync(fetchrequest,fetchresult);
Json::Value root;
Json::Reader reader;
std::istringstream stream(liststring);
if (!liststring.size()) {
if (!fetchresult.succeeded) {
return Json::Value();
}
Json::Value root;
Json::Reader reader;
std::istringstream stream(fetchresult.data);
if (!reader.parse( stream, root ) )
{
errorstream << "URL: " << url << std::endl;
errorstream << "Failed to parse json data " << reader.getFormattedErrorMessages();
errorstream << "data: \"" << liststring << "\"" << std::endl;
errorstream << "data: \"" << fetchresult.data << "\"" << std::endl;
return Json::Value();
}
@ -105,13 +87,17 @@ std::vector<ModStoreMod> readModStoreList(Json::Value& modlist) {
//id
if (modlist[i]["id"].asString().size()) {
const char* id_raw = modlist[i]["id"].asString().c_str();
std::string id_raw = modlist[i]["id"].asString();
char* endptr = 0;
int numbervalue = strtol(id_raw,&endptr,10);
int numbervalue = strtol(id_raw.c_str(),&endptr,10);
if ((*id_raw != 0) && (*endptr == 0)) {
if ((id_raw != "") && (*endptr == 0)) {
toadd.id = numbervalue;
}
else {
errorstream << "readModStoreList: missing id" << std::endl;
toadd.valid = false;
}
}
else {
errorstream << "readModStoreList: missing id" << std::endl;
@ -163,11 +149,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
ModStoreVersionEntry toadd;
if (details["version_set"][i]["id"].asString().size()) {
const char* id_raw = details["version_set"][i]["id"].asString().c_str();
std::string id_raw = details["version_set"][i]["id"].asString();
char* endptr = 0;
int numbervalue = strtol(id_raw,&endptr,10);
int numbervalue = strtol(id_raw.c_str(),&endptr,10);
if ((*id_raw != 0) && (*endptr == 0)) {
if ((id_raw != "") && (*endptr == 0)) {
toadd.id = numbervalue;
}
}
@ -204,7 +190,7 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
}
if (retval.versions.size() < 1) {
errorstream << "readModStoreModDetails: not a single version specified!" << std::endl;
infostream << "readModStoreModDetails: not a single version specified!" << std::endl;
retval.valid = false;
}
@ -215,11 +201,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
if (details["categories"][i]["id"].asString().size()) {
const char* id_raw = details["categories"][i]["id"].asString().c_str();
std::string id_raw = details["categories"][i]["id"].asString();
char* endptr = 0;
int numbervalue = strtol(id_raw,&endptr,10);
int numbervalue = strtol(id_raw.c_str(),&endptr,10);
if ((*id_raw != 0) && (*endptr == 0)) {
if ((id_raw != "") && (*endptr == 0)) {
toadd.id = numbervalue;
}
}
@ -248,11 +234,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
if (details["author"].isObject()) {
if (details["author"]["id"].asString().size()) {
const char* id_raw = details["author"]["id"].asString().c_str();
std::string id_raw = details["author"]["id"].asString();
char* endptr = 0;
int numbervalue = strtol(id_raw,&endptr,10);
int numbervalue = strtol(id_raw.c_str(),&endptr,10);
if ((*id_raw != 0) && (*endptr == 0)) {
if ((id_raw != "") && (*endptr == 0)) {
retval.author.id = numbervalue;
}
else {
@ -282,11 +268,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
if (details["license"].isObject()) {
if (details["license"]["id"].asString().size()) {
const char* id_raw = details["license"]["id"].asString().c_str();
std::string id_raw = details["license"]["id"].asString();
char* endptr = 0;
int numbervalue = strtol(id_raw,&endptr,10);
int numbervalue = strtol(id_raw.c_str(),&endptr,10);
if ((*id_raw != 0) && (*endptr == 0)) {
if ((id_raw != "") && (*endptr == 0)) {
retval.license.id = numbervalue;
}
}
@ -313,11 +299,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
if (details["titlepic"].isObject()) {
if (details["titlepic"]["id"].asString().size()) {
const char* id_raw = details["titlepic"]["id"].asString().c_str();
std::string id_raw = details["titlepic"]["id"].asString();
char* endptr = 0;
int numbervalue = strtol(id_raw,&endptr,10);
int numbervalue = strtol(id_raw.c_str(),&endptr,10);
if ((*id_raw != 0) && (*endptr == 0)) {
if ((id_raw != "") && (*endptr == 0)) {
retval.titlepic.id = numbervalue;
}
}
@ -332,11 +318,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
if (details["titlepic"]["mod"].asString().size()) {
const char* mod_raw = details["titlepic"]["mod"].asString().c_str();
std::string mod_raw = details["titlepic"]["mod"].asString();
char* endptr = 0;
int numbervalue = strtol(mod_raw,&endptr,10);
int numbervalue = strtol(mod_raw.c_str(),&endptr,10);
if ((*mod_raw != 0) && (*endptr == 0)) {
if ((mod_raw != "") && (*endptr == 0)) {
retval.titlepic.mod = numbervalue;
}
}
@ -345,11 +331,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
//id
if (details["id"].asString().size()) {
const char* id_raw = details["id"].asString().c_str();
std::string id_raw = details["id"].asString();
char* endptr = 0;
int numbervalue = strtol(id_raw,&endptr,10);
int numbervalue = strtol(id_raw.c_str(),&endptr,10);
if ((*id_raw != 0) && (*endptr == 0)) {
if ((id_raw != "") && (*endptr == 0)) {
retval.id = numbervalue;
}
}
@ -389,11 +375,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) {
//value
if (details["rating"].asString().size()) {
const char* id_raw = details["rating"].asString().c_str();
std::string id_raw = details["rating"].asString();
char* endptr = 0;
float numbervalue = strtof(id_raw,&endptr);
float numbervalue = strtof(id_raw.c_str(),&endptr);
if ((*id_raw != 0) && (*endptr == 0)) {
if ((id_raw != "") && (*endptr == 0)) {
retval.rating = numbervalue;
}
}

View File

@ -92,68 +92,82 @@ MapBlock* Database_LevelDB::loadBlock(v3s16 blockpos)
v2s16 p2d(blockpos.X, blockpos.Z);
std::string datastr;
leveldb::Status s = m_database->Get(leveldb::ReadOptions(), i64tos(getBlockAsInteger(blockpos)), &datastr);
leveldb::Status s = m_database->Get(leveldb::ReadOptions(),
i64tos(getBlockAsInteger(blockpos)), &datastr);
if (datastr.length() == 0 && s.ok()) {
errorstream << "Blank block data in database (datastr.length() == 0) ("
<< blockpos.X << "," << blockpos.Y << "," << blockpos.Z << ")" << std::endl;
if(s.ok()) {
/*
Make sure sector is loaded
*/
MapSector *sector = srvmap->createSector(p2d);
if (g_settings->getBool("ignore_world_load_errors")) {
errorstream << "Ignoring block load error. Duck and cover! "
<< "(ignore_world_load_errors)" << std::endl;
} else {
throw SerializationError("Blank block data in database");
}
return NULL;
}
if (s.ok()) {
/*
Make sure sector is loaded
*/
MapSector *sector = srvmap->createSector(p2d);
try {
std::istringstream is(datastr, std::ios_base::binary);
u8 version = SER_FMT_VER_INVALID;
is.read((char*)&version, 1);
std::istringstream is(datastr, std::ios_base::binary);
u8 version = SER_FMT_VER_INVALID;
is.read((char *)&version, 1);
if(is.fail())
throw SerializationError("ServerMap::loadBlock(): Failed"
" to read MapBlock version");
if (is.fail())
throw SerializationError("ServerMap::loadBlock(): Failed"
" to read MapBlock version");
MapBlock *block = NULL;
bool created_new = false;
block = sector->getBlockNoCreateNoEx(blockpos.Y);
if(block == NULL)
{
block = sector->createBlankBlockNoInsert(blockpos.Y);
created_new = true;
}
// Read basic data
block->deSerialize(is, version, true);
// If it's a new block, insert it to the map
if(created_new)
sector->insertBlock(block);
/*
Save blocks loaded in old format in new format
*/
MapBlock *block = NULL;
bool created_new = false;
block = sector->getBlockNoCreateNoEx(blockpos.Y);
if (block == NULL)
{
block = sector->createBlankBlockNoInsert(blockpos.Y);
created_new = true;
}
//if(version < SER_FMT_VER_HIGHEST || save_after_load)
// Only save if asked to; no need to update version
//if(save_after_load)
// saveBlock(block);
// We just loaded it from, so it's up-to-date.
block->resetModified();
// Read basic data
block->deSerialize(is, version, true);
}
catch(SerializationError &e)
{
errorstream<<"Invalid block data in database"
<<" ("<<blockpos.X<<","<<blockpos.Y<<","<<blockpos.Z<<")"
<<" (SerializationError): "<<e.what()<<std::endl;
// TODO: Block should be marked as invalid in memory so that it is
// not touched but the game can run
// If it's a new block, insert it to the map
if (created_new)
sector->insertBlock(block);
if(g_settings->getBool("ignore_world_load_errors")){
errorstream<<"Ignoring block load error. Duck and cover! "
<<"(ignore_world_load_errors)"<<std::endl;
} else {
throw SerializationError("Invalid block data in database");
//assert(0);
}
}
/*
Save blocks loaded in old format in new format
*/
//if(version < SER_FMT_VER_HIGHEST || save_after_load)
// Only save if asked to; no need to update version
//if(save_after_load)
// saveBlock(block);
// We just loaded it from, so it's up-to-date.
block->resetModified();
}
catch (SerializationError &e)
{
errorstream << "Invalid block data in database"
<< " (" << blockpos.X << "," << blockpos.Y << "," << blockpos.Z
<< ") (SerializationError): " << e.what() << std::endl;
// TODO: Block should be marked as invalid in memory so that it is
// not touched but the game can run
return srvmap->getBlockNoCreateNoEx(blockpos); // should not be using this here
}
return(NULL);
if (g_settings->getBool("ignore_world_load_errors")) {
errorstream << "Ignoring block load error. Duck and cover! "
<< "(ignore_world_load_errors)" << std::endl;
} else {
throw SerializationError("Invalid block data in database");
//assert(0);
}
}
return srvmap->getBlockNoCreateNoEx(blockpos); // should not be using this here
}
return NULL;
}
void Database_LevelDB::listAllLoadableBlocks(std::list<v3s16> &dst)

Some files were not shown because too many files have changed in this diff Show More