forked from VoxeLibre/VoxeLibre
Merge branch 'master' into formspec-v4
This commit is contained in:
commit
4de3f1265b
|
@ -82,10 +82,10 @@ Please report all bugs and missing Minecraft features here:
|
||||||
|
|
||||||
<https://git.minetest.land/MineClone2/MineClone2/issues>
|
<https://git.minetest.land/MineClone2/MineClone2/issues>
|
||||||
|
|
||||||
## Chating with the community
|
## Chatting with the community
|
||||||
Join our discord server at:
|
Join our discord server at:
|
||||||
|
|
||||||
<https://discord.gg/84GKcxczG3>
|
<https://discord.gg/xE4z8EEpDC>
|
||||||
|
|
||||||
## Project description
|
## Project description
|
||||||
The main goal of **MineClone 2** is to be a clone of Minecraft and to be released as free software.
|
The main goal of **MineClone 2** is to be a clone of Minecraft and to be released as free software.
|
||||||
|
|
|
@ -83,7 +83,7 @@ local function get_hardness_values_for_groups()
|
||||||
|
|
||||||
for _, ndef in pairs(minetest.registered_nodes) do
|
for _, ndef in pairs(minetest.registered_nodes) do
|
||||||
for g, _ in pairs(mcl_autogroup.registered_diggroups) do
|
for g, _ in pairs(mcl_autogroup.registered_diggroups) do
|
||||||
if ndef.groups[g] ~= nil then
|
if ndef.groups[g] then
|
||||||
maps[g][ndef._mcl_hardness or 0] = true
|
maps[g][ndef._mcl_hardness or 0] = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
local get_connected_players = minetest.get_connected_players
|
local get_connected_players = minetest.get_connected_players
|
||||||
local clock = os.clock
|
local clock = os.clock
|
||||||
|
|
||||||
|
local pairs = pairs
|
||||||
|
|
||||||
controls = {}
|
controls = {}
|
||||||
controls.players = {}
|
controls.players = {}
|
||||||
|
|
||||||
|
@ -20,15 +22,15 @@ function controls.register_on_hold(func)
|
||||||
end
|
end
|
||||||
|
|
||||||
local known_controls = {
|
local known_controls = {
|
||||||
jump=true,
|
jump = true,
|
||||||
right=true,
|
right = true,
|
||||||
left=true,
|
left = true,
|
||||||
LMB=true,
|
LMB = true,
|
||||||
RMB=true,
|
RMB = true,
|
||||||
sneak=true,
|
sneak = true,
|
||||||
aux1=true,
|
aux1 = true,
|
||||||
down=true,
|
down = true,
|
||||||
up=true,
|
up = true,
|
||||||
}
|
}
|
||||||
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
|
@ -49,27 +51,27 @@ minetest.register_globalstep(function(dtime)
|
||||||
local player_name = player:get_player_name()
|
local player_name = player:get_player_name()
|
||||||
local player_controls = player:get_player_control()
|
local player_controls = player:get_player_control()
|
||||||
if controls.players[player_name] then
|
if controls.players[player_name] then
|
||||||
for cname, cbool in pairs(player_controls) do
|
for cname, cbool in pairs(player_controls) do
|
||||||
if known_controls[cname] == true then
|
if known_controls[cname] == true then
|
||||||
--Press a key
|
--Press a key
|
||||||
if cbool==true and controls.players[player_name][cname][1]==false then
|
if cbool == true and controls.players[player_name][cname][1] == false then
|
||||||
for _, func in pairs(controls.registered_on_press) do
|
for _, func in pairs(controls.registered_on_press) do
|
||||||
func(player, cname)
|
func(player, cname)
|
||||||
|
end
|
||||||
|
controls.players[player_name][cname] = {true, clock()}
|
||||||
|
elseif cbool == true and controls.players[player_name][cname][1] == true then
|
||||||
|
for _, func in pairs(controls.registered_on_hold) do
|
||||||
|
func(player, cname, clock()-controls.players[player_name][cname][2])
|
||||||
|
end
|
||||||
|
--Release a key
|
||||||
|
elseif cbool == false and controls.players[player_name][cname][1] == true then
|
||||||
|
for _, func in pairs(controls.registered_on_release) do
|
||||||
|
func(player, cname, clock()-controls.players[player_name][cname][2])
|
||||||
|
end
|
||||||
|
controls.players[player_name][cname] = {false}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
controls.players[player_name][cname] = {true, clock()}
|
|
||||||
elseif cbool==true and controls.players[player_name][cname][1]==true then
|
|
||||||
for _, func in pairs(controls.registered_on_hold) do
|
|
||||||
func(player, cname, clock()-controls.players[player_name][cname][2])
|
|
||||||
end
|
|
||||||
--Release a key
|
|
||||||
elseif cbool==false and controls.players[player_name][cname][1]==true then
|
|
||||||
for _, func in pairs(controls.registered_on_release) do
|
|
||||||
func(player, cname, clock()-controls.players[player_name][cname][2])
|
|
||||||
end
|
|
||||||
controls.players[player_name][cname] = {false}
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
|
@ -12,9 +12,13 @@ under the LGPLv2.1 license.
|
||||||
|
|
||||||
mcl_explosions = {}
|
mcl_explosions = {}
|
||||||
|
|
||||||
local mod_fire = minetest.get_modpath("mcl_fire") ~= nil
|
local mod_fire = minetest.get_modpath("mcl_fire")
|
||||||
--local CONTENT_FIRE = minetest.get_content_id("mcl_fire:fire")
|
--local CONTENT_FIRE = minetest.get_content_id("mcl_fire:fire")
|
||||||
|
|
||||||
|
local math = math
|
||||||
|
local vector = vector
|
||||||
|
local table = table
|
||||||
|
|
||||||
local hash_node_position = minetest.hash_node_position
|
local hash_node_position = minetest.hash_node_position
|
||||||
local get_objects_inside_radius = minetest.get_objects_inside_radius
|
local get_objects_inside_radius = minetest.get_objects_inside_radius
|
||||||
local get_position_from_hash = minetest.get_position_from_hash
|
local get_position_from_hash = minetest.get_position_from_hash
|
||||||
|
@ -24,6 +28,7 @@ local get_voxel_manip = minetest.get_voxel_manip
|
||||||
local bulk_set_node = minetest.bulk_set_node
|
local bulk_set_node = minetest.bulk_set_node
|
||||||
local check_for_falling = minetest.check_for_falling
|
local check_for_falling = minetest.check_for_falling
|
||||||
local add_item = minetest.add_item
|
local add_item = minetest.add_item
|
||||||
|
local pos_to_string = minetest.pos_to_string
|
||||||
|
|
||||||
-- Saved sphere explosion shapes for various radiuses
|
-- Saved sphere explosion shapes for various radiuses
|
||||||
local sphere_shapes = {}
|
local sphere_shapes = {}
|
||||||
|
@ -240,7 +245,7 @@ local function trace_explode(pos, strength, raydirs, radius, info, direct, sourc
|
||||||
local ent = obj:get_luaentity()
|
local ent = obj:get_luaentity()
|
||||||
|
|
||||||
-- Ignore items to lower lag
|
-- Ignore items to lower lag
|
||||||
if (obj:is_player() or (ent and ent.name ~= '__builtin.item')) and obj:get_hp() > 0 then
|
if (obj:is_player() or (ent and ent.name ~= "__builtin.item")) and obj:get_hp() > 0 then
|
||||||
local opos = obj:get_pos()
|
local opos = obj:get_pos()
|
||||||
local collisionbox = nil
|
local collisionbox = nil
|
||||||
|
|
||||||
|
@ -356,9 +361,9 @@ local function trace_explode(pos, strength, raydirs, radius, info, direct, sourc
|
||||||
local on_blast = node_on_blast[data[idx]]
|
local on_blast = node_on_blast[data[idx]]
|
||||||
local remove = true
|
local remove = true
|
||||||
|
|
||||||
if do_drop or on_blast ~= nil then
|
if do_drop or on_blast then
|
||||||
local npos = get_position_from_hash(hash)
|
local npos = get_position_from_hash(hash)
|
||||||
if on_blast ~= nil then
|
if on_blast then
|
||||||
on_blast(npos, 1.0, do_drop)
|
on_blast(npos, 1.0, do_drop)
|
||||||
remove = false
|
remove = false
|
||||||
else
|
else
|
||||||
|
@ -400,8 +405,7 @@ local function trace_explode(pos, strength, raydirs, radius, info, direct, sourc
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Log explosion
|
-- Log explosion
|
||||||
minetest.log('action', 'Explosion at ' .. minetest.pos_to_string(pos) ..
|
minetest.log("action", "Explosion at "..pos_to_string(pos).." with strength "..strength.." and radius "..radius)
|
||||||
' with strength ' .. strength .. ' and radius ' .. radius)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Create an explosion with strength at pos.
|
-- Create an explosion with strength at pos.
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
# textdomain:mcl_explosions
|
||||||
|
@1 was caught in an explosion.=@1 została wysadzona.
|
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
|
@ -1,5 +1,7 @@
|
||||||
mcl_worlds = {}
|
mcl_worlds = {}
|
||||||
|
|
||||||
|
local get_connected_players = minetest.get_connected_players
|
||||||
|
|
||||||
-- For a given position, returns a 2-tuple:
|
-- For a given position, returns a 2-tuple:
|
||||||
-- 1st return value: true if pos is in void
|
-- 1st return value: true if pos is in void
|
||||||
-- 2nd return value: true if it is in the deadly part of the void
|
-- 2nd return value: true if it is in the deadly part of the void
|
||||||
|
@ -44,12 +46,16 @@ function mcl_worlds.y_to_layer(y)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local y_to_layer = mcl_worlds.y_to_layer
|
||||||
|
|
||||||
-- Takes a pos and returns the dimension it belongs to (same as above)
|
-- Takes a pos and returns the dimension it belongs to (same as above)
|
||||||
function mcl_worlds.pos_to_dimension(pos)
|
function mcl_worlds.pos_to_dimension(pos)
|
||||||
local _, dim = mcl_worlds.y_to_layer(pos.y)
|
local _, dim = y_to_layer(pos.y)
|
||||||
return dim
|
return dim
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local pos_to_dimension = mcl_worlds.pos_to_dimension
|
||||||
|
|
||||||
-- Takes a Minecraft layer and a “dimension” name
|
-- Takes a Minecraft layer and a “dimension” name
|
||||||
-- and returns the corresponding Y coordinate for
|
-- and returns the corresponding Y coordinate for
|
||||||
-- MineClone 2.
|
-- MineClone 2.
|
||||||
|
@ -119,6 +125,8 @@ function mcl_worlds.dimension_change(player, dimension)
|
||||||
last_dimension[playername] = dimension
|
last_dimension[playername] = dimension
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local dimension_change = mcl_worlds.dimension_change
|
||||||
|
|
||||||
----------------------- INTERNAL STUFF ----------------------
|
----------------------- INTERNAL STUFF ----------------------
|
||||||
|
|
||||||
-- Update the dimension callbacks every DIM_UPDATE seconds
|
-- Update the dimension callbacks every DIM_UPDATE seconds
|
||||||
|
@ -126,19 +134,19 @@ local DIM_UPDATE = 1
|
||||||
local dimtimer = 0
|
local dimtimer = 0
|
||||||
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
last_dimension[player:get_player_name()] = mcl_worlds.pos_to_dimension(player:get_pos())
|
last_dimension[player:get_player_name()] = pos_to_dimension(player:get_pos())
|
||||||
end)
|
end)
|
||||||
|
|
||||||
minetest.register_globalstep(function(dtime)
|
minetest.register_globalstep(function(dtime)
|
||||||
-- regular updates based on iterval
|
-- regular updates based on iterval
|
||||||
dimtimer = dimtimer + dtime;
|
dimtimer = dimtimer + dtime;
|
||||||
if dimtimer >= DIM_UPDATE then
|
if dimtimer >= DIM_UPDATE then
|
||||||
local players = minetest.get_connected_players()
|
local players = get_connected_players()
|
||||||
for p=1, #players do
|
for p = 1, #players do
|
||||||
local dim = mcl_worlds.pos_to_dimension(players[p]:get_pos())
|
local dim = pos_to_dimension(players[p]:get_pos())
|
||||||
local name = players[p]:get_player_name()
|
local name = players[p]:get_player_name()
|
||||||
if dim ~= last_dimension[name] then
|
if dim ~= last_dimension[name] then
|
||||||
mcl_worlds.dimension_change(players[p], dim)
|
dimension_change(players[p], dim)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
dimtimer = 0
|
dimtimer = 0
|
||||||
|
|
|
@ -4,6 +4,7 @@ local get_connected_players = minetest.get_connected_players
|
||||||
local get_node = minetest.get_node
|
local get_node = minetest.get_node
|
||||||
local vector_add = vector.add
|
local vector_add = vector.add
|
||||||
local ceil = math.ceil
|
local ceil = math.ceil
|
||||||
|
local pairs = pairs
|
||||||
|
|
||||||
walkover = {}
|
walkover = {}
|
||||||
walkover.registered_globals = {}
|
walkover.registered_globals = {}
|
||||||
|
@ -34,9 +35,9 @@ minetest.register_globalstep(function(dtime)
|
||||||
local pp = player:get_pos()
|
local pp = player:get_pos()
|
||||||
pp.y = ceil(pp.y)
|
pp.y = ceil(pp.y)
|
||||||
local loc = vector_add(pp, {x=0,y=-1,z=0})
|
local loc = vector_add(pp, {x=0,y=-1,z=0})
|
||||||
if loc ~= nil then
|
if loc then
|
||||||
local nodeiamon = get_node(loc)
|
local nodeiamon = get_node(loc)
|
||||||
if nodeiamon ~= nil then
|
if nodeiamon then
|
||||||
if on_walk[nodeiamon.name] then
|
if on_walk[nodeiamon.name] then
|
||||||
on_walk[nodeiamon.name](loc, nodeiamon, player)
|
on_walk[nodeiamon.name](loc, nodeiamon, player)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
local S = minetest.get_translator("mcl_boats")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
local boat_visual_size = {x = 1, y = 1, z = 1}
|
local boat_visual_size = {x = 1, y = 1, z = 1}
|
||||||
local paddling_speed = 22
|
local paddling_speed = 22
|
||||||
|
@ -470,6 +470,6 @@ minetest.register_craft({
|
||||||
burntime = 20,
|
burntime = 20,
|
||||||
})
|
})
|
||||||
|
|
||||||
if minetest.get_modpath("doc_identifier") ~= nil then
|
if minetest.get_modpath("doc_identifier") then
|
||||||
doc.sub.identifier.register_object("mcl_boats:boat", "craftitems", "mcl_boats:boat")
|
doc.sub.identifier.register_object("mcl_boats:boat", "craftitems", "mcl_boats:boat")
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
# textdomain: mcl_boats
|
||||||
|
Acacia Boat=Akacjowa łódź
|
||||||
|
Birch Boat=Brzozowa łódź
|
||||||
|
Boat=Łódź
|
||||||
|
Boats are used to travel on the surface of water.=Łodzie są wykorzystywane do podróżowania po powierzchni wody.
|
||||||
|
Dark Oak Boat=Ciemno-dębowa łódź
|
||||||
|
Jungle Boat=Tropikalna łódź
|
||||||
|
Oak Boat=Dębowa łódź
|
||||||
|
Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Use [Sneak] to leave the boat, punch the boat to make it drop as an item.=Kliknij prawym przyciskiem myszy na źródło wody by postawić łódź. Kliknij prawym przyciskiem myszy by w nią wsiąść. Użyj przycisków [Lewy] oraz [Prawy] by sterować, [Naprzód] by przyspieszyć i [W tył] by zwolnić lub się cofać. Kliknij [Skradanie] by z niej wyjść, uderz ją by wziąć ją jako przedmiot.
|
||||||
|
Spruce Boat=Świerkowa łódź
|
||||||
|
Water vehicle=Pojazd wodny
|
||||||
|
Sneak to dismount=Skradaj się by opuścić łódź
|
|
@ -1,5 +1,10 @@
|
||||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||||
|
|
||||||
|
local pairs = pairs
|
||||||
|
|
||||||
|
local get_connected_players = minetest.get_connected_players
|
||||||
|
local get_item_group = minetest.get_item_group
|
||||||
|
|
||||||
mcl_burning = {
|
mcl_burning = {
|
||||||
storage = {},
|
storage = {},
|
||||||
animation_frames = tonumber(minetest.settings:get("fire_animation_frames")) or 8
|
animation_frames = tonumber(minetest.settings:get("fire_animation_frames")) or 8
|
||||||
|
@ -8,7 +13,7 @@ mcl_burning = {
|
||||||
dofile(modpath .. "/api.lua")
|
dofile(modpath .. "/api.lua")
|
||||||
|
|
||||||
minetest.register_globalstep(function(dtime)
|
minetest.register_globalstep(function(dtime)
|
||||||
for _, player in pairs(minetest.get_connected_players()) do
|
for _, player in pairs(get_connected_players()) do
|
||||||
local storage = mcl_burning.storage[player]
|
local storage = mcl_burning.storage[player]
|
||||||
if not mcl_burning.tick(player, dtime, storage) and not mcl_burning.is_affected_by_rain(player) then
|
if not mcl_burning.tick(player, dtime, storage) and not mcl_burning.is_affected_by_rain(player) then
|
||||||
local nodes = mcl_burning.get_touching_nodes(player, {"group:puts_out_fire", "group:set_on_fire"}, storage)
|
local nodes = mcl_burning.get_touching_nodes(player, {"group:puts_out_fire", "group:set_on_fire"}, storage)
|
||||||
|
@ -16,12 +21,12 @@ minetest.register_globalstep(function(dtime)
|
||||||
|
|
||||||
for _, pos in pairs(nodes) do
|
for _, pos in pairs(nodes) do
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
if minetest.get_item_group(node.name, "puts_out_fire") > 0 then
|
if get_item_group(node.name, "puts_out_fire") > 0 then
|
||||||
burn_time = 0
|
burn_time = 0
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
|
||||||
local value = minetest.get_item_group(node.name, "set_on_fire")
|
local value = get_item_group(node.name, "set_on_fire")
|
||||||
if value > burn_time then
|
if value > burn_time then
|
||||||
burn_time = value
|
burn_time = value
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
# textdomain: mcl_falling_nodes
|
||||||
|
@1 was smashed by a falling anvil.=@1 została zmiażdżona przez spadające kowadło.
|
||||||
|
@1 was smashed by a falling block.=@1 została zmiażdżona przez spadający blok.
|
|
@ -1,5 +1,5 @@
|
||||||
--these are lua locals, used for higher performance
|
--these are lua locals, used for higher performance
|
||||||
local minetest, math, vector, ipairs = minetest, math, vector, ipairs
|
local minetest, math, vector, ipairs, pairs = minetest, math, vector, ipairs, pairs
|
||||||
|
|
||||||
--this is used for the player pool in the sound buffer
|
--this is used for the player pool in the sound buffer
|
||||||
local pool = {}
|
local pool = {}
|
||||||
|
@ -233,7 +233,7 @@ function minetest.handle_node_drops(pos, drops, digger)
|
||||||
local dug_node = minetest.get_node(pos)
|
local dug_node = minetest.get_node(pos)
|
||||||
local tooldef
|
local tooldef
|
||||||
local tool
|
local tool
|
||||||
if digger ~= nil then
|
if digger then
|
||||||
tool = digger:get_wielded_item()
|
tool = digger:get_wielded_item()
|
||||||
tooldef = minetest.registered_tools[tool:get_name()]
|
tooldef = minetest.registered_tools[tool:get_name()]
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@ function minetest.handle_node_drops(pos, drops, digger)
|
||||||
end
|
end
|
||||||
-- Spawn item and apply random speed
|
-- Spawn item and apply random speed
|
||||||
local obj = minetest.add_item(dpos, drop_item)
|
local obj = minetest.add_item(dpos, drop_item)
|
||||||
if obj ~= nil then
|
if obj then
|
||||||
local x = math.random(1, 5)
|
local x = math.random(1, 5)
|
||||||
if math.random(1,2) == 1 then
|
if math.random(1,2) == 1 then
|
||||||
x = -x
|
x = -x
|
||||||
|
@ -363,6 +363,17 @@ if not time_to_live then
|
||||||
time_to_live = 300
|
time_to_live = 300
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function cxcz(o, cw, one, zero)
|
||||||
|
if cw < 0 then
|
||||||
|
table.insert(o, { [one]=1, y=0, [zero]=0 })
|
||||||
|
table.insert(o, { [one]=-1, y=0, [zero]=0 })
|
||||||
|
else
|
||||||
|
table.insert(o, { [one]=-1, y=0, [zero]=0 })
|
||||||
|
table.insert(o, { [one]=1, y=0, [zero]=0 })
|
||||||
|
end
|
||||||
|
return o
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_entity(":__builtin:item", {
|
minetest.register_entity(":__builtin:item", {
|
||||||
initial_properties = {
|
initial_properties = {
|
||||||
hp_max = 1,
|
hp_max = 1,
|
||||||
|
@ -383,7 +394,7 @@ minetest.register_entity(":__builtin:item", {
|
||||||
-- The itemstring MUST be set immediately to a non-empty string after creating the entity.
|
-- The itemstring MUST be set immediately to a non-empty string after creating the entity.
|
||||||
-- The hand is NOT permitted as dropped item. ;-)
|
-- The hand is NOT permitted as dropped item. ;-)
|
||||||
-- Item entities will be deleted if they still have an empty itemstring on their first on_step tick.
|
-- Item entities will be deleted if they still have an empty itemstring on their first on_step tick.
|
||||||
itemstring = '',
|
itemstring = "",
|
||||||
|
|
||||||
-- If true, item will fall
|
-- If true, item will fall
|
||||||
physical_state = true,
|
physical_state = true,
|
||||||
|
@ -574,7 +585,7 @@ minetest.register_entity(":__builtin:item", {
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
self.age = self.age + dtime
|
self.age = self.age + dtime
|
||||||
if self._collector_timer ~= nil then
|
if self._collector_timer then
|
||||||
self._collector_timer = self._collector_timer + dtime
|
self._collector_timer = self._collector_timer + dtime
|
||||||
end
|
end
|
||||||
if time_to_live > 0 and self.age > time_to_live then
|
if time_to_live > 0 and self.age > time_to_live then
|
||||||
|
@ -642,16 +653,6 @@ minetest.register_entity(":__builtin:item", {
|
||||||
-- 1st: closest
|
-- 1st: closest
|
||||||
-- 2nd: other direction
|
-- 2nd: other direction
|
||||||
-- 3rd and 4th: other axis
|
-- 3rd and 4th: other axis
|
||||||
local cxcz = function(o, cw, one, zero)
|
|
||||||
if cw < 0 then
|
|
||||||
table.insert(o, { [one]=1, y=0, [zero]=0 })
|
|
||||||
table.insert(o, { [one]=-1, y=0, [zero]=0 })
|
|
||||||
else
|
|
||||||
table.insert(o, { [one]=-1, y=0, [zero]=0 })
|
|
||||||
table.insert(o, { [one]=1, y=0, [zero]=0 })
|
|
||||||
end
|
|
||||||
return o
|
|
||||||
end
|
|
||||||
if math.abs(cx) < math.abs(cz) then
|
if math.abs(cx) < math.abs(cz) then
|
||||||
order = cxcz(order, cx, "x", "z")
|
order = cxcz(order, cx, "x", "z")
|
||||||
order = cxcz(order, cz, "z", "x")
|
order = cxcz(order, cz, "z", "x")
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
local S = minetest.get_translator("mcl_minecarts")
|
local modname = minetest.get_current_modname()
|
||||||
|
local S = minetest.get_translator(modname)
|
||||||
|
|
||||||
local has_mcl_wip = minetest.get_modpath("mcl_wip")
|
local has_mcl_wip = minetest.get_modpath("mcl_wip")
|
||||||
|
|
||||||
mcl_minecarts = {}
|
mcl_minecarts = {}
|
||||||
mcl_minecarts.modpath = minetest.get_modpath("mcl_minecarts")
|
mcl_minecarts.modpath = minetest.get_modpath(modname)
|
||||||
mcl_minecarts.speed_max = 10
|
mcl_minecarts.speed_max = 10
|
||||||
mcl_minecarts.check_float_time = 15
|
mcl_minecarts.check_float_time = 15
|
||||||
|
|
||||||
|
@ -204,7 +205,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o
|
||||||
rou_pos = vector.round(pos)
|
rou_pos = vector.round(pos)
|
||||||
node = minetest.get_node(rou_pos)
|
node = minetest.get_node(rou_pos)
|
||||||
local g = minetest.get_item_group(node.name, "connect_to_raillike")
|
local g = minetest.get_item_group(node.name, "connect_to_raillike")
|
||||||
if g ~= self._railtype and self._railtype ~= nil then
|
if g ~= self._railtype and self._railtype then
|
||||||
-- Detach driver
|
-- Detach driver
|
||||||
if player then
|
if player then
|
||||||
if self._old_pos then
|
if self._old_pos then
|
||||||
|
@ -523,7 +524,7 @@ function mcl_minecarts.place_minecart(itemstack, pointed_thing, placer)
|
||||||
local cart = minetest.add_entity(railpos, entity_id)
|
local cart = minetest.add_entity(railpos, entity_id)
|
||||||
local railtype = minetest.get_item_group(node.name, "connect_to_raillike")
|
local railtype = minetest.get_item_group(node.name, "connect_to_raillike")
|
||||||
local le = cart:get_luaentity()
|
local le = cart:get_luaentity()
|
||||||
if le ~= nil then
|
if le then
|
||||||
le._railtype = railtype
|
le._railtype = railtype
|
||||||
end
|
end
|
||||||
local cart_dir = mcl_minecarts:get_rail_direction(railpos, {x=1, y=0, z=0}, nil, nil, railtype)
|
local cart_dir = mcl_minecarts:get_rail_direction(railpos, {x=1, y=0, z=0}, nil, nil, railtype)
|
||||||
|
@ -606,7 +607,7 @@ Register a minecart
|
||||||
local function register_minecart(itemstring, entity_id, description, tt_help, longdesc, usagehelp, mesh, textures, icon, drop, on_rightclick, on_activate_by_rail, creative)
|
local function register_minecart(itemstring, entity_id, description, tt_help, longdesc, usagehelp, mesh, textures, icon, drop, on_rightclick, on_activate_by_rail, creative)
|
||||||
register_entity(entity_id, mesh, textures, drop, on_rightclick, on_activate_by_rail)
|
register_entity(entity_id, mesh, textures, drop, on_rightclick, on_activate_by_rail)
|
||||||
register_craftitem(itemstring, entity_id, description, tt_help, longdesc, usagehelp, icon, creative)
|
register_craftitem(itemstring, entity_id, description, tt_help, longdesc, usagehelp, icon, creative)
|
||||||
if minetest.get_modpath("doc_identifier") ~= nil then
|
if minetest.get_modpath("doc_identifier") then
|
||||||
doc.sub.identifier.register_object(entity_id, "craftitems", itemstring)
|
doc.sub.identifier.register_object(entity_id, "craftitems", itemstring)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
# textdomain: mcl_minecarts
|
||||||
|
Minecart=Wagonik
|
||||||
|
Minecarts can be used for a quick transportion on rails.=Wagoniki mogą być użyte do szybkiego transportu po torach.
|
||||||
|
Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type.=Wagoniki mogą jeździć tylko po torach i zawsze podążają za wytyczoną ścieżką. W przypadku skrzyżowań typu T, gdzie nie ma prostej ścieżki, skręcają w lew. Ich szybkość zależy od typu torów.
|
||||||
|
You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.=Możesz postawić wagonik na torach. Kliknij prawym przyciskiem myszy aby do niego wejść. Uderz go by zaczął się poruszać.
|
||||||
|
To obtain the minecart, punch it while holding down the sneak key.=Aby odzyskać wagonik uderz go podczas skradania.
|
||||||
|
A minecart with TNT is an explosive vehicle that travels on rail.=Wagonik z TNT jest wybuchowym pojazdem podróżującym po torach.
|
||||||
|
Place it on rails. Punch it to move it. The TNT is ignited with a flint and steel or when the minecart is on an powered activator rail.=Postaw go na torach. Uderz by zaczął się poruszać. TNT zapala się krzesiwem lub gdy wagonik jest na zasilonych torach aktywacyjnych.
|
||||||
|
To obtain the minecart and TNT, punch them while holding down the sneak key. You can't do this if the TNT was ignited.=Aby odzyskać wagonik z TNT uderz go podczas skradania. Nie możesz tego zrobić gdy TNT jest zapalone.
|
||||||
|
A minecart with furnace is a vehicle that travels on rails. It can propel itself with fuel.=Wagonik z piecem jest pojazdem podróżującym na torach. Napędza on samego siebie za pomocą paliwa.
|
||||||
|
Place it on rails. If you give it some coal, the furnace will start burning for a long time and the minecart will be able to move itself. Punch it to get it moving.=Postaw go na torach. Jeśli dasz mu nieco węgla piec zacznie palić przez długi czas, a wagonik będzie się sam poruszał. Uderz go by zaczął się poruszać.
|
||||||
|
To obtain the minecart and furnace, punch them while holding down the sneak key.=Aby odzyskać wagonik z piecem uderz go podczas skradania.
|
||||||
|
Minecart with Chest=Wagonik ze skrzynią
|
||||||
|
Minecart with Furnace=Wagonik z piecem
|
||||||
|
Minecart with Command Block=Wagonik z blokiem poleceń
|
||||||
|
Minecart with Hopper=Wagonik z lejem
|
||||||
|
Minecart with TNT=Wagonik z TNT
|
||||||
|
Place them on the ground to build your railway, the rails will automatically connect to each other and will turn into curves, T-junctions, crossings and slopes as needed.=Postaw je na ziemi by zbudować ścieżkę z torów. Tory automatycznie połączą się ze sobą i zamienią się w zakręty, skrzyżowania typu T, skrzyżowania i równie w zależności od potrzeb.
|
||||||
|
Rail=Tor
|
||||||
|
Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Zwyczajne tory nieco spowalniają wagoniki ze względu na tarcie.
|
||||||
|
Powered Rail=Zasilane tory
|
||||||
|
Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Zasilane tory mogą przyspieszać lub spowalniać wagoniki.
|
||||||
|
Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.=Bez zasilania czerwienitem tory będą spowalniać wagoniki. Aby sprawić by je przyspieszały zasil je czerwienitem.
|
||||||
|
Activator Rail=Tory aktywacyjne
|
||||||
|
Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Tory aktywacyjne są wykorzystywane do aktywacji specjalnych wagoników.
|
||||||
|
To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail.=Aby ten tor aktywował wagonik, zasil go czerwienitem i spraw by wagonik po nim przejechał.
|
||||||
|
Detector Rail=Tory z czujnikiem
|
||||||
|
Rails can be used to build transport tracks for minecarts. A detector rail is able to detect a minecart above it and powers redstone mechanisms.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Tory z czujnikiem są w stanie wykryć kiedy wagonik po nich przejeżdża i wysłać sygnał do czerwienitowych mechanizmów.
|
||||||
|
To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail.=Aby wykryć wagonik i dostarczyć zasilanie czerwienitem podłącz go czerwienitem to mechanizmu i spraw by wagonik po nim przejechał.
|
||||||
|
Track for minecarts=Tor dla wagoników
|
||||||
|
Speed up when powered, slow down when not powered=Przyspiesza gdy zasilane, spowalnia gdy nie
|
||||||
|
Activates minecarts when powered=Aktywuje wagoniki gdy zasilane
|
||||||
|
Emits redstone power when a minecart is detected=Emituje zasilanie czerwienitem gdy wagonik jest wykryty
|
||||||
|
Vehicle for fast travel on rails=Pojazd do szybkiej podróży na torach
|
||||||
|
Can be ignited by tools or powered activator rail=Może być zapalony przez narzędzia, lub zasilane tor aktywacyjne
|
||||||
|
Sneak to dismount=Zacznij się skradać by zejść
|
|
@ -1,4 +1,4 @@
|
||||||
local S = minetest.get_translator("mcl_minecarts")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
-- Template rail function
|
-- Template rail function
|
||||||
local function register_rail(itemstring, tiles, def_extras, creative)
|
local function register_rail(itemstring, tiles, def_extras, creative)
|
||||||
|
@ -206,11 +206,11 @@ register_rail("mcl_minecarts:detector_rail_on",
|
||||||
|
|
||||||
-- Crafting
|
-- Crafting
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'mcl_minecarts:rail 16',
|
output = "mcl_minecarts:rail 16",
|
||||||
recipe = {
|
recipe = {
|
||||||
{'mcl_core:iron_ingot', '', 'mcl_core:iron_ingot'},
|
{"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"},
|
||||||
{'mcl_core:iron_ingot', 'mcl_core:stick', 'mcl_core:iron_ingot'},
|
{"mcl_core:iron_ingot", "mcl_core:stick", "mcl_core:iron_ingot"},
|
||||||
{'mcl_core:iron_ingot', '', 'mcl_core:iron_ingot'},
|
{"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ local mod_mobspawners = minetest_get_modpath("mcl_mobspawners")
|
||||||
--local height_switcher = false
|
--local height_switcher = false
|
||||||
|
|
||||||
-- Get translator
|
-- Get translator
|
||||||
local S = minetest.get_translator("mcl_mobs")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
-- CMI support check
|
-- CMI support check
|
||||||
--local use_cmi = minetest.global_exists("cmi")
|
--local use_cmi = minetest.global_exists("cmi")
|
||||||
|
@ -429,7 +429,7 @@ function mobs:register_mob(name, def)
|
||||||
--harmed_by_heal = def.harmed_by_heal,
|
--harmed_by_heal = def.harmed_by_heal,
|
||||||
})
|
})
|
||||||
|
|
||||||
if minetest_get_modpath("doc_identifier") ~= nil then
|
if minetest_get_modpath("doc_identifier") then
|
||||||
doc.sub.identifier.register_object(name, "basics", "mobs")
|
doc.sub.identifier.register_object(name, "basics", "mobs")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -990,7 +990,7 @@ function mobs.mob_step(self, dtime)
|
||||||
if self.memory <= 0 then
|
if self.memory <= 0 then
|
||||||
|
|
||||||
--reset states when coming out of hostile state
|
--reset states when coming out of hostile state
|
||||||
if self.attacking ~= nil then
|
if self.attacking then
|
||||||
self.state_timer = -1
|
self.state_timer = -1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ mobs.explode_attack_walk = function(self,dtime)
|
||||||
--make mob walk up to player within 2 nodes distance then start exploding
|
--make mob walk up to player within 2 nodes distance then start exploding
|
||||||
if distance_from_attacking >= self.reach and
|
if distance_from_attacking >= self.reach and
|
||||||
--don't allow explosion to cancel unless out of the reach boundary
|
--don't allow explosion to cancel unless out of the reach boundary
|
||||||
not (self.explosion_animation ~= nil and self.explosion_animation > 0 and distance_from_attacking <= self.defuse_reach) then
|
not (self.explosion_animation and self.explosion_animation > 0 and distance_from_attacking <= self.defuse_reach) then
|
||||||
|
|
||||||
mobs.set_velocity(self, self.run_velocity)
|
mobs.set_velocity(self, self.run_velocity)
|
||||||
mobs.set_mob_animation(self,"run")
|
mobs.set_mob_animation(self,"run")
|
||||||
|
@ -85,9 +85,8 @@ end
|
||||||
|
|
||||||
--this is a small helper function to make working with explosion animations easier
|
--this is a small helper function to make working with explosion animations easier
|
||||||
mobs.reverse_explosion_animation = function(self,dtime)
|
mobs.reverse_explosion_animation = function(self,dtime)
|
||||||
|
|
||||||
--if explosion animation was greater than 0 then reverse it
|
--if explosion animation was greater than 0 then reverse it
|
||||||
if self.explosion_animation ~= nil and self.explosion_animation > 0 then
|
if self.explosion_animation and self.explosion_animation > 0 then
|
||||||
self.explosion_animation = self.explosion_animation - dtime
|
self.explosion_animation = self.explosion_animation - dtime
|
||||||
if self.explosion_animation < 0 then
|
if self.explosion_animation < 0 then
|
||||||
self.explosion_animation = 0
|
self.explosion_animation = 0
|
||||||
|
|
|
@ -36,9 +36,8 @@ mobs.shoot_projectile_handling = function(arrow_item, pos, dir, yaw, shooter, po
|
||||||
le._collectable = collectable
|
le._collectable = collectable
|
||||||
|
|
||||||
--play custom shoot sound
|
--play custom shoot sound
|
||||||
if shooter ~= nil and shooter.shoot_sound then
|
if shooter and shooter.shoot_sound then
|
||||||
minetest.sound_play(shooter.shoot_sound, {pos=pos, max_hear_distance=16}, true)
|
minetest.sound_play(shooter.shoot_sound, {pos=pos, max_hear_distance=16}, true)
|
||||||
end
|
end
|
||||||
|
|
||||||
return obj
|
return obj
|
||||||
end
|
end
|
|
@ -5,6 +5,7 @@ local get_node_light = minetest.get_node_light
|
||||||
local find_nodes_in_area_under_air = minetest.find_nodes_in_area_under_air
|
local find_nodes_in_area_under_air = minetest.find_nodes_in_area_under_air
|
||||||
local get_biome_name = minetest.get_biome_name
|
local get_biome_name = minetest.get_biome_name
|
||||||
local get_objects_inside_radius = minetest.get_objects_inside_radius
|
local get_objects_inside_radius = minetest.get_objects_inside_radius
|
||||||
|
local get_connected_players = minetest.get_connected_players
|
||||||
|
|
||||||
|
|
||||||
local math_random = math.random
|
local math_random = math.random
|
||||||
|
@ -18,6 +19,7 @@ local vector_floor = vector.floor
|
||||||
local table_copy = table.copy
|
local table_copy = table.copy
|
||||||
local table_remove = table.remove
|
local table_remove = table.remove
|
||||||
|
|
||||||
|
local pairs = pairs
|
||||||
|
|
||||||
-- range for mob count
|
-- range for mob count
|
||||||
local aoc_range = 48
|
local aoc_range = 48
|
||||||
|
@ -279,7 +281,7 @@ function mobs:spawn_specific(name, dimension, type_of_spawning, biomes, min_ligh
|
||||||
end
|
end
|
||||||
|
|
||||||
-- if toggle set to nil then ignore day/night check
|
-- if toggle set to nil then ignore day/night check
|
||||||
if day_toggle ~= nil then
|
if day_toggle then
|
||||||
|
|
||||||
local tod = (minetest.get_timeofday() or 0) * 24000
|
local tod = (minetest.get_timeofday() or 0) * 24000
|
||||||
|
|
||||||
|
@ -369,7 +371,7 @@ function mobs:spawn_specific(name, dimension, type_of_spawning, biomes, min_ligh
|
||||||
if minetest.registered_nodes[node_ok(pos2).name].walkable == true then
|
if minetest.registered_nodes[node_ok(pos2).name].walkable == true then
|
||||||
-- inside block
|
-- inside block
|
||||||
minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, too little space!")
|
minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, too little space!")
|
||||||
if ent.spawn_small_alternative ~= nil and (not minetest.registered_nodes[node_ok(pos).name].walkable) then
|
if ent.spawn_small_alternative and (not minetest.registered_nodes[node_ok(pos).name].walkable) then
|
||||||
minetest.log("info", "Trying to spawn smaller alternative mob: "..ent.spawn_small_alternative)
|
minetest.log("info", "Trying to spawn smaller alternative mob: "..ent.spawn_small_alternative)
|
||||||
spawn_action(orig_pos, node, active_object_count, active_object_count_wider, ent.spawn_small_alternative)
|
spawn_action(orig_pos, node, active_object_count, active_object_count_wider, ent.spawn_small_alternative)
|
||||||
end
|
end
|
||||||
|
@ -540,7 +542,7 @@ if mobs_spawn then
|
||||||
timer = timer + dtime
|
timer = timer + dtime
|
||||||
if timer >= 10 then
|
if timer >= 10 then
|
||||||
timer = 0
|
timer = 0
|
||||||
for _,player in pairs(minetest.get_connected_players()) do
|
for _,player in pairs(get_connected_players()) do
|
||||||
-- after this line each "break" means "continue"
|
-- after this line each "break" means "continue"
|
||||||
local do_mob_spawning = true
|
local do_mob_spawning = true
|
||||||
repeat
|
repeat
|
||||||
|
@ -548,15 +550,15 @@ if mobs_spawn then
|
||||||
--they happen in a single server step
|
--they happen in a single server step
|
||||||
|
|
||||||
local player_pos = player:get_pos()
|
local player_pos = player:get_pos()
|
||||||
local _,dimension = mcl_worlds.y_to_layer(player_pos.y)
|
local dimension = mcl_worlds.pos_to_dimension(player_pos)
|
||||||
|
|
||||||
if dimension == "void" or dimension == "default" then
|
if dimension == "void" or dimension == "default" then
|
||||||
break -- ignore void and unloaded area
|
break -- ignore void and unloaded area
|
||||||
end
|
end
|
||||||
|
|
||||||
local min,max = decypher_limits(player_pos.y)
|
local min, max = decypher_limits(player_pos.y)
|
||||||
|
|
||||||
for i = 1,math_random(1,4) do
|
for i = 1, math_random(1,4) do
|
||||||
-- after this line each "break" means "continue"
|
-- after this line each "break" means "continue"
|
||||||
local do_mob_algorithm = true
|
local do_mob_algorithm = true
|
||||||
repeat
|
repeat
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
local S = minetest.get_translator("mcl_mobs")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
-- name tag
|
-- name tag
|
||||||
minetest.register_craftitem("mcl_mobs:nametag", {
|
minetest.register_craftitem("mcl_mobs:nametag", {
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
# textdomain: mcl_mobs
|
||||||
|
Peaceful mode active! No monsters will spawn.=Tryb pokojowy aktywowany! Potwory nie będą się pojawiać.
|
||||||
|
This allows you to place a single mob.=To pozwala na przywołanie jednego moba.
|
||||||
|
Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns.=Postaw to w miejscu w którym chcesz aby pojawił się mob. Zwierzęta pojawią się jako oswojone chyba, że będziesz się skradał podczas stawiania. Jeśli postawisz to na spawnerze to zmienisz którego moba przywołuje.
|
||||||
|
You need the “maphack” privilege to change the mob spawner.=Potrzebujesz przywileju "maphack", aby zmienić spawner.
|
||||||
|
Name Tag=Znacznik
|
||||||
|
A name tag is an item to name a mob.=Znacznik jest przedmiotem pozwalającym nazwać moba.
|
||||||
|
Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag.=Zanim użyjesz znacznika musisz wybrać imię przy kowadle. Następnie możesz użyć znacznika by nazwać moba. To zużywa znacznik.
|
||||||
|
Only peaceful mobs allowed!=Tylko pokojowe moby są dozwolone!
|
||||||
|
Give names to mobs=Nazwij moby
|
||||||
|
Set name at anvil=Wybierz imię przy kowadle
|
|
@ -1,8 +1,9 @@
|
||||||
mcl_paintings = {}
|
mcl_paintings = {}
|
||||||
|
|
||||||
dofile(minetest.get_modpath(minetest.get_current_modname()).."/paintings.lua")
|
local modname = minetest.get_current_modname()
|
||||||
|
dofile(minetest.get_modpath(modname).."/paintings.lua")
|
||||||
|
|
||||||
local S = minetest.get_translator("mcl_paintings")
|
local S = minetest.get_translator(modname)
|
||||||
|
|
||||||
local math = math
|
local math = math
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
# textdomain:mcl_paintings
|
||||||
|
Painting=Obraz
|
|
@ -8,7 +8,7 @@
|
||||||
-- NOTE: Most strings intentionally not marked for translation, other mods already have these items.
|
-- NOTE: Most strings intentionally not marked for translation, other mods already have these items.
|
||||||
-- TODO: Remove this file eventually, most items are already outsourced in other mods.
|
-- TODO: Remove this file eventually, most items are already outsourced in other mods.
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
local c = mobs_mc.is_item_variable_overridden
|
local c = mobs_mc.is_item_variable_overridden
|
||||||
|
|
||||||
|
@ -234,8 +234,8 @@ end
|
||||||
if c("ender_eye") and c("blaze_powder") and c("blaze_rod") then
|
if c("ender_eye") and c("blaze_powder") and c("blaze_rod") then
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type = "shapeless",
|
type = "shapeless",
|
||||||
output = 'mobs_mc:ender_eye',
|
output = "mobs_mc:ender_eye",
|
||||||
recipe = { 'mobs_mc:blaze_powder', 'mobs_mc:blaze_rod'},
|
recipe = { "mobs_mc:blaze_powder", "mobs_mc:blaze_rod"},
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
-- NOTE: Strings intentionally not marked for translation, other mods already have these items.
|
-- NOTE: Strings intentionally not marked for translation, other mods already have these items.
|
||||||
-- TODO: Remove this file eventually, all items here are already outsourced in other mods.
|
-- TODO: Remove this file eventually, all items here are already outsourced in other mods.
|
||||||
|
|
||||||
--local S = minetest.get_translator("mobs_mc")
|
--local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--maikerumines throwing code
|
--maikerumines throwing code
|
||||||
--arrow (weapon)
|
--arrow (weapon)
|
||||||
|
@ -83,7 +83,7 @@ THROWING_ARROW_ENTITY.on_step = function(self, dtime)
|
||||||
if self.timer>0.2 then
|
if self.timer>0.2 then
|
||||||
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1.5)
|
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1.5)
|
||||||
for k, obj in pairs(objs) do
|
for k, obj in pairs(objs) do
|
||||||
if obj:get_luaentity() ~= nil then
|
if obj:get_luaentity() then
|
||||||
if obj:get_luaentity().name ~= "mobs_mc:arrow_entity" and obj:get_luaentity().name ~= "__builtin:item" then
|
if obj:get_luaentity().name ~= "mobs_mc:arrow_entity" and obj:get_luaentity().name ~= "__builtin:item" then
|
||||||
local damage = 3
|
local damage = 3
|
||||||
minetest.sound_play("damage", {pos = pos}, true)
|
minetest.sound_play("damage", {pos = pos}, true)
|
||||||
|
@ -108,7 +108,7 @@ THROWING_ARROW_ENTITY.on_step = function(self, dtime)
|
||||||
if self.lastpos.x~=nil then
|
if self.lastpos.x~=nil then
|
||||||
if node.name ~= "air" then
|
if node.name ~= "air" then
|
||||||
minetest.sound_play("bowhit1", {pos = pos}, true)
|
minetest.sound_play("bowhit1", {pos = pos}, true)
|
||||||
minetest.add_item(self.lastpos, 'mobs_mc:arrow')
|
minetest.add_item(self.lastpos, "mobs_mc:arrow")
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -155,7 +155,7 @@ end
|
||||||
|
|
||||||
if c("arrow") and c("flint") and c("feather") and c("stick") then
|
if c("arrow") and c("flint") and c("feather") and c("stick") then
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'mobs_mc:arrow 4',
|
output = "mobs_mc:arrow 4",
|
||||||
recipe = {
|
recipe = {
|
||||||
{mobs_mc.items.flint},
|
{mobs_mc.items.flint},
|
||||||
{mobs_mc.items.stick},
|
{mobs_mc.items.stick},
|
||||||
|
@ -181,11 +181,11 @@ if c("bow") then
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'mobs_mc:bow_wood',
|
output = "mobs_mc:bow_wood",
|
||||||
recipe = {
|
recipe = {
|
||||||
{mobs_mc.items.string, mobs_mc.items.stick, ''},
|
{mobs_mc.items.string, mobs_mc.items.stick, ""},
|
||||||
{mobs_mc.items.string, '', mobs_mc.items.stick},
|
{mobs_mc.items.string, "", mobs_mc.items.stick},
|
||||||
{mobs_mc.items.string, mobs_mc.items.stick, ''},
|
{mobs_mc.items.string, mobs_mc.items.stick, ""},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
@ -259,7 +259,7 @@ if c("egg") then
|
||||||
})
|
})
|
||||||
|
|
||||||
-- shoot egg
|
-- shoot egg
|
||||||
local mobs_shoot_egg = function (item, player, pointed_thing)
|
local function mobs_shoot_egg(item, player, pointed_thing)
|
||||||
|
|
||||||
local playerpos = player:get_pos()
|
local playerpos = player:get_pos()
|
||||||
|
|
||||||
|
@ -349,7 +349,7 @@ mobs:register_arrow("mobs_mc:snowball_entity", {
|
||||||
|
|
||||||
if c("snowball") then
|
if c("snowball") then
|
||||||
-- shoot snowball
|
-- shoot snowball
|
||||||
local mobs_shoot_snowball = function (item, player, pointed_thing)
|
local function mobs_shoot_snowball(item, player, pointed_thing)
|
||||||
|
|
||||||
local playerpos = player:get_pos()
|
local playerpos = player:get_pos()
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
-- TODO: Remove this file eventually, all items here are already outsourced in other mods.
|
-- TODO: Remove this file eventually, all items here are already outsourced in other mods.
|
||||||
-- TODO: Add translation.
|
-- TODO: Add translation.
|
||||||
|
|
||||||
--local S = minetest.get_translator("mobs_mc")
|
--local S = local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
-- Heads system
|
-- Heads system
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
--################### AGENT - seemingly unused
|
--################### AGENT - seemingly unused
|
||||||
--###################
|
--###################
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
mobs:register_mob("mobs_mc:agent", {
|
mobs:register_mob("mobs_mc:agent", {
|
||||||
type = "npc",
|
type = "npc",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
mobs:register_mob("mobs_mc:bat", {
|
mobs:register_mob("mobs_mc:bat", {
|
||||||
description = S("Bat"),
|
description = S("Bat"),
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
-- Model and mobs_blaze.png see https://github.com/22i/minecraft-voxel-blender-models -hi 22i ~jordan4ibanez
|
-- Model and mobs_blaze.png see https://github.com/22i/minecraft-voxel-blender-models -hi 22i ~jordan4ibanez
|
||||||
-- blaze.lua partial copy of mobs_mc/ghast.lua
|
-- blaze.lua partial copy of mobs_mc/ghast.lua
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### BLAZE
|
--################### BLAZE
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### CHICKEN
|
--################### CHICKEN
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
local cow_def = {
|
local cow_def = {
|
||||||
description = S("Cow"),
|
description = S("Cow"),
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### CREEPER
|
--################### CREEPER
|
||||||
|
@ -72,7 +72,7 @@ mobs:register_mob("mobs_mc:creeper", {
|
||||||
-- TODO: Make creeper flash after doing this as well.
|
-- TODO: Make creeper flash after doing this as well.
|
||||||
-- TODO: Test and debug this code.
|
-- TODO: Test and debug this code.
|
||||||
on_rightclick = function(self, clicker)
|
on_rightclick = function(self, clicker)
|
||||||
if self._forced_explosion_countdown_timer ~= nil then
|
if self._forced_explosion_countdown_timer then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local item = clicker:get_wielded_item()
|
local item = clicker:get_wielded_item()
|
||||||
|
@ -92,7 +92,7 @@ mobs:register_mob("mobs_mc:creeper", {
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
do_custom = function(self, dtime)
|
do_custom = function(self, dtime)
|
||||||
if self._forced_explosion_countdown_timer ~= nil then
|
if self._forced_explosion_countdown_timer then
|
||||||
self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime
|
self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime
|
||||||
if self._forced_explosion_countdown_timer <= 0 then
|
if self._forced_explosion_countdown_timer <= 0 then
|
||||||
mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength)
|
mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength)
|
||||||
|
@ -196,7 +196,7 @@ mobs:register_mob("mobs_mc:creeper_charged", {
|
||||||
-- TODO: Make creeper flash after doing this as well.
|
-- TODO: Make creeper flash after doing this as well.
|
||||||
-- TODO: Test and debug this code.
|
-- TODO: Test and debug this code.
|
||||||
on_rightclick = function(self, clicker)
|
on_rightclick = function(self, clicker)
|
||||||
if self._forced_explosion_countdown_timer ~= nil then
|
if self._forced_explosion_countdown_timer then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local item = clicker:get_wielded_item()
|
local item = clicker:get_wielded_item()
|
||||||
|
@ -216,7 +216,7 @@ mobs:register_mob("mobs_mc:creeper_charged", {
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
do_custom = function(self, dtime)
|
do_custom = function(self, dtime)
|
||||||
if self._forced_explosion_countdown_timer ~= nil then
|
if self._forced_explosion_countdown_timer then
|
||||||
self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime
|
self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime
|
||||||
if self._forced_explosion_countdown_timer <= 0 then
|
if self._forced_explosion_countdown_timer <= 0 then
|
||||||
mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength)
|
mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
--################### ENDERDRAGON
|
--################### ENDERDRAGON
|
||||||
--###################
|
--###################
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
mobs:register_mob("mobs_mc:enderdragon", {
|
mobs:register_mob("mobs_mc:enderdragon", {
|
||||||
description = S("Ender Dragon"),
|
description = S("Ender Dragon"),
|
||||||
|
|
|
@ -24,9 +24,11 @@
|
||||||
-- added rain damage.
|
-- added rain damage.
|
||||||
-- fixed the grass_with_dirt issue.
|
-- fixed the grass_with_dirt issue.
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
local telesound = function(pos, is_source)
|
local vector = vector
|
||||||
|
|
||||||
|
local function telesound(pos, is_source)
|
||||||
local snd
|
local snd
|
||||||
if is_source then
|
if is_source then
|
||||||
snd = "mobs_mc_enderman_teleport_src"
|
snd = "mobs_mc_enderman_teleport_src"
|
||||||
|
@ -302,7 +304,7 @@ mobs:register_mob("mobs_mc:enderman", {
|
||||||
if self.attacking then
|
if self.attacking then
|
||||||
local target = self.attacking
|
local target = self.attacking
|
||||||
local pos = target:get_pos()
|
local pos = target:get_pos()
|
||||||
if pos ~= nil then
|
if pos then
|
||||||
if vector.distance(self.object:get_pos(), target:get_pos()) > 10 then
|
if vector.distance(self.object:get_pos(), target:get_pos()) > 10 then
|
||||||
self:teleport(target)
|
self:teleport(target)
|
||||||
end
|
end
|
||||||
|
@ -341,8 +343,8 @@ mobs:register_mob("mobs_mc:enderman", {
|
||||||
-- self:teleport(nil)
|
-- self:teleport(nil)
|
||||||
-- self.state = ""
|
-- self.state = ""
|
||||||
--else
|
--else
|
||||||
if self.attack ~= nil and not minetest.settings:get_bool("creative_mode") then
|
if self.attack and not minetest.settings:get_bool("creative_mode") then
|
||||||
self.state = 'attack'
|
self.state = "attack"
|
||||||
end
|
end
|
||||||
--end
|
--end
|
||||||
end
|
end
|
||||||
|
@ -459,7 +461,7 @@ mobs:register_mob("mobs_mc:enderman", {
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif self._taken_node ~= nil and self._taken_node ~= "" and self._take_place_timer >= self._next_take_place_time then
|
elseif self._taken_node and self._taken_node ~= "" and self._take_place_timer >= self._next_take_place_time then
|
||||||
-- Place taken node
|
-- Place taken node
|
||||||
self._take_place_timer = 0
|
self._take_place_timer = 0
|
||||||
self._next_take_place_time = math.random(take_frequency_min, take_frequency_max)
|
self._next_take_place_time = math.random(take_frequency_min, take_frequency_max)
|
||||||
|
@ -485,12 +487,12 @@ mobs:register_mob("mobs_mc:enderman", {
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
do_teleport = function(self, target)
|
do_teleport = function(self, target)
|
||||||
if target ~= nil then
|
if target then
|
||||||
local target_pos = target:get_pos()
|
local target_pos = target:get_pos()
|
||||||
-- Find all solid nodes below air in a 10×10×10 cuboid centered on the target
|
-- Find all solid nodes below air in a 10×10×10 cuboid centered on the target
|
||||||
local nodes = minetest.find_nodes_in_area_under_air(vector.subtract(target_pos, 5), vector.add(target_pos, 5), {"group:solid", "group:cracky", "group:crumbly"})
|
local nodes = minetest.find_nodes_in_area_under_air(vector.subtract(target_pos, 5), vector.add(target_pos, 5), {"group:solid", "group:cracky", "group:crumbly"})
|
||||||
local telepos
|
local telepos
|
||||||
if nodes ~= nil then
|
if nodes then
|
||||||
if #nodes > 0 then
|
if #nodes > 0 then
|
||||||
-- Up to 64 attempts to teleport
|
-- Up to 64 attempts to teleport
|
||||||
for n=1, math.min(64, #nodes) do
|
for n=1, math.min(64, #nodes) do
|
||||||
|
@ -525,7 +527,7 @@ mobs:register_mob("mobs_mc:enderman", {
|
||||||
-- We need to add (or subtract) different random numbers to each vector component, so it couldn't be done with a nice single vector.add() or .subtract():
|
-- We need to add (or subtract) different random numbers to each vector component, so it couldn't be done with a nice single vector.add() or .subtract():
|
||||||
local randomCube = vector.new( pos.x + 8*(pr:next(0,16)-8), pos.y + 8*(pr:next(0,16)-8), pos.z + 8*(pr:next(0,16)-8) )
|
local randomCube = vector.new( pos.x + 8*(pr:next(0,16)-8), pos.y + 8*(pr:next(0,16)-8), pos.z + 8*(pr:next(0,16)-8) )
|
||||||
local nodes = minetest.find_nodes_in_area_under_air(vector.subtract(randomCube, 4), vector.add(randomCube, 4), {"group:solid", "group:cracky", "group:crumbly"})
|
local nodes = minetest.find_nodes_in_area_under_air(vector.subtract(randomCube, 4), vector.add(randomCube, 4), {"group:solid", "group:cracky", "group:crumbly"})
|
||||||
if nodes ~= nil then
|
if nodes then
|
||||||
if #nodes > 0 then
|
if #nodes > 0 then
|
||||||
-- Up to 8 low-level (in total up to 8*8 = 64) attempts to teleport
|
-- Up to 8 low-level (in total up to 8*8 = 64) attempts to teleport
|
||||||
for n=1, math.min(8, #nodes) do
|
for n=1, math.min(8, #nodes) do
|
||||||
|
@ -557,13 +559,13 @@ mobs:register_mob("mobs_mc:enderman", {
|
||||||
end,
|
end,
|
||||||
on_die = function(self, pos)
|
on_die = function(self, pos)
|
||||||
-- Drop carried node on death
|
-- Drop carried node on death
|
||||||
if self._taken_node ~= nil and self._taken_node ~= "" then
|
if self._taken_node and self._taken_node ~= "" then
|
||||||
minetest.add_item(pos, self._taken_node)
|
minetest.add_item(pos, self._taken_node)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
do_punch = function(self, hitter, tflp, tool_caps, dir)
|
do_punch = function(self, hitter, tflp, tool_caps, dir)
|
||||||
-- damage from rain caused by itself so we don't want it to attack itself.
|
-- damage from rain caused by itself so we don't want it to attack itself.
|
||||||
if hitter ~= self.object and hitter ~= nil then
|
if hitter ~= self.object and hitter then
|
||||||
--if (minetest.get_timeofday() * 24000) > 5001 and (minetest.get_timeofday() * 24000) < 19000 then
|
--if (minetest.get_timeofday() * 24000) > 5001 and (minetest.get_timeofday() * 24000) < 19000 then
|
||||||
-- self:teleport(nil)
|
-- self:teleport(nil)
|
||||||
--else
|
--else
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
--################### ENDERMITE
|
--################### ENDERMITE
|
||||||
--###################
|
--###################
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
mobs:register_mob("mobs_mc:endermite", {
|
mobs:register_mob("mobs_mc:endermite", {
|
||||||
description = S("Endermite"),
|
description = S("Endermite"),
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### GHAST
|
--################### GHAST
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
--################### GUARDIAN
|
--################### GUARDIAN
|
||||||
--###################
|
--###################
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
mobs:register_mob("mobs_mc:guardian", {
|
mobs:register_mob("mobs_mc:guardian", {
|
||||||
description = S("Guardian"),
|
description = S("Guardian"),
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
--################### GUARDIAN
|
--################### GUARDIAN
|
||||||
--###################
|
--###################
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
mobs:register_mob("mobs_mc:guardian_elder", {
|
mobs:register_mob("mobs_mc:guardian_elder", {
|
||||||
description = S("Elder Guardian"),
|
description = S("Elder Guardian"),
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### HORSE
|
--################### HORSE
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local path = minetest.get_modpath("mobs_mc")
|
local path = minetest.get_modpath(minetest.get_current_modname())
|
||||||
|
|
||||||
if not minetest.get_modpath("mobs_mc_gameconfig") then
|
if not minetest.get_modpath("mobs_mc_gameconfig") then
|
||||||
mobs_mc = {}
|
mobs_mc = {}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### IRON GOLEM
|
--################### IRON GOLEM
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### LLAMA
|
--################### LLAMA
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
# textdomain: mobs_mc
|
||||||
|
Totem of Undying=Token nieśmiertelności
|
||||||
|
A totem of undying is a rare artifact which may safe you from certain death.=Totem nieśmiertelności to rzadki artefakt, który może uchronić cię przed pewną śmiercią.
|
||||||
|
The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=Totem działa tylko kiedy trzymasz go w dłoni. Jeśli otrzymasz obrażenia od upadku zostaniesz oszczędzony i pozostanie ci 1 HP, jednak totem zostanie wtedy zniszczony.
|
||||||
|
Agent=Agent
|
||||||
|
Bat=Nietoperz
|
||||||
|
Blaze=Płomyk
|
||||||
|
Chicken=Kurczak
|
||||||
|
Cow=Krowa
|
||||||
|
Mooshroom=Muuuchomor
|
||||||
|
Creeper=Creeper
|
||||||
|
Ender Dragon=Smok kresu
|
||||||
|
Enderman=Enderman
|
||||||
|
Endermite=Endermit
|
||||||
|
Ghast=Ghast
|
||||||
|
Elder Guardian=Prastrażnik
|
||||||
|
Guardian=Strażnik
|
||||||
|
Horse=Koń
|
||||||
|
Skeleton Horse=Koń szkielet
|
||||||
|
Zombie Horse=Koń zombie
|
||||||
|
Donkey=Osioł
|
||||||
|
Mule=Muł
|
||||||
|
Iron Golem=Żelazny golem
|
||||||
|
Llama=Lama
|
||||||
|
Ocelot=Ocelot
|
||||||
|
Parrot=Papuga
|
||||||
|
Pig=Świnia
|
||||||
|
Polar Bear=Niedźwiedź polarny
|
||||||
|
Rabbit=Królik
|
||||||
|
Killer Bunny=Królik zabójca
|
||||||
|
Sheep=Owca
|
||||||
|
Shulker=Shulker
|
||||||
|
Silverfish=Rybik cukrowy
|
||||||
|
Skeleton=Szkielet
|
||||||
|
Stray=Tułacz
|
||||||
|
Wither Skeleton=Witherowy szkielet
|
||||||
|
Magma Cube=Kostka magmy
|
||||||
|
Slime=Szlam
|
||||||
|
Snow Golem=Śnieżny golem
|
||||||
|
Spider=Pająk
|
||||||
|
Cave Spider=Pająk jaskiniowy
|
||||||
|
Squid=Kałamarnica
|
||||||
|
Vex=Dręczyciel
|
||||||
|
Evoker=Przywoływacz
|
||||||
|
Illusioner=Iluzjonista
|
||||||
|
Villager=Osadnik
|
||||||
|
Vindicator=Obrońca
|
||||||
|
Zombie Villager=Osadnik zombie
|
||||||
|
Witch=Wiedźma
|
||||||
|
Wither=Wither
|
||||||
|
Wolf=Wilk
|
||||||
|
Husk=Posuch
|
||||||
|
Zombie=Zombie
|
||||||
|
Zombie Pigman=Świniak zombie
|
||||||
|
Iron Horse Armor=Żelazna zbroja dla konia
|
||||||
|
Iron horse armor can be worn by horses to increase their protection from harm a bit.=Żelazna zbroja dla konia może być noszona przez konie aby nieco zwiększyć ich odporność na obrażenia.
|
||||||
|
Golden Horse Armor=Złota zbroja dla konia
|
||||||
|
Golden horse armor can be worn by horses to increase their protection from harm.=Złota zbroja dla konia może być noszona przez konie aby zwiększyć ich odporność na obrażenia.
|
||||||
|
Diamond Horse Armor=Diamentowa zbroja dla konia
|
||||||
|
Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Diamentowa zbroja dla konia może być noszona przez konie aby istotnie zwiększyć ich odporność na obrażenia.
|
||||||
|
Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Połóż ją na koniu aby założyć zbroję dla konia. Osły i muły nie mogą nosić zbroi dla konia.
|
||||||
|
Farmer=Rolnik
|
||||||
|
Fisherman=Rybak
|
||||||
|
Fletcher=Łuczarz
|
||||||
|
Shepherd=Pasterz
|
||||||
|
Librarian=Bibliotekarz
|
||||||
|
Cartographer=Kartograf
|
||||||
|
Armorer=Płatnerz
|
||||||
|
Leatherworker=Rymarz
|
||||||
|
Butcher=Rzeźnik
|
||||||
|
Weapon Smith=Zbrojmistrz
|
||||||
|
Tool Smith=Narzędziarz
|
||||||
|
Cleric=Kapłan
|
||||||
|
Nitwit=Głupiec
|
||||||
|
Protects you from death while wielding it=Chroni przed śmiercią gdy go trzymasz
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### OCELOT AND CAT
|
--################### OCELOT AND CAT
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### PARROT
|
--################### PARROT
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
mobs:register_mob("mobs_mc:pig", {
|
mobs:register_mob("mobs_mc:pig", {
|
||||||
description = S("Pig"),
|
description = S("Pig"),
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### POLARBEAR
|
--################### POLARBEAR
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
local rabbit = {
|
local rabbit = {
|
||||||
description = S("Rabbit"),
|
description = S("Rabbit"),
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### SHEEP
|
--################### SHEEP
|
||||||
|
@ -38,7 +38,7 @@ local rainbow_colors = {
|
||||||
"unicolor_red_violet"
|
"unicolor_red_violet"
|
||||||
}
|
}
|
||||||
|
|
||||||
if minetest.get_modpath("mcl_wool") ~= nil then
|
if minetest.get_modpath("mcl_wool") then
|
||||||
colors["unicolor_light_blue"] = { mobs_mc.items.wool_light_blue, "#5050FFD0" }
|
colors["unicolor_light_blue"] = { mobs_mc.items.wool_light_blue, "#5050FFD0" }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### SHULKER
|
--################### SHULKER
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
--################### SILVERFISH
|
--################### SILVERFISH
|
||||||
--###################
|
--###################
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
mobs:register_mob("mobs_mc:silverfish", {
|
mobs:register_mob("mobs_mc:silverfish", {
|
||||||
description = S("Silverfish"),
|
description = S("Silverfish"),
|
||||||
|
@ -61,7 +61,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then
|
||||||
description = "Stone Monster Egg",
|
description = "Stone Monster Egg",
|
||||||
tiles = {"default_stone.png"},
|
tiles = {"default_stone.png"},
|
||||||
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
|
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
|
||||||
drop = '',
|
drop = "",
|
||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
after_dig_node = spawn_silverfish,
|
after_dig_node = spawn_silverfish,
|
||||||
|
@ -72,7 +72,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then
|
||||||
tiles = {"default_cobble.png"},
|
tiles = {"default_cobble.png"},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
|
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
|
||||||
drop = '',
|
drop = "",
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
after_dig_node = spawn_silverfish,
|
after_dig_node = spawn_silverfish,
|
||||||
})
|
})
|
||||||
|
@ -82,7 +82,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then
|
||||||
tiles = {"default_mossycobble.png"},
|
tiles = {"default_mossycobble.png"},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
|
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
|
||||||
drop = '',
|
drop = "",
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
after_dig_node = spawn_silverfish,
|
after_dig_node = spawn_silverfish,
|
||||||
})
|
})
|
||||||
|
@ -94,7 +94,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then
|
||||||
tiles = {"default_stone_brick.png"},
|
tiles = {"default_stone_brick.png"},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
|
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
|
||||||
drop = '',
|
drop = "",
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
after_dig_node = spawn_silverfish,
|
after_dig_node = spawn_silverfish,
|
||||||
})
|
})
|
||||||
|
@ -104,7 +104,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then
|
||||||
tiles = {"default_stone_block.png"},
|
tiles = {"default_stone_block.png"},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
|
groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1},
|
||||||
drop = '',
|
drop = "",
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
after_dig_node = spawn_silverfish,
|
after_dig_node = spawn_silverfish,
|
||||||
})
|
})
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
local mod_bows = minetest.get_modpath("mcl_bows") ~= nil
|
local mod_bows = minetest.get_modpath("mcl_bows")
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### SKELETON
|
--################### SKELETON
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### WITHER SKELETON
|
--################### WITHER SKELETON
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
-- Returns a function that spawns children in a circle around pos.
|
-- Returns a function that spawns children in a circle around pos.
|
||||||
-- To be used as on_die callback.
|
-- To be used as on_die callback.
|
||||||
|
@ -41,10 +41,10 @@ local spawn_children_on_die = function(child_mob, children_count, spawn_distance
|
||||||
-- If mother was murdered, children attack the killer after 1 second
|
-- If mother was murdered, children attack the killer after 1 second
|
||||||
if self.state == "attack" then
|
if self.state == "attack" then
|
||||||
minetest.after(1.0, function(children, enemy)
|
minetest.after(1.0, function(children, enemy)
|
||||||
for c=1, #children do
|
for c = 1, #children do
|
||||||
local child = children[c]
|
local child = children[c]
|
||||||
local le = child:get_luaentity()
|
local le = child:get_luaentity()
|
||||||
if le ~= nil then
|
if le then
|
||||||
le.state = "attack"
|
le.state = "attack"
|
||||||
le.attack = enemy
|
le.attack = enemy
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,12 +3,12 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
local snow_trail_frequency = 0.5 -- Time in seconds for checking to add a new snow trail
|
local snow_trail_frequency = 0.5 -- Time in seconds for checking to add a new snow trail
|
||||||
|
|
||||||
local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false
|
local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false
|
||||||
local mod_throwing = minetest.get_modpath("mcl_throwing") ~= nil
|
local mod_throwing = minetest.get_modpath("mcl_throwing")
|
||||||
|
|
||||||
local gotten_texture = {
|
local gotten_texture = {
|
||||||
"mobs_mc_snowman.png",
|
"mobs_mc_snowman.png",
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### SPIDER
|
--################### SPIDER
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
--################### SQUID
|
--################### SQUID
|
||||||
--###################
|
--###################
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
mobs:register_mob("mobs_mc:squid", {
|
mobs:register_mob("mobs_mc:squid", {
|
||||||
description = S("Squid"),
|
description = S("Squid"),
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### VEX
|
--################### VEX
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
-- TODO: Internal inventory, pick up items, trade with other villagers
|
-- TODO: Internal inventory, pick up items, trade with other villagers
|
||||||
-- TODO: Farm stuff
|
-- TODO: Farm stuff
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
local N = function(s) return s end
|
local N = function(s) return s end
|
||||||
local F = minetest.formspec_escape
|
local F = minetest.formspec_escape
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### EVOKER
|
--################### EVOKER
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
local mod_bows = minetest.get_modpath("mcl_bows") ~= nil
|
local mod_bows = minetest.get_modpath("mcl_bows")
|
||||||
|
|
||||||
mobs:register_mob("mobs_mc:illusioner", {
|
mobs:register_mob("mobs_mc:illusioner", {
|
||||||
description = S("Illusioner"),
|
description = S("Illusioner"),
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### VINDICATOR
|
--################### VINDICATOR
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### ZOMBIE VILLAGER
|
--################### ZOMBIE VILLAGER
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### WITCH
|
--################### WITCH
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### WITHER
|
--################### WITHER
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
local default_walk_chance = 50
|
local default_walk_chance = 50
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### ZOMBIE
|
--################### ZOMBIE
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### ZOMBIE PIGMAN
|
--################### ZOMBIE PIGMAN
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
--[[
|
--[[
|
||||||
|
|
||||||
Copyright (C) 2016 - Auke Kok <sofar@foo-projects.org>
|
Copyright (C) 2016 - Auke Kok <sofar@foo-projects.org>
|
||||||
|
Adapted by MineClone2 contributors
|
||||||
|
|
||||||
"lightning" is free software; you can redistribute it and/or modify
|
"lightning" is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Lesser General Public License as
|
it under the terms of the GNU Lesser General Public License as
|
||||||
|
@ -9,7 +10,7 @@ of the license, or (at your option) any later version.
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local S = minetest.get_translator("lightning")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
local get_connected_players = minetest.get_connected_players
|
local get_connected_players = minetest.get_connected_players
|
||||||
local line_of_sight = minetest.line_of_sight
|
local line_of_sight = minetest.line_of_sight
|
||||||
|
@ -22,22 +23,22 @@ local add_entity = minetest.add_entity
|
||||||
local get_objects_inside_radius = minetest.get_objects_inside_radius
|
local get_objects_inside_radius = minetest.get_objects_inside_radius
|
||||||
local get_item_group = minetest.get_item_group
|
local get_item_group = minetest.get_item_group
|
||||||
|
|
||||||
lightning = {}
|
lightning = {
|
||||||
|
interval_low = 17,
|
||||||
lightning.interval_low = 17
|
interval_high = 503,
|
||||||
lightning.interval_high = 503
|
range_h = 100,
|
||||||
lightning.range_h = 100
|
range_v = 50,
|
||||||
lightning.range_v = 50
|
size = 100,
|
||||||
lightning.size = 100
|
-- disable this to stop lightning mod from striking
|
||||||
-- disable this to stop lightning mod from striking
|
auto = true,
|
||||||
lightning.auto = true
|
}
|
||||||
|
|
||||||
local rng = PcgRandom(32321123312123)
|
local rng = PcgRandom(32321123312123)
|
||||||
|
|
||||||
local ps = {}
|
local ps = {}
|
||||||
local ttl = -1
|
local ttl = -1
|
||||||
|
|
||||||
local revertsky = function(dtime)
|
local function revertsky(dtime)
|
||||||
if ttl == 0 then
|
if ttl == 0 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -96,7 +97,7 @@ end
|
||||||
-- lightning strike API
|
-- lightning strike API
|
||||||
-- * pos: optional, if not given a random pos will be chosen
|
-- * pos: optional, if not given a random pos will be chosen
|
||||||
-- * returns: bool - success if a strike happened
|
-- * returns: bool - success if a strike happened
|
||||||
lightning.strike = function(pos)
|
function lightning.strike(pos)
|
||||||
if lightning.auto then
|
if lightning.auto then
|
||||||
after(rng:next(lightning.interval_low, lightning.interval_high), lightning.strike)
|
after(rng:next(lightning.interval_low, lightning.interval_high), lightning.strike)
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
# textdomain: lightning
|
||||||
|
@1 was struck by lightning.=@1 została trafiona przez piorun.
|
||||||
|
Let lightning strike at the specified position or yourself=Pozwala by piorun uderzył we wskazaną pozycję lub ciebie
|
||||||
|
No position specified and unknown player=Nie wskazano pozycji i nieznany gracz
|
|
@ -1,4 +1,4 @@
|
||||||
local S = minetest.get_translator("mcl_void_damage")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
--local enable_damage = minetest.settings:get_bool("enable_damage")
|
--local enable_damage = minetest.settings:get_bool("enable_damage")
|
||||||
|
|
||||||
local pos_to_dim = mcl_worlds.pos_to_dimension
|
local pos_to_dim = mcl_worlds.pos_to_dimension
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
# textdomain: mcl_void_damage
|
||||||
|
The void is off-limits to you!=Otchłań jest poza twoim zasięgiem!
|
||||||
|
@1 fell into the endless void.=@1 spadła w bezkresną otchłań.
|
|
@ -1,4 +1,4 @@
|
||||||
local modpath = minetest.get_modpath("mcl_weather")
|
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||||
|
|
||||||
mcl_weather = {}
|
mcl_weather = {}
|
||||||
|
|
||||||
|
@ -12,6 +12,6 @@ dofile(modpath.."/snow.lua")
|
||||||
dofile(modpath.."/rain.lua")
|
dofile(modpath.."/rain.lua")
|
||||||
dofile(modpath.."/nether_dust.lua")
|
dofile(modpath.."/nether_dust.lua")
|
||||||
|
|
||||||
if minetest.get_modpath("lightning") ~= nil then
|
if minetest.get_modpath("lightning") then
|
||||||
dofile(modpath.."/thunder.lua")
|
dofile(modpath.."/thunder.lua")
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
# textdomain: mcl_weather
|
||||||
|
Gives ability to control weather=Daje możliwość kontrolowania pogody
|
||||||
|
Changes the weather to the specified parameter.=Zmienia pogodę na wskazany parametr
|
||||||
|
Error: No weather specified.=Błąd: nie wskazano pogody.
|
||||||
|
Error: Invalid parameters.=Błąd: nieprawidłowy parametr.
|
||||||
|
Error: Duration can't be less than 1 second.=Błąd: Czas trwania nie może być mniejszy niż 1 sekunda.
|
||||||
|
Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=Błąd: wskazano nieprawidłową pogodę. Użyj "clear", "rain", "snow" lub "thunder".
|
||||||
|
Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=Zmienia pomiędzy czystą pogodą i pogodą z opadami (losowo deszcz, burza lub śnieg)
|
|
@ -2,7 +2,7 @@ mcl_weather.nether_dust = {}
|
||||||
mcl_weather.nether_dust.particles_count = 99
|
mcl_weather.nether_dust.particles_count = 99
|
||||||
|
|
||||||
-- calculates coordinates and draw particles for Nether dust
|
-- calculates coordinates and draw particles for Nether dust
|
||||||
mcl_weather.nether_dust.add_dust_particles = function(player)
|
function mcl_weather.nether_dust.add_dust_particles(player)
|
||||||
for i=mcl_weather.nether_dust.particles_count, 1,-1 do
|
for i=mcl_weather.nether_dust.particles_count, 1,-1 do
|
||||||
local rpx, rpy, rpz = mcl_weather.get_random_pos_by_player_look_dir(player)
|
local rpx, rpy, rpz = mcl_weather.get_random_pos_by_player_look_dir(player)
|
||||||
minetest.add_particle({
|
minetest.add_particle({
|
||||||
|
|
|
@ -96,7 +96,7 @@ end
|
||||||
-- be sure to remove sound before removing player otherwise soundhandler reference will be lost.
|
-- be sure to remove sound before removing player otherwise soundhandler reference will be lost.
|
||||||
function mcl_weather.rain.remove_player(player)
|
function mcl_weather.rain.remove_player(player)
|
||||||
local player_meta = mcl_weather.players[player:get_player_name()]
|
local player_meta = mcl_weather.players[player:get_player_name()]
|
||||||
if player_meta ~= nil and player_meta.origin_sky ~= nil then
|
if player_meta and player_meta.origin_sky then
|
||||||
player:set_clouds({color="#FFF0F0E5"})
|
player:set_clouds({color="#FFF0F0E5"})
|
||||||
mcl_weather.players[player:get_player_name()] = nil
|
mcl_weather.players[player:get_player_name()] = nil
|
||||||
end
|
end
|
||||||
|
@ -120,12 +120,12 @@ end)
|
||||||
-- when player stay on 'edge' where sound should play and stop depending from random raindrop appearance.
|
-- when player stay on 'edge' where sound should play and stop depending from random raindrop appearance.
|
||||||
function mcl_weather.rain.update_sound(player)
|
function mcl_weather.rain.update_sound(player)
|
||||||
local player_meta = mcl_weather.players[player:get_player_name()]
|
local player_meta = mcl_weather.players[player:get_player_name()]
|
||||||
if player_meta ~= nil then
|
if player_meta then
|
||||||
if player_meta.sound_updated ~= nil and player_meta.sound_updated + 5 > minetest.get_gametime() then
|
if player_meta.sound_updated and player_meta.sound_updated + 5 > minetest.get_gametime() then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
if player_meta.sound_handler ~= nil then
|
if player_meta.sound_handler then
|
||||||
if mcl_weather.rain.last_rp_count == 0 then
|
if mcl_weather.rain.last_rp_count == 0 then
|
||||||
minetest.sound_fade(player_meta.sound_handler, -0.5, 0.0)
|
minetest.sound_fade(player_meta.sound_handler, -0.5, 0.0)
|
||||||
player_meta.sound_handler = nil
|
player_meta.sound_handler = nil
|
||||||
|
@ -141,7 +141,7 @@ end
|
||||||
-- rain sound removed from player.
|
-- rain sound removed from player.
|
||||||
function mcl_weather.rain.remove_sound(player)
|
function mcl_weather.rain.remove_sound(player)
|
||||||
local player_meta = mcl_weather.players[player:get_player_name()]
|
local player_meta = mcl_weather.players[player:get_player_name()]
|
||||||
if player_meta ~= nil and player_meta.sound_handler ~= nil then
|
if player_meta and player_meta.sound_handler then
|
||||||
minetest.sound_fade(player_meta.sound_handler, -0.5, 0.0)
|
minetest.sound_fade(player_meta.sound_handler, -0.5, 0.0)
|
||||||
player_meta.sound_handler = nil
|
player_meta.sound_handler = nil
|
||||||
player_meta.sound_updated = nil
|
player_meta.sound_updated = nil
|
||||||
|
|
|
@ -235,7 +235,7 @@ minetest.register_globalstep(function(dtime)
|
||||||
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local initsky = function(player)
|
local function initsky(player)
|
||||||
if (mcl_weather.skycolor.active) then
|
if (mcl_weather.skycolor.active) then
|
||||||
mcl_weather.skycolor.force_update = true
|
mcl_weather.skycolor.force_update = true
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,7 +6,7 @@ mcl_weather.snow.particles_count = 15
|
||||||
mcl_weather.snow.init_done = false
|
mcl_weather.snow.init_done = false
|
||||||
|
|
||||||
-- calculates coordinates and draw particles for snow weather
|
-- calculates coordinates and draw particles for snow weather
|
||||||
mcl_weather.snow.add_snow_particles = function(player)
|
function mcl_weather.snow.add_snow_particles(player)
|
||||||
mcl_weather.rain.last_rp_count = 0
|
mcl_weather.rain.last_rp_count = 0
|
||||||
for i=mcl_weather.snow.particles_count, 1,-1 do
|
for i=mcl_weather.snow.particles_count, 1,-1 do
|
||||||
local random_pos_x, _, random_pos_z = mcl_weather.get_random_pos_by_player_look_dir(player)
|
local random_pos_x, _, random_pos_z = mcl_weather.get_random_pos_by_player_look_dir(player)
|
||||||
|
@ -30,7 +30,7 @@ mcl_weather.snow.add_snow_particles = function(player)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
mcl_weather.snow.set_sky_box = function()
|
function mcl_weather.snow.set_sky_box()
|
||||||
mcl_weather.skycolor.add_layer(
|
mcl_weather.skycolor.add_layer(
|
||||||
"weather-pack-snow-sky",
|
"weather-pack-snow-sky",
|
||||||
{{r=0, g=0, b=0},
|
{{r=0, g=0, b=0},
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
local S = minetest.get_translator("mcl_weather")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
local math = math
|
local math = math
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ mcl_weather.reg_weathers["none"] = {
|
||||||
|
|
||||||
local storage = minetest.get_mod_storage()
|
local storage = minetest.get_mod_storage()
|
||||||
-- Save weather into mod storage, so it can be loaded after restarting the server
|
-- Save weather into mod storage, so it can be loaded after restarting the server
|
||||||
local save_weather = function()
|
local function save_weather()
|
||||||
if not mcl_weather.end_time then return end
|
if not mcl_weather.end_time then return end
|
||||||
storage:set_string("mcl_weather_state", mcl_weather.state)
|
storage:set_string("mcl_weather_state", mcl_weather.state)
|
||||||
storage:set_int("mcl_weather_end_time", mcl_weather.end_time)
|
storage:set_int("mcl_weather_end_time", mcl_weather.end_time)
|
||||||
|
@ -47,9 +47,9 @@ local save_weather = function()
|
||||||
end
|
end
|
||||||
minetest.register_on_shutdown(save_weather)
|
minetest.register_on_shutdown(save_weather)
|
||||||
|
|
||||||
mcl_weather.get_rand_end_time = function(min_duration, max_duration)
|
function mcl_weather.get_rand_end_time(min_duration, max_duration)
|
||||||
local r
|
local r
|
||||||
if min_duration ~= nil and max_duration ~= nil then
|
if min_duration and max_duration then
|
||||||
r = math.random(min_duration, max_duration)
|
r = math.random(min_duration, max_duration)
|
||||||
else
|
else
|
||||||
r = math.random(mcl_weather.min_duration, mcl_weather.max_duration)
|
r = math.random(mcl_weather.min_duration, mcl_weather.max_duration)
|
||||||
|
@ -57,7 +57,7 @@ mcl_weather.get_rand_end_time = function(min_duration, max_duration)
|
||||||
return minetest.get_gametime() + r
|
return minetest.get_gametime() + r
|
||||||
end
|
end
|
||||||
|
|
||||||
mcl_weather.get_current_light_factor = function()
|
function mcl_weather.get_current_light_factor()
|
||||||
if mcl_weather.state == "none" then
|
if mcl_weather.state == "none" then
|
||||||
return nil
|
return nil
|
||||||
else
|
else
|
||||||
|
@ -68,7 +68,7 @@ end
|
||||||
-- Returns true if pos is outdoor.
|
-- Returns true if pos is outdoor.
|
||||||
-- Outdoor is defined as any node in the Overworld under open sky.
|
-- Outdoor is defined as any node in the Overworld under open sky.
|
||||||
-- FIXME: Nodes below glass also count as “outdoor”, this should not be the case.
|
-- FIXME: Nodes below glass also count as “outdoor”, this should not be the case.
|
||||||
mcl_weather.is_outdoor = function(pos)
|
function mcl_weather.is_outdoor(pos)
|
||||||
local cpos = {x=pos.x, y=pos.y+1, z=pos.z}
|
local cpos = {x=pos.x, y=pos.y+1, z=pos.z}
|
||||||
local dim = mcl_worlds.pos_to_dimension(cpos)
|
local dim = mcl_worlds.pos_to_dimension(cpos)
|
||||||
if minetest.get_node_light(cpos, 0.5) == 15 and dim == "overworld" then
|
if minetest.get_node_light(cpos, 0.5) == 15 and dim == "overworld" then
|
||||||
|
@ -79,7 +79,7 @@ end
|
||||||
|
|
||||||
-- checks if player is undewater. This is needed in order to
|
-- checks if player is undewater. This is needed in order to
|
||||||
-- turn off weather particles generation.
|
-- turn off weather particles generation.
|
||||||
mcl_weather.is_underwater = function(player)
|
function mcl_weather.is_underwater(player)
|
||||||
local ppos = player:get_pos()
|
local ppos = player:get_pos()
|
||||||
local offset = player:get_eye_offset()
|
local offset = player:get_eye_offset()
|
||||||
local player_eye_pos = {x = ppos.x + offset.x,
|
local player_eye_pos = {x = ppos.x + offset.x,
|
||||||
|
@ -94,7 +94,7 @@ end
|
||||||
|
|
||||||
-- trying to locate position for particles by player look direction for performance reason.
|
-- trying to locate position for particles by player look direction for performance reason.
|
||||||
-- it is costly to generate many particles around player so goal is focus mainly on front view.
|
-- it is costly to generate many particles around player so goal is focus mainly on front view.
|
||||||
mcl_weather.get_random_pos_by_player_look_dir = function(player)
|
function mcl_weather.get_random_pos_by_player_look_dir(player)
|
||||||
local look_dir = player:get_look_dir()
|
local look_dir = player:get_look_dir()
|
||||||
local player_pos = player:get_pos()
|
local player_pos = player:get_pos()
|
||||||
|
|
||||||
|
@ -123,6 +123,7 @@ mcl_weather.get_random_pos_by_player_look_dir = function(player)
|
||||||
end
|
end
|
||||||
|
|
||||||
local t, wci = 0, mcl_weather.check_interval
|
local t, wci = 0, mcl_weather.check_interval
|
||||||
|
|
||||||
minetest.register_globalstep(function(dtime)
|
minetest.register_globalstep(function(dtime)
|
||||||
t = t + dtime
|
t = t + dtime
|
||||||
if t < wci then return end
|
if t < wci then return end
|
||||||
|
@ -146,7 +147,7 @@ minetest.register_globalstep(function(dtime)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Sets random weather (which could be 'none' (no weather)).
|
-- Sets random weather (which could be 'none' (no weather)).
|
||||||
mcl_weather.set_random_weather = function(weather_name, weather_meta)
|
function mcl_weather.set_random_weather(weather_name, weather_meta)
|
||||||
if weather_meta == nil then return end
|
if weather_meta == nil then return end
|
||||||
local transitions = weather_meta.transitions
|
local transitions = weather_meta.transitions
|
||||||
local random_roll = math.random(0,100)
|
local random_roll = math.random(0,100)
|
||||||
|
@ -166,11 +167,11 @@ end
|
||||||
-- * explicit_end_time is OPTIONAL. If specified, explicitly set the
|
-- * explicit_end_time is OPTIONAL. If specified, explicitly set the
|
||||||
-- gametime (minetest.get_gametime) in which the weather ends.
|
-- gametime (minetest.get_gametime) in which the weather ends.
|
||||||
-- * changer is OPTIONAL, for logging purposes.
|
-- * changer is OPTIONAL, for logging purposes.
|
||||||
mcl_weather.change_weather = function(new_weather, explicit_end_time, changer_name)
|
function mcl_weather.change_weather(new_weather, explicit_end_time, changer_name)
|
||||||
local changer_name = changer_name or debug.getinfo(2).name.."()"
|
local changer_name = changer_name or debug.getinfo(2).name.."()"
|
||||||
|
|
||||||
if (mcl_weather.reg_weathers ~= nil and mcl_weather.reg_weathers[new_weather] ~= nil) then
|
if (mcl_weather.reg_weathers and mcl_weather.reg_weathers[new_weather]) then
|
||||||
if (mcl_weather.state ~= nil and mcl_weather.reg_weathers[mcl_weather.state] ~= nil) then
|
if (mcl_weather.state and mcl_weather.reg_weathers[mcl_weather.state]) then
|
||||||
mcl_weather.reg_weathers[mcl_weather.state].clear()
|
mcl_weather.reg_weathers[mcl_weather.state].clear()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -199,7 +200,7 @@ mcl_weather.change_weather = function(new_weather, explicit_end_time, changer_na
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
mcl_weather.get_weather = function()
|
function mcl_weather.get_weather()
|
||||||
return mcl_weather.state
|
return mcl_weather.state
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -268,12 +269,12 @@ minetest.register_chatcommand("toggledownfall", {
|
||||||
-- Configuration setting which allows user to disable ABM for weathers (if they use it).
|
-- Configuration setting which allows user to disable ABM for weathers (if they use it).
|
||||||
-- Weather mods expected to be use this flag before registering ABM.
|
-- Weather mods expected to be use this flag before registering ABM.
|
||||||
local weather_allow_abm = minetest.settings:get_bool("weather_allow_abm")
|
local weather_allow_abm = minetest.settings:get_bool("weather_allow_abm")
|
||||||
if weather_allow_abm ~= nil and weather_allow_abm == false then
|
if weather_allow_abm == false then
|
||||||
mcl_weather.allow_abm = false
|
mcl_weather.allow_abm = false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local load_weather = function()
|
local function load_weather()
|
||||||
local weather = storage:get_string("mcl_weather_state")
|
local weather = storage:get_string("mcl_weather_state")
|
||||||
if weather and weather ~= "" then
|
if weather and weather ~= "" then
|
||||||
mcl_weather.state = weather
|
mcl_weather.state = weather
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
local S = minetest.get_translator("doc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
local F = function(f) return minetest.formspec_escape(S(f)) end
|
local F = function(f) return minetest.formspec_escape(S(f)) end
|
||||||
|
|
||||||
|
local mod_central_messages = minetest.get_modpath("central_message")
|
||||||
|
local mod_inventory_plus = minetest.get_modpath("inventory_plus")
|
||||||
|
|
||||||
|
local math = math
|
||||||
local colorize = minetest.colorize
|
local colorize = minetest.colorize
|
||||||
|
|
||||||
doc = {}
|
doc = {}
|
||||||
|
@ -63,7 +67,7 @@ local set_category_order_was_called = false
|
||||||
local function get_entry(category_id, entry_id)
|
local function get_entry(category_id, entry_id)
|
||||||
local category = doc.data.categories[category_id]
|
local category = doc.data.categories[category_id]
|
||||||
local entry
|
local entry
|
||||||
if category ~= nil then
|
if category then
|
||||||
entry = category.entries[entry_id]
|
entry = category.entries[entry_id]
|
||||||
end
|
end
|
||||||
if category == nil or entry == nil then
|
if category == nil or entry == nil then
|
||||||
|
@ -93,7 +97,7 @@ end
|
||||||
|
|
||||||
-- Add a new category
|
-- Add a new category
|
||||||
function doc.add_category(id, def)
|
function doc.add_category(id, def)
|
||||||
if doc.data.categories[id] == nil and id ~= nil then
|
if doc.data.categories[id] == nil and id then
|
||||||
doc.data.categories[id] = {}
|
doc.data.categories[id] = {}
|
||||||
doc.data.categories[id].entries = {}
|
doc.data.categories[id].entries = {}
|
||||||
doc.data.categories[id].entry_count = 0
|
doc.data.categories[id].entry_count = 0
|
||||||
|
@ -123,7 +127,7 @@ end
|
||||||
-- Add a new entry
|
-- Add a new entry
|
||||||
function doc.add_entry(category_id, entry_id, def)
|
function doc.add_entry(category_id, entry_id, def)
|
||||||
local cat = doc.data.categories[category_id]
|
local cat = doc.data.categories[category_id]
|
||||||
if cat ~= nil then
|
if cat then
|
||||||
local hidden = def.hidden or (def.hidden == nil and cat.def.hide_entries_by_default)
|
local hidden = def.hidden or (def.hidden == nil and cat.def.hide_entries_by_default)
|
||||||
if hidden then
|
if hidden then
|
||||||
cat.hidden_count = cat.hidden_count + 1
|
cat.hidden_count = cat.hidden_count + 1
|
||||||
|
@ -177,7 +181,7 @@ function doc.mark_entry_as_revealed(playername, category_id, entry_id)
|
||||||
doc.data.players[playername].entry_textlist_needs_updating = true
|
doc.data.players[playername].entry_textlist_needs_updating = true
|
||||||
-- Notify player of entry revelation
|
-- Notify player of entry revelation
|
||||||
if doc.data.players[playername].stored_data.notify_on_reveal == true then
|
if doc.data.players[playername].stored_data.notify_on_reveal == true then
|
||||||
if minetest.get_modpath("central_message") ~= nil then
|
if mod_central_messages then
|
||||||
local cat = doc.data.categories[category_id]
|
local cat = doc.data.categories[category_id]
|
||||||
cmsg.push_message_player(minetest.get_player_by_name(playername), S("New help entry unlocked: @1 > @2", cat.def.name, entry.name))
|
cmsg.push_message_player(minetest.get_player_by_name(playername), S("New help entry unlocked: @1 > @2", cat.def.name, entry.name))
|
||||||
end
|
end
|
||||||
|
@ -224,7 +228,7 @@ function doc.mark_all_entries_as_revealed(playername)
|
||||||
msg = S("All help entries are already revealed.")
|
msg = S("All help entries are already revealed.")
|
||||||
end
|
end
|
||||||
-- Notify
|
-- Notify
|
||||||
if minetest.get_modpath("central_message") ~= nil then
|
if mod_central_messages then
|
||||||
cmsg.push_message_player(minetest.get_player_by_name(playername), msg)
|
cmsg.push_message_player(minetest.get_player_by_name(playername), msg)
|
||||||
else
|
else
|
||||||
minetest.chat_send_player(playername, msg)
|
minetest.chat_send_player(playername, msg)
|
||||||
|
@ -427,7 +431,7 @@ end
|
||||||
-- Returns the currently viewed entry and/or category of the player
|
-- Returns the currently viewed entry and/or category of the player
|
||||||
function doc.get_selection(playername)
|
function doc.get_selection(playername)
|
||||||
local playerdata = doc.data.players[playername]
|
local playerdata = doc.data.players[playername]
|
||||||
if playerdata ~= nil then
|
if playerdata then
|
||||||
local cat = playerdata.category
|
local cat = playerdata.category
|
||||||
if cat then
|
if cat then
|
||||||
local entry = playerdata.entry
|
local entry = playerdata.entry
|
||||||
|
@ -448,18 +452,18 @@ end
|
||||||
doc.entry_builders = {}
|
doc.entry_builders = {}
|
||||||
|
|
||||||
-- Scrollable freeform text
|
-- Scrollable freeform text
|
||||||
doc.entry_builders.text = function(data)
|
function doc.entry_builders.text(data)
|
||||||
local formstring = doc.widgets.text(data, doc.FORMSPEC.ENTRY_START_X, doc.FORMSPEC.ENTRY_START_Y, doc.FORMSPEC.ENTRY_WIDTH - 0.4, doc.FORMSPEC.ENTRY_HEIGHT)
|
local formstring = doc.widgets.text(data, doc.FORMSPEC.ENTRY_START_X, doc.FORMSPEC.ENTRY_START_Y, doc.FORMSPEC.ENTRY_WIDTH - 0.4, doc.FORMSPEC.ENTRY_HEIGHT)
|
||||||
return formstring
|
return formstring
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Scrollable freeform text with an optional standard gallery (3 rows, 3:2 aspect ratio)
|
-- Scrollable freeform text with an optional standard gallery (3 rows, 3:2 aspect ratio)
|
||||||
doc.entry_builders.text_and_gallery = function(data, playername)
|
function doc.entry_builders.text_and_gallery(data, playername)
|
||||||
-- How much height the image gallery “steals” from the text widget
|
-- How much height the image gallery “steals” from the text widget
|
||||||
local stolen_height = 0
|
local stolen_height = 0
|
||||||
local formstring = ""
|
local formstring = ""
|
||||||
-- Only add the gallery if images are in the data, otherwise, the text widget gets all of the space
|
-- Only add the gallery if images are in the data, otherwise, the text widget gets all of the space
|
||||||
if data.images ~= nil then
|
if data.images then
|
||||||
local gallery
|
local gallery
|
||||||
gallery, stolen_height = doc.widgets.gallery(data.images, playername, nil, doc.FORMSPEC.ENTRY_END_Y + 0.2, nil, nil, nil, nil, false)
|
gallery, stolen_height = doc.widgets.gallery(data.images, playername, nil, doc.FORMSPEC.ENTRY_END_Y + 0.2, nil, nil, nil, nil, false)
|
||||||
formstring = formstring .. gallery
|
formstring = formstring .. gallery
|
||||||
|
@ -476,7 +480,7 @@ end
|
||||||
doc.widgets = {}
|
doc.widgets = {}
|
||||||
|
|
||||||
-- Scrollable freeform text
|
-- Scrollable freeform text
|
||||||
doc.widgets.text = function(data, x, y, width, height)
|
function doc.widgets.text(data, x, y, width, height)
|
||||||
if x == nil then
|
if x == nil then
|
||||||
x = doc.FORMSPEC.ENTRY_START_X
|
x = doc.FORMSPEC.ENTRY_START_X
|
||||||
end
|
end
|
||||||
|
@ -502,7 +506,7 @@ end
|
||||||
|
|
||||||
-- Image gallery
|
-- Image gallery
|
||||||
-- Currently, only one gallery per entry is supported. TODO: Add support for multiple galleries in an entry (low priority)
|
-- Currently, only one gallery per entry is supported. TODO: Add support for multiple galleries in an entry (low priority)
|
||||||
doc.widgets.gallery = function(imagedata, playername, x, y, aspect_ratio, width, rows, align_left, align_top)
|
function doc.widgets.gallery(imagedata, playername, x, y, aspect_ratio, width, rows, align_left, align_top)
|
||||||
if playername == nil then return nil end -- emergency exit
|
if playername == nil then return nil end -- emergency exit
|
||||||
|
|
||||||
local formstring = ""
|
local formstring = ""
|
||||||
|
@ -591,7 +595,7 @@ doc.widgets.gallery = function(imagedata, playername, x, y, aspect_ratio, width,
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Direct formspec
|
-- Direct formspec
|
||||||
doc.entry_builders.formspec = function(data)
|
function doc.entry_builders.formspec(data)
|
||||||
return data
|
return data
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -605,7 +609,7 @@ do
|
||||||
minetest.log("action", "[doc] doc.mt opened.")
|
minetest.log("action", "[doc] doc.mt opened.")
|
||||||
local string = file:read()
|
local string = file:read()
|
||||||
io.close(file)
|
io.close(file)
|
||||||
if(string ~= nil) then
|
if string then
|
||||||
local savetable = minetest.deserialize(string)
|
local savetable = minetest.deserialize(string)
|
||||||
for name, players_stored_data in pairs(savetable.players_stored_data) do
|
for name, players_stored_data in pairs(savetable.players_stored_data) do
|
||||||
doc.data.players[name] = {}
|
doc.data.players[name] = {}
|
||||||
|
@ -672,13 +676,13 @@ function doc.formspec_main(playername)
|
||||||
local data = doc.data.categories[id]
|
local data = doc.data.categories[id]
|
||||||
local bw = doc.FORMSPEC.WIDTH / math.floor(((doc.data.category_count-1) / CATEGORYFIELDSIZE.HEIGHT)+1)
|
local bw = doc.FORMSPEC.WIDTH / math.floor(((doc.data.category_count-1) / CATEGORYFIELDSIZE.HEIGHT)+1)
|
||||||
-- Skip categories which do not exist
|
-- Skip categories which do not exist
|
||||||
if data ~= nil then
|
if data then
|
||||||
-- Category buton
|
-- Category buton
|
||||||
local button = "button["..((x-1)*bw)..","..y..";"..bw..",1;doc_button_category_"..id..";"..minetest.formspec_escape(data.def.name).."]"
|
local button = "button["..((x-1)*bw)..","..y..";"..bw..",1;doc_button_category_"..id..";"..minetest.formspec_escape(data.def.name).."]"
|
||||||
local tooltip = ""
|
local tooltip = ""
|
||||||
-- Optional description
|
-- Optional description
|
||||||
if data.def.description ~= nil then
|
if data.def.description then
|
||||||
tooltip = "tooltip[doc_button_category_"..id..";"..minetest.formspec_escape(data.def.description).."]"
|
tooltip = "tooltip[doc_button_category_"..id..";"..minetest.formspec_escape(data.def.description).."]"
|
||||||
end
|
end
|
||||||
formstring = formstring .. button .. tooltip
|
formstring = formstring .. button .. tooltip
|
||||||
y = y + 1
|
y = y + 1
|
||||||
|
@ -701,7 +705,7 @@ function doc.formspec_main(playername)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local sel = doc.data.categories[doc.data.players[playername].category]
|
local sel = doc.data.categories[doc.data.players[playername].category]
|
||||||
if sel ~= nil then
|
if sel then
|
||||||
formstring = formstring .. ";"
|
formstring = formstring .. ";"
|
||||||
formstring = formstring .. doc.data.categories[doc.data.players[playername].category].order_position
|
formstring = formstring .. doc.data.categories[doc.data.players[playername].category].order_position
|
||||||
end
|
end
|
||||||
|
@ -711,7 +715,7 @@ function doc.formspec_main(playername)
|
||||||
notify_checkbox_y = doc.FORMSPEC.HEIGHT-1
|
notify_checkbox_y = doc.FORMSPEC.HEIGHT-1
|
||||||
end
|
end
|
||||||
local text
|
local text
|
||||||
if minetest.get_modpath("central_message") then
|
if mod_central_messages then
|
||||||
text = F("Notify me when new help is available")
|
text = F("Notify me when new help is available")
|
||||||
else
|
else
|
||||||
text = F("Play notification sound when new help is available")
|
text = F("Play notification sound when new help is available")
|
||||||
|
@ -802,7 +806,7 @@ function doc.get_sorted_entry_names(cid)
|
||||||
local cat = doc.data.categories[cid]
|
local cat = doc.data.categories[cid]
|
||||||
local used_eids = {}
|
local used_eids = {}
|
||||||
-- Helper function to extract the entry ID out of the output table
|
-- Helper function to extract the entry ID out of the output table
|
||||||
local extract = function(entry_table)
|
local function extract(entry_table)
|
||||||
local eids = {}
|
local eids = {}
|
||||||
for k,v in pairs(entry_table) do
|
for k,v in pairs(entry_table) do
|
||||||
local eid = v.eid
|
local eid = v.eid
|
||||||
|
@ -944,7 +948,7 @@ function doc.process_form(player,formname,fields)
|
||||||
local playername = player:get_player_name()
|
local playername = player:get_player_name()
|
||||||
--[[ process clicks on the tab header ]]
|
--[[ process clicks on the tab header ]]
|
||||||
if(formname == "doc:main" or formname == "doc:category" or formname == "doc:entry") then
|
if(formname == "doc:main" or formname == "doc:category" or formname == "doc:entry") then
|
||||||
if fields.doc_header ~= nil then
|
if fields.doc_header then
|
||||||
local tab = tonumber(fields.doc_header)
|
local tab = tonumber(fields.doc_header)
|
||||||
local formspec, subformname, contents
|
local formspec, subformname, contents
|
||||||
local cid, eid
|
local cid, eid
|
||||||
|
@ -959,7 +963,7 @@ function doc.process_form(player,formname,fields)
|
||||||
elseif(tab==3) then
|
elseif(tab==3) then
|
||||||
doc.data.players[playername].galidx = 1
|
doc.data.players[playername].galidx = 1
|
||||||
contents = doc.formspec_entry(cid, eid, playername)
|
contents = doc.formspec_entry(cid, eid, playername)
|
||||||
if cid ~= nil and eid ~= nil then
|
if cid and eid then
|
||||||
doc.mark_entry_as_viewed(playername, cid, eid)
|
doc.mark_entry_as_viewed(playername, cid, eid)
|
||||||
end
|
end
|
||||||
subformname = "entry"
|
subformname = "entry"
|
||||||
|
@ -984,7 +988,7 @@ function doc.process_form(player,formname,fields)
|
||||||
if fields["doc_mainlist"] then
|
if fields["doc_mainlist"] then
|
||||||
local event = minetest.explode_textlist_event(fields["doc_mainlist"])
|
local event = minetest.explode_textlist_event(fields["doc_mainlist"])
|
||||||
local cid = doc.data.category_order[event.index]
|
local cid = doc.data.category_order[event.index]
|
||||||
if cid ~= nil then
|
if cid then
|
||||||
if event.type == "CHG" then
|
if event.type == "CHG" then
|
||||||
doc.data.players[playername].catsel = nil
|
doc.data.players[playername].catsel = nil
|
||||||
doc.data.players[playername].category = cid
|
doc.data.players[playername].category = cid
|
||||||
|
@ -1014,10 +1018,10 @@ function doc.process_form(player,formname,fields)
|
||||||
elseif(formname == "doc:category") then
|
elseif(formname == "doc:category") then
|
||||||
if fields["doc_button_goto_entry"] then
|
if fields["doc_button_goto_entry"] then
|
||||||
local cid = doc.data.players[playername].category
|
local cid = doc.data.players[playername].category
|
||||||
if cid ~= nil then
|
if cid then
|
||||||
local eid = nil
|
local eid = nil
|
||||||
local eids, catsel = doc.data.players[playername].entry_ids, doc.data.players[playername].catsel
|
local eids, catsel = doc.data.players[playername].entry_ids, doc.data.players[playername].catsel
|
||||||
if eids ~= nil and catsel ~= nil then
|
if eids and catsel then
|
||||||
eid = eids[catsel]
|
eid = eids[catsel]
|
||||||
end
|
end
|
||||||
doc.data.players[playername].galidx = 1
|
doc.data.players[playername].galidx = 1
|
||||||
|
@ -1040,7 +1044,7 @@ function doc.process_form(player,formname,fields)
|
||||||
local cid = doc.data.players[playername].category
|
local cid = doc.data.players[playername].category
|
||||||
local eid = nil
|
local eid = nil
|
||||||
local eids, catsel = doc.data.players[playername].entry_ids, event.index
|
local eids, catsel = doc.data.players[playername].entry_ids, event.index
|
||||||
if eids ~= nil and catsel ~= nil then
|
if eids and catsel then
|
||||||
eid = eids[catsel]
|
eid = eids[catsel]
|
||||||
end
|
end
|
||||||
doc.mark_entry_as_viewed(playername, cid, eid)
|
doc.mark_entry_as_viewed(playername, cid, eid)
|
||||||
|
@ -1101,7 +1105,7 @@ function doc.process_form(player,formname,fields)
|
||||||
minetest.show_formspec(playername, "doc:entry", formspec)
|
minetest.show_formspec(playername, "doc:entry", formspec)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if fields["doc_inventory_plus"] and minetest.get_modpath("inventory_plus") then
|
if fields["doc_inventory_plus"] and mod_inventory_plus then
|
||||||
doc.show_doc(playername)
|
doc.show_doc(playername)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -1169,18 +1173,18 @@ minetest.register_on_joinplayer(function(player)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Add button for Inventory++
|
-- Add button for Inventory++
|
||||||
if minetest.get_modpath("inventory_plus") ~= nil then
|
if mod_inventory_plus then
|
||||||
inventory_plus.register_button(player, "doc_inventory_plus", S("Help"))
|
inventory_plus.register_button(player, "doc_inventory_plus", S("Help"))
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
---[[ Add buttons for inventory mods ]]
|
---[[ Add buttons for inventory mods ]]
|
||||||
local button_action = function(player)
|
local function button_action(player)
|
||||||
doc.show_doc(player:get_player_name())
|
doc.show_doc(player:get_player_name())
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Unified Inventory
|
-- Unified Inventory
|
||||||
if minetest.get_modpath("unified_inventory") ~= nil then
|
if minetest.get_modpath("unified_inventory") then
|
||||||
unified_inventory.register_button("doc", {
|
unified_inventory.register_button("doc", {
|
||||||
type = "image",
|
type = "image",
|
||||||
image = "doc_button_icon_hires.png",
|
image = "doc_button_icon_hires.png",
|
||||||
|
@ -1190,7 +1194,7 @@ if minetest.get_modpath("unified_inventory") ~= nil then
|
||||||
end
|
end
|
||||||
|
|
||||||
-- sfinv_buttons
|
-- sfinv_buttons
|
||||||
if minetest.get_modpath("sfinv_buttons") ~= nil then
|
if minetest.get_modpath("sfinv_buttons") then
|
||||||
sfinv_buttons.register_button("doc", {
|
sfinv_buttons.register_button("doc", {
|
||||||
image = "doc_button_icon_lores.png",
|
image = "doc_button_icon_lores.png",
|
||||||
tooltip = S("Collection of help texts"),
|
tooltip = S("Collection of help texts"),
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
# textdomain:doc
|
||||||
|
<=<
|
||||||
|
>=>
|
||||||
|
Access to the requested entry has been denied; this entry is secret. You may unlock access by progressing in the game. Figure out on your own how to unlock this entry.=Brak dostępu do zażądanego wpisu; ten wpis jest tajemnicą. Możesz odblokować do niego dostęp przez robienie postępów w grze. Wymyśl jak go odblokować.
|
||||||
|
All entries read.=Wszystkie wpisy przeczytane.
|
||||||
|
All help entries revealed!=Wszystkie wpisy pomocnicze odkryte!
|
||||||
|
All help entries are already revealed.=Wszystkie wpisy pomocnicze są już odkryte.
|
||||||
|
Allows you to reveal all hidden help entries with /help_reveal=Pozwala odkryć wszystkie wpisy pomocnicze przy użyciu /help_reveal
|
||||||
|
Category list=Lista kategorii
|
||||||
|
Currently all entries in this category are hidden from you.=Aktualnie wszystkie wpisy w tej kategorii są przed tobą ukryte.
|
||||||
|
Unlock new entries by progressing in the game.=Odblokuj nowe wpisy przez robienie postępów w grze.
|
||||||
|
Help=Pomoc
|
||||||
|
Entry=Wpis
|
||||||
|
Entry list=Lista wpisów
|
||||||
|
Error: Access denied.=Błąd: Odmowa dostępu.
|
||||||
|
Error: No help available.=Błąd: Brak dostępnej pomocy.
|
||||||
|
Go to category list=Idź do listy kategorii
|
||||||
|
Go to entry list=Idź do listy wpisów
|
||||||
|
Help > @1=Pomoc > @1
|
||||||
|
Help > @1 > @2=Pomoc > @1 > @2
|
||||||
|
Help > @1 > (No Entry)=Pomoc > @1 > (Brak wpisu)
|
||||||
|
Help > (No Category)=Pomoc > (Brak kategorii)
|
||||||
|
Hidden entries: @1=Ukryte wpisy: @1
|
||||||
|
Nameless entry (@1)=Nienazwany wpis (@1)
|
||||||
|
New entries: @1=Nowe wpisy: @1
|
||||||
|
New help entry unlocked: @1 > @2=Nowy wpis pomocniczy odblokowany: @1 > @2
|
||||||
|
No categories have been registered, but they are required to provide help.=Nie zarejestrowano żadnych kategorii, ale są one wymagane do uzyskania pomocy.
|
||||||
|
The Documentation System [doc] does not come with help contents on its own, it needs additional mods to add help content. Please make sure such mods are enabled on for this world, and try again.=System dokumentacji [doc] nie ma sam z siebie żadnej zawartości, potrzebuje dodatkowych modów, które dodadzą zawartość.
|
||||||
|
Number of entries: @1=Liczba wpisów: @1
|
||||||
|
OK=OK
|
||||||
|
Open a window providing help entries about Minetest and more=Otwórz okno aby zobaczyć wpisy pomocnicze na temat Minetest i innych rzeczy
|
||||||
|
Please select a category you wish to learn more about:=Wybierz kategorię o której chciałbyś się więcej dowiedzieć:
|
||||||
|
Recommended mods: doc_basics, doc_items, doc_identifier, doc_encyclopedia.=Rekomendowane mody: doc_basics, doc_items, doc_identifier, doc_encyclopedia.
|
||||||
|
Reveal all hidden help entries to you=Odkryj wszystkie ukryte wpisy pomocnicze
|
||||||
|
Show entry=Pokaż wpis
|
||||||
|
Show category=Pokaż kategorię
|
||||||
|
Show next entry=Pokaż następny wpis
|
||||||
|
Show previous entry=Pokaż poprzedni wpis
|
||||||
|
This category does not have any entries.=W tej kategorii nie ma żadnych wpisów.
|
||||||
|
This category has the following entries:=W tej kategorii są następujące wpisy:
|
||||||
|
This category is empty.=Ta kategoria jest pusta.
|
||||||
|
This is the help.=To jest pomoc.
|
||||||
|
You haven't chosen a category yet. Please choose one in the category list first.=Nie wybrano żadnej kategorii. Proszę wybrać jedną z listy kategorii.
|
||||||
|
You haven't chosen an entry yet. Please choose one in the entry list first.=Nie wybrano wpisu. Proszę wybrać jeden z listy wpisów.
|
||||||
|
Collection of help texts=Kolekcja tekstów pomocniczych.
|
||||||
|
Notify me when new help is available=Powiadom mnie gdy nowa pomoc jest dostępna.
|
||||||
|
Play notification sound when new help is available=Odegraj dźwięk powiadomienia gdy nowa pomoc jest dostępna
|
||||||
|
Show previous image=Pokaż poprzedni obrazek
|
||||||
|
Show previous gallery page=Pokaż poprzednią stronę galerii
|
||||||
|
Show next image=Pokaż następny obrazek
|
||||||
|
Show next gallery page=Pokaż następną stronę galerii
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
local S = minetest.get_translator("doc_identifier")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
|
local mod_doc_basics = minetest.get_modpath("doc_basics")
|
||||||
|
|
||||||
local doc_identifier = {}
|
local doc_identifier = {}
|
||||||
|
|
||||||
|
@ -6,15 +8,16 @@ doc_identifier.registered_objects = {}
|
||||||
|
|
||||||
-- API
|
-- API
|
||||||
doc.sub.identifier = {}
|
doc.sub.identifier = {}
|
||||||
doc.sub.identifier.register_object = function(object_name, category_id, entry_id)
|
|
||||||
|
function doc.sub.identifier.register_object(object_name, category_id, entry_id)
|
||||||
doc_identifier.registered_objects[object_name] = { category = category_id, entry = entry_id }
|
doc_identifier.registered_objects[object_name] = { category = category_id, entry = entry_id }
|
||||||
end
|
end
|
||||||
|
|
||||||
-- END OF API
|
-- END OF API
|
||||||
|
|
||||||
doc_identifier.identify = function(itemstack, user, pointed_thing)
|
function doc_identifier.identify(itemstack, user, pointed_thing)
|
||||||
local username = user:get_player_name()
|
local username = user:get_player_name()
|
||||||
local show_message = function(username, itype, param)
|
local function show_message(username, itype, param)
|
||||||
local vsize = 2
|
local vsize = 2
|
||||||
local message
|
local message
|
||||||
if itype == "error_item" then
|
if itype == "error_item" then
|
||||||
|
@ -24,9 +27,9 @@ doc_identifier.identify = function(itemstack, user, pointed_thing)
|
||||||
elseif itype == "error_unknown" then
|
elseif itype == "error_unknown" then
|
||||||
vsize = vsize + 2
|
vsize = vsize + 2
|
||||||
local mod
|
local mod
|
||||||
if param ~= nil then
|
if param then
|
||||||
local colon = string.find(param, ":")
|
local colon = string.find(param, ":")
|
||||||
if colon ~= nil and colon > 1 then
|
if colon and colon > 1 then
|
||||||
mod = string.sub(param,1,colon-1)
|
mod = string.sub(param,1,colon-1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -36,8 +39,8 @@ doc_identifier.identify = function(itemstack, user, pointed_thing)
|
||||||
S("• The author of the game or a mod has made a mistake")
|
S("• The author of the game or a mod has made a mistake")
|
||||||
message = message .. "\n\n"
|
message = message .. "\n\n"
|
||||||
|
|
||||||
if mod ~= nil then
|
if mod then
|
||||||
if minetest.get_modpath(mod) ~= nil then
|
if minetest.get_modpath(mod) then
|
||||||
message = message .. S("It appears to originate from the mod “@1”, which is enabled.", mod)
|
message = message .. S("It appears to originate from the mod “@1”, which is enabled.", mod)
|
||||||
message = message .. "\n"
|
message = message .. "\n"
|
||||||
else
|
else
|
||||||
|
@ -45,7 +48,7 @@ doc_identifier.identify = function(itemstack, user, pointed_thing)
|
||||||
message = message .. "\n"
|
message = message .. "\n"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if param ~= nil then
|
if param then
|
||||||
message = message .. S("Its identifier is “@1”.", param)
|
message = message .. S("Its identifier is “@1”.", param)
|
||||||
end
|
end
|
||||||
elseif itype == "error_ignore" then
|
elseif itype == "error_ignore" then
|
||||||
|
@ -66,7 +69,7 @@ doc_identifier.identify = function(itemstack, user, pointed_thing)
|
||||||
if pointed_thing.type == "node" then
|
if pointed_thing.type == "node" then
|
||||||
local pos = pointed_thing.under
|
local pos = pointed_thing.under
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
if minetest.registered_nodes[node.name] ~= nil then
|
if minetest.registered_nodes[node.name] then
|
||||||
--local nodedef = minetest.registered_nodes[node.name]
|
--local nodedef = minetest.registered_nodes[node.name]
|
||||||
if(node.name == "ignore") then
|
if(node.name == "ignore") then
|
||||||
show_message(username, "error_ignore")
|
show_message(username, "error_ignore")
|
||||||
|
@ -82,14 +85,14 @@ doc_identifier.identify = function(itemstack, user, pointed_thing)
|
||||||
local object = pointed_thing.ref
|
local object = pointed_thing.ref
|
||||||
local le = object:get_luaentity()
|
local le = object:get_luaentity()
|
||||||
if object:is_player() then
|
if object:is_player() then
|
||||||
if minetest.get_modpath("doc_basics") ~= nil and doc.entry_exists("basics", "players") then
|
if mod_doc_basics and doc.entry_exists("basics", "players") then
|
||||||
doc.show_entry(username, "basics", "players", true)
|
doc.show_entry(username, "basics", "players", true)
|
||||||
else
|
else
|
||||||
-- Fallback message
|
-- Fallback message
|
||||||
show_message(username, "player")
|
show_message(username, "player")
|
||||||
end
|
end
|
||||||
-- luaentity exists
|
-- luaentity exists
|
||||||
elseif le ~= nil then
|
elseif le then
|
||||||
local ro = doc_identifier.registered_objects[le.name]
|
local ro = doc_identifier.registered_objects[le.name]
|
||||||
-- Dropped items
|
-- Dropped items
|
||||||
if le.name == "__builtin:item" then
|
if le.name == "__builtin:item" then
|
||||||
|
@ -112,7 +115,7 @@ doc_identifier.identify = function(itemstack, user, pointed_thing)
|
||||||
doc.show_entry(username, "nodes", itemstring, true)
|
doc.show_entry(username, "nodes", itemstring, true)
|
||||||
end
|
end
|
||||||
-- A known registered object
|
-- A known registered object
|
||||||
elseif ro ~= nil then
|
elseif ro then
|
||||||
doc.show_entry(username, ro.category, ro.entry, true)
|
doc.show_entry(username, ro.category, ro.entry, true)
|
||||||
-- Undefined object (error)
|
-- Undefined object (error)
|
||||||
elseif minetest.registered_entities[le.name] == nil then
|
elseif minetest.registered_entities[le.name] == nil then
|
||||||
|
@ -195,7 +198,7 @@ minetest.register_craft({
|
||||||
{"group:stick", ""} }
|
{"group:stick", ""} }
|
||||||
})
|
})
|
||||||
|
|
||||||
if minetest.get_modpath("mcl_core") ~= nil then
|
if minetest.get_modpath("mcl_core") then
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "doc_identifier:identifier_solid",
|
output = "doc_identifier:identifier_solid",
|
||||||
recipe = { { "mcl_core:glass" },
|
recipe = { { "mcl_core:glass" },
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
# textdomain:doc_identifier
|
||||||
|
Error: This node, item or object is undefined. This is always an error.=Błąd: Ten węzeł, przedmiot lub obiekt nie jest zdefiniowany. To zawsze jest błąd.
|
||||||
|
This can happen for the following reasons:=To może się zdarzyć z następujących powodów:
|
||||||
|
• The mod which is required for it is not enabled=• Mod który jest do tego potrzebny nie jest włączony
|
||||||
|
• The author of the game or a mod has made a mistake=• Autor gry lub moda popełnił błąd
|
||||||
|
It appears to originate from the mod “@1”, which is enabled.=Wygląda na to, że powodem jest mod "@1", który jest włączony.
|
||||||
|
It appears to originate from the mod “@1”, which is not enabled!=Wygląda na to, że powodem jest mod "@1", który nie jest włączony!
|
||||||
|
Its identifier is “@1”.=Identyfikator to "@1".
|
||||||
|
Lookup Tool=Narzędzie rozpoznające
|
||||||
|
No help entry for this block could be found.=Nie znaleziono wpisu pomocniczego dla tego bloku.
|
||||||
|
No help entry for this item could be found.=Nie znaleziono wpisu pomocniczego dla tego przedmiotu.
|
||||||
|
No help entry for this object could be found.=Nie znaleziono wpisu pomocniczego dla tego obiektu.
|
||||||
|
OK=OK
|
||||||
|
Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by using. In liquid mode, this tool points to liquids as well while in solid mode this is not the case.=Uderz dowolny blok, przedmiot lub inną rzecz aby dowiedzieć się o niej czegoś. To otworzy odpowiedni wpis pomocniczy. Narzędzie jest dostępne w dwóch trybach które można zmienić przez kliknięcie Użyj. W trybie płynów narzędzie to wskazuje również na płyny, podczas gdy w trybie stałym tak nie jest.
|
||||||
|
This block cannot be identified because the world has not materialized at this point yet. Try again in a few seconds.=Ten blok nie może być zidentyfikowany, ponieważ świat jeszcze się nie zmaterializował. Spróbuj ponownie za kilka sekund.
|
||||||
|
This is a player.=To jest gracz.
|
||||||
|
This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used.=To jest małe pomocnicze narzędzie, które może być użyte by szybko dowiedzieć się więcej na temat bliskiego otoczenia. Identyfikuje ono oraz analizuje bloki, przedmioty i inne rzeczy oraz pokazuje dokładne informacje na temat tego na czym zostanie użyte.
|
||||||
|
Show help for pointed thing=Pokaż pomoc dla wskazywanej rzeczy
|
|
@ -1,6 +1,12 @@
|
||||||
local S = minetest.get_translator("doc_items")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
local N = function(s) return s end
|
local N = function(s) return s end
|
||||||
|
|
||||||
|
local math = math
|
||||||
|
local string = string
|
||||||
|
|
||||||
|
local tostring = tostring
|
||||||
|
local pairs = pairs
|
||||||
|
|
||||||
doc.sub.items = {}
|
doc.sub.items = {}
|
||||||
|
|
||||||
-- Template texts
|
-- Template texts
|
||||||
|
@ -34,13 +40,17 @@ local suppressed = {
|
||||||
local forbidden_core_factoids = {}
|
local forbidden_core_factoids = {}
|
||||||
|
|
||||||
-- Helper functions
|
-- Helper functions
|
||||||
local yesno = function(bool)
|
local function yesno(bool)
|
||||||
if bool==true then return S("Yes")
|
if bool == true then
|
||||||
elseif bool==false then return S("No")
|
return S("Yes")
|
||||||
else return "N/A" end
|
elseif bool == false then
|
||||||
|
return S("No")
|
||||||
|
else
|
||||||
|
return "N/A"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local groups_to_string = function(grouptable, filter)
|
local function groups_to_string(grouptable, filter)
|
||||||
local gstring = ""
|
local gstring = ""
|
||||||
local groups_count = 0
|
local groups_count = 0
|
||||||
for id, value in pairs(grouptable) do
|
for id, value in pairs(grouptable) do
|
||||||
|
@ -50,7 +60,7 @@ local groups_to_string = function(grouptable, filter)
|
||||||
-- List seperator
|
-- List seperator
|
||||||
gstring = gstring .. S(", ")
|
gstring = gstring .. S(", ")
|
||||||
end
|
end
|
||||||
if groupdefs[id] ~= nil and doc.sub.items.settings.friendly_group_names == true then
|
if groupdefs[id] and doc.sub.items.settings.friendly_group_names == true then
|
||||||
gstring = gstring .. groupdefs[id]
|
gstring = gstring .. groupdefs[id]
|
||||||
else
|
else
|
||||||
gstring = gstring .. id
|
gstring = gstring .. id
|
||||||
|
@ -66,7 +76,7 @@ local groups_to_string = function(grouptable, filter)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Removes all text after the first newline (including the newline)
|
-- Removes all text after the first newline (including the newline)
|
||||||
local scrub_newlines = function(text)
|
local function scrub_newlines(text)
|
||||||
local spl = string.split(text, "\n")
|
local spl = string.split(text, "\n")
|
||||||
if spl and #spl > 0 then
|
if spl and #spl > 0 then
|
||||||
return spl[1]
|
return spl[1]
|
||||||
|
@ -76,7 +86,7 @@ local scrub_newlines = function(text)
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[ Append a newline to text, unless it already ends with a newline. ]]
|
--[[ Append a newline to text, unless it already ends with a newline. ]]
|
||||||
local newline = function(text)
|
local function newline(text)
|
||||||
if string.sub(text, #text, #text) == "\n" or text == "" then
|
if string.sub(text, #text, #text) == "\n" or text == "" then
|
||||||
return text
|
return text
|
||||||
else
|
else
|
||||||
|
@ -85,7 +95,7 @@ local newline = function(text)
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[ Make sure the text ends with two newlines by appending any missing newlines at the end, if neccessary. ]]
|
--[[ Make sure the text ends with two newlines by appending any missing newlines at the end, if neccessary. ]]
|
||||||
local newline2 = function(text)
|
local function newline2(text)
|
||||||
if string.sub(text, #text-1, #text) == "\n\n" or text == "" then
|
if string.sub(text, #text-1, #text) == "\n\n" or text == "" then
|
||||||
return text
|
return text
|
||||||
elseif string.sub(text, #text, #text) == "\n" then
|
elseif string.sub(text, #text, #text) == "\n" then
|
||||||
|
@ -97,7 +107,7 @@ end
|
||||||
|
|
||||||
|
|
||||||
-- Extract suitable item description for formspec
|
-- Extract suitable item description for formspec
|
||||||
local description_for_formspec = function(itemstring)
|
local function description_for_formspec(itemstring)
|
||||||
if minetest.registered_items[itemstring] == nil then
|
if minetest.registered_items[itemstring] == nil then
|
||||||
-- Huh? The item doesn't exist for some reason. Better give a dummy string
|
-- Huh? The item doesn't exist for some reason. Better give a dummy string
|
||||||
minetest.log("warning", "[doc] Unknown item detected: "..tostring(itemstring))
|
minetest.log("warning", "[doc] Unknown item detected: "..tostring(itemstring))
|
||||||
|
@ -111,26 +121,26 @@ local description_for_formspec = function(itemstring)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local get_entry_name = function(itemstring)
|
local function get_entry_name(itemstring)
|
||||||
local def = minetest.registered_items[itemstring]
|
local def = minetest.registered_items[itemstring]
|
||||||
if def._doc_items_entry_name ~= nil then
|
if def._doc_items_entry_name then
|
||||||
return def._doc_items_entry_name
|
return def._doc_items_entry_name
|
||||||
elseif item_name_overrides[itemstring] ~= nil then
|
elseif item_name_overrides[itemstring] then
|
||||||
return item_name_overrides[itemstring]
|
return item_name_overrides[itemstring]
|
||||||
else
|
else
|
||||||
return def.description
|
return def.description
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
doc.sub.items.get_group_name = function(groupname)
|
function doc.sub.items.get_group_name(groupname)
|
||||||
if groupdefs[groupname] ~= nil and doc.sub.items.settings.friendly_group_names == true then
|
if groupdefs[groupname] and doc.sub.items.settings.friendly_group_names == true then
|
||||||
return groupdefs[groupname]
|
return groupdefs[groupname]
|
||||||
else
|
else
|
||||||
return groupname
|
return groupname
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local burntime_to_text = function(burntime)
|
local function burntime_to_text(burntime)
|
||||||
if burntime == nil then
|
if burntime == nil then
|
||||||
return S("unknown")
|
return S("unknown")
|
||||||
elseif burntime == 1 then
|
elseif burntime == 1 then
|
||||||
|
@ -146,16 +156,16 @@ end
|
||||||
* Full punch interval
|
* Full punch interval
|
||||||
* Damage groups
|
* Damage groups
|
||||||
]]
|
]]
|
||||||
local factoid_toolcaps = function(tool_capabilities, check_uses)
|
local function factoid_toolcaps(tool_capabilities, check_uses)
|
||||||
if forbidden_core_factoids.tool_capabilities then
|
if forbidden_core_factoids.tool_capabilities then
|
||||||
return ""
|
return ""
|
||||||
end
|
end
|
||||||
|
|
||||||
local formstring = ""
|
local formstring = ""
|
||||||
if check_uses == nil then check_uses = false end
|
if check_uses == nil then check_uses = false end
|
||||||
if tool_capabilities ~= nil and tool_capabilities ~= {} then
|
if tool_capabilities and tool_capabilities ~= {} then
|
||||||
local groupcaps = tool_capabilities.groupcaps
|
local groupcaps = tool_capabilities.groupcaps
|
||||||
if groupcaps ~= nil then
|
if groupcaps then
|
||||||
local miningcapstr = ""
|
local miningcapstr = ""
|
||||||
local miningtimesstr = ""
|
local miningtimesstr = ""
|
||||||
local miningusesstr = ""
|
local miningusesstr = ""
|
||||||
|
@ -188,7 +198,7 @@ local factoid_toolcaps = function(tool_capabilities, check_uses)
|
||||||
caplines = caplines + 1
|
caplines = caplines + 1
|
||||||
|
|
||||||
for rating=3, 1, -1 do
|
for rating=3, 1, -1 do
|
||||||
if v.times ~= nil and v.times[rating] ~= nil then
|
if v.times and v.times[rating] then
|
||||||
local maxtime = v.times[rating]
|
local maxtime = v.times[rating]
|
||||||
local mintime
|
local mintime
|
||||||
local mintimestr, maxtimestr
|
local mintimestr, maxtimestr
|
||||||
|
@ -255,7 +265,7 @@ local factoid_toolcaps = function(tool_capabilities, check_uses)
|
||||||
|
|
||||||
-- Weapon data
|
-- Weapon data
|
||||||
local damage_groups = tool_capabilities.damage_groups
|
local damage_groups = tool_capabilities.damage_groups
|
||||||
if damage_groups ~= nil then
|
if damage_groups then
|
||||||
formstring = formstring .. S("This is a melee weapon which deals damage by punching.") .. "\n"
|
formstring = formstring .. S("This is a melee weapon which deals damage by punching.") .. "\n"
|
||||||
-- Damage groups
|
-- Damage groups
|
||||||
formstring = formstring .. S("Maximum damage per hit:") .. "\n"
|
formstring = formstring .. S("Maximum damage per hit:") .. "\n"
|
||||||
|
@ -266,7 +276,7 @@ local factoid_toolcaps = function(tool_capabilities, check_uses)
|
||||||
|
|
||||||
-- Full punch interval
|
-- Full punch interval
|
||||||
local punch = 1.0
|
local punch = 1.0
|
||||||
if tool_capabilities.full_punch_interval ~= nil then
|
if tool_capabilities.full_punch_interval then
|
||||||
punch = tool_capabilities.full_punch_interval
|
punch = tool_capabilities.full_punch_interval
|
||||||
end
|
end
|
||||||
formstring = formstring .. S("Full punch interval: @1 s", string.format("%.1f", punch))
|
formstring = formstring .. S("Full punch interval: @1 s", string.format("%.1f", punch))
|
||||||
|
@ -282,7 +292,7 @@ end
|
||||||
- Digging times/groups
|
- Digging times/groups
|
||||||
- level group
|
- level group
|
||||||
]]
|
]]
|
||||||
local factoid_mining_node = function(data)
|
local function factoid_mining_node(data)
|
||||||
if forbidden_core_factoids.node_mining then
|
if forbidden_core_factoids.node_mining then
|
||||||
return ""
|
return ""
|
||||||
end
|
end
|
||||||
|
@ -292,7 +302,7 @@ local factoid_mining_node = function(data)
|
||||||
-- Check if there are no mining groups at all
|
-- Check if there are no mining groups at all
|
||||||
local nogroups = true
|
local nogroups = true
|
||||||
for groupname,_ in pairs(mininggroups) do
|
for groupname,_ in pairs(mininggroups) do
|
||||||
if data.def.groups[groupname] ~= nil or groupname == "dig_immediate" then
|
if data.def.groups[groupname] or groupname == "dig_immediate" then
|
||||||
nogroups = false
|
nogroups = false
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
@ -324,7 +334,7 @@ local factoid_mining_node = function(data)
|
||||||
local minegroupcount = 0
|
local minegroupcount = 0
|
||||||
for group,_ in pairs(mininggroups) do
|
for group,_ in pairs(mininggroups) do
|
||||||
local rating = data.def.groups[group]
|
local rating = data.def.groups[group]
|
||||||
if rating ~= nil then
|
if rating then
|
||||||
mstring = mstring .. S("• @1: @2", doc.sub.items.get_group_name(group), rating).."\n"
|
mstring = mstring .. S("• @1: @2", doc.sub.items.get_group_name(group), rating).."\n"
|
||||||
minegroupcount = minegroupcount + 1
|
minegroupcount = minegroupcount + 1
|
||||||
end
|
end
|
||||||
|
@ -344,18 +354,18 @@ local factoid_mining_node = function(data)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Pointing range of itmes
|
-- Pointing range of itmes
|
||||||
local range_factoid = function(itemstring, def)
|
local function range_factoid(itemstring, def)
|
||||||
local handrange = minetest.registered_items[""].range
|
local handrange = minetest.registered_items[""].range
|
||||||
local itemrange = def.range
|
local itemrange = def.range
|
||||||
if itemstring == "" then
|
if itemstring == "" then
|
||||||
if handrange ~= nil then
|
if handrange then
|
||||||
return S("Range: @1", itemrange)
|
return S("Range: @1", itemrange)
|
||||||
else
|
else
|
||||||
return S("Range: 4")
|
return S("Range: 4")
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if handrange == nil then handrange = 4 end
|
if handrange == nil then handrange = 4 end
|
||||||
if itemrange ~= nil then
|
if itemrange then
|
||||||
return S("Range: @1", itemrange)
|
return S("Range: @1", itemrange)
|
||||||
else
|
else
|
||||||
return S("Range: @1 (@2)", get_entry_name(""), handrange)
|
return S("Range: @1 (@2)", get_entry_name(""), handrange)
|
||||||
|
@ -364,14 +374,14 @@ local range_factoid = function(itemstring, def)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Smelting fuel factoid
|
-- Smelting fuel factoid
|
||||||
local factoid_fuel = function(itemstring, ctype)
|
local function factoid_fuel(itemstring, ctype)
|
||||||
if forbidden_core_factoids.fuel then
|
if forbidden_core_factoids.fuel then
|
||||||
return ""
|
return ""
|
||||||
end
|
end
|
||||||
|
|
||||||
local formstring = ""
|
local formstring = ""
|
||||||
local result, decremented = minetest.get_craft_result({method = "fuel", items = {itemstring}})
|
local result, decremented = minetest.get_craft_result({method = "fuel", items = {itemstring}})
|
||||||
if result ~= nil and result.time > 0 then
|
if result and result.time > 0 then
|
||||||
local base
|
local base
|
||||||
local burntext = burntime_to_text(result.time)
|
local burntext = burntime_to_text(result.time)
|
||||||
if ctype == "tools" then
|
if ctype == "tools" then
|
||||||
|
@ -392,7 +402,7 @@ local factoid_fuel = function(itemstring, ctype)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Shows the itemstring of an item
|
-- Shows the itemstring of an item
|
||||||
local factoid_itemstring = function(itemstring, playername)
|
local function factoid_itemstring(itemstring, playername)
|
||||||
if forbidden_core_factoids.itemstring then
|
if forbidden_core_factoids.itemstring then
|
||||||
return ""
|
return ""
|
||||||
end
|
end
|
||||||
|
@ -405,7 +415,7 @@ local factoid_itemstring = function(itemstring, playername)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local entry_image = function(data)
|
local function entry_image(data)
|
||||||
local formstring = ""
|
local formstring = ""
|
||||||
-- No image for air
|
-- No image for air
|
||||||
if data.itemstring ~= "air" then
|
if data.itemstring ~= "air" then
|
||||||
|
@ -414,7 +424,7 @@ local entry_image = function(data)
|
||||||
formstring = formstring .. "image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..
|
formstring = formstring .. "image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..
|
||||||
minetest.registered_items[""].wield_image.."]"
|
minetest.registered_items[""].wield_image.."]"
|
||||||
-- Other items
|
-- Other items
|
||||||
elseif data.image ~= nil then
|
elseif data.image then
|
||||||
formstring = formstring .. "image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..data.image.."]"
|
formstring = formstring .. "image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..data.image.."]"
|
||||||
else
|
else
|
||||||
formstring = formstring .. "item_image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..data.itemstring.."]"
|
formstring = formstring .. "item_image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..data.itemstring.."]"
|
||||||
|
@ -432,9 +442,9 @@ factoid_generators.craftitems = {}
|
||||||
--[[ Returns a list of all registered factoids for the specified category and type
|
--[[ Returns a list of all registered factoids for the specified category and type
|
||||||
* category_id: Identifier of the Documentation System category in which the factoid appears
|
* category_id: Identifier of the Documentation System category in which the factoid appears
|
||||||
* factoid_type: If set, oly returns factoid with a matching factoid_type.
|
* factoid_type: If set, oly returns factoid with a matching factoid_type.
|
||||||
If nil, all factoids for this category will be generated
|
If nil, all factoids for this category will be generated
|
||||||
* data: Entry data to parse ]]
|
* data: Entry data to parse ]]
|
||||||
local factoid_custom = function(category_id, factoid_type, data)
|
local function factoid_custom(category_id, factoid_type, data)
|
||||||
local ftable = factoid_generators[category_id]
|
local ftable = factoid_generators[category_id]
|
||||||
local datastring = ""
|
local datastring = ""
|
||||||
-- Custom factoids are inserted here
|
-- Custom factoids are inserted here
|
||||||
|
@ -450,17 +460,17 @@ local factoid_custom = function(category_id, factoid_type, data)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Shows core information shared by all items, to be inserted at the top
|
-- Shows core information shared by all items, to be inserted at the top
|
||||||
local factoids_header = function(data, ctype)
|
local function factoids_header(data, ctype)
|
||||||
local datastring = ""
|
local datastring = ""
|
||||||
if not forbidden_core_factoids.basics then
|
if not forbidden_core_factoids.basics then
|
||||||
|
|
||||||
local longdesc = data.longdesc
|
local longdesc = data.longdesc
|
||||||
local usagehelp = data.usagehelp
|
local usagehelp = data.usagehelp
|
||||||
if longdesc ~= nil then
|
if longdesc then
|
||||||
datastring = datastring .. S("Description: @1", longdesc)
|
datastring = datastring .. S("Description: @1", longdesc)
|
||||||
datastring = newline2(datastring)
|
datastring = newline2(datastring)
|
||||||
end
|
end
|
||||||
if usagehelp ~= nil then
|
if usagehelp then
|
||||||
datastring = datastring .. S("Usage help: @1", usagehelp)
|
datastring = datastring .. S("Usage help: @1", usagehelp)
|
||||||
datastring = newline2(datastring)
|
datastring = newline2(datastring)
|
||||||
end
|
end
|
||||||
|
@ -484,7 +494,7 @@ local factoids_header = function(data, ctype)
|
||||||
datastring = datastring .. S("This item points to liquids.").."\n"
|
datastring = datastring .. S("This item points to liquids.").."\n"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if data.def.on_use ~= nil then
|
if data.def.on_use then
|
||||||
if ctype == "nodes" then
|
if ctype == "nodes" then
|
||||||
datastring = datastring .. S("Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.").."\n"
|
datastring = datastring .. S("Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.").."\n"
|
||||||
elseif ctype == "tools" then
|
elseif ctype == "tools" then
|
||||||
|
@ -510,7 +520,7 @@ local factoids_header = function(data, ctype)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Shows less important information shared by all items, to be inserted at the bottom
|
-- Shows less important information shared by all items, to be inserted at the bottom
|
||||||
local factoids_footer = function(data, playername, ctype)
|
local function factoids_footer(data, playername, ctype)
|
||||||
local datastring = ""
|
local datastring = ""
|
||||||
datastring = datastring .. factoid_custom(ctype, "groups", data)
|
datastring = datastring .. factoid_custom(ctype, "groups", data)
|
||||||
datastring = newline2(datastring)
|
datastring = newline2(datastring)
|
||||||
|
@ -518,7 +528,7 @@ local factoids_footer = function(data, playername, ctype)
|
||||||
-- Show other “exposable” groups
|
-- Show other “exposable” groups
|
||||||
if not forbidden_core_factoids.groups then
|
if not forbidden_core_factoids.groups then
|
||||||
local gstring, gcount = groups_to_string(data.def.groups, miscgroups)
|
local gstring, gcount = groups_to_string(data.def.groups, miscgroups)
|
||||||
if gstring ~= nil then
|
if gstring then
|
||||||
if gcount == 1 then
|
if gcount == 1 then
|
||||||
if ctype == "nodes" then
|
if ctype == "nodes" then
|
||||||
datastring = datastring .. S("This block belongs to the @1 group.", gstring) .. "\n"
|
datastring = datastring .. S("This block belongs to the @1 group.", gstring) .. "\n"
|
||||||
|
@ -597,7 +607,7 @@ doc.add_category("nodes", {
|
||||||
datastring = datastring .. S("This block is a liquid with these properties:") .. "\n"
|
datastring = datastring .. S("This block is a liquid with these properties:") .. "\n"
|
||||||
local range, renew, viscos
|
local range, renew, viscos
|
||||||
if data.def.liquid_range then range = data.def.liquid_range else range = 8 end
|
if data.def.liquid_range then range = data.def.liquid_range else range = 8 end
|
||||||
if data.def.liquid_renewable ~= nil then renew = data.def.liquid_renewable else renew = true end
|
if data.def.liquid_renewable then renew = data.def.liquid_renewable else renew = true end
|
||||||
if data.def.liquid_viscosity then viscos = data.def.liquid_viscosity else viscos = 0 end
|
if data.def.liquid_viscosity then viscos = data.def.liquid_viscosity else viscos = 0 end
|
||||||
if renew then
|
if renew then
|
||||||
datastring = datastring .. S("• Renewable") .. "\n"
|
datastring = datastring .. S("• Renewable") .. "\n"
|
||||||
|
@ -617,7 +627,7 @@ doc.add_category("nodes", {
|
||||||
--- Direct interaction with the player
|
--- Direct interaction with the player
|
||||||
---- Damage (very important)
|
---- Damage (very important)
|
||||||
if not forbidden_core_factoids.node_damage then
|
if not forbidden_core_factoids.node_damage then
|
||||||
if data.def.damage_per_second ~= nil and data.def.damage_per_second > 1 then
|
if data.def.damage_per_second and data.def.damage_per_second > 1 then
|
||||||
datastring = datastring .. S("This block causes a damage of @1 hit points per second.", data.def.damage_per_second) .. "\n"
|
datastring = datastring .. S("This block causes a damage of @1 hit points per second.", data.def.damage_per_second) .. "\n"
|
||||||
elseif data.def.damage_per_second == 1 then
|
elseif data.def.damage_per_second == 1 then
|
||||||
datastring = datastring .. S("This block causes a damage of @1 hit point per second.", data.def.damage_per_second) .. "\n"
|
datastring = datastring .. S("This block causes a damage of @1 hit point per second.", data.def.damage_per_second) .. "\n"
|
||||||
|
@ -630,7 +640,7 @@ doc.add_category("nodes", {
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local fdap = data.def.groups.fall_damage_add_percent
|
local fdap = data.def.groups.fall_damage_add_percent
|
||||||
if fdap ~= nil and fdap ~= 0 then
|
if fdap and fdap ~= 0 then
|
||||||
if fdap > 0 then
|
if fdap > 0 then
|
||||||
datastring = datastring .. S("The fall damage on this block is increased by @1%.", fdap) .. "\n"
|
datastring = datastring .. S("The fall damage on this block is increased by @1%.", fdap) .. "\n"
|
||||||
elseif fdap <= -100 then
|
elseif fdap <= -100 then
|
||||||
|
@ -652,11 +662,11 @@ doc.add_category("nodes", {
|
||||||
datastring = datastring .. S("This block can be climbed.").."\n"
|
datastring = datastring .. S("This block can be climbed.").."\n"
|
||||||
end
|
end
|
||||||
local bouncy = data.def.groups.bouncy
|
local bouncy = data.def.groups.bouncy
|
||||||
if bouncy ~= nil and bouncy ~= 0 then
|
if bouncy and bouncy ~= 0 then
|
||||||
datastring = datastring .. S("This block will make you bounce off with an elasticity of @1%.", bouncy).."\n"
|
datastring = datastring .. S("This block will make you bounce off with an elasticity of @1%.", bouncy).."\n"
|
||||||
end
|
end
|
||||||
local slippery = data.def.groups.slippery
|
local slippery = data.def.groups.slippery
|
||||||
if slippery ~= nil and slippery ~= 0 then
|
if slippery and slippery ~= 0 then
|
||||||
datastring = datastring .. S("This block is slippery.") .. "\n"
|
datastring = datastring .. S("This block is slippery.") .. "\n"
|
||||||
end
|
end
|
||||||
datastring = datastring .. factoid_custom("nodes", "movement", data)
|
datastring = datastring .. factoid_custom("nodes", "movement", data)
|
||||||
|
@ -756,7 +766,7 @@ doc.add_category("nodes", {
|
||||||
datastring = newline2(datastring)
|
datastring = newline2(datastring)
|
||||||
|
|
||||||
--- List nodes/groups to which this node connects to
|
--- List nodes/groups to which this node connects to
|
||||||
if not forbidden_core_factoids.connects_to and data.def.connects_to ~= nil then
|
if not forbidden_core_factoids.connects_to and data.def.connects_to then
|
||||||
local nodes = {}
|
local nodes = {}
|
||||||
local groups = {}
|
local groups = {}
|
||||||
for c=1,#data.def.connects_to do
|
for c=1,#data.def.connects_to do
|
||||||
|
@ -771,7 +781,7 @@ doc.add_category("nodes", {
|
||||||
local nstring = ""
|
local nstring = ""
|
||||||
for n=1,#nodes do
|
for n=1,#nodes do
|
||||||
local name
|
local name
|
||||||
if item_name_overrides[nodes[n]] ~= nil then
|
if item_name_overrides[nodes[n]] then
|
||||||
name = item_name_overrides[nodes[n]]
|
name = item_name_overrides[nodes[n]]
|
||||||
else
|
else
|
||||||
name = description_for_formspec(nodes[n])
|
name = description_for_formspec(nodes[n])
|
||||||
|
@ -779,7 +789,7 @@ doc.add_category("nodes", {
|
||||||
if n > 1 then
|
if n > 1 then
|
||||||
nstring = nstring .. S(", ")
|
nstring = nstring .. S(", ")
|
||||||
end
|
end
|
||||||
if name ~= nil then
|
if name then
|
||||||
nstring = nstring .. name
|
nstring = nstring .. name
|
||||||
else
|
else
|
||||||
nstring = nstring .. S("Unknown Node")
|
nstring = nstring .. S("Unknown Node")
|
||||||
|
@ -810,9 +820,9 @@ doc.add_category("nodes", {
|
||||||
datastring = newline2(datastring)
|
datastring = newline2(datastring)
|
||||||
|
|
||||||
-- Non-default drops
|
-- Non-default drops
|
||||||
if not forbidden_core_factoids.drops and data.def.drop ~= nil and data.def.drop ~= data.itemstring and data.itemstring ~= "air" then
|
if not forbidden_core_factoids.drops and data.def.drop and data.def.drop ~= data.itemstring and data.itemstring ~= "air" then
|
||||||
-- TODO: Calculate drop probabilities of max > 1 like for max == 1
|
-- TODO: Calculate drop probabilities of max > 1 like for max == 1
|
||||||
local get_desc = function(stack)
|
local function get_desc(stack)
|
||||||
return description_for_formspec(stack:get_name())
|
return description_for_formspec(stack:get_name())
|
||||||
end
|
end
|
||||||
if data.def.drop == "" then
|
if data.def.drop == "" then
|
||||||
|
@ -828,7 +838,7 @@ doc.add_category("nodes", {
|
||||||
datastring = datastring .. S("This block will drop the following when mined: @1.", desc).."\n"
|
datastring = datastring .. S("This block will drop the following when mined: @1.", desc).."\n"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif type(data.def.drop) == "table" and data.def.drop.items ~= nil then
|
elseif type(data.def.drop) == "table" and data.def.drop.items then
|
||||||
local max = data.def.drop.max_items
|
local max = data.def.drop.max_items
|
||||||
local dropstring = ""
|
local dropstring = ""
|
||||||
local dropstring_base
|
local dropstring_base
|
||||||
|
@ -882,7 +892,7 @@ doc.add_category("nodes", {
|
||||||
if chance > 0 then
|
if chance > 0 then
|
||||||
probtable = {}
|
probtable = {}
|
||||||
probtable.items = {}
|
probtable.items = {}
|
||||||
for j=1,#data.def.drop.items[i].items do
|
for j = 1, #data.def.drop.items[i].items do
|
||||||
local dropstack = ItemStack(data.def.drop.items[i].items[j])
|
local dropstack = ItemStack(data.def.drop.items[i].items[j])
|
||||||
local itemstring = dropstack:get_name()
|
local itemstring = dropstack:get_name()
|
||||||
local desc = get_desc(dropstack)
|
local desc = get_desc(dropstack)
|
||||||
|
@ -904,7 +914,7 @@ doc.add_category("nodes", {
|
||||||
-- Do some cleanup of the probability table
|
-- Do some cleanup of the probability table
|
||||||
if max == 1 or max == nil then
|
if max == 1 or max == nil then
|
||||||
-- Sort by rarity
|
-- Sort by rarity
|
||||||
local comp = function(p1, p2)
|
local function comp(p1, p2)
|
||||||
return p1.rarity < p2.rarity
|
return p1.rarity < p2.rarity
|
||||||
end
|
end
|
||||||
table.sort(probtables, comp)
|
table.sort(probtables, comp)
|
||||||
|
@ -953,7 +963,7 @@ doc.add_category("nodes", {
|
||||||
dropstring = dropstring .. dropstring_this
|
dropstring = dropstring .. dropstring_this
|
||||||
pcount = pcount + 1
|
pcount = pcount + 1
|
||||||
end
|
end
|
||||||
if max ~= nil and max > 1 then
|
if max and max > 1 then
|
||||||
datastring = datastring .. S(dropstring_base, max, dropstring)
|
datastring = datastring .. S(dropstring_base, max, dropstring)
|
||||||
else
|
else
|
||||||
datastring = datastring .. S(dropstring_base, dropstring)
|
datastring = datastring .. S(dropstring_base, dropstring)
|
||||||
|
@ -988,15 +998,15 @@ doc.add_category("tools", {
|
||||||
if entries[2].eid == "" then return false end
|
if entries[2].eid == "" then return false end
|
||||||
|
|
||||||
local comp = {}
|
local comp = {}
|
||||||
for e=1, 2 do
|
for e = 1, 2 do
|
||||||
comp[e] = {}
|
comp[e] = {}
|
||||||
end
|
end
|
||||||
-- No tool capabilities: Instant loser
|
-- No tool capabilities: Instant loser
|
||||||
if entries[1].data.def.tool_capabilities == nil and entries[2].data.def.tool_capabilities ~= nil then return false end
|
if entries[1].data.def.tool_capabilities == nil and entries[2].data.def.tool_capabilities then return false end
|
||||||
if entries[2].data.def.tool_capabilities == nil and entries[1].data.def.tool_capabilities ~= nil then return true end
|
if entries[2].data.def.tool_capabilities == nil and entries[1].data.def.tool_capabilities then return true end
|
||||||
-- No tool capabilities for both: Compare by uses
|
-- No tool capabilities for both: Compare by uses
|
||||||
if entries[1].data.def.tool_capabilities == nil and entries[2].data.def.tool_capabilities == nil then
|
if entries[1].data.def.tool_capabilities == nil and entries[2].data.def.tool_capabilities == nil then
|
||||||
for e=1, 2 do
|
for e = 1, 2 do
|
||||||
if type(entries[e].data.def._doc_items_durability) == "number" then
|
if type(entries[e].data.def._doc_items_durability) == "number" then
|
||||||
comp[e].uses = entries[e].data.def._doc_items_durability
|
comp[e].uses = entries[e].data.def._doc_items_durability
|
||||||
else
|
else
|
||||||
|
@ -1051,7 +1061,7 @@ doc.add_category("tools", {
|
||||||
comp[e].count = groupcount
|
comp[e].count = groupcount
|
||||||
comp[e].group = group
|
comp[e].group = group
|
||||||
comp[e].mintime = mintime
|
comp[e].mintime = mintime
|
||||||
if realuses ~= nil then
|
if realuses then
|
||||||
comp[e].uses = realuses
|
comp[e].uses = realuses
|
||||||
elseif type(entries[e].data.def._doc_items_durability) == "number" then
|
elseif type(entries[e].data.def._doc_items_durability) == "number" then
|
||||||
comp[e].uses = entries[e].data.def._doc_items_durability
|
comp[e].uses = entries[e].data.def._doc_items_durability
|
||||||
|
@ -1156,9 +1166,9 @@ local function gather_descs()
|
||||||
-- 1st pass: Gather groups of interest
|
-- 1st pass: Gather groups of interest
|
||||||
for id, def in pairs(minetest.registered_items) do
|
for id, def in pairs(minetest.registered_items) do
|
||||||
-- Gather all groups used for mining
|
-- Gather all groups used for mining
|
||||||
if def.tool_capabilities ~= nil then
|
if def.tool_capabilities then
|
||||||
local groupcaps = def.tool_capabilities.groupcaps
|
local groupcaps = def.tool_capabilities.groupcaps
|
||||||
if groupcaps ~= nil then
|
if groupcaps then
|
||||||
for k,v in pairs(groupcaps) do
|
for k,v in pairs(groupcaps) do
|
||||||
if mininggroups[k] ~= true then
|
if mininggroups[k] ~= true then
|
||||||
mininggroups[k] = true
|
mininggroups[k] = true
|
||||||
|
@ -1169,7 +1179,7 @@ local function gather_descs()
|
||||||
|
|
||||||
-- ... and gather all groups which appear in crafting recipes
|
-- ... and gather all groups which appear in crafting recipes
|
||||||
local crafts = minetest.get_all_craft_recipes(id)
|
local crafts = minetest.get_all_craft_recipes(id)
|
||||||
if crafts ~= nil then
|
if crafts then
|
||||||
for c=1,#crafts do
|
for c=1,#crafts do
|
||||||
for k,v in pairs(crafts[c].items) do
|
for k,v in pairs(crafts[c].items) do
|
||||||
if string.sub(v,1,6) == "group:" then
|
if string.sub(v,1,6) == "group:" then
|
||||||
|
@ -1184,7 +1194,7 @@ local function gather_descs()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- ... and gather all groups used in connects_to
|
-- ... and gather all groups used in connects_to
|
||||||
if def.connects_to ~= nil then
|
if def.connects_to then
|
||||||
for c=1, #def.connects_to do
|
for c=1, #def.connects_to do
|
||||||
if string.sub(def.connects_to[c],1,6) == "group:" then
|
if string.sub(def.connects_to[c],1,6) == "group:" then
|
||||||
local group = string.sub(def.connects_to[c],7,-1)
|
local group = string.sub(def.connects_to[c],7,-1)
|
||||||
|
@ -1203,7 +1213,7 @@ local function gather_descs()
|
||||||
else
|
else
|
||||||
help.longdesc["air"] = S("A transparent block, basically empty space. It is usually left behind after digging something.")
|
help.longdesc["air"] = S("A transparent block, basically empty space. It is usually left behind after digging something.")
|
||||||
end
|
end
|
||||||
if minetest.registered_items["ignore"]._doc_items_create_entry ~= nil then
|
if minetest.registered_items["ignore"]._doc_items_create_entry then
|
||||||
suppressed["ignore"] = minetest.registered_items["ignore"]._doc_items_create_entry == true
|
suppressed["ignore"] = minetest.registered_items["ignore"]._doc_items_create_entry == true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1232,23 +1242,23 @@ local function gather_descs()
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
local add_entries = function(deftable, category_id)
|
local function add_entries(deftable, category_id)
|
||||||
for id, def in pairs(deftable) do
|
for id, def in pairs(deftable) do
|
||||||
local name, ld, uh, im
|
local name, ld, uh, im
|
||||||
local forced = false
|
local forced = false
|
||||||
if def._doc_items_create_entry == true and def ~= nil then forced = true end
|
if def._doc_items_create_entry == true and def then forced = true end
|
||||||
name = get_entry_name(id)
|
name = get_entry_name(id)
|
||||||
if not (((def.description == nil or def.description == "") and def._doc_items_entry_name == nil) or (def._doc_items_create_entry == false) or (suppressed[id] == true)) or forced then
|
if not (((def.description == nil or def.description == "") and def._doc_items_entry_name == nil) or (def._doc_items_create_entry == false) or (suppressed[id] == true)) or forced then
|
||||||
if def._doc_items_longdesc then
|
if def._doc_items_longdesc then
|
||||||
ld = def._doc_items_longdesc
|
ld = def._doc_items_longdesc
|
||||||
end
|
end
|
||||||
if help.longdesc[id] ~= nil then
|
if help.longdesc[id] then
|
||||||
ld = help.longdesc[id]
|
ld = help.longdesc[id]
|
||||||
end
|
end
|
||||||
if def._doc_items_usagehelp then
|
if def._doc_items_usagehelp then
|
||||||
uh = def._doc_items_usagehelp
|
uh = def._doc_items_usagehelp
|
||||||
end
|
end
|
||||||
if help.usagehelp[id] ~= nil then
|
if help.usagehelp[id] then
|
||||||
uh = help.usagehelp[id]
|
uh = help.usagehelp[id]
|
||||||
end
|
end
|
||||||
if def._doc_items_image then
|
if def._doc_items_image then
|
||||||
|
@ -1297,13 +1307,13 @@ local function reveal_item(playername, itemstring)
|
||||||
if itemstring == nil or itemstring == "" or playername == nil or playername == "" then
|
if itemstring == nil or itemstring == "" or playername == nil or playername == "" then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
if minetest.registered_nodes[itemstring] ~= nil then
|
if minetest.registered_nodes[itemstring] then
|
||||||
category_id = "nodes"
|
category_id = "nodes"
|
||||||
elseif minetest.registered_tools[itemstring] ~= nil then
|
elseif minetest.registered_tools[itemstring] then
|
||||||
category_id = "tools"
|
category_id = "tools"
|
||||||
elseif minetest.registered_craftitems[itemstring] ~= nil then
|
elseif minetest.registered_craftitems[itemstring] then
|
||||||
category_id = "craftitems"
|
category_id = "craftitems"
|
||||||
elseif minetest.registered_items[itemstring] ~= nil then
|
elseif minetest.registered_items[itemstring] then
|
||||||
category_id = "craftitems"
|
category_id = "craftitems"
|
||||||
else
|
else
|
||||||
return false
|
return false
|
||||||
|
@ -1323,7 +1333,7 @@ end
|
||||||
minetest.register_on_dignode(function(pos, oldnode, digger)
|
minetest.register_on_dignode(function(pos, oldnode, digger)
|
||||||
if digger == nil then return end
|
if digger == nil then return end
|
||||||
local playername = digger:get_player_name()
|
local playername = digger:get_player_name()
|
||||||
if playername ~= nil and playername ~= "" and oldnode ~= nil then
|
if playername and playername ~= "" and oldnode then
|
||||||
reveal_item(playername, oldnode.name)
|
reveal_item(playername, oldnode.name)
|
||||||
reveal_items_in_inventory(digger)
|
reveal_items_in_inventory(digger)
|
||||||
end
|
end
|
||||||
|
@ -1332,7 +1342,7 @@ end)
|
||||||
minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
|
minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
|
||||||
if puncher == nil then return end
|
if puncher == nil then return end
|
||||||
local playername = puncher:get_player_name()
|
local playername = puncher:get_player_name()
|
||||||
if playername ~= nil and playername ~= "" and node ~= nil then
|
if playername and playername ~= "" and node then
|
||||||
reveal_item(playername, node.name)
|
reveal_item(playername, node.name)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
@ -1340,7 +1350,7 @@ end)
|
||||||
minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack, pointed_thing)
|
minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack, pointed_thing)
|
||||||
if placer == nil then return end
|
if placer == nil then return end
|
||||||
local playername = placer:get_player_name()
|
local playername = placer:get_player_name()
|
||||||
if playername ~= nil and playername ~= "" and itemstack ~= nil and not itemstack:is_empty() then
|
if playername and playername ~= "" and itemstack and not itemstack:is_empty() then
|
||||||
reveal_item(playername, itemstack:get_name())
|
reveal_item(playername, itemstack:get_name())
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
@ -1348,7 +1358,7 @@ end)
|
||||||
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
|
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
|
||||||
if player == nil then return end
|
if player == nil then return end
|
||||||
local playername = player:get_player_name()
|
local playername = player:get_player_name()
|
||||||
if playername ~= nil and playername ~= "" and itemstack ~= nil and not itemstack:is_empty() then
|
if playername and playername ~= "" and itemstack and not itemstack:is_empty() then
|
||||||
reveal_item(playername, itemstack:get_name())
|
reveal_item(playername, itemstack:get_name())
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
@ -1360,7 +1370,7 @@ minetest.register_on_player_inventory_action(function(player, action, inventory,
|
||||||
if action == "take" or action == "put" then
|
if action == "take" or action == "put" then
|
||||||
itemstack = inventory_info.stack
|
itemstack = inventory_info.stack
|
||||||
end
|
end
|
||||||
if itemstack ~= nil and playername ~= nil and playername ~= "" and (not itemstack:is_empty()) then
|
if itemstack and playername and playername ~= "" and (not itemstack:is_empty()) then
|
||||||
reveal_item(playername, itemstack:get_name())
|
reveal_item(playername, itemstack:get_name())
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
@ -1368,9 +1378,9 @@ end)
|
||||||
minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing)
|
minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing)
|
||||||
if user == nil then return end
|
if user == nil then return end
|
||||||
local playername = user:get_player_name()
|
local playername = user:get_player_name()
|
||||||
if playername ~= nil and playername ~= "" and itemstack ~= nil and not itemstack:is_empty() then
|
if playername and playername ~= "" and itemstack and not itemstack:is_empty() then
|
||||||
reveal_item(playername, itemstack:get_name())
|
reveal_item(playername, itemstack:get_name())
|
||||||
if replace_with_item ~= nil then
|
if replace_with_item then
|
||||||
reveal_item(playername, replace_with_item)
|
reveal_item(playername, replace_with_item)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1380,10 +1390,12 @@ minetest.register_on_joinplayer(function(player)
|
||||||
reveal_items_in_inventory(player)
|
reveal_items_in_inventory(player)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
--[[ Periodically check all items in player inventory and reveal them all.
|
--[[
|
||||||
|
Periodically check all items in player inventory and reveal them all.
|
||||||
TODO: Check whether there's a serious performance impact on servers with many players.
|
TODO: Check whether there's a serious performance impact on servers with many players.
|
||||||
TODO: If possible, try to replace this functionality by updating the revealed items as
|
TODO: If possible, try to replace this functionality by updating the revealed items as soon the player obtained a new item (probably needs new Minetest callbacks).
|
||||||
soon the player obtained a new item (probably needs new Minetest callbacks). ]]
|
]]
|
||||||
|
|
||||||
local checktime = 8
|
local checktime = 8
|
||||||
local timer = 0
|
local timer = 0
|
||||||
minetest.register_globalstep(function(dtime)
|
minetest.register_globalstep(function(dtime)
|
||||||
|
|
|
@ -0,0 +1,144 @@
|
||||||
|
# textdomain:doc_items
|
||||||
|
Using it as fuel turns it into: @1.=Używanie tego jako paliwa zamienia to w: @1.
|
||||||
|
@1 seconds=@1 sekund(y)
|
||||||
|
# Item count times item name
|
||||||
|
@1×@2=@1×@2
|
||||||
|
# Itemname (25%)
|
||||||
|
@1 (@2%)=@1 (@2%)
|
||||||
|
# Itemname (<0.5%)
|
||||||
|
@1 (<0.5%)=@1 (<0.5%)
|
||||||
|
# Itemname (ca. 25%)
|
||||||
|
@1 (ca. @2%)=@1 (ca. @2%)
|
||||||
|
# List separator (e.g. “one, two, three”)
|
||||||
|
, =,
|
||||||
|
# Final list separator (e.g. “One, two and three”)
|
||||||
|
and = oraz
|
||||||
|
1 second=1 sekunda
|
||||||
|
A transparent block, basically empty space. It is usually left behind after digging something.=Przezroczysty blok, praktycznie puste miejsce. Jest zwykle pozostawiany po wykopaniu czegoś.
|
||||||
|
Air=Powietrze
|
||||||
|
Blocks=Bloki
|
||||||
|
Building another block at this block will place it inside and replace it.=Postawienie innego bloku w tym bloku postawi ich wewnątrz i zastąpi go.
|
||||||
|
Building this block is completely silent.=Budowanie tego bloku jest bezgłośne.
|
||||||
|
Collidable: @1=Zderzalne: @1
|
||||||
|
Description: @1=Opis: @1
|
||||||
|
Falling blocks can go through this block; they destroy it when doing so.=Spadające bloki mogą przelecieć przez ten blok; niszczą go gdy tak robią.
|
||||||
|
Full punch interval: @1 s=Pełny okres uderzenia: @1 s
|
||||||
|
Hand=Ręka
|
||||||
|
Hold it in your hand, then leftclick to eat it.=Weź to do ręki, następnie kliknij lewy przycisk by je zjeść.
|
||||||
|
Hold it in your hand, then leftclick to eat it. But why would you want to do this?=Weź to do ręki, następnie kliknij lewy przycisk by je zjeść. Ale dlaczego chciałabyś to zrobić?
|
||||||
|
Item reference of all wieldable tools and weapons=Informacje na temat wszystkich narzędzi i broni możliwych do trzymania.
|
||||||
|
Item reference of blocks and other things which are capable of occupying space=Informacje na temat wszystkich bloków i innych obiektów, które są w stanie zajmować miejsce
|
||||||
|
Item reference of items which are neither blocks, tools or weapons (esp. crafting items)=Informacje na temat wszystkich rzeczy, które nie są blokami, narzędziami i broniami (głównie materiały do wytwarzania)
|
||||||
|
Liquids can flow into this block and destroy it.=Płyny mogą wpłynąć na ten blok i go zniszczyć.
|
||||||
|
Maximum stack size: @1=Maksymalny rozmiar grupy: @1
|
||||||
|
Mining level: @1=Poziom kopania: @1
|
||||||
|
Mining ratings:=Klasyfikacja kopania
|
||||||
|
• @1, rating @2: @3 s - @4 s=• @1, klasyfikacja @2: @3 s - @4 s
|
||||||
|
• @1, rating @2: @3 s=• @1, klasyfikacja @2: @3 s
|
||||||
|
Mining times:=Czas wykopania:
|
||||||
|
Mining this block is completely silent.=Wykopanie tego bloku jet bezgłośne.
|
||||||
|
Miscellaneous items=Różne rzeczy
|
||||||
|
No=Nie
|
||||||
|
Pointable: No=Wskazywalne: Nie
|
||||||
|
Pointable: Only by special items=Wskazywalne: Tylko przez specjalne przedmioty
|
||||||
|
Pointable: Yes=Wskazywalne: Tak
|
||||||
|
Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.=Uderzanie tym blokiem nie działa tak jak zwykle; walka wręcz i kopanie są niemożliwe lub działają inaczej.
|
||||||
|
Punches with this item don't work as usual; melee combat and mining are either not possible or work differently.=Uderzanie tym przedmiotem nie działa tak jak zwykle; walka wręcz i kopanie są niemożliwe lub działają inaczej.
|
||||||
|
Punches with this tool don't work as usual; melee combat and mining are either not possible or work differently.=Uderzanie tym narzędziem nie działa tak jak zwykle; walka wręcz i kopanie są niemożliwe lub działają inaczej.
|
||||||
|
Range: @1=Zasięg: @1
|
||||||
|
# Range: <Hand> (<Range>)
|
||||||
|
Range: @1 (@2)=Zasięg @1 (@2)
|
||||||
|
Range: 4=Zasięg: 4
|
||||||
|
# Rating used for digging times
|
||||||
|
Rating @1=Klasyfikacja @1
|
||||||
|
# @1 is minimal rating, @2 is maximum rating
|
||||||
|
Rating @1-@2=Klasyfikacja od @1 do @2
|
||||||
|
The fall damage on this block is increased by @1%.=Obrażenia od upadku na tym bloku są zwiększone o @1%.
|
||||||
|
The fall damage on this block is reduced by @1%.=Obrażenia od upadku na tym bloku są zmniejszone o @1%.
|
||||||
|
This block allows light to propagate with a small loss of brightness, and sunlight can even go through losslessly.=Ten blok przepuszcza światło z niewielką stratą jasności, a światło słoneczne przepuszcza bezstratnie.
|
||||||
|
This block allows light to propagate with a small loss of brightness.=Ten blok przepuszcza światło z niewielką stratą jasności.
|
||||||
|
This block allows sunlight to propagate without loss in brightness.=Ten blok przepuszcza światło słoneczne bez straty jasności.
|
||||||
|
This block belongs to the @1 group.=Ten blok należy do grupy @1.
|
||||||
|
This block belongs to these groups: @1.=Ten blok należy do tych grup: @1.
|
||||||
|
This block can be climbed.=Na ten blok można się wspiąć.
|
||||||
|
This block can be destroyed by any mining tool immediately.=Ten blok może być zniszczony przez dowolne narzędzie do kopania natychmiastowo.
|
||||||
|
This block can be destroyed by any mining tool in half a second.=Ten blok może być zniszczony przez dowolne narzędzie do kopania w pół sekundy.
|
||||||
|
This block can be mined by any mining tool immediately.=Ten blok może być wykopany przez dowolne narzędzie do kopania natychmiastowo.
|
||||||
|
This block can be mined by any mining tool in half a second.=Ten blok może być wykopany przez dowolne narzędzie do kopania w pół sekundy.
|
||||||
|
This block can be mined by mining tools which match any of the following mining ratings and its toughness level.=Ten blok może zostać wykopany przez narzędzia do kopania, które pasują do którychkolwiek klasyfikacji kopania i poziomu twardości.
|
||||||
|
This block can not be destroyed by ordinary mining tools.=Ten blok nie może być zniszczony przez typowe narzędzia do kopania.
|
||||||
|
This block can not be mined by ordinary mining tools.=Ten blok nie może być wykopany przez typowe narzędzia do kopania.
|
||||||
|
This block can serve as a smelting fuel with a burning time of @1.=Ten blok może być wykorzystany jako paliwo do przetapiania z czasem palenia @1.
|
||||||
|
This block causes a damage of @1 hit point per second.=Ten blok zadaje @1 obrażenie na sekundę.
|
||||||
|
This block causes a damage of @1 hit points per second.=Ten blok zadaje @1 obrażeń na sekundę.
|
||||||
|
This block connects to blocks of the @1 group.=Ten blok łączy się do bloków z grupy @1.
|
||||||
|
This block connects to blocks of the following groups: @1.=Ten blok łączy się z blokami z następujących grup: @1.
|
||||||
|
This block connects to these blocks: @1.=Ten blok łączy się z tymi blokami: @1.
|
||||||
|
This block connects to this block: @1.=Ten blok łączy się z tym blokiem: @1.
|
||||||
|
This block decreases your breath and causes a drowning damage of @1 hit point every 2 seconds.=Ten blok zmniejsza twój tlen i zadaje @1 obrażenie co 2 sekundy.
|
||||||
|
This block decreases your breath and causes a drowning damage of @1 hit points every 2 seconds.=Ten blok zmniejsza twój tlen i zadaje @1 obrażeń co 2 sekundy.
|
||||||
|
This block is a light source with a light level of @1.=Ten blok jest źródłem światła z poziomem oświetlenia @1.
|
||||||
|
This block glows faintly with a light level of @1.=Ten blok ma poświatę o poziomie oświetlenia @1.
|
||||||
|
This block is a building block for creating various buildings.=Ten blok jest blokiem budowlanym do tworzenia różnych budowli.
|
||||||
|
This block is a liquid with these properties:=Ten blok jest płynem z tymi własnościami:
|
||||||
|
This block is affected by gravity and can fall.=Na ten blok wpływa grawitacja i może upaść.
|
||||||
|
This block is completely silent when mined or built.=Ten blok jest bezgłośny przy kopaniu i budowaniu.
|
||||||
|
This block is completely silent when walked on, mined or built.=Ten blok jest bezgłośny gdy się po nim chodzi, kopie lub buduje.
|
||||||
|
This block is destroyed when a falling block ends up inside it.=Ten blok jest zniszczony gdy upadający blok upadnie w niego.
|
||||||
|
This block negates all fall damage.=Ten blok neguje wszystkie obrażenia od upadku.
|
||||||
|
This block points to liquids.=Ten blok wskazuje na płyny.
|
||||||
|
This block will drop as an item when a falling block ends up inside it.=Ten blok wypadnie jako przedmiot gdy blok upadnie na niego.
|
||||||
|
This block will drop as an item when it is not attached to a surrounding block.=Ten blok wypadnie jako przedmiot gdy nie jest połączony z sąsiadującym blokiem.
|
||||||
|
This block will drop as an item when no collidable block is below it.=Ten blok wypadnie jako przedmiot gdy nie będzie pod nim zderzalnego bloku.
|
||||||
|
This block will drop the following items when mined: @1.=Z tego bloku wypadną następujące przedmioty po wykopaniu: @1.
|
||||||
|
This block will drop the following when mined: @1×@2.=Z tego bloku wypadną następujące rzeczy po wykopaniu: @1×@2.
|
||||||
|
This block will drop the following when mined: @1.=Z tego bloku wypadną następujące rzeczy po wykopaniu: @1.
|
||||||
|
This block will drop the following when mined: @1.=Z tego bloku wypadną następujące rzeczy po wykopaniu: @1.
|
||||||
|
This block will make you bounce off with an elasticity of @1%.=Od tego bloku odbijesz się z elastycznością @1%.
|
||||||
|
This block will randomly drop one of the following when mined: @1.=Z tego bloku wypadnie losowo jedna z następujących rzeczy po wykopaniu: @1.
|
||||||
|
This block will randomly drop up to @1 drops of the following possible drops when mined: @2.=Z tego bloku losowo wypadnie maksymalnie @1 rzeczy spośród tego zbioru: @2.
|
||||||
|
This block won't drop anything when mined.=Z tego bloku nic nie wypadnie po wykopaniu.
|
||||||
|
This is a decorational block.=Ten blok jest dekoracyjny.
|
||||||
|
This is a melee weapon which deals damage by punching.=To jest broń do walki wręcz, która zadaje obrażenia przy uderzaniu.
|
||||||
|
Maximum damage per hit:=Maksymalne obrażenia przy uderzeniu:
|
||||||
|
This item belongs to the @1 group.=Ten przedmiot należy do grupy @1.
|
||||||
|
This item belongs to these groups: @1.=Ten przedmiot należy do tych grup: @1.
|
||||||
|
This item can serve as a smelting fuel with a burning time of @1.=Ten przedmiot może być wykorzystany jako paliwo do przetapiania z czasem palenia @1.
|
||||||
|
This item is primarily used for crafting other items.=Ten przedmiot jest głównie wykorzystywany do wytwarzania innych przedmiotów.
|
||||||
|
This item points to liquids.=Ten przedmiot wskazuje na płyny.
|
||||||
|
This tool belongs to the @1 group.=To narzędzie należy do grupy @1.
|
||||||
|
This tool belongs to these groups: @1.=To narzędzie należy do tych grup: @1.
|
||||||
|
This tool can serve as a smelting fuel with a burning time of @1.=To narzędzie może być wykorzystany jako paliwo do przetapiania z czasem palenia @1.
|
||||||
|
This tool is capable of mining.=Tym narzędziem można kopać.
|
||||||
|
Maximum toughness levels:=Maksymalna poziom twardości:
|
||||||
|
This tool points to liquids.=To narzędzie wskazuje na płyny.
|
||||||
|
Tools and weapons=Narzędzia i bronie
|
||||||
|
Unknown Node=Nieznany węzeł
|
||||||
|
Usage help: @1=Sposób użycia: @1
|
||||||
|
Walking on this block is completely silent.=Chodzenie po tym bloku jest bezgłośne.
|
||||||
|
Whenever you are not wielding any item, you use the hand which acts as a tool with its own capabilities. When you are wielding an item which is not a mining tool or a weapon it will behave as if it would be the hand.=Gdy nie trzymasz żadnego przedmiotu używasz swojej ręki która działa jak narzędzie ze swoimi własnościami. Gdy trzymasz przedmiot, który nie jest narzędziem do kopania lub bronią, będzie się ono zachowywało jakby było ręką.
|
||||||
|
Yes=Tak
|
||||||
|
You can not jump while standing on this block.=Nie możesz skakać gdy stoisz na tym bloku.
|
||||||
|
any level=dowolny poziom
|
||||||
|
level 0=poziom 0
|
||||||
|
level 0-@1=poziom 0-@1
|
||||||
|
unknown=nieznane
|
||||||
|
Unknown item (@1)=Nieznany przedmiot (@1)
|
||||||
|
• @1: @2=• @1: @2
|
||||||
|
• @1: @2 HP=• @1: @2 HP
|
||||||
|
• @1: @2, @3=• @1: @2, @3
|
||||||
|
• Flowing range: @1=• Zasięg płynięcia: @1
|
||||||
|
• No flowing=• Brak płynięcia
|
||||||
|
• Not renewable=• Nieodnawialne
|
||||||
|
• Renewable=• Odnawialne
|
||||||
|
• Viscosity: @1=• Lepkość: @1
|
||||||
|
Itemstring: "@1"=Id przedmiotu: "@1"
|
||||||
|
Durability: @1 uses=Wytrzymałość: @1 użyć
|
||||||
|
Durability: @1=Wytrzymałość: @1
|
||||||
|
Mining durability:=Wytrzymałość kopania:
|
||||||
|
• @1, level @2: @3 uses=• @1, poziom @2: @3 użyć
|
||||||
|
• @1, level @2: Unlimited=• @1, poziom @2: Nielimitowane
|
||||||
|
This block's rotation is affected by the way you place it: Place it on the floor or ceiling for a vertical orientation; place it at the side for a horizontal orientation. Sneaking while placing it leads to a perpendicular orientation instead.=Na rotację tego bloku wpływa sposób postawienia: Postaw go na podłodze lub suficie aby uzyskać pionową orientację; postaw go na boku by uzyskać poziomą orientację. Skradanie się podczas postawiania sprawia, że zostanie postawiony prostopadle.
|
||||||
|
Toughness level: @1=Poziom twardości: @1
|
||||||
|
This block is slippery.=Ten blok jest śliski.
|
||||||
|
|
|
@ -726,7 +726,7 @@ local function make_formspec(name)
|
||||||
return concat(fs)
|
return concat(fs)
|
||||||
end
|
end
|
||||||
|
|
||||||
local show_fs = function(player, name)
|
local function show_fs(player, name)
|
||||||
if sfinv_only then
|
if sfinv_only then
|
||||||
sfinv.set_player_inventory_formspec(player)
|
sfinv.set_player_inventory_formspec(player)
|
||||||
else
|
else
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
# textdomain: mcl_craftguide
|
||||||
|
Any shulker box=Dowolna skrzynia shulkerowa
|
||||||
|
Any wool=Dowolna wełna
|
||||||
|
Any wood planks=Dowolne deski
|
||||||
|
Any wood=Dowolne drewno
|
||||||
|
Any sand=Dowolny piasek
|
||||||
|
Any normal sandstone=Dowolny zwykły piaskowiec
|
||||||
|
Any red sandstone=Dowolny czerwony piaskowiec
|
||||||
|
Any carpet=Dowolny dywan
|
||||||
|
Any dye=Dowolna farba
|
||||||
|
Any water bucket=Dowolne wiadro wody
|
||||||
|
Any flower=Dowolny kwiat
|
||||||
|
Any mushroom=Dowolny grzyb
|
||||||
|
Any wooden slab=Dowolny drewniana płyta
|
||||||
|
Any wooden stairs=Dowolne drewniane schody
|
||||||
|
Any coal=Dowolny węgiel
|
||||||
|
Any kind of quartz block=Dowolny typ bloku kwarcu
|
||||||
|
Any kind of purpur block=Dowolny typ bloku purpury
|
||||||
|
Any stone bricks=Dowolne kamienne cegły
|
||||||
|
Any stick=Dowolny patyk
|
||||||
|
Any item belonging to the @1 group=Dowolny przedmiot z grupy @1
|
||||||
|
Any item belonging to the groups: @1=Dowolny przedmiot należący do grup: @1
|
||||||
|
Search=Wyszukaj
|
||||||
|
Reset=Zresetuj
|
||||||
|
Previous page=Poprzednia strona
|
||||||
|
Next page=Następna strona
|
||||||
|
Usage @1 of @2=Użycie @1 z @2
|
||||||
|
Recipe @1 of @2=Receptura @1 z @2
|
||||||
|
Burning time: @1=Czas wypalenia: @1
|
||||||
|
Cooking time: @1=Czas pieczenia: @1
|
||||||
|
Recipe is too big to be displayed (@1×@2)=Receptura jest zbyt długa do wyświetlenia (@1×@2)
|
||||||
|
Shapeless=Bezkształtne
|
||||||
|
Cooking=Pieczenie
|
||||||
|
Increase window size=Zwiększ rozmiar okna
|
||||||
|
Decrease window size=Zmniejsz rozmiar okna
|
||||||
|
No item to show=Brak przedmiotów do pokazania
|
||||||
|
Collect items to reveal more recipes=Zbierz przedmioty by odkryć więcej receptur
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
local S = minetest.get_translator("mcl_doc")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
-- Disable built-in factoids; it is planned to add custom ones as replacements
|
-- Disable built-in factoids; it is planned to add custom ones as replacements
|
||||||
doc.sub.items.disable_core_factoid("node_mining")
|
doc.sub.items.disable_core_factoid("node_mining")
|
||||||
|
@ -50,8 +50,8 @@ end)
|
||||||
|
|
||||||
doc.sub.items.register_factoid("nodes", "groups", function(itemstring, def)
|
doc.sub.items.register_factoid("nodes", "groups", function(itemstring, def)
|
||||||
local formstring = ""
|
local formstring = ""
|
||||||
if def.groups.leafdecay ~= nil then
|
if def.groups.leafdecay then
|
||||||
if def.drop ~= "" and def.drop ~= nil and def.drop ~= itemstring then
|
if def.drop ~= "" and def.drop and def.drop ~= itemstring then
|
||||||
formstring = S("This block quickly decays when there is no wood block of any species within a distance of @1. When decaying, it disappears and may drop one of its regular drops. The block does not decay when the block has been placed by a player.", def.groups.leafdecay)
|
formstring = S("This block quickly decays when there is no wood block of any species within a distance of @1. When decaying, it disappears and may drop one of its regular drops. The block does not decay when the block has been placed by a player.", def.groups.leafdecay)
|
||||||
else
|
else
|
||||||
formstring = S("This block quickly decays and disappears when there is no wood block of any species within a distance of @1. The block does not decay when the block has been placed by a player.", def.groups.leafdecay)
|
formstring = S("This block quickly decays and disappears when there is no wood block of any species within a distance of @1. The block does not decay when the block has been placed by a player.", def.groups.leafdecay)
|
||||||
|
@ -399,7 +399,7 @@ doc.sub.items.register_factoid("tools", "misc", function(itemstring, def)
|
||||||
local formstring = ""
|
local formstring = ""
|
||||||
-- Weapon data
|
-- Weapon data
|
||||||
local damage_groups = tool_capabilities.damage_groups
|
local damage_groups = tool_capabilities.damage_groups
|
||||||
if damage_groups ~= nil and damage_groups.fleshy ~= nil then
|
if damage_groups and damage_groups.fleshy then
|
||||||
formstring = formstring .. S("This is a melee weapon which deals damage by punching.") .. "\n"
|
formstring = formstring .. S("This is a melee weapon which deals damage by punching.") .. "\n"
|
||||||
|
|
||||||
-- Damage groups
|
-- Damage groups
|
||||||
|
@ -408,7 +408,7 @@ doc.sub.items.register_factoid("tools", "misc", function(itemstring, def)
|
||||||
|
|
||||||
-- Full punch interval
|
-- Full punch interval
|
||||||
local punch = 1.0
|
local punch = 1.0
|
||||||
if tool_capabilities.full_punch_interval ~= nil then
|
if tool_capabilities.full_punch_interval then
|
||||||
punch = tool_capabilities.full_punch_interval
|
punch = tool_capabilities.full_punch_interval
|
||||||
end
|
end
|
||||||
formstring = formstring .. S("Full punch interval: @1 s", string.format("%.1f", punch))
|
formstring = formstring .. S("Full punch interval: @1 s", string.format("%.1f", punch))
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
# textdomain: mcl_doc
|
||||||
|
Water can flow into this block and cause it to drop as an item.=Woda może wpłynąć na ten blok i sprawić, że on wypadnie.
|
||||||
|
This block can be turned into dirt with a hoe.=Ten blok może być zamieniony w ziemię za pomocą motyki.
|
||||||
|
This block can be turned into farmland with a hoe.=Ten blok może być zamieniony w ziemię uprawną za pomocą motyki.
|
||||||
|
This block acts as a soil for all saplings.=Ten blok może być glebą dla wszystkich sadzonek.
|
||||||
|
This block acts as a soil for some saplings.=Ten blok może być glebą dla niektórych sadzonek.
|
||||||
|
Sugar canes will grow on this block.=Trzcina cukrowa będzie rosnąć na tym bloku.
|
||||||
|
Nether wart will grow on this block.=Netherowa brodawka będzie rosnąć na tym bloku.
|
||||||
|
This block quickly decays when there is no wood block of any species within a distance of @1. When decaying, it disappears and may drop one of its regular drops. The block does not decay when the block has been placed by a player.=Ten blok szybko zanika gdy w odległości @1 nie ma żadnego bloku drewna dowolnego rodzaju. Gdy zanika może wyrzucić z siebie jeden z przedmiotów typowo wyrzucanych.
|
||||||
|
This block quickly decays and disappears when there is no wood block of any species within a distance of @1. The block does not decay when the block has been placed by a player.=Ten blok szybko zanika gdy w odległości @1 nie ma żadnego bloku drewna dowolnego rodzaju. Ten blok nie zanika gdy został postawiony przez gracza.
|
||||||
|
This plant can only grow on grass blocks and dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.=Ta roślina może rosnąć tylko na blokach trawy i ziemi. Aby przetrwać musi mieć nieblokowany dostęp do nieba powyżej lub być oświetlana światłem o poziomie 8 lub wyższym.
|
||||||
|
This plant can grow on grass blocks, podzol, dirt and coarse dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.=Ta roślina może rosnąć na blokach trawy, bielicy, ziemi i twardej ziemi. Aby przetrwać musi mieć nieblokowany dostęp do nieba powyżej lub być oświetlana światłem o poziomie 8 lub wyższym.
|
||||||
|
This block is flammable.=Ten blok jest łatwopalny.
|
||||||
|
This block destroys any item it touches.=Ten blok niszczy się gdy dowolny przedmiot go dotyka.
|
||||||
|
To eat it, wield it, then rightclick.=Aby to zjeść, weź to, następnie kliknij prawy przycisk myszy.
|
||||||
|
You can eat this even when your hunger bar is full.=Możesz to zjeść nawet gdy twój pasek nasycenia jest pełny.
|
||||||
|
You cannot eat this when your hunger bar is full.=Nie możesz tego jeść gdy twój pasek nasycenia jest pełny.
|
||||||
|
To drink it, wield it, then rightclick.=Aby to wypić, weź to, następnie kliknij prawy przycisk myszy.
|
||||||
|
You cannot drink this when your hunger bar is full.=Nie możesz tego pić gdy twój pasek nasycenia jest pełny.
|
||||||
|
To consume it, wield it, then rightclick.=Aby to skonsumować, weź to, następnie kliknij prawy przycisk myszy.
|
||||||
|
You cannot consume this when your hunger bar is full.=Nie możesz tego skonsumować gdy twój pasek nasycenia jest pełny.
|
||||||
|
You have to wait for about 2 seconds before you can eat or drink again.=Musisz poczekać przez 2 sekundy zanim znów będziesz mogła jeść lub pić.
|
||||||
|
Hunger points restored: @1=Przywrócone punkty głodu: @1
|
||||||
|
Saturation points restored: @1%.1f=Przywrócone punkty nasycenia: @1%.1f
|
||||||
|
This item can be repaired at an anvil with: @1.=Ten przedmiot może być naprawiony przy kowadle przy użyciu: @1.
|
||||||
|
This item can be repaired at an anvil with any wooden planks.=Ten przedmiot może być naprawiony przy kowadle przy użyciu desek.
|
||||||
|
This item can be repaired at an anvil with any item in the “@1” group.=Ten przedmiot może być naprawiony przy kowadle przy użyciu dowolnego przedmiotu z grupy "@1".
|
||||||
|
This item cannot be renamed at an anvil.=Ten przedmiot nie może być przemianowany przy kowadle.
|
||||||
|
This block crushes any block it falls into.=Ten blok rozbija dowolny blok na który spadnie.
|
||||||
|
When this block falls deeper than 1 block, it causes damage to any player it hits. The damage dealt is B×2−2 hit points with B @= number of blocks fallen. The damage can never be more than 40 HP.=Gdy ten blok spada więcej niż o 1 blok, zadaje on obrażenia dowolnemu graczowi którego uderzy. Zadaje on B×2−2 punktów obrażeń, gdzie B @= liczba bloków o który spadł.
|
||||||
|
Diamond Pickaxe=Diamentowy kilof
|
||||||
|
Iron Pickaxe=Żelazny kilof
|
||||||
|
Stone Pickaxe=Kamienny kilof
|
||||||
|
Golden Pickaxe=Złoty kilof
|
||||||
|
Wooden Pickaxe=Drewniany kilof
|
||||||
|
Diamond Axe=Diamentowa siekiera
|
||||||
|
Iron Axe=Żelazna siekiera
|
||||||
|
Stone Axe=Kamienna siekiera
|
||||||
|
Golden Axe=Złota siekiera
|
||||||
|
Wooden Axe=Drewniana siekiera
|
||||||
|
Diamond Shovel=Diamentowa łopata
|
||||||
|
Iron Shovel=Żelazna łopata
|
||||||
|
Stone Shovel=Kamienna łopata
|
||||||
|
Golden Shovel=Złota łopata
|
||||||
|
Wooden Shovel=Drewniana łopata
|
||||||
|
This block can be mined by any tool instantly.=Ten blok może zostać wykopany dowolnym narzędziem natychmiastowo.
|
||||||
|
This block can be mined by:=Ten blok może być wykopany przy użyciu:
|
||||||
|
Hardness: ∞=Twardość: ∞
|
||||||
|
Hardness: @1=Twardość: @1
|
||||||
|
This block will not be destroyed by TNT explosions.=Ten blok nie będzie zniszczony przez eksplozję trotylu.
|
||||||
|
This block drops itself when mined by shears.=Ten blok wyrzuca siebie gdy wykopany nożycami.
|
||||||
|
@1×@2=@1×@2
|
||||||
|
This blocks drops the following when mined by shears: @1=Ten blok wyrzuca siebie gdy wykopany nożycami.
|
||||||
|
, =,
|
||||||
|
• Shears=• Nożyce
|
||||||
|
• Sword=• Miecz
|
||||||
|
• Hand=• Ręka
|
||||||
|
This is a melee weapon which deals damage by punching.=To jest broń ręczna która zadaje obrażenia przy uderzenia.
|
||||||
|
Maximum damage: @1 HP=Maksymalne obrażenia: @1 HP
|
||||||
|
Full punch interval: @1 s=Pełny okres uderzenia: @1 s
|
||||||
|
This tool is capable of mining.=To narzędzie jest w stanie kopać.
|
||||||
|
Mining speed: @1=Szybkość kopania: @1
|
||||||
|
Painfully slow=Boleśnie powolne
|
||||||
|
Very slow=Bardzo wolne
|
||||||
|
Slow=Wolne
|
||||||
|
Fast=Szybkie
|
||||||
|
Very fast=Bardzo szybkie
|
||||||
|
Extremely fast=Ekstremalnie szybkie
|
||||||
|
Instantaneous=Natychmiastowe
|
||||||
|
@1 uses=@1 użyć
|
||||||
|
Unlimited uses=Nielimitowane użycia
|
||||||
|
Block breaking strength: @1=Siła niszczenia bloku: @1
|
||||||
|
Mining durability: @1=Wytrzymałość kopania: @1
|
||||||
|
Armor points: @1=Punkty zbroi: @1
|
||||||
|
Armor durability: @1=Wytrzymałość zbroi: @1
|
||||||
|
It can be worn on the head.=Może być noszony na głowie.
|
||||||
|
It can be worn on the torso.=Może być noszone na piersi.
|
||||||
|
It can be worn on the legs.=Może być noszony na nogach.
|
||||||
|
It can be worn on the feet.=Może być noszony na stopach.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Basic help for MCL2. Fork of doc_basics
|
Basic help for MCL2. Fork of doc_basics
|
||||||
]]
|
]]
|
||||||
|
|
||||||
local S = minetest.get_translator("mcl_doc_basics")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
doc.add_category("basics",
|
doc.add_category("basics",
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,512 @@
|
||||||
|
# textdomain: mcl_doc_basics
|
||||||
|
Basics=Podstawy
|
||||||
|
Everything you need to know to get started with playing=Wszystko co musisz wiedzieć by zacząć grać
|
||||||
|
Advanced usage=Zaawansowane użycie
|
||||||
|
Advanced information which may be nice to know, but is not crucial to gameplay=Zaawansowane informacje które mogą być przydatne, ale nie są niezbędne podczas grania
|
||||||
|
Quick start=Szybki start
|
||||||
|
This is a very brief introduction to the basic gameplay:=Jest to bardzo krótki wstęp do podstawowej rozgrywki:
|
||||||
|
Basic controls:=Podstawowe sterowanie:
|
||||||
|
• Move mouse to look=• Porusz myszą by się rozglądać
|
||||||
|
• [W], [A], [S] and [D] to move=• Użyj [W], [A], [S] i [D] aby się poruszać
|
||||||
|
• [E] to sprint=• Użyj [E] aby biegać
|
||||||
|
• [Space] to jump or move upwards=• Użyj [Spacja] aby skakać lub poruszać się w górę
|
||||||
|
• [Shift] to sneak or move downwards=• Użyj [Shift] aby się skradać lub poruszać w dół
|
||||||
|
• Mouse wheel or [1]-[9] to select item=• Użyj kółka myszy lub klawiszy [1]-[9] aby wybrać przedmiot
|
||||||
|
• Left-click to mine blocks or attack=• Kliknij lewym przyciskiem by kopać bloki lub atakować
|
||||||
|
• Recover from swings to deal full damage=• Poczekaj aż ochłoniesz po zamachu, aby zadać pełne obrażenia
|
||||||
|
• Right-click to build blocks and use things=• Kliknij prawym przyciskiem aby kłaść bloki lub używać rzeczy
|
||||||
|
• [I] for the inventory=• Użyj [I] aby otworzyć ekwipunek
|
||||||
|
• First items in inventory appear in hotbar below=• Pierwsze przedmioty w ekwipunku pojawią się w pasku szybkiego dostępu
|
||||||
|
• Lowest row in inventory appears in hotbar below=• Najniższy wiersz ekwipunku pojawi się w pasku szybkiego dostępu
|
||||||
|
• [Esc] to close this window=• Użyj [Esc] aby zamknąć okno
|
||||||
|
How to play:=Jak grać:
|
||||||
|
• Punch a tree trunk until it breaks and collect wood=• Uderzaj pień drzewa aż się zniszczy i zbierz drewno
|
||||||
|
• Place the wood into the 2×2 grid (your “crafting grid”) in your inventory menu and craft 4 wood planks=• Umieść drewno w siatce 2×2 (twojej "siatce do wytwarzania") w twoim ekwipunku i wytwórz 4 deski
|
||||||
|
• Place them in a 2×2 shape in the crafting grid to craft a crafting table=• Umieść je w kształt 2×2 w twojej siatce do wytwarzania i wytwórz stół rzemieślniczy
|
||||||
|
• Place the crafting table on the ground=• Umieść stół rzemieślniczy na ziemi
|
||||||
|
• Rightclick it for a 3×3 crafting grid=• Kliknij go prawym przyciskiem aby zyskać dostęp do siatki 3×3
|
||||||
|
• Use the crafting guide (book icon) to learn all the possible crafting recipes=• Użyj przewodnika do wytwarzania (ikona książki) aby poznać wszystkie możliwe receptury do wytwarzania
|
||||||
|
• Craft a wooden pickaxe so you can dig stone=• Wytwórz drewniany kilof aby wykopać kamień
|
||||||
|
• Different tools break different kinds of blocks. Try them out!=• Różne narzędzia są w stanie zniszczyć różne typy bloków. Wypróbuj je!
|
||||||
|
• Read entries in this help to learn the rest=• Przeczytaj inne wpisy aby dowiedzieć się resztę
|
||||||
|
• Continue playing as you wish. There's no goal. Have fun!=• Graj tak jak chcesz. Nie ma żadnego celu. Miłej zabawy!
|
||||||
|
Minetest=Minetest
|
||||||
|
Minetest is a free software game engine for games based on voxel gameplay, inspired by InfiniMiner, Minecraft, and the like. Minetest was originally created by Perttu Ahola (alias “celeron55”).=Minetest jest wolnym oprogramowaniem i silnikiem do gier opartych o rozgrywkę na voxelach, inspirowanym przez InfiniMinera, Minecrafta i podobnym. Minetest był oryginalnie stworzony przez Perttu Ahola (alias “celeron55”).
|
||||||
|
The player is thrown into a huge world made out of cubes or blocks. These cubes usually make the landscape they blocks can be removed and placed almost entirely freely. Using the collected items, new tools and other items can be crafted. Games in Minetest can, however, be much more complex than this.=Gracz jest wrzucony do ogromnego świata stworzonego z sześcianów lub bloków. Te sześciany zwykle tworzą widoczny krajobraz i mogą być usuwane oraz stawiane niemal całkowicie dowolnie. Korzystając z zebranych przedmiotów nowe narzędzia i inne rzeczy mogą zostać utworzone. Gry w Minetest mogą jednak być dużo bardziej skomplikowane niż to.
|
||||||
|
A core feature of Minetest is the built-in modding capability. Mods modify existing gameplay. They can be as simple as adding a few decorational blocks or be very complex by e.g. introducing completely new gameplay concepts, generating a completely different kind of world, and many other things.=Główną cechą Minetesta jest wbudowana możliwość budowania. Mody modyfikują istniejącą rozgrywkę. Mogą być tak proste jak dodanie kilku bloków dekoracyjnych, lub bardzo skomplikowane np. wprowadzając zupełnie nowe sposoby rozgrywki, generując zupełnie inny rodzaj świata i wiele innych rzeczy.
|
||||||
|
Minetest can be played alone or online together with multiple players. Online play will work out of the box with any mods, with no need for additional software as they are entirely provided by the server.=W Minetest można grać samotnie lub online z kilkoma graczami. Gra online będzie działać od razu z modami, bez potrzeby dodatkowych programów jako, że są one całkowicie dostarczane przez serwer.
|
||||||
|
Minetest is usually bundled with a simple default game, named “Minetest Game” (shown in images 1 and 2). You probably already have it. Other games for Minetest can be downloaded from the official Minetest forums <https://forum.minetest.net/viewforum.php?f@=48>.=Minetest jest zwykle dystrybuowany wraz z prostą domyślną grą, nazwaną "Gra Minetest" (pokazana na obrazka 1 i 2). Prawdopodobnie już ją masz. Inne gry dla Minetesta mogą być pobrane z oficjalnych forum Minetesta <https://forum.minetest.net/viewforum.php?f@=48>.
|
||||||
|
Minetest as well as Minetest Game are both unfinished at the moment, so please forgive us when not everything works out perfectly.=Zarówno Minetest jak i Gra Minetest są aktualnie niedokończone, więc prosimy o wybaczenie jeśli nie wszystkie rzeczy działają idealnie.
|
||||||
|
Sneaking=Skradanie
|
||||||
|
Sneaking makes you walk slower and prevents you from falling off the edge of a block.=Skradanie sprawia, że chodzisz wolniej i zapobiega spadaniu z bloków.
|
||||||
|
To sneak, hold down the sneak key (default: [Shift]). When you release it, you stop sneaking. Careful: When you release the sneak key at a ledge, you might fall!=Aby się skradać przytrzymaj przycisk skradania (domyślnie: [Shift]). Gdy go puścisz, przestaniesz się skradać. Ostrożnie: Jeśli puścisz przycisk skradania na krawędzi możesz spaść!
|
||||||
|
• Sneak: [Shift]=• Skradanie: [Shift]
|
||||||
|
Sneaking only works when you stand on solid ground, are not in a liquid and don't climb.=Skradanie działa tylko gdy stoisz na stałym gruncie, nie w wodzie oraz nie podczas wspinania.
|
||||||
|
If you jump while holding the sneak key, you also jump slightly higher than usual.=Jeśli skoczysz podczas skradania, skoczysz nieco wyżej niż zwykle.
|
||||||
|
Sneaking might be disabled by mods. In this case, you still walk slower by sneaking, but you will no longer be stopped at ledges.=Skradanie może być wyłączone przez mody. W takim przypadku wciąż będziesz chodziła wolniej przy skradaniu, ale wciąż będziesz mogła spaść z bloków.
|
||||||
|
Controls=Sterowanie
|
||||||
|
These are the default controls:=To jest domyślne sterowanie:
|
||||||
|
Basic movement:=Podstawy poruszania:
|
||||||
|
• Moving the mouse around: Look around=• Poruszanie myszką: Rozglądnij się
|
||||||
|
• W: Move forwards=• W: Idź naprzód
|
||||||
|
• A: Move to the left=• A: Idź w lewo
|
||||||
|
• D: Move to the right=• D: Idź w prawo
|
||||||
|
• S: Move backwards=• S: Idź w tył
|
||||||
|
• E: Sprint=• E: Biegnij
|
||||||
|
While standing on solid ground:=Podczas stania na stałym gruncie:
|
||||||
|
• Space: Jump=• Spacja: Skok
|
||||||
|
• Shift: Sneak=• Shift: Skradanie
|
||||||
|
While on a ladder, swimming in a liquid or fly mode is active=Podczas wspinania, pływania w płynie lub aktywnego trybu latania:
|
||||||
|
• Space: Move up=• Spacja: W górę
|
||||||
|
• Shift: Move down=• Shift: W dół
|
||||||
|
Extended movement (requires privileges):=Rozszerzone poruszanie:
|
||||||
|
• J: Toggle fast mode, makes you run or fly fast (requires “fast” privilege)=• J: Przełącz tryb szybki, co umożliwia szybkie bieganie i latanie (wymaga przywileju "fast")
|
||||||
|
• K: Toggle fly mode, makes you move freely in all directions (requires “fly” privilege)=• K: Przełącz tryb latania, co umożliwia swobodne poruszanie w dowolnym kierunku (wymaga przywileju "fly")
|
||||||
|
• H: Toggle noclip mode, makes you go through walls in fly mode (requires “noclip” privilege)=• H: Przełącz tryb noclip, co umożliwia przechodzenie przez ściany w trybie latania (wymaga przywileju "noclip")
|
||||||
|
• E: Move even faster when in fast mode=• E: Poruszaj się jeszcze szybciej w trybie szybkim
|
||||||
|
• E: Walk fast in fast mode=• Poruszaj się szybciej w trybie szybkim
|
||||||
|
World interaction:=Interakcja ze światem:
|
||||||
|
• Left mouse button: Punch / mine blocks / take items=• Lewy przycisk myszy: Uderz / kop bloki / weź przedmiot
|
||||||
|
• Left mouse button: Punch / mine blocks=• Lewy przycisk myszy: Uderz / kop bloki
|
||||||
|
• Right mouse button: Build or use pointed block=• Prawy przycisk myszy: Zbuduj lub użyj wskazywany blok
|
||||||
|
• Shift+Right mouse button: Build=• Shift+Prawy przycisk myszy: Zbuduj
|
||||||
|
• Roll mouse wheel: Select next/previous item in hotbar=• Kręć kółkiem myszy: Wybierz następny/poprzedni przedmiot w pasku szybkiego dostępu
|
||||||
|
• Roll mouse wheel / B / N: Select next/previous item in hotbar=• Kręć kółkiem myszy / B / N: Wybierz następny/poprzedni przedmiot w pasku szybkiego dostępu
|
||||||
|
• 1-9: Select item in hotbar directly=• 1-9: Wybierz przedmiot z pasku szybkiego dostępu
|
||||||
|
• Q: Drop item stack=• Q: Wyrzuć grupę przedmiotów
|
||||||
|
• Shift+Q: Drop 1 item=• Shift+Q: Wyrzuć jeden przedmiot
|
||||||
|
• I: Show/hide inventory menu=• I: Pokaż/schowaj menu ekwipunku
|
||||||
|
Inventory interaction:=Interakcja z ekwipunkiem:
|
||||||
|
See the entry “Basics > Inventory”.=Zobacz wpis "Podstawy > Ekwipunek".
|
||||||
|
Camera:=Kamera:
|
||||||
|
• Z: Zoom=• Z: Przybliż
|
||||||
|
• F7: Toggle camera mode=• F7: Zmień tryb kamery
|
||||||
|
• F8: Toggle cinematic mode=• F8: Zmień na tryb kinowy
|
||||||
|
Interface:=Interfejs:
|
||||||
|
• Esc: Open menu window (pauses in single-player mode) or close window=• Esc: Otwórz okno menu (zatrzymuje grę w trybie pojedynczego gracza) lub zamknij okno
|
||||||
|
• F1: Show/hide HUD=• F1: Pokaż/ukryj interfejs
|
||||||
|
• F2: Show/hide chat=• F2: Pokaż/ukryj czat
|
||||||
|
• F9: Toggle minimap=• F9: Przełącz minimapę
|
||||||
|
• Shift+F9: Toggle minimap rotation mode=• Shift+F9: Przełącz tryb rotacji minimapy
|
||||||
|
• F10: Open/close console/chat log=• F10: Otwórz/zamknij konsolę/okno czatu
|
||||||
|
• F12: Take a screenshot=• F12: Zrób zrzut ekranu
|
||||||
|
Server interaction:=Interakcja z serwerem:
|
||||||
|
• T: Open chat window (chat requires the “shout” privilege)=• T: Otwórz okno czatu (chat wymaga przywileju "shout")
|
||||||
|
• /: Start issuing a server command=• /: Rozpocznij wpisywanie komendy serwera
|
||||||
|
Technical:=Techniczne:
|
||||||
|
• R: Toggle far view (disables all fog and allows viewing far away, can make game very slow)=• R: Przełącz tryb dalekiego widzenia (wyłącza mgłę i pozwala widzieć odległe obiekty, może znacząco spowolnić grę)
|
||||||
|
• +: Increase minimal viewing distance=• +: Zwiększ minimalny zasięg widzenia
|
||||||
|
• -: Decrease minimal viewing distance=• -: Zmniejsz minimalny zasięg widzenia
|
||||||
|
• F3: Enable/disable fog=• F3: Włącz/wyłącz mgłę
|
||||||
|
• F5: Enable/disable debug screen which also shows your coordinates=• F5: Włącz/wyłącz ekran debug'u, który pokazuje również twoje położenie
|
||||||
|
• F6: Only useful for developers. Enables/disables profiler=• F6: Przydatne tylko dla deweloperów. Włącza/wyłącza profiler
|
||||||
|
• P: Only useful for developers. Writes current stack traces=• P: Przydatne tylko dla deweloperów. Zapisuje aktualny zrzut stosu
|
||||||
|
Players=Gracze
|
||||||
|
Players (actually: “player characters”) are the characters which users control.=Gracze (właściwie "postacie graczy") są postaciami kontrolowanymi przez użytkowników.
|
||||||
|
Players are living beings. They start with a number of health points (HP) and a number of breath points (BP).=Gracze są żywymi stworzeniami. Zaczynają z pewną liczbą punktów życia (HP) oraz punktów oddechu (BP).
|
||||||
|
Players are capable of walking, sneaking, jumping, climbing, swimming, diving, mining, building, fighting and using tools and blocks.=Gracze są w stanie chodzić, skradać się, skakać, wspinać, pływać, nurkować, kopać, budować walczyć oraz korzystać z narzędzi i bloków.
|
||||||
|
Players can take damage for a variety of reasons, here are some:=Gracze mogą otrzymać obrażenia z wielu powodów, oto niektóre:
|
||||||
|
• Taking fall damage=• Obrażenia od upadku
|
||||||
|
• Touching a block which causes direct damage=• Dotknięcie bloku który zadaje obrażenia
|
||||||
|
• Drowning=• Tonięcie
|
||||||
|
• Being attacked by another player=• Zaatakowanie przez innego gracza
|
||||||
|
• Being attacked by a computer enemy=• Zaatakowanie przez przeciwnika sterowanego przez komputer
|
||||||
|
At a health of 0, the player dies. The player can just respawn in the world.=Gdy zdrowie osiągnie poziom 0, gracz umiera. Gracz może wtedy odrodzić się w świecie.
|
||||||
|
Other consequences of death depend on the game. The player could lose all items, or lose the round in a competitive game.=Inne konsekwencje śmierci zależą od gry. Gracz może stracić wszystkie przedmioty, lub stracić punkty w grze konkurencyjnej.
|
||||||
|
Some blocks reduce breath. While being with the head in a block which causes drowning, the breath points are reduced by 1 for every 2 seconds. When all breath is gone, the player starts to suffer drowning damage. Breath is quickly restored in any other block.=Niektóre bloki zmniejszają oddech. Podczas przebywania w bloku powodującym topienie się, punkty oddechu są zmniejszane o 1 co 2 sekundy. Gdy punkty oddechu się skończą, gracz zacznie otrzymywać obrażenia od tonięcia. Oddech szybko odnawia się w dowolnym innym bloku.
|
||||||
|
Damage can be disabled on any world. Without damage, players are immortal and health and breath are unimportant.=Obrażenia mogą zostać wyłączone w dowolnym świecie. Bez obrażeń gracze są nieśmiertelni, a ich życie i oddech są nieistotne.
|
||||||
|
In multi-player mode, the name of other players is written above their head.=W trybie wieloosobowym imię innych graczy jest napisane powyżej ich głów.
|
||||||
|
Items=Przedmioty
|
||||||
|
Items are things you can carry along and store in inventories. They can be used for crafting, smelting, building, mining, and more. Types of items include blocks, tools, weapons and items only used for crafting.=Przedmioty są rzeczami które możesz przenosić i przechowywać w ekwipunku. Mogą być wykorzystane do wytwarzania, przetapiania, budowania, kopania i w innych celach. Typy przedmiotów to m.in. bloki, narzędzia bronie oraz przedmioty użyteczne tylko w wytwarzaniu.
|
||||||
|
An item stack is a collection of items of the same type which fits into a single item slot. Item stacks can be dropped on the ground. Items which drop into the same coordinates will form an item stack.=Grupa przedmiotów jest zbiorem przedmiotów tego samego typu, która mieści się w jednym miejscu na przedmiot. Grupy przedmiotów mogą zostać upuszczone na ziemię. Przedmioty, które zostaną upuszczone na te same współrzędne utworzą grupę przedmiotów.
|
||||||
|
Dropped item stacks will be collected automatically when you stand close to them.=Upuszczone grupy przedmiotów zostaną podniesione automatycznie gdy staniesz w ich pobliżu.
|
||||||
|
Items have several properties, including the following:=Przedmioty mają wiele właściwości, między innymi:
|
||||||
|
• Maximum stack size: Number of items which fit on 1 item stack=• Maksymalny rozmiar grupy: Liczba przedmiotów które mieszczą się w jednej grupie
|
||||||
|
• Pointing range: How close things must be to be pointed while wielding this item=• Zasięg wskazywania: Jak blisko muszą być przedmioty aby można na nie wskazać za pomocą tego przedmiotu
|
||||||
|
• Group memberships: See “Basics > Groups”=• Przynależność do grupy: Zobacz "Podstawy > Grupy"
|
||||||
|
• May be used for crafting or cooking=• Mogą być używane do wytwarzania lub pieczenia
|
||||||
|
Tools=Narzędzia
|
||||||
|
Some items may serve as a tool when wielded. Any item which has some special use which can be directly used by its wielder is considered a tool.=Niektóre przedmioty służą jako narzędzia gdy trzyma się je w rękach. Dowolny przedmiot, który ma specjalne użycia które mogą być bezpośrednio użyte przez jego posiadacza jest uznawany za narzędzie.
|
||||||
|
A common subset of tools is mining tools. These are important to break all kinds of blocks. Weapons are a kind of tool. There are of course many other possible tools. Special actions of tools are usually done by left-click or right-click.=Częstym podzbiorem narzędzi są narzędzia do kopania. Są one istotne przy niszczeniu różnych typów bloków. Bronie są innym rodzajem narzędzia. Jest oczywiście wiele innych możliwych narzędzi. Specjalne akcje narzędzi są zwykle aktywowane przy użyciu lewego lub prawego przycisku myszy.
|
||||||
|
When nothing is wielded, players use their hand which may act as tool and weapon.=Gdy nic nie jest trzymane, gracze używają swojej ręki, która może służyć jako narzędzie i broń.
|
||||||
|
Mining tools are important to break all kinds of blocks. Weapons are another kind of tool. There are some other more specialized tools. Special actions of tools are usually done by right-click.=Narzędzia do kopania są istotne do niszczenia różnych bloków. Innym rodzajem narzędzi są bronie. Istnieją również inne, bardzie wyspecjalizowane narzędzia. Specjalne akcje narzędzi są zwykle wykonywane przy użyciu lewego oraz prawego przycisku myszy.
|
||||||
|
When nothing is wielded, players use their hand which may act as tool and weapon. The hand is capable of punching and deals minimum damage.=Gdy nic nie jest trzymane gracze używają swojej dłoni, która może służyć za narzędzie i za broń. Ręką można uderzać co zadaje minimalne obrażenia.
|
||||||
|
Many tools will wear off when using them and may eventually get destroyed. The damage is displayed in a damage bar below the tool icon. If no damage bar is shown, the tool is in mint condition. Tools may be repairable by crafting, see “Basics > Crafting”.=Wiele narzędzi będzie się zużywać podczas używania, co w końcu sprawi, że zostaną zniszczone. Zużycie jest wyświetlane jako pasek poniżej ikony narzędzia. Jeśli pasek nie jest pokazywany, narzędzie jest w idealnym stanie. Narzędzia mogą być naprawiane przez wytwarzania, zobacz "Podstawy > Wytwarzanie".
|
||||||
|
Weapons=Bronie
|
||||||
|
Some items are usable as a melee weapon when wielded. Weapons share most of the properties of tools.=Niektóre przedmioty są przydatne jako bronie wręcz gdy trzymane. Bronie mają wiele podobnych własności co narzędzia.
|
||||||
|
Melee weapons deal damage by punching players and other animate objects. There are two ways to attack:=Bronie wręcz zadają obrażenia przy uderzaniu graczy i innych obiektów.
|
||||||
|
• Single punch: Left-click once to deal a single punch=• Pojedyncze uderzenie: Kliknij lewy przycisk myszy aby wykonać jedno uderzenie
|
||||||
|
• Quick punching: Hold down the left mouse button to deal quick repeated punches=• Szybkie uderzenia: Przytrzymaj lewy przycisk myszy aby zadać szybkie, powtarzające się uderzenia
|
||||||
|
There are two core attributes of melee weapons:=Dwie istotne cechy każdej broni wręcz:
|
||||||
|
• Maximum damage: Damage which is dealt after a hit when the weapon was fully recovered=• Maksymalne obrażenia: Obrażenia zadawane gdy broń przy uderzeniu gdy broń jest całkowicie ochłonięta
|
||||||
|
• Full punch interval: Time it takes for fully recovering from a punch=• Pełny okres uderzenia: Czas który jest potrzebny do ochłonięcia broni po uderzeniu
|
||||||
|
A weapon only deals full damage when it has fully recovered from a previous punch. Otherwise, the weapon will deal only reduced damage. This means, quick punching is very fast, but also deals rather low damage. Note the full punch interval does not limit how fast you can attack.=Broń zadaje pełne obrażenia tylko gdy jest w pełni ochłonięta z poprzedniego uderzenia. W przeciwnym wypadku zadane obrażenia będą zmniejszone. To oznacza, że szybkie uderzanie jest bardzo szybkie, ale zadaje niskie obrażenia. Zauważ, że pełny okres uderzenia nie jest limitem na to jak szybko możesz atakować.
|
||||||
|
There is a rule which sometimes makes attacks impossible: Players, animate objects and weapons belong to damage groups. A weapon only deals damage to those who share at least one damage group with it. So if you're using the wrong weapon, you might not deal any damage at all.=Istnieje reguła która sprawia, że ataki są czasem niemożliwe: Gracze, ruchome obiekty i bronie należą do grup obrażeń. Broń zadaje obrażenia tylko tym, którzy należą do przynajmniej jednej z jej grup obrażeń.
|
||||||
|
Pointing=Wskazywanie
|
||||||
|
“Pointing” means looking at something in range with the crosshair. Pointing is needed for interaction, like mining, punching, using, etc. Pointable things include blocks, players, computer enemies and objects.="Wskazywanie" oznacza patrzenia na coś w zasięgu celownikiem. Wskazywanie jest wymagane podczas interakcji takich jak kopanie, uderzanie, używanie itp. Wskazywalne obiekty to między innymi bloki, gracze, przeciwnicy komputerowi i obiekty.
|
||||||
|
To point something, it must be in the pointing range (also just called “range”) of your wielded item. There's a default range when you are not wielding anything. A pointed thing will be outlined or highlighted (depending on your settings). Pointing is not possible with the 3rd person front camera.=Aby na coś wskazać musi być to w zasięgu wskazywania (zwykle nazywanym po prostu "zasięgiem") trzymanego przez ciebie przedmiotu. Gdy nic nie jest trzymane jest to zasięg domyślny. Wskazywany przedmiot będzie obrysowany lub podświetlony (w zależności od twoich ustawień). Wskazywanie nie jest możliwe gdy włączona jest przednia kamera trzecioosobowa.
|
||||||
|
A few things can not be pointed. Most blocks are pointable. A few blocks, like air, can never be pointed. Other blocks, like liquids can only be pointed by special items.=Na niektóre rzeczy nie można wskazywać. Większość bloków jest wskazywalna. Na niektóre bloki, np. powietrze, nie można wskazać. Inne bloki, takie jak płyny, mogą być wskazane tylko przy użyciu specjalnych przedmiotów.
|
||||||
|
Camera=Kamera
|
||||||
|
There are 3 different views which determine the way you see the world. The modes are:=Istnieją 3 różne widoki, które definiują w jaki sposób będziesz obserwował świat. Te widoki to:
|
||||||
|
• 1: First-person view (default)=• 1: Widok pierwszoosobowy (domyślny)
|
||||||
|
• 2: Third-person view from behind=• 2: Widok trzecioosobowy od tyłu
|
||||||
|
• 3: Third-person view from the front=• 3: Widok trzecioosobowy od przodu
|
||||||
|
You can change the camera mode by pressing [F7].=Możesz zmienić widok kamery naciskając [F7].
|
||||||
|
You might be able to zoom with [Z] to zoom the view at the crosshair. This allows you to look further.=Możesz być w stanie przybliżać widok naciskając [Z]. To pozawala spojrzeć dalej w kierunku celownika.
|
||||||
|
Zooming is a gameplay feature that might be enabled or disabled by the game. By default, zooming is enabled when in Creative Mode but disabled otherwise.=Przybliżanie jako cecha rozgrywki może być włączone lub wyłączone przez grę. Domyślnie przybliżanie jest włączone w trybie Kreatywny i wyłączone w przeciwnym przypadku.
|
||||||
|
There is also Cinematic Mode which can be toggled with [F8]. With Cinematic Mode enabled, the camera movements become more smooth. Some players don't like it, it is a matter of taste.=Istnieje również tryb kinowy, który może być włączony naciskając [F8]. Gdy jest on włączony ruchy kamery są bardziej wygładzone. Niektórzy gracze go nie lubią, jest to kwestia gustu.
|
||||||
|
By holding down [Z], you can zoom the view at your crosshair. You need the “zoom” privilege to do this.=Przytrzymując [Z] możesz przybliżyć widok na swoim celowniku. Potrzebujesz przywileju "zoom" aby to zrobić.
|
||||||
|
• Switch camera mode: [F7]=• Zmień widok kamery: [F7]
|
||||||
|
• Toggle Cinematic Mode: [F8]=• Przełącz tryb kinowy: [F8]
|
||||||
|
• Zoom: [Z]=• Przybliż: [Z]
|
||||||
|
Blocks=Bloki
|
||||||
|
The world of MineClone 2 is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.=Świat MineClone 2 jest w całości złożony z bloków (a bardziej precyzyjnie voxeli). Bloki mogą być dodawane lub usuwane przy użyciu odpowiednich narzędzi.
|
||||||
|
The world is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.=Świat jest w całości złożony z bloków (a bardziej precyzyjnie voxeli). Bloki mogą być dodawane lub usuwane przy użyciu odpowiednich narzędzi.
|
||||||
|
Blocks can have a wide range of different properties which determine mining times, behavior, looks, shape, and much more. Their properties include:=Bloki mogą mieć wiele różnych właściwości określających czas kopania, zachowanie, wygląd, kształt i wiele więcej. Te własności to między innymi:
|
||||||
|
• Collidable: Collidable blocks can not be passed through; players can walk on them. Non-collidable blocks can be passed through freely=• Zderzalne: Przez bloki z tą własnością nie można przechodzić; gracze mogą po nich chodzić. Przez nie-zderzalne bloki można swobodnie przechodzić.
|
||||||
|
• Pointable: Pointable blocks show a wireframe or a halo box when pointed. But you will just point through non-pointable blocks. Liquids are usually non-pointable but they can be pointed at by some special tools=• Wskazywalne: Te bloki pokażą obwód lub poświatę gdy zostaną wskazane. Ale przez niewskazywalne bloki będziesz wskazywała bloki znajdujące się za nimi. Płyny są zwykła niewskazywalne, ale można na nie wskazać przy użyciu specjalnych narzędzi.
|
||||||
|
• Mining properties: By which tools it can be mined, how fast and how much it wears off tools=• Własności kopania: Przez jakie narzędzia mogą być wykopane, jak szybko oraz jak bardzo zużyje to narzędzie
|
||||||
|
• Climbable: While you are at a climbable block, you won't fall and you can move up and down with the jump and sneak keys=• Wspinaczkowe: Gdy jesteś obok bloków wspinaczkowych nie spadniesz, oraz możesz poruszać się w górę i w dół korzystając z przycisków do skakania i skradania.
|
||||||
|
• Drowning damage: See the entry “Basics > Player”=• Obrażenia tonięcia: Zobacz wpis "Podstawy > Gracz"
|
||||||
|
• Liquids: See the entry “Basics > Liquids”=• Płyny: Zobacz wpis "Podstawy > Płyny"
|
||||||
|
• Group memberships: Group memberships are used to determine mining properties, crafting, interactions between blocks and more=• Przynależność do grup: Przynależności do grup definiują własności kopania, wytwarzania, interakcje między blokami i wiele więcej
|
||||||
|
Mining=Kopanie
|
||||||
|
Mining (or digging) is the process of breaking blocks to remove them. To mine a block, point it and hold down the left mouse button until it breaks.=Kopanie (lub wydobywanie) jest procesem niszczenia i usuwania bloków. Aby wykopać blok, wskaż na niego i przytrzymaj lewy przycisk myszy aż się zniszczy.
|
||||||
|
Blocks require a mining tool to be mined. Different blocks are mined by different mining tools, and some blocks can not be mined by any tool. Blocks vary in hardness and tools vary in strength. Mining tools will wear off over time. The mining time and the tool wear depend on the block and the mining tool. The fastest way to find out how efficient your mining tools are is by just trying them out on various blocks. Any items you gather by mining will drop on the ground, ready to be collected.=Bloki wymagają narzędzi do kopania aby je wykopać. Różne bloki są wykopywane przez różne narzędzia, a niektóre nie mogą być wykopane przez żadne narzędzie. Najszybszym sposobem testowania jak efektowne są twoje narzędzia do kopania jest po prostu wypróbowanie ich na różnych blokach. Wszystkie przedmioty które wykopiesz zostaną upuszczone na ziemię, gotowe do podniesienia.
|
||||||
|
After mining, a block may leave a “drop” behind. This is a number of items you get after mining. Most commonly, you will get the block itself. There are other possibilities for a drop which depends on the block type. The following drops are possible:=Po wykopaniu, blok może upuścić "zrzut". Jest to kilka przedmiotów zdobytych przez kopanie. Najczęściej będzie to wykopany blok. Możliwe są inne zrzuty zależne od typu bloku. Następujące zrzuty są możliwe:
|
||||||
|
• Always drops itself (the usual case)=• Zawsze wyrzuca siebie (typowy przypadek)
|
||||||
|
• Always drops the same items=• Zawsze wyrzuca te same przedmioty
|
||||||
|
• Drops items based on probability=• Wyrzuca przedmioty z pewnym prawdopodobieństwem
|
||||||
|
• Drops nothing=• Nie wyrzuca niczego
|
||||||
|
Building=Budowanie
|
||||||
|
Almost all blocks can be built (or placed). Building is very simple and has no delay.=Prawie wszystkie bloki mogą być zbudowane (lub postawione). Stawianie jest bardzo proste i natychmiastowe.
|
||||||
|
To build your wielded block, point at a block in the world and right-click. If this is not possible because the pointed block has a special right-click action, hold down the sneak key before right-clicking.=Aby postawić trzymany blok, wskaż na blok w świecie i kliknij prawy przycisk. Jeśli jest to niemożliwe, ponieważ wskazany blok ma specjalną akcję aktywowaną prawym przyciskiem myszy, przytrzymaj przycisk skradania przed kliknięciem prawego przycisku.
|
||||||
|
Blocks can almost always be built at pointable blocks. One exception are blocks attached to the floor; these can only be built on the floor.=Bloki prawie zawsze mogą być zbudowane na wskazywalnych blokach. Jednym z wyjątków są bloki przyczepione do podłogi; takie mogą być zbudowane tylko na podłodze.
|
||||||
|
Normally, blocks are built in front of the pointed side of the pointed block. A few blocks are different: When you try to build at them, they are replaced.=Zwykle, bloki są zbudowane przed wskazaną stroną wskazanego bloki. Niektóre bloki są inne: Gdy próbujesz na nich coś postawić są one tym zastępowane.
|
||||||
|
Liquids=Płyny
|
||||||
|
Liquids are special dynamic blocks. Liquids like to spread and flow to their surrounding blocks. Players can swim and drown in them.=Płyny są specjalnymi dynamicznymi blokami. Płyny lubią się rozprzestrzeniać i wpływać na otaczające bloki. Gracze mogą w nich pływać i tonąć.
|
||||||
|
Liquids usually come in two forms: In source form (S) and in flowing form (F).=Płyny zwykle pojawiają się w dwóch formach: W formie źródła (S) oraz w formie bieżącej (F).
|
||||||
|
Liquid sources have the shape of a full cube. A liquid source will generate flowing liquids around it from time to time, and, if the liquid is renewable, it also generates liquid sources. A liquid source can sustain itself. As long it is left alone, a liquid source will normally keep its place and does not drain out.=Źródła płynów są w kształcie pełnej kostki. Źródło płynu od czasu do czasu wygeneruje bieżący formę płynu w swoim otoczeniu oraz jeśli płyn jest odnawialny, utworzy również źródła płynu. Źródło płynu podtrzymuje siebie. Tak długo jak nie jest ruszane, źródło wody zostanie w miejscu i nie kończy się.
|
||||||
|
Flowing liquids take a sloped form. Flowing liquids spread around the world until they drain. A flowing liquid can not sustain itself and always comes from a liquid source, either directly or indirectly. Without a liquid source, a flowing liquid will eventually drain out and disappear.=Bieżące płyny przyjmują formę ściętą. Rozprzestrzeniają się one po świecie dopóki się nie wyczerpią. Bieżący płyn nie podtrzymuje sam siebie i zawsze powstaje ze źródła płynu, bezpośrednio lub pośrednio. Bez źródła płynu, płyn bieżący prędzej czy później wyczerpie się i zniknie.
|
||||||
|
All liquids share the following properties:=Wszystkie płyny mają następujące własności:
|
||||||
|
• All properties of blocks (including drowning damage)=• Wszystkie własności bloków (włączając w to obrażenia od tonięcia)
|
||||||
|
• Renewability: Renewable liquids can create new sources=• Odnawialność: Odnawialne płyny mogą tworzyć nowe źródła
|
||||||
|
• Flowing range: How many flowing liquids are created at maximum per liquid source, it determines how far the liquid will spread. Possible are ranges from 0 to 8. At 0, no flowing liquids will be created. Image 5 shows a liquid of flowing range 2=• Zasięg płynięcia: Ile maksymalnie płynów bieżących jest utworzonych przez źródło płynu. Definiuje to jak daleko płyn może się rozprzestrzenić. Możliwe wartości są od 0 do 8. Przy 0, żadne płyny bieżące nie będą utworzone. Obrazek 5 pokazuje płyn z zasięgiem płynięcia 2
|
||||||
|
• Viscosity: How slow players move through it and how slow the liquid spreads=• Lepkość: Jak wolno gracze poruszają się przez niego i jak wolno płyn się rozprzestrzenia
|
||||||
|
Renewable liquids create new liquid sources at open spaces (image 2). A new liquid source is created when:=Odnawialne płyny mogą tworzyć nowe źródła płynów w wolnej przestrzeni (obrazek 2). Nowe źródło płynu jest tworzone gdy:
|
||||||
|
• Two renewable liquid blocks of the same type touch each other diagonally=• Dwa odnawialne źródła płynów tego samego typu stykają się po przekątnej
|
||||||
|
• These blocks are also on the same height=• Bloki te są na tej samej wysokości
|
||||||
|
• One of the two “corners” is open space which allows liquids to flow in=• Jeden z dwóch "rogów" jest wolną przestrzenią gdzie może wpłynąć płyn
|
||||||
|
When those criteria are met, the open space is filled with a new liquid source of the same type (image 3).=Gdy te kryteria są spełnione, wolna przestrzeń jest zapełniona źródłem płynu tego samego typu (obrazek 3).
|
||||||
|
Swimming in a liquid is fairly straightforward: The usual direction keys for basic movement, the jump key for rising and the sneak key for sinking.=Pływanie w płynie jest całkiem proste: Klawisze chodzenia powodują ruch w danym kierunku, przycisk skakania powoduje wznoszenia, a skradania opadanie.
|
||||||
|
The physics for swimming and diving in a liquid are:=Fizyka pływania i nurkowania w płynach jest następująca:
|
||||||
|
• The higher the viscosity, the slower you move=• Im wyższa lepkość, tym wolniej się poruszasz
|
||||||
|
• If you rest, you'll slowly sink=• Jeśli się nie ruszasz, będziesz powoli opadała
|
||||||
|
• There is no fall damage for falling into a liquid as such=• Nie ma obrażeń od upadku gdy wpadniesz do płynu
|
||||||
|
• If you fall into a liquid, you will be slowed down on impact (but don't stop instantly). Your impact depth is determined by your speed and the liquid viscosity. For a safe high drop into a liquid, make sure there is enough liquid above the ground, otherwise you might hit the ground and take fall damage=• Gdy wpadasz do płynu będziesz spowolniona przy zetknięciu (ale nie natychmiast). Zanurzenie po upadku jest ustalane na podstawie twojej szybkości oraz lepkości płynu. Żeby bezpiecznie skoczyć do płynu, upewnij się, że jest go wystarczająco dużo nad ziemię. W przeciwnym wypadku możesz uderzyć w ziemię i otrzymać obrażenia od upadku.
|
||||||
|
Liquids are often not pointable. But some special items are able to point all liquids.=Płyny są zwykle niewskazywalne, ale niektóre specjalne przedmioty mogą wskazywać na płyny.
|
||||||
|
Crafting=Wytwarzanie
|
||||||
|
Crafting is the task of combining several items to form a new item.=Wytwarzanie jest procesem łączenia i przetwarzania przedmiotów aby utworzyć nowy przedmiot.
|
||||||
|
To craft something, you need one or more items, a crafting grid (C) and a crafting recipe. A crafting grid is like a normal inventory which can also be used for crafting. Items need to be put in a certain pattern into the crafting grid. Next to the crafting grid is an output slot (O). Here the result will appear when you placed items correctly. This is just a preview, not the actual item. Crafting grids can come in different sizes which limits the possible recipes you can craft.=Aby coś wytworzyć potrzebujesz jednego lub więcej przedmiotów, siatki do wytwarzania oraz receptury. Siatka do wytwarzania jest jak zwykły ekwipunek, który może być użyty do wytwarzania. Przedmioty muszą być ułożone w konkretny wzór w siatce do wytwarzania. Obok siatki wytwarzania jest miejsce wyjściowe (O). Tutaj pojawi się rezultat gdy poprawnie umieścisz przedmioty. Jest to tylko podgląd, a nie faktyczny przedmiot. Siatki do wytwarzania mogą mieć różne rozmiary, co ogranicza liczbę receptur które możesz wytworzyć.
|
||||||
|
To complete the craft, take the result item from the output slot, which will consume items from the crafting grid and creates a new item. It is not possible to place items into the output slot.=Aby zakończyć wytwarzanie zabierze wynikowy przedmiot z miejsca wyjściowego. Skonsumuje to przedmioty z siatki do wytwarzania i utworzy nowy przedmiot. Nie da się umieszczać przedmiotów w miejscu wyjściowym.
|
||||||
|
A description on how to craft an item is called a “crafting recipe”. You need this knowledge to craft. There are multiple ways to learn crafting recipes. One way is by using a crafting guide, which contains a list of available crafting recipes. Some games provide crafting guides. There are also some mods which you can download online for installing a crafting guide. Another way is by reading the online manual of the game (if one is available).=Opis w jaki sposób uzyskać dany przedmiot nazywa się "recepturą wytwarzania". Potrzebujesz tej wiedzy do wytwarzania. Jest kilka sposobów by je poznać. Jednym z nich jest korzystanie z przewodnika do wytwarzania, który zawiera listę dostępnych receptur do wytwarzania. Niektóre gry dostarczają takie przewodniki. Istnieją także mody, które możesz pobrać z internetu dodające przewodniki. Innym sposobem jest przeczytanie instrukcji gry w internecie (jeśli taka jest dostępna).
|
||||||
|
Crafting recipes consist of at least one input item and exactly one stack of output items. When performing a single craft, it will consume exactly one item from each stack of the crafting grid, unless the crafting recipe defines replacements.=Receptury do wytwarzania składają się z przynajmniej jednego przedmiotu na wejściu i dokładnie jednej grupy przedmiotów wyjściowych. Podczas dokonywania pojedynczego wytwarzania skonsumowany zostanie dokładnie jeden przedmiot z każdej grupy w siatce wytwarzania, chyba, że receptura definiuje zamienniki.
|
||||||
|
There are multiple types of crafting recipes:=Istnieje kilka typów receptur:
|
||||||
|
• Shaped (image 2): Items need to be placed in a particular shape=• Kształtne (obrazek 2): Przedmioty muszą być ułożone w konkretny kształt
|
||||||
|
• Shapeless (images 3 and 4): Items need to be placed somewhere in input (both images show the same recipe)=• Bezkształtne (obrazki 3 i 4): Przedmioty muszą być ułożone gdzieś w wejściu (oba obrazki pokazują tę samą recepturę)
|
||||||
|
• Cooking: Explained in “Basics > Cooking”=• Pieczenie: Wyjaśnione w "Podstawy > Pieczenie"
|
||||||
|
• Repairing (image 5): Place two damaged tools into the crafting grid anywhere to get a tool which is repaired by 5%=• Naprawianie (obrazek 5): Postaw dwa uszkodzone narzędzia w siatce do wytwarzania w dowolnym miejscu aby uzyskać narzędzie naprawione o 5%
|
||||||
|
In some crafting recipes, some input items do not need to be a concrete item, instead they need to be a member of a group (see “Basics > Groups”). These recipes offer a bit more freedom in the input items. Images 6-8 show the same group-based recipe. Here, 8 items of the “stone” group are required, which is true for all of the shown items.=W niektórych recepturach, niektóre przedmioty wejściowe nie muszą być konkretnymi przedmiotami, tylko przynależeć do pewnej grupy (zobacz "Podstawy > Grupy"). Te receptury są nieco mniej restrykcyjne jeśli chodzi o wejściowe przedmioty. Obrazki 6-8 pokazują tę samą recepturę opartą o grupy. W tym przypadku 8 przedmiotów z grupy "kamień" są potrzebne, a wszystkie pokazane przedmioty do niej należą.
|
||||||
|
Rarely, crafting recipes have replacements. This means, whenever you perform a craft, some items in the crafting grid will not be consumed, but instead will be replaced by another item.=Czasami, receptury mają zamienniki. To oznacza, że po wykonaniu przetwarzania, niektóre przedmioty w siatce nie będą skonsumowane, a jedynie zamienione w inny przedmiot.
|
||||||
|
Cooking=Pieczenie
|
||||||
|
Cooking (or smelting) is a form of crafting which does not involve a crafting grid. Cooking is done with a special block (like a furnace), an cookable item, a fuel item and time in order to yield a new item.=Pieczenie (lub przetapianie) jest formą wytwarzania, która nie wymaga siatki do wytwarzania. Pieczenie jest wykonywane przy użyciu specjalnego bloku (np. pieca), przedmiotu który można upiec, paliwa oraz czasu potrzebnego na uzyskanie nowego przedmiotu.
|
||||||
|
Each fuel item has a burning time. This is the time a single item of the fuel keeps a furnace burning.=Każdy przedmiot będący paliwem ma czas wypalania. Jest to czas przez jaki pojedynczy przedmiot tego paliwa utrzymuje piec zapalony.
|
||||||
|
Each cookable item requires time to be cooked. This time is specific to the item type and the item must be “on fire” for the whole cooking time to actually yield the result.=Każdy przedmiot możliwy do upieczenia potrzebuje czasu by zostać upieczony. Czas ten jest przypisany do typu przedmiotu i każdy przedmiot musi być "na ogniu" przez cały ten czas by uzyskać przedmiot wynikowy.
|
||||||
|
Hotbar=Pasek szybkiego dostępu
|
||||||
|
At the bottom of the screen you see some squares. This is called the “hotbar”. The hotbar allows you to quickly access the first items from your player inventory.=Na dole swojego ekwipunku możesz zobaczyć kwadraty. To nazywa się "pasek szybkiego dostępu". Pozwala on na szybki dostęp do pierwszych przedmiotów z twojego ekwipunku.
|
||||||
|
You can change the selected item with the mouse wheel or the keyboard.=Możesz zmieniać wybrany przedmiot przy użyciu kółka myszy lub klawiatury.
|
||||||
|
• Select previous item in hotbar: [Mouse wheel up] or [B]=• Wybierz poprzedni przedmiot w pasku: [Kółko myszy w górę] lub [B]
|
||||||
|
• Select next item in hotbar: [Mouse wheel down] or [N]=• Wybierz następny przedmiot w pasku: [Kółko myszy w dół] lub [N]
|
||||||
|
• Select item in hotbar directly: [1]-[9]=• Wybierz bezpośrednio przedmiot w pasku: [1]-[9]
|
||||||
|
The selected item is also your wielded item.=Wybrany przedmiot jest również przedmiotem, który trzymasz.
|
||||||
|
Minimap=Minimapa
|
||||||
|
If you have a map item in any of your hotbar slots, you can use the minimap.=Jeśli masz przedmiot mapy w którymś z twoich miejsc na pasku szybkiego dostępu, możesz korzystać z minimapy.
|
||||||
|
Press [F9] to make a minimap appear on the top right. The minimap helps you to find your way around the world. Press it again to select different minimap modes and zoom levels. The minimap also shows the positions of other players.=Naciśnij [F9] aby minimapa pojawiła się w prawym górnym rogu. Minimapa pomoże ci odnaleźć się w świecie. Naciśnij [F9] ponownie aby wybrać inny tryb minimapy i stopień przybliżenia. Minimapa pokazuje również pozycję innych graczy.
|
||||||
|
There are 2 minimap modes and 3 zoom levels.=Są 2 tryby minimapy oraz 3 stopnie przybliżenia.
|
||||||
|
Surface mode (image 1) is a top-down view of the world, roughly resembling the colors of the blocks this world is made of. It only shows the topmost blocks, everything below is hidden, like a satellite photo. Surface mode is useful if you got lost.=Tryb powierzchni (obrazek 1) jest widokiem z lotu ptaka na świat, mniej więcej odzwierciedlającym kolory bloków z których stworzony jest świat. Pokazuje tylko najwyżej położone bloki, wszystko poniżej jest ukryte, podobnie jak zdjęcie satelitarne. Tryb ten jest przydatny gdy się zgubisz.
|
||||||
|
Radar mode (image 2) is more complicated. It displays the “denseness” of the area around you and changes with your height. Roughly, the more green an area is, the less “dense” it is. Black areas have many blocks. Use the radar to find caverns, hidden areas, walls and more. The rectangular shapes in image 2 clearly expose the position of a dungeon.=Tryb radaru (obrazek 2) jest bardziej skomplikowany. Pokazuje "gęstość" obszaru wokół ciebie i zmienia się z wysokością. Z grubsza, im bardziej zielony jest obszar, ty mniej "gęsty" jest. Czarne obszary mają wiele bloków. Użyj tego trybu by znaleźć jaskinie, ukryte obszary, ściany i więcej. Prostokątne kształty w obrazku 2 wyraźnie ujawniają pozycję lochów.
|
||||||
|
There are also two different rotation modes. In “square mode”, the rotation of the minimap is fixed. If you press [Shift]+[F9] to switch to “circle mode”, the minimap will instead rotate with your looking direction, so “up” is always your looking direction.=Istnieją również dwa różne tryby rotacji. W "trybie kwadratowym" rotacja minimapy jest ustalona. Jeśli naciśniesz [Shift]+[F9] aby zmienić na "tryb okręgu", minimapy będzie natomiast obracać się wraz z twoim kierunkiem patrzenia.
|
||||||
|
In some games, the minimap may be disabled.=W niektórych grach minimapa może być wyłączona.
|
||||||
|
• Toggle minimap mode: [F9]=• Przełącz tryb minimapy: [F9]
|
||||||
|
• Toggle minimap rotation mode: [Shift]+[F9]=• Przełącz tryb rotacji minimapy: [Shift]+[F9]
|
||||||
|
Inventory=Ekwipunek
|
||||||
|
Inventories are used to store item stacks. There are other uses, such as crafting. An inventory consists of a rectangular grid of item slots. Each item slot can either be empty or hold one item stack. Item stacks can be moved freely between most slots.=Ekwipunki są wykorzystywane do przechowywania grup przedmiotów. Mogą być również wykorzystywane w innych celach, np. wytwarzanie. Ekwipunek składa się z prostokątnej siatki miejsc na przedmioty. Każde miejsce na przedmioty może być puste lub zapełnione jedną grupą przedmiotów. Grupy przedmiotów można dowolnie przenosić pomiędzy miejscami.
|
||||||
|
You have your own inventory which is called your “player inventory”, you can open it with the inventory key (default: [I]). The first inventory slots are also used as slots in your hotbar.=Posiadasz swój własny ekwipunek nazywany "ekwipunkiem gracza", możesz go otworzyć klikając przycisk inwentarza (domyślnie: [I]). Pierwsze miejsca ekwipunku są również wykorzystywane jako miejsca na pasku szybkiego dostępu.
|
||||||
|
Blocks can also have their own inventory, e.g. chests and furnaces.=Bloki mogą mieć swój własny ekwipunek, np. skrzynie lub piece.
|
||||||
|
Inventory controls:=Sterowanie w ekwipunku
|
||||||
|
Taking: You can take items from an occupied slot if the cursor holds nothing.=Zabieranie: Możesz zabierać przedmioty z zajętego miejsca jeśli na kursorze niczego nie ma.
|
||||||
|
• Left click: take entire item stack=• Lewy przycisk: weź całą grupę przedmiotów
|
||||||
|
• Right click: take half from the item stack (rounded up)=• Prawy przycisk: weź połowę przedmiotów z grupy (zaokrąglone w górę)
|
||||||
|
• Middle click: take 10 items from the item stack=• Środkowy przycisk: weź 10 przedmiotów z grupy
|
||||||
|
• Mouse wheel down: take 1 item from the item stack=• Kółko myszy w dół: Weź 1 przedmiot z grupy
|
||||||
|
Putting: You can put items onto a slot if the cursor holds 1 or more items and the slot is either empty or contains an item stack of the same item type.=Wstawianie: Możesz wstawić przedmioty w miejsce jeśli na kursorze jest przynajmniej 1 przedmiot, a wskazane miejsce jest puste lub zawiera grupę przedmiotów tego samego typu.
|
||||||
|
• Left click: put entire item stack=• Lewy przycisk: Wstaw całą grupę przedmiotów
|
||||||
|
• Right click: put 1 item of the item stack=• Prawy przycisk: Wstaw 1 przedmiot z grupy
|
||||||
|
• Right click or mouse wheel up: put 1 item of the item stack=• Prawy przycisk lub kółko myszy w górę: Wstaw 1 przedmiot z grupy
|
||||||
|
• Middle click: put 10 items of the item stack=• Środkowy przycisk: wstaw 10 przedmiotów z grupy
|
||||||
|
Exchanging: You can exchange items if the cursor holds 1 or more items and the destination slot is occupied by a different item type.=Wymienianie: Możesz wymieniać przedmioty jeśli na kursorze jest przynajmniej jeden przedmiot, a we wskazanym miejscu znajduje się grupa innych przedmiotów.
|
||||||
|
• Click: exchange item stacks=• Kliknij: wymień grupy przedmiotów
|
||||||
|
Throwing away: If you hold an item stack and click with it somewhere outside the menu, the item stack gets thrown away into the environment.=Wyrzucanie: Jeśli trzymasz grupę przedmiotów i klikniesz poza menu ekwipunku, grupa przedmiotów zostanie wyrzucona w świat.
|
||||||
|
Quick transfer: You can quickly transfer an item stack to/from the player inventory to/from another item's inventory slot like a furnace, chest, or any other item with an inventory slot when that item's inventory is accessed. The target inventory is generally the most relevant inventory in this context.=Szybki transfer: Możesz szybko przemieszczać grupę przedmiotów z/do ekwipunku gracza do/z ekwipunku innego przedmiotu, takich jak piec, skrzynia czy innego z ekwipunkiem, gdy jego ekwipunek jest otworzony. Docelowy ekwipunek jest najczęściej najbardziej istotnym ekwipunkiem w takim kontekście.
|
||||||
|
• Sneak+Left click: Automatically transfer item stack=• Skradanie+Lewy przycisk: Automatycznie przenieś grupę przedmiotów
|
||||||
|
Online help=Pomoc online
|
||||||
|
You may want to check out these online resources related to MineClone 2.=Możesz chcieć zobaczyć na te zasoby online powiązane z MineClone 2.
|
||||||
|
MineClone 2 download and forum discussion: <https://forum.minetest.net/viewtopic.php?f@=50&t@=16407>=MineClone 2 pobieranie oraz dyskusja na forum: <https://forum.minetest.net/viewtopic.php?f@=50&t@=16407>
|
||||||
|
Here you find the most recent version of MineClone 2 and can discuss it.=Tutaj możesz znaleźć najnowszą wersję MineClone 2 i porozmawiać o niej
|
||||||
|
Bug tracker: <https://github.com/Wuzzy2/MineClone2-Bugs>=Śledzenie błędów: <https://github.com/Wuzzy2/MineClone2-Bugs>
|
||||||
|
Report bugs here.=Zgłaszaj tu zauważone błędy.
|
||||||
|
Minetest links:=Linki dotyczące Minetest:
|
||||||
|
You may want to check out these online resources related to Minetest:=Możesz chcieć zobaczyć te zasoby online dotyczące Minetest
|
||||||
|
Official homepage of Minetest: <https://minetest.net/>=Oficjalna strona Minetest: <https://minetest.net/>
|
||||||
|
The main place to find the most recent version of Minetest, the engine used by MineClone 2.=Miejsce gdzie można znaleźć najnowszą wersję Minetesta, silnika wykorzystywanego przez MineClone 2.
|
||||||
|
The main place to find the most recent version of Minetest.=Miejsce gdzie można znaleźć najnowszą wersję Minetesta.
|
||||||
|
Community wiki: <https://wiki.minetest.net/>=Wiki społeczności: <https://wiki.minetest.net/>
|
||||||
|
A community-based documentation website for Minetest. Anyone with an account can edit it! It also features a documentation of Minetest Game.=Utrzymywana przez społeczność dokumentacja na temat Minetest. Każdy z kontem może ją edytować! Znajduje się na niej również dokumentacja Gry Minetest.
|
||||||
|
Minetest forums: <https://forums.minetest.net/>=Forum Minetest: <https://forums.minetest.net/>
|
||||||
|
A web-based discussion platform where you can discuss everything related to Minetest. This is also a place where player-made mods and games are published and discussed. The discussions are mainly in English, but there is also space for discussion in other languages.=Platforma dyskusyjna, gdzie możesz porozmawiać na wszystkie tematy związane z Minetestem. Jest to również miejsce gdzie stworzone przez graczy mody i gry są publikowane i omawiane. Rozmowy są prowadzone głównie po angielsku ale jest również miejsce na rozmowy w innych językach.
|
||||||
|
Chat: <irc://irc.freenode.net#minetest>=Czat: <irc://irc.freenode.net#minetest>
|
||||||
|
A generic Internet Relay Chat channel for everything related to Minetest where people can meet to discuss in real-time. If you do not understand IRC, see the Community Wiki for help.=Ogólne kanał IRC na dowolny temat związany z Minetest, gdzie ludzie mogą się spotkać i rozmawiać w czasie rzeczywistym. Jeśli nie rozumiesz IRC, zobacz na Wiki społeczności by znaleźć pomoc.
|
||||||
|
Groups=Grupy
|
||||||
|
Items, players and objects (animate and inanimate) can be members of any number of groups. Groups serve multiple purposes:=Przedmioty, gracze i obiekty (ruchome i nieruchome) mogą przynależeć do dowolnej liczby grup. Grupy pełnią kilka funkcji:
|
||||||
|
• Crafting recipes: Slots in a crafting recipe may not require a specific item, but instead an item which is a member of a particular group, or multiple groups=• Receptury wytwarzania: Miejsca w recepturze mogą nie wymagać konkretnego przedmiotu, lecz przedmiotu, który przynależy do konkretnej grupy, lub kilku grup
|
||||||
|
• Digging times: Diggable blocks belong to groups which are used to determine digging times. Mining tools are capable of digging blocks belonging to certain groups=• Czas kopania: Bloki które można wykopać należą do grupy, które definiują czas ich kopania. Narzędzia do kopania są w stanie kopać przedmioty należące do pewnych grup
|
||||||
|
• Block behavior: Blocks may show a special behaviour and interact with other blocks when they belong to a particular group=• Zachowanie bloku: Bloki mogą wykazywać się pewnym zachowaniem i wchodzić w interakcję z innymi blokami gdy należą do pewnych grup
|
||||||
|
• Damage and armor: Objects and players have armor groups, weapons have damage groups. These groups determine damage. See also: “Basics > Weapons”=• Obrażenia i zbroja: Obiekty i gracze mają grupy zbroi, bronie mają grupy obrażeń. Te grupy definiują obrażenia. Zobacz również: "Podstawy > Bronie"
|
||||||
|
• Other uses=• Inne użycia
|
||||||
|
In the item help, many important groups are usually mentioned and explained.=We wpisach o przedmiotach wiele istotnych grup jest zwykle wymienionych i opisanych.
|
||||||
|
Glossary=Słowniczek
|
||||||
|
This is a list of commonly used terms:=Jest to lita często używanych terminów:
|
||||||
|
Controls:=Sterowanie:
|
||||||
|
• Wielding: Holding an item in hand=• Trzymanie: Posiadanie przedmiotu w ręce
|
||||||
|
• Pointing: Looking with the crosshair at something in range=• Wskazywanie: Patrzenie na coś w zasięgu celownikiem
|
||||||
|
• Dropping: Throwing an item or item stack to the ground=• Upuszczanie: Wyrzucenie przedmiotu lub grupy przedmiotów na ziemię
|
||||||
|
• Punching: Attacking with left-click, is also used on blocks=• Uderzanie: Atakowanie lewym przyciskiem myszy, używane również na blokach
|
||||||
|
• Sneaking: Walking slowly while (usually) avoiding to fall over edges=• Skradanie: Powolne chodzenie i (zwykle) unikanie spadania z bloków
|
||||||
|
• Climbing: Moving up or down a climbable block=• Wspinanie: Wchodzenie w górę lub schodzenie w dół po wspinaczkowych blokach
|
||||||
|
Blocks:=Bloki:
|
||||||
|
• Block: Cubes that the worlds are made of=• Blok: Kostki z którego stworzony jest świat
|
||||||
|
• Mining/digging: Using a mining tool to break a block=• Kopanie/Wydobywanie: Używanie przedmiotów do kopania do niszczenia bloków
|
||||||
|
• Building/placing: Putting a block somewhere=• Budowanie/Umieszczanie: Wstawianie gdzieś bloku
|
||||||
|
• Drop: Items you get after mining a block=• Zrzut: Przedmioty uzyskane po wykopaniu bloku
|
||||||
|
• Using a block: Right-clicking a block to access its special function=• Używanie bloku: Kliknięcie prawym przyciskiem na blok aby uruchomić jego specjalną funkcję
|
||||||
|
Items:=Przedmioty:
|
||||||
|
• Item: A single thing that players can possess=• Przedmiot: Pojedyncza rzecz, którą gracz może posiadać
|
||||||
|
• Item stack: A collection of items of the same kind=• Grupa przedmiotów: Zbiór przedmiotów tego samego typu
|
||||||
|
• Maximum stack size: Maximum amount of items in an item stack=• Maksymalny rozmiar grupy: Maksymalna liczba przedmiotów w grupie przedmiotów
|
||||||
|
• Slot / inventory slot: Can hold one item stack=• Miejsce / miejsce w ekwipunku: Może przechowywać jedną grupę przedmiotów
|
||||||
|
• Inventory: Provides several inventory slots for storage=• Ekwipunek: Dostarcza kilka miejsc w ekwipunku do przechowywania
|
||||||
|
• Player inventory: The main inventory of a player=• Ekwipunek gracza: Główny ekwipunek gracza
|
||||||
|
• Tool: An item which you can use to do special things with when wielding=• Narzędzie: Przedmiot, który można wykorzystać w specjalny sposób podczas trzymania
|
||||||
|
• Range: How far away things can be to be pointed by an item=• Zasięg: Jak dalekie rzeczy mogą być wskazane przedmiotem
|
||||||
|
• Mining tool: A tool which allows to break blocks=• Narzędzie do kopania: Narzędzie pozwalające niszczyć bloki
|
||||||
|
• Craftitem: An item which is (primarily or only) used for crafting=• Przedmiot do wytwarzania: Przedmiot który jest (głównie lub tylko) wykorzystywany do wytwarzania.
|
||||||
|
Gameplay:=Rozgrywka
|
||||||
|
• “heart”: A single health symbol, indicates 2 HP=• "serce": Pojedynczy symbol zdrowia, reprezentujący 2 HP
|
||||||
|
• “bubble”: A single breath symbol, indicates 1 BP=• "bąbel": Pojedynczy symbol oddechu, reprezentujący 1 BP
|
||||||
|
• HP: Hit point (equals half 1 “heart”)=• HP: Punkt zdrowia (równy połowie serca)
|
||||||
|
• BP: Breath point, indicates breath when diving=• BP: Punkt oddechu reprezentujący ilość powietrza podczas nurkowania
|
||||||
|
• Mob: Computer-controlled enemy=• Mob: Przeciwnik sterowany przez komputer
|
||||||
|
• Crafting: Combining multiple items to create new ones=• Wytwarzanie: Łączenie kilku przedmiotów w celu uzyskania innych
|
||||||
|
• Crafting guide: A helper which shows available crafting recipes=• Przewodnik wytwarzania: Pomocniczy spis dostępnych receptur wytwarzania
|
||||||
|
• Spawning: Appearing in the world=• Spawnowanie: Pojawienie się w świecie
|
||||||
|
• Respawning: Appearing again in the world after death=• Odradzanie: Ponownie pojawienie się w świecie po śmierci
|
||||||
|
• Group: Puts similar things together, often affects gameplay=• Grupa: Łączy podobne rzeczy razem, często wpływa na rozgrywkę
|
||||||
|
• noclip: Allows to fly through walls=• noclip: Pozwala przelatywać przez ściany
|
||||||
|
Interface=Interfejs:
|
||||||
|
• Hotbar: Inventory slots at the bottom=• Pasek szybkiego dostępu: Miejsca ekwipunku na dole ekranu
|
||||||
|
• Statbar: Indicator made out of half-symbols, used for health and breath=• Pasek statusu: Wskaźniki składające się z symboli używane dla oznaczania życia oraz oddechu
|
||||||
|
• Minimap: The map or radar at the top right=• Minimapa: Mapa lub radar w prawym górnym rogu ekranu
|
||||||
|
• Crosshair: Seen in the middle, used to point at things=• Celownik: Widoczny na środku ekranu, używany do wskazywania na rzeczy
|
||||||
|
Online multiplayer:=Gra wieloosobowa w internecie:
|
||||||
|
• PvP: Player vs Player. If active, players can deal damage to each other=• PvP: Gracz kontra Gracz. Jeśli ten tryb jest aktywny, gracze mogą zadawać sobie obrażenia
|
||||||
|
• Griefing: Destroying the buildings of other players against their will=• Griefowanie: Celowe niszczenie budynków innych graczy wbrew ich woli
|
||||||
|
• Protection: Mechanism to own areas of the world, which only allows the owners to modify blocks inside=• Ochrona: Mechanizm pozwalający wejść w posiadanie pewnych części świata, co pozwala tylko właścicielom modyfikować bloki wewnątrz
|
||||||
|
Technical terms:=Techniczne terminy:
|
||||||
|
• Minetest: This game engine=• Minetest: Ten silnik gier
|
||||||
|
• MineClone 2: What you play right now=• MineClone 2: To w co teraz grasz
|
||||||
|
• Minetest Game: A game for Minetest by the Minetest developers=• Gra Minetest: Gra w Minetest napisana przez jego twórców
|
||||||
|
• Game: A complete playing experience to be used in Minetest; such as a game or sandbox or similar=• Gra: Kompletny doświadczenie do wykorzystania w Minetest; takie jak gry, piaskownice i podobne
|
||||||
|
• Mod: A single subsystem which adds or modifies functionality; is the basic building block of games and can be used to further enhance or modify them=• Mod: Pojedynczy system, który dodaje, lub modyfikuje funkcjonalność; jest podstawowym blokiem budowalnym gier i może być wykorzystywany do dalszego urozmaicania i modyfikowania ich
|
||||||
|
• Privilege: Allows a player to do something=• Przywilej: Pozwala graczowi coś zrobić
|
||||||
|
• Node: Other word for “block”=• Węzeł: Inna nazwa na "blok"
|
||||||
|
Settings=Ustawienia
|
||||||
|
There is a large variety of settings to configure Minetest. Pretty much every aspect can be changed that way.=Jest wiele różnych ustawień pozwalających zmodyfikować działanie Minetesta. Niemal każdy aspekt może być w ten sposób zmieniony.
|
||||||
|
These are a few of the most important gameplay settings:=Oto kilka najważniejszych ustawień dotyczących rozgrywki:
|
||||||
|
• Damage enabled (enable_damage): Enables the health and breath attributes for all players. If disabled, players are immortal=• Włączone obrażenia (enable_damage): Włącza paski zdrowia i oddechu. Jeśli wyłączone, gracze są nieśmiertelni
|
||||||
|
• Creative Mode (creative_mode): Enables sandbox-style gameplay focusing on creativity rather than a challenging gameplay. The meaning depends on the game; usual changes are: Reduced dig times, easy access to almost all items, tools never wear off, etc.=• Tryb kreatywny (creative_mode): Włącza rozgrywkę w stylu piaskownicy, skupiająca się na kreatywności a nie wyzwaniach. Dokładne znaczenie zależy od gry; najczęstsze zmiany to: Zmniejszony czas kopania, łatwy dostęp do niemal wszystkich przedmiotów, narzędzie się nie wykorzystują itp.
|
||||||
|
• PvP (enable_pvp): Short for “Player vs Player”. If enabled, players can deal damage to each other=• PvP (enable_pvp): Skrót od "Player vs Player" (gracz kontra gracz). Jeśli włączone, gracze mogą zadawać sobie obrażenia
|
||||||
|
For a full list of all available settings, use the “All Settings” dialog in the main menu.=Aby zobaczyć pełną listę dostępnych ustawień, użyj przycisku "Wszystkie ustawienia" w menu głównym.
|
||||||
|
Movement modes=Tryby poruszania
|
||||||
|
You can enable some special movement modes that change how you move.=Możesz uruchomić specjalne tryby poruszania, które zmieniają sposób w jaki się przemieszczasz.
|
||||||
|
Pitch movement mode:=Alternatywny tryb poruszania bez-ważkiego:
|
||||||
|
• Description: If this mode is activated, the movement keys will move you relative to your current view pitch (vertical look angle) when you're in a liquid or in fly mode.=• Opis: Jeśli ten tryb jest włączony, klawisze ruchu będą poruszać cię prostopadle do kierunku patrzenia, gdy jesteś w płynach lub w trybie latania.
|
||||||
|
• Default key: [L]=• Domyślny przycisk: [L]
|
||||||
|
• No privilege required=• Nie potrzeba żadnego przywileju
|
||||||
|
Fast mode:=Tryb szybki:
|
||||||
|
• Description: Allows you to move much faster. Hold down the the “Use” key [E] to move faster. In the client configuration, you can further customize fast mode.=• Opis: Pozwala poruszać się znacznie szybciej. Przytrzymaj swój przycisk "Używania" [E] aby poruszać się szybciej. W konfiguracji klienta możesz dokładniej skonfigurować tryb szybki.
|
||||||
|
• Default key: [J]=• Domyślny przycisk: [J]
|
||||||
|
• Required privilege: fast=• Potrzebny przywilej: fast
|
||||||
|
Fly mode:=Tryb latania:
|
||||||
|
• Description: Gravity doesn't affect you and you can move freely in all directions. Use the jump key to rise and the sneak key to sink.=• Opis: Grawitacja przestaje na ciebie wpływać i możesz swobodnie poruszać się w dowolnym kierunku. Użyj przycisku skoku aby się wznosić, a przycisku skradania aby opadać.
|
||||||
|
• Default key: [K]=• Domyślny przycisk: [K]
|
||||||
|
• Required privilege: fly=• Potrzebny przywilej: fly
|
||||||
|
Noclip mode:=Tryb noclip:
|
||||||
|
• Description: Allows you to move through walls. Only works when fly mode is enabled, too.=• Opis: Pozwala przechodzić przez ściany. Działa tylko gdy uruchomiony jest tryb latania.
|
||||||
|
• Default key: [H]=• Domyślny przycisk: [H]
|
||||||
|
• Required privilege: noclip=• Potrzebny przywilej: noclip
|
||||||
|
Console=Konsola
|
||||||
|
With [F10] you can open and close the console. The main use of the console is to show the chat log and enter chat messages or server commands.=Naciskając [F10] możesz otworzyć i zamknąć konsolę. Głównym zastosowaniem konsoli jest wyświetlenie czatu oraz wysyłanie wiadomości lub wpisywanie komend serwera.
|
||||||
|
Using the chat or server command key also opens the console, but it is smaller and will be closed after you sent a message.=Korzystanie z przycisku czatu lub komand serwera również otwiera konsolę, będzie ona jednak mniejsza i zostanie zamknięta po wysłaniu wiadomości.
|
||||||
|
Use the chat to communicate with other players. This requires you to have the “shout” privilege.=Użyj czatu by komunikować się z innymi graczami. Wymaga to przywileju "shout".
|
||||||
|
Just type in the message and hit [Enter]. Public chat messages can not begin with “/”.=Aby to zrobić wpisz wiadomość i naciśnij [Enter]. Publiczne wiadomości nie mogą rozpoczynać się od znaku "/".
|
||||||
|
You can send private messages: Say “/msg <player> <message>” in chat to send “<message>” which can only be seen by <player>.=Możesz wysyłać prywatne wiadomości: Napisz "/msg <gracz> <wiadomość>" w czacie aby wysłać "<wiadomość>" widoczną tylko przez <gracza>.
|
||||||
|
There are some special controls for the console:=W konsoli obowiązuje kilka specjalnych metod sterowania:
|
||||||
|
• [F10] Open/close console=• [F10] Otwórz/zamknij konsolę
|
||||||
|
• [Enter]: Send message or command=• [Enter]: Wyślij wiadomość lub komendę
|
||||||
|
• [Tab]: Try to auto-complete a partially-entered player name=• [Tab]: Spróbuj dokończyć częściowo wprowadzone imię gracza
|
||||||
|
• [Ctrl]+[Left]: Move cursor to the beginning of the previous word=• [Ctrl]+[Lewo]: Przenieś kursor na początek poprzedniego słowa
|
||||||
|
• [Ctrl]+[Right]: Move cursor to the beginning of the next word=• [Ctrl]+[Prawo]: Przenieś kursor na początek następnego słowa
|
||||||
|
• [Ctrl]+[Backspace]: Delete previous word=• [Ctrl]+[Backspace]: Usuń poprzednie słowo
|
||||||
|
• [Ctrl]+[Delete]: Delete next word=• [Ctrl]+[Delete]: Usuń następne słowo
|
||||||
|
• [Ctrl]+[U]: Delete all text before the cursor=• [Ctrl]+[U]: Usuń cały tekst przed kursorem
|
||||||
|
• [Ctrl]+[K]: Delete all text after the cursor=• [Ctrl]+[K]: Usuń cały tekst po kursorze
|
||||||
|
• [Page up]: Scroll up=• [Page up]: Przewiń do góry
|
||||||
|
• [Page down]: Scroll down=• [Page down]: Przewiń w dół
|
||||||
|
There is also an input history. Minetest saves your previous console inputs which you can quickly access later:=Istnieje również historia wprowadzania. Minetest zapisuje wprowadzone komendy, do szybkiego dostępu później:
|
||||||
|
• [Up]: Go to previous entry in history=• [Góra]: Idź do poprzedniej komendy w historii
|
||||||
|
• [Down]: Go to next entry in history=• [Dół]: Idź do następnej komendy w historii
|
||||||
|
Server commands=Komendy serwera
|
||||||
|
Server commands (also called “chat commands”) are little helpers for advanced users. You don't need to use these commands when playing. But they might come in handy to perform some more technical tasks. Server commands work both in multi-player and single-player mode.=Komendy serwera (zwane również "komendy czatu") są drobnymi pomocnymi komendami dla zaawansowanych użytkowników. Nie musisz korzystać z tych komend podczas grania, ale mogą okazać się przydatne przy wykonywaniu technicznych zadań. Działają one zarówno w grze wieloosobowej i jednoosobowej.
|
||||||
|
Server commands can be entered by players using the chat to perform a special server action. There are a few commands which can be issued by everyone, but some commands only work if you have certain privileges granted on the server. There is a small set of basic commands which are always available, other commands can be added by mods.=Komendy serwera mogą być wprowadzane przy użyciu czatu, aby wykonać akcje na serwerze. Niektóre komendy mogą być wywołane przez każdego, ale niektóre działają tylko jeśli masz przyznane przywileje na serwerze. Mały zbiór podstawowych komend dostępny jest zawsze, inne komendy mogą być dodane przez mody.
|
||||||
|
To issue a command, simply type it like a chat message or press Minetest's command key (default: [/]). All commands have to begin with “/”, for example “/mods”. The Minetest command key does the same as the chat key, except that the slash is already entered.=Aby wywołać komendę, po prostu wpisze ją jako wiadomość czatu lub kliknij przycisk komend Minetesta (domyślnie: [/]). Wszystkie komendy muszą zaczynać się od "/', np. "/mods". Przycisk komend Minetesta robi dokładnie to samo co przycisk czatu, ale "/" jest od razu wpisany.
|
||||||
|
Commands may or may not give a response in the chat log, but errors will generally be shown in the chat. Try it for yourselves: Close this window and type in the “/mods” command. This will give you the list of available mods on this server.=Komendy mogą, ale nie muszą wypisać odpowiedź w czacie, ale błędy będą zwykle pokazane w czacie. Sama spróbuj: Zamknij to okno i wpisz komendę "/mods". Ta komenda wypiszę listę dostępnych modów na tym serwerze.
|
||||||
|
“/help all” is a very important command: You get a list of all available commands on the server, a short explanation and the allowed parameters. This command is also important because the available commands often differ per server.="/help all" jest bardzo ważną komendą: Zostanie ci pokazana lista wszystkich dostępnych komend na serwerze, krótkie wyjaśnienie oraz dozwolone parametry. Ta komenda jest również ważna, ponieważ dostępne komendy będą inne w zależności od serwera.
|
||||||
|
Commands are followed by zero or more parameters.=Po komendach mogą wystąpić parametry.
|
||||||
|
In the command reference, you see some placeholders which you need to replace with an actual value. Here's an explanation:=W opisie komend możesz zobaczyć tekst zastępczy, który musisz zamienić na faktyczną wartość. Oto krótkie wyjaśnienie:
|
||||||
|
• Text in greater-than and lower-than signs (e.g. “<param>”): Placeholder for a parameter=• Teks pomiędzy symbolami większe niż oraz mniejsze niż (np. "<parametr>"): Tekst zastępczy dla parametru
|
||||||
|
• Anything in square brackets (e.g. “[text]”) is optional and can be omitted=• Cokolwiek w nawiasach kwadratowych (np. "[tekst]") jest opcjonalne i może być pominięte
|
||||||
|
• Pipe or slash (e.g. “text1 | text2 | text3”): Alternation. One of multiple texts must be used (e.g. “text2”)=• Pionowa kreska lub slesz (np. "tekst1 | tekst2 | tekst3"): Alternatywa. Jeden z wymienionych tekstów musi być użyty (np. "tekst2")
|
||||||
|
• Parenthesis: (e.g. “(word1 word2) | word3”): Groups multiple words together, used for alternations=• Nawiasy (np. "((słowo1 słowo2) | słowo3)"): Grupuje wiele słów razem, używane przy alternatywach
|
||||||
|
• Everything else is to be read as literal text=• Wszystko inne powinno być czytane jako dosłowny tekst
|
||||||
|
Here are some examples to illustrate the command syntax:=Oto kilka przykładów ilustrujących składnię komend:
|
||||||
|
• /mods: No parameters. Just enter “/mods”=• /mods: Brak parametrów. Po prostu wpisz "/mods"
|
||||||
|
• /me <action>: 1 parameter. You have to enter “/me ” followed by any text, e.g. “/me orders pizza”=• /ja <akcja>: 1 parametr. Musisz wpisać "/ja ", a następnie dowolny tekst, np. "/ja zamawiam pizzę"
|
||||||
|
• /give <name> <ItemString>: Two parameters. Example: “/give Player default:apple”=• /give <imię> <nazwa przedmiotu>: Dwa parametry. Przykładowo: "/give gracz default:apple"
|
||||||
|
• /help [all|privs|<cmd>]: Valid inputs are “/help”, “/help all”, “/help privs”, or “/help ” followed by a command name, like “/help time”=• /help [all|privs|<komenda>]: Poprawne użycia tej komendy to "/help", "/help all", "/help privs" lub "/help ", po którym następują nazwa komendy, np. "/help mods"
|
||||||
|
• /spawnentity <EntityName> [<X>,<Y>,<Z>]: Valid inputs include “/spawnentity boats:boat” and “/spawnentity boats:boat 0,0,0”=• /spawnentity <nazwa obiektu> [<X>,<Y>,<Z>]: Poprawne użycia tej komendy to np. "/spawnentity boats:boat" oraz "/spawnentity boats:boat 0,0,0"
|
||||||
|
Some final remarks:=Kilka uwag na koniec:
|
||||||
|
• For /give and /giveme, you need an itemstring. This is an internally used unique item identifier which you may find in the item help if you have the “give” or “debug” privilege=• Aby użyć komend /give oraz /giveme, potrzebujesz nazwy przedmiotu. Jest to używany wewnętrznie unikalny identyfikator, który możesz znaleźć w pomocy jeśli masz przywileje "give" lub "debug"
|
||||||
|
• For /spawnentity you need an entity name, which is another identifier=• Aby użyć /spawnentity musisz znać nazwę obiektu, która podobnie jest identyfikatorem
|
||||||
|
Privileges=Przywileje
|
||||||
|
Each player has a set of privileges, which differs from server to server. Your privileges determine what you can and can't do. Privileges can be granted and revoked from other players by any player who has the privilege called “privs”.=Każdy gracz ma zbiór przywilejów, które są różne w zależności od serwera. Twoje przywileje definiują co możesz, a czego nie możesz robić. Przywileje mogą być nadane i odebrane przez dowolnego gracza, który ma przywilej "privs".
|
||||||
|
On a multiplayer server with the default configuration, new players start with the privileges called “interact” and “shout”. The “interact” privilege is required for the most basic gameplay actions such as building, mining, using, etc. The “shout” privilege allows to chat.=Na serwerze z domyślną konfiguracją nowi gracze zaczynają z przywilejami "interact" oraz "shout". Przywilej "interact" pozwala na podstawowe akcje gry takie jak budowanie, kopanie, używanie itp. Przywilej "shout" pozwala na używanie czatu.
|
||||||
|
There is a small set of core privileges which you'll find on every server, other privileges might be added by mods.=Mały zbiór bazowych przywilejów znajdziesz na każdym serwerze, inne przywileje mogą zostać dodane przez mody.
|
||||||
|
To view your own privileges, issue the server command “/privs”.=Aby zobaczyć swoje przywileje, użyj komendy serwera "/privs".
|
||||||
|
Here are a few basic privilege-related commands:=Oto kilka podstawowych komend związanych z przywilejami:
|
||||||
|
• /privs: Lists your privileges=• /privs: Pokazuje twoje przywileje
|
||||||
|
• /privs <player>: Lists the privileges of <player>=• /privs <gracz>: Pokazuje przywileje <gracza>
|
||||||
|
• /help privs: Shows a list and description about all privileges=• /help privs: Pokazuje listę i opis wszystkich przywilejów
|
||||||
|
Players with the “privs” privilege can modify privileges at will:=Gracze z przywilejem "privs" mogą zmieniać przywileje jak chcą:
|
||||||
|
• /grant <player> <privilege>: Grant <privilege> to <player>=• /grant <gracz> <przywilej>: Nadal <przywilej> <graczowi>
|
||||||
|
• /revoke <player> <privilege>: Revoke <privilege> from <player>=• /revoke <gracz> <przywilej>: Odbierz <przywilej> <graczowi>
|
||||||
|
In single-player mode, you can use “/grantme all” to unlock all abilities.=W trybie jednoosobowym możesz użyć "/grantme all" aby odblokować wszystkie umiejętności.
|
||||||
|
Light=Światło
|
||||||
|
As the world is entirely block-based, so is the light in the world. Each block has its own brightness. The brightness of a block is expressed in a “light level” which ranges from 0 (total darkness) to 15 (as bright as the sun).=Jako, że świat jest całkowicie oparty na blokach, jest tak również w przypadku światła. Każdy blok ma swoją własną jasność. Jasność bloku jest wyrażona w "poziomie oświetlenia", który przyjmuje wartości od 0 (zupełnie ciemny) do 15 (jasny jak słońce).
|
||||||
|
There are two types of light: Sunlight and artificial light.=Są dwa typy światła: słoneczne oraz sztuczne.
|
||||||
|
Artificial light is emitted by luminous blocks. Artificial light has a light level from 1-14.=Światło sztuczne jest emitowane przez oświetlające bloki. Sztuczne światło ma poziom oświetlenia od 1 do 14.
|
||||||
|
Sunlight is the brightest light and always goes perfectly straight down from the sky at each time of the day. At night, the sunlight will become moonlight instead, which still provides a small amount of light. The light level of sunlight is 15.=Światło słoneczne jest najjaśniejszym światłem i zawsze świeci bezpośrednio w dół w trakcie dnia. W nocy światło to zamieni się w księżycowe, które wciąż daje niewielką ilość światła. Poziom oświetlenia słonecznego jest równy 15.
|
||||||
|
Blocks have 3 levels of transparency:=Bloki mają 3 poziomy przeźroczystości:
|
||||||
|
• Transparent: Sunlight goes through limitless, artificial light goes through with losses=• Przeźroczysty: Światło słoneczne przenika bez strat, sztuczne przenika ze spadkiem
|
||||||
|
• Semi-transparent: Sunlight and artificial light go through with losses=• Półprzeźroczysty: Światło słoneczne i sztuczne przenika ze stratą jasności
|
||||||
|
• Opaque: No light passes through=• Nieprzeźroczysty: Światło nie przenika
|
||||||
|
Artificial light will lose one level of brightness for each transparent or semi-transparent block it passes through, until only darkness remains (image 1).=Światło sztuczne będzie traciło jeden poziom jasności z każdym przeźroczystym lub nieprzeźroczystym blokiem przez który przenika, dopóki nie pozostanie tylko ciemność (obrazek 1).
|
||||||
|
Sunlight will preserve its brightness as long it only passes fully transparent blocks. When it passes through a semi-transparent block, it turns to artificial light. Image 2 shows the difference.=Światło słoneczne zachowuje swoją jasność tak długo jak przenika tylko przez w pełni przeźroczyste bloki. Gdy przenika przez półprzeźroczyste bloki, zamienia się w światło sztuczne. Obrazek 2 pokazuje różnicy.
|
||||||
|
Note that “transparency” here only means that the block is able to carry brightness from its neighboring blocks. It is possible for a block to be transparent to light but you can't see trough the other side.=Zwróć uwagę, że "przeźroczystość" odnosi się tutaj tylko do możliwości przenoszenia poziomu oświetlenia z sąsiednich bloków. Jest możliwe by blok był przeźroczysty dla światła, ale nie będziesz w stanie przez niego zobaczyć.
|
||||||
|
Coordinates=Współrzędne
|
||||||
|
The world is a large cube. And because of this, a position in the world can be easily expressed with Cartesian coordinates. That is, for each position in the world, there are 3 values X, Y and Z.=Świat jest wielką kostką. I z tego powodu pozycja w świecie może być łatwo wyrażona we współrzędnych kartezjańskich. To oznacza, że dla każdej pozycji na świecie są 3 wartości X, Y oraz Z.
|
||||||
|
Like this: (5, 45, -12)=Na przykład: (5, 45, -12)
|
||||||
|
This refers to the position where X@=5, Y@=45 and Z@=-12. The 3 letters are called “axes”: Y is for the height. X and Z are for the horizontal position.=To opisuje pozycje w której X@=5, Y@=45 i Z@=-12. Te 3 litery nazywamy "osiami": Y jest wysokością, X i Z są dla pozycji poziomej.
|
||||||
|
The values for X, Y and Z work like this:=Wartości dla X, Y i Z działają następująco:
|
||||||
|
• If you go up, Y increases=• Jeśli pójdziesz w górę, Y się zwiększy
|
||||||
|
• If you go down, Y decreases=• Jeśli pójdziesz w dół, Y się zmniejszy
|
||||||
|
• If you follow the sun, X increases=• Jeśli podążysz za słońcem, X się zwiększy
|
||||||
|
• If you go to the reverse direction, X decreases=• Jeśli pójdziesz w przeciwnym kierunku, X się zmniejszy
|
||||||
|
• Follow the sun, then go right: Z increases=• Podążaj za słońcem następnie, w prawo: Z się zwiększy
|
||||||
|
• Follow the sun, then go left: Z decreases=• Podążaj za słońcem następnie, w lewo: Z się zmniejszy
|
||||||
|
• The side length of a full cube is 1=• Długość boku jednego sześcianu wynosi 1
|
||||||
|
You can view your current position in the debug screen (open with [F5]).=Możesz zobaczyć swoją aktualną pozycję na ekranie debug (otwórz go naciskając [F5]).
|
||||||
|
|
||||||
|
# MCL2 extensions
|
||||||
|
Creative Mode=Tryb kreatywny
|
||||||
|
Enabling Creative Mode in MineClone 2 applies the following changes:=Włączenie trybu kreatywnego w MineClone 2 aplikuje następujące zmiany:
|
||||||
|
• You keep the things you've placed=• Nie tracisz postawionych rzeczy
|
||||||
|
• Creative inventory is available to obtain most items easily=• Kreatywny ekwipunek jest dostępny, który pozwala łatwo zdobywać przedmioty
|
||||||
|
• Hand breaks all default blocks instantly=• Ręka niszczy wszystkie domyślne bloki natychmiastowo
|
||||||
|
• Greatly increased hand pointing range=• Znacząco zwiększony zasięg reki
|
||||||
|
• Mined blocks don't drop items=• Wykopane bloki nie wyrzucają zrzutu
|
||||||
|
• Items don't get used up=• Przedmioty nie zużywają się
|
||||||
|
• Tools don't wear off=• Narzędzie nie niszczą się
|
||||||
|
• You can eat food whenever you want=• Możesz jeść jedzenie kiedy tylko chcesz
|
||||||
|
• You can always use the minimap (including radar mode)=• Zawsze możesz korzystać z minimapy (włączając w to tryb radaru)
|
||||||
|
Damage is not affected by Creative Mode, it needs to be disabled separately.=Tryb kreatywny nie ma wpływu na obrażenia, muszą być wyłączone osobno.
|
||||||
|
Mobs=Moby
|
||||||
|
Mobs are the living beings in the world. This includes animals and monsters.=Moby są żyjącymi stworzeniami w świecie. To między innymi zwierzęta i potwory.
|
||||||
|
Mobs appear randomly throughout the world. This is called “spawning”. Each mob kind appears on particular block types at a given light level. The height also plays a role. Peaceful mobs tend to spawn at daylight while hostile ones prefer darkness. Most mobs can spawn on any solid block but some mobs only spawn on particular blocks (like grass blocks).=Moby pojawiają się losowo w świecie. Nazywamy to "spawnowaniem". Każdy mob pojawia się na pewnym typie bloku przy pewnym poziomie oświetlenia. Wysokość również ma znaczenie. Spokojne moby najczęściej spawnują się w świetle, podczas gdy wrogie preferują ciemność. Większość mobów spawnuje się na dowolnym stałym bloku, ale niektóre moby spawnują się tylko na konkretnych blokach (np. blokach trawy).
|
||||||
|
Like players, mobs have hit points and sometimes armor points, too (which means you need better weapons to deal any damage at all). Also like players, hostile mobs can attack directly or at a distance. Mobs may drop random items after they die.=Podobnie jak gracze, moby mają punkty życia, a czasami również zbroi (co oznacza, że będziesz potrzebował lepszych broni by zadać im obrażenia). Również podobnie jak gracze wrogie moby mogą atakować bezpośrednio lub z dystansu. Moby mogą wyrzucać losowe przedmioty przy śmierci.
|
||||||
|
Most animals roam the world aimlessly while most hostile mobs hunt players. Animals can be fed, tamed and bred.=Większość zwierząt przemieszcza się po świecie bez celu, a większość wrogich mobów poluje na gracza. Zwierzęta mogą być karmione, oswajane i rozmnażane.
|
||||||
|
Animals=Zwierzęta
|
||||||
|
Animals are peaceful beings which roam the world aimlessly. You can feed, tame and breed them.=Zwierzęta są spokojnymi mobami, które przemierzają świat bez celu. Mogą być karmione, oswajane i rozmnażane.
|
||||||
|
Feeding:=Karmienie:
|
||||||
|
Each animal has its own taste for food and doesn't just accept any food. To feed, hold an item in your hand and rightclick the animal.=Każde zwierzę ma swój własny gust w jedzeniu i nie przyjmuje byle czego. Aby nakarmić, weź przedmiot do swojej ręki i kliknij prawym przyciskiem na zwierzę.
|
||||||
|
Animals are attraced to the food they like and follow you as long you hold the food item in hand.=Zwierzęta są przyciągane do jedzenia które lubią i będą za tobą podążać tak długo jak będziesz je trzymała w dłoni.
|
||||||
|
Feeding an animal has three uses: Taming, healing and breeding.=Karmienie zwierząt a trzy zastosowania: Oswajanie, uzdrawianie i rozmnażanie.
|
||||||
|
Feeding heals animals instantly, depending on the quality of the food item.=Karmienie natychmiast uzdrawia zwierzęta w zależności od jakości.
|
||||||
|
Taming:=Oswajanie
|
||||||
|
A few animals can be tamed. You can generally do more things with tamed animals and use other items on them. For example, tame horses can be saddled and tame wolves fight on your side.=Niektóre zwierzęta mogą być oswojony. Z oswojonymi zwierzętami możesz zwykle robić więcej rzeczy i używać na nich dodatkowych przedmiotów. Przykładowo oswojone konie mogą być osiodłane, a oswojone wilki walczą po twojej stronie.
|
||||||
|
Breeding:=Rozmnażanie
|
||||||
|
When you have fed an animal up to its maximum health, then feed it again, you will activate “Love Mode” and many hearts appear around the animal.=Gdy nakarmisz zwierzę do pełnego zdrowia, a następnie nakarmisz je jeszcze raz, aktywujesz "tryb miłości" i wiele serc pojawi się wokół zwierzęcia.
|
||||||
|
Two animals of the same species will start to breed if they are in Love Mode and close to each other. Soon a baby animal will pop up.=Dwa zwierzęta tego samego gatunku będą się rozmnażać jeśli są blisko siebie i w trybie miłości. Wkrótce potem pojawi się dziecko zwierzątko.
|
||||||
|
Baby animals:=Dzieci zwierzątka
|
||||||
|
Baby animals are just like their adult couterparts, but they can't be tamed or bred and don't drop anything when they die. They grow to adults after a short time. When fed, they grow to adults faster.=Dzieci zwierzątka są takie jak ich dorosłe odpowiedniki, jednak nie mogą być oswojone i rozmnażane oraz nie wyrzucają niczego gdy umierają. Po pewnym czasie wyrastają w dorosłe zwierze. Gdy są karmione wyrastają szybciej.
|
||||||
|
Hunger=Głód
|
||||||
|
Hunger affects your health and your ability to sprint. Hunger is not in effect when damage is disabled.=Głód wpływa na twoje zdrowie i możliwość biegania. Głód jest wyłączony gdy obrażenia są wyłączone.
|
||||||
|
Core hunger rules:=Główne zasady głodu:
|
||||||
|
• You start with 20/20 hunger points (more points @= less hungry)=• Zaczynasz z 20/20 punktami głodu (więcej punktów @= mniej głodna)
|
||||||
|
• Actions like combat, jumping, sprinting, etc. decrease hunger points=• Akcje takie jak walka, skakanie, bieganie itp. zmniejszają liczbę punktów głodu
|
||||||
|
• Food restores hunger points=• Jedzenie przywraca punkty głodu
|
||||||
|
• If your hunger bar decreases, you're hungry=• Jeśli twój pasek głodu zmniejsza się, staniesz się głodna
|
||||||
|
• At 18-20 hunger points, you regenerate 1 HP every 4 seconds=• Przy 18-20 punktach głodu, będziesz regenerował 1 HP co 4 sekundy
|
||||||
|
• At 6 hunger points or less, you can't sprint=• Przy 6 punktach głodu i mniej, nie możesz biegać
|
||||||
|
• At 0 hunger points, you lose 1 HP every 4 seconds (down to 1 HP)=• Przy 0 punktach głodu i mniej, tracisz 1 HP co 4 sekundy
|
||||||
|
• Poisonous food decreases your health=• Trujące jedzenie zmniejsza twoje zdrowie
|
||||||
|
Details:=Szczegóły:
|
||||||
|
You have 0-20 hunger points, indicated by 20 drumstick half-icons above the hotbar. You also have an invisible attribute: Saturation.=Masz 0-20 punktów głodu, oznaczanych przez 20 pałek pół-ikon nad paskiem szybkiego dostępu. Posiadasz również niewidzialną własność: Nasycenie.
|
||||||
|
Hunger points reflect how full you are while saturation points reflect how long it takes until you're hungry again.=Punkty głodu pokazują jak pełna jesteś, podczas gdy punkty nasycenia mówią jak długo zajmie zanim znów będziesz głodna.
|
||||||
|
Each food item increases both your hunger level as well your saturation.=Każde jedzenie zwiększa zarówno twój poziom głodu jak i nasycenia.
|
||||||
|
Food with a high saturation boost has the advantage that it will take longer until you get hungry again.=Jedzenie z większym wzrostem nasycenia ma tę przewagę, że sprawi, że dłużej zajmie zanim znów będziesz głodna.
|
||||||
|
A few food items might induce food poisoning by chance. When you're poisoned, the health and hunger symbols turn sickly green. Food poisoning drains your health by 1 HP per second, down to 1 HP. Food poisoning also drains your saturation. Food poisoning goes away after a while or when you drink milk.=Niektóre jedzenia mogą losowo wywołać zatrucie pokarmowe. Gdy jesteś otruta symbole życia i głodu zmienią kolor na zgniło-zielony. Zatrucie pokarmowe zmniejsza twoje życie o 1 HP na sekundę aż do 1 hp. Zmniejsza ono również twoje nasycenie. Zatrucie pokarmowe przechodzi po chwili lub gdy wypijesz mleko.
|
||||||
|
You start with 5 saturation points. The maximum saturation is equal to your current hunger level. So with 20 hunger points your maximum saturation is 20. What this means is that food items which restore many saturation points are more effective the more hunger points you have. This is because at low hunger levels, a lot of the saturation boost will be lost due to the low saturation cap.=Zaczynasz z 5 punktami nasycenia. Maksymalne nasycenie jest równe twojemu aktualnemu poziomowi głodu. Więc z 20 punktami głodu, twój maksymalny poziom nasycenia to 20. To oznacza, że jedzenie które zwiększa nasycenie jest bardziej efektywne im więcej punktów głodu masz. Jest tak ponieważ na niskich poziomach głodu spora część zwiększenia nasycenia zostanie stracona przez niski poziom maksymalny.
|
||||||
|
If your saturation reaches 0, you're hungry and start to lose hunger points. Whenever you see the hunger bar decrease, it is a good time to eat.=Gdy twój poziom nasycenia spadnie do 0 stajesz się głodna i zaczynasz tracić punkty głodu. Gdy widzisz, że twój pasek głodu zmniejsza się, to jest to dobry moment na jedzenie.
|
||||||
|
Saturation decreases by doing things which exhaust you (highest exhaustion first):=Nasycenie zmniejsza się gdy robisz rzeczy, które cię męczą (w kolejności od najbardziej męczącego):
|
||||||
|
• Regenerating 1 HP=• Odnowienie 1 HP
|
||||||
|
• Suffering food poisoning=• Zatrucie pokarmowe
|
||||||
|
• Sprint-jumping=• Skakanie podczas biegu
|
||||||
|
• Sprinting=• Bieganie
|
||||||
|
• Attacking=• Atakowanie
|
||||||
|
• Taking damage=• Otrzymywanie obrażeń
|
||||||
|
• Swimming=• Pływanie
|
||||||
|
• Jumping=• Skakanie
|
||||||
|
• Mining a block=• Kopanie bloku
|
||||||
|
Other actions, like walking, do not exaust you.=Inne akcje takie jak chodzenie nie męczą cię.
|
||||||
|
If you have a map item in any of your hotbar slots, you can use the minimap.=Jeśli masz przedmiot mapy w swoim pasku szybkiego dostępu możesz korzystać z minimapy.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
local S = minetest.get_translator("mcl_doc_basics")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
doc.add_entry("advanced", "creative", {
|
doc.add_entry("advanced", "creative", {
|
||||||
name = S("Creative Mode"),
|
name = S("Creative Mode"),
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
dofile(minetest.get_modpath("mcl_tt").."/snippets_base.lua")
|
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||||
dofile(minetest.get_modpath("mcl_tt").."/snippets_mcl.lua")
|
|
||||||
|
dofile(modpath.."/snippets_base.lua")
|
||||||
|
dofile(modpath.."/snippets_mcl.lua")
|
|
@ -0,0 +1,48 @@
|
||||||
|
# textdomain: mcl_tt
|
||||||
|
Head armor=Zbroja na głowę
|
||||||
|
Torso armor=Zbroja na pierś
|
||||||
|
Legs armor=Zbroja na nogi
|
||||||
|
Feet armor=Zbroja na stopy
|
||||||
|
Armor points: @1=Punkty zbroi
|
||||||
|
Armor durability: @1=Wytrzymałość zbroi: @1
|
||||||
|
Protection: @1%=Ochrona: @1%
|
||||||
|
Hunger points: +@1=Punkty głodu: +@1
|
||||||
|
Saturation points: +@1=Punkty nasycenia: +@1
|
||||||
|
Deals damage when falling=Zadaje obrażenia gdy spada
|
||||||
|
Grows on grass blocks or dirt=Rośnie na blokach trawy i ziemi
|
||||||
|
Grows on grass blocks, podzol, dirt or coarse dirt=Rośnie na blokach trawy, bielicy, ziemi oraz twardej ziemi
|
||||||
|
Flammable=Łatwopalne
|
||||||
|
Zombie view range: -50%=Zasięg widzenia zombie: -50%
|
||||||
|
Skeleton view range: -50%=Zasięg widzenia szkieleta: -50%
|
||||||
|
Creeper view range: -50%=Zasięg widzenia creepera: -50%
|
||||||
|
Damage: @1=Obrażenia: @1
|
||||||
|
Damage (@1): @2=Obrażenia (@1): @2
|
||||||
|
Healing: @1=Leczenie: @1
|
||||||
|
Healing (@1): @2=Leczenie (@1): @2
|
||||||
|
Full punch interval: @1s=Pełny okres uderzenia: @1s
|
||||||
|
Contact damage: @1 per second=Obrażenia kontaktowe: @1 na sekundę
|
||||||
|
Contact healing: @1 per second=Leczenie kontaktowe: @1 na sekundę
|
||||||
|
Drowning damage: @1=Obrażenia od topienia: @1
|
||||||
|
Bouncy (@1%)=Sprężystość (@1%)
|
||||||
|
Luminance: @1=Luminancja: @1
|
||||||
|
Slippery=Śliskość
|
||||||
|
Climbable=Wspinaczkowe
|
||||||
|
Climbable (only downwards)=Wspinaczkowe (tylko w dół)
|
||||||
|
No jumping=Nie można skakać
|
||||||
|
No swimming upwards=Nie można płynąć pod górę
|
||||||
|
No rising=Nie wolno wstawać
|
||||||
|
Fall damage: @1%=Obrażenia od upadku @1%
|
||||||
|
Fall damage: +@1%=Obrażenia od upadku +@1%
|
||||||
|
No fall damage=Brak obrażeń od upadku
|
||||||
|
Mining speed: @1=Szybkość kopania: @1
|
||||||
|
Very fast=Bardzo szybkie
|
||||||
|
Extremely fast=Ekstremalnie szybkie
|
||||||
|
Fast=Szybkie
|
||||||
|
Slow=Wolne
|
||||||
|
Very slow=Bardzo wolne
|
||||||
|
Painfully slow=Boleśnie wolne
|
||||||
|
Mining durability: @1=Wytrzymałość kopania: @1
|
||||||
|
Block breaking strength: @1=Siła niszczenia bloku: @1
|
||||||
|
@1 uses=@1 użyć
|
||||||
|
Unlimited uses=Nielimitowane użycia
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
local S = minetest.get_translator("mcl_tt")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
--[[local function get_min_digtime(caps)
|
--[[local function get_min_digtime(caps)
|
||||||
local mintime
|
local mintime
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
local S = minetest.get_translator("mcl_tt")
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
-- Armor
|
-- Armor
|
||||||
tt.register_snippet(function(itemstring)
|
tt.register_snippet(function(itemstring)
|
||||||
|
|
|
@ -7,11 +7,11 @@ tt.NAME_COLOR = mcl_colors.YELLOW
|
||||||
-- API
|
-- API
|
||||||
tt.registered_snippets = {}
|
tt.registered_snippets = {}
|
||||||
|
|
||||||
tt.register_snippet = function(func)
|
function tt.register_snippet(func)
|
||||||
table.insert(tt.registered_snippets, func)
|
table.insert(tt.registered_snippets, func)
|
||||||
end
|
end
|
||||||
|
|
||||||
tt.register_priority_snippet = function(func)
|
function tt.register_priority_snippet(func)
|
||||||
table.insert(tt.registered_snippets, 1, func)
|
table.insert(tt.registered_snippets, 1, func)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ local function apply_snippets(desc, itemstring, toolcaps, itemstack)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function should_change(itemstring, def)
|
local function should_change(itemstring, def)
|
||||||
return itemstring ~= "" and itemstring ~= "air" and itemstring ~= "ignore" and itemstring ~= "unknown" and def ~= nil and def.description ~= nil and def.description ~= "" and def._tt_ignore ~= true
|
return itemstring ~= "" and itemstring ~= "air" and itemstring ~= "ignore" and itemstring ~= "unknown" and def and def.description and def.description ~= "" and def._tt_ignore ~= true
|
||||||
end
|
end
|
||||||
|
|
||||||
local function append_snippets()
|
local function append_snippets()
|
||||||
|
@ -60,7 +60,7 @@ end
|
||||||
|
|
||||||
minetest.register_on_mods_loaded(append_snippets)
|
minetest.register_on_mods_loaded(append_snippets)
|
||||||
|
|
||||||
tt.reload_itemstack_description = function(itemstack)
|
function tt.reload_itemstack_description(itemstack)
|
||||||
local itemstring = itemstack:get_name()
|
local itemstring = itemstack:get_name()
|
||||||
local def = itemstack:get_definition()
|
local def = itemstack:get_definition()
|
||||||
local meta = itemstack:get_meta()
|
local meta = itemstack:get_meta()
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue