"update" to my fork
@ -1 +0,0 @@
|
||||
Subproject commit 97c8731b63492bd17cfbd6c09694f3a648e6ca8b
|
@ -72,12 +72,12 @@ function ctf_alloc.set_all()
|
||||
|
||||
ctf.move_to_spawn(name)
|
||||
|
||||
if ctf.setting("match.clear_inv") then
|
||||
local inv = player:get_inventory()
|
||||
inv:set_list("main", {})
|
||||
inv:set_list("craft", {})
|
||||
give_initial_stuff(player)
|
||||
end
|
||||
-- if ctf.setting("match.clear_inv") then
|
||||
-- local inv = player:get_inventory()
|
||||
-- inv:set_list("main", {})
|
||||
-- inv:set_list("craft", {})
|
||||
-- give_initial_stuff(player)
|
||||
-- end
|
||||
|
||||
player:set_hp(20)
|
||||
end
|
||||
|
@ -1,3 +1,2 @@
|
||||
ctf
|
||||
ctf_stats
|
||||
irc?
|
||||
|
@ -2,12 +2,9 @@ local bountied_player = nil
|
||||
local bounty_score = 0
|
||||
|
||||
local function announce(name)
|
||||
local _, tcolor = ctf_colors.get_color(bountied_player, ctf.player(bountied_player))
|
||||
tcolor = tcolor:gsub("0x", "#")
|
||||
minetest.chat_send_player(name,
|
||||
minetest.colorize("#fff326", "The next person to kill ") ..
|
||||
minetest.colorize(tcolor, bountied_player) ..
|
||||
minetest.colorize("#fff326", " will receive " .. bounty_score .. " points!"))
|
||||
minetest.colorize("#fff326", "The next person to kill " .. bountied_player ..
|
||||
" will receive " .. bounty_score .. " points!"))
|
||||
end
|
||||
|
||||
local function announce_all()
|
||||
|
@ -56,14 +56,6 @@ for _, orex in pairs(lim_ores) do
|
||||
})
|
||||
end
|
||||
|
||||
crafting.register_recipe({
|
||||
type = "inv",
|
||||
output = "default:bronze_ingot 9",
|
||||
items = { "default:copper_ingot 8", "default:tin_ingot"},
|
||||
always_known = true,
|
||||
level = 1,
|
||||
})
|
||||
|
||||
crafting.register_recipe({
|
||||
type = "inv",
|
||||
output = "default:mese_crystal 9",
|
||||
@ -83,7 +75,7 @@ crafting.register_recipe({
|
||||
crafting.register_recipe({
|
||||
type = "inv",
|
||||
output = "doors:door_steel",
|
||||
items = { "default:steel_ingot 6" },
|
||||
items = { "default:steel 6" },
|
||||
always_known = true,
|
||||
level = 1,
|
||||
})
|
||||
|
@ -1,3 +1,2 @@
|
||||
ctf
|
||||
hudkit
|
||||
irc?
|
||||
|
@ -10,27 +10,6 @@ ctf_events = {
|
||||
events = {}
|
||||
}
|
||||
|
||||
local emoji = {
|
||||
kill_bullet = ",-",
|
||||
kill_grenade = "o'",
|
||||
kill_sword = "+--",
|
||||
}
|
||||
|
||||
local function get_colorcodes(name)
|
||||
if not name then
|
||||
return "", ""
|
||||
end
|
||||
local color = ctf_colors.get_irc_color(name, ctf.player(name))
|
||||
local clear = "\x0F"
|
||||
if color then
|
||||
color = "\x03" .. color
|
||||
else
|
||||
color = ""
|
||||
clear = ""
|
||||
end
|
||||
return color, clear
|
||||
end
|
||||
|
||||
function ctf_events.post(action, one, two)
|
||||
table.insert(ctf_events.events, 1, {
|
||||
action = action,
|
||||
@ -38,16 +17,6 @@ function ctf_events.post(action, one, two)
|
||||
two = two
|
||||
})
|
||||
|
||||
if minetest.global_exists("irc") and emoji[action] then
|
||||
local color1, clear1 = get_colorcodes(one)
|
||||
local color2, clear2 = get_colorcodes(two)
|
||||
local tag1 = one and (color1 .. "_" .. clear1) or ""
|
||||
local tag2 = two and (color2 .. "_" .. clear2) or ""
|
||||
local name1 = one and (tag1 .. one .. tag1) or ""
|
||||
local name2 = two and (tag2 .. two .. tag2) or ""
|
||||
irc.say((name1 .. " " .. emoji[action] .. " " .. name2):trim())
|
||||
end
|
||||
|
||||
while #ctf_events.events > NUM_EVT do
|
||||
table.remove(ctf_events.events, #ctf_events.events)
|
||||
end
|
||||
|
@ -1,4 +1,4 @@
|
||||
give_initial_stuff = {}
|
||||
--[[give_initial_stuff = {}
|
||||
|
||||
setmetatable(give_initial_stuff, {
|
||||
__call = function(self, player)
|
||||
@ -7,10 +7,6 @@ setmetatable(give_initial_stuff, {
|
||||
inv:set_list("main", {})
|
||||
inv:set_list("craft", {})
|
||||
|
||||
inv:set_size("craft", 1)
|
||||
inv:set_size("craftresult", 0)
|
||||
inv:set_size("hand", 0)
|
||||
|
||||
local items = give_initial_stuff.get_stuff()
|
||||
|
||||
for _, item in pairs(items) do
|
||||
@ -32,3 +28,4 @@ minetest.register_on_joinplayer(function(player)
|
||||
give_initial_stuff(player)
|
||||
end)
|
||||
minetest.register_on_respawnplayer(give_initial_stuff)
|
||||
--]]
|
@ -264,11 +264,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
end
|
||||
|
||||
if fields.export then
|
||||
if #flag_positions ~= 2 then
|
||||
minetest.chat_send_all("You need to place two flags!")
|
||||
return
|
||||
end
|
||||
|
||||
we_select(player_name)
|
||||
show_progress_formspec(player_name, "Exporting...")
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
minetest.register_node("ctf_map:ignore", {
|
||||
description = "Artificial Ignore", -- this may need to be given a more appropriate name
|
||||
description = "MyAir (you hacker you!)",
|
||||
drawtype = "airlike",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
@ -13,7 +13,7 @@ minetest.register_node("ctf_map:ignore", {
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:ind_glass", {
|
||||
description = "Indestructible Glass",
|
||||
description = "You cheater you!",
|
||||
drawtype = "glasslike_framed_optional",
|
||||
tiles = {"default_glass.png", "default_glass_detail.png"},
|
||||
inventory_image = minetest.inventorycube("default_glass.png"),
|
||||
@ -28,43 +28,21 @@ minetest.register_node("ctf_map:ind_glass", {
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:ind_stone", {
|
||||
description = "Indestructible Stone",
|
||||
description = "Cheater!",
|
||||
groups = {immortal = 1},
|
||||
tiles = {"default_stone.png"},
|
||||
is_ground_content = false
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:ind_dirt", {
|
||||
description = "Indestructible Dirt",
|
||||
groups = {immortal = 1},
|
||||
tiles = {"default_dirt.png"},
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name = "default_grass_footstep", gain = 0.25}
|
||||
}),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:ind_dirt_with_grass", {
|
||||
description = "Indestructible Dirt with Grass",
|
||||
groups = {immortal = 1},
|
||||
tiles = {"default_grass.png", "default_dirt.png",
|
||||
{name = "default_dirt.png^default_grass_side.png",
|
||||
tileable_vertical = false}},
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name = "default_grass_footstep", gain = 0.25},
|
||||
}),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:ind_stone_red", {
|
||||
description = "Indestructible Red Stone",
|
||||
description = "Cheater!",
|
||||
groups = {immortal = 1},
|
||||
tiles = {"ctf_map_stone_red.png"},
|
||||
is_ground_content = false
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:ind_glass_red", {
|
||||
description = "Indestructible Red Glass",
|
||||
description = "You cheater you!",
|
||||
drawtype = "glasslike",
|
||||
tiles = {"ctf_map_glass_red.png"},
|
||||
inventory_image = minetest.inventorycube("default_glass.png"),
|
||||
|
@ -1,4 +1,4 @@
|
||||
minetest.set_mapgen_params({mgname = "singlenode", flags = "nolight"})
|
||||
assert(minetest.get_mapgen_setting("mg_name") == "singlenode", "singlenode mapgen is required.")
|
||||
|
||||
minetest.register_alias("mapgen_singlenode", "ctf_map:ignore")
|
||||
minetest.register_alias("ctf_map:flag", "air")
|
||||
@ -22,26 +22,13 @@ minetest.register_alias("default:grass_5", "air")
|
||||
minetest.register_alias("default:bush_leaves", "air")
|
||||
minetest.register_alias("default:bush_stem", "air")
|
||||
|
||||
|
||||
local max_r = 120
|
||||
local mapdir = minetest.get_modpath("ctf_map") .. "/maps/"
|
||||
ctf_map.map = nil
|
||||
|
||||
|
||||
local next_idx
|
||||
minetest.register_chatcommand("set_next", {
|
||||
privs = { ctf_admin = true },
|
||||
func = function(name, param)
|
||||
for i, mname in pairs(ctf_map.available_maps) do
|
||||
if mname:lower():find(param, 1, true) then
|
||||
next_idx = i
|
||||
return true, "Selected " .. mname
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
local function search_for_maps()
|
||||
do
|
||||
local files_hash = {}
|
||||
|
||||
local dirs = minetest.get_dir_list(mapdir, true)
|
||||
@ -57,68 +44,50 @@ local function search_for_maps()
|
||||
for key, _ in pairs(files_hash) do
|
||||
table.insert(ctf_map.available_maps, key)
|
||||
end
|
||||
return ctf_map.available_maps
|
||||
print(dump(ctf_map.available_maps))
|
||||
end
|
||||
print(dump(search_for_maps()))
|
||||
|
||||
minetest.register_chatcommand("maps_reload", {
|
||||
privs = { ctf_admin = true },
|
||||
func = function(name, param)
|
||||
local maps = search_for_maps()
|
||||
next_idx = nil
|
||||
return true, #maps .. " maps found: " .. table.concat(maps, ", ")
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
function ctf_map.place_map(map)
|
||||
local schempath = mapdir .. map.schematic
|
||||
ctf_map.emerge_with_callbacks(nil, map.pos1, map.pos2, function()
|
||||
local schempath = mapdir .. map.schematic
|
||||
local res = minetest.place_schematic(map.pos1, schempath,
|
||||
map.rotation == "z" and "0" or "90")
|
||||
|
||||
--
|
||||
-- Place schematic
|
||||
--
|
||||
local vm = minetest.get_voxel_manip(map.pos1, map.pos2)
|
||||
local res = minetest.place_schematic_on_vmanip(vm, map.pos1, schempath,
|
||||
map.rotation == "z" and "0" or "90")
|
||||
assert(res)
|
||||
vm:write_to_map()
|
||||
assert(res)
|
||||
|
||||
--
|
||||
-- Create bases
|
||||
--
|
||||
for _, value in pairs(ctf_map.map.teams) do
|
||||
ctf_team_base.place(value.color, value.pos)
|
||||
end
|
||||
|
||||
--
|
||||
-- Place flags
|
||||
--
|
||||
local seed = minetest.get_mapgen_setting("seed")
|
||||
for _, chestzone in pairs(ctf_map.map.chests) do
|
||||
minetest.log("warning", "Placing " .. chestzone.n .. " chests from " ..
|
||||
minetest.pos_to_string(chestzone.from) .. " to "..
|
||||
minetest.pos_to_string(chestzone.to))
|
||||
place_chests(chestzone.from, chestzone.to, seed, chestzone.n)
|
||||
end
|
||||
|
||||
--
|
||||
-- Wait then send map messages (avoids "X joined blue" spam)
|
||||
--
|
||||
minetest.after(2, function()
|
||||
local msg = "Map: " .. map.name .. " by " .. map.author
|
||||
if map.hint then
|
||||
msg = msg .. "\n" .. map.hint
|
||||
for _, value in pairs(ctf_map.map.teams) do
|
||||
ctf_team_base.place(value.color, value.pos)
|
||||
end
|
||||
minetest.chat_send_all(msg)
|
||||
if minetest.global_exists("irc") and irc.connected then
|
||||
irc:say("Map: " .. map.name)
|
||||
end
|
||||
end)
|
||||
|
||||
local seed = minetest.get_mapgen_setting("seed")
|
||||
--[[for _, chestzone in pairs(ctf_map.map.chests) do
|
||||
minetest.log("warning", "Placing " .. chestzone.n .. " chests from " ..
|
||||
minetest.pos_to_string(chestzone.from) .. " to "..
|
||||
minetest.pos_to_string(chestzone.to))
|
||||
place_chests(chestzone.from, chestzone.to, seed, chestzone.n)
|
||||
end--]]
|
||||
|
||||
minetest.after(2, function()
|
||||
local msg = "Map: " .. map.name .. " by " .. map.author
|
||||
if map.hint then
|
||||
msg = msg .. "\n" .. map.hint
|
||||
end
|
||||
minetest.chat_send_all(msg)
|
||||
if minetest.global_exists("irc") and irc.connected then
|
||||
irc:say("Map: " .. map.name)
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.after(10, function()
|
||||
minetest.fix_light(ctf_map.map.pos1, ctf_map.map.pos2)
|
||||
end)
|
||||
end, nil)
|
||||
end
|
||||
|
||||
function ctf_match.load_map_meta(idx, name)
|
||||
local offset = vector.new(600 * idx, 0, 0)
|
||||
local meta = Settings(mapdir .. name .. ".conf")
|
||||
local meta = Settings(mapdir .. name .. ".conf")
|
||||
|
||||
local initial_stuff = meta:get("initial_stuff")
|
||||
local map = {
|
||||
@ -139,7 +108,7 @@ function ctf_match.load_map_meta(idx, name)
|
||||
assert(map.r <= max_r)
|
||||
|
||||
map.pos1 = vector.add(offset, { x = -map.r, y = -map.h / 2, z = -map.r })
|
||||
map.pos2 = vector.add(offset, { x = map.r, y = map.h / 2, z = map.r })
|
||||
map.pos2 = vector.add(offset, { x = map.r, y = map.h / 2, z = map.r })
|
||||
|
||||
-- Read teams from config
|
||||
local i = 1
|
||||
@ -208,9 +177,7 @@ ctf_match.register_on_new_match(function()
|
||||
|
||||
-- Choose next map index, but don't select the same one again
|
||||
local idx
|
||||
if next_idx then
|
||||
idx = next_idx
|
||||
elseif ctf_map.map then
|
||||
if ctf_map.map then
|
||||
idx = math.random(#ctf_map.available_maps - 1)
|
||||
if idx >= ctf_map.map.idx then
|
||||
idx = idx + 1
|
||||
@ -218,7 +185,6 @@ ctf_match.register_on_new_match(function()
|
||||
else
|
||||
idx = math.random(#ctf_map.available_maps)
|
||||
end
|
||||
next_idx = (idx % #ctf_map.available_maps) + 1
|
||||
|
||||
-- Load meta data
|
||||
local name = ctf_map.available_maps[idx]
|
||||
|
@ -35,7 +35,7 @@ minetest.register_chatcommand("ctf_respawn", {
|
||||
local player = minetest.get_player_by_name(param)
|
||||
if player then
|
||||
ctf.move_to_spawn(param)
|
||||
give_initial_stuff(player)
|
||||
--give_initial_stuff(player)
|
||||
minetest.chat_send_player(param,
|
||||
"You were sent back to base and your inventory wiped (by " .. name .. ")")
|
||||
return true, "Moved player to spawn and wiped inventory."
|
||||
|
@ -42,6 +42,7 @@ function ctf_match.next()
|
||||
ctf_alloc.set_all()
|
||||
|
||||
minetest.set_timeofday(0.4)
|
||||
|
||||
|
||||
minetest.chat_send_all("Next round!")
|
||||
if minetest.global_exists("chatplus") then
|
||||
|
@ -57,7 +57,7 @@ for _, chest_color in pairs(colors) do
|
||||
if not pstat or not pstat.score or pstat.score < 10 then
|
||||
local msg = "You need at least 10 score to access the team chest.\n" ..
|
||||
"Try killing an enemy player, or at least attempting to capture the flag.\n" ..
|
||||
"Find resources in chests scattered around the map."
|
||||
"Set a class at the flag to get a different kit."
|
||||
formspec = formspec .. "label[1,1;" .. minetest.formspec_escape(msg) .. "]"
|
||||
minetest.show_formspec(player:get_player_name(), "ctf_team_base:no_access", formspec)
|
||||
return
|
||||
|
@ -42,6 +42,13 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:acacia_wood',
|
||||
recipe = {
|
||||
{'default:acacia_bush_stem'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:stick 4',
|
||||
recipe = {
|
||||
@ -49,6 +56,24 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:sign_wall_steel 3',
|
||||
recipe = {
|
||||
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
|
||||
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
|
||||
{'', 'group:stick', ''},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:sign_wall_wood 3',
|
||||
recipe = {
|
||||
{'group:wood', 'group:wood', 'group:wood'},
|
||||
{'group:wood', 'group:wood', 'group:wood'},
|
||||
{'', 'group:stick', ''},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:torch 4',
|
||||
recipe = {
|
||||
@ -327,6 +352,46 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:skeleton_key',
|
||||
recipe = {
|
||||
{'default:gold_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:chest',
|
||||
recipe = {
|
||||
{'group:wood', 'group:wood', 'group:wood'},
|
||||
{'group:wood', '', 'group:wood'},
|
||||
{'group:wood', 'group:wood', 'group:wood'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:chest_locked',
|
||||
recipe = {
|
||||
{'group:wood', 'group:wood', 'group:wood'},
|
||||
{'group:wood', 'default:steel_ingot', 'group:wood'},
|
||||
{'group:wood', 'group:wood', 'group:wood'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
type = "shapeless",
|
||||
output = "default:chest_locked",
|
||||
recipe = {"default:chest", "default:steel_ingot"},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:furnace',
|
||||
recipe = {
|
||||
{'group:stone', 'group:stone', 'group:stone'},
|
||||
{'group:stone', '', 'group:stone'},
|
||||
{'group:stone', 'group:stone', 'group:stone'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:coalblock',
|
||||
recipe = {
|
||||
@ -343,6 +408,54 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:steelblock',
|
||||
recipe = {
|
||||
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
|
||||
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
|
||||
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:steel_ingot 9',
|
||||
recipe = {
|
||||
{'default:steelblock'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:copperblock',
|
||||
recipe = {
|
||||
{'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'},
|
||||
{'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'},
|
||||
{'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:copper_ingot 9',
|
||||
recipe = {
|
||||
{'default:copperblock'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "default:tinblock",
|
||||
recipe = {
|
||||
{"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"},
|
||||
{"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"},
|
||||
{"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "default:tin_ingot 9",
|
||||
recipe = {
|
||||
{"default:tinblock"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "default:bronze_ingot 9",
|
||||
recipe = {
|
||||
@ -352,6 +465,54 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:bronzeblock',
|
||||
recipe = {
|
||||
{'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'},
|
||||
{'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'},
|
||||
{'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:bronze_ingot 9',
|
||||
recipe = {
|
||||
{'default:bronzeblock'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:goldblock',
|
||||
recipe = {
|
||||
{'default:gold_ingot', 'default:gold_ingot', 'default:gold_ingot'},
|
||||
{'default:gold_ingot', 'default:gold_ingot', 'default:gold_ingot'},
|
||||
{'default:gold_ingot', 'default:gold_ingot', 'default:gold_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:gold_ingot 9',
|
||||
recipe = {
|
||||
{'default:goldblock'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:diamondblock',
|
||||
recipe = {
|
||||
{'default:diamond', 'default:diamond', 'default:diamond'},
|
||||
{'default:diamond', 'default:diamond', 'default:diamond'},
|
||||
{'default:diamond', 'default:diamond', 'default:diamond'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:diamond 9',
|
||||
recipe = {
|
||||
{'default:diamondblock'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "default:sandstone",
|
||||
recipe = {
|
||||
@ -478,6 +639,31 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:paper',
|
||||
recipe = {
|
||||
{'default:papyrus', 'default:papyrus', 'default:papyrus'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:book',
|
||||
recipe = {
|
||||
{'default:paper'},
|
||||
{'default:paper'},
|
||||
{'default:paper'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:bookshelf',
|
||||
recipe = {
|
||||
{'group:wood', 'group:wood', 'group:wood'},
|
||||
{'default:book', 'default:book', 'default:book'},
|
||||
{'group:wood', 'group:wood', 'group:wood'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "default:ladder_wood 5",
|
||||
recipe = {
|
||||
@ -487,6 +673,15 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:ladder_steel 15',
|
||||
recipe = {
|
||||
{'default:steel_ingot', '', 'default:steel_ingot'},
|
||||
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
|
||||
{'default:steel_ingot', '', 'default:steel_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:mese',
|
||||
recipe = {
|
||||
@ -519,6 +714,56 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:meselamp',
|
||||
recipe = {
|
||||
{'default:glass'},
|
||||
{'default:mese_crystal'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "default:mese_post_light 3",
|
||||
recipe = {
|
||||
{"", "default:glass", ""},
|
||||
{"default:mese_crystal", "default:mese_crystal", "default:mese_crystal"},
|
||||
{"", "group:wood", ""},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:obsidian_shard 9',
|
||||
recipe = {
|
||||
{'default:obsidian'}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:obsidian',
|
||||
recipe = {
|
||||
{'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'},
|
||||
{'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'},
|
||||
{'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:obsidianbrick 4',
|
||||
recipe = {
|
||||
{'default:obsidian', 'default:obsidian'},
|
||||
{'default:obsidian', 'default:obsidian'}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:obsidian_block 9',
|
||||
recipe = {
|
||||
{'default:obsidian', 'default:obsidian', 'default:obsidian'},
|
||||
{'default:obsidian', 'default:obsidian', 'default:obsidian'},
|
||||
{'default:obsidian', 'default:obsidian', 'default:obsidian'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:stonebrick 4',
|
||||
recipe = {
|
||||
@ -587,6 +832,12 @@ minetest.register_craft({
|
||||
recipe = "group:sand",
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "default:obsidian_glass",
|
||||
recipe = "default:obsidian_shard",
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "default:stone",
|
||||
@ -635,6 +886,20 @@ minetest.register_craft({
|
||||
recipe = "default:clay_lump",
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = 'cooking',
|
||||
output = 'default:gold_ingot',
|
||||
recipe = 'default:skeleton_key',
|
||||
cooktime = 5,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = 'cooking',
|
||||
output = 'default:gold_ingot',
|
||||
recipe = 'default:key',
|
||||
cooktime = 5,
|
||||
})
|
||||
|
||||
--
|
||||
-- Fuels
|
||||
--
|
||||
@ -908,6 +1173,24 @@ minetest.register_craft({
|
||||
burntime = 2,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:paper",
|
||||
burntime = 1,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:book",
|
||||
burntime = 3,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:book_written",
|
||||
burntime = 3,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:dry_shrub",
|
||||
|
@ -6,6 +6,247 @@ minetest.register_craftitem("default:stick", {
|
||||
groups = {stick = 1, flammable = 2},
|
||||
})
|
||||
|
||||
minetest.register_craftitem("default:paper", {
|
||||
description = "Paper",
|
||||
inventory_image = "default_paper.png",
|
||||
groups = {flammable = 3},
|
||||
})
|
||||
|
||||
|
||||
local lpp = 14 -- Lines per book's page
|
||||
local function book_on_use(itemstack, user)
|
||||
local player_name = user:get_player_name()
|
||||
local meta = itemstack:get_meta()
|
||||
local title, text, owner = "", "", player_name
|
||||
local page, page_max, lines, string = 1, 1, {}, ""
|
||||
|
||||
-- Backwards compatibility
|
||||
local old_data = minetest.deserialize(itemstack:get_metadata())
|
||||
if old_data then
|
||||
meta:from_table({ fields = old_data })
|
||||
end
|
||||
|
||||
local data = meta:to_table().fields
|
||||
|
||||
if data.owner then
|
||||
title = data.title
|
||||
text = data.text
|
||||
owner = data.owner
|
||||
|
||||
for str in (text .. "\n"):gmatch("([^\n]*)[\n]") do
|
||||
lines[#lines+1] = str
|
||||
end
|
||||
|
||||
if data.page then
|
||||
page = data.page
|
||||
page_max = data.page_max
|
||||
|
||||
for i = ((lpp * page) - lpp) + 1, lpp * page do
|
||||
if not lines[i] then break end
|
||||
string = string .. lines[i] .. "\n"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local formspec
|
||||
if owner == player_name then
|
||||
formspec = "size[8,8]" .. default.gui_bg ..
|
||||
default.gui_bg_img ..
|
||||
"field[0.5,1;7.5,0;title;Title:;" ..
|
||||
minetest.formspec_escape(title) .. "]" ..
|
||||
"textarea[0.5,1.5;7.5,7;text;Contents:;" ..
|
||||
minetest.formspec_escape(text) .. "]" ..
|
||||
"button_exit[2.5,7.5;3,1;save;Save]"
|
||||
else
|
||||
formspec = "size[8,8]" .. default.gui_bg ..
|
||||
default.gui_bg_img ..
|
||||
"label[0.5,0.5;by " .. owner .. "]" ..
|
||||
"tablecolumns[color;text]" ..
|
||||
"tableoptions[background=#00000000;highlight=#00000000;border=false]" ..
|
||||
"table[0.4,0;7,0.5;title;#FFFF00," .. minetest.formspec_escape(title) .. "]" ..
|
||||
"textarea[0.5,1.5;7.5,7;;" ..
|
||||
minetest.formspec_escape(string ~= "" and string or text) .. ";]" ..
|
||||
"button[2.4,7.6;0.8,0.8;book_prev;<]" ..
|
||||
"label[3.2,7.7;Page " .. page .. " of " .. page_max .. "]" ..
|
||||
"button[4.9,7.6;0.8,0.8;book_next;>]"
|
||||
end
|
||||
|
||||
minetest.show_formspec(player_name, "default:book", formspec)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= "default:book" then return end
|
||||
local inv = player:get_inventory()
|
||||
local stack = player:get_wielded_item()
|
||||
|
||||
if fields.save and fields.title ~= "" and fields.text ~= "" then
|
||||
local new_stack, data
|
||||
if stack:get_name() ~= "default:book_written" then
|
||||
local count = stack:get_count()
|
||||
if count == 1 then
|
||||
stack:set_name("default:book_written")
|
||||
else
|
||||
stack:set_count(count - 1)
|
||||
new_stack = ItemStack("default:book_written")
|
||||
end
|
||||
else
|
||||
data = stack:get_meta():to_table().fields
|
||||
end
|
||||
|
||||
if data and data.owner and data.owner ~= player:get_player_name() then
|
||||
return
|
||||
end
|
||||
|
||||
if not data then data = {} end
|
||||
data.title = fields.title
|
||||
data.owner = player:get_player_name()
|
||||
data.description = "\""..fields.title.."\" by "..data.owner
|
||||
data.text = fields.text
|
||||
data.text_len = #data.text
|
||||
data.page = 1
|
||||
data.page_max = math.ceil((#data.text:gsub("[^\n]", "") + 1) / lpp)
|
||||
|
||||
if new_stack then
|
||||
new_stack:get_meta():from_table({ fields = data })
|
||||
if inv:room_for_item("main", new_stack) then
|
||||
inv:add_item("main", new_stack)
|
||||
else
|
||||
minetest.add_item(player:getpos(), new_stack)
|
||||
end
|
||||
else
|
||||
stack:get_meta():from_table({ fields = data })
|
||||
end
|
||||
|
||||
elseif fields.book_next or fields.book_prev then
|
||||
local data = stack:get_meta():to_table().fields
|
||||
if not data or not data.page then
|
||||
return
|
||||
end
|
||||
|
||||
data.page = tonumber(data.page)
|
||||
data.page_max = tonumber(data.page_max)
|
||||
|
||||
if fields.book_next then
|
||||
data.page = data.page + 1
|
||||
if data.page > data.page_max then
|
||||
data.page = 1
|
||||
end
|
||||
else
|
||||
data.page = data.page - 1
|
||||
if data.page == 0 then
|
||||
data.page = data.page_max
|
||||
end
|
||||
end
|
||||
|
||||
stack:get_meta():from_table({fields = data})
|
||||
stack = book_on_use(stack, player)
|
||||
end
|
||||
|
||||
-- Update stack
|
||||
player:set_wielded_item(stack)
|
||||
end)
|
||||
|
||||
minetest.register_craftitem("default:book", {
|
||||
description = "Book",
|
||||
inventory_image = "default_book.png",
|
||||
groups = {book = 1, flammable = 3},
|
||||
on_use = book_on_use,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("default:book_written", {
|
||||
description = "Book With Text",
|
||||
inventory_image = "default_book_written.png",
|
||||
groups = {book = 1, not_in_creative_inventory = 1, flammable = 3},
|
||||
stack_max = 1,
|
||||
on_use = book_on_use,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "default:book_written",
|
||||
recipe = {"default:book", "default:book_written"}
|
||||
})
|
||||
|
||||
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
|
||||
if itemstack:get_name() ~= "default:book_written" then
|
||||
return
|
||||
end
|
||||
|
||||
local original
|
||||
local index
|
||||
for i = 1, player:get_inventory():get_size("craft") do
|
||||
if old_craft_grid[i]:get_name() == "default:book_written" then
|
||||
original = old_craft_grid[i]
|
||||
index = i
|
||||
end
|
||||
end
|
||||
if not original then
|
||||
return
|
||||
end
|
||||
local copymeta = original:get_meta():to_table()
|
||||
-- copy of the book held by player's mouse cursor
|
||||
itemstack:get_meta():from_table(copymeta)
|
||||
-- put the book with metadata back in the craft grid
|
||||
craft_inv:set_stack("craft", index, original)
|
||||
end)
|
||||
|
||||
minetest.register_craftitem("default:skeleton_key", {
|
||||
description = "Skeleton Key",
|
||||
inventory_image = "default_key_skeleton.png",
|
||||
groups = {key = 1},
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if pointed_thing.type ~= "node" then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local pos = pointed_thing.under
|
||||
local node = minetest.get_node(pos)
|
||||
|
||||
if not node then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local on_skeleton_key_use = minetest.registered_nodes[node.name].on_skeleton_key_use
|
||||
if not on_skeleton_key_use then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
-- make a new key secret in case the node callback needs it
|
||||
local random = math.random
|
||||
local newsecret = string.format(
|
||||
"%04x%04x%04x%04x",
|
||||
random(2^16) - 1, random(2^16) - 1,
|
||||
random(2^16) - 1, random(2^16) - 1)
|
||||
|
||||
local secret, _, _ = on_skeleton_key_use(pos, user, newsecret)
|
||||
|
||||
if secret then
|
||||
local inv = minetest.get_inventory({type="player", name=user:get_player_name()})
|
||||
|
||||
-- update original itemstack
|
||||
itemstack:take_item()
|
||||
|
||||
-- finish and return the new key
|
||||
local new_stack = ItemStack("default:key")
|
||||
local meta = new_stack:get_meta()
|
||||
meta:set_string("secret", secret)
|
||||
meta:set_string("description", "Key to "..user:get_player_name().."'s "
|
||||
..minetest.registered_nodes[node.name].description)
|
||||
|
||||
if itemstack:get_count() == 0 then
|
||||
itemstack = new_stack
|
||||
else
|
||||
if inv:add_item("main", new_stack):get_count() > 0 then
|
||||
minetest.add_item(user:getpos(), new_stack)
|
||||
end -- else: added to inventory successfully
|
||||
end
|
||||
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_craftitem("default:coal_lump", {
|
||||
description = "Coal Lump",
|
||||
inventory_image = "default_coal_lump.png",
|
||||
@ -81,3 +322,13 @@ minetest.register_craftitem("default:clay_brick", {
|
||||
description = "Clay Brick",
|
||||
inventory_image = "default_clay_brick.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("default:obsidian_shard", {
|
||||
description = "Obsidian Shard",
|
||||
inventory_image = "default_obsidian_shard.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("default:flint", {
|
||||
description = "Flint",
|
||||
inventory_image = "default_flint.png"
|
||||
})
|
||||
|
@ -122,7 +122,11 @@ end
|
||||
--
|
||||
|
||||
default.cool_lava = function(pos, node)
|
||||
minetest.set_node(pos, {name = "default:stone"})
|
||||
if node.name == "default:lava_source" then
|
||||
minetest.set_node(pos, {name = "default:obsidian"})
|
||||
else -- Lava flowing
|
||||
minetest.set_node(pos, {name = "default:stone"})
|
||||
end
|
||||
minetest.sound_play("default_cool_lava",
|
||||
{pos = pos, max_hear_distance = 16, gain = 0.25})
|
||||
end
|
||||
@ -212,6 +216,25 @@ function default.grow_papyrus(pos, node)
|
||||
return true
|
||||
end
|
||||
|
||||
minetest.register_abm({
|
||||
label = "Grow cactus",
|
||||
nodenames = {"default:cactus"},
|
||||
neighbors = {"group:sand"},
|
||||
interval = 12,
|
||||
chance = 83,
|
||||
action = default.grow_cactus
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
label = "Grow papyrus",
|
||||
nodenames = {"default:papyrus"},
|
||||
neighbors = {"default:dirt", "default:dirt_with_grass"},
|
||||
interval = 14,
|
||||
chance = 71,
|
||||
action = default.grow_papyrus
|
||||
})
|
||||
|
||||
|
||||
--
|
||||
-- dig upwards
|
||||
--
|
||||
@ -427,6 +450,31 @@ minetest.register_abm({
|
||||
})
|
||||
|
||||
|
||||
--
|
||||
-- Moss growth on cobble near water
|
||||
--
|
||||
|
||||
minetest.register_abm({
|
||||
label = "Moss growth",
|
||||
nodenames = {"default:cobble", "stairs:slab_cobble", "stairs:stair_cobble", "walls:cobble"},
|
||||
neighbors = {"group:water"},
|
||||
interval = 16,
|
||||
chance = 200,
|
||||
catch_up = false,
|
||||
action = function(pos, node)
|
||||
if node.name == "default:cobble" then
|
||||
minetest.set_node(pos, {name = "default:mossycobble"})
|
||||
elseif node.name == "stairs:slab_cobble" then
|
||||
minetest.set_node(pos, {name = "stairs:slab_mossycobble", param2 = node.param2})
|
||||
elseif node.name == "stairs:stair_cobble" then
|
||||
minetest.set_node(pos, {name = "stairs:stair_mossycobble", param2 = node.param2})
|
||||
elseif node.name == "walls:cobble" then
|
||||
minetest.set_node(pos, {name = "walls:mossycobble", param2 = node.param2})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
--
|
||||
-- Checks if specified volume intersects a protected volume
|
||||
--
|
||||
@ -467,6 +515,22 @@ function default.intersects_protection(minp, maxp, player_name, interval)
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Coral death near air
|
||||
--
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"default:coral_brown", "default:coral_orange"},
|
||||
neighbors = {"air"},
|
||||
interval = 17,
|
||||
chance = 5,
|
||||
catch_up = false,
|
||||
action = function(pos, node)
|
||||
minetest.set_node(pos, {name = "default:coral_skeleton"})
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
--
|
||||
-- NOTICE: This method is not an official part of the API yet!
|
||||
-- This method may change in future.
|
||||
|
330
mods/default/furnace.lua
Normal file
@ -0,0 +1,330 @@
|
||||
|
||||
--
|
||||
-- Formspecs
|
||||
--
|
||||
|
||||
local function active_formspec(fuel_percent, item_percent)
|
||||
local formspec =
|
||||
"size[8,8.5]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
default.gui_slots..
|
||||
"list[current_name;src;2.75,0.5;1,1;]"..
|
||||
"list[current_name;fuel;2.75,2.5;1,1;]"..
|
||||
"image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"..
|
||||
(100-fuel_percent)..":default_furnace_fire_fg.png]"..
|
||||
"image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:"..
|
||||
(item_percent)..":gui_furnace_arrow_fg.png^[transformR270]"..
|
||||
"list[current_name;dst;4.75,0.96;2,2;]"..
|
||||
"list[current_player;main;0,4.25;8,1;]"..
|
||||
"list[current_player;main;0,5.5;8,3;8]"..
|
||||
"listring[current_name;dst]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_name;src]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_name;fuel]"..
|
||||
"listring[current_player;main]"..
|
||||
default.get_hotbar_bg(0, 4.25)
|
||||
return formspec
|
||||
end
|
||||
|
||||
local inactive_formspec =
|
||||
"size[8,8.5]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
default.gui_slots..
|
||||
"list[current_name;src;2.75,0.5;1,1;]"..
|
||||
"list[current_name;fuel;2.75,2.5;1,1;]"..
|
||||
"image[2.75,1.5;1,1;default_furnace_fire_bg.png]"..
|
||||
"image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]"..
|
||||
"list[current_name;dst;4.75,0.96;2,2;]"..
|
||||
"list[current_player;main;0,4.25;8,1;]"..
|
||||
"list[current_player;main;0,5.5;8,3;8]"..
|
||||
"listring[current_name;dst]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_name;src]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_name;fuel]"..
|
||||
"listring[current_player;main]"..
|
||||
default.get_hotbar_bg(0, 4.25)
|
||||
|
||||
--
|
||||
-- Node callback functions that are the same for active and inactive furnace
|
||||
--
|
||||
|
||||
local function can_dig(pos, player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
return inv:is_empty("fuel") and inv:is_empty("dst") and inv:is_empty("src")
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if listname == "fuel" then
|
||||
if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
|
||||
if inv:is_empty("src") then
|
||||
meta:set_string("infotext", "Furnace is empty")
|
||||
end
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0
|
||||
end
|
||||
elseif listname == "src" then
|
||||
return stack:get_count()
|
||||
elseif listname == "dst" then
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local stack = inv:get_stack(from_list, from_index)
|
||||
return allow_metadata_inventory_put(pos, to_list, to_index, stack, player)
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_take(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
return stack:get_count()
|
||||
end
|
||||
|
||||
local function swap_node(pos, name)
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name == name then
|
||||
return
|
||||
end
|
||||
node.name = name
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
|
||||
local function furnace_node_timer(pos, elapsed)
|
||||
--
|
||||
-- Inizialize metadata
|
||||
--
|
||||
local meta = minetest.get_meta(pos)
|
||||
local fuel_time = meta:get_float("fuel_time") or 0
|
||||
local src_time = meta:get_float("src_time") or 0
|
||||
local fuel_totaltime = meta:get_float("fuel_totaltime") or 0
|
||||
|
||||
local inv = meta:get_inventory()
|
||||
local srclist, fuellist
|
||||
|
||||
local cookable, cooked
|
||||
local fuel
|
||||
|
||||
local update = true
|
||||
while update do
|
||||
update = false
|
||||
|
||||
srclist = inv:get_list("src")
|
||||
fuellist = inv:get_list("fuel")
|
||||
|
||||
--
|
||||
-- Cooking
|
||||
--
|
||||
|
||||
-- Check if we have cookable content
|
||||
local aftercooked
|
||||
cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
|
||||
cookable = cooked.time ~= 0
|
||||
|
||||
-- Check if we have enough fuel to burn
|
||||
if fuel_time < fuel_totaltime then
|
||||
-- The furnace is currently active and has enough fuel
|
||||
fuel_time = fuel_time + elapsed
|
||||
-- If there is a cookable item then check if it is ready yet
|
||||
if cookable then
|
||||
src_time = src_time + elapsed
|
||||
if src_time >= cooked.time then
|
||||
-- Place result in dst list if possible
|
||||
if inv:room_for_item("dst", cooked.item) then
|
||||
inv:add_item("dst", cooked.item)
|
||||
inv:set_stack("src", 1, aftercooked.items[1])
|
||||
src_time = src_time - cooked.time
|
||||
update = true
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
-- Furnace ran out of fuel
|
||||
if cookable then
|
||||
-- We need to get new fuel
|
||||
local afterfuel
|
||||
fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
|
||||
|
||||
if fuel.time == 0 then
|
||||
-- No valid fuel in fuel list
|
||||
fuel_totaltime = 0
|
||||
src_time = 0
|
||||
else
|
||||
-- Take fuel from fuel list
|
||||
inv:set_stack("fuel", 1, afterfuel.items[1])
|
||||
update = true
|
||||
fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime)
|
||||
src_time = src_time + elapsed
|
||||
end
|
||||
else
|
||||
-- We don't need to get new fuel since there is no cookable item
|
||||
fuel_totaltime = 0
|
||||
src_time = 0
|
||||
end
|
||||
fuel_time = 0
|
||||
end
|
||||
|
||||
elapsed = 0
|
||||
end
|
||||
|
||||
if fuel and fuel_totaltime > fuel.time then
|
||||
fuel_totaltime = fuel.time
|
||||
end
|
||||
if srclist[1]:is_empty() then
|
||||
src_time = 0
|
||||
end
|
||||
|
||||
--
|
||||
-- Update formspec, infotext and node
|
||||
--
|
||||
local formspec = inactive_formspec
|
||||
local item_state
|
||||
local item_percent = 0
|
||||
if cookable then
|
||||
item_percent = math.floor(src_time / cooked.time * 100)
|
||||
if item_percent > 100 then
|
||||
item_state = "100% (output full)"
|
||||
else
|
||||
item_state = item_percent .. "%"
|
||||
end
|
||||
else
|
||||
if srclist[1]:is_empty() then
|
||||
item_state = "Empty"
|
||||
else
|
||||
item_state = "Not cookable"
|
||||
end
|
||||
end
|
||||
|
||||
local fuel_state = "Empty"
|
||||
local active = "inactive "
|
||||
local result = false
|
||||
|
||||
if fuel_totaltime ~= 0 then
|
||||
active = "active "
|
||||
local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100)
|
||||
fuel_state = fuel_percent .. "%"
|
||||
formspec = active_formspec(fuel_percent, item_percent)
|
||||
swap_node(pos, "default:furnace_active")
|
||||
-- make sure timer restarts automatically
|
||||
result = true
|
||||
else
|
||||
if not fuellist[1]:is_empty() then
|
||||
fuel_state = "0%"
|
||||
end
|
||||
swap_node(pos, "default:furnace")
|
||||
-- stop timer on the inactive furnace
|
||||
minetest.get_node_timer(pos):stop()
|
||||
end
|
||||
|
||||
local infotext = "Furnace " .. active .. "(Item: " .. item_state .. "; Fuel: " .. fuel_state .. ")"
|
||||
|
||||
--
|
||||
-- Set meta values
|
||||
--
|
||||
meta:set_float("fuel_totaltime", fuel_totaltime)
|
||||
meta:set_float("fuel_time", fuel_time)
|
||||
meta:set_float("src_time", src_time)
|
||||
meta:set_string("formspec", formspec)
|
||||
meta:set_string("infotext", infotext)
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
--
|
||||
-- Node definitions
|
||||
--
|
||||
|
||||
minetest.register_node("default:furnace", {
|
||||
description = "Furnace",
|
||||
tiles = {
|
||||
"default_furnace_top.png", "default_furnace_bottom.png",
|
||||
"default_furnace_side.png", "default_furnace_side.png",
|
||||
"default_furnace_side.png", "default_furnace_front.png"
|
||||
},
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=2},
|
||||
legacy_facedir_simple = true,
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
|
||||
can_dig = can_dig,
|
||||
|
||||
on_timer = furnace_node_timer,
|
||||
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", inactive_formspec)
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size('src', 1)
|
||||
inv:set_size('fuel', 1)
|
||||
inv:set_size('dst', 4)
|
||||
end,
|
||||
|
||||
on_metadata_inventory_move = function(pos)
|
||||
minetest.get_node_timer(pos):start(1.0)
|
||||
end,
|
||||
on_metadata_inventory_put = function(pos)
|
||||
-- start timer function, it will sort out whether furnace can burn or not.
|
||||
minetest.get_node_timer(pos):start(1.0)
|
||||
end,
|
||||
on_blast = function(pos)
|
||||
local drops = {}
|
||||
default.get_inventory_drops(pos, "src", drops)
|
||||
default.get_inventory_drops(pos, "fuel", drops)
|
||||
default.get_inventory_drops(pos, "dst", drops)
|
||||
drops[#drops+1] = "default:furnace"
|
||||
minetest.remove_node(pos)
|
||||
return drops
|
||||
end,
|
||||
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_move = allow_metadata_inventory_move,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
})
|
||||
|
||||
minetest.register_node("default:furnace_active", {
|
||||
description = "Furnace",
|
||||
tiles = {
|
||||
"default_furnace_top.png", "default_furnace_bottom.png",
|
||||
"default_furnace_side.png", "default_furnace_side.png",
|
||||
"default_furnace_side.png",
|
||||
{
|
||||
image = "default_furnace_front_active.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 1.5
|
||||
},
|
||||
}
|
||||
},
|
||||
paramtype2 = "facedir",
|
||||
light_source = 8,
|
||||
drop = "default:furnace",
|
||||
groups = {cracky=2, not_in_creative_inventory=1},
|
||||
legacy_facedir_simple = true,
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_timer = furnace_node_timer,
|
||||
|
||||
can_dig = can_dig,
|
||||
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_move = allow_metadata_inventory_move,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
})
|
||||
|
@ -40,6 +40,7 @@ local default_path = minetest.get_modpath("default")
|
||||
dofile(default_path.."/functions.lua")
|
||||
dofile(default_path.."/trees.lua")
|
||||
dofile(default_path.."/nodes.lua")
|
||||
dofile(default_path.."/furnace.lua")
|
||||
dofile(default_path.."/torch.lua")
|
||||
dofile(default_path.."/tools.lua")
|
||||
dofile(default_path.."/item_entity.lua")
|
||||
|
@ -7,12 +7,12 @@ function default.register_falling_node(nodename, texture)
|
||||
minetest.log("error", debug.traceback())
|
||||
minetest.log('error', "WARNING: default.register_falling_node is deprecated")
|
||||
if minetest.registered_nodes[nodename] then
|
||||
-- minetest.registered_nodes[nodename].groups.falling_node = 1
|
||||
minetest.registered_nodes[nodename].groups.falling_node = 1
|
||||
end
|
||||
end
|
||||
|
||||
function default.spawn_falling_node(p, nodename)
|
||||
-- spawn_falling_node(p, nodename)
|
||||
spawn_falling_node(p, nodename)
|
||||
end
|
||||
|
||||
-- Liquids
|
||||
|
BIN
mods/default/textures/default_furnace_bottom.png
Normal file
After Width: | Height: | Size: 274 B |
BIN
mods/default/textures/default_furnace_fire_bg.png
Normal file
After Width: | Height: | Size: 129 B |
BIN
mods/default/textures/default_furnace_fire_fg.png
Normal file
After Width: | Height: | Size: 558 B |
BIN
mods/default/textures/default_furnace_front.png
Normal file
After Width: | Height: | Size: 307 B |
BIN
mods/default/textures/default_furnace_front_active.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
mods/default/textures/default_furnace_side.png
Normal file
After Width: | Height: | Size: 296 B |
BIN
mods/default/textures/default_furnace_top.png
Normal file
After Width: | Height: | Size: 274 B |
BIN
mods/default/textures/default_obsidian.png
Normal file
After Width: | Height: | Size: 155 B |
BIN
mods/default/textures/default_obsidian_block.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
mods/default/textures/default_obsidian_brick.png
Normal file
After Width: | Height: | Size: 268 B |
BIN
mods/default/textures/default_obsidian_glass.png
Normal file
After Width: | Height: | Size: 128 B |
BIN
mods/default/textures/default_obsidian_glass_detail.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
mods/default/textures/default_obsidian_shard.png
Normal file
After Width: | Height: | Size: 110 B |
@ -378,3 +378,42 @@ minetest.register_tool("default:sword_diamond", {
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:key", {
|
||||
description = "Key",
|
||||
inventory_image = "default_key.png",
|
||||
groups = {key = 1, not_in_creative_inventory = 1},
|
||||
stack_max = 1,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local under = pointed_thing.under
|
||||
local node = minetest.get_node(under)
|
||||
local def = minetest.registered_nodes[node.name]
|
||||
if def and def.on_rightclick and
|
||||
not (placer and placer:get_player_control().sneak) then
|
||||
return def.on_rightclick(under, node, placer, itemstack,
|
||||
pointed_thing) or itemstack
|
||||
end
|
||||
if pointed_thing.type ~= "node" then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local pos = pointed_thing.under
|
||||
node = minetest.get_node(pos)
|
||||
|
||||
if not node or node.name == "ignore" then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local ndef = minetest.registered_nodes[node.name]
|
||||
if not ndef then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local on_key_use = ndef.on_key_use
|
||||
if on_key_use then
|
||||
on_key_use(pos, placer)
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
})
|
||||
|
@ -1,202 +0,0 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "{}"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright {yyyy} {name of copyright owner}
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
@ -1,4 +0,0 @@
|
||||
minetest-dropondie
|
||||
==================
|
||||
|
||||
Minecraft-like drop-all-items-on-die mod
|
@ -1 +0,0 @@
|
||||
ctf_map
|
@ -1 +0,0 @@
|
||||
With this mod, players will drop all their items in their inventory on the ground when they die.
|
@ -1,52 +0,0 @@
|
||||
local blacklist_drop = {
|
||||
"default:pick_wood",
|
||||
"default:sword_wood",
|
||||
"default:ax_wood"
|
||||
}
|
||||
|
||||
local function drop(pos, itemstack)
|
||||
local it = itemstack:take_item(itemstack:get_count())
|
||||
local sname = it:get_name()
|
||||
|
||||
for _, item in pairs(blacklist_drop) do
|
||||
if sname == item then
|
||||
minetest.log("error", "Not dropping " .. item)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local obj = minetest.add_item(pos, it)
|
||||
|
||||
if obj then
|
||||
obj:setvelocity({x=math.random(-1,1), y=5, z=math.random(-1,1)})
|
||||
|
||||
local remi = minetest.setting_get("remove_items")
|
||||
if minetest.is_yes(remi) then
|
||||
obj:remove()
|
||||
end
|
||||
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local function drop_list(pos, inv, list)
|
||||
for i = 1, inv:get_size(list) do
|
||||
drop(pos, inv:get_stack(list, i))
|
||||
inv:set_stack(list, i, nil)
|
||||
end
|
||||
end
|
||||
|
||||
local function drop_all(player)
|
||||
local pos = player:getpos()
|
||||
pos.y = math.floor(pos.y + 0.5)
|
||||
|
||||
local inv = player:get_inventory()
|
||||
for _, item in pairs(give_initial_stuff.get_stuff()) do
|
||||
inv:remove_item("main", ItemStack(item))
|
||||
end
|
||||
drop_list(pos, inv, "main")
|
||||
drop_list(pos, inv, "craft")
|
||||
end
|
||||
|
||||
minetest.register_on_dieplayer(drop_all)
|
||||
minetest.register_on_leaveplayer(drop_all)
|
@ -48,23 +48,27 @@ end
|
||||
function random_messages.read_messages()
|
||||
random_messages.messages = {
|
||||
"To talk to only your team, start your messages with /t. For example, /t Hello team!",
|
||||
"Eat apples to restore health quickly.",
|
||||
"Steel swords do more damage than guns, but you need to be up close.",
|
||||
"If you're interested in Kingdom simulation and warfare, check out Persistent Kingdoms.",
|
||||
"Check out my other server, Persistent Kingdoms.",
|
||||
"Healers can heal other players quickly with their bandages.",
|
||||
"Hammers do more damage than Swords, but you need to be closer, and they are slower.",
|
||||
"Spears have a longer range than Swords, but they are slower.",
|
||||
"Gain more score by killing more than you die, or by capturing the flag.",
|
||||
"You gain more score the better the opponent you defeat.",
|
||||
"Find weapons in chests or mine and use furnaces to make stronger swords.",
|
||||
"To change class or resupply, rightclick (or double tap for mobile users) the flag or use /class.",
|
||||
"Players are immune to attack for 15 seconds after they respawn.",
|
||||
"Access the pro section of the chest by achieving a 1k+ score and killing 3 people for every 2 deaths.",
|
||||
"Use team doors (steel) to stop the enemy walking into your base.",
|
||||
"Sprint by pressing the fast key (E) when you have stamina.",
|
||||
"Like CTF? Give feedback using /report, and consider donating at rubenwardy.com/donate",
|
||||
"Builders can use team doors (steel) to stop the enemy walking into your base.",
|
||||
"Better armor makes you slower.",
|
||||
"You can ignite TNT by shooting it with a torch arrow.",
|
||||
"Like the server? Give feedback using /report. Thanks to rubenwardy for the base game.",
|
||||
"Map makers needed! Visit ctf.rubenwardy.com to get involved.",
|
||||
"Using limited resources for building structures that don't strengthen your base's defences is discouraged.",
|
||||
"Builders kit with a lot of building supplies.",
|
||||
"To report misbehaving players to moderators, please use /report NAME MESSAGE",
|
||||
"Swearing, trolling and being rude will not be tolerated and strict action will be taken.",
|
||||
"Trapping team mates on purpose is strictly against the rules and you will be kicked / banned immediately.",
|
||||
"Help your team claim victory by storing extra weapons in the team chest, and never taking more than you need.",
|
||||
"Note: The maximum number of apples in a stack has been reduced from 99 to 30.",
|
||||
"Trapping team mates on purpose is strictly against the rules and you will be kicked / banned.",
|
||||
"Help your team claim victory by staying together and/or working as a team.",
|
||||
"Note: Apples don't heal you anymore, only time or bandages do.",
|
||||
"Excessive spawn-killing is a direct violation of the rules - appropriate punishments will be given."
|
||||
}
|
||||
end
|
||||
|
@ -1,2 +0,0 @@
|
||||
First person shooter mod.
|
||||
Adds firearms plus a few other fun items.
|
@ -1 +0,0 @@
|
||||
name = shooter
|
Before Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 178 B |
Before Width: | Height: | Size: 173 B |
Before Width: | Height: | Size: 278 B |
Before Width: | Height: | Size: 291 B |
Before Width: | Height: | Size: 310 B |
Before Width: | Height: | Size: 498 B |
Before Width: | Height: | Size: 178 B |
Before Width: | Height: | Size: 381 B |
Before Width: | Height: | Size: 621 B |
Before Width: | Height: | Size: 537 B |
Before Width: | Height: | Size: 569 B |
Before Width: | Height: | Size: 274 B |
Before Width: | Height: | Size: 420 B |
Before Width: | Height: | Size: 690 B |
Before Width: | Height: | Size: 679 B |
Before Width: | Height: | Size: 376 B |
Before Width: | Height: | Size: 402 B |
Before Width: | Height: | Size: 289 B |
Before Width: | Height: | Size: 178 B |
Before Width: | Height: | Size: 354 B |
Before Width: | Height: | Size: 1.2 KiB |
@ -1,7 +0,0 @@
|
||||
Copyright 2018 by rubenwardy and GunshipPenguin
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@ -1,31 +0,0 @@
|
||||
# Sprint Mod For minetest
|
||||
|
||||
Allows players to sprint by holding E, by default increasing their travel speed
|
||||
by 80% and their jump speed by 10%. Also adds a stamina bar that goes down when
|
||||
the player sprints and goes up they're not sprinting.
|
||||
|
||||
This mod is compatible with the HUD bars [hudbars] mod, but does not depend on
|
||||
it. In this case, a green HUD bar will be displayed, also showing a number.
|
||||
If this mod is not present, a standard statbar with 0-20 “half-arrows” is shown,
|
||||
which is a bit more coarse than the HUD bar version.
|
||||
|
||||
This mod is by rubenwardy, and is based on a mod by GunshipPenguin but heavily
|
||||
rewritten to be more performant.
|
||||
|
||||
License: MIT (see license.txt)
|
||||
|
||||
## Settings
|
||||
|
||||
1.0 represents normal speed so 1.5 would mean that a sprinting player would
|
||||
travel 50% faster than a walking player and 2.4 would mean that a sprinting
|
||||
player would travel 140% faster than a walking player.
|
||||
|
||||
* `sprint_speed`- 1 is normal walking speed, defaults to 1.8.
|
||||
* `sprint_jump` - 1 is normal jump speed, defaults to 1.1.
|
||||
* `sprint_stamina` - How long the sprint lasts in seconds, defaults to 20.
|
||||
* `sprint_heal_rate` - Multiply this by the stamina to get how long it takes to recharge, defaults to 0.5.
|
||||
* `sprint_min` - The minimum value at which you can start sprinting, defaults to 0.5.
|
||||
|
||||
## Recharging when the sprint key is down
|
||||
|
||||
Follow the instructions in comments marked by `##number##`.
|
@ -1 +0,0 @@
|
||||
hudbars?
|
@ -1,120 +0,0 @@
|
||||
-- Sprint mod by rubenwardy. License: MIT.
|
||||
-- Heavily modified from a mod by GunshipPenguin
|
||||
|
||||
-- Config, see README.md
|
||||
local MOD_WALK = tonumber(minetest.settings:get("sprint_speed") or 1.8)
|
||||
local MOD_JUMP = tonumber(minetest.settings:get("sprint_jump") or 1.1)
|
||||
local STAMINA_MAX = tonumber(minetest.settings:get("sprint_stamina") or 20)
|
||||
local HEAL_RATE = tonumber(minetest.settings:get("sprint_heal_rate") or 0.5)
|
||||
local MIN_SPRINT = tonumber(minetest.settings:get("sprint_min") or 0.5)
|
||||
local SPRINT_MODIFIERS = {
|
||||
[true] = { speed = MOD_WALK, jump = MOD_JUMP },
|
||||
[false] = { speed = 1.0, jump = 1.0 },
|
||||
}
|
||||
|
||||
if minetest.get_modpath("hudbars") ~= nil then
|
||||
hb.register_hudbar("sprint", 0xFFFFFF, "Stamina",
|
||||
{ bar = "sprint_stamina_bar.png", icon = "sprint_stamina_icon.png" },
|
||||
STAMINA_MAX, STAMINA_MAX,
|
||||
false, "%s: %.1f/%.1f")
|
||||
|
||||
SPRINT_HUDBARS_USED = true
|
||||
else
|
||||
SPRINT_HUDBARS_USED = false
|
||||
end
|
||||
|
||||
local players = {}
|
||||
|
||||
local function setSprinting(player, info, sprinting)
|
||||
if info.sprinting ~= sprinting then
|
||||
player:set_physics_override(SPRINT_MODIFIERS[sprinting])
|
||||
end
|
||||
info.sprinting = sprinting
|
||||
end
|
||||
|
||||
minetest.register_globalstep(function(dtime)
|
||||
for name, info in pairs(players) do
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if not player then
|
||||
players[name] = nil
|
||||
else
|
||||
-- ##?## You can enable recharging when the E key is pressed by
|
||||
-- following these instructions.
|
||||
|
||||
--Check if the player should be sprinting
|
||||
local controls = player:get_player_control()
|
||||
local sprintRequested = controls.aux1 and controls.up
|
||||
-- ##1## replace info.sprintRequested with info.sprinting
|
||||
if sprintRequested ~= info.sprintRequested then
|
||||
if sprintRequested and info.stamina > MIN_SPRINT then
|
||||
setSprinting(player, info, true)
|
||||
end
|
||||
|
||||
if not sprintRequested then
|
||||
setSprinting(player, info, false)
|
||||
end
|
||||
end
|
||||
info.sprintRequested = sprintRequested
|
||||
|
||||
local staminaChanged = false
|
||||
if info.sprinting then
|
||||
info.stamina = info.stamina - dtime
|
||||
staminaChanged = true
|
||||
if info.stamina <= 0 then
|
||||
info.stamina = 0
|
||||
setSprinting(player, info, false)
|
||||
end
|
||||
|
||||
-- ##2## remove `not info.sprintRequested and`
|
||||
elseif not info.sprintRequested and info.stamina < STAMINA_MAX then
|
||||
info.stamina = info.stamina + dtime * HEAL_RATE
|
||||
staminaChanged = true
|
||||
if info.stamina > STAMINA_MAX then
|
||||
info.stamina = STAMINA_MAX
|
||||
end
|
||||
end
|
||||
|
||||
if staminaChanged then
|
||||
if SPRINT_HUDBARS_USED then
|
||||
hb.change_hudbar(player, "sprint", info.stamina)
|
||||
else
|
||||
local numBars = math.floor(20 * info.stamina / STAMINA_MAX)
|
||||
if info.lastHudSendValue ~= numBars then
|
||||
info.lastHudSendValue = numBars
|
||||
player:hud_change(info.hud, "number", numBars)
|
||||
print("Sending hud value")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local info = {
|
||||
sprinting = false, -- Is the player actually sprinting?
|
||||
stamina = STAMINA_MAX, -- integer, the stamina we have left
|
||||
sprintRequested = false, -- is the sprint key down / etc?
|
||||
}
|
||||
|
||||
if SPRINT_HUDBARS_USED then
|
||||
hb.init_hudbar(player, "sprint")
|
||||
else
|
||||
info.hud = player:hud_add({
|
||||
hud_elem_type = "statbar",
|
||||
position = {x=0.5, y=1},
|
||||
size = {x=24, y=24},
|
||||
text = "sprint_stamina_icon.png",
|
||||
number = 20,
|
||||
alignment = {x=0, y=1},
|
||||
offset = {x=-263, y=-110},
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
players[player:get_player_name()] = info
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
players[player:get_player_name()] = nil
|
||||
end)
|
Before Width: | Height: | Size: 791 B |
Before Width: | Height: | Size: 80 B |
Before Width: | Height: | Size: 148 B |
11
mods/warfare_pack/3d_armor-master/.gitignore
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
## Generic ignorable patterns and files
|
||||
*~
|
||||
.*.swp
|
||||
*bak*
|
||||
tags
|
||||
*.vim
|
||||
armor.conf
|
||||
|
||||
## Eclipse project files & directories
|
||||
.project
|
||||
.settings
|
9
mods/warfare_pack/3d_armor-master/3d_armor/LICENSE.txt
Normal file
@ -0,0 +1,9 @@
|
||||
[mod] 3d Armor [3d_armor]
|
||||
=========================
|
||||
|
||||
License Source Code: (C) 2012-2017 Stuart Jones - LGPL v2.1
|
||||
|
||||
License Textures: Copyright (C) 2017 davidthecreator - CC-BY-SA 3.0
|
||||
|
||||
https://github.com/daviddoesminetest/3d-armors-new-textures
|
||||
|
191
mods/warfare_pack/3d_armor-master/3d_armor/README.txt
Normal file
@ -0,0 +1,191 @@
|
||||
[mod] Visible Player Armor [3d_armor]
|
||||
=====================================
|
||||
|
||||
Depends: default
|
||||
|
||||
Recommends: sfinv, unified_inventory or smart_inventory (use only one to avoid conflicts)
|
||||
|
||||
Supports: player_monoids and armor_monoid
|
||||
|
||||
Adds craftable armor that is visible to other players. Each armor item worn contributes to
|
||||
a player's armor group level making them less vulnerable to weapons.
|
||||
|
||||
Armor takes damage when a player is hurt but also offers a percentage chance of healing.
|
||||
Overall level is boosted by 10% when wearing a full matching set.
|
||||
|
||||
Fire protection added by TenPlus1 when using crystal armor if Ethereal mod active, level 1
|
||||
protects against torches, level 2 for crystal spike, level 3 for fire, level 5 for lava.
|
||||
|
||||
Armor Configuration
|
||||
-------------------
|
||||
|
||||
Override the following default settings by adding them to your minetest.conf file.
|
||||
|
||||
-- Set false to disable individual armor materials.
|
||||
armor_material_wood = true
|
||||
armor_material_cactus = true
|
||||
armor_material_steel = true
|
||||
armor_material_bronze = true
|
||||
armor_material_diamond = true
|
||||
armor_material_gold = true
|
||||
armor_material_mithril = true
|
||||
armor_material_crystal = true
|
||||
|
||||
-- Increase this if you get initialization glitches when a player first joins.
|
||||
armor_init_delay = 1
|
||||
|
||||
-- Number of initialization attempts.
|
||||
-- Use in conjunction with armor_init_delay if initialization problems persist.
|
||||
armor_init_times = 1
|
||||
|
||||
-- Increase this if armor is not getting into bones due to server lag.
|
||||
armor_bones_delay = 1
|
||||
|
||||
-- How often player armor items are updated.
|
||||
armor_update_time = 1
|
||||
|
||||
-- Drop armor when a player dies.
|
||||
-- Uses bones mod if present, otherwise items are dropped around the player.
|
||||
armor_drop = true
|
||||
|
||||
-- Pulverise armor when a player dies, overrides armor_drop.
|
||||
armor_destroy = false
|
||||
|
||||
-- You can use this to increase or decrease overall armor effectiveness,
|
||||
-- eg: level_multiplier = 0.5 will reduce armor level by half.
|
||||
armor_level_multiplier = 1
|
||||
|
||||
-- You can use this to increase or decrease overall armor healing,
|
||||
-- eg: armor_heal_multiplier = 0 will disable healing altogether.
|
||||
armor_heal_multiplier = 1
|
||||
|
||||
-- Enable water protection (periodically restores breath when activated)
|
||||
armor_water_protect = true
|
||||
|
||||
-- Enable fire protection (defaults true if using ethereal mod)
|
||||
armor_fire_protect = false
|
||||
|
||||
-- Enable punch damage effects.
|
||||
armor_punch_damage = true
|
||||
|
||||
-- Enable migration of old armor inventories
|
||||
armor_migrate_old_inventory = true
|
||||
|
||||
API
|
||||
---
|
||||
|
||||
Armor Registration:
|
||||
|
||||
armor:register_armor(name, def)
|
||||
|
||||
Wrapper function for `minetest.register_tool`, while registering armor as
|
||||
a tool item is still supported, this may be deprecated in future so new code
|
||||
should use this method.
|
||||
|
||||
Additional fields supported by 3d_armor:
|
||||
|
||||
texture = <filename>
|
||||
preview = <filename>
|
||||
armor_groups = <table>
|
||||
damage_groups = <table>
|
||||
reciprocate_damage = <bool>
|
||||
on_equip = <function>
|
||||
on_unequip = <function>
|
||||
on_destroy = <function>
|
||||
on_damage = <function>
|
||||
on_punched = <function>
|
||||
|
||||
armor:register_armor_group(group, base)
|
||||
|
||||
Example:
|
||||
|
||||
armor:register_armor_group("radiation", 100)
|
||||
|
||||
armor:register_armor("mod_name:speed_boots", {
|
||||
description = "Speed Boots",
|
||||
inventory_image = "mod_name_speed_boots_inv.png",
|
||||
texture = "mod_name_speed_boots.png",
|
||||
preview = "mod_name_speed_boots_preview.png",
|
||||
groups = {armor_feet=1, armor_use=500, physics_speed=1.2, flammable=1},
|
||||
armor_groups = {fleshy=10, radiation=10},
|
||||
damage_groups = {cracky=3, snappy=3, choppy=3, crumbly=3, level=1},
|
||||
reciprocate_damage = true,
|
||||
on_destroy = function(player, index, stack)
|
||||
local pos = player:getpos()
|
||||
if pos then
|
||||
minetest.sound_play({
|
||||
name = "mod_name_break_sound",
|
||||
pos = pos,
|
||||
gain = 0.5,
|
||||
})
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
See armor.lua, technic_armor and shields mods for more examples.
|
||||
|
||||
Default groups:
|
||||
|
||||
Elements: armor_head, armor_torso, armor_legs, armor_feet
|
||||
Attributes: armor_heal, armor_fire, armor_water
|
||||
Physics: physics_jump, physics_speed, physics_gravity
|
||||
Durability: armor_use, flammable
|
||||
|
||||
Notes:
|
||||
|
||||
Elements may be modified by dependent mods, eg shields adds armor_shield.
|
||||
Attributes and physics values are 'stackable', durability is determined
|
||||
by the level of armor_use, total uses == approx (65535/armor_use), non-fleshy
|
||||
damage groups need to be defined in the tool/weapon used against the player.
|
||||
|
||||
Reciprocal tool damage will be done only by the first armor inventory item
|
||||
with `reciprocate_damage = true`
|
||||
|
||||
Armor Functions:
|
||||
|
||||
armor:set_player_armor(player)
|
||||
|
||||
Primarily an internal function but can be called externally to apply any
|
||||
changes that might not otherwise get handled.
|
||||
|
||||
armor:punch(player, hitter, time_from_last_punch, tool_capabilities)
|
||||
|
||||
Used to apply damage to all equipped armor based on the damage groups of
|
||||
each individual item.`hitter`, `time_from_last_punch` and `tool_capabilities`
|
||||
are optional but should be valid if included.
|
||||
|
||||
armor:damage(player, index, stack, use)
|
||||
|
||||
Adds wear to a single armor itemstack, triggers `on_damage` callbacks and
|
||||
updates the necessary inventories. Also handles item destruction callbacks
|
||||
and so should NOT be called from `on_unequip` to avoid an infinite loop.
|
||||
|
||||
Item Callbacks:
|
||||
|
||||
on_equip = func(player, index, stack)
|
||||
on_unequip = func(player, index, stack)
|
||||
on_destroy = func(player, index, stack)
|
||||
on_damage = func(player, index, stack)
|
||||
on_punched = func(player, hitter, time_from_last_punch, tool_capabilities)
|
||||
|
||||
Notes:
|
||||
|
||||
`on_punched` is called every time a player is punched or takes damage, `hitter`,
|
||||
`time_from_last_punch` and `tool_capabilities` can be `nil` and will be in the
|
||||
case of fall damage, etc. When fire protection is enabled, hitter == "fire"
|
||||
in the event of fire damage. Return `false` to override armor damage effects.
|
||||
When armor is destroyed `stack` will contain a copy of the previous stack.
|
||||
|
||||
Global Callbacks:
|
||||
|
||||
armor:register_on_update(func(player))
|
||||
armor:register_on_equip(func(player, index, stack))
|
||||
armor:register_on_unequip(func(player, index, stack))
|
||||
armor:register_on_destroy(func(player, index, stack))
|
||||
|
||||
Global Callback Example:
|
||||
|
||||
armor:register_on_update(function(player)
|
||||
print(player:get_player_name().." armor updated!")
|
||||
end)
|
||||
|
45
mods/warfare_pack/3d_armor-master/3d_armor/admin.lua
Normal file
@ -0,0 +1,45 @@
|
||||
minetest.register_alias("adminboots","3d_armor:boots_admin")
|
||||
minetest.register_alias("adminhelmet","3d_armor:helmet_admin")
|
||||
minetest.register_alias("adminchestplate","3d_armor:chestplate_admin")
|
||||
minetest.register_alias("adminlegginss","3d_armor:leggings_admin")
|
||||
|
||||
minetest.register_tool("3d_armor:helmet_admin", {
|
||||
description = "Admin Helmet",
|
||||
inventory_image = "3d_armor_inv_helmet_admin.png",
|
||||
groups = {armor_head=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1},
|
||||
wear = 0,
|
||||
on_drop = function(itemstack, dropper, pos)
|
||||
return
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_tool("3d_armor:chestplate_admin", {
|
||||
description = "Admin Chestplate",
|
||||
inventory_image = "3d_armor_inv_chestplate_admin.png",
|
||||
groups = {armor_torso=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1},
|
||||
wear = 0,
|
||||
on_drop = function(itemstack, dropper, pos)
|
||||
return
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_tool("3d_armor:leggings_admin", {
|
||||
description = "Admin Leggings",
|
||||
inventory_image = "3d_armor_inv_leggings_admin.png",
|
||||
groups = {armor_legs=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1},
|
||||
wear = 0,
|
||||
on_drop = function(itemstack, dropper, pos)
|
||||
return
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_tool("3d_armor:boots_admin", {
|
||||
description = "Admin Boots",
|
||||
inventory_image = "3d_armor_inv_boots_admin.png",
|
||||
groups = {armor_feet=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1},
|
||||
wear = 0,
|
||||
on_drop = function(itemstack, dropper, pos)
|
||||
return
|
||||
end,
|
||||
})
|
||||
|
565
mods/warfare_pack/3d_armor-master/3d_armor/api.lua
Normal file
@ -0,0 +1,565 @@
|
||||
-- support for i18n
|
||||
local S = armor_i18n.gettext
|
||||
|
||||
local skin_previews = {}
|
||||
local use_player_monoids = minetest.global_exists("player_monoids")
|
||||
local use_armor_monoid = minetest.global_exists("armor_monoid")
|
||||
local use_pova_mod = minetest.get_modpath("pova")
|
||||
local armor_def = setmetatable({}, {
|
||||
__index = function()
|
||||
return setmetatable({
|
||||
groups = setmetatable({}, {
|
||||
__index = function()
|
||||
return 0
|
||||
end})
|
||||
}, {
|
||||
__index = function()
|
||||
return 0
|
||||
end
|
||||
})
|
||||
end,
|
||||
})
|
||||
local armor_textures = setmetatable({}, {
|
||||
__index = function()
|
||||
return setmetatable({}, {
|
||||
__index = function()
|
||||
return "blank.png"
|
||||
end
|
||||
})
|
||||
end
|
||||
})
|
||||
|
||||
armor = {
|
||||
timer = 0,
|
||||
elements = {"head", "torso", "legs", "feet"},
|
||||
physics = {"jump", "speed", "gravity"},
|
||||
attributes = {"heal", "fire", "water"},
|
||||
formspec = "image[2.5,0;2,4;armor_preview]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
default.gui_slots..
|
||||
default.get_hotbar_bg(0, 4.7)..
|
||||
"list[current_player;main;0,4.7;8,1;]"..
|
||||
"list[current_player;main;0,5.85;8,3;8]",
|
||||
def = armor_def,
|
||||
textures = armor_textures,
|
||||
default_skin = "character",
|
||||
materials = {
|
||||
wood = "group:wood",
|
||||
cactus = "default:cactus",
|
||||
steel = "default:steel_ingot",
|
||||
bronze = "default:bronze_ingot",
|
||||
diamond = "default:diamond",
|
||||
gold = "default:gold_ingot",
|
||||
mithril = "moreores:mithril_ingot",
|
||||
crystal = "ethereal:crystal_ingot",
|
||||
},
|
||||
fire_nodes = {
|
||||
{"default:lava_source", 5, 8},
|
||||
{"default:lava_flowing", 5, 8},
|
||||
{"fire:basic_flame", 3, 4},
|
||||
{"fire:permanent_flame", 3, 4},
|
||||
{"ethereal:crystal_spike", 2, 1},
|
||||
{"ethereal:fire_flower", 2, 1},
|
||||
{"default:torch", 1, 1},
|
||||
{"default:torch_ceiling", 1, 1},
|
||||
{"default:torch_wall", 1, 1},
|
||||
},
|
||||
registered_groups = {["fleshy"]=100},
|
||||
registered_callbacks = {
|
||||
on_update = {},
|
||||
on_equip = {},
|
||||
on_unequip = {},
|
||||
on_damage = {},
|
||||
on_destroy = {},
|
||||
},
|
||||
migrate_old_inventory = true,
|
||||
version = "0.4.11",
|
||||
}
|
||||
|
||||
armor.config = {
|
||||
init_delay = 2,
|
||||
init_times = 10,
|
||||
bones_delay = 1,
|
||||
update_time = 1,
|
||||
drop = minetest.get_modpath("bones") ~= nil,
|
||||
destroy = false,
|
||||
level_multiplier = 1,
|
||||
heal_multiplier = 1,
|
||||
material_wood = true,
|
||||
material_cactus = true,
|
||||
material_steel = true,
|
||||
material_bronze = true,
|
||||
material_diamond = true,
|
||||
material_gold = true,
|
||||
material_mithril = true,
|
||||
material_crystal = true,
|
||||
water_protect = true,
|
||||
fire_protect = minetest.get_modpath("ethereal") ~= nil,
|
||||
punch_damage = true,
|
||||
}
|
||||
|
||||
-- Armor Registration
|
||||
|
||||
armor.register_armor = function(self, name, def)
|
||||
minetest.register_tool(name, def)
|
||||
end
|
||||
|
||||
armor.register_armor_group = function(self, group, base)
|
||||
base = base or 100
|
||||
self.registered_groups[group] = base
|
||||
if use_armor_monoid then
|
||||
armor_monoid.register_armor_group(group, base)
|
||||
end
|
||||
end
|
||||
|
||||
-- Armor callbacks
|
||||
|
||||
armor.register_on_update = function(self, func)
|
||||
if type(func) == "function" then
|
||||
table.insert(self.registered_callbacks.on_update, func)
|
||||
end
|
||||
end
|
||||
|
||||
armor.register_on_equip = function(self, func)
|
||||
if type(func) == "function" then
|
||||
table.insert(self.registered_callbacks.on_equip, func)
|
||||
end
|
||||
end
|
||||
|
||||
armor.register_on_unequip = function(self, func)
|
||||
if type(func) == "function" then
|
||||
table.insert(self.registered_callbacks.on_unequip, func)
|
||||
end
|
||||
end
|
||||
|
||||
armor.register_on_damage = function(self, func)
|
||||
if type(func) == "function" then
|
||||
table.insert(self.registered_callbacks.on_damage, func)
|
||||
end
|
||||
end
|
||||
|
||||
armor.register_on_destroy = function(self, func)
|
||||
if type(func) == "function" then
|
||||
table.insert(self.registered_callbacks.on_destroy, func)
|
||||
end
|
||||
end
|
||||
|
||||
armor.run_callbacks = function(self, callback, player, index, stack)
|
||||
if stack then
|
||||
local def = stack:get_definition() or {}
|
||||
if type(def[callback]) == "function" then
|
||||
def[callback](player, index, stack)
|
||||
end
|
||||
end
|
||||
local callbacks = self.registered_callbacks[callback]
|
||||
if callbacks then
|
||||
for _, func in pairs(callbacks) do
|
||||
func(player, index, stack)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
armor.update_player_visuals = function(self, player)
|
||||
if not player then
|
||||
return
|
||||
end
|
||||
local name = player:get_player_name()
|
||||
if self.textures[name] then
|
||||
default.player_set_textures(player, {
|
||||
self.textures[name].skin,
|
||||
self.textures[name].armor,
|
||||
self.textures[name].wielditem,
|
||||
})
|
||||
end
|
||||
self:run_callbacks("on_update", player)
|
||||
end
|
||||
|
||||
armor.set_player_armor = function(self, player)
|
||||
local name, armor_inv = self:get_valid_player(player, "[set_player_armor]")
|
||||
if not name then
|
||||
return
|
||||
end
|
||||
local state = 0
|
||||
local count = 0
|
||||
local material = {count=1}
|
||||
local preview = armor:get_preview(name)
|
||||
local texture = "3d_armor_trans.png"
|
||||
local textures = {}
|
||||
local physics = {}
|
||||
local attributes = {}
|
||||
local levels = {}
|
||||
local groups = {}
|
||||
local change = {}
|
||||
for _, phys in pairs(self.physics) do
|
||||
physics[phys] = 1
|
||||
end
|
||||
for _, attr in pairs(self.attributes) do
|
||||
attributes[attr] = 0
|
||||
end
|
||||
for group, _ in pairs(self.registered_groups) do
|
||||
change[group] = 1
|
||||
levels[group] = 0
|
||||
end
|
||||
local list = armor_inv:get_list("armor")
|
||||
if type(list) ~= "table" then
|
||||
return
|
||||
end
|
||||
for i, stack in pairs(list) do
|
||||
if stack:get_count() == 1 then
|
||||
local def = stack:get_definition()
|
||||
for _, element in pairs(self.elements) do
|
||||
if def.groups["armor_"..element] then
|
||||
if def.armor_groups then
|
||||
for group, level in pairs(def.armor_groups) do
|
||||
if levels[group] then
|
||||
levels[group] = levels[group] + level
|
||||
end
|
||||
end
|
||||
else
|
||||
local level = def.groups["armor_"..element]
|
||||
levels["fleshy"] = levels["fleshy"] + level
|
||||
end
|
||||
break
|
||||
end
|
||||
-- DEPRECATED, use armor_groups instead
|
||||
if def.groups["armor_radiation"] and levels["radiation"] then
|
||||
levels["radiation"] = def.groups["armor_radiation"]
|
||||
end
|
||||
end
|
||||
local item = stack:get_name()
|
||||
local tex = def.texture or item:gsub("%:", "_")
|
||||
tex = tex:gsub(".png$", "")
|
||||
local prev = def.preview or tex.."_preview"
|
||||
prev = prev:gsub(".png$", "")
|
||||
texture = texture.."^"..tex..".png"
|
||||
preview = preview.."^"..prev..".png"
|
||||
state = state + stack:get_wear()
|
||||
count = count + 1
|
||||
for _, phys in pairs(self.physics) do
|
||||
local value = def.groups["physics_"..phys] or 0
|
||||
physics[phys] = physics[phys] + value
|
||||
end
|
||||
for _, attr in pairs(self.attributes) do
|
||||
local value = def.groups["armor_"..attr] or 0
|
||||
attributes[attr] = attributes[attr] + value
|
||||
end
|
||||
local mat = string.match(item, "%:.+_(.+)$")
|
||||
if material.name then
|
||||
if material.name == mat then
|
||||
material.count = material.count + 1
|
||||
end
|
||||
else
|
||||
material.name = mat
|
||||
end
|
||||
end
|
||||
end
|
||||
for group, level in pairs(levels) do
|
||||
if level > 0 then
|
||||
level = level * armor.config.level_multiplier
|
||||
if material.name and material.count == #self.elements then
|
||||
level = level * 1.1
|
||||
end
|
||||
end
|
||||
local base = self.registered_groups[group]
|
||||
self.def[name].groups[group] = level
|
||||
if level > base then
|
||||
level = base
|
||||
end
|
||||
groups[group] = base - level
|
||||
change[group] = groups[group] / base
|
||||
end
|
||||
for _, attr in pairs(self.attributes) do
|
||||
local mult = attr == "heal" and self.config.heal_multiplier or 1
|
||||
self.def[name][attr] = attributes[attr] * mult
|
||||
end
|
||||
for _, phys in pairs(self.physics) do
|
||||
self.def[name][phys] = physics[phys]
|
||||
end
|
||||
if use_armor_monoid then
|
||||
armor_monoid.monoid:add_change(player, change, "3d_armor:armor")
|
||||
else
|
||||
player:set_armor_groups(groups)
|
||||
end
|
||||
if use_player_monoids then
|
||||
player_monoids.speed:add_change(player, physics.speed,
|
||||
"3d_armor:physics")
|
||||
player_monoids.jump:add_change(player, physics.jump,
|
||||
"3d_armor:physics")
|
||||
player_monoids.gravity:add_change(player, physics.gravity,
|
||||
"3d_armor:physics")
|
||||
elseif use_pova_mod then
|
||||
-- only add the changes, not the default 1.0 for each physics setting
|
||||
pova.add_override(name, "3d_armor", {
|
||||
speed = physics.speed - 1,
|
||||
jump = physics.jump - 1,
|
||||
gravity = physics.gravity - 1,
|
||||
})
|
||||
pova.do_override(player)
|
||||
else
|
||||
player:set_physics_override(physics)
|
||||
end
|
||||
self.textures[name].armor = texture
|
||||
self.textures[name].preview = preview
|
||||
self.def[name].level = self.def[name].groups.fleshy or 0
|
||||
self.def[name].state = state
|
||||
self.def[name].count = count
|
||||
self:update_player_visuals(player)
|
||||
end
|
||||
|
||||
armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabilities)
|
||||
local name, armor_inv = self:get_valid_player(player, "[punch]")
|
||||
if not name then
|
||||
return
|
||||
end
|
||||
local state = 0
|
||||
local count = 0
|
||||
local recip = true
|
||||
local default_groups = {cracky=3, snappy=3, choppy=3, crumbly=3, level=1}
|
||||
local list = armor_inv:get_list("armor")
|
||||
for i, stack in pairs(list) do
|
||||
if stack:get_count() == 1 then
|
||||
local name = stack:get_name()
|
||||
local use = minetest.get_item_group(name, "armor_use") or 0
|
||||
local damage = use > 0
|
||||
local def = stack:get_definition() or {}
|
||||
if type(def.on_punched) == "function" then
|
||||
damage = def.on_punched(player, hitter, time_from_last_punch,
|
||||
tool_capabilities) ~= false and damage == true
|
||||
end
|
||||
if damage == true and tool_capabilities then
|
||||
local damage_groups = def.damage_groups or default_groups
|
||||
local level = damage_groups.level or 0
|
||||
local groupcaps = tool_capabilities.groupcaps or {}
|
||||
local uses = 0
|
||||
damage = false
|
||||
for group, caps in pairs(groupcaps) do
|
||||
local maxlevel = caps.maxlevel or 0
|
||||
local diff = maxlevel - level
|
||||
if diff == 0 then
|
||||
diff = 1
|
||||
end
|
||||
if diff > 0 and caps.times then
|
||||
local group_level = damage_groups[group]
|
||||
if group_level then
|
||||
local time = caps.times[group_level]
|
||||
if time then
|
||||
local dt = time_from_last_punch or 0
|
||||
if dt > time / diff then
|
||||
if caps.uses then
|
||||
uses = caps.uses * math.pow(3, diff)
|
||||
end
|
||||
damage = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if damage == true and recip == true and hitter and
|
||||
def.reciprocate_damage == true and uses > 0 then
|
||||
local item = hitter:get_wielded_item()
|
||||
if item and item:get_name() ~= "" then
|
||||
item:add_wear(65535 / uses)
|
||||
hitter:set_wielded_item(item)
|
||||
end
|
||||
-- reciprocate tool damage only once
|
||||
recip = false
|
||||
end
|
||||
end
|
||||
if damage == true and hitter == "fire" then
|
||||
damage = minetest.get_item_group(name, "flammable") > 0
|
||||
end
|
||||
if damage == true then
|
||||
self:damage(player, i, stack, use)
|
||||
end
|
||||
state = state + stack:get_wear()
|
||||
count = count + 1
|
||||
end
|
||||
end
|
||||
self.def[name].state = state
|
||||
self.def[name].count = count
|
||||
end
|
||||
|
||||
armor.damage = function(self, player, index, stack, use)
|
||||
local old_stack = ItemStack(stack)
|
||||
stack:add_wear(use)
|
||||
self:run_callbacks("on_damage", player, index, stack)
|
||||
self:set_inventory_stack(player, index, stack)
|
||||
if stack:get_count() == 0 then
|
||||
self:run_callbacks("on_destroy", player, index, old_stack)
|
||||
self:set_player_armor(player)
|
||||
end
|
||||
end
|
||||
|
||||
armor.get_player_skin = function(self, name)
|
||||
if (self.skin_mod == "skins" or self.skin_mod == "simple_skins") and skins.skins[name] then
|
||||
return skins.skins[name]..".png"
|
||||
elseif self.skin_mod == "u_skins" and u_skins.u_skins[name] then
|
||||
return u_skins.u_skins[name]..".png"
|
||||
elseif self.skin_mod == "wardrobe" and wardrobe.playerSkins and wardrobe.playerSkins[name] then
|
||||
return wardrobe.playerSkins[name]
|
||||
end
|
||||
return armor.default_skin..".png"
|
||||
end
|
||||
|
||||
armor.add_preview = function(self, preview)
|
||||
skin_previews[preview] = true
|
||||
end
|
||||
|
||||
armor.get_preview = function(self, name)
|
||||
local preview = string.gsub(armor:get_player_skin(name), ".png", "_preview.png")
|
||||
if skin_previews[preview] then
|
||||
return preview
|
||||
end
|
||||
return "character_preview.png"
|
||||
end
|
||||
|
||||
armor.get_armor_formspec = function(self, name, listring)
|
||||
if armor.def[name].init_time == 0 then
|
||||
return "label[0,0;Armor not initialized!]"
|
||||
end
|
||||
local formspec = armor.formspec..
|
||||
"list[detached:"..name.."_armor;armor;0,0.5;2,3;]"
|
||||
if listring == true then
|
||||
formspec = formspec.."listring[current_player;main]"..
|
||||
"listring[detached:"..name.."_armor;armor]"
|
||||
end
|
||||
formspec = formspec:gsub("armor_preview", armor.textures[name].preview)
|
||||
formspec = formspec:gsub("armor_level", armor.def[name].level)
|
||||
for _, attr in pairs(self.attributes) do
|
||||
formspec = formspec:gsub("armor_attr_"..attr, armor.def[name][attr])
|
||||
end
|
||||
for group, _ in pairs(self.registered_groups) do
|
||||
formspec = formspec:gsub("armor_group_"..group,
|
||||
armor.def[name].groups[group])
|
||||
end
|
||||
return formspec
|
||||
end
|
||||
|
||||
armor.get_element = function(self, item_name)
|
||||
for _, element in pairs(armor.elements) do
|
||||
if minetest.get_item_group(item_name, "armor_"..element) > 0 then
|
||||
return element
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
armor.serialize_inventory_list = function(self, list)
|
||||
local list_table = {}
|
||||
for _, stack in ipairs(list) do
|
||||
table.insert(list_table, stack:to_string())
|
||||
end
|
||||
return minetest.serialize(list_table)
|
||||
end
|
||||
|
||||
armor.deserialize_inventory_list = function(self, list_string)
|
||||
local list_table = minetest.deserialize(list_string)
|
||||
local list = {}
|
||||
for _, stack in ipairs(list_table or {}) do
|
||||
table.insert(list, ItemStack(stack))
|
||||
end
|
||||
return list
|
||||
end
|
||||
|
||||
armor.load_armor_inventory = function(self, player)
|
||||
local name, inv = self:get_valid_player(player, "[load_armor_inventory]")
|
||||
if not name then
|
||||
return
|
||||
end
|
||||
local armor_list_string = player:get_attribute("3d_armor_inventory")
|
||||
if armor_list_string then
|
||||
inv:set_list("armor",
|
||||
self:deserialize_inventory_list(armor_list_string))
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
armor.save_armor_inventory = function(self, player)
|
||||
local name, inv = self:get_valid_player(player, "[save_armor_inventory]")
|
||||
if not name then
|
||||
return
|
||||
end
|
||||
-- Workaround for detached inventory swap exploit
|
||||
local armor_prev = {}
|
||||
local armor_list_string = player:get_attribute("3d_armor_inventory")
|
||||
if armor_list_string then
|
||||
local armor_list = self:deserialize_inventory_list(armor_list_string)
|
||||
for i, stack in ipairs(armor_list) do
|
||||
if stack:get_count() > 0 then
|
||||
armor_prev[stack:get_name()] = i
|
||||
end
|
||||
end
|
||||
end
|
||||
local elements = {}
|
||||
local player_inv = player:get_inventory()
|
||||
for i = 1, 6 do
|
||||
local stack = inv:get_stack("armor", i)
|
||||
if stack:get_count() > 0 then
|
||||
local item = stack:get_name()
|
||||
local element = self:get_element(item)
|
||||
if element and not elements[element] then
|
||||
if armor_prev[item] then
|
||||
armor_prev[item] = nil
|
||||
else
|
||||
-- Item was not in previous inventory
|
||||
armor:run_callbacks("on_equip", player, i, stack)
|
||||
end
|
||||
elements[element] = true;
|
||||
else
|
||||
inv:remove_item("armor", stack)
|
||||
if player_inv and player_inv:room_for_item("main", stack) then
|
||||
player_inv:add_item("main", stack)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
for item, i in pairs(armor_prev) do
|
||||
local stack = ItemStack(item)
|
||||
-- Previous item is not in current inventory
|
||||
armor:run_callbacks("on_unequip", player, i, stack)
|
||||
end
|
||||
player:set_attribute("3d_armor_inventory",
|
||||
self:serialize_inventory_list(inv:get_list("armor")))
|
||||
end
|
||||
|
||||
armor.update_inventory = function(self, player)
|
||||
-- DEPRECATED: Legacy inventory support
|
||||
end
|
||||
|
||||
armor.set_inventory_stack = function(self, player, i, stack)
|
||||
local name, inv = self:get_valid_player(player, "[set_inventory_stack]")
|
||||
if inv then
|
||||
inv:set_stack("armor", i, stack)
|
||||
self:save_armor_inventory(player)
|
||||
end
|
||||
end
|
||||
|
||||
armor.get_valid_player = function(self, player, msg)
|
||||
msg = msg or ""
|
||||
if not player then
|
||||
minetest.log("warning", S("3d_armor: Player reference is nil @1", msg))
|
||||
return
|
||||
end
|
||||
local name = player:get_player_name()
|
||||
if not name then
|
||||
minetest.log("warning", S("3d_armor: Player name is nil @1", msg))
|
||||
return
|
||||
end
|
||||
local inv = minetest.get_inventory({type="detached", name=name.."_armor"})
|
||||
if not inv then
|
||||
minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg))
|
||||
return
|
||||
end
|
||||
return name, inv
|
||||
end
|
||||
|
||||
armor.drop_armor = function(pos, stack)
|
||||
local node = minetest.get_node_or_nil(pos)
|
||||
if node then
|
||||
local obj = minetest.add_item(pos, stack)
|
||||
if obj then
|
||||
obj:setvelocity({x=math.random(-1, 1), y=5, z=math.random(-1, 1)})
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,65 @@
|
||||
-- DEPRECATED, will not be supported in future versions
|
||||
|
||||
-- See README.txt for new configuration options.
|
||||
|
||||
-- Armor Configuration (defaults)
|
||||
|
||||
-- You can remove any unwanted armor materials from this table.
|
||||
-- Note that existing armor that is removed will show up as an unknown item.
|
||||
ARMOR_MATERIALS = {
|
||||
wood = "group:wood",
|
||||
cactus = "default:cactus",
|
||||
steel = "default:steel_ingot",
|
||||
bronze = "default:bronze_ingot",
|
||||
diamond = "default:diamond",
|
||||
gold = "default:gold_ingot",
|
||||
mithril = "moreores:mithril_ingot",
|
||||
crystal = "ethereal:crystal_ingot",
|
||||
}
|
||||
|
||||
-- Enable fire protection (defaults true if using ethereal mod)
|
||||
ARMOR_FIRE_PROTECT = false
|
||||
|
||||
-- Fire protection nodes, (name, protection level, damage)
|
||||
ARMOR_FIRE_NODES = {
|
||||
{"default:lava_source", 5, 4},
|
||||
{"default:lava_flowing", 5, 4},
|
||||
{"fire:basic_flame", 3, 4},
|
||||
{"fire:permanent_flame", 3, 4},
|
||||
{"ethereal:crystal_spike", 2, 1},
|
||||
{"ethereal:fire_flower", 2, 1},
|
||||
{"default:torch", 1, 1},
|
||||
}
|
||||
|
||||
-- Increase this if you get initialization glitches when a player first joins.
|
||||
ARMOR_INIT_DELAY = 1
|
||||
|
||||
-- Number of initialization attempts.
|
||||
-- Use in conjunction with ARMOR_INIT_DELAY if initialization problems persist.
|
||||
ARMOR_INIT_TIMES = 1
|
||||
|
||||
-- Increase this if armor is not getting into bones due to server lag.
|
||||
ARMOR_BONES_DELAY = 1
|
||||
|
||||
-- How often player armor/wield items are updated.
|
||||
ARMOR_UPDATE_TIME = 1
|
||||
|
||||
-- Drop armor when a player dies.
|
||||
-- Uses bones mod if present, otherwise items are dropped around the player.
|
||||
ARMOR_DROP = true
|
||||
|
||||
-- Pulverise armor when a player dies, overrides ARMOR_DROP.
|
||||
ARMOR_DESTROY = false
|
||||
|
||||
-- You can use this to increase or decrease overall armor effectiveness,
|
||||
-- eg: ARMOR_LEVEL_MULTIPLIER = 0.5 will reduce armor level by half.
|
||||
ARMOR_LEVEL_MULTIPLIER = 1
|
||||
|
||||
-- You can use this to increase or decrease overall armor healing,
|
||||
-- eg: ARMOR_HEAL_MULTIPLIER = 0 will disable healing altogether.
|
||||
ARMOR_HEAL_MULTIPLIER = 1
|
||||
|
||||
-- You can use this to increase or decrease overall armor radiation protection,
|
||||
-- eg: ARMOR_RADIATION_MULTIPLIER = 0 will completely disable radiation protection.
|
||||
-- Note: patched technic mod is required
|
||||
ARMOR_RADIATION_MULTIPLIER = 1
|
373
mods/warfare_pack/3d_armor-master/3d_armor/armor.lua
Normal file
@ -0,0 +1,373 @@
|
||||
-- support for i18n
|
||||
local S = armor_i18n.gettext
|
||||
|
||||
armor:register_armor("3d_armor:helmet_admin", {
|
||||
description = S("Admin Helmet"),
|
||||
inventory_image = "3d_armor_inv_helmet_admin.png",
|
||||
armor_groups = {fleshy=100},
|
||||
groups = {armor_head=1, armor_heal=100, armor_use=0, armor_water=1,
|
||||
not_in_creative_inventory=1},
|
||||
on_drop = function(itemstack, dropper, pos)
|
||||
return
|
||||
end,
|
||||
})
|
||||
|
||||
armor:register_armor("3d_armor:chestplate_admin", {
|
||||
description = S("Admin Chestplate"),
|
||||
inventory_image = "3d_armor_inv_chestplate_admin.png",
|
||||
armor_groups = {fleshy=100},
|
||||
groups = {armor_torso=1, armor_heal=100, armor_use=0,
|
||||
not_in_creative_inventory=1},
|
||||
on_drop = function(itemstack, dropper, pos)
|
||||
return
|
||||
end,
|
||||
})
|
||||
|
||||
armor:register_armor("3d_armor:leggings_admin", {
|
||||
description = S("Admin Leggings"),
|
||||
inventory_image = "3d_armor_inv_leggings_admin.png",
|
||||
armor_groups = {fleshy=100},
|
||||
groups = {armor_legs=1, armor_heal=100, armor_use=0,
|
||||
not_in_creative_inventory=1},
|
||||
on_drop = function(itemstack, dropper, pos)
|
||||
return
|
||||
end,
|
||||
})
|
||||
|
||||
armor:register_armor("3d_armor:boots_admin", {
|
||||
description = S("Admin Boots"),
|
||||
inventory_image = "3d_armor_inv_boots_admin.png",
|
||||
armor_groups = {fleshy=100},
|
||||
groups = {armor_feet=1, armor_heal=100, armor_use=0,
|
||||
not_in_creative_inventory=1},
|
||||
on_drop = function(itemstack, dropper, pos)
|
||||
return
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_alias("adminboots", "3d_armor:boots_admin")
|
||||
minetest.register_alias("adminhelmet", "3d_armor:helmet_admin")
|
||||
minetest.register_alias("adminchestplate", "3d_armor:chestplate_admin")
|
||||
minetest.register_alias("adminleggings", "3d_armor:leggings_admin")
|
||||
|
||||
if armor.materials.wood then
|
||||
armor:register_armor("3d_armor:helmet_wood", {
|
||||
description = S("Wood Helmet"),
|
||||
inventory_image = "3d_armor_inv_helmet_wood.png",
|
||||
groups = {armor_head=1, armor_heal=0, armor_use=2000, flammable=1},
|
||||
armor_groups = {fleshy=5},
|
||||
damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
|
||||
})
|
||||
armor:register_armor("3d_armor:chestplate_wood", {
|
||||
description = S("Wood Chestplate"),
|
||||
inventory_image = "3d_armor_inv_chestplate_wood.png",
|
||||
groups = {armor_torso=1, armor_heal=0, armor_use=2000, flammable=1},
|
||||
armor_groups = {fleshy=10},
|
||||
damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
|
||||
})
|
||||
armor:register_armor("3d_armor:leggings_wood", {
|
||||
description = S("Wood Leggings"),
|
||||
inventory_image = "3d_armor_inv_leggings_wood.png",
|
||||
groups = {armor_legs=1, armor_heal=0, armor_use=2000, flammable=1},
|
||||
armor_groups = {fleshy=10},
|
||||
damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
|
||||
})
|
||||
armor:register_armor("3d_armor:boots_wood", {
|
||||
description = S("Wood Boots"),
|
||||
inventory_image = "3d_armor_inv_boots_wood.png",
|
||||
armor_groups = {fleshy=5},
|
||||
damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
|
||||
groups = {armor_feet=1, armor_heal=0, armor_use=2000, flammable=1},
|
||||
})
|
||||
end
|
||||
|
||||
if armor.materials.cactus then
|
||||
armor:register_armor("3d_armor:helmet_cactus", {
|
||||
description = S("Cactus Helmet"),
|
||||
inventory_image = "3d_armor_inv_helmet_cactus.png",
|
||||
groups = {armor_head=1, armor_heal=0, armor_use=1000},
|
||||
armor_groups = {fleshy=5},
|
||||
damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
|
||||
})
|
||||
armor:register_armor("3d_armor:chestplate_cactus", {
|
||||
description = S("Cactus Chestplate"),
|
||||
inventory_image = "3d_armor_inv_chestplate_cactus.png",
|
||||
groups = {armor_torso=1, armor_heal=0, armor_use=1000},
|
||||
armor_groups = {fleshy=10},
|
||||
damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
|
||||
})
|
||||
armor:register_armor("3d_armor:leggings_cactus", {
|
||||
description = S("Cactus Leggings"),
|
||||
inventory_image = "3d_armor_inv_leggings_cactus.png",
|
||||
groups = {armor_legs=1, armor_heal=0, armor_use=1000},
|
||||
armor_groups = {fleshy=10},
|
||||
damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
|
||||
})
|
||||
armor:register_armor("3d_armor:boots_cactus", {
|
||||
description = S("Cactus Boots"),
|
||||
inventory_image = "3d_armor_inv_boots_cactus.png",
|
||||
groups = {armor_feet=1, armor_heal=0, armor_use=1000},
|
||||
armor_groups = {fleshy=5},
|
||||
damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
|
||||
})
|
||||
end
|
||||
|
||||
if armor.materials.steel then
|
||||
armor:register_armor("3d_armor:helmet_steel", {
|
||||
description = S("Steel Helmet"),
|
||||
inventory_image = "3d_armor_inv_helmet_steel.png",
|
||||
groups = {armor_head=1, armor_heal=0, armor_use=800,
|
||||
physics_speed=-0.05},
|
||||
armor_groups = {fleshy=10},
|
||||
damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
|
||||
})
|
||||
armor:register_armor("3d_armor:chestplate_steel", {
|
||||
description = S("Steel Chestplate"),
|
||||
inventory_image = "3d_armor_inv_chestplate_steel.png",
|
||||
groups = {armor_torso=1, armor_heal=0, armor_use=800,
|
||||
physics_speed=-0.1},
|
||||
armor_groups = {fleshy=15},
|
||||
damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
|
||||
})
|
||||
armor:register_armor("3d_armor:leggings_steel", {
|
||||
description = S("Steel Leggings"),
|
||||
inventory_image = "3d_armor_inv_leggings_steel.png",
|
||||
groups = {armor_legs=1, armor_heal=0, armor_use=800,
|
||||
physics_speed=-0.1},
|
||||
armor_groups = {fleshy=15},
|
||||
damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
|
||||
})
|
||||
armor:register_armor("3d_armor:boots_steel", {
|
||||
description = S("Steel Boots"),
|
||||
inventory_image = "3d_armor_inv_boots_steel.png",
|
||||
groups = {armor_feet=1, armor_heal=0, armor_use=800,
|
||||
physics_speed=-0.05},
|
||||
armor_groups = {fleshy=10},
|
||||
damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
|
||||
})
|
||||
end
|
||||
|
||||
if armor.materials.bronze then
|
||||
armor:register_armor("3d_armor:helmet_bronze", {
|
||||
description = S("Bronze Helmet"),
|
||||
inventory_image = "3d_armor_inv_helmet_bronze.png",
|
||||
groups = {armor_head=1, armor_heal=6, armor_use=400,
|
||||
physics_speed=-0.06, physics_gravity=0.01},
|
||||
armor_groups = {fleshy=10},
|
||||
damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
|
||||
})
|
||||
armor:register_armor("3d_armor:chestplate_bronze", {
|
||||
description = S("Bronze Chestplate"),
|
||||
inventory_image = "3d_armor_inv_chestplate_bronze.png",
|
||||
groups = {armor_torso=1, armor_heal=6, armor_use=400,
|
||||
physics_speed=-0.11, physics_gravity=0.04},
|
||||
armor_groups = {fleshy=15},
|
||||
damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
|
||||
})
|
||||
armor:register_armor("3d_armor:leggings_bronze", {
|
||||
description = S("Bronze Leggings"),
|
||||
inventory_image = "3d_armor_inv_leggings_bronze.png",
|
||||
groups = {armor_legs=1, armor_heal=6, armor_use=400,
|
||||
physics_speed=-0.06, physics_gravity=0.03},
|
||||
armor_groups = {fleshy=15},
|
||||
damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
|
||||
})
|
||||
armor:register_armor("3d_armor:boots_bronze", {
|
||||
description = S("Bronze Boots"),
|
||||
inventory_image = "3d_armor_inv_boots_bronze.png",
|
||||
groups = {armor_feet=1, armor_heal=6, armor_use=400,
|
||||
physics_speed=-0.11, physics_gravity=0.01},
|
||||
armor_groups = {fleshy=10},
|
||||
damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
|
||||
})
|
||||
end
|
||||
|
||||
if armor.materials.diamond then
|
||||
armor:register_armor("3d_armor:helmet_diamond", {
|
||||
description = S("Diamond Helmet"),
|
||||
inventory_image = "3d_armor_inv_helmet_diamond.png",
|
||||
groups = {armor_head=1, armor_heal=12, armor_use=200},
|
||||
armor_groups = {fleshy=15},
|
||||
damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
|
||||
})
|
||||
armor:register_armor("3d_armor:chestplate_diamond", {
|
||||
description = S("Diamond Chestplate"),
|
||||
inventory_image = "3d_armor_inv_chestplate_diamond.png",
|
||||
groups = {armor_torso=1, armor_heal=12, armor_use=200},
|
||||
armor_groups = {fleshy=20},
|
||||
damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
|
||||
})
|
||||
armor:register_armor("3d_armor:leggings_diamond", {
|
||||
description = S("Diamond Leggings"),
|
||||
inventory_image = "3d_armor_inv_leggings_diamond.png",
|
||||
groups = {armor_legs=1, armor_heal=12, armor_use=200},
|
||||
armor_groups = {fleshy=20},
|
||||
damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
|
||||
})
|
||||
armor:register_armor("3d_armor:boots_diamond", {
|
||||
description = S("Diamond Boots"),
|
||||
inventory_image = "3d_armor_inv_boots_diamond.png",
|
||||
groups = {armor_feet=1, armor_heal=12, armor_use=200},
|
||||
armor_groups = {fleshy=15},
|
||||
damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
|
||||
})
|
||||
end
|
||||
|
||||
if armor.materials.gold then
|
||||
armor:register_armor("3d_armor:helmet_gold", {
|
||||
description = S("Gold Helmet"),
|
||||
inventory_image = "3d_armor_inv_helmet_gold.png",
|
||||
groups = {armor_head=1, armor_heal=6, armor_use=300,
|
||||
physics_speed=-0.1},
|
||||
armor_groups = {fleshy=10},
|
||||
damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
|
||||
})
|
||||
armor:register_armor("3d_armor:chestplate_gold", {
|
||||
description = S("Gold Chestplate"),
|
||||
inventory_image = "3d_armor_inv_chestplate_gold.png",
|
||||
groups = {armor_torso=1, armor_heal=6, armor_use=300,
|
||||
physics_speed=-0.15},
|
||||
armor_groups = {fleshy=15},
|
||||
damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
|
||||
})
|
||||
armor:register_armor("3d_armor:leggings_gold", {
|
||||
description = S("Gold Leggings"),
|
||||
inventory_image = "3d_armor_inv_leggings_gold.png",
|
||||
groups = {armor_legs=1, armor_heal=6, armor_use=300,
|
||||
physics_speed=-0.15},
|
||||
armor_groups = {fleshy=15},
|
||||
damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
|
||||
})
|
||||
armor:register_armor("3d_armor:boots_gold", {
|
||||
description = S("Gold Boots"),
|
||||
inventory_image = "3d_armor_inv_boots_gold.png",
|
||||
groups = {armor_feet=1, armor_heal=6, armor_use=300,
|
||||
physics_speed=-0.1},
|
||||
armor_groups = {fleshy=10},
|
||||
damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
|
||||
})
|
||||
end
|
||||
|
||||
if armor.materials.mithril then
|
||||
armor:register_armor("3d_armor:helmet_mithril", {
|
||||
description = S("Mithril Helmet"),
|
||||
inventory_image = "3d_armor_inv_helmet_mithril.png",
|
||||
groups = {armor_head=1, armor_heal=12, armor_use=100},
|
||||
armor_groups = {fleshy=15},
|
||||
damage_groups = {cracky=2, snappy=1, level=3},
|
||||
})
|
||||
armor:register_armor("3d_armor:chestplate_mithril", {
|
||||
description = S("Mithril Chestplate"),
|
||||
inventory_image = "3d_armor_inv_chestplate_mithril.png",
|
||||
groups = {armor_torso=1, armor_heal=12, armor_use=100},
|
||||
armor_groups = {fleshy=20},
|
||||
damage_groups = {cracky=2, snappy=1, level=3},
|
||||
})
|
||||
armor:register_armor("3d_armor:leggings_mithril", {
|
||||
description = S("Mithril Leggings"),
|
||||
inventory_image = "3d_armor_inv_leggings_mithril.png",
|
||||
groups = {armor_legs=1, armor_heal=12, armor_use=100},
|
||||
armor_groups = {fleshy=20},
|
||||
damage_groups = {cracky=2, snappy=1, level=3},
|
||||
})
|
||||
armor:register_armor("3d_armor:boots_mithril", {
|
||||
description = S("Mithril Boots"),
|
||||
inventory_image = "3d_armor_inv_boots_mithril.png",
|
||||
groups = {armor_feet=1, armor_heal=12, armor_use=100},
|
||||
armor_groups = {fleshy=15},
|
||||
damage_groups = {cracky=2, snappy=1, level=3},
|
||||
})
|
||||
end
|
||||
|
||||
if armor.materials.crystal then
|
||||
armor:register_armor("3d_armor:helmet_crystal", {
|
||||
description = S("Crystal Helmet"),
|
||||
inventory_image = "3d_armor_inv_helmet_crystal.png",
|
||||
groups = {armor_head=1, armor_heal=12, armor_use=100, armor_fire=1},
|
||||
armor_groups = {fleshy=15},
|
||||
damage_groups = {cracky=2, snappy=1, level=3},
|
||||
})
|
||||
armor:register_armor("3d_armor:chestplate_crystal", {
|
||||
description = S("Crystal Chestplate"),
|
||||
inventory_image = "3d_armor_inv_chestplate_crystal.png",
|
||||
groups = {armor_torso=1, armor_heal=12, armor_use=100, armor_fire=1},
|
||||
armor_groups = {fleshy=20},
|
||||
damage_groups = {cracky=2, snappy=1, level=3},
|
||||
})
|
||||
armor:register_armor("3d_armor:leggings_crystal", {
|
||||
description = S("Crystal Leggings"),
|
||||
inventory_image = "3d_armor_inv_leggings_crystal.png",
|
||||
groups = {armor_legs=1, armor_heal=12, armor_use=100, armor_fire=1},
|
||||
armor_groups = {fleshy=20},
|
||||
damage_groups = {cracky=2, snappy=1, level=3},
|
||||
})
|
||||
armor:register_armor("3d_armor:boots_crystal", {
|
||||
description = S("Crystal Boots"),
|
||||
inventory_image = "3d_armor_inv_boots_crystal.png",
|
||||
groups = {armor_feet=1, armor_heal=12, armor_use=100, physics_speed=1,
|
||||
physics_jump=0.5, armor_fire=1},
|
||||
armor_groups = {fleshy=15},
|
||||
damage_groups = {cracky=2, snappy=1, level=3},
|
||||
})
|
||||
end
|
||||
|
||||
for k, v in pairs(armor.materials) do
|
||||
minetest.register_craft({
|
||||
output = "3d_armor:helmet_"..k,
|
||||
recipe = {
|
||||
{v, v, v},
|
||||
{v, "", v},
|
||||
{"", "", ""},
|
||||
},
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "3d_armor:chestplate_"..k,
|
||||
recipe = {
|
||||
{v, "", v},
|
||||
{v, v, v},
|
||||
{v, v, v},
|
||||
},
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "3d_armor:leggings_"..k,
|
||||
recipe = {
|
||||
{v, v, v},
|
||||
{v, "", v},
|
||||
{v, "", v},
|
||||
},
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "3d_armor:boots_"..k,
|
||||
recipe = {
|
||||
{v, "", v},
|
||||
{v, "", v},
|
||||
},
|
||||
})
|
||||
--MELTING DOWN
|
||||
if v ~= "group:wood" then
|
||||
minetest.register_craft({
|
||||
output = v .. " 5",
|
||||
type = "cooking",
|
||||
cooktime = 14,
|
||||
recipe = "3d_armor:helmet_"..k
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = v .. " 8",
|
||||
type = "cooking",
|
||||
cooktime = 14,
|
||||
recipe = "3d_armor:chestplate_"..k
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = v .. " 7",
|
||||
type = "cooking",
|
||||
cooktime = 14,
|
||||
recipe = "3d_armor:leggings_"..k
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = v .. " 4",
|
||||
type = "cooking",
|
||||
cooktime = 14,
|
||||
recipe = "3d_armor:boots_"..k
|
||||
})
|
||||
end
|
||||
end
|
@ -0,0 +1,79 @@
|
||||
3d_armor -- Crafting Guide
|
||||
--------------------------
|
||||
|
||||
Helmets:
|
||||
|
||||
+---+---+---+
|
||||
| X | X | X |
|
||||
+---+---+---+
|
||||
| X | | X |
|
||||
+---+---+---+
|
||||
| | | |
|
||||
+---+---+---+
|
||||
|
||||
[3d_armor:helmet_wood] X = [default:wood]
|
||||
[3d_armor:helmet_cactus] X = [default:cactus]
|
||||
[3d_armor:helmet_steel] X = [default:steel_ingot]
|
||||
[3d_armor:helmet_bronze] X = [default:bronze_ingot]
|
||||
[3d_armor:helmet_diamond] X = [default:diamond]
|
||||
[3d_armor:helmet_gold] X = [default:gold_ingot]
|
||||
[3d_armor:helmet_mithril] X = [moreores:mithril_ingot] *
|
||||
[3d_armor:helmet_crystal] X = [ethereal:crystal_ingot] **
|
||||
|
||||
Chestplates:
|
||||
|
||||
+---+---+---+
|
||||
| X | | X |
|
||||
+---+---+---+
|
||||
| X | X | X |
|
||||
+---+---+---+
|
||||
| X | X | X |
|
||||
+---+---+---+
|
||||
|
||||
[3d_armor:chestplate_wood] X = [default:wood]
|
||||
[3d_armor:chestplate_cactus] X = [default:cactus]
|
||||
[3d_armor:chestplate_steel] X = [default:steel_ingot]
|
||||
[3d_armor:chestplate_bronze] X = [default:bronze_ingot]
|
||||
[3d_armor:chestplate_diamond] X = [default:diamond]
|
||||
[3d_armor:chestplate_gold] X = [default:gold_ingot]
|
||||
[3d_armor:chestplate_mithril] X = [moreores:mithril_ingot] *
|
||||
[3d_armor:chestplate_crystal] X = [ethereal:crystal_ingot] **
|
||||
|
||||
Leggings:
|
||||
|
||||
+---+---+---+
|
||||
| X | X | X |
|
||||
+---+---+---+
|
||||
| X | | X |
|
||||
+---+---+---+
|
||||
| X | | X |
|
||||
+---+---+---+
|
||||
|
||||
[3d_armor:leggings_wood] X = [default:wood]
|
||||
[3d_armor:leggings_cactus] X = [default:cactus]
|
||||
[3d_armor:leggings_steel] X = [default:steel_ingot]
|
||||
[3d_armor:leggings_bronze] X = [default:bronze_ingot]
|
||||
[3d_armor:leggings_diamond] X = [default:diamond]
|
||||
[3d_armor:leggings_gold] X = [default:gold_ingot]
|
||||
[3d_armor:leggings_mithril] X = [moreores:mithril_ingot] *
|
||||
[3d_armor:leggings_crystal] X = [ethereal:crystal_ingot] **
|
||||
|
||||
Boots:
|
||||
|
||||
+---+---+---+
|
||||
| X | | X |
|
||||
+---+---+---+
|
||||
| X | | X |
|
||||
+---+---+---+
|
||||
|
||||
[3d_armor:boots_wood] X = [default:wood]
|
||||
[3d_armor:boots_cactus] X = [default:cactus]
|
||||
[3d_armor:boots_steel] X = [default:steel_ingot]
|
||||
[3d_armor:boots_bronze] X = [default:bronze_ingot
|
||||
[3d_armor:boots_diamond] X = [default:diamond]
|
||||
[3d_armor:boots_gold] X = [default:gold_ingot]
|
||||
[3d_armor:boots_mithril] X = [moreores:mithril_ingot] *
|
||||
[3d_armor:boots_crystal] X = [ethereal:crystal_ingot] **
|
||||
|
||||
* Requires moreores mod by Calinou - https://forum.minetest.net/viewtopic.php?id=549
|
||||
** Requires ethereal mod by Chinchow & TenPlus1 - https://github.com/tenplus1/ethereal
|
8
mods/warfare_pack/3d_armor-master/3d_armor/depends.txt
Normal file
@ -0,0 +1,8 @@
|
||||
default
|
||||
player_monoids?
|
||||
armor_monoid?
|
||||
pova?
|
||||
fire?
|
||||
ethereal?
|
||||
bakedclay?
|
||||
intllib?
|
@ -0,0 +1 @@
|
||||
Adds craftable armor that is visible to other players.
|
416
mods/warfare_pack/3d_armor-master/3d_armor/init.lua
Normal file
@ -0,0 +1,416 @@
|
||||
-- support for i18n
|
||||
armor_i18n = { }
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
armor_i18n.gettext, armor_i18n.ngettext = dofile(MP.."/intllib.lua")
|
||||
-- escaping formspec
|
||||
armor_i18n.fgettext = function(...) return minetest.formspec_escape(armor_i18n.gettext(...)) end
|
||||
-- local functions
|
||||
local S = armor_i18n.gettext
|
||||
local F = armor_i18n.fgettext
|
||||
|
||||
local modname = minetest.get_current_modname()
|
||||
local modpath = minetest.get_modpath(modname)
|
||||
local worldpath = minetest.get_worldpath()
|
||||
local last_punch_time = {}
|
||||
local pending_players = {}
|
||||
local timer = 0
|
||||
|
||||
dofile(modpath.."/api.lua")
|
||||
|
||||
-- Legacy Config Support
|
||||
|
||||
local input = io.open(modpath.."/armor.conf", "r")
|
||||
if input then
|
||||
dofile(modpath.."/armor.conf")
|
||||
input:close()
|
||||
input = nil
|
||||
end
|
||||
input = io.open(worldpath.."/armor.conf", "r")
|
||||
if input then
|
||||
dofile(worldpath.."/armor.conf")
|
||||
input:close()
|
||||
input = nil
|
||||
end
|
||||
for name, _ in pairs(armor.config) do
|
||||
local global = "ARMOR_"..name:upper()
|
||||
if minetest.global_exists(global) then
|
||||
armor.config[name] = _G[global]
|
||||
end
|
||||
end
|
||||
if minetest.global_exists("ARMOR_MATERIALS") then
|
||||
armor.materials = table.copy(ARMOR_MATERIALS)
|
||||
end
|
||||
if minetest.global_exists("ARMOR_FIRE_NODES") then
|
||||
armor.fire_nodes = table.copy(ARMOR_FIRE_NODES)
|
||||
end
|
||||
|
||||
-- Load Configuration
|
||||
|
||||
for name, config in pairs(armor.config) do
|
||||
local setting = minetest.settings:get("armor_"..name)
|
||||
if type(config) == "number" then
|
||||
setting = tonumber(setting)
|
||||
elseif type(config) == "boolean" then
|
||||
setting = minetest.settings:get_bool("armor_"..name)
|
||||
end
|
||||
if setting ~= nil then
|
||||
armor.config[name] = setting
|
||||
end
|
||||
end
|
||||
for material, _ in pairs(armor.materials) do
|
||||
local key = "material_"..material
|
||||
if armor.config[key] == false then
|
||||
armor.materials[material] = nil
|
||||
end
|
||||
end
|
||||
|
||||
-- Mod Compatibility
|
||||
|
||||
if minetest.get_modpath("technic") then
|
||||
armor.formspec = armor.formspec..
|
||||
"label[5,2.5;"..F("Radiation")..": armor_group_radiation]"
|
||||
armor:register_armor_group("radiation")
|
||||
end
|
||||
local skin_mods = {"skins", "u_skins", "simple_skins", "wardrobe"}
|
||||
for _, mod in pairs(skin_mods) do
|
||||
local path = minetest.get_modpath(mod)
|
||||
if path then
|
||||
local dir_list = minetest.get_dir_list(path.."/textures")
|
||||
for _, fn in pairs(dir_list) do
|
||||
if fn:find("_preview.png$") then
|
||||
armor:add_preview(fn)
|
||||
end
|
||||
end
|
||||
armor.skin_mod = mod
|
||||
end
|
||||
end
|
||||
if not minetest.get_modpath("moreores") then
|
||||
armor.materials.mithril = nil
|
||||
end
|
||||
if not minetest.get_modpath("ethereal") then
|
||||
armor.materials.crystal = nil
|
||||
end
|
||||
|
||||
dofile(modpath.."/armor.lua")
|
||||
|
||||
-- Armor Initialization
|
||||
|
||||
armor.formspec = armor.formspec..
|
||||
"label[5,1;"..F("Level")..": armor_level]"..
|
||||
"label[5,1.5;"..F("Heal")..": armor_attr_heal]"
|
||||
if armor.config.fire_protect then
|
||||
armor.formspec = armor.formspec.."label[5,2;"..F("Fire")..": armor_fire]"
|
||||
end
|
||||
armor:register_on_destroy(function(player, index, stack)
|
||||
local name = player:get_player_name()
|
||||
local def = stack:get_definition()
|
||||
if name and def and def.description then
|
||||
minetest.chat_send_player(name, S("Your @1 got destroyed!", def.description))
|
||||
end
|
||||
end)
|
||||
|
||||
local function init_player_armor(player)
|
||||
local name = player:get_player_name()
|
||||
local pos = player:getpos()
|
||||
if not name or not pos then
|
||||
return false
|
||||
end
|
||||
local armor_inv = minetest.create_detached_inventory(name.."_armor", {
|
||||
on_put = function(inv, listname, index, stack, player)
|
||||
armor:save_armor_inventory(player)
|
||||
armor:set_player_armor(player)
|
||||
end,
|
||||
on_take = function(inv, listname, index, stack, player)
|
||||
armor:save_armor_inventory(player)
|
||||
armor:set_player_armor(player)
|
||||
end,
|
||||
on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
|
||||
armor:save_armor_inventory(player)
|
||||
armor:set_player_armor(player)
|
||||
end,
|
||||
allow_put = function(inv, listname, index, put_stack, player)
|
||||
local element = armor:get_element(put_stack:get_name())
|
||||
if not element then
|
||||
return 0
|
||||
end
|
||||
for i = 1, 6 do
|
||||
local stack = inv:get_stack("armor", i)
|
||||
local def = stack:get_definition() or {}
|
||||
if def.groups and def.groups["armor_"..element]
|
||||
and i ~= index then
|
||||
return 0
|
||||
end
|
||||
end
|
||||
return 1
|
||||
end,
|
||||
allow_take = function(inv, listname, index, stack, player)
|
||||
return stack:get_count()
|
||||
end,
|
||||
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
|
||||
return count
|
||||
end,
|
||||
}, name)
|
||||
armor_inv:set_size("armor", 6)
|
||||
if not armor:load_armor_inventory(player) and armor.migrate_old_inventory then
|
||||
local player_inv = player:get_inventory()
|
||||
player_inv:set_size("armor", 6)
|
||||
for i=1, 6 do
|
||||
local stack = player_inv:get_stack("armor", i)
|
||||
armor_inv:set_stack("armor", i, stack)
|
||||
end
|
||||
armor:save_armor_inventory(player)
|
||||
player_inv:set_size("armor", 0)
|
||||
end
|
||||
for i=1, 6 do
|
||||
local stack = armor_inv:get_stack("armor", i)
|
||||
if stack:get_count() > 0 then
|
||||
armor:run_callbacks("on_equip", player, i, stack)
|
||||
end
|
||||
end
|
||||
armor.def[name] = {
|
||||
init_time = minetest.get_gametime(),
|
||||
level = 0,
|
||||
state = 0,
|
||||
count = 0,
|
||||
groups = {},
|
||||
}
|
||||
for _, phys in pairs(armor.physics) do
|
||||
armor.def[name][phys] = 1
|
||||
end
|
||||
for _, attr in pairs(armor.attributes) do
|
||||
armor.def[name][attr] = 0
|
||||
end
|
||||
for group, _ in pairs(armor.registered_groups) do
|
||||
armor.def[name].groups[group] = 0
|
||||
end
|
||||
local skin = armor:get_player_skin(name)
|
||||
armor.textures[name] = {
|
||||
skin = skin,
|
||||
armor = "3d_armor_trans.png",
|
||||
wielditem = "3d_armor_trans.png",
|
||||
preview = armor.default_skin.."_preview.png",
|
||||
}
|
||||
local texture_path = minetest.get_modpath("player_textures")
|
||||
if texture_path then
|
||||
local dir_list = minetest.get_dir_list(texture_path.."/textures")
|
||||
for _, fn in pairs(dir_list) do
|
||||
if fn == "player_"..name..".png" then
|
||||
armor.textures[name].skin = fn
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
armor:set_player_armor(player)
|
||||
return true
|
||||
end
|
||||
|
||||
-- Armor Player Model
|
||||
|
||||
default.player_register_model("3d_armor_character.b3d", {
|
||||
animation_speed = 30,
|
||||
textures = {
|
||||
armor.default_skin..".png",
|
||||
"3d_armor_trans.png",
|
||||
"3d_armor_trans.png",
|
||||
},
|
||||
animations = {
|
||||
stand = {x=0, y=79},
|
||||
lay = {x=162, y=166},
|
||||
walk = {x=168, y=187},
|
||||
mine = {x=189, y=198},
|
||||
walk_mine = {x=200, y=219},
|
||||
sit = {x=81, y=160},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
local name = armor:get_valid_player(player, "[on_player_receive_fields]")
|
||||
if not name then
|
||||
return
|
||||
end
|
||||
for field, _ in pairs(fields) do
|
||||
if string.find(field, "skins_set") then
|
||||
minetest.after(0, function(player)
|
||||
local skin = armor:get_player_skin(name)
|
||||
armor.textures[name].skin = skin
|
||||
armor:set_player_armor(player)
|
||||
end, player)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
default.player_set_model(player, "3d_armor_character.b3d")
|
||||
minetest.after(0, function(player)
|
||||
if init_player_armor(player) == false then
|
||||
pending_players[player] = 0
|
||||
end
|
||||
end, player)
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
if name then
|
||||
armor.def[name] = nil
|
||||
armor.textures[name] = nil
|
||||
end
|
||||
pending_players[player] = nil
|
||||
end)
|
||||
|
||||
if armor.config.drop == true or armor.config.destroy == true then
|
||||
minetest.register_on_dieplayer(function(player)
|
||||
local name, armor_inv = armor:get_valid_player(player, "[on_dieplayer]")
|
||||
if not name then
|
||||
return
|
||||
end
|
||||
local drop = {}
|
||||
for i=1, armor_inv:get_size("armor") do
|
||||
local stack = armor_inv:get_stack("armor", i)
|
||||
if stack:get_count() > 0 then
|
||||
table.insert(drop, stack)
|
||||
armor_inv:set_stack("armor", i, nil)
|
||||
end
|
||||
end
|
||||
armor:save_armor_inventory(player)
|
||||
armor:set_player_armor(player)
|
||||
local pos = player:getpos()
|
||||
if pos and armor.config.destroy == false then
|
||||
minetest.after(armor.config.bones_delay, function()
|
||||
local meta = nil
|
||||
local maxp = vector.add(pos, 8)
|
||||
local minp = vector.subtract(pos, 8)
|
||||
local bones = minetest.find_nodes_in_area(minp, maxp, {"bones:bones"})
|
||||
for _, p in pairs(bones) do
|
||||
local m = minetest.get_meta(p)
|
||||
if m:get_string("owner") == name then
|
||||
meta = m
|
||||
break
|
||||
end
|
||||
end
|
||||
if meta then
|
||||
local inv = meta:get_inventory()
|
||||
for _,stack in ipairs(drop) do
|
||||
if inv:room_for_item("main", stack) then
|
||||
inv:add_item("main", stack)
|
||||
else
|
||||
armor.drop_armor(pos, stack)
|
||||
end
|
||||
end
|
||||
else
|
||||
for _,stack in ipairs(drop) do
|
||||
armor.drop_armor(pos, stack)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
if armor.config.punch_damage == true then
|
||||
minetest.register_on_punchplayer(function(player, hitter,
|
||||
time_from_last_punch, tool_capabilities)
|
||||
local name = player:get_player_name()
|
||||
if name then
|
||||
armor:punch(player, hitter, time_from_last_punch, tool_capabilities)
|
||||
last_punch_time[name] = minetest.get_gametime()
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
minetest.register_on_player_hpchange(function(player, hp_change)
|
||||
if player and hp_change < 0 then
|
||||
local name = player:get_player_name()
|
||||
if name then
|
||||
local heal = armor.def[name].heal
|
||||
if heal >= math.random(100) then
|
||||
hp_change = 0
|
||||
end
|
||||
-- check if armor damage was handled by fire or on_punchplayer
|
||||
local time = last_punch_time[name] or 0
|
||||
if time == 0 or time + 1 < minetest.get_gametime() then
|
||||
armor:punch(player)
|
||||
end
|
||||
end
|
||||
end
|
||||
return hp_change
|
||||
end, true)
|
||||
|
||||
minetest.register_globalstep(function(dtime)
|
||||
timer = timer + dtime
|
||||
if timer > armor.config.init_delay then
|
||||
for player, count in pairs(pending_players) do
|
||||
local remove = init_player_armor(player) == true
|
||||
pending_players[player] = count + 1
|
||||
if remove == false and count > armor.config.init_times then
|
||||
minetest.log("warning", S("3d_armor: Failed to initialize player"))
|
||||
remove = true
|
||||
end
|
||||
if remove == true then
|
||||
pending_players[player] = nil
|
||||
end
|
||||
end
|
||||
timer = 0
|
||||
end
|
||||
end)
|
||||
|
||||
-- Fire Protection and water breating, added by TenPlus1
|
||||
|
||||
if armor.config.fire_protect == true then
|
||||
-- override hot nodes so they do not hurt player anywhere but mod
|
||||
for _, row in pairs(armor.fire_nodes) do
|
||||
if minetest.registered_nodes[row[1]] then
|
||||
minetest.override_item(row[1], {damage_per_second = 0})
|
||||
end
|
||||
end
|
||||
else
|
||||
print (S("[3d_armor] Fire Nodes disabled"))
|
||||
end
|
||||
|
||||
if armor.config.water_protect == true or armor.config.fire_protect == true then
|
||||
minetest.register_globalstep(function(dtime)
|
||||
armor.timer = armor.timer + dtime
|
||||
if armor.timer < armor.config.update_time then
|
||||
return
|
||||
end
|
||||
for _,player in pairs(minetest.get_connected_players()) do
|
||||
local name = player:get_player_name()
|
||||
local pos = player:getpos()
|
||||
local hp = player:get_hp()
|
||||
if not name or not pos or not hp then
|
||||
return
|
||||
end
|
||||
-- water breathing
|
||||
if armor.config.water_protect == true then
|
||||
if armor.def[name].water > 0 and
|
||||
player:get_breath() < 10 then
|
||||
player:set_breath(10)
|
||||
end
|
||||
end
|
||||
-- fire protection
|
||||
if armor.config.fire_protect == true then
|
||||
local fire_damage = true
|
||||
pos.y = pos.y + 1.4 -- head level
|
||||
local node_head = minetest.get_node(pos).name
|
||||
pos.y = pos.y - 1.2 -- feet level
|
||||
local node_feet = minetest.get_node(pos).name
|
||||
-- is player inside a hot node?
|
||||
for _, row in pairs(armor.fire_nodes) do
|
||||
-- check fire protection, if not enough then get hurt
|
||||
if row[1] == node_head or row[1] == node_feet then
|
||||
if fire_damage == true then
|
||||
armor:punch(player, "fire")
|
||||
last_punch_time[name] = minetest.get_gametime()
|
||||
fire_damage = false
|
||||
end
|
||||
if hp > 0 and armor.def[name].fire < row[2] then
|
||||
hp = hp - row[3] * armor.config.update_time
|
||||
player:set_hp(hp)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
armor.timer = 0
|
||||
end)
|
||||
end
|
45
mods/warfare_pack/3d_armor-master/3d_armor/intllib.lua
Normal file
@ -0,0 +1,45 @@
|
||||
|
||||
-- Fallback functions for when `intllib` is not installed.
|
||||
-- Code released under Unlicense <http://unlicense.org>.
|
||||
|
||||
-- Get the latest version of this file at:
|
||||
-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua
|
||||
|
||||
local function format(str, ...)
|
||||
local args = { ... }
|
||||
local function repl(escape, open, num, close)
|
||||
if escape == "" then
|
||||
local replacement = tostring(args[tonumber(num)])
|
||||
if open == "" then
|
||||
replacement = replacement..close
|
||||
end
|
||||
return replacement
|
||||
else
|
||||
return "@"..open..num..close
|
||||
end
|
||||
end
|
||||
return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
|
||||
end
|
||||
|
||||
local gettext, ngettext
|
||||
if minetest.get_modpath("intllib") then
|
||||
if intllib.make_gettext_pair then
|
||||
-- New method using gettext.
|
||||
gettext, ngettext = intllib.make_gettext_pair()
|
||||
else
|
||||
-- Old method using text files.
|
||||
gettext = intllib.Getter()
|
||||
end
|
||||
end
|
||||
|
||||
-- Fill in missing functions.
|
||||
|
||||
gettext = gettext or function(msgid, ...)
|
||||
return format(msgid, ...)
|
||||
end
|
||||
|
||||
ngettext = ngettext or function(msgid, msgid_plural, n, ...)
|
||||
return format(n==1 and msgid or msgid_plural, ...)
|
||||
end
|
||||
|
||||
return gettext, ngettext
|
384
mods/warfare_pack/3d_armor-master/3d_armor/locale/fr.po
Normal file
@ -0,0 +1,384 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-08-06 18:20+0200\n"
|
||||
"PO-Revision-Date: 2017-08-06 18:20+0200\n"
|
||||
"Last-Translator: fat115 <fat115@framasoft.org>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.8.12\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Player name is nil @1"
|
||||
msgstr "3d_armor : Nom du joueur non trouvé @1"
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Player inventory is nil @1"
|
||||
msgstr "3d_armor : Inventaire du joueur non trouvé @1"
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Detached armor inventory is nil @1"
|
||||
msgstr "3d_armor : Inventaire détaché pour l'armure non trouvé @1"
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Player reference is nil @1"
|
||||
msgstr "3d_armor : Référence au joueur non trouvée @1"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Helmet"
|
||||
msgstr "Casque d'admin"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Chestplate"
|
||||
msgstr "Cuirasse d'admin"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Leggings"
|
||||
msgstr "Jambières d'admin"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Boots"
|
||||
msgstr "Bottes d'admin"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Helmet"
|
||||
msgstr "Casque en bois"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Chestplate"
|
||||
msgstr "Cuirasse en bois"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Leggings"
|
||||
msgstr "Jambières en bois"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Boots"
|
||||
msgstr "Bottes en bois"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Helmet"
|
||||
msgstr "Casque en cactus"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Chestplate"
|
||||
msgstr "Cuirasse en cactus"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Leggings"
|
||||
msgstr "Jambières en cactus"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Boots"
|
||||
msgstr "Bottes en cactus"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Helmet"
|
||||
msgstr "Casque en acier"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Chestplate"
|
||||
msgstr " = Cuirasse en acier"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Leggings"
|
||||
msgstr "Jambières en acier"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Boots"
|
||||
msgstr "Bottes en acier"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Helmet"
|
||||
msgstr "Casque en bronze"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Chestplate"
|
||||
msgstr "Cuirasse en bronze"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Leggings"
|
||||
msgstr "Jambières en bronze"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Boots"
|
||||
msgstr "Bottes en bronze"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Helmet"
|
||||
msgstr "Casque en diamant"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Chestplate"
|
||||
msgstr "Cuirasse en diamant"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Leggings"
|
||||
msgstr "Jambières en diamant"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Boots"
|
||||
msgstr "Bottes en diamant"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Helmet"
|
||||
msgstr "Casque en or"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Chestplate"
|
||||
msgstr "Cuirasse en or"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Leggings"
|
||||
msgstr "Jambières en or"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Boots"
|
||||
msgstr "Bottes en or"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Helmet"
|
||||
msgstr "Casque en mithril"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Chestplate"
|
||||
msgstr "Cuirasse en mithril"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Leggings"
|
||||
msgstr "Jambières en mithril"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Boots"
|
||||
msgstr "Bottes en mithril"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Helmet"
|
||||
msgstr "Casque en cristal"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Chestplate"
|
||||
msgstr "Cuirasse en cristal"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Leggings"
|
||||
msgstr "Jambières en cristal"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Boots"
|
||||
msgstr "Bottes en cristal"
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Radiation"
|
||||
msgstr "Radiation"
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Level"
|
||||
msgstr "Niveau"
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Heal"
|
||||
msgstr "Soins"
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Fire"
|
||||
msgstr "Fire"
|
||||
|
||||
#: ../3d_armor/init.lua
|
||||
msgid "Your @1 got destroyed!"
|
||||
msgstr "Une partie de votre armure a été détruite : @1 !"
|
||||
|
||||
#: ../3d_armor/init.lua
|
||||
msgid "3d_armor: Failed to initialize player"
|
||||
msgstr "3d_armor : Impossible d'initialiser le joueur"
|
||||
|
||||
#: ../3d_armor/init.lua
|
||||
msgid "[3d_armor] Fire Nodes disabled"
|
||||
msgstr "[3d_armor] Noeuds de type feu désactivés"
|
||||
|
||||
#: ../3d_armor_ip/init.lua
|
||||
msgid "3d_armor_ip: Mod loaded but unused."
|
||||
msgstr "3d_armor_ip : Mod chargé mais inutilisé."
|
||||
|
||||
#: ../3d_armor_ip/init.lua
|
||||
msgid "Back"
|
||||
msgstr "Retour"
|
||||
|
||||
#: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Armor"
|
||||
msgstr "Armure"
|
||||
|
||||
#: ../3d_armor_sfinv/init.lua
|
||||
msgid "3d_armor_sfinv: Mod loaded but unused."
|
||||
msgstr "3d_armor_sfinv : Mod chargé mais inutilisé."
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor stand top"
|
||||
msgstr "Haut de support d'armure"
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor stand"
|
||||
msgstr "Support d'armure"
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor Stand"
|
||||
msgstr "Support d'armure"
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Locked Armor stand"
|
||||
msgstr "Support d'armure verrouillé"
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor Stand (owned by @1)"
|
||||
msgstr "Support d'armure (propriété de @1)"
|
||||
|
||||
#: ../3d_armor_ui/init.lua
|
||||
msgid "3d_armor_ui: Mod loaded but unused."
|
||||
msgstr "3d_armor_ui : Mod chargé mais inutilisé."
|
||||
|
||||
#: ../3d_armor_ui/init.lua
|
||||
msgid "3d Armor"
|
||||
msgstr "Armure 3d"
|
||||
|
||||
#: ../3d_armor_ui/init.lua
|
||||
msgid "Armor not initialized!"
|
||||
msgstr "Armure non initialisée !"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "hazmat_suit: Mod loaded but unused."
|
||||
msgstr "hazmat_suit : Mod chargé mais non utilisé."
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Helmet"
|
||||
msgstr "Casque 'Hazmat'"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Chestplate"
|
||||
msgstr "Cuirasse 'Hazmat'"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Sleeve"
|
||||
msgstr "Manches 'Hazmat'"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Leggins"
|
||||
msgstr "Jambières 'Hazmat'"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Boots"
|
||||
msgstr "Bottes 'Hazmat'"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Suit"
|
||||
msgstr "Combinaison 'Hazmat'"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Admin Shield"
|
||||
msgstr "Bouclier d'admin"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Wooden Shield"
|
||||
msgstr "Bouclier en bois"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Enhanced Wood Shield"
|
||||
msgstr "Bouclier en bois amélioré"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Cactus Shield"
|
||||
msgstr "Bouclier en cactus"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Enhanced Cactus Shield"
|
||||
msgstr "Bouclier en cactus amélioré"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Steel Shield"
|
||||
msgstr "Bouclier en acier"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Bronze Shield"
|
||||
msgstr "Bouclier en bronze"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Diamond Shield"
|
||||
msgstr "Bouclier en diamant"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Gold Shield"
|
||||
msgstr "Bouclier en or"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Mithril Shield"
|
||||
msgstr "Bouclier en mithril"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Crystal Shield"
|
||||
msgstr "Bouclier en cristal"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "technic_armor: Mod loaded but unused."
|
||||
msgstr "technic_armor : Mod chargé mais non utilisé."
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Lead"
|
||||
msgstr "plomb"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Brass"
|
||||
msgstr "laiton"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Cast Iron"
|
||||
msgstr "fonte"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Carbon Steel"
|
||||
msgstr "acier au carbone"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Stainless Steel"
|
||||
msgstr "acier inoxydable"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Tin"
|
||||
msgstr "étain"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Silver"
|
||||
msgstr "argent"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Helmet"
|
||||
msgstr "Casque"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Chestplate"
|
||||
msgstr "Cuirasse"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Leggings"
|
||||
msgstr "Jambières"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Boots"
|
||||
msgstr "Bottes"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Shield"
|
||||
msgstr "Bouclier"
|
||||
|
||||
#. Translators: @1 stands for material and @2 for part of the armor, so that you could use a conjunction if in your language part name comes first then material (e.g. in french 'Silver Boots' is translated in 'Bottes en argent' by using '@2 en @1' as translated string)
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "@1 @2"
|
||||
msgstr "@2 en @1"
|
384
mods/warfare_pack/3d_armor-master/3d_armor/locale/it.po
Normal file
@ -0,0 +1,384 @@
|
||||
# ITALIAN LOCALE FILE FOR THE 3D ARMOR MODULE
|
||||
# Copyright (C) 2012-2017 Stuart Jones
|
||||
# This file is distributed under the same license as the 3D ARMOR package.
|
||||
# Hamlet <h4mlet@riseup.net>, 2017.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Italian localization file for the 3D Armor module\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-08-06 18:20+0200\n"
|
||||
"PO-Revision-Date: 2017-08-18 00:36+0100\n"
|
||||
"Last-Translator: H4mlet <h4mlet@riseup.net>\n"
|
||||
"Language-Team: ITALIANO\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Poedit 1.6.10\n"
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Player name is nil @1"
|
||||
msgstr "3d_armor: Il nome della/del gicatrice/tore è nullo @1"
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Player inventory is nil @1"
|
||||
msgstr "3d_armor: L'inventario della/del giocatrice/tore è nullo @1"
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Detached armor inventory is nil @1"
|
||||
msgstr "3d_armor: L'inventario staccato dell'armatura è nullo @1"
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Player reference is nil @1"
|
||||
msgstr "3d_armor: Il riferimento alla/al giocatrice/tore è nullo @1"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Helmet"
|
||||
msgstr "Elmo dell'amministratrice/tore"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Chestplate"
|
||||
msgstr "Corazza dell'amministratrice/tore"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Leggings"
|
||||
msgstr "Gambali dell'amministratrice/tore"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Boots"
|
||||
msgstr "Stivali dell'amministratrice/tore"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Helmet"
|
||||
msgstr "Elmo di legno"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Chestplate"
|
||||
msgstr "Corazza di legno"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Leggings"
|
||||
msgstr "Gambali di legno"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Boots"
|
||||
msgstr "Stivali di legno"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Helmet"
|
||||
msgstr "Elmo di cactus"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Chestplate"
|
||||
msgstr "Corazza di cactus"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Leggings"
|
||||
msgstr "Gambali di cactus"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Boots"
|
||||
msgstr "Stivali di cactus"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Helmet"
|
||||
msgstr "Elmo di acciaio"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Chestplate"
|
||||
msgstr "Corazza di acciaio"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Leggings"
|
||||
msgstr "Gambali di acciaio"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Boots"
|
||||
msgstr "Stivali di acciaio"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Helmet"
|
||||
msgstr "Elmo di bronzo"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Chestplate"
|
||||
msgstr "Corazza di bronzo"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Leggings"
|
||||
msgstr "Gambali di bronzo"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Boots"
|
||||
msgstr "Stivali di bronzo"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Helmet"
|
||||
msgstr "Elmo di diamante"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Chestplate"
|
||||
msgstr "Corazza di diamante"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Leggings"
|
||||
msgstr "Gambali di diamante"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Boots"
|
||||
msgstr "Stivali di diamante"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Helmet"
|
||||
msgstr "Elmo d'oro"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Chestplate"
|
||||
msgstr "Corazza d'oro"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Leggings"
|
||||
msgstr "Gambali d'oro"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Boots"
|
||||
msgstr "Stivali d'oro"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Helmet"
|
||||
msgstr "Elmo di mithril"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Chestplate"
|
||||
msgstr "Corazza di mithril"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Leggings"
|
||||
msgstr "Gambali di mithril"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Boots"
|
||||
msgstr "Stivali di mithril"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Helmet"
|
||||
msgstr "Elmo di cristallo"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Chestplate"
|
||||
msgstr "Corazza di cristallo"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Leggings"
|
||||
msgstr "Gambali di cristallo"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Boots"
|
||||
msgstr "Stivali di cristallo"
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Radiation"
|
||||
msgstr "Radiazione"
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Level"
|
||||
msgstr "Livello"
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Heal"
|
||||
msgstr "Guarigione"
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Fire"
|
||||
msgstr "Fuoco"
|
||||
|
||||
#: ../3d_armor/init.lua
|
||||
msgid "Your @1 got destroyed!"
|
||||
msgstr "Il/i vostro/i @1 è/sono stato/i distrutto/i!"
|
||||
|
||||
#: ../3d_armor/init.lua
|
||||
msgid "3d_armor: Failed to initialize player"
|
||||
msgstr "3d_armor: Inizializzazione della/del giocatrice/tore fallita"
|
||||
|
||||
#: ../3d_armor/init.lua
|
||||
msgid "[3d_armor] Fire Nodes disabled"
|
||||
msgstr "[3d_armor] Nodi fuoco disabilitati"
|
||||
|
||||
#: ../3d_armor_ip/init.lua
|
||||
msgid "3d_armor_ip: Mod loaded but unused."
|
||||
msgstr "3d_armor_ip: Mod caricato ma inutilizzato."
|
||||
|
||||
#: ../3d_armor_ip/init.lua
|
||||
msgid "Back"
|
||||
msgstr "Indietro"
|
||||
|
||||
#: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Armor"
|
||||
msgstr "Armatura"
|
||||
|
||||
#: ../3d_armor_sfinv/init.lua
|
||||
msgid "3d_armor_sfinv: Mod loaded but unused."
|
||||
msgstr "3d_armor_sfinv: Mod caricato ma inutilizzato."
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor stand top"
|
||||
msgstr "Parte superiore del supporto per armatura"
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor stand"
|
||||
msgstr "Supporto per armatura"
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor Stand"
|
||||
msgstr "Supporto per armatura"
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Locked Armor stand"
|
||||
msgstr "Supporto per armatura chiuso a chiave"
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor Stand (owned by @1)"
|
||||
msgstr "Supporto per armatura (di proprietà di @1)"
|
||||
|
||||
#: ../3d_armor_ui/init.lua
|
||||
msgid "3d_armor_ui: Mod loaded but unused."
|
||||
msgstr "3d_armor_ui: Mod caricato ma inutilizzato."
|
||||
|
||||
#: ../3d_armor_ui/init.lua
|
||||
msgid "3d Armor"
|
||||
msgstr "Armatura 3D"
|
||||
|
||||
#: ../3d_armor_ui/init.lua
|
||||
msgid "Armor not initialized!"
|
||||
msgstr "Armatura non inizializzata!"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "hazmat_suit: Mod loaded but unused."
|
||||
msgstr "hazmat_suit: Mod caricato ma inutilizzato."
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Helmet"
|
||||
msgstr "Elmo hazmat"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Chestplate"
|
||||
msgstr "Corazza hazmat"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Sleeve"
|
||||
msgstr "Manica hazmat"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Leggins"
|
||||
msgstr "Gambali hazmat"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Boots"
|
||||
msgstr "Stivali hazmat"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Suit"
|
||||
msgstr "Completo hazmat"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Admin Shield"
|
||||
msgstr "Scudo dell'amministratrice/tore"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Wooden Shield"
|
||||
msgstr "Scudo di legno"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Enhanced Wood Shield"
|
||||
msgstr "Scudo di legno migliorato"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Cactus Shield"
|
||||
msgstr "Scudo di cactus"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Enhanced Cactus Shield"
|
||||
msgstr "Scudo di cactus migliorato"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Steel Shield"
|
||||
msgstr "Scudo di acciaio"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Bronze Shield"
|
||||
msgstr "Scudo di bronzo"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Diamond Shield"
|
||||
msgstr "Scudo di diamante"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Gold Shield"
|
||||
msgstr "Scudo d'oro"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Mithril Shield"
|
||||
msgstr "Scudo di mithril"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Crystal Shield"
|
||||
msgstr "Scudo di cristallo"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "technic_armor: Mod loaded but unused."
|
||||
msgstr "technic_armor: Mod caricato ma inutilizzato."
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Lead"
|
||||
msgstr "Piombo"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Brass"
|
||||
msgstr "Ottone"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Cast Iron"
|
||||
msgstr "Ghisa"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Carbon Steel"
|
||||
msgstr "Acciaio al carbonio"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Stainless Steel"
|
||||
msgstr "Acciaio inossidabile"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Tin"
|
||||
msgstr "Stagno"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Silver"
|
||||
msgstr "Argento"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Helmet"
|
||||
msgstr "Elmo"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Chestplate"
|
||||
msgstr "Corazza"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Leggings"
|
||||
msgstr "Gambali"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Boots"
|
||||
msgstr "Stivali"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Shield"
|
||||
msgstr "Scudo"
|
||||
|
||||
#. Translators: @1 stands for material and @2 for part of the armor, so that you could use a conjunction if in your language part name comes first then material (e.g. in french 'Silver Boots' is translated in 'Bottes en argent' by using '@2 en @1' as translated string)
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "@1 @2"
|
||||
msgstr "@2 di @1"
|
386
mods/warfare_pack/3d_armor-master/3d_armor/locale/ms.po
Normal file
@ -0,0 +1,386 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-08-06 18:20+0200\n"
|
||||
"PO-Revision-Date: 2018-02-07 13:25+0800\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
"Last-Translator: MuhdNurHidayat (MNH48) <mnh48mail@gmail.com>\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"Language: ms\n"
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Player name is nil @1"
|
||||
msgstr "3d_armor: Nama pemain tiada nilai @1"
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Player inventory is nil @1"
|
||||
msgstr "3d_armor: Inventori pemain tiada nilai @1"
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Detached armor inventory is nil @1"
|
||||
msgstr "3d_armor: Inventori perisai terpisah tiada nilai @1"
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Player reference is nil @1"
|
||||
msgstr "3d_armor: Rujukan pemain tiada nilai @1"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Helmet"
|
||||
msgstr "Helmet Pentadbir"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Chestplate"
|
||||
msgstr "Perisai Dada Pentadbir"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Leggings"
|
||||
msgstr "Perisai Kaki Pentadbir"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Boots"
|
||||
msgstr "But Pentadbir"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Helmet"
|
||||
msgstr "Helmet Kayu"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Chestplate"
|
||||
msgstr "Perisai Dada Kayu"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Leggings"
|
||||
msgstr "Perisai Kaki Kayu"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Boots"
|
||||
msgstr "But Kayu"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Helmet"
|
||||
msgstr "Helmet Kaktus"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Chestplate"
|
||||
msgstr "Perisai Dada Kaktus"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Leggings"
|
||||
msgstr "Perisai Kaki Kaktus"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Boots"
|
||||
msgstr "But Kaktus"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Helmet"
|
||||
msgstr "Helmet Keluli"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Chestplate"
|
||||
msgstr "Perisai Dada Keluli"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Leggings"
|
||||
msgstr "Perisai Kaki Keluli"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Boots"
|
||||
msgstr "But Keluli"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Helmet"
|
||||
msgstr "Helmet Gangsa"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Chestplate"
|
||||
msgstr "Perisai Dada Gangsa"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Leggings"
|
||||
msgstr "Perisai Kaki Gangsa"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Boots"
|
||||
msgstr "But Gangsa"
|
||||
|
||||
# 'Diamond' should be translated as 'intan' because the more common word 'berlian' is only specifically used for the gemstone diamond.
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Helmet"
|
||||
msgstr "Helmet Intan"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Chestplate"
|
||||
msgstr "Perisai Dada Intan"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Leggings"
|
||||
msgstr "Perisai Kaki Intan"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Boots"
|
||||
msgstr "But Intan"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Helmet"
|
||||
msgstr "Helmet Emas"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Chestplate"
|
||||
msgstr "Perisai Dada Emas"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Leggings"
|
||||
msgstr "Perisai Kaki Emas"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Boots"
|
||||
msgstr "But Emas"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Helmet"
|
||||
msgstr "Helmet Mithril"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Chestplate"
|
||||
msgstr "Perisai Dada Mithril"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Leggings"
|
||||
msgstr "Perisai Kaki Mithril"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Boots"
|
||||
msgstr "But Mithril"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Helmet"
|
||||
msgstr "Helmet Kristal"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Chestplate"
|
||||
msgstr "Perisai Dada Kristal"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Leggings"
|
||||
msgstr "Perisai Kaki Kristal"
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Boots"
|
||||
msgstr "But Kristal"
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Radiation"
|
||||
msgstr "Radiasi"
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Level"
|
||||
msgstr "Tahap"
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Heal"
|
||||
msgstr "Pulih"
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Fire"
|
||||
msgstr "Api"
|
||||
|
||||
#: ../3d_armor/init.lua
|
||||
msgid "Your @1 got destroyed!"
|
||||
msgstr "@1 anda telah musnah!"
|
||||
|
||||
#: ../3d_armor/init.lua
|
||||
msgid "3d_armor: Failed to initialize player"
|
||||
msgstr "3d_armor: Gagal mengasalkan pemain"
|
||||
|
||||
#: ../3d_armor/init.lua
|
||||
msgid "[3d_armor] Fire Nodes disabled"
|
||||
msgstr "[3d_armor] Nod-nod Api dilumpuhkan"
|
||||
|
||||
#: ../3d_armor_ip/init.lua
|
||||
msgid "3d_armor_ip: Mod loaded but unused."
|
||||
msgstr "3d_armor_ip: Mods dimuatkan tetapi tidak digunakan."
|
||||
|
||||
#: ../3d_armor_ip/init.lua
|
||||
msgid "Back"
|
||||
msgstr "Kembali"
|
||||
|
||||
#: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Armor"
|
||||
msgstr "Perisai"
|
||||
|
||||
#: ../3d_armor_sfinv/init.lua
|
||||
msgid "3d_armor_sfinv: Mod loaded but unused."
|
||||
msgstr "3d_armor_sfinv: Mods dimuatkan tetapi tidak digunakan."
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor stand top"
|
||||
msgstr "Bhg atas dirian perisai"
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor stand"
|
||||
msgstr "Dirian perisai"
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor Stand"
|
||||
msgstr "Dirian Perisai"
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Locked Armor stand"
|
||||
msgstr "Dirian perisai Berkunci"
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor Stand (owned by @1)"
|
||||
msgstr "Dirian Perisai (milik @1)"
|
||||
|
||||
#: ../3d_armor_ui/init.lua
|
||||
msgid "3d_armor_ui: Mod loaded but unused."
|
||||
msgstr "3d_armor_ui: Mods dimuatkan tetapi tidak digunakan."
|
||||
|
||||
#: ../3d_armor_ui/init.lua
|
||||
msgid "3d Armor"
|
||||
msgstr "Perisai 3d"
|
||||
|
||||
#: ../3d_armor_ui/init.lua
|
||||
msgid "Armor not initialized!"
|
||||
msgstr "Perisai tidak diasalkan!"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "hazmat_suit: Mod loaded but unused."
|
||||
msgstr "hazmat_suit: Mods dimuatkan tetapi tidak digunakan."
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Helmet"
|
||||
msgstr "Helmet Keselamatan"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Chestplate"
|
||||
msgstr "Perisai Dada Keselamatan"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Sleeve"
|
||||
msgstr "Perisai Tangan Keselamatan"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Leggins"
|
||||
msgstr "Perisai Kaki Keselamatan"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Boots"
|
||||
msgstr "But Keselamatan"
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Suit"
|
||||
msgstr "Pakaian Keselamatan"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Admin Shield"
|
||||
msgstr "Perisai Pegang Pentadbir"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Wooden Shield"
|
||||
msgstr "Perisai Pegang Kayu"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Enhanced Wood Shield"
|
||||
msgstr "Perisai Pegang Kayu Kukuh"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Cactus Shield"
|
||||
msgstr "Perisai Pegang Kaktus"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Enhanced Cactus Shield"
|
||||
msgstr "Perisai Pegang Kaktus Kukuh"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Steel Shield"
|
||||
msgstr "Perisai Pegang Keluli"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Bronze Shield"
|
||||
msgstr "Perisai Pegang Gangsa"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Diamond Shield"
|
||||
msgstr "Perisai Pegang Intan"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Gold Shield"
|
||||
msgstr "Perisai Pegang Emas"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Mithril Shield"
|
||||
msgstr "Perisai Pegang Mithril"
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Crystal Shield"
|
||||
msgstr "Perisai Pegang Kristal"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "technic_armor: Mod loaded but unused."
|
||||
msgstr "technic_armor: Mods dimuatkan tetapi tidak digunakan."
|
||||
|
||||
# 'Lead' here is the chemical compound so the translation is 'plumbum', not 'pimpin' (act of leading).
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Lead"
|
||||
msgstr "Plumbum"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Brass"
|
||||
msgstr "Loyang"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Cast Iron"
|
||||
msgstr "Besi Tuang"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Carbon Steel"
|
||||
msgstr "Keluli Karbon"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Stainless Steel"
|
||||
msgstr "Keluli Tahan Karat"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Tin"
|
||||
msgstr "Timah"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Silver"
|
||||
msgstr "Perak"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Helmet"
|
||||
msgstr "Helmet"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Chestplate"
|
||||
msgstr "Perisai Dada"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Leggings"
|
||||
msgstr "Perisai Kaki"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Boots"
|
||||
msgstr "But"
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Shield"
|
||||
msgstr "Perisai Pegang"
|
||||
|
||||
#. Translators: @1 stands for material and @2 for part of the armor, so that you could use a conjunction if in your language part name comes first then material (e.g. in french 'Silver Boots' is translated in 'Bottes en argent' by using '@2 en @1' as translated string)
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "@1 @2"
|
||||
msgstr "@2 @1"
|
383
mods/warfare_pack/3d_armor-master/3d_armor/locale/template.pot
Normal file
@ -0,0 +1,383 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-08-06 18:20+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Player name is nil @1"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Player inventory is nil @1"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Detached armor inventory is nil @1"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/api.lua
|
||||
msgid "3d_armor: Player reference is nil @1"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Helmet"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Chestplate"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Leggings"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Admin Boots"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Helmet"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Chestplate"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Leggings"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Wood Boots"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Helmet"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Chestplate"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Leggings"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Cactus Boots"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Helmet"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Chestplate"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Leggings"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Steel Boots"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Helmet"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Chestplate"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Leggings"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Bronze Boots"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Helmet"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Chestplate"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Leggings"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Diamond Boots"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Helmet"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Chestplate"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Leggings"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Gold Boots"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Helmet"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Chestplate"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Leggings"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Mithril Boots"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Helmet"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Chestplate"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Leggings"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/armor.lua
|
||||
msgid "Crystal Boots"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Radiation"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Level"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Heal"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Fire"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/init.lua
|
||||
msgid "Your @1 got destroyed!"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/init.lua
|
||||
msgid "3d_armor: Failed to initialize player"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor/init.lua
|
||||
msgid "[3d_armor] Fire Nodes disabled"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor_ip/init.lua
|
||||
msgid "3d_armor_ip: Mod loaded but unused."
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor_ip/init.lua
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua
|
||||
msgid "Armor"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor_sfinv/init.lua
|
||||
msgid "3d_armor_sfinv: Mod loaded but unused."
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor stand top"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor stand"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor Stand"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Locked Armor stand"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor_stand/init.lua
|
||||
msgid "Armor Stand (owned by @1)"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor_ui/init.lua
|
||||
msgid "3d_armor_ui: Mod loaded but unused."
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor_ui/init.lua
|
||||
msgid "3d Armor"
|
||||
msgstr ""
|
||||
|
||||
#: ../3d_armor_ui/init.lua
|
||||
msgid "Armor not initialized!"
|
||||
msgstr ""
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "hazmat_suit: Mod loaded but unused."
|
||||
msgstr ""
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Helmet"
|
||||
msgstr ""
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Chestplate"
|
||||
msgstr ""
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Sleeve"
|
||||
msgstr ""
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Leggins"
|
||||
msgstr ""
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Boots"
|
||||
msgstr ""
|
||||
|
||||
#: ../hazmat_suit/init.lua
|
||||
msgid "Hazmat Suit"
|
||||
msgstr ""
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Admin Shield"
|
||||
msgstr ""
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Wooden Shield"
|
||||
msgstr ""
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Enhanced Wood Shield"
|
||||
msgstr ""
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Cactus Shield"
|
||||
msgstr ""
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Enhanced Cactus Shield"
|
||||
msgstr ""
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Steel Shield"
|
||||
msgstr ""
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Bronze Shield"
|
||||
msgstr ""
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Diamond Shield"
|
||||
msgstr ""
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Gold Shield"
|
||||
msgstr ""
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Mithril Shield"
|
||||
msgstr ""
|
||||
|
||||
#: ../shields/init.lua
|
||||
msgid "Crystal Shield"
|
||||
msgstr ""
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "technic_armor: Mod loaded but unused."
|
||||
msgstr ""
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Lead"
|
||||
msgstr ""
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Brass"
|
||||
msgstr ""
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Cast Iron"
|
||||
msgstr ""
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Carbon Steel"
|
||||
msgstr ""
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Stainless Steel"
|
||||
msgstr ""
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Tin"
|
||||
msgstr ""
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Silver"
|
||||
msgstr ""
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Helmet"
|
||||
msgstr ""
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Chestplate"
|
||||
msgstr ""
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Leggings"
|
||||
msgstr ""
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Boots"
|
||||
msgstr ""
|
||||
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "Shield"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: @1 stands for material and @2 for part of the armor, so that you could use a conjunction if in your language part name comes first then material (e.g. in french 'Silver Boots' is translated in 'Bottes en argent' by using '@2 en @1' as translated string)
|
||||
#: ../technic_armor/init.lua
|
||||
msgid "@1 @2"
|
||||
msgstr ""
|
After Width: | Height: | Size: 291 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 321 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 287 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 316 B |