1
0
mirror of https://gitlab.com/rubenwardy/awards.git synced 2025-06-28 22:26:17 +02:00

70 Commits

Author SHA1 Message Date
0574d0375e Merge dev branch into master 2018-04-04 22:15:43 +01:00
07997a54f4 Readd awards 2018-04-04 21:11:40 +01:00
f84e6d8db5 Fix conversion error 2018-04-04 21:04:54 +01:00
f571f9d6eb Add support for death reasons 2018-04-04 20:55:33 +01:00
6c79a2f73f Use mod_storage and add converter for awards.txt 2018-04-04 19:01:33 +01:00
f7956d97e2 Add default_def for trigger prototype 2018-04-04 18:39:06 +01:00
cca278024d Remove datakey and use trigger names instead 2018-04-04 18:36:47 +01:00
eaab883e71 Readd triggers 2018-04-04 18:35:28 +01:00
28c59340ea Implement conted_key trigger type 2018-04-04 18:30:47 +01:00
d82972b448 Update README.md 2018-04-04 18:02:43 +01:00
72cc346c35 Rename awards.def to awards.registered_awards 2018-04-04 17:43:44 +01:00
5de9dcb797 Move api_helpers.lua in api.lua 2018-04-04 17:42:12 +01:00
7c5fd79b57 Clean up formspec related code 2018-04-04 17:37:43 +01:00
c579f862b6 Reduce awards.player() calls 2018-04-04 17:32:37 +01:00
eeee4a8398 Clean up player data validation 2018-04-04 17:23:46 +01:00
ef19940edc Add trigger definitions rather than register function 2018-04-04 17:01:55 +01:00
8b024accdd Add register_trigger_counted for homogenous events 2018-04-04 16:03:34 +01:00
dd2a5d2d1f Remove formspec notification 2018-04-04 15:46:11 +01:00
2c4da0b88a Add luacheck 2018-04-04 15:36:27 +01:00
81aa0f1c82 Fix broken achievement image (On The Way) 2017-10-05 19:04:02 +01:00
81590b5773 Fix deprecated setting call 2017-10-02 09:11:51 +01:00
3854565fa2 Update readme.md 2017-06-16 21:38:41 +01:00
096fe16c97 Update and make minor corrections to the French translation 2017-02-25 22:15:23 +00:00
3dd7a5e66a Add French translation. 2017-02-23 22:48:13 +00:00
9a02873b59 Add Spanish translation. 2017-02-23 22:48:13 +00:00
e919355bec Add helper script to update translations. 2017-02-23 22:48:13 +00:00
ccd9a01424 Update catalogs. 2017-02-23 22:48:13 +00:00
1049280eeb Update to new intllib API. 2017-02-23 22:48:13 +00:00
7fd56ac3d0 Resize formspec and HUD to fit bigger strings 2017-02-19 17:21:37 +00:00
c994978683 Update sfinv support to match stable version 2016-12-27 19:23:46 +00:00
38c504e938 Add eat trigger, extend existing triggers, add 9 awards (#35)
* Add eat trigger and 2 new awards
* Add mushroom eating awards
* Add support for counting any eat/dig/craft/place
* Update readme
* Add 4 builder awards
* Update German locale
* Update dependencies
* Fix mistake in German translation
* Revert removal of background
2016-11-15 01:57:01 +01:00
ab7206e150 Fix mod not working with mod security and intllib 2016-11-14 21:13:32 +00:00
f4a5eb25f6 Fix mod not working with mod security and intllib 2016-11-09 02:42:36 +01:00
43da09620e Fix bugs when mod is run outside of Minetest Game (#34) 2016-11-06 11:05:13 +00:00
ae01ea01dd Show error messages when there are no awards 2016-09-10 15:38:01 +01:00
a04f3df1e2 Check for existance of default mod 2016-09-10 15:20:38 +01:00
90bf9b061a Add notification sound
License of default sound: CC-0
Source: https://www.freesound.org/people/Kastenfrosch/sounds/162482/
2016-09-01 16:32:05 +01:00
0e48cd8675 Add German translation 2016-09-01 16:22:37 +01:00
ed09abd868 Automatic line breaks for long award desc. 2016-09-01 16:22:37 +01:00
13eb5dcdae Add optional default description for triggers 2016-09-01 16:22:37 +01:00
67946bf0c4 Improve strings and make them translatable 2016-09-01 16:21:41 +01:00
50349917e5 Remove outdated /cawards command for real 2016-09-01 16:37:05 +02:00
963c5772df Fix crash when opening awards after clearing 2016-09-01 16:36:42 +02:00
92c43d1c04 Fix style issues 2016-08-30 01:05:43 +01:00
0692d1cc85 Remove some redundant “ ~= nil”s in init.lua 2016-08-11 10:00:07 +02:00
1bd96e662b More consistent code style in init.lua 2016-08-11 09:55:56 +02:00
5b416c61c4 Fix/change some achievements backgrounds 2016-08-11 09:49:47 +02:00
d4c47775c9 Add custom icon for Firefighter 2016-08-10 20:13:39 +02:00
20eaf3b34f Add Lava Miner award (digging close to lava) 2016-08-10 14:06:59 +02:00
cdf59bb9fd Fix typo in firefighter award ID 2016-08-10 13:11:08 +02:00
743cb4ce8d Add craft 10 mese lamps award 2016-08-10 12:53:57 +02:00
9264c75f0a Add Pyromaniac and Firefighter awards 2016-08-10 12:45:16 +02:00
fd79fe6521 Add snow award (proof for visiting snow land) 2016-08-10 11:52:51 +02:00
7767cff0bf Add 2 new stone brick crafting awards
To give a reason to do something with all that stockpiled cobblestone ;-)
2016-08-10 11:32:13 +02:00
94304a4a90 Heavily nerf lumberjack awards, 1296 trees max.
Playing lumberjack gets repetitive pretty soon,
it's not fun at all to do it for long.
Let's do some calculations:
Digging 100 trees w/ diamond axe takes ca. 3.5 min.
1 diamond axe lasts for 200-300 trees and needs 3 diamonds.
Meaning, to get L337 Lumberjack (100000) trees you
need 58 hours only digging trees! Plus the time to
find ca. 1000 diamonds (100000/300*3) only for the
axes. So much nope.

New awards are factors of 6, capped capped at 1296
because it gets boring at about that point and already
with 1000 trees in your storage you have enough wood
for a long time.

Also, award names were slightly changed.
2016-08-10 09:39:27 +02:00
ae09298ea2 More consistent award icons, add “level” icons 2016-08-10 09:19:45 +02:00
6a7ea1a70d Add a lot of awards 2016-08-10 09:19:36 +02:00
d38ba4e8a0 Release 2.3.0 2016-08-02 00:09:43 +01:00
f5ea95ad35 Add new awards, remove death awards 2016-08-01 23:56:06 +01:00
9b6e93dd9a Announce secret awards as secret awards 2016-08-01 23:46:49 +01:00
49f251136e Make secret awards darker in list + other tweaks 2016-08-01 23:46:15 +01:00
9308b95163 Add sfinv support 2016-08-01 22:39:32 +01:00
f6515c12b8 Stop progress bars going out of bounds
Fixes #21
2016-08-01 21:04:00 +01:00
00eeeb3eef Add support for Unified Inventory 2016-08-01 20:38:19 +01:00
5dec2fd60b Make textures follow naming conventions 2016-08-01 20:34:23 +01:00
7eeebf0f40 Release 2.2.0 2016-08-01 20:28:55 +01:00
b689dc8eaf Add progress bar 2016-08-01 20:27:12 +01:00
f5cf49af2e Release 2.1.2 2016-08-01 17:07:10 +01:00
48bb2e9656 Fix craft trigger not taking stack count into account 2016-08-01 17:05:02 +01:00
c79f13a4a3 Fix bug with getting player data, and release 2.1.1 2016-07-29 17:47:56 +01:00
42 changed files with 5121 additions and 1075 deletions

14
.luacheckrc Normal file
View File

@ -0,0 +1,14 @@
unused_args = false
allow_defined_top = true
globals = {
"minetest", "awards",
}
read_globals = {
string = {fields = {"split"}},
table = {fields = {"copy", "getn"}},
"vector", "default", "ItemStack",
"dump", "sfinv", "intllib",
"unified_inventory",
}

12
.travis.yml Normal file
View File

@ -0,0 +1,12 @@
language: generic
sudo: false
addons:
apt:
packages:
- luarocks
before_install:
- luarocks install --local luacheck
script:
- $HOME/.luarocks/bin/luacheck --no-color .
notifications:
email: false

171
README.md Normal file
View File

@ -0,0 +1,171 @@
# Awards
Adds achievements to Minetest (plus a very good API).
by [rubenwardy](https://rubenwardy.com),
with thanks to Wuzzy, kaeza, and MrIbby.
Majority of awards are back ported from Calinou's old fork in Carbone, under same license.
# API
## Registering Achievements
```lua
awards.register_achievement(name, {
description = "The title of the award",
-- Optional:
sound = {}, -- SimpleSoundSpec or false to play no sound
-- if not provided, uses default sound
image = "icon_image.png", -- uses default icon otherwise
background = "background_image.png", -- uses default background otherwise
trigger = { -- is only unlocked by direct calls to awards.unlock() otherwise
type = "trigger_type",
-- see specific docs on the trigger to see what else goes here
}
})
```
## Registering Trigger Types
```lua
local trigger = awards.register_trigger(name, {
type = "", -- type of trigger, defaults to custom
progress = "%2/%2"
auto_description = { "Mine: @2", "Mine: @1×@2" },
on_register = function(self, def) end
-- "counted_key" only, when no key is given (ie: a total)
auto_description_total = { "Mine @1 block.", "Mine @1 blocks." },
-- "counted_key" only, get key for particular award - return nil for a total
get_key = function(self, def)
return minetest.registered_aliases[def.trigger.node] or def.trigger.node
end
})
```
Types:
* "custom" requires you handle the calling of awards.unlock() yourself. You also
need to implement on_register() yourself.
* "counted" stores a single counter for each player which is incremented by calling
trigger:notify(player). Good for homogenous actions like number of chat messages,
joins, and the like.
* "counted_key" stores a table of counters each indexed by a key. There is also
a total field (`__total`) which stores the sum of all counters. A counter is
incremented by calling trigger:notify(player, key). This is good for things like
placing nodes or crafting items, where the key will be the item or node name.
## Helper Functions
* awards.register_on_unlock(func(name, def))
* name is the player name
* def is the award def.
* return true to cancel HUD
* awards.unlock(name, award)
* gives an award to a player
* name is the player name
# Included in the Mod
The API, above, allows you to register awards
and triggers (things that look for events and unlock awards, they need
to be registered in order to get details from award_def.trigger).
However, all awards and triggers are separate from the API.
They can be found in init.lua and triggers.lua
## Triggers
Callbacks (register a function to be run)
"dig", "place", "craft", "death", "chat", "join" or "eat"
* dig type: Dig a node.
* node: the dug node type. If nil, all dug nodes are counted
* place type: Place a node.
* node: the placed node type. If nil, all placed nodes are counted
* eat type: Eat an item.
* item: the eaten item type. If nil, all eaten items are counted
* craft type: Craft something.
* item: the crafted item type. If nil, all crafted items are counted
* death type: Die.
* reason: the death reason, one of the types in PlayerHPChangeReason (see lua_api.txt)
or nil for total deaths.
* chat type: Write a chat message.
* join type: Join the server.
* (for all types) target - how many times to dig/place/craft/etc.
* See Triggers
### dig
trigger = {
type = "dig",
node = "default:dirt",
target = 50
}
### place
trigger = {
type = "place",
node = "default:dirt",
target = 50
}
### death
trigger = {
type = "death",
target = 5
}
### chat
trigger = {
type = "chat",
target = 100
}
### join
trigger = {
type = "join",
target = 100
}
### eat
trigger = {
type = "eat",
item = "default:apple",
target = 100
}
## Callbacks relating to triggers
* awards.register_on_dig(func(player, data))
* data is player data (see below)
* return award name or null
* awards.register_on_place(func(player, data))
* data is player data (see below)
* return award name or null
* awards.register_on_eat(func(player, data))
* data is player data (see below)
* return award name or null
* awards.register_on_death(func(player, data))
* data is player data (see below)
* return award name or null
* awards.register_on_chat(func(player, data))
* data is player data (see below)
* return award name or null
* awards.register_on_join(func(player, data)
* data is player data (see below)
* return award name or null

504
api.lua
View File

@ -14,57 +14,114 @@
-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--
-- The global award namespace
awards = {
show_mode = "hud"
}
dofile(minetest.get_modpath("awards").."/api_helpers.lua")
local S, NS = awards.gettext, awards.ngettext
awards.registered_awards = {}
awards.on = {}
awards.on_unlock = {}
local storage = minetest.get_mod_storage()
-- Table Save Load Functions
function awards.save()
local file = io.open(minetest.get_worldpath().."/awards.txt", "w")
if file then
file:write(minetest.serialize(awards.players))
file:close()
storage:set_string("player_data", minetest.write_json(awards.players))
end
local function convert_data()
minetest.log("warning", "Importing awards data from previous version")
local old_players = awards.players
awards.players = {}
for name, data in pairs(old_players) do
while name.name do
name = name.name
end
data.name = name
print("Converting data for " .. name)
-- Just rename counted
local counted = {
chats = "chat",
deaths = "death",
joins = "join",
}
for from, to in pairs(counted) do
data[to] = data[from]
data[from] = nil
end
data.death = {
unknown = data.death,
__total = data.death,
}
-- Convert item db to new format
local counted_items = {
count = "dig",
place = "place",
craft = "craft",
}
for from, to in pairs(counted_items) do
local ret = {}
local count = 0
for modname, items in pairs(data[from]) do
for itemname, value in pairs(items) do
itemname = modname .. ":" .. itemname
local key = minetest.registered_aliases[itemname] or itemname
ret[key] = value
count = count + value
end
end
local S = function(s) return s end
function awards.set_intllib(locale)
S = locale
ret.__total = count
data[from] = nil
data[to] = ret
end
function awards.init()
awards.players = awards.load()
awards.def = {}
awards.trigger_types = {}
awards.on = {}
awards.on_unlock = {}
awards.players[name] = data
end
print(dump(awards.players))
end
function awards.load()
local file = io.open(minetest.get_worldpath().."/awards.txt", "r")
local old_save_path = minetest.get_worldpath().."/awards.txt"
local file = io.open(old_save_path, "r")
if file then
local table = minetest.deserialize(file:read("*all"))
if type(table) == "table" then
return table
awards.players = table
convert_data()
else
awards.players = {}
end
end
return {}
end
function awards.register_trigger(name, func)
awards.trigger_types[name] = func
awards.on[name] = {}
awards['register_on_'..name] = function(func)
table.insert(awards.on[name], func)
file:close()
os.rename(old_save_path, minetest.get_worldpath().."/awards.bk.txt")
awards.save()
else
awards.players = minetest.parse_json(storage:get_string("player_data")) or {}
end
end
function awards.run_trigger_callbacks(player, data, trigger, table_func)
for i = 1, #awards.on[trigger] do
function awards.player(name)
local data = awards.players[name] or {}
awards.players[name] = data
data.name = data.name or name
data.unlocked = data.unlocked or {}
return data
end
function awards.player_or_nil(name)
return awards.players[name]
end
local default_def = {}
function default_def:run_callbacks(player, data, table_func)
for i = 1, #self.on do
local res = nil
local entry = awards.on[trigger][i]
local entry = self.on[i]
if type(entry) == "function" then
res = entry(player, data)
elseif type(entry) == "table" and entry.award then
@ -77,52 +134,188 @@ function awards.run_trigger_callbacks(player, data, trigger, table_func)
end
end
function awards.increment_item_counter(data, field, itemname)
local name_split = string.split(itemname, ":")
if #name_split ~= 2 then
return false
function awards.register_trigger(tname, tdef)
assert(type(tdef) == "table",
"Passing a callback to register_trigger is not supported in 3.0")
tdef.name = tname
for key, value in pairs(default_def) do
tdef[key] = value
end
local mod = name_split[1]
local item = name_split[2]
if data and field and mod and item then
awards.assertPlayer(data)
awards.tbv(data, field)
awards.tbv(data[field], mod)
awards.tbv(data[field][mod], item, 0)
if tdef.type == "counted" then
local old_reg = tdef.on_register
data[field][mod][item] = data[field][mod][item] + 1
return true
function tdef:on_register(def)
local tmp = {
award = def.name,
target = def.trigger.target,
}
tdef.register(tmp)
function def.getProgress(_, data)
local done = data[tname] or 0
return {
perc = done / tmp.target,
label = S(tdef.progress, done, tmp.target),
}
end
function def.getDefaultDescription(_)
local n = def.trigger.target
return NS(tdef.auto_description[1], tdef.auto_description[2], n, n)
end
if old_reg then
return old_reg(tdef, def)
end
end
function tdef.notify(player)
assert(player and player.is_player and player:is_player())
local name = player:get_player_name()
local data = awards.player(name)
print(dump(data))
-- Increment counter
local currentVal = (data[tname] or 0) + 1
data[tname] = currentVal
tdef:run_callbacks(player, data, function(entry)
if entry.target and entry.award and currentVal and
currentVal >= entry.target then
return entry.award
end
end)
end
awards["notify_" .. tname] = tdef.notify
elseif tdef.type == "counted_key" then
local old_reg = tdef.on_register
function tdef:on_register(def)
local tmp = {
award = def.name,
key = tdef:get_key(def),
target = def.trigger.target,
}
tdef.register(tmp)
function def.getProgress(_, data)
local done
data[tname] = data[tname] or {}
if tmp.key then
done = data[tname][tmp.key] or 0
else
return false
done = data[tname].__total or 0
end
return {
perc = done / tmp.target,
label = S(tdef.progress, done, tmp.target),
}
end
function def.getDefaultDescription(_)
local n = def.trigger.target
if tmp.key then
local nname = tmp.key
return NS(tdef.auto_description[1],
tdef.auto_description[2], n, n, nname)
else
return NS(tdef.auto_description_total[1],
tdef.auto_description_total[2], n, n)
end
end
if old_reg then
return old_reg(tdef, def)
end
end
function tdef.notify(player, key, n)
n = n or 1
assert(player and player.is_player and player:is_player() and key)
local name = player:get_player_name()
local data = awards.player(name)
print(dump(data))
-- Increment counter
data[tname] = data[tname] or {}
local currentVal = (data[tname][key] or 0) + n
data[tname][key] = currentVal
data[tname].__total = (data[tname].__total or 0) + n
tdef:run_callbacks(player, data, function(entry)
local current
if entry.key == key then
current = currentVal
elseif entry.key == nil then
current = data[tname].__total
else
return
end
if current > entry.target then
return entry.award
end
end)
end
awards["notify_" .. tname] = tdef.notify
elseif tdef.type and tdef.type ~= "custom" then
error("Unrecognised trigger type " .. tdef.type)
end
awards.registered_triggers[tname] = tdef
tdef.on = {}
tdef.register = function(func)
table.insert(tdef.on, func)
end
-- Backwards compat
awards.on[tname] = tdef.on
awards['register_on_' .. tname] = tdef.register
return tdef
end
function awards.increment_item_counter(data, field, itemname, count)
itemname = minetest.registered_aliases[itemname] or itemname
data[field][itemname] = (data[field][itemname] or 0) + 1
end
function awards.get_item_count(data, field, itemname)
itemname = minetest.registered_aliases[itemname] or itemname
return data[field][itemname] or 0
end
function awards.get_total_keyed_count(data, field)
return data[field].__total or 0
end
function awards.register_on_unlock(func)
table.insert(awards.on_unlock, func)
end
-- API Functions
function awards._additional_triggers(name, def)
-- Depreciated!
end
function awards.register_achievement(name, def)
def.name = name
-- Add Triggers
if def.trigger and def.trigger.type then
local func = awards.trigger_types[def.trigger.type]
if func then
func(def)
else
awards._additional_triggers(name, def)
end
local tdef = awards.registered_triggers[def.trigger.type]
assert(tdef, "Trigger not found: " .. def.trigger.type)
tdef:on_register(def)
end
-- Add Award
awards.def[name] = def
awards.registered_awards[name] = def
local tdef = awards.registered_awards[name]
if def.description == nil and tdef.getDefaultDescription then
def.description = tdef:getDefaultDescription()
end
end
function awards.enable(name)
@ -140,7 +333,7 @@ function awards.disable(name)
end
function awards.clear_player(name)
awards.players[name] = nil
awards.players[name] = {}
end
-- This function is called whenever a target condition is met.
@ -152,23 +345,12 @@ end
-- award - the name of the award to give
function awards.unlock(name, award)
-- Access Player Data
local data = awards.players[name]
local awdef = awards.def[award]
local data = awards.player(name)
local awdef = awards.registered_awards[award]
assert(awdef, "Unable to unlock an award which doesn't exist!")
-- Perform checks
if not data then
return
end
if not awdef then
return
end
if data.disabled then
return
end
awards.tbv(data,"unlocked")
-- Don't give the achievement if it has already been given
if data.unlocked[award] and data.unlocked[award] == award then
if data.disabled or
(data.unlocked[award] and data.unlocked[award] == award) then
return
end
@ -203,21 +385,33 @@ function awards.unlock(name, award)
-- Get Notification Settings
local title = awdef.title or award
local desc = awdef.description or ""
local background = awdef.background or "bg_default.png"
local icon = awdef.icon or "unknown.png"
local custom_announce = awdef.custom_announce or S("Achievement Unlocked:")
local background = awdef.background or "awards_bg_default.png"
local icon = awdef.icon or "awards_unknown.png"
local sound = awdef.sound
if sound == nil then
-- Explicit check for nil because sound could be `false` to disable it
sound = {name="awards_got_generic", gain=0.25}
end
-- Do Notification
if awards.show_mode == "formspec" then
-- use a formspec to send it
minetest.show_formspec(name, "achievements:unlocked", "size[4,2]"..
"image_button_exit[0,0;4,2;"..background..";close1; ]"..
"image_button_exit[0.2,0.8;1,1;"..icon..";close2; ]"..
"label[1.1,1;"..title.."]"..
"label[0.3,0.1;"..custom_announce.."]")
elseif awards.show_mode == "chat" then
if sound then
-- Enforce sound delay to prevent sound spamming
local lastsound = data.lastsound
if lastsound == nil or os.difftime(os.time(), lastsound) >= 1 then
minetest.sound_play(sound, {to_player=name})
data.lastsound = os.time()
end
end
if awards.show_mode == "chat" then
local chat_announce
if awdef.secret == true then
chat_announce = S("Secret Achievement Unlocked: %s")
else
chat_announce = S("Achievement Unlocked: %s")
end
-- use the chat console to send it
minetest.chat_send_player(name, S("Achievement Unlocked:")..title)
minetest.chat_send_player(name, string.format(chat_announce, title))
if desc~="" then
minetest.chat_send_player(name, desc)
end
@ -226,18 +420,24 @@ function awards.unlock(name, award)
local one = player:hud_add({
hud_elem_type = "image",
name = "award_bg",
scale = {x = 1, y = 1},
scale = {x = 2, y = 1},
text = background,
position = {x = 0.5, y = 0},
offset = {x = 0, y = 138},
alignment = {x = 0, y = -1}
})
local hud_announce
if awdef.secret == true then
hud_announce = S("Secret Achievement Unlocked!")
else
hud_announce = S("Achievement Unlocked!")
end
local two = player:hud_add({
hud_elem_type = "text",
name = "award_au",
number = 0xFFFFFF,
scale = {x = 100, y = 20},
text = "Achievement Unlocked!",
text = hud_announce,
position = {x = 0.5, y = 0},
offset = {x = 0, y = 40},
alignment = {x = 0, y = -1}
@ -257,11 +457,11 @@ function awards.unlock(name, award)
name = "award_icon",
scale = {x = 4, y = 4},
text = icon,
position = {x = 0.5, y = 0},
position = {x = 0.4, y = 0},
offset = {x = -81.5, y = 126},
alignment = {x = 0, y = -1}
})
minetest.after(3, function()
minetest.after(4, function()
player:hud_remove(one)
player:hud_remove(two)
player:hud_remove(three)
@ -270,119 +470,6 @@ function awards.unlock(name, award)
end
end
-- Backwards compatibility
awards.give_achievement = awards.unlock
--[[minetest.register_chatcommand("gawd", {
params = "award name",
description = "gawd: give award to self",
func = function(name, param)
awards.unlock(name,param)
end
})]]--
function awards.getFormspec(name, to, sid)
local formspec = "size[11,5]"
local listofawards = awards._order_awards(name)
-- Sidebar
if sid then
local item = listofawards[sid+0]
local def = awards.def[item.name]
if def and def.secret and not item.got then
formspec = formspec .. "label[1,2.75;Secret Award]"..
"image[1,0;3,3;unknown.png]"
if def and def.description then
formspec = formspec .. "label[0,3.25;Unlock this award to find out what it is]"
end
else
local title = item.name
if def and def.title then
title = def.title
end
local status = ""
if item.got then
status = " (got)"
end
formspec = formspec .. "label[1,2.75;" .. title .. status .. "]"
if def and def.icon then
formspec = formspec .. "image[1,0;3,3;" .. def.icon .. "]"
end
if def and def.description then
formspec = formspec .. "label[0,3.25;"..def.description.."]"
end
end
end
-- Create list box
formspec = formspec .. "textlist[4.75,0;6,5;awards;"
local first = true
for _,award in pairs(listofawards) do
local def = awards.def[award.name]
if def then
if not first then
formspec = formspec .. ","
end
first = false
if def.secret and not award.got then
formspec = formspec .. "#ACACACSecret Award"
else
local title = award.name
if def and def.title then
title = def.title
end
if award.got then
formspec = formspec .. minetest.formspec_escape(title)
else
formspec = formspec .. "#ACACAC".. minetest.formspec_escape(title)
end
end
end
end
return formspec .. ";"..sid.."]"
end
function awards.show_to(name, to, sid, text)
if name == "" or name == nil then
name = to
end
if name == to and awards.player(to).disabled then
minetest.chat_send_player("You've disabled awards. Type /awards" ..
" enable to reenable")
return
end
if text then
if not awards.players[name] or not awards.players[name].unlocked then
minetest.chat_send_player(to, "You have not unlocked any awards")
return
end
minetest.chat_send_player(to, name.."'s awards:")
for _, str in pairs(awards.players[name].unlocked) do
local def = awards.def[str]
if def then
if def.title then
if def.description then
minetest.chat_send_player(to, def.title..": "..def.description)
else
minetest.chat_send_player(to, def.title)
end
else
minetest.chat_send_player(to, str)
end
end
end
else
if sid == nil or sid < 1 then
sid = 1
end
-- Show formspec to user
minetest.show_formspec(to,"awards:awards", awards.getFormspec(name, to, sid))
end
end
awards.showto = awards.show_to
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname ~= "awards:awards" then
return false
@ -401,12 +488,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
return true
end)
awards.init()
minetest.register_on_newplayer(function(player)
local playern = player:get_player_name()
awards.assertPlayer(playern)
end)
awards.load()
minetest.register_on_shutdown(function()
awards.save()

View File

@ -1,57 +0,0 @@
function awards.tbv(tb,value,default)
if not default then
default = {}
end
if not tb or type(tb) ~= "table" then
if not value then
value = "[NULL]"
end
minetest.log("error", "awards.tbv - table "..dump(value).." is null, or not a table! Dump: "..dump(tb))
return
end
if not value then
error("[ERROR] awards.tbv was not used correctly!\n"..
"Value: '"..dump(value).."'\n"..
"Dump:"..dump(tb))
return
end
if not tb[value] then
tb[value] = default
end
end
function awards.assertPlayer(playern)
awards.tbv(awards.players, playern)
awards.tbv(awards.players[playern], "name", playern)
awards.tbv(awards.players[playern], "unlocked")
awards.tbv(awards.players[playern], "place")
awards.tbv(awards.players[playern], "count")
awards.tbv(awards.players[playern], "craft")
awards.tbv(awards.players[playern], "deaths", 0)
awards.tbv(awards.players[playern], "joins", 0)
awards.tbv(awards.players[playern], "chats", 0)
end
function awards.player(name)
return awards.players[name]
end
function awards._order_awards(name)
local done = {}
local retval = {}
local player = awards.player(name)
if player and player.unlocked then
for _,got in pairs(player.unlocked) do
if awards.def[got] then
done[got] = true
table.insert(retval,{name=got,got=true})
end
end
end
for _,def in pairs(awards.def) do
if not done[def.name] then
table.insert(retval,{name=def.name,got=false})
end
end
return retval
end

907
awards.lua Normal file
View File

@ -0,0 +1,907 @@
local S = awards.gettext
-- Saint-Maclou
if minetest.get_modpath("moreblocks") then
awards.register_achievement("award_saint_maclou",{
title = S("Saint-Maclou"),
description = S("Place 20 coal checkers."),
icon = "awards_novicebuilder.png",
trigger = {
type = "place",
node = "moreblocks:coal_checker",
target = 20
}
})
-- Castorama
awards.register_achievement("award_castorama",{
title = S("Castorama"),
description = S("Place 20 iron checkers."),
icon = "awards_novicebuilder.png",
trigger = {
type = "place",
node = "moreblocks:iron_checker",
target = 20
}
})
-- Sam the Trapper
awards.register_achievement("award_sam_the_trapper",{
title = S("Sam the Trapper"),
description = S("Place 2 trap stones."),
icon = "awards_novicebuilder.png",
trigger = {
type = "place",
node = "moreblocks:trap_stone",
target = 2
}
})
end
-- This award can't be part of Unified Inventory, it would make a circular dependency
if minetest.get_modpath("unified_inventory") then
if minetest.get_all_craft_recipes("unified_inventory:bag_large") ~= nil then
awards.register_achievement("awards_ui_bags", {
title = S("Backpacker"),
description = S("Craft 4 large bags."),
icon = "awards_ui_bags.png",
trigger = {
type = "craft",
item = "unified_inventory:bag_large",
target = 4
}
})
end
end
if minetest.get_modpath("fire") then
awards.register_achievement("awards_pyro", {
title = S("Pyromaniac"),
description = S("Craft 8 times flint and steel."),
icon = "fire_flint_steel.png",
trigger = {
type = "craft",
item = "fire:flint_and_steel",
target = 8
}
})
if minetest.settings:get_bool("disable_fire") ~= true then
awards.register_achievement("awards_firefighter", {
title = S("Firefighter"),
description = S("Put out 1000 fires."),
icon = "awards_firefighter.png",
trigger = {
type = "dig",
node = "fire:basic_flame",
target = 1000
}
})
end
end
if minetest.get_modpath("default") then
-- Light it up
awards.register_achievement("award_lightitup",{
title = S("Light It Up"),
description = S("Place 100 torches."),
icon = "awards_novicebuilder.png^awards_level1.png",
trigger = {
type = "place",
node = "default:torch",
target = 100
}
})
-- Light ALL the things!
awards.register_achievement("award_well_lit",{
title = S("Well Lit"),
description = S("Place 1,000 torches."),
icon = "awards_novicebuilder.png^awards_level2.png",
trigger = {
type = "place",
node = "default:torch",
target = 1000
}
})
awards.register_achievement("award_meselamp",{
title = S("Really Well Lit"),
description = S("Craft 10 mese lamps."),
icon = "default_meselamp.png",
trigger = {
type = "craft",
item = "default:meselamp",
target = 10
}
})
awards.register_achievement("awards_stonebrick", {
title = S("Outpost"),
description = S("Craft 200 stone bricks."),
icon = "default_stone_brick.png^awards_level1.png",
trigger = {
type = "craft",
item = "default:stonebrick",
target = 200
}
})
awards.register_achievement("awards_stonebrick2", {
title = S("Watchtower"),
description = S("Craft 800 stone bricks."),
icon = "default_stone_brick.png^awards_level2.png",
trigger = {
type = "craft",
item = "default:stonebrick",
target = 800
}
})
awards.register_achievement("awards_stonebrick3", {
title = S("Fortress"),
description = S("Craft 3,200 stone bricks."),
icon = "default_stone_brick.png^awards_level3.png",
trigger = {
type = "craft",
item = "default:stonebrick",
target = 3200
}
})
awards.register_achievement("awards_desert_stonebrick", {
title = S("Desert Dweller"),
description = S("Craft 400 desert stone bricks."),
icon = "default_desert_stone_brick.png",
trigger = {
type = "craft",
item = "default:desert_stonebrick",
target = 400
}
})
awards.register_achievement("awards_desertstonebrick", {
title = S("Pharaoh"),
description = S("Craft 100 sandstone bricks."),
icon = "default_sandstone_brick.png",
trigger = {
type = "craft",
item = "default:sandstonebrick",
target = 100
}
})
awards.register_achievement("awards_bookshelf", {
title = S("Little Library"),
description = S("Craft 7 bookshelves."),
icon = "default_bookshelf.png",
trigger = {
type = "craft",
item = "default:bookshelf",
target = 7
}
})
awards.register_achievement("awards_obsidian", {
title = S("Lava and Water"),
description = S("Mine your first obsidian."),
icon = "default_obsidian.png^awards_level1.png",
background = "awards_bg_mining.png",
trigger = {
type = "dig",
node = "default:obsidian",
target = 1
}
})
-- Obsessed with Obsidian
awards.register_achievement("award_obsessed_with_obsidian",{
title = S("Obsessed with Obsidian"),
description = S("Mine 50 obsidian."),
icon = "default_obsidian.png^awards_level2.png",
background = "awards_bg_mining.png",
trigger = {
type = "dig",
node = "default:obsidian",
target = 50
}
})
-- Proof that player has found lava
awards.register_achievement("award_lavaminer",{
title = S("Lava Miner"),
description = S("Mine any block while being very close to lava."),
background = "awards_bg_mining.png",
icon = "default_lava.png",
})
awards.register_on_dig(function(player,data)
local pos = player:get_pos()
if pos and (minetest.find_node_near(pos, 1, "default:lava_source") or
minetest.find_node_near(pos, 1, "default:lava_flowing")) then
return "award_lavaminer"
end
return nil
end)
-- On the way
awards.register_achievement("award_on_the_way", {
title = S("On The Way"),
description = S("Place 100 rails."),
icon = "carts_rail_straight.png",
trigger = {
type = "place",
node = "default:rail",
target = 100
}
})
awards.register_achievement("award_lumberjack_firstday", {
title = S("First Day in the Woods"),
description = S("Dig 6 tree blocks."),
icon = "default_tree.png^awards_level1.png",
trigger = {
type = "dig",
node = "default:tree",
target = 6
}
})
-- Lumberjack
awards.register_achievement("award_lumberjack", {
title = S("Lumberjack"),
description = S("Dig 36 tree blocks."),
icon = "default_tree.png^awards_level2.png",
trigger = {
type = "dig",
node = "default:tree",
target = 36
}
})
-- Semi-pro Lumberjack
awards.register_achievement("award_lumberjack_semipro", {
title = S("Semi-pro Lumberjack"),
description = S("Dig 216 tree blocks."),
icon = "default_tree.png^awards_level3.png",
trigger = {
type = "dig",
node = "default:tree",
target = 216
}
})
-- Professional Lumberjack
awards.register_achievement("award_lumberjack_professional", {
title = S("Professional Lumberjack"),
description = S("Dig 1,296 tree blocks."),
icon = "default_tree.png^awards_level4.png",
trigger = {
type = "dig",
node = "default:tree",
target = 1296
}
})
-- Junglebaby
awards.register_achievement("award_junglebaby", {
title = S("Junglebaby"),
description = S("Dig 100 jungle tree blocks."),
icon = "default_jungletree.png^awards_level1.png",
trigger = {
type = "dig",
node = "default:jungletree",
target = 100
}
})
-- Jungleman
awards.register_achievement("award_jungleman", {
title = S("Jungleman"),
description = S("Dig 1,000 jungle tree blocks."),
icon = "default_jungletree.png^awards_level2.png",
trigger = {
type = "dig",
node = "default:jungletree",
target = 1000
}
})
-- Found some Mese!
awards.register_achievement("award_mesefind", {
title = S("First Mese Find"),
description = S("Mine your first mese ore."),
icon = "default_stone.png^default_mineral_mese.png",
background = "awards_bg_mining.png",
trigger = {
type = "dig",
node = "default:stone_with_mese",
target = 1
}
})
-- Mese Block
awards.register_achievement("award_meseblock", {
secret = true,
title = S("Mese Mastery"),
description = S("Mine a mese block."),
icon = "default_mese_block.png",
background = "awards_bg_mining.png",
trigger = {
type = "dig",
node = "default:mese",
target = 1
}
})
-- You're a copper
awards.register_achievement("award_youre_a_copper", {
title = S("Youre a copper"),
description = S("Dig 1,000 copper ores."),
icon = "default_stone.png^default_mineral_copper.png",
background = "awards_bg_mining.png",
trigger = {
type = "dig",
node = "default:stone_with_copper",
target = 1000
}
})
-- Found a Nyan cat!
awards.register_achievement("award_nyanfind", {
secret = true,
title = S("A Cat in a Pop-Tart?!"),
description = S("Mine a nyan cat."),
icon = "nyancat_front.png",
trigger = {
type = "dig",
node = "default:nyancat",
target = 1
}
})
-- Mini Miner
awards.register_achievement("award_mine2", {
title = S("Mini Miner"),
description = S("Dig 100 stone blocks."),
icon = "awards_miniminer.png^awards_level1.png",
background = "awards_bg_mining.png",
trigger = {
type = "dig",
node = "default:stone",
target = 100
}
})
-- Hardened Miner
awards.register_achievement("award_mine3", {
title = S("Hardened Miner"),
description = S("Dig 1,000 stone blocks."),
icon = "awards_miniminer.png^awards_level2.png",
background = "awards_bg_mining.png",
trigger = {
type = "dig",
node = "default:stone",
target = 1000
}
})
-- Master Miner
awards.register_achievement("award_mine4", {
title = S("Master Miner"),
description = S("Dig 10,000 stone blocks."),
icon = "awards_miniminer.png^awards_level3.png",
background = "awards_bg_mining.png",
trigger = {
type = "dig",
node = "default:stone",
target = 10000
}
})
-- Marchand de sable
awards.register_achievement("award_marchand_de_sable", {
title = S("Marchand De Sable"),
description = S("Dig 1,000 sand."),
icon = "default_sand.png",
background = "awards_bg_mining.png",
trigger = {
type = "dig",
node = "default:sand",
target = 1000
}
})
awards.register_achievement("awards_crafter_of_sticks", {
title = S("Crafter of Sticks"),
description = S("Craft 100 sticks."),
icon = "default_stick.png",
trigger = {
type = "craft",
item = "default:stick",
target = 100
}
})
awards.register_achievement("awards_junglegrass", {
title = S("Jungle Discoverer"),
description = S("Mine your first jungle grass."),
icon = "default_junglegrass.png",
trigger = {
type = "dig",
node = "default:junglegrass",
target = 1
}
})
awards.register_achievement("awards_grass", {
title = S("Grasslands Discoverer"),
description = S("Mine some grass."),
icon = "default_grass_3.png",
trigger = {
type = "dig",
node = "default:grass_1",
target = 1
}
})
awards.register_achievement("awards_dry_grass", {
title = S("Savannah Discoverer"),
description = S("Mine some dry grass."),
icon = "default_dry_grass_3.png",
trigger = {
type = "dig",
node = "default:dry_grass_3",
target = 1
}
})
awards.register_achievement("awards_cactus", {
title = S("Desert Discoverer"),
description = S("Mine your first cactus."),
icon = "default_cactus_side.png",
trigger = {
type = "dig",
node = "default:cactus",
target = 1
}
})
awards.register_achievement("awards_dry_shrub", {
title = S("Far Lands"),
description = S("Mine your first dry shrub."),
icon = "default_dry_shrub.png",
trigger = {
type = "dig",
node = "default:dry_shrub",
target = 1
}
})
awards.register_achievement("awards_ice", {
title = S("Glacier Discoverer"),
description = S("Mine your first ice."),
icon = "default_ice.png",
trigger = {
type = "dig",
node = "default:ice",
target = 1
}
})
-- Proof that player visited snowy lands
awards.register_achievement("awards_snowblock", {
title = S("Very Simple Snow Man"),
description = S("Place two snow blocks."),
icon = "default_snow.png",
trigger = {
type = "place",
node = "default:snowblock",
target = 2
}
})
awards.register_achievement("awards_gold_ore", {
title = S("First Gold Find"),
description = S("Mine your first gold ore."),
icon = "default_stone.png^default_mineral_gold.png^awards_level1.png",
background = "awards_bg_mining.png",
trigger = {
type = "dig",
node = "default:stone_with_gold",
target = 1
}
})
awards.register_achievement("awards_gold_rush", {
title = S("Gold Rush"),
description = S("Mine 45 gold ores."),
icon = "default_stone.png^default_mineral_gold.png^awards_level2.png",
background = "awards_bg_mining.png",
trigger = {
type = "dig",
node = "default:stone_with_gold",
target = 45
}
})
awards.register_achievement("awards_diamond_ore", {
title = S("Wow, I am Diamonds!"),
description = S("Mine your first diamond ore."),
icon = "default_stone.png^default_mineral_diamond.png^awards_level1.png",
trigger = {
type = "dig",
node = "default:stone_with_diamond",
target = 1
}
})
awards.register_achievement("awards_diamond_rush", {
title = S("Girl's Best Friend"),
description = S("Mine 18 diamond ores."),
icon = "default_stone.png^default_mineral_diamond.png^awards_level2.png",
background = "awards_bg_mining.png",
trigger = {
type = "dig",
node = "default:stone_with_diamond",
target = 18
}
})
awards.register_achievement("awards_diamondblock", {
title = S("Hardest Block on Earth"),
description = S("Craft a diamond block."),
icon = "default_diamond_block.png",
trigger = {
type = "craft",
item = "default:diamondblock",
target = 1
}
})
awards.register_achievement("awards_mossycobble", {
title = S("In the Dungeon"),
description = S("Mine a mossy cobblestone."),
icon = "default_mossycobble.png",
trigger = {
type = "dig",
node = "default:mossycobble",
target = 1
}
})
awards.register_achievement("award_furnace", {
title = S("Smelter"),
description = S("Craft 10 furnaces."),
icon = "default_furnace_front.png",
trigger = {
type = "craft",
item= "default:furnace",
target = 10
}
})
awards.register_achievement("award_chest", {
title = S("Treasurer"),
description = S("Craft 15 chests."),
icon = "default_chest_front.png",
trigger = {
type = "craft",
item= "default:chest",
target = 15
}
})
awards.register_achievement("award_chest2", {
title = S("Bankier"),
description = S("Craft 30 locked chests."),
icon = "default_chest_lock.png",
trigger = {
type = "craft",
item= "default:chest_locked",
target = 30
}
})
awards.register_achievement("award_brick", {
title = S("Bricker"),
description = S("Craft 200 brick blocks."),
icon = "default_brick.png",
trigger = {
type = "craft",
item= "default:brick",
target = 200
}
})
awards.register_achievement("award_obsidianbrick", {
title = S("House of Obsidian"),
description = S("Craft 100 obsidian bricks."),
icon = "default_obsidian_brick.png",
trigger = {
type = "craft",
item= "default:obsidianbrick",
target = 100
}
})
awards.register_achievement("award_placestone", {
title = S("Build a Cave"),
description = S("Place 100 stone."),
icon = "default_stone.png",
trigger = {
type = "place",
node = "default:stone",
target = 100
}
})
awards.register_achievement("award_woodladder", {
title = S("Long Ladder"),
description = S("Place 400 wooden ladders."),
icon = "default_ladder_wood.png",
trigger = {
type = "place",
node = "default:ladder_wood",
target = 400
}
})
awards.register_achievement("award_steelladder", {
title = S("Industrial Age"),
description = S("Place 40 steel ladders."),
icon = "default_ladder_steel.png",
trigger = {
type = "place",
node = "default:ladder_steel",
target = 40
}
})
awards.register_achievement("award_apples", {
title = S("Yummy!"),
description = S("Eat 80 apples."),
icon = "default_apple.png",
trigger = {
type = "eat",
item = "default:apple",
target = 80
}
})
end
if minetest.get_modpath("vessels") then
awards.register_achievement("award_vessels_shelf", {
title = S("Glasser"),
icon = "vessels_shelf.png",
description = S("Craft 14 vessels shelves."),
trigger = {
type = "craft",
item= "vessels:shelf",
target = 14
}
})
end
if minetest.get_modpath("farming") then
awards.register_achievement("awards_farmer", {
title = S("Farming Skills Acquired"),
description = S("Harvest a fully grown wheat plant."),
icon = "farming_wheat_8.png^awards_level1.png",
trigger = {
type = "dig",
node = "farming:wheat_8",
target = 1
}
})
awards.register_achievement("awards_farmer2", {
title = S("Field Worker"),
description = S("Harvest 25 fully grown wheat plants."),
icon = "farming_wheat_8.png^awards_level2.png",
trigger = {
type = "dig",
node = "farming:wheat_8",
target = 25
}
})
awards.register_achievement("awards_farmer3", {
title = S("Aspiring Farmer"),
description = S("Harvest 125 fully grown wheat plants."),
icon = "farming_wheat_8.png^awards_level3.png",
trigger = {
type = "dig",
node = "farming:wheat_8",
target = 125
}
})
awards.register_achievement("awards_farmer4", {
title = S("Wheat Magnate"),
description = S("Harvest 625 fully grown wheat plants."),
icon = "farming_wheat_8.png^awards_level4.png",
trigger = {
type = "dig",
node = "farming:wheat_8",
target = 625
}
})
awards.register_achievement("award_bread", {
title = S("Baker"),
description = S("Eat 10 loaves of bread."),
icon = "farming_bread.png",
trigger = {
type = "eat",
item = "farming:bread",
target = 10
}
})
end
if minetest.get_modpath("wool") and minetest.get_modpath("farming") then
awards.register_achievement("awards_wool", {
title = S("Wool Over Your Eyes"),
description = S("Craft 250 white wool."),
icon = "wool_white.png",
trigger = {
type = "craft",
item = "wool:white",
target = 250
}
})
end
if minetest.get_modpath("beds") then
awards.register_achievement("award_bed", {
title = S("Hotelier"),
description = S("Craft 15 fancy beds."),
icon = "beds_bed_fancy.png",
trigger = {
type = "craft",
item= "beds:fancy_bed_bottom",
target = 15
}
})
end
if minetest.get_modpath("stairs") then
awards.register_achievement("award_stairs_goldblock", {
title = S("Filthy Rich"),
description = S("Craft 24 gold block stairs."),
icon = "default_gold_block.png",
trigger = {
type = "craft",
item= "stairs:stair_goldblock",
target = 24
}
})
end
if minetest.get_modpath("dye") then
awards.register_achievement("awards_dye_red", {
title = S("Roses Are Red"),
description = S("Craft 400 red dyes."),
icon = "dye_red.png",
trigger = {
type = "craft",
item = "dye:red",
target = 400
}
})
awards.register_achievement("awards_dye_yellow", {
title = S("Dandelions are Yellow"),
description = S("Craft 400 yellow dyes."),
icon = "dye_yellow.png",
trigger = {
type = "craft",
item = "dye:yellow",
target = 400
}
})
awards.register_achievement("awards_dye_blue", {
title = S("Geraniums are Blue"),
description = S("Craft 400 blue dyes."),
icon = "dye_blue.png",
trigger = {
type = "craft",
item= "dye:blue",
target = 400
}
})
awards.register_achievement("awards_dye_white", {
title = S("White Color Stock"),
description = S("Craft 100 white dyes."),
icon = "dye_white.png",
trigger = {
type = "craft",
item= "dye:white",
target = 100
}
})
end
if minetest.get_modpath("flowers") then
awards.register_achievement("awards_brown_mushroom1", {
title = S("Tasty Mushrooms"),
description = S("Eat 3 brown mushrooms."),
icon = "flowers_mushroom_brown.png^awards_level1.png",
trigger = {
type = "eat",
item= "flowers:mushroom_brown",
target = 3,
}
})
awards.register_achievement("awards_brown_mushroom2", {
title = S("Mushroom Lover"),
description = S("Eat 33 brown mushrooms."),
icon = "flowers_mushroom_brown.png^awards_level2.png",
trigger = {
type = "eat",
item= "flowers:mushroom_brown",
target = 33,
}
})
awards.register_achievement("awards_brown_mushroom3", {
title = S("Underground Mushroom Farmer"),
description = S("Eat 333 brown mushrooms."),
icon = "flowers_mushroom_brown.png^awards_level3.png",
trigger = {
type = "eat",
item= "flowers:mushroom_brown",
target = 333,
}
})
end
-- This ensures the following code is executed after all items have been registered
minetest.after(0, function()
-- Check whether there is at least one node which can be built by the player
local building_is_possible = false
for _, def in pairs(minetest.registered_nodes) do
if (def.description and def.pointable ~= false and not def.groups.not_in_creative_inventory) then
building_is_possible = true
break
end
end
-- The following awards require at least one node which can be built
if not building_is_possible then
return
end
awards.register_achievement("awards_builder1", {
title = S("Builder"),
icon = "awards_house.png^awards_level1.png",
trigger = {
type = "place",
target = 1000,
},
})
awards.register_achievement("awards_builder2", {
title = S("Constructor"),
icon = "awards_house.png^awards_level2.png",
trigger = {
type = "place",
target = 5000,
},
})
awards.register_achievement("awards_builder3", {
title = S("Architect"),
icon = "awards_house.png^awards_level3.png",
trigger = {
type = "place",
target = 10000,
},
})
awards.register_achievement("awards_builder4", {
title = S("Master Architect"),
icon = "awards_house.png^awards_level4.png",
trigger = {
type = "place",
target = 25000,
},
})
end)

View File

@ -14,20 +14,22 @@
-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--
local S = awards.gettext
minetest.register_chatcommand("awards", {
params = "",
description = "awards: list awards",
params = S("[c|clear|disable|enable]"),
description = S("Show, clear, disable or enable your achievements"),
func = function(name, param)
if param == "clear" then
awards.clear_player(name)
minetest.chat_send_player(name, "All your awards and statistics " ..
" have been cleared. You can now start again.")
minetest.chat_send_player(name,
S("All your awards and statistics have been cleared. You can now start again."))
elseif param == "disable" then
awards.disable(name)
minetest.chat_send_player(name, "You have disabled awards. (only affects you)")
minetest.chat_send_player(name, S("You have disabled your achievements."))
elseif param == "enable" then
awards.enable(name)
minetest.chat_send_player(name, "You have enabled awards. (only affects you)")
minetest.chat_send_player(name, S("You have enabled your achievements."))
elseif param == "c" then
awards.show_to(name, name, nil, true)
else
@ -36,25 +38,15 @@ minetest.register_chatcommand("awards", {
end
})
minetest.register_chatcommand("cawards", {
params = "",
description = "awards: list awards in chat",
func = function(name, param)
awards.show_to(name, name, nil, true)
minetest.chat_send_player(name, "/cawards has been depreciated," ..
" use /awards c instead")
end
})
minetest.register_chatcommand("awd", {
params = "award name",
description = "awd: Details of awd gotten",
params = S("<achievement ID>"),
description = S("Show details of an achievement"),
func = function(name, param)
local def = awards.def[param]
local def = awards.registered_awards[param]
if def then
minetest.chat_send_player(name,def.title..": "..def.description)
minetest.chat_send_player(name, string.format(S("%s: %s"), def.title, def.description))
else
minetest.chat_send_player(name,"Award not found.")
minetest.chat_send_player(name, S("Achievement not found."))
end
end
})
@ -63,7 +55,8 @@ minetest.register_chatcommand("awpl", {
privs = {
server = true
},
description = "awpl: Get the statistics for the player given",
params = S("<name>"),
description = S("Get the achievements statistics for the given player or yourself"),
func = function(name, param)
if not param or param == "" then
param = name

View File

@ -1 +1,13 @@
intllib?
sfinv?
unified_inventory?
default?
stairs?
farming?
dye?
beds?
wool?
vessels?
moreblocks?
fire?
flowers?

View File

@ -1 +0,0 @@
Adds achievements to Minetest, and an API to register new ones.

199
gui.lua Normal file
View File

@ -0,0 +1,199 @@
local S = awards.gettext
local function order_awards(name)
local done = {}
local retval = {}
local player = awards.player(name)
if player and player.unlocked then
for _,got in pairs(player.unlocked) do
if awards.registered_awards[got] then
done[got] = true
table.insert(retval,{name=got,got=true})
end
end
end
for _,def in pairs(awards.registered_awards) do
if not done[def.name] then
table.insert(retval,{name=def.name,got=false})
end
end
return retval
end
function awards.get_formspec(name, to, sid)
local formspec = ""
local listofawards = order_awards(name)
local playerdata = awards.player(name)
if #listofawards == 0 then
formspec = formspec .. "label[3.9,1.5;"..minetest.formspec_escape(S("Error: No awards available.")).."]"
formspec = formspec .. "button_exit[4.2,2.3;3,1;close;"..minetest.formspec_escape(S("OK")).."]"
return formspec
end
-- Sidebar
if sid then
local item = listofawards[sid+0]
local def = awards.registered_awards[item.name]
if def and def.secret and not item.got then
formspec = formspec .. "label[1,2.75;"..minetest.formspec_escape(S("(Secret Award)")).."]"..
"image[1,0;3,3;awards_unknown.png]"
if def and def.description then
formspec = formspec .. "textarea[0.25,3.25;4.8,1.7;;"..minetest.formspec_escape(S("Unlock this award to find out what it is."))..";]"
end
else
local title = item.name
if def and def.title then
title = def.title
end
local status = "%s"
if item.got then
status = S("%s (got)")
end
formspec = formspec .. "textarea[0.5,2.7;4.8,1.45;;" ..
string.format(status, minetest.formspec_escape(title)) ..
";]"
if def and def.icon then
formspec = formspec .. "image[1,0;3,3;" .. def.icon .. "]"
end
local barwidth = 4.6
local perc = nil
local label = nil
if def.getProgress and playerdata then
local res = def:getProgress(playerdata)
perc = res.perc
label = res.label
end
if perc then
if perc > 1 then
perc = 1
end
formspec = formspec .. "background[0,4.80;" .. barwidth ..",0.25;awards_progress_gray.png;false]"
formspec = formspec .. "background[0,4.80;" .. (barwidth * perc) ..",0.25;awards_progress_green.png;false]"
if label then
formspec = formspec .. "label[1.75,4.63;" .. minetest.formspec_escape(label) .. "]"
end
end
if def and def.description then
formspec = formspec .. "textarea[0.25,3.75;4.8,1.7;;"..minetest.formspec_escape(def.description)..";]"
end
end
end
-- Create list box
formspec = formspec .. "textlist[4.75,0;6,5;awards;"
local first = true
for _,award in pairs(listofawards) do
local def = awards.registered_awards[award.name]
if def then
if not first then
formspec = formspec .. ","
end
first = false
if def.secret and not award.got then
formspec = formspec .. "#707070"..minetest.formspec_escape(S("(Secret Award)"))
else
local title = award.name
if def and def.title then
title = def.title
end
if award.got then
formspec = formspec .. minetest.formspec_escape(title)
else
formspec = formspec .. "#ACACAC".. minetest.formspec_escape(title)
end
end
end
end
return formspec .. ";"..sid.."]"
end
function awards.show_to(name, to, sid, text)
if name == "" or name == nil then
name = to
end
local data = awards.player(to)
if name == to and data.disabled then
minetest.chat_send_player(S("You've disabled awards. Type /awards enable to reenable."))
return
end
if text then
local listofawards = order_awards(name)
if #listofawards == 0 then
minetest.chat_send_player(to, S("Error: No awards available."))
return
elseif not data or not data.unlocked then
minetest.chat_send_player(to, S("You have not unlocked any awards."))
return
end
minetest.chat_send_player(to, string.format(S("%ss awards:"), name))
for _, str in pairs(data.unlocked) do
local def = awards.registered_awards[str]
if def then
if def.title then
if def.description then
minetest.chat_send_player(to, string.format(S("%s: %s"), def.title, def.description))
else
minetest.chat_send_player(to, def.title)
end
else
minetest.chat_send_player(to, str)
end
end
end
else
if sid == nil or sid < 1 then
sid = 1
end
local deco = ""
if minetest.global_exists("default") then
deco = default.gui_bg .. default.gui_bg_img
end
-- Show formspec to user
minetest.show_formspec(to,"awards:awards",
"size[11,5]" .. deco ..
awards.get_formspec(name, to, sid))
end
end
if minetest.get_modpath("sfinv") then
sfinv.register_page("awards:awards", {
title = S("Awards"),
on_enter = function(self, player, context)
context.awards_idx = 1
end,
get = function(self, player, context)
local name = player:get_player_name()
return sfinv.make_formspec(player, context,
awards.get_formspec(name, name, context.awards_idx or 1),
false, "size[11,5]")
end,
on_player_receive_fields = function(self, player, context, fields)
if fields.awards then
local event = minetest.explode_textlist_event(fields.awards)
if event.type == "CHG" then
context.awards_idx = event.index
sfinv.set_player_inventory_formspec(player, context)
end
end
end
})
end
if minetest.get_modpath("unified_inventory") ~= nil then
unified_inventory.register_button("awards", {
type = "image",
image = "awards_ui_icon.png",
tooltip = S("Awards"),
action = function(player)
local name = player:get_player_name()
awards.show_to(name, name, nil, false)
end,
})
end

409
init.lua
View File

@ -14,397 +14,30 @@
-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--
-- The global award namespace
awards = {
show_mode = "hud",
registered_triggers = {},
}
local S
if (intllib) then
dofile(minetest.get_modpath("intllib").."/intllib.lua")
S = intllib.Getter(minetest.get_current_modname())
else
S = function ( s ) return s end
end
-- Internationalization support.
awards.gettext, awards.ngettext = dofile(minetest.get_modpath("awards").."/intllib.lua")
-- Load files
dofile(minetest.get_modpath("awards").."/api.lua")
dofile(minetest.get_modpath("awards").."/chat_commands.lua")
dofile(minetest.get_modpath("awards").."/gui.lua")
dofile(minetest.get_modpath("awards").."/triggers.lua")
awards.set_intllib(S)
dofile(minetest.get_modpath("awards").."/awards.lua")
-- Light it up
awards.register_achievement("award_lightitup",{
title = S("Light It Up"),
description = S("Place 100 torches."),
icon = "novicebuilder.png",
trigger = {
type = "place",
node = "default:torch",
target = 100
}
})
-- Light ALL the things!
awards.register_achievement("award_well_lit",{
title = S("Well Lit"),
description = S("Place 1,000 torches."),
icon = "novicebuilder.png",
trigger = {
type = "place",
node = "default:torch",
target = 1000
}
})
-- Saint-Maclou
if minetest.get_modpath("moreblocks") then
awards.register_achievement("award_saint_maclou",{
title = S("Saint-Maclou"),
description = S("Place 20 coal checkers."),
icon = "novicebuilder.png",
trigger = {
type = "place",
node = "moreblocks:coal_checker",
target = 20
}
})
-- Castorama
awards.register_achievement("award_castorama",{
title = S("Castorama"),
description = S("Place 20 iron checkers."),
icon = "novicebuilder.png",
trigger = {
type = "place",
node = "moreblocks:iron_checker",
target = 20
}
})
-- Sam the Trapper
awards.register_achievement("award_sam_the_trapper",{
title = S("Sam the Trapper"),
description = S("Place 2 trap stones."),
icon = "novicebuilder.png",
trigger = {
type = "place",
node = "moreblocks:trap_stone",
target = 2
}
})
end
-- Obsessed with Obsidian
awards.register_achievement("award_obsessed_with_obsidian",{
title = S("Obsessed with Obsidian"),
description = S("Mine 50 obsidian."),
icon = "miniminer.png",
background = "bg_mining.png",
trigger = {
type = "dig",
node = "default:obsidian",
target = 50
}
})
-- On the way
awards.register_achievement("award_on_the_way", {
title = S("On The Way"),
description = S("Place 100 rails."),
icon = "novicebuilder.png",
trigger = {
type = "place",
node = "default:rail",
target = 100
}
})
-- Lumberjack
awards.register_achievement("award_lumberjack", {
title = S("Lumberjack"),
description = S("Dig 100 tree blocks."),
icon = "default_tree.png",
trigger = {
type = "dig",
node = "default:tree",
target = 100
}
})
-- Semi-pro Lumberjack
awards.register_achievement("award_lumberjack_semipro", {
title = S("Semi-pro Lumberjack"),
description = S("Dig 1,000 tree blocks."),
icon = "default_tree.png",
trigger = {
type = "dig",
node = "default:tree",
target = 1000
}
})
-- Professional Lumberjack
awards.register_achievement("award_lumberjack_professional", {
title = S("Professional Lumberjack"),
description = S("Dig 10,000 tree blocks."),
icon = "default_tree.png",
trigger = {
type = "dig",
node = "default:tree",
target = 10000
}
})
-- L33T Lumberjack
awards.register_achievement("award_lumberjack_leet", {
title = S("L33T Lumberjack"),
description = S("Dig 100,000 tree blocks."),
icon = "default_tree.png",
trigger = {
type = "dig",
node = "default:tree",
target = 100000
}
})
-- Junglebaby
awards.register_achievement("award_junglebaby", {
title = S("Junglebaby"),
description = S("Dig 100 jungle tree blocks."),
icon = "default_jungletree.png",
trigger = {
type = "dig",
node = "default:jungletree",
target = 100
}
})
-- Jungleman
awards.register_achievement("award_jungleman", {
title = S("Jungleman"),
description = S("Dig 1,000 jungle tree blocks."),
icon = "default_jungletree.png",
trigger = {
type = "dig",
node = "default:jungletree",
target = 1000
}
})
-- Found some Mese!
awards.register_achievement("award_mesefind", {
title = S("First Mese Find"),
description = S("Find some Mese."),
icon = "default_mese_block.png",
background = "bg_mining.png",
trigger = {
type = "dig",
node = "default:stone_with_mese",
target = 1
}
})
-- You're a copper
awards.register_achievement("award_youre_a_copper", {
title = S("You're a copper"),
description = S("Dig 1,000 copper ores."),
icon = "miniminer.png",
background = "bg_mining.png",
trigger = {
type = "dig",
node = "default:stone_with_copper",
target = 1000
}
})
-- Found a Nyan cat!
awards.register_achievement("award_nyanfind", {
title = S("OMG, Nyan Cat!"),
description = S("Find a nyan cat."),
icon = "nyancat_front.png",
trigger = {
type = "dig",
node = "default:nyancat",
target = 1
}
})
-- Mini Miner
awards.register_achievement("award_mine2", {
title = S("Mini Miner"),
description = S("Dig 100 stone blocks."),
icon = "miniminer.png",
background = "bg_mining.png",
trigger = {
type = "dig",
node = "default:stone",
target = 100
}
})
-- Hardened Miner
awards.register_achievement("award_mine3", {
title = S("Hardened Miner"),
description = S("Dig 1,000 stone blocks"),
icon = "miniminer.png",
background = "bg_mining.png",
trigger = {
type = "dig",
node = "default:stone",
target = 1000
}
})
-- Master Miner
awards.register_achievement("award_mine4", {
title = S("Master Miner"),
description = S("Dig 10,000 stone blocks."),
icon = "miniminer.png",
background = "bg_mining.png",
trigger = {
type = "dig",
node = "default:stone",
target = 10000
}
})
-- Marchand de sable
awards.register_achievement("award_marchand_de_sable", {
title = S("Marchand De Sable"),
description = S("Dig 1,000 sand."),
background = "bg_mining.png",
trigger = {
type = "dig",
node = "default:sand",
target = 1000
}
})
awards.register_achievement("awards_crafter_of_sticks", {
title = S("Crafter of Sticks"),
description = S("Create 100 Sticks"),
trigger = {
type = "craft",
item = "default:stick",
target = 100
}
})
-- Join
awards.register_achievement("award_join2", {
title = S("Frequent Visitor"),
description = S("Connect to the server 50 times."),
trigger = {
type = "join",
target = 50
},
secret = true
})
-- Dying Spree
awards.register_achievement("award_dying_spree", {
title = S("Dying Spree"),
description = S("Die 5 times."),
trigger = {
type = "death",
target = 5
}
})
-- Bot-like
awards.register_achievement("award_bot_like", {
title = S("Bot-like"),
description = S("Die 10 times."),
trigger = {
type = "death",
target = 10
}
})
-- You Suck!
awards.register_achievement("award_you_suck", {
title = S("You Suck!"),
description = S("Die 100 times."),
trigger = {
type = "death",
target = 100
},
secret = true
})
-- Burned to death
awards.register_achievement("award_burn", {
title = S("You're a witch!"),
description = S("Burn to death in a fire.")
})
awards.register_onDeath(function(player,data)
local pos = player:getpos()
if pos and minetest.find_node_near(pos, 2, "fire:basic_flame") ~= nil then
return "award_burn"
end
return nil
end)
-- Died in flowing lava
awards.register_achievement("award_in_the_flow", {
title = S("In the Flow"),
description = S("Die in flowing lava.")
})
awards.register_onDeath(function(player,data)
local pos = player:getpos()
if pos and minetest.find_node_near(pos, 2, "default:lava_flowing") ~= nil then
return "award_in_the_flow"
end
return nil
end)
-- Die near diamond ore
awards.register_achievement("award_this_is_sad", {
title = S("This is Sad"),
description = S("Die near diamond ore.")
})
awards.register_on_death(function(player,data)
local pos = player:getpos()
if pos and minetest.find_node_near(pos, 5, "default:stone_with_diamond") ~= nil then
return "award_this_is_sad"
end
return nil
end)
-- Die near diamond ore
awards.register_achievement("award_the_stack", {
title = S("The Stack"),
description = S("Die near bones.")
})
awards.register_on_death(function(player,data)
local pos = player:getpos()
if pos and minetest.find_node_near(pos, 5, "bones:bones") ~= nil then
return "award_the_stack"
end
return nil
end)
-- Die near diamond ore
awards.register_achievement("award_deep_down", {
title = S("Deep Down"),
description = S("Die below -10000"),
secret = true
})
awards.register_on_death(function(player,data)
local pos = player:getpos()
if pos and pos.y < -10000 then
return "award_deep_down"
end
return nil
end)
-- Die near diamond ore
awards.register_achievement("award_no_screen", {
title = S("In space, no one can hear you scream"),
description = S("Die above 10000"),
secret = true
})
awards.register_on_death(function(player,data)
local pos = player:getpos()
if pos and pos.y > 10000 then
return "award_no_screen"
end
return nil
end)
-- Backwards compatibility
awards.give_achievement = awards.unlock
awards.getFormspec = awards.get_formspec
awards.showto = awards.show_to
awards.register_onDig = awards.register_on_dig
awards.register_onPlace = awards.register_on_place
awards.register_onDeath = awards.register_on_death
awards.register_onChat = awards.register_on_chat
awards.register_onJoin = awards.register_on_join
awards.register_onCraft = awards.register_on_craft
awards.def = awards.registered_awards

45
intllib.lua Normal file
View 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

824
locale/de.po Normal file
View File

@ -0,0 +1,824 @@
# German translations for PACKAGE package.
# Copyright (C) 2017 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Wuzzy2, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-21 05:35-0300\n"
"PO-Revision-Date: 2017-02-21 04:19-0300\n"
"Last-Translator: Wuzzy2\n"
"Language-Team: German\n"
"Language: de\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"
#: api.lua
msgid "Secret Achievement Unlocked:"
msgstr "Geheime Auszeichnung erhalten:"
#: api.lua
msgid "Achievement Unlocked:"
msgstr "Auszeichnung erhalten:"
#: api.lua
#, lua-format
msgid "Secret Achievement Unlocked: %s"
msgstr "Geheime Auszeichnung erhalten: %s"
#: api.lua
#, lua-format
msgid "Achievement Unlocked: %s"
msgstr "Auszeichnung erhalten: %s"
#: api.lua
msgid "Secret Achievement Unlocked!"
msgstr "Geheime Auszeichnung erhalten!"
#: api.lua
msgid "Achievement Unlocked!"
msgstr "Auszeichnung erhalten:"
#: api.lua
msgid "Error: No awards available."
msgstr "Fehler: Keine Auszeichnungen vorhanden."
#: api.lua
msgid "OK"
msgstr "OK"
#: api.lua
msgid "(Secret Award)"
msgstr "(Geheime Auszeichnung)"
#: api.lua
msgid "Unlock this award to find out what it is."
msgstr "Verdienen Sie sich diese Auszeichnung, um herauszufinden, was sie ist."
#: api.lua
#, lua-format
msgid "%s (got)"
msgstr "%s (erhalten)"
#: api.lua
msgid "You've disabled awards. Type /awards enable to reenable."
msgstr ""
"Sie haben die Auszeichnungen deaktiviert. Geben Sie »/awards enable« ein, um "
"sie wieder zu aktivieren."
#: api.lua
msgid "You have not unlocked any awards."
msgstr "Sie haben noch keine Auszeichnungen."
#: api.lua
#, lua-format
msgid "%ss awards:"
msgstr "%ss Auszeichnungen:"
#: api.lua chat_commands.lua
#, lua-format
msgid "%s: %s"
msgstr "%s: %s"
#: sfinv.lua unified_inventory.lua
msgid "Awards"
msgstr "Auszeichnungen"
#: triggers.lua
msgid "@1/@2 dug"
msgstr "@1/@2 abgebaut"
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Mine: @2"
msgid_plural "Mine: @1×@2"
msgstr[0] "Bauen Sie einen Block ab: @2"
msgstr[1] "Bauen Sie Blöcke ab: @1×@2"
#: triggers.lua
msgid "Mine @1 block."
msgid_plural "Mine @1 blocks."
msgstr[0] ""
msgstr[1] ""
#: triggers.lua
msgid "@1/@2 placed"
msgstr "@1/@2 platziert"
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Place: @2"
msgid_plural "Place: @1×@2"
msgstr[0] "Platzieren Sie einen Block: @2"
msgstr[1] "Platzieren Sie Blöcke: @1×@2"
#: triggers.lua
msgid "Place a block."
msgid_plural "Place @1 blocks."
msgstr[0] ""
msgstr[1] ""
#: triggers.lua
msgid "@1/@2 eaten"
msgstr "@1/@2 gegessen"
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Eat: @2"
msgid_plural "Eat: @1×@2"
msgstr[0] "Essen Sie: @2"
msgstr[1] "Essen Sie: @1×@2"
#: triggers.lua
msgid "Eat an item."
msgid_plural "Eat @1 items."
msgstr[0] ""
msgstr[1] ""
#: triggers.lua
msgid "@1/@2 deaths"
msgstr "@1/@2 Tode"
#: triggers.lua
msgid "Die."
msgid_plural "Die @1 times."
msgstr[0] "Sterben Sie."
msgstr[1] "Sterben Sie @1 mal."
#: triggers.lua
msgid "@1/@2 chat messages"
msgstr ""
#: triggers.lua
msgid "Write something in chat."
msgid_plural "Write @1 chat messages."
msgstr[0] ""
msgstr[1] ""
#: triggers.lua
msgid "@1/@2 game joins"
msgstr "@1/@2 Spielen beigetreten"
#: triggers.lua
msgid "Join the game."
msgid_plural "Join the game @1 times."
msgstr[0] "Treten Sie dem Spiel bei."
msgstr[1] "Treten Sie dem Spiel @1 mal bei."
#: triggers.lua
msgid "@1/@2 crafted"
msgstr "@1/@2 gefertigt"
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Craft: @2"
msgid_plural "Craft: @1×@2"
msgstr[0] "Fertigen Sie an: @2"
msgstr[1] "Fertigen Sie an: @1×@2"
#: triggers.lua
msgid "Craft an item."
msgid_plural "Craft @1 items."
msgstr[0] ""
msgstr[1] ""
#: init.lua
msgid "Saint-Maclou"
msgstr "Saint-Maclou"
#: init.lua
msgid "Place 20 coal checkers."
msgstr "Platzieren Sie 20 Kohlenschachbrettmuster."
#: init.lua
msgid "Castorama"
msgstr "Gießmeister"
#: init.lua
msgid "Place 20 iron checkers."
msgstr "Platzieren Sie 20 Eisenschachbrettmuster."
#: init.lua
msgid "Sam the Trapper"
msgstr "Sam der Fallensteller"
#: init.lua
msgid "Place 2 trap stones."
msgstr "Platzieren Sie 2 Fallensteine."
#: init.lua
msgid "Backpacker"
msgstr "Rucksacktourist"
#: init.lua
msgid "Craft 4 large bags."
msgstr "Fertigen Sie 4 große Taschen."
#: init.lua
msgid "Pyromaniac"
msgstr "Pyromane"
#: init.lua
msgid "Craft 8 times flint and steel."
msgstr "Fertigen Sie 8 mal einen Feuerstein und Stahl an."
#: init.lua
msgid "Firefighter"
msgstr "Feuerwehr"
#: init.lua
msgid "Put out 1000 fires."
msgstr "Löschen Sie 1000 Flammen."
#: init.lua
msgid "Light It Up"
msgstr "Licht an!"
#: init.lua
msgid "Place 100 torches."
msgstr "Platzieren Sie 100 Fackeln."
#: init.lua
msgid "Well Lit"
msgstr "Gut ausgeleuchtet"
#: init.lua
msgid "Place 1,000 torches."
msgstr "Platzieren Sie 1000 Fackeln."
#: init.lua
msgid "Really Well Lit"
msgstr "Sehr gute Beleuchtung"
#: init.lua
msgid "Craft 10 mese lamps."
msgstr "Fertigen Sie 10 Meselampen."
#: init.lua
msgid "Outpost"
msgstr "Außenposten"
#: init.lua
msgid "Craft 200 stone bricks."
msgstr "Fertigen Sie 200 Steinziegel."
#: init.lua
msgid "Watchtower"
msgstr "Wachturm"
#: init.lua
msgid "Craft 800 stone bricks."
msgstr "Fertigen Sie 800 Steinziegel an."
#: init.lua
msgid "Fortress"
msgstr "Burg"
#: init.lua
msgid "Craft 3,200 stone bricks."
msgstr "Fertigen Sie 3200 Steinziegel."
#: init.lua
msgid "Desert Dweller"
msgstr "Wüstenbewohner"
#: init.lua
msgid "Craft 400 desert stone bricks."
msgstr "Fertigen Sie 400 Wüstensteinziegel."
#: init.lua
msgid "Pharaoh"
msgstr "Pharao"
#: init.lua
msgid "Craft 100 sandstone bricks."
msgstr "Fertigen Sie 100 Sandsteinziegel."
#: init.lua
msgid "Little Library"
msgstr "Kleine Bücherei"
#: init.lua
msgid "Craft 7 bookshelves."
msgstr "Fertigen Sie 7 Bücherregale."
#: init.lua
msgid "Lava and Water"
msgstr "Lava und Wasser"
#: init.lua
msgid "Mine your first obsidian."
msgstr "Bauen Sie Ihr erstes Obsidian ab."
#: init.lua
msgid "Obsessed with Obsidian"
msgstr "Von Obsidian besessen"
#: init.lua
msgid "Mine 50 obsidian."
msgstr "Bauen Sie 50 Obsidian ab."
#: init.lua
msgid "Lava Miner"
msgstr "Lavagräber"
#: init.lua
msgid "Mine any block while being very close to lava."
msgstr ""
"Bauen Sie einen beliebigen Block ab, während Sie sehr nahe an der Lava "
"stehen."
#: init.lua
msgid "On The Way"
msgstr "Auf dem Weg"
#: init.lua
msgid "Place 100 rails."
msgstr "Platzieren Sie 100 Gleise."
#: init.lua
msgid "First Day in the Woods"
msgstr "Erster Tag im Wald"
#: init.lua
msgid "Dig 6 tree blocks."
msgstr "Bauen Sie 6 Baumblöcke ab."
#: init.lua
msgid "Lumberjack"
msgstr "Holzfäller"
#: init.lua
msgid "Dig 36 tree blocks."
msgstr "Bauen Sie 36 Baumblöcke ab."
#: init.lua
msgid "Semi-pro Lumberjack"
msgstr "Fortgeschrittener Holzfäller"
#: init.lua
msgid "Dig 216 tree blocks."
msgstr "Bauen Sie 216 Baumblöcke ab."
#: init.lua
msgid "Professional Lumberjack"
msgstr "Profiholzfäller"
#: init.lua
msgid "Dig 1,296 tree blocks."
msgstr "Bauen Sie 1296 Baumblöcke ab."
#: init.lua
msgid "Junglebaby"
msgstr "Dschungelbaby"
#: init.lua
msgid "Dig 100 jungle tree blocks."
msgstr "Bauen Sie 100 Dschungelbaumblöcke ab."
#: init.lua
msgid "Jungleman"
msgstr "Dschungelmann"
#: init.lua
msgid "Dig 1,000 jungle tree blocks."
msgstr "Bauen Sie 1000 Dschungelbaumblöcke ab."
#: init.lua
msgid "First Mese Find"
msgstr "Erster Mesefund"
#: init.lua
msgid "Mine your first mese ore."
msgstr "Bauen Sie Ihr erstes Meseerz ab."
#: init.lua
msgid "Mese Mastery"
msgstr "Mesemeister"
#: init.lua
msgid "Mine a mese block."
msgstr "Bauen Sie einen Meseblock ab."
#: init.lua
msgid "Youre a copper"
msgstr "Du Kupfer!"
#: init.lua
msgid "Dig 1,000 copper ores."
msgstr "Bauen Sie 1000 Kupfererze ab."
#: init.lua
msgid "A Cat in a Pop-Tart?!"
msgstr "Eine Katze im Pop-Tart?!"
#: init.lua
msgid "Mine a nyan cat."
msgstr "Bauen Sie eine Nyan Cat ab."
#: init.lua
msgid "Mini Miner"
msgstr "Berganfänger"
#: init.lua
msgid "Dig 100 stone blocks."
msgstr "Bauen Sie 100 Steinblöcke ab."
#: init.lua
msgid "Hardened Miner"
msgstr "Abhehärteter Bergarbeiter"
#: init.lua
msgid "Dig 1,000 stone blocks."
msgstr "Bauen Sie 1000 Steine ab."
#: init.lua
msgid "Master Miner"
msgstr "Profibergarbeiter"
#: init.lua
msgid "Dig 10,000 stone blocks."
msgstr "Bauen Sie 10000 Steine ab."
#: init.lua
msgid "Marchand De Sable"
msgstr ""
#: init.lua
msgid "Dig 1,000 sand."
msgstr "Bauen Sie 1000 Sand ab."
#: init.lua
msgid "Crafter of Sticks"
msgstr "Stockmacher"
#: init.lua
msgid "Craft 100 sticks."
msgstr "Fertigen Sie 100 Stöcke."
#: init.lua
msgid "Jungle Discoverer"
msgstr "Dschungelerkunder"
#: init.lua
msgid "Mine your first jungle grass."
msgstr "Bauen Sie Ihr erstes Dschungelgras ab."
#: init.lua
msgid "Grasslands Discoverer"
msgstr "Prärieerkunder"
#: init.lua
msgid "Mine some grass."
msgstr "Bauen Sie etwas Gras ab."
#: init.lua
msgid "Savannah Discoverer"
msgstr "Savannenerkunder"
#: init.lua
msgid "Mine some dry grass."
msgstr "Bauen Sie etwas trockenes Gras ab."
#: init.lua
msgid "Desert Discoverer"
msgstr "Wüstenerkunder"
#: init.lua
msgid "Mine your first cactus."
msgstr "Bauen Sie Ihren ersten Kaktus ab."
#: init.lua
msgid "Far Lands"
msgstr "Ferne Lande"
#: init.lua
msgid "Mine your first dry shrub."
msgstr "Bauen Sie Ihren ersten vertrockneten Strauch ab."
#: init.lua
msgid "Glacier Discoverer"
msgstr "Gletschererkunder"
#: init.lua
msgid "Mine your first ice."
msgstr "Bauen Sie Ihr erstes Eis ab."
#: init.lua
msgid "Very Simple Snow Man"
msgstr "Sehr simpler Schneemann"
#: init.lua
msgid "Place two snow blocks."
msgstr "Platzieren Sie zwei Schneeblöcke."
#: init.lua
msgid "First Gold Find"
msgstr "Erster Goldfund"
#: init.lua
msgid "Mine your first gold ore."
msgstr "Bauen Sie Ihr erstes Golderz ab."
#: init.lua
msgid "Gold Rush"
msgstr "Goldrausch"
#: init.lua
msgid "Mine 45 gold ores."
msgstr "Bauen Sie 18 Diamanterze ab."
#: init.lua
msgid "Wow, I am Diamonds!"
msgstr "Wow, ich bin Diamanten!"
#: init.lua
msgid "Mine your first diamond ore."
msgstr "Bauen Sie Ihr erstes Diamanterz ab."
#: init.lua
msgid "Girl's Best Friend"
msgstr "Bester Freund der Mädchen"
#: init.lua
msgid "Mine 18 diamond ores."
msgstr "Bauen Sie 18 Diamanterze ab."
#: init.lua
msgid "Hardest Block on Earth"
msgstr "Härtester Block der Welt"
#: init.lua
msgid "Craft a diamond block."
msgstr "Fertigen Sie einen Diamantblock an."
#: init.lua
msgid "In the Dungeon"
msgstr "Im Verlies"
#: init.lua
msgid "Mine a mossy cobblestone."
msgstr "Bauen Sie ein bemoostes Kopfsteinpflaster ab."
#: init.lua
msgid "Smelter"
msgstr "Schmelzer"
#: init.lua
msgid "Craft 10 furnaces."
msgstr "Fertigen Sie 10 Öfen."
#: init.lua
msgid "Treasurer"
msgstr "Schatzmeister"
#: init.lua
msgid "Craft 15 chests."
msgstr "Fertigen Sie 15 Truhen."
#: init.lua
msgid "Bankier"
msgstr "Bankier"
#: init.lua
msgid "Craft 30 locked chests."
msgstr "Fertigen Sie 30 abgeschlossene Truhen."
#: init.lua
msgid "Bricker"
msgstr "Ziegler"
#: init.lua
msgid "Craft 200 brick blocks."
msgstr "Fertigen Sie 200 Ziegelblöcke."
#: init.lua
msgid "House of Obsidian"
msgstr "Haus aus Obsidian"
#: init.lua
msgid "Craft 100 obsidian bricks."
msgstr "Fertigen Sie 100 Obsidianziegel."
#: init.lua
msgid "Build a Cave"
msgstr "Höhlenbauer"
#: init.lua
msgid "Place 100 stone."
msgstr "Platzieren Sie 100 Steine."
#: init.lua
msgid "Long Ladder"
msgstr "Lange Leiter"
#: init.lua
msgid "Place 400 wooden ladders."
msgstr "Platzieren Sie 400 Holzleitern."
#: init.lua
msgid "Industrial Age"
msgstr "Industriezeitalter"
#: init.lua
msgid "Place 40 steel ladders."
msgstr "Platzieren Sie 40 Stahlleitern."
#: init.lua
msgid "Yummy!"
msgstr "Lecker!"
#: init.lua
msgid "Eat 80 apples."
msgstr "Essen Sie 80 Äpfel."
#: init.lua
msgid "Glasser"
msgstr "Glasmacher"
#: init.lua
msgid "Craft 14 vessels shelves."
msgstr "Fertigen Sie 14 Gefäßregale."
#: init.lua
msgid "Farming Skills Acquired"
msgstr "Landwirtschaft erlernt"
#: init.lua
msgid "Harvest a fully grown wheat plant."
msgstr "Ernten Sie eine voll ausgewachsene Getreidepflanze."
#: init.lua
msgid "Field Worker"
msgstr "Feldarbeiter"
#: init.lua
msgid "Harvest 25 fully grown wheat plants."
msgstr "Ernten Sie 25 voll ausgewachsene Getreidepflanzen."
#: init.lua
msgid "Aspiring Farmer"
msgstr "Aufstrebender Bauer"
#: init.lua
msgid "Harvest 125 fully grown wheat plants."
msgstr "Ernten Sie 125 voll ausgewachsene Getreidepflanzen."
#: init.lua
msgid "Wheat Magnate"
msgstr "Getreidemagnat"
#: init.lua
msgid "Harvest 625 fully grown wheat plants."
msgstr "Ernten Sie 625 voll ausgewachsene Getreidepflanzen."
#: init.lua
msgid "Baker"
msgstr "Bäcker"
#: init.lua
msgid "Eat 10 loaves of bread."
msgstr "Essen Sie 10 Brote."
#: init.lua
msgid "Wool Over Your Eyes"
msgstr "Wollige Augen"
#: init.lua
msgid "Craft 250 white wool."
msgstr "Fertigen Sie 250 weiße Wolle."
#: init.lua
msgid "Hotelier"
msgstr "Hotelier"
#: init.lua
msgid "Craft 15 fancy beds."
msgstr "Fertigen Sie 15 schicke Betten."
#: init.lua
msgid "Filthy Rich"
msgstr "Stinkreich"
#: init.lua
msgid "Craft 24 gold block stairs."
msgstr "Fertigen Sie 24 Goldblockstufen."
#: init.lua
msgid "Roses Are Red"
msgstr "Rosen sind rot"
#: init.lua
msgid "Craft 400 red dyes."
msgstr "Fertigen Sie 400 rote Farbstoffe."
#: init.lua
msgid "Dandelions are Yellow"
msgstr "Löwenzahn ist gelb"
#: init.lua
msgid "Craft 400 yellow dyes."
msgstr "Fertigen Sie 400 gelbe Farbstoffe."
#: init.lua
msgid "Geraniums are Blue"
msgstr "Geranien sind blau"
#: init.lua
msgid "Craft 400 blue dyes."
msgstr "Fertigen Sie 400 blaue Farbstoffe."
#: init.lua
msgid "White Color Stock"
msgstr "Weißer Farbstoffvorrat"
#: init.lua
msgid "Craft 100 white dyes."
msgstr "Fertigen Sie 100 weiße Farbstoffe."
#: init.lua
msgid "Tasty Mushrooms"
msgstr "Leckere Pilze"
#: init.lua
msgid "Eat 3 brown mushrooms."
msgstr "Essen Sie 3 braune Pilze."
#: init.lua
msgid "Mushroom Lover"
msgstr "Pilzfreund"
#: init.lua
msgid "Eat 33 brown mushrooms."
msgstr "Essen Sie 33 braune Pilze."
#: init.lua
msgid "Underground Mushroom Farmer"
msgstr "Unterirdischer Pilzbauer"
#: init.lua
msgid "Eat 333 brown mushrooms."
msgstr "Essen Sie 333 braune Pilze."
#: init.lua
msgid "Builder"
msgstr "Bauarbeiter"
#: init.lua
msgid "Constructor"
msgstr "Konstrukteur"
#: init.lua
msgid "Architect"
msgstr "Architekt"
#: init.lua
msgid "Master Architect"
msgstr "Meisterarchitekt"
#: chat_commands.lua
msgid "[c|clear|disable|enable]"
msgstr "[c|clear|disable|enable]"
#: chat_commands.lua
msgid "Show, clear, disable or enable your achievements"
msgstr "Zeigen, löschen, deaktivieren oder aktivieren Sie Ihre Auszeichnungen"
#: chat_commands.lua
msgid ""
"All your awards and statistics have been cleared. You can now start again."
msgstr ""
"All Ihre Auszeichnugen und Statistiken wurden zurückgesetzt. Sie können nun "
"von vorne anfangen."
#: chat_commands.lua
msgid "You have disabled your achievements."
msgstr "Sie haben Ihre Auszeichnungen deaktiviert."
#: chat_commands.lua
msgid "You have enabled your achievements."
msgstr "Sie haben Ihre Auszeichnungen aktiviert."
#: chat_commands.lua
msgid "<achievement ID>"
msgstr "<Auszeichnungs-ID>"
#: chat_commands.lua
msgid "Show details of an achievement"
msgstr "Details einer Auszeichnung anzeigen"
#: chat_commands.lua
msgid "Achievement not found."
msgstr "Auszeichnung nicht gefunden."
#: chat_commands.lua
msgid "<name>"
msgstr "<Name>"
#: chat_commands.lua
msgid "Get the achievements statistics for the given player or yourself"
msgstr "Die Statistik der Auszeichnungen eines Spielers zeigen"

825
locale/es.po Normal file
View File

@ -0,0 +1,825 @@
# Spanish translations for PACKAGE package
# Traducciones al español para el paquete PACKAGE.
# Copyright (C) 2017 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Diego Martínez <kaeza@users.noreply.github.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-21 05:35-0300\n"
"PO-Revision-Date: 2017-02-20 22:17-0300\n"
"Last-Translator: Diego Martínez <kaeza@users.noreply.github.com>\n"
"Language-Team: Spanish\n"
"Language: es\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"
#: api.lua
msgid "Secret Achievement Unlocked:"
msgstr "Logro secreto desbloqueado:"
#: api.lua
msgid "Achievement Unlocked:"
msgstr "Logro desbloqueado:"
#: api.lua
#, lua-format
msgid "Secret Achievement Unlocked: %s"
msgstr "Logro secreto desbloqueado: %s"
#: api.lua
#, lua-format
msgid "Achievement Unlocked: %s"
msgstr "Logro desbloqueado: %s"
#: api.lua
msgid "Secret Achievement Unlocked!"
msgstr "Logro secreto desbloqueado!"
#: api.lua
msgid "Achievement Unlocked!"
msgstr "Logro desbloqueado!"
#: api.lua
msgid "Error: No awards available."
msgstr "Error: No hay logros disponibles."
#: api.lua
msgid "OK"
msgstr "Aceptar"
#: api.lua
msgid "(Secret Award)"
msgstr "(Logro secreto)"
#: api.lua
msgid "Unlock this award to find out what it is."
msgstr "Desbloquea éste logro para saber qué es."
#: api.lua
#, lua-format
msgid "%s (got)"
msgstr "%s (obtenido)"
#: api.lua
msgid "You've disabled awards. Type /awards enable to reenable."
msgstr ""
"Has deshabilitado los logros. Escribe \"/awards enable\" para reactivar."
#: api.lua
msgid "You have not unlocked any awards."
msgstr "No has desbloqueado ningún logro."
#: api.lua
#, lua-format
msgid "%ss awards:"
msgstr "Logros de %s:"
#: api.lua chat_commands.lua
#, lua-format
msgid "%s: %s"
msgstr "%s: %s"
#: sfinv.lua unified_inventory.lua
msgid "Awards"
msgstr "Logros"
#: triggers.lua
msgid "@1/@2 dug"
msgstr "@1/@2 excavados"
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Mine: @2"
msgid_plural "Mine: @1×@2"
msgstr[0] "Excavar: @2"
msgstr[1] "Excavar: @1×@2"
#: triggers.lua
msgid "Mine @1 block."
msgid_plural "Mine @1 blocks."
msgstr[0] "Excavar un bloque."
msgstr[1] "Excavar @1 bloques."
#: triggers.lua
msgid "@1/@2 placed"
msgstr "@1/@2 colocados"
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Place: @2"
msgid_plural "Place: @1×@2"
msgstr[0] "Colocar: @2"
msgstr[1] "Colocar: @1×@2"
#: triggers.lua
msgid "Place a block."
msgid_plural "Place @1 blocks."
msgstr[0] "Colocar un bloque."
msgstr[1] "Colocar @1 bloques."
#: triggers.lua
msgid "@1/@2 eaten"
msgstr "@1/@2 comidos"
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Eat: @2"
msgid_plural "Eat: @1×@2"
msgstr[0] "Comer: @2"
msgstr[1] "Comer: @1×@2"
#: triggers.lua
msgid "Eat an item."
msgid_plural "Eat @1 items."
msgstr[0] "Comer un objeto."
msgstr[1] "Comer @1 objetos."
#: triggers.lua
msgid "@1/@2 deaths"
msgstr "@1/@2 muertes"
#: triggers.lua
msgid "Die."
msgid_plural "Die @1 times."
msgstr[0] "Morir."
msgstr[1] "Morir @1 veces."
#: triggers.lua
msgid "@1/@2 chat messages"
msgstr "@1/@2 conversaciones"
#: triggers.lua
msgid "Write something in chat."
msgid_plural "Write @1 chat messages."
msgstr[0] "Escribir algo."
msgstr[1] "Escribir @1 mensajes."
#: triggers.lua
msgid "@1/@2 game joins"
msgstr "@1/@2 veces unido"
#: triggers.lua
msgid "Join the game."
msgid_plural "Join the game @1 times."
msgstr[0] "Unirse al juego."
msgstr[1] "Unirse al juego @1 veces."
#: triggers.lua
msgid "@1/@2 crafted"
msgstr "@1/@2 elaborado"
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Craft: @2"
msgid_plural "Craft: @1×@2"
msgstr[0] "Elaborar: @2"
msgstr[1] "Elaborar: %1×@2"
#: triggers.lua
msgid "Craft an item."
msgid_plural "Craft @1 items."
msgstr[0] "Elaborar un objeto."
msgstr[1] "Elaborar @1 objetos."
#: init.lua
msgid "Saint-Maclou"
msgstr "Saint-Maclou"
#: init.lua
msgid "Place 20 coal checkers."
msgstr "Colocar 20 baldosas de ajedrez de carbón."
#: init.lua
msgid "Castorama"
msgstr "Castorama"
#: init.lua
msgid "Place 20 iron checkers."
msgstr "Colocar 20 baldosas de ajedrez de hierro."
#: init.lua
msgid "Sam the Trapper"
msgstr "Sam el Atrapador"
#: init.lua
msgid "Place 2 trap stones."
msgstr "Colocar 2 piedras trampa."
#: init.lua
msgid "Backpacker"
msgstr "Mochilero"
#: init.lua
msgid "Craft 4 large bags."
msgstr "Elaborar 4 bolsas grandes."
#: init.lua
msgid "Pyromaniac"
msgstr "Piromaníaco"
#: init.lua
msgid "Craft 8 times flint and steel."
msgstr "Elaborar pedernal y hierro 8 veces."
#: init.lua
msgid "Firefighter"
msgstr "Bombero"
#: init.lua
msgid "Put out 1000 fires."
msgstr "Apagar 1000 incendios."
#: init.lua
msgid "Light It Up"
msgstr "Ilumínalo"
#: init.lua
msgid "Place 100 torches."
msgstr "Colocar 100 antorchas."
#: init.lua
msgid "Well Lit"
msgstr "Bien Iluminado"
#: init.lua
msgid "Place 1,000 torches."
msgstr "Colocar 1.000 antorchas."
#: init.lua
msgid "Really Well Lit"
msgstr "Realmente Bien Iluminado"
#: init.lua
msgid "Craft 10 mese lamps."
msgstr "Elaborar 10 lámparas de MESE."
#: init.lua
msgid "Outpost"
msgstr "Puesto de avanzada"
#: init.lua
msgid "Craft 200 stone bricks."
msgstr "Elaborar 200 ladrillos de piedra."
#: init.lua
msgid "Watchtower"
msgstr "Torre del vigía"
#: init.lua
msgid "Craft 800 stone bricks."
msgstr "Elaborar 800 ladrillos de piedra."
#: init.lua
msgid "Fortress"
msgstr "Fortaleza"
#: init.lua
msgid "Craft 3,200 stone bricks."
msgstr "Elaborar 3.200 ladrillos de piedra."
#: init.lua
msgid "Desert Dweller"
msgstr "Morador Desértico"
#: init.lua
msgid "Craft 400 desert stone bricks."
msgstr "Elaborar 400 ladrillos de piedra desértica."
#: init.lua
msgid "Pharaoh"
msgstr "Faraón"
#: init.lua
msgid "Craft 100 sandstone bricks."
msgstr "Elaborar 200 ladrillos de arenisca."
#: init.lua
msgid "Little Library"
msgstr "Pequeña Biblioteca"
#: init.lua
msgid "Craft 7 bookshelves."
msgstr "Elaborar 7 libreros."
#: init.lua
msgid "Lava and Water"
msgstr "Lava y Agua"
#: init.lua
msgid "Mine your first obsidian."
msgstr "Excavar tu primera obsidiana."
#: init.lua
msgid "Obsessed with Obsidian"
msgstr "Obsesionado con la Obsidiana"
#: init.lua
msgid "Mine 50 obsidian."
msgstr "Excavar 50 obsidianas."
#: init.lua
msgid "Lava Miner"
msgstr "Minero de Lava"
#: init.lua
msgid "Mine any block while being very close to lava."
msgstr "Excavar un bloque cerca de lava."
#: init.lua
msgid "On The Way"
msgstr "En Camino"
#: init.lua
msgid "Place 100 rails."
msgstr "Colocar 100 rieles."
#: init.lua
msgid "First Day in the Woods"
msgstr "Primer Día en el Bosque"
#: init.lua
msgid "Dig 6 tree blocks."
msgstr "Cortar 6 árboles."
#: init.lua
msgid "Lumberjack"
msgstr "Leñador"
#: init.lua
msgid "Dig 36 tree blocks."
msgstr "Cortar 36 árboles."
#: init.lua
msgid "Semi-pro Lumberjack"
msgstr "Leñador semi-profesional"
#: init.lua
msgid "Dig 216 tree blocks."
msgstr "Cortar 216 árboles."
#: init.lua
msgid "Professional Lumberjack"
msgstr "Leñador profesional"
#: init.lua
msgid "Dig 1,296 tree blocks."
msgstr "Cortar 1.296 árboles."
#: init.lua
msgid "Junglebaby"
msgstr "Bebé de la Selva"
#: init.lua
msgid "Dig 100 jungle tree blocks."
msgstr "Cortar 100 árboles selváticos."
#: init.lua
msgid "Jungleman"
msgstr "Hombre de la Selva"
#: init.lua
msgid "Dig 1,000 jungle tree blocks."
msgstr "Cortar 1.000 árboles selváticos."
#: init.lua
msgid "First Mese Find"
msgstr "Primer Encuentro de MESE"
#: init.lua
msgid "Mine your first mese ore."
msgstr "Excava tu primer mineral de MESE."
#: init.lua
msgid "Mese Mastery"
msgstr "Maestría de MESE"
#: init.lua
msgid "Mine a mese block."
msgstr "Excava tu primer bloque de MESE."
#: init.lua
msgid "Youre a copper"
msgstr "Eres un cobre"
#: init.lua
msgid "Dig 1,000 copper ores."
msgstr "Excavar 1.000 minerales de cobre"
#: init.lua
msgid "A Cat in a Pop-Tart?!"
msgstr "¡¿Un Gato en un Pop-Tart?!"
#: init.lua
msgid "Mine a nyan cat."
msgstr "Excavar un Gato Nyan."
#: init.lua
msgid "Mini Miner"
msgstr "Mini Minero"
#: init.lua
msgid "Dig 100 stone blocks."
msgstr "Excavar 100 bloques de piedra."
#: init.lua
msgid "Hardened Miner"
msgstr "Minero Curtido"
#: init.lua
msgid "Dig 1,000 stone blocks."
msgstr "Excavar 1.000 bloques de piedra."
#: init.lua
msgid "Master Miner"
msgstr "Minero Maestro"
#: init.lua
msgid "Dig 10,000 stone blocks."
msgstr "Excavar 10.000 bloques de piedra."
#: init.lua
msgid "Marchand De Sable"
msgstr "Marchand De Sable"
#: init.lua
msgid "Dig 1,000 sand."
msgstr "Cavar 1.000 bloques de arena."
#: init.lua
msgid "Crafter of Sticks"
msgstr "Elaborador de Varitas"
#: init.lua
msgid "Craft 100 sticks."
msgstr "Elaborar 100 varitas."
#: init.lua
msgid "Jungle Discoverer"
msgstr "Descubridor de Selva"
#: init.lua
msgid "Mine your first jungle grass."
msgstr "Cortar tu primer pasto de selva."
#: init.lua
msgid "Grasslands Discoverer"
msgstr "Descubridor de Praderas"
#: init.lua
msgid "Mine some grass."
msgstr "Cortar un poco de pasto."
#: init.lua
msgid "Savannah Discoverer"
msgstr "Descubridor de Savana"
#: init.lua
msgid "Mine some dry grass."
msgstr "Cortar un poco de pasto seco."
#: init.lua
msgid "Desert Discoverer"
msgstr "Descubridor del Desierto"
#: init.lua
msgid "Mine your first cactus."
msgstr "Cortar tu primer cácto."
#: init.lua
msgid "Far Lands"
msgstr "Tierras Lejanas"
#: init.lua
msgid "Mine your first dry shrub."
msgstr "Cortar tu primer arbusto seco"
#: init.lua
msgid "Glacier Discoverer"
msgstr "Descubridor del Glaciar"
#: init.lua
msgid "Mine your first ice."
msgstr "Romper tu primer bloque de hielo."
#: init.lua
msgid "Very Simple Snow Man"
msgstr "Muñeco de Nieve Muy Simple"
#: init.lua
msgid "Place two snow blocks."
msgstr "Colocar dos bloques de nieve."
#: init.lua
msgid "First Gold Find"
msgstr "Primer Encuentro de Oro"
#: init.lua
msgid "Mine your first gold ore."
msgstr "Excavar tu primer pepita de oro."
#: init.lua
msgid "Gold Rush"
msgstr "Fiebre del Oro"
#: init.lua
msgid "Mine 45 gold ores."
msgstr "Excavar 45 pepitas de oro."
#: init.lua
msgid "Wow, I am Diamonds!"
msgstr "¡Guau, Soy Diamantes!"
#: init.lua
msgid "Mine your first diamond ore."
msgstr "Excava tu primer diamante."
#: init.lua
msgid "Girl's Best Friend"
msgstr "El Mejor Amigo de Las Mujeres"
#: init.lua
msgid "Mine 18 diamond ores."
msgstr "Excava 10 diamantes."
#: init.lua
msgid "Hardest Block on Earth"
msgstr "El Bloque Más Duro Sobre La Tierra"
#: init.lua
msgid "Craft a diamond block."
msgstr "Elaborar un bloque de diamante."
#: init.lua
msgid "In the Dungeon"
msgstr "En Las Mazmorras"
#: init.lua
msgid "Mine a mossy cobblestone."
msgstr "Excavar unos adoquines musgosos."
#: init.lua
msgid "Smelter"
msgstr "Fundidor"
#: init.lua
msgid "Craft 10 furnaces."
msgstr "Elaborar 10 hornos."
#: init.lua
msgid "Treasurer"
msgstr "Tesorero"
#: init.lua
msgid "Craft 15 chests."
msgstr "Elaborar 15 cofres."
#: init.lua
msgid "Bankier"
msgstr "Banquero"
#: init.lua
msgid "Craft 30 locked chests."
msgstr "Elaborar 30 bloques cerrados."
#: init.lua
msgid "Bricker"
msgstr "Ladrillero"
#: init.lua
msgid "Craft 200 brick blocks."
msgstr "Elaborar 200 bloques de ladrillo."
#: init.lua
msgid "House of Obsidian"
msgstr "Casa de Obsidiana"
#: init.lua
msgid "Craft 100 obsidian bricks."
msgstr "Elaborar 100 ladrillos de obsidiana."
#: init.lua
msgid "Build a Cave"
msgstr "Construye Una Cueva"
#: init.lua
msgid "Place 100 stone."
msgstr "Coloca 100 piedras."
#: init.lua
msgid "Long Ladder"
msgstr "Escalerilla Larga"
#: init.lua
msgid "Place 400 wooden ladders."
msgstr "Coloca 400 escalerillas de madera."
#: init.lua
msgid "Industrial Age"
msgstr "Era Industrial"
#: init.lua
msgid "Place 40 steel ladders."
msgstr "Coloca 40 escalerillas de acero."
#: init.lua
msgid "Yummy!"
msgstr "¡Qué Rico!"
#: init.lua
msgid "Eat 80 apples."
msgstr "Come 80 manzanas."
# Intentionally marked as fuzzy.
#: init.lua
#, fuzzy
msgid "Glasser"
msgstr "Vidriero"
#: init.lua
msgid "Craft 14 vessels shelves."
msgstr "Elabora 14 estanterías para botellas."
#: init.lua
msgid "Farming Skills Acquired"
msgstr "Habilidades de Granja Adquiridas"
#: init.lua
msgid "Harvest a fully grown wheat plant."
msgstr "Cosecha una plantas de trigo madura."
#: init.lua
msgid "Field Worker"
msgstr "Trabajador de Campo"
#: init.lua
msgid "Harvest 25 fully grown wheat plants."
msgstr "Cosecha 25 plantas de trigo maduras."
#: init.lua
msgid "Aspiring Farmer"
msgstr "Aspirante a Granjero"
#: init.lua
msgid "Harvest 125 fully grown wheat plants."
msgstr "Cosecha 125 plantas de trigo maduras."
#: init.lua
msgid "Wheat Magnate"
msgstr "Magnate del Maíz"
#: init.lua
msgid "Harvest 625 fully grown wheat plants."
msgstr "Cosecha 625 plantas de trigo maduras."
#: init.lua
msgid "Baker"
msgstr "Panadero"
#: init.lua
msgid "Eat 10 loaves of bread."
msgstr "Come 10 rebanadas de pan."
#: init.lua
msgid "Wool Over Your Eyes"
msgstr "Lana Sobre Tus Ojos"
#: init.lua
msgid "Craft 250 white wool."
msgstr "Elabora 250 bloques de lana blanca."
#: init.lua
msgid "Hotelier"
msgstr "Hotelero"
#: init.lua
msgid "Craft 15 fancy beds."
msgstr "Elabora 15 camas de lujo."
#: init.lua
msgid "Filthy Rich"
msgstr "Sucio Rico"
#: init.lua
msgid "Craft 24 gold block stairs."
msgstr "Elabora 24 escaleras de bloque de oro."
#: init.lua
msgid "Roses Are Red"
msgstr "Las Rosas Son Rojas"
#: init.lua
msgid "Craft 400 red dyes."
msgstr "Elabora 400 colorantes rojos."
#: init.lua
msgid "Dandelions are Yellow"
msgstr "Los Dientes de León Son Amarillos"
#: init.lua
msgid "Craft 400 yellow dyes."
msgstr "Elabora 400 colorantes amarillos."
#: init.lua
msgid "Geraniums are Blue"
msgstr "Los Geranios Son Azules"
#: init.lua
msgid "Craft 400 blue dyes."
msgstr "Elabora 400 colorantes azules."
#: init.lua
msgid "White Color Stock"
msgstr "Reserva de Color Blanco"
#: init.lua
msgid "Craft 100 white dyes."
msgstr "Elabora 100 colorantes blancos."
#: init.lua
msgid "Tasty Mushrooms"
msgstr "Ricos Hongos"
#: init.lua
msgid "Eat 3 brown mushrooms."
msgstr "Come 3 hongos marrones."
#: init.lua
msgid "Mushroom Lover"
msgstr "Amante de los Hongos"
#: init.lua
msgid "Eat 33 brown mushrooms."
msgstr "Come 33 hongos marrones."
#: init.lua
msgid "Underground Mushroom Farmer"
msgstr "Granjero de Hongos Subterráneo"
#: init.lua
msgid "Eat 333 brown mushrooms."
msgstr "Come 333 hongos marrones."
# Nota: "Builder" y "Constructor" se traducen a "Constructor",
# así que lo traduje de ésta manera para diferenciar.
#: init.lua
msgid "Builder"
msgstr "Hacedor"
#: init.lua
msgid "Constructor"
msgstr "Constructor"
#: init.lua
msgid "Architect"
msgstr "Arquitecto"
#: init.lua
msgid "Master Architect"
msgstr "Maestro Arquitecto"
#: chat_commands.lua
msgid "[c|clear|disable|enable]"
msgstr "[c|clear|disable|enable]"
#: chat_commands.lua
msgid "Show, clear, disable or enable your achievements"
msgstr "Mostrar, limpiar, deshabilitar o habilitar tus logros"
#: chat_commands.lua
msgid ""
"All your awards and statistics have been cleared. You can now start again."
msgstr ""
"Todos tus logros y estadísticas han sido borrados. Puedes iniciar nuevamente."
#: chat_commands.lua
msgid "You have disabled your achievements."
msgstr "Has deshabilitado tus logros."
#: chat_commands.lua
msgid "You have enabled your achievements."
msgstr "Has habilitado tus logros."
#: chat_commands.lua
msgid "<achievement ID>"
msgstr "<ID logro>"
#: chat_commands.lua
msgid "Show details of an achievement"
msgstr "Muestra los detalles de un logro"
#: chat_commands.lua
msgid "Achievement not found."
msgstr "Logro no encontrado."
#: chat_commands.lua
msgid "<name>"
msgstr "<nombre>"
#: chat_commands.lua
msgid "Get the achievements statistics for the given player or yourself"
msgstr "Obtener las estadísticas y logros del jugador dado"

818
locale/fr.po Normal file
View File

@ -0,0 +1,818 @@
# French translations for PACKAGE package.
# Copyright (C) 2017 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# xisd, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-21 05:50-0300\n"
"PO-Revision-Date: 2017-02-21 05:50-0300\n"
"Last-Translator: xisd\n"
"Language-Team: French\n"
"Language: fr\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"
#: api.lua
msgid "Secret Achievement Unlocked:"
msgstr "Réussite Secrète Débloquée :"
#: api.lua
msgid "Achievement Unlocked:"
msgstr "Réussite Débloquée :"
#: api.lua
#, lua-format
msgid "Secret Achievement Unlocked: %s"
msgstr "Réussite Secrète Débloquée : %s"
#: api.lua
#, lua-format
msgid "Achievement Unlocked: %s"
msgstr "Réussite Débloquée : %s"
#: api.lua
msgid "Secret Achievement Unlocked!"
msgstr "Réussite Secrète Débloquée !"
#: api.lua
msgid "Achievement Unlocked!"
msgstr "Réussite Débloquée !"
#: api.lua
msgid "Error: No awards available."
msgstr "Erreur : Aucun trophée disponible"
#: api.lua
msgid "OK"
msgstr "OK"
#: api.lua
msgid "(Secret Award)"
msgstr "(Trophée Secret)"
#: api.lua
msgid "Unlock this award to find out what it is."
msgstr "Débloque ce trophée pour découvrir ce que c'est."
#: api.lua
#, lua-format
msgid "%s (got)"
msgstr "%s (obtenu)"
#: api.lua
msgid "You've disabled awards. Type /awards enable to reenable."
msgstr "Vous avez désactivé les trophées. Tapez '/awards enable' pour les réactiver."
#: api.lua
msgid "You have not unlocked any awards."
msgstr "Vous n'avez encore débloqué aucun trophée."
#: api.lua
#, lua-format
msgid "%ss awards:"
msgstr "Les trophées de %s :"
#: api.lua chat_commands.lua
#, lua-format
msgid "%s: %s"
msgstr "%s : %s"
#: sfinv.lua unified_inventory.lua
msgid "Awards"
msgstr "Trophées"
#: triggers.lua
msgid "@1/@2 dug"
msgstr "@1/@2 creusés"
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Mine: @2"
msgid_plural "Mine: @1×@2"
msgstr[0] "Mine : @2"
msgstr[1] "Mine : @1×@2"
#: triggers.lua
msgid "Mine @1 block."
msgid_plural "Mine @1 blocks."
msgstr[0] "Creuse @1 bloc."
msgstr[1] "Creuse @1 blocs."
#: triggers.lua
msgid "@1/@2 placed"
msgstr "@1/@2 placés"
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Place: @2"
msgid_plural "Place: @1×@2"
msgstr[0] "Place : @2"
msgstr[1] "Place : @1×@2"
#: triggers.lua
msgid "Place a block."
msgid_plural "Place @1 blocks."
msgstr[0] "Place un bloc."
msgstr[1] "Place @1 blocs."
#: triggers.lua
msgid "@1/@2 eaten"
msgstr "@1/@2 Mangés"
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Eat: @2"
msgid_plural "Eat: @1×@2"
msgstr[0] "Mange : @2"
msgstr[1] "Mange : @1×@2"
#: triggers.lua
msgid "Eat an item."
msgid_plural "Eat @1 items."
msgstr[0] "Mange quelque chose."
msgstr[1] "Mange @1 aliments."
#: triggers.lua
msgid "@1/@2 deaths"
msgstr "@1/@2 morts"
#: triggers.lua
msgid "Die."
msgid_plural "Die @1 times."
msgstr[0] "Mort·e."
msgstr[1] "Mort·e %d fois."
#: triggers.lua
msgid "@1/@2 chat messages"
msgstr "@1/@2 messages du chat"
#: triggers.lua
msgid "Write something in chat."
msgid_plural "Write @1 chat messages."
msgstr[0] "Écrit quelque chose dans le chat."
msgstr[1] "Écrit @1 messages dans le chat."
#: triggers.lua
msgid "@1/@2 game joins"
msgstr "@1/@2 connexions"
#: triggers.lua
msgid "Join the game."
msgid_plural "Join the game @1 times."
msgstr[0] "Connecte toi au jeu."
msgstr[1] "Connecte toi au jeu @1 fois."
#: triggers.lua
msgid "@1/@2 crafted"
msgstr "@1/@2 craftés"
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Craft: @2"
msgid_plural "Craft: @1×@2"
msgstr[0] "Fabrique : @2"
msgstr[1] "Fabrique : @1×@2"
#: triggers.lua
msgid "Craft an item."
msgid_plural "Craft @1 items."
msgstr[0] "Confectionne un objet."
msgstr[1] "Confectionne @1 objets."
#: init.lua
msgid "Saint-Maclou"
msgstr "Saint-Maclou"
#: init.lua
msgid "Place 20 coal checkers."
msgstr "Place 20 damiers de charbon."
#: init.lua
msgid "Castorama"
msgstr "Castorama"
#: init.lua
msgid "Place 20 iron checkers."
msgstr "Place 20 damiers de fer."
#: init.lua
msgid "Sam the Trapper"
msgstr "Sam le Trappeur"
#: init.lua
msgid "Place 2 trap stones."
msgstr "Place 2 pièges de pierre."
#: init.lua
msgid "Backpacker"
msgstr "Randonneu·r·se"
#: init.lua
msgid "Craft 4 large bags."
msgstr "Confectionne 4 grands sacs"
#: init.lua
msgid "Pyromaniac"
msgstr "Pyromane"
#: init.lua
msgid "Craft 8 times flint and steel."
msgstr "Fabrique 8 silex et aciers."
#: init.lua
msgid "Firefighter"
msgstr "Pompier"
#: init.lua
msgid "Put out 1000 fires."
msgstr "Éteint 1000 feux."
#: init.lua
msgid "Light It Up"
msgstr "Eclairé·e"
#: init.lua
msgid "Place 100 torches."
msgstr "Place 100 torches."
#: init.lua
msgid "Well Lit"
msgstr "Bien Éclairé"
#: init.lua
msgid "Place 1,000 torches."
msgstr "Place 1000 torches."
#: init.lua
msgid "Really Well Lit"
msgstr "Vraiment Bien Éclairé"
#: init.lua
msgid "Craft 10 mese lamps."
msgstr "Fabrique 10 lampes de mese."
#: init.lua
msgid "Outpost"
msgstr "Poste Avancé"
#: init.lua
msgid "Craft 200 stone bricks."
msgstr "Confectionne 200 briques de pierre."
#: init.lua
msgid "Watchtower"
msgstr "Tour de Garde"
#: init.lua
msgid "Craft 800 stone bricks."
msgstr "Confectionne 800 briques de pierre."
#: init.lua
msgid "Fortress"
msgstr "Forteresse"
#: init.lua
msgid "Craft 3,200 stone bricks."
msgstr "Confectionne 3200 briques de pierre."
#: init.lua
msgid "Desert Dweller"
msgstr "Habitant·e du Désert"
#: init.lua
msgid "Craft 400 desert stone bricks."
msgstr "Confectionne 400 briques de pierre du désert."
#: init.lua
msgid "Pharaoh"
msgstr "Pharaon"
#: init.lua
msgid "Craft 100 sandstone bricks."
msgstr "Confectionne 100 briques de roche de sable."
#: init.lua
msgid "Little Library"
msgstr "Petite Bibliothèque"
#: init.lua
msgid "Craft 7 bookshelves."
msgstr "Fabrique 7 bibliothèques."
#: init.lua
msgid "Lava and Water"
msgstr "La Lave et l'Eau"
#: init.lua
msgid "Mine your first obsidian."
msgstr "Mine ton premier bloc d'obsidienne."
#: init.lua
msgid "Obsessed with Obsidian"
msgstr "Obsédé·e par l'obsidienne"
#: init.lua
msgid "Mine 50 obsidian."
msgstr "Mine 50 pierres d'obsidienne."
#: init.lua
msgid "Lava Miner"
msgstr "Mineu·r·se de lave"
#: init.lua
msgid "Mine any block while being very close to lava."
msgstr "Mine n'importe quel bloc à proximité de la lave."
#: init.lua
msgid "On The Way"
msgstr "Sur La Voie"
#: init.lua
msgid "Place 100 rails."
msgstr "Place 100 rails."
#: init.lua
msgid "First Day in the Woods"
msgstr "Premier Jour dans les Bois"
#: init.lua
msgid "Dig 6 tree blocks."
msgstr "Creuse 6 blocs d'arbre."
#: init.lua
msgid "Lumberjack"
msgstr "Bûcheron·ne"
#: init.lua
msgid "Dig 36 tree blocks."
msgstr "Creuse 36 blocs d'arbre."
#: init.lua
msgid "Semi-pro Lumberjack"
msgstr "Bûcheron.ne. Semi-Professionnel.le."
#: init.lua
msgid "Dig 216 tree blocks."
msgstr "Creuse 216 blocs d'arbre."
#: init.lua
msgid "Professional Lumberjack"
msgstr "Bûcheron·ne Professionnel·le"
#: init.lua
msgid "Dig 1,296 tree blocks."
msgstr "Creuse 1296 blocs d'arbre."
#: init.lua
msgid "Junglebaby"
msgstr "Enfant de la Jungle"
#: init.lua
msgid "Dig 100 jungle tree blocks."
msgstr "Creuse 100 blocs d'arbres de jungle."
#: init.lua
msgid "Jungleman"
msgstr "Personne de la Jungle"
#: init.lua
msgid "Dig 1,000 jungle tree blocks."
msgstr "Creuse 1000 blocs d'arbre de jungle."
#: init.lua
msgid "First Mese Find"
msgstr "Première Pépite : Mese"
#: init.lua
msgid "Mine your first mese ore."
msgstr "Mine ton premier minerai de mese."
#: init.lua
msgid "Mese Mastery"
msgstr "Maîtrise de Mese"
#: init.lua
msgid "Mine a mese block."
msgstr "Mine un bloc de mese."
#: init.lua
msgid "Youre a copper"
msgstr "Faîtes Jouer les Cuivres"
#: init.lua
msgid "Dig 1,000 copper ores."
msgstr "Creuse 1000 minerais de cuivre."
#: init.lua
msgid "A Cat in a Pop-Tart?!"
msgstr "Un Chat dans un Pop-Tart ?!"
#: init.lua
msgid "Mine a nyan cat."
msgstr "Mine un nyan cat."
#: init.lua
msgid "Mini Miner"
msgstr "Mini Mineu·r·se"
#: init.lua
msgid "Dig 100 stone blocks."
msgstr "Creuse 100 blocs de pierre."
#: init.lua
msgid "Hardened Miner"
msgstr "Mineu·r·se Endurci·e"
#: init.lua
msgid "Dig 1,000 stone blocks."
msgstr "Creuse 1000 blocs de pierre."
#: init.lua
msgid "Master Miner"
msgstr "Maître·sse Mineu·r·se"
#: init.lua
msgid "Dig 10,000 stone blocks."
msgstr "Creuse 10000 blocs de pierre."
#: init.lua
msgid "Marchand De Sable"
msgstr "Marchand·e De Sable"
#: init.lua
msgid "Dig 1,000 sand."
msgstr "Creuse 1000 blocs de sable."
#: init.lua
msgid "Crafter of Sticks"
msgstr "Fabriquant·e de Bâtons."
#: init.lua
msgid "Craft 100 sticks."
msgstr "Confectionne 100 bâtons."
#: init.lua
msgid "Jungle Discoverer"
msgstr "Explorat·eur·rice de la Jungle"
#: init.lua
msgid "Mine your first jungle grass."
msgstr "Ramasse ta première herbe de jungle."
#: init.lua
msgid "Grasslands Discoverer"
msgstr "Découvreu·r·se de prairies"
#: init.lua
msgid "Mine some grass."
msgstr "Ramasse de l'herbe."
#: init.lua
msgid "Savannah Discoverer"
msgstr "Explorat·eur·rice de la Savanne"
#: init.lua
msgid "Mine some dry grass."
msgstr "Ramasse de l'herbe sèche."
#: init.lua
msgid "Desert Discoverer"
msgstr "Expolrat·eur·rice du Désert."
#: init.lua
msgid "Mine your first cactus."
msgstr "Mine ton premier catus."
#: init.lua
msgid "Far Lands"
msgstr "Terres Lointaines"
#: init.lua
msgid "Mine your first dry shrub."
msgstr "Coupe ton premier arbuste sec."
#: init.lua
msgid "Glacier Discoverer"
msgstr "Découvreu·r·se de glacier"
#: init.lua
msgid "Mine your first ice."
msgstr "Creuse ton premier bloc de glace."
#: init.lua
msgid "Very Simple Snow Man"
msgstr "Bonhomme de Neige Rudimentaire"
#: init.lua
msgid "Place two snow blocks."
msgstr "Place deux blocs de neige."
#: init.lua
msgid "First Gold Find"
msgstr "Première Pépite : Or"
#: init.lua
msgid "Mine your first gold ore."
msgstr "Mine ton premier minerai d'or."
#: init.lua
msgid "Gold Rush"
msgstr "Ruée vers l'Or"
#: init.lua
msgid "Mine 45 gold ores."
msgstr "Mine 45 minerais d'or."
#: init.lua
msgid "Wow, I am Diamonds!"
msgstr "Wow, Je suis Diamants!"
#: init.lua
msgid "Mine your first diamond ore."
msgstr "Mine ton premier diamant."
#: init.lua
#, fuzzy
msgid "Girl's Best Friend"
msgstr "Girl's Best Friend"
#: init.lua
msgid "Mine 18 diamond ores."
msgstr "Mine 18 diamants."
#: init.lua
msgid "Hardest Block on Earth"
msgstr "Le Bloc le Plus Dur du Monde"
#: init.lua
msgid "Craft a diamond block."
msgstr "Confectionne un bloc de diamant."
#: init.lua
msgid "In the Dungeon"
msgstr "Dans le Donjon"
#: init.lua
msgid "Mine a mossy cobblestone."
msgstr "Mine un bloc de pavés moussus."
#: init.lua
msgid "Smelter"
msgstr "Fondeu·r·se"
#: init.lua
msgid "Craft 10 furnaces."
msgstr "Construis 10 fours."
#: init.lua
msgid "Treasurer"
msgstr "Trésori·er·ère"
#: init.lua
msgid "Craft 15 chests."
msgstr "Fabrique 15 coffres."
#: init.lua
msgid "Bankier"
msgstr "Banqui·er·ère"
#: init.lua
msgid "Craft 30 locked chests."
msgstr "Fabrique 30 coffres Verrouillés."
#: init.lua
msgid "Bricker"
msgstr "Briqueu·r·se"
#: init.lua
msgid "Craft 200 brick blocks."
msgstr "Confectionne 200 blocs de brique."
#: init.lua
msgid "House of Obsidian"
msgstr "La Maison de L'Obsidienne"
#: init.lua
msgid "Craft 100 obsidian bricks."
msgstr "Confectionne 100 briques d'obsidienne."
#: init.lua
msgid "Build a Cave"
msgstr "Construis une grotte"
#: init.lua
msgid "Place 100 stone."
msgstr "Place 100 pierres."
#: init.lua
msgid "Long Ladder"
msgstr "Longue Echelle"
#: init.lua
msgid "Place 400 wooden ladders."
msgstr "Place 400 échelles en bois."
#: init.lua
msgid "Industrial Age"
msgstr "Âge Industriel"
#: init.lua
msgid "Place 40 steel ladders."
msgstr "Place 40 échelles métalliques."
#: init.lua
msgid "Yummy!"
msgstr "Miam !"
#: init.lua
msgid "Eat 80 apples."
msgstr "Mange 80 pommes."
#: init.lua
msgid "Glasser"
msgstr "Verri·er·ère"
#: init.lua
msgid "Craft 14 vessels shelves."
msgstr "Fabrique 14 vaisseliers."
#: init.lua
msgid "Farming Skills Acquired"
msgstr "Compétences Paysannes Acquises"
#: init.lua
msgid "Harvest a fully grown wheat plant."
msgstr "Récolte un plant de blé à maturité."
#: init.lua
msgid "Field Worker"
msgstr "Travailleu·r·se Agricole"
#: init.lua
msgid "Harvest 25 fully grown wheat plants."
msgstr "Récolte 25 plants de blé à maturité."
#: init.lua
msgid "Aspiring Farmer"
msgstr "Apprenti·e Fermi·er·ère"
#: init.lua
msgid "Harvest 125 fully grown wheat plants."
msgstr "Récolte 125 plants de blé à maturité."
#: init.lua
msgid "Wheat Magnate"
msgstr "Magnat·e du Blé"
#: init.lua
msgid "Harvest 625 fully grown wheat plants."
msgstr "Récolte 625 plants de blé à maturité."
#: init.lua
msgid "Baker"
msgstr "Boulang·er·ère"
#: init.lua
msgid "Eat 10 loaves of bread."
msgstr "Mange 10 miches de pain."
#: init.lua
msgid "Wool Over Your Eyes"
msgstr "De la Laines dans Tes Yeux"
#: init.lua
msgid "Craft 250 white wool."
msgstr "Confectionne 250 blocs de laine blanche."
#: init.lua
msgid "Hotelier"
msgstr "Hoteli·er·ère"
#: init.lua
msgid "Craft 15 fancy beds."
msgstr "Construis 15 lits chics."
#: init.lua
msgid "Filthy Rich"
msgstr "Richissime"
#: init.lua
msgid "Craft 24 gold block stairs."
msgstr "Construis 24 escaliers en or."
#: init.lua
msgid "Roses Are Red"
msgstr "Les Roses Sont Rouges"
#: init.lua
msgid "Craft 400 red dyes."
msgstr "Prépare 400 teintures rouges."
#: init.lua
msgid "Dandelions are Yellow"
msgstr "Les Pissenlits sont Jaunes."
#: init.lua
msgid "Craft 400 yellow dyes."
msgstr "Prépare 400 teintures jaunes."
#: init.lua
msgid "Geraniums are Blue"
msgstr "Les Geraniums Sont Bleus"
#: init.lua
msgid "Craft 400 blue dyes."
msgstr "Prépare 400 teintures bleues."
#: init.lua
msgid "White Color Stock"
msgstr "Chaussettes Blanches"
#: init.lua
msgid "Craft 100 white dyes."
msgstr "Prépare 100 teintures blanches."
#: init.lua
msgid "Tasty Mushrooms"
msgstr "Délicieux Champignons"
#: init.lua
msgid "Eat 3 brown mushrooms."
msgstr "Mange 3 champignons marrons."
#: init.lua
msgid "Mushroom Lover"
msgstr "Adorat·eur·rice de Champignons"
#: init.lua
msgid "Eat 33 brown mushrooms."
msgstr "Mange 33 champignons marrons."
#: init.lua
msgid "Underground Mushroom Farmer"
msgstr "Culture de Champignons en Cave"
#: init.lua
msgid "Eat 333 brown mushrooms."
msgstr "Mange 333 champignons marrons."
#: init.lua
msgid "Builder"
msgstr "Bâtisseu·r·se"
#: init.lua
msgid "Constructor"
msgstr "Construct·eur·rice"
#: init.lua
msgid "Architect"
msgstr "Architecte"
#: init.lua
msgid "Master Architect"
msgstr "Maître·sse Architecte"
#: chat_commands.lua
msgid "[c|clear|disable|enable]"
msgstr "[c|clear|disable|enable]"
#: chat_commands.lua
msgid "Show, clear, disable or enable your achievements"
msgstr "Affiche, réinitialise, désactive ou active vos réussites."
#: chat_commands.lua
msgid "All your awards and statistics have been cleared. You can now start again."
msgstr "Tous vos trophées et statistiques ont été réinitialisés. Vous pouvez recommencer à nouveau."
#: chat_commands.lua
msgid "You have disabled your achievements."
msgstr "Vous avez désactivé vos réussites."
#: chat_commands.lua
msgid "You have enabled your achievements."
msgstr "Vous avez activé vos réussites."
#: chat_commands.lua
msgid "<achievement ID>"
msgstr "<réussite ID>"
#: chat_commands.lua
msgid "Show details of an achievement"
msgstr "Afficher les détails d'une réussite"
#: chat_commands.lua
msgid "Achievement not found."
msgstr "Réussite non trouvée."
#: chat_commands.lua
msgid "<name>"
msgstr "<nom>"
#: chat_commands.lua
msgid "Get the achievements statistics for the given player or yourself"
msgstr "Obtenez les statistiques des réussites d'un joueur donné ou de vous-même"

819
locale/template.pot Normal file
View File

@ -0,0 +1,819 @@
# 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-02-21 05:50-0300\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=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#: api.lua
msgid "Secret Achievement Unlocked:"
msgstr ""
#: api.lua
msgid "Achievement Unlocked:"
msgstr ""
#: api.lua
#, lua-format
msgid "Secret Achievement Unlocked: %s"
msgstr ""
#: api.lua
#, lua-format
msgid "Achievement Unlocked: %s"
msgstr ""
#: api.lua
msgid "Secret Achievement Unlocked!"
msgstr ""
#: api.lua
msgid "Achievement Unlocked!"
msgstr ""
#: api.lua
msgid "Error: No awards available."
msgstr ""
#: api.lua
msgid "OK"
msgstr ""
#: api.lua
msgid "(Secret Award)"
msgstr ""
#: api.lua
msgid "Unlock this award to find out what it is."
msgstr ""
#: api.lua
#, lua-format
msgid "%s (got)"
msgstr ""
#: api.lua
msgid "You've disabled awards. Type /awards enable to reenable."
msgstr ""
#: api.lua
msgid "You have not unlocked any awards."
msgstr ""
#: api.lua
#, lua-format
msgid "%ss awards:"
msgstr ""
#: api.lua chat_commands.lua
#, lua-format
msgid "%s: %s"
msgstr ""
#: sfinv.lua unified_inventory.lua
msgid "Awards"
msgstr ""
#: triggers.lua
msgid "@1/@2 dug"
msgstr ""
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Mine: @2"
msgid_plural "Mine: @1×@2"
msgstr[0] ""
msgstr[1] ""
#: triggers.lua
msgid "Mine @1 block."
msgid_plural "Mine @1 blocks."
msgstr[0] ""
msgstr[1] ""
#: triggers.lua
msgid "@1/@2 placed"
msgstr ""
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Place: @2"
msgid_plural "Place: @1×@2"
msgstr[0] ""
msgstr[1] ""
#: triggers.lua
msgid "Place a block."
msgid_plural "Place @1 blocks."
msgstr[0] ""
msgstr[1] ""
#: triggers.lua
msgid "@1/@2 eaten"
msgstr ""
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Eat: @2"
msgid_plural "Eat: @1×@2"
msgstr[0] ""
msgstr[1] ""
#: triggers.lua
msgid "Eat an item."
msgid_plural "Eat @1 items."
msgstr[0] ""
msgstr[1] ""
#: triggers.lua
msgid "@1/@2 deaths"
msgstr ""
#: triggers.lua
msgid "Die."
msgid_plural "Die @1 times."
msgstr[0] ""
msgstr[1] ""
#: triggers.lua
msgid "@1/@2 chat messages"
msgstr ""
#: triggers.lua
msgid "Write something in chat."
msgid_plural "Write @1 chat messages."
msgstr[0] ""
msgstr[1] ""
#: triggers.lua
msgid "@1/@2 game joins"
msgstr ""
#: triggers.lua
msgid "Join the game."
msgid_plural "Join the game @1 times."
msgstr[0] ""
msgstr[1] ""
#: triggers.lua
msgid "@1/@2 crafted"
msgstr ""
#. Translators: @1 is count, @2 is description.
#: triggers.lua
msgid "Craft: @2"
msgid_plural "Craft: @1×@2"
msgstr[0] ""
msgstr[1] ""
#: triggers.lua
msgid "Craft an item."
msgid_plural "Craft @1 items."
msgstr[0] ""
msgstr[1] ""
#: init.lua
msgid "Saint-Maclou"
msgstr ""
#: init.lua
msgid "Place 20 coal checkers."
msgstr ""
#: init.lua
msgid "Castorama"
msgstr ""
#: init.lua
msgid "Place 20 iron checkers."
msgstr ""
#: init.lua
msgid "Sam the Trapper"
msgstr ""
#: init.lua
msgid "Place 2 trap stones."
msgstr ""
#: init.lua
msgid "Backpacker"
msgstr ""
#: init.lua
msgid "Craft 4 large bags."
msgstr ""
#: init.lua
msgid "Pyromaniac"
msgstr ""
#: init.lua
msgid "Craft 8 times flint and steel."
msgstr ""
#: init.lua
msgid "Firefighter"
msgstr ""
#: init.lua
msgid "Put out 1000 fires."
msgstr ""
#: init.lua
msgid "Light It Up"
msgstr ""
#: init.lua
msgid "Place 100 torches."
msgstr ""
#: init.lua
msgid "Well Lit"
msgstr ""
#: init.lua
msgid "Place 1,000 torches."
msgstr ""
#: init.lua
msgid "Really Well Lit"
msgstr ""
#: init.lua
msgid "Craft 10 mese lamps."
msgstr ""
#: init.lua
msgid "Outpost"
msgstr ""
#: init.lua
msgid "Craft 200 stone bricks."
msgstr ""
#: init.lua
msgid "Watchtower"
msgstr ""
#: init.lua
msgid "Craft 800 stone bricks."
msgstr ""
#: init.lua
msgid "Fortress"
msgstr ""
#: init.lua
msgid "Craft 3,200 stone bricks."
msgstr ""
#: init.lua
msgid "Desert Dweller"
msgstr ""
#: init.lua
msgid "Craft 400 desert stone bricks."
msgstr ""
#: init.lua
msgid "Pharaoh"
msgstr ""
#: init.lua
msgid "Craft 100 sandstone bricks."
msgstr ""
#: init.lua
msgid "Little Library"
msgstr ""
#: init.lua
msgid "Craft 7 bookshelves."
msgstr ""
#: init.lua
msgid "Lava and Water"
msgstr ""
#: init.lua
msgid "Mine your first obsidian."
msgstr ""
#: init.lua
msgid "Obsessed with Obsidian"
msgstr ""
#: init.lua
msgid "Mine 50 obsidian."
msgstr ""
#: init.lua
msgid "Lava Miner"
msgstr ""
#: init.lua
msgid "Mine any block while being very close to lava."
msgstr ""
#: init.lua
msgid "On The Way"
msgstr ""
#: init.lua
msgid "Place 100 rails."
msgstr ""
#: init.lua
msgid "First Day in the Woods"
msgstr ""
#: init.lua
msgid "Dig 6 tree blocks."
msgstr ""
#: init.lua
msgid "Lumberjack"
msgstr ""
#: init.lua
msgid "Dig 36 tree blocks."
msgstr ""
#: init.lua
msgid "Semi-pro Lumberjack"
msgstr ""
#: init.lua
msgid "Dig 216 tree blocks."
msgstr ""
#: init.lua
msgid "Professional Lumberjack"
msgstr ""
#: init.lua
msgid "Dig 1,296 tree blocks."
msgstr ""
#: init.lua
msgid "Junglebaby"
msgstr ""
#: init.lua
msgid "Dig 100 jungle tree blocks."
msgstr ""
#: init.lua
msgid "Jungleman"
msgstr ""
#: init.lua
msgid "Dig 1,000 jungle tree blocks."
msgstr ""
#: init.lua
msgid "First Mese Find"
msgstr ""
#: init.lua
msgid "Mine your first mese ore."
msgstr ""
#: init.lua
msgid "Mese Mastery"
msgstr ""
#: init.lua
msgid "Mine a mese block."
msgstr ""
#: init.lua
msgid "Youre a copper"
msgstr ""
#: init.lua
msgid "Dig 1,000 copper ores."
msgstr ""
#: init.lua
msgid "A Cat in a Pop-Tart?!"
msgstr ""
#: init.lua
msgid "Mine a nyan cat."
msgstr ""
#: init.lua
msgid "Mini Miner"
msgstr ""
#: init.lua
msgid "Dig 100 stone blocks."
msgstr ""
#: init.lua
msgid "Hardened Miner"
msgstr ""
#: init.lua
msgid "Dig 1,000 stone blocks."
msgstr ""
#: init.lua
msgid "Master Miner"
msgstr ""
#: init.lua
msgid "Dig 10,000 stone blocks."
msgstr ""
#: init.lua
msgid "Marchand De Sable"
msgstr ""
#: init.lua
msgid "Dig 1,000 sand."
msgstr ""
#: init.lua
msgid "Crafter of Sticks"
msgstr ""
#: init.lua
msgid "Craft 100 sticks."
msgstr ""
#: init.lua
msgid "Jungle Discoverer"
msgstr ""
#: init.lua
msgid "Mine your first jungle grass."
msgstr ""
#: init.lua
msgid "Grasslands Discoverer"
msgstr ""
#: init.lua
msgid "Mine some grass."
msgstr ""
#: init.lua
msgid "Savannah Discoverer"
msgstr ""
#: init.lua
msgid "Mine some dry grass."
msgstr ""
#: init.lua
msgid "Desert Discoverer"
msgstr ""
#: init.lua
msgid "Mine your first cactus."
msgstr ""
#: init.lua
msgid "Far Lands"
msgstr ""
#: init.lua
msgid "Mine your first dry shrub."
msgstr ""
#: init.lua
msgid "Glacier Discoverer"
msgstr ""
#: init.lua
msgid "Mine your first ice."
msgstr ""
#: init.lua
msgid "Very Simple Snow Man"
msgstr ""
#: init.lua
msgid "Place two snow blocks."
msgstr ""
#: init.lua
msgid "First Gold Find"
msgstr ""
#: init.lua
msgid "Mine your first gold ore."
msgstr ""
#: init.lua
msgid "Gold Rush"
msgstr ""
#: init.lua
msgid "Mine 45 gold ores."
msgstr ""
#: init.lua
msgid "Wow, I am Diamonds!"
msgstr ""
#: init.lua
msgid "Mine your first diamond ore."
msgstr ""
#: init.lua
msgid "Girl's Best Friend"
msgstr ""
#: init.lua
msgid "Mine 18 diamond ores."
msgstr ""
#: init.lua
msgid "Hardest Block on Earth"
msgstr ""
#: init.lua
msgid "Craft a diamond block."
msgstr ""
#: init.lua
msgid "In the Dungeon"
msgstr ""
#: init.lua
msgid "Mine a mossy cobblestone."
msgstr ""
#: init.lua
msgid "Smelter"
msgstr ""
#: init.lua
msgid "Craft 10 furnaces."
msgstr ""
#: init.lua
msgid "Treasurer"
msgstr ""
#: init.lua
msgid "Craft 15 chests."
msgstr ""
#: init.lua
msgid "Bankier"
msgstr ""
#: init.lua
msgid "Craft 30 locked chests."
msgstr ""
#: init.lua
msgid "Bricker"
msgstr ""
#: init.lua
msgid "Craft 200 brick blocks."
msgstr ""
#: init.lua
msgid "House of Obsidian"
msgstr ""
#: init.lua
msgid "Craft 100 obsidian bricks."
msgstr ""
#: init.lua
msgid "Build a Cave"
msgstr ""
#: init.lua
msgid "Place 100 stone."
msgstr ""
#: init.lua
msgid "Long Ladder"
msgstr ""
#: init.lua
msgid "Place 400 wooden ladders."
msgstr ""
#: init.lua
msgid "Industrial Age"
msgstr ""
#: init.lua
msgid "Place 40 steel ladders."
msgstr ""
#: init.lua
msgid "Yummy!"
msgstr ""
#: init.lua
msgid "Eat 80 apples."
msgstr ""
#: init.lua
msgid "Glasser"
msgstr ""
#: init.lua
msgid "Craft 14 vessels shelves."
msgstr ""
#: init.lua
msgid "Farming Skills Acquired"
msgstr ""
#: init.lua
msgid "Harvest a fully grown wheat plant."
msgstr ""
#: init.lua
msgid "Field Worker"
msgstr ""
#: init.lua
msgid "Harvest 25 fully grown wheat plants."
msgstr ""
#: init.lua
msgid "Aspiring Farmer"
msgstr ""
#: init.lua
msgid "Harvest 125 fully grown wheat plants."
msgstr ""
#: init.lua
msgid "Wheat Magnate"
msgstr ""
#: init.lua
msgid "Harvest 625 fully grown wheat plants."
msgstr ""
#: init.lua
msgid "Baker"
msgstr ""
#: init.lua
msgid "Eat 10 loaves of bread."
msgstr ""
#: init.lua
msgid "Wool Over Your Eyes"
msgstr ""
#: init.lua
msgid "Craft 250 white wool."
msgstr ""
#: init.lua
msgid "Hotelier"
msgstr ""
#: init.lua
msgid "Craft 15 fancy beds."
msgstr ""
#: init.lua
msgid "Filthy Rich"
msgstr ""
#: init.lua
msgid "Craft 24 gold block stairs."
msgstr ""
#: init.lua
msgid "Roses Are Red"
msgstr ""
#: init.lua
msgid "Craft 400 red dyes."
msgstr ""
#: init.lua
msgid "Dandelions are Yellow"
msgstr ""
#: init.lua
msgid "Craft 400 yellow dyes."
msgstr ""
#: init.lua
msgid "Geraniums are Blue"
msgstr ""
#: init.lua
msgid "Craft 400 blue dyes."
msgstr ""
#: init.lua
msgid "White Color Stock"
msgstr ""
#: init.lua
msgid "Craft 100 white dyes."
msgstr ""
#: init.lua
msgid "Tasty Mushrooms"
msgstr ""
#: init.lua
msgid "Eat 3 brown mushrooms."
msgstr ""
#: init.lua
msgid "Mushroom Lover"
msgstr ""
#: init.lua
msgid "Eat 33 brown mushrooms."
msgstr ""
#: init.lua
msgid "Underground Mushroom Farmer"
msgstr ""
#: init.lua
msgid "Eat 333 brown mushrooms."
msgstr ""
#: init.lua
msgid "Builder"
msgstr ""
#: init.lua
msgid "Constructor"
msgstr ""
#: init.lua
msgid "Architect"
msgstr ""
#: init.lua
msgid "Master Architect"
msgstr ""
#: chat_commands.lua
msgid "[c|clear|disable|enable]"
msgstr ""
#: chat_commands.lua
msgid "Show, clear, disable or enable your achievements"
msgstr ""
#: chat_commands.lua
msgid ""
"All your awards and statistics have been cleared. You can now start again."
msgstr ""
#: chat_commands.lua
msgid "You have disabled your achievements."
msgstr ""
#: chat_commands.lua
msgid "You have enabled your achievements."
msgstr ""
#: chat_commands.lua
msgid "<achievement ID>"
msgstr ""
#: chat_commands.lua
msgid "Show details of an achievement"
msgstr ""
#: chat_commands.lua
msgid "Achievement not found."
msgstr ""
#: chat_commands.lua
msgid "<name>"
msgstr ""
#: chat_commands.lua
msgid "Get the achievements statistics for the given player or yourself"
msgstr ""

View File

@ -1,61 +0,0 @@
Achievement Unlocked: =
Light It Up =
Place 100 torches. =
Light ALL The Things! =
Place 1,000 torches. =
Saint-Maclou =
Place 20 coal checkers. =
Castorama =
Place 20 iron checkers. =
Sam the Trapper =
Place 2 trap stones. =
Obsessed with Obsidian =
Mine 50 obsidian. =
On The Way =
Place 100 rails. =
Lumberjack =
Dig 100 tree blocks. =
Semi-pro Lumberjack =
Dig 1,000 tree blocks. =
Professional Lumberjack =
Dig 10,000 tree blocks. =
L33T Lumberjack =
Dig 100,000 tree blocks. =
Junglebaby =
Dig 100 jungle tree blocks. =
Jungleman =
Dig 1,000 jungle tree blocks. =
First Mese Find =
Find some Mese. =
You're a copper =
Dig 1,000 copper ores. =
OMG, Nyan Cat! =
Find a nyan cat. =
Mini Miner =
Dig 100 stone blocks. =
Hardened Miner =
Dig 1,000 stone blocks =
Master Miner =
Dig 10,000 stone blocks. =
Marchand De Sable =
Dig 1,000 sand. =
Frequent Visitor =
Connect to the server 50 times. =
Dying Spree =
Die 5 times. =
Bot-like =
Die 10 times. =
You Suck! =
Die 100 times. =
You're a witch! =
Burn to death in a fire. =
In the Flow =
Die in flowing lava. =
This is Sad =
Die near diamond ore. =
The Stack =
Die near bones. =
Deep Down =
Die below -10000 =
In space, no one can hear you scream =
Die above 10000 =

View File

@ -2,6 +2,7 @@ name = awards
title = Achievements
author = rubenwardy
description = Adds achievements to Minetest, and an API to register new ones.
license = LGPL 2.1 or later
optional_depends = intllib,sfinv,unified_inventory,default,stairs,farming,dye,beds,wool,vessels,moreblocks,fire,flowers
license = LGPLv2.1+
forum = https://forum.minetest.net/viewtopic.php?t=4870
version = 2.1
version = 2.3.0

138
readme.md
View File

@ -1,138 +0,0 @@
# Awards
by Andrew "Rubenwardy" Ward, LGPL 2.1 or later.
This mod adds achievements to Minetest.
Majority of awards are back ported from Calinou's
old fork in Carbone, under same license.
# Basic API
* awards.register_achievement(name, def)
* name
* desciption
* sound [optional]
* image [optional] - texture name, eg: award_one.png
* background [optional] - texture name, eg: award_one.png
* trigger [optional] [table]
* type - "dig", "place", "craft", "death", "chat" or "join"
* (for dig/place type) node - the nodes name
* (for craft type) item - the items name
* (for all types) target - how many to dig / place
* See Triggers
* secret [optional] - if true, then player needs to unlock to find out what it is.
* on_unlock [optional] - func(name, def)
* name is player name
* return true to cancel register_on_unlock callbacks and HUD
* awards.register_trigger(name, func(awardname, def))
* Note: awards.on[name] is automatically created for triggers
* awards.run_trigger_callbacks(player, data, trigger, table_func(entry))
* Goes through and checks all triggers registered to a trigger type,
unlocking the award if conditions are met.
* data is the player's award data, ie: awards.players[player_name]
* trigger is the name of the trigger type. Ie: awards.on[trigger]
* table_func is called if the trigger is a table - simply return an
award name to unlock it
* See triggers.lua for examples
* awards.increment_item_counter(data, field, itemname)
* add to an item's statistic count
* for example, (data, "place", "default:stone") will add 1 to the number of
times default:stone has been placed.
* data is the player's award data, ie: awards.players[player_name]
* returns true on success, false on failure (eg: cannot get modname and item from itemname)
* awards.register_on_unlock(func(name, def))
* name is the player name
* def is the award def.
* return true to cancel HUD
* awards.unlock(name, award)
* gives an award to a player
* name is the player name
# Included in the Mod
The API, above, allows you to register awards
and triggers (things that look for events and unlock awards, they need
to be registered in order to get details from award_def.trigger).
However, all awards and triggers are separate from the API.
They can be found in init.lua and triggers.lua
## Triggers
Callbacks (register a function to be run)
### dig
trigger = {
type = "dig",
node = "default:dirt",
target = 50
}
### place
trigger = {
type = "place",
node = "default:dirt",
target = 50
}
### death
trigger = {
type = "death",
target = 5
}
### chat
trigger = {
type = "chat",
target = 100
}
### join
trigger = {
type = "join",
target = 100
}
## Callbacks relating to triggers
* awards.register_on_dig(func(player, data))
* data is player data (see below)
* return award name or null
* awards.register_on_place(func(player, data))
* data is player data (see below)
* return award name or null
* awards.register_on_death(func(player, data))
* data is player data (see below)
* return award name or null
* awards.register_on_chat(func(player, data))
* data is player data (see below)
* return award name or null
* awards.register_on_join(func(player, data)
* data is player data (see below)
* return award name or null
# Player Data
A list of data referenced/hashed by the player's name.
* player name
* name [string]
* count [table] - dig counter
* modname [table]
* itemname [int]
* place [table] - place counter
* modname [table]
* itemname [int]
* craft [table] - craft counter
* modname [table]
* itemname [int]
* deaths
* chats
* joins

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

BIN
textures/awards_house.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 B

BIN
textures/awards_level1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 B

BIN
textures/awards_level2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 B

BIN
textures/awards_level3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

BIN
textures/awards_level4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

BIN
textures/awards_level5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

BIN
textures/awards_level6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 B

BIN
textures/awards_level7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

View File

Before

Width:  |  Height:  |  Size: 564 B

After

Width:  |  Height:  |  Size: 564 B

View File

Before

Width:  |  Height:  |  Size: 455 B

After

Width:  |  Height:  |  Size: 455 B

View File

Before

Width:  |  Height:  |  Size: 374 B

After

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

View File

Before

Width:  |  Height:  |  Size: 322 B

After

Width:  |  Height:  |  Size: 322 B

BIN
textures/awards_ui_bags.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 B

BIN
textures/awards_ui_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 322 B

After

Width:  |  Height:  |  Size: 322 B

22
tools/updatepo.sh Executable file
View File

@ -0,0 +1,22 @@
#! /bin/bash
# To create a new translation:
# msginit --locale=ll_CC -o locale/ll_CC.po -i locale/template.pot
cd "$(dirname "${BASH_SOURCE[0]}")/..";
# Extract translatable strings.
xgettext --from-code=UTF-8 \
--keyword=S \
--keyword=NS:1,2 \
--keyword=N_ \
--add-comments='Translators:' \
--add-location=file \
-o locale/template.pot \
$(find . -name '*.lua')
# Update translations.
find locale -name '*.po' | while read -r file; do
echo $file
msgmerge --update $file locale/template.pot;
done

View File

@ -14,198 +14,124 @@
-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--
awards.register_trigger("dig", function(def)
local tmp = {
award = def.name,
node = def.trigger.node,
target = def.trigger.target
}
table.insert(awards.on.dig, tmp)
end)
awards.register_trigger("place", function(def)
local tmp = {
award = def.name,
node = def.trigger.node,
target = def.trigger.target
}
table.insert(awards.on.place, tmp)
end)
awards.register_trigger("death", function(def)
local tmp = {
award = def.name,
target = def.trigger.target
}
table.insert(awards.on.death, tmp)
end)
awards.register_trigger("chat", function(def)
local tmp = {
award = def.name,
target = def.trigger.target
}
table.insert(awards.on.chat, tmp)
end)
awards.register_trigger("join", function(def)
local tmp = {
award = def.name,
target = def.trigger.target
}
table.insert(awards.on.join, tmp)
end)
awards.register_trigger("craft", function(def)
local tmp = {
award = def.name,
item = def.trigger.item,
target = def.trigger.target
}
table.insert(awards.on.craft, tmp)
end)
-- Backwards compatibility
awards.register_onDig = awards.register_on_dig
awards.register_onPlace = awards.register_on_place
awards.register_onDeath = awards.register_on_death
awards.register_onChat = awards.register_on_chat
awards.register_onJoin = awards.register_on_join
awards.register_onCraft = awards.register_on_craft
-- Trigger Handles
minetest.register_on_dignode(function(pos, oldnode, digger)
if not digger or not pos or not oldnode then
return
end
local data = awards.players[playern]
if not awards.increment_item_counter(data, "count", oldnode.name) then
return
end
awards.run_trigger_callbacks(digger, data, "dig", function(entry)
if entry.node and entry.target then
local tnodedug = string.split(entry.node, ":")
local tmod = tnodedug[1]
local titem = tnodedug[2]
if not tmod or not titem or not data.count[tmod] or not data.count[tmod][titem] then
-- table running failed!
elseif data.count[tmod][titem] > entry.target-1 then
return entry.award
end
end
end)
end)
minetest.register_on_placenode(function(pos, node, digger)
if not digger or not pos or not node or not digger:get_player_name() or digger:get_player_name()=="" then
return
end
local data = awards.players[playern]
if not awards.increment_item_counter(data, "place", node.name) then
return
end
awards.run_trigger_callbacks(digger, data, "place", function(entry)
if entry.node and entry.target then
local tnodedug = string.split(entry.node, ":")
local tmod = tnodedug[1]
local titem = tnodedug[2]
if not tmod or not titem or not data.place[tmod] or not data.place[tmod][titem] then
-- table running failed!
elseif data.place[tmod][titem] > entry.target-1 then
return entry.award
end
end
end)
end)
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
if not player or not itemstack then
return
end
local data = awards.players[playern]
if not awards.increment_item_counter(data, "craft", itemstack:get_name()) then
return
end
awards.run_trigger_callbacks(player, data, "craft", function(entry)
if entry.item and entry.target then
local titemcrafted = string.split(entry.item, ":")
local tmod = titemcrafted[1]
local titem = titemcrafted[2]
if not tmod or not titem or not data.craft[tmod] or not data.craft[tmod][titem] then
-- table running failed!
elseif data.craft[tmod][titem] > entry.target-1 then
return entry.award
end
end
end)
end)
minetest.register_on_dieplayer(function(player)
-- Run checks
local name = player:get_player_name()
if not player or not name or name=="" then
return
end
-- Get player
awards.assertPlayer(name)
local data = awards.players[name]
-- Increment counter
data.deaths = data.deaths + 1
awards.run_trigger_callbacks(player, data, "death", function(entry)
if entry.target and entry.award and data.deaths and
data.deaths >= entry.target then
return entry.award
end
end)
end)
minetest.register_on_joinplayer(function(player)
-- Run checks
local name = player:get_player_name()
if not player or not name or name=="" then
return
end
-- Get player
awards.assertPlayer(name)
local data = awards.players[name]
-- Increment counter
data.joins = data.joins + 1
awards.run_trigger_callbacks(player, data, "join", function(entry)
if entry.target and entry.award and data.joins and
data.joins >= entry.target then
return entry.award
end
end)
end)
awards.register_trigger("chat", {
type = "counted",
progress = "@1/@2 chat messages",
auto_description = { "Send a chat message", "Chat @1 times" },
})
minetest.register_on_chat_message(function(name, message)
-- Run checks
local idx = string.find(message,"/")
if not name or (idx ~= nil and idx <= 1) then
local player = minetest.get_player_by_name(name)
if not player or string.find(message, "/") then
return
end
-- Get player
awards.assertPlayer(name)
local data = awards.players[name]
local player = minetest.get_player_by_name(name)
awards.notify_chat(player)
end)
-- Increment counter
data.chats = data.chats + 1
awards.run_trigger_callbacks(player, data, "chat", function(entry)
if entry.target and entry.award and data.chats and
data.chats >= entry.target then
return entry.award
awards.register_trigger("join", {
type = "counted",
progress = "@1/@2 joins",
auto_description = { "Join once", "Join @1 times" },
})
minetest.register_on_joinplayer(awards.notify_join)
awards.register_trigger("death", {
type = "counted_key",
progress = "@1/@2 deaths",
auto_description = { "Die once of @2", "Die @1 times of @2" },
auto_description_total = { "Die @1 times.", "Mine @1 times" },
get_key = function(self, def)
return def.trigger.reason
end,
})
minetest.register_on_dieplayer(function(player, reason)
if reason then
reason = reason.type
else
reason = "unknown"
end
awards.notify_death(player, reason)
end)
awards.register_trigger("dig", {
type = "counted_key",
progress = "@1/@2 dug",
auto_description = { "Mine: @2", "Mine: @1×@2" },
auto_description_total = { "Mine @1 block.", "Mine @1 blocks." },
get_key = function(self, def)
return minetest.registered_aliases[def.trigger.node] or def.trigger.node
end
})
minetest.register_on_dignode(function(pos, node, player)
if not player or not pos or not node then
return
end
local node_name = node.name
node_name = minetest.registered_aliases[node_name] or node_name
awards.notify_dig(player, node_name)
end)
awards.register_trigger("place", {
type = "counted_key",
progress = "@1/@2 placed",
auto_description = { "Place: @2", "Place: @1×@2" },
auto_description_total = { "Place @1 block.", "Place @1 blocks." },
get_key = function(self, def)
return minetest.registered_aliases[def.trigger.node] or def.trigger.node
end
})
minetest.register_on_placenode(function(pos, node, player)
if not player or not pos or not node then
return
end
local node_name = node.name
node_name = minetest.registered_aliases[node_name] or node_name
awards.notify_place(player, node_name)
end)
awards.register_trigger("craft", {
type = "counted_key",
progress = "@1/@2 crafted",
auto_description = { "Craft: @2", "Craft: @1×@2" },
auto_description_total = { "Craft @1 item", "Craft @1 items." },
get_key = function(self, def)
return minetest.registered_aliases[def.trigger.item] or def.trigger.item
end
})
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
if not player or itemstack:empty() then
return
end
local itemname = itemstack:get_name()
itemname = minetest.registered_aliases[itemname] or itemname
awards.notify_craft(player, itemname, itemstack:get_count())
end)
awards.register_trigger("eat", {
type = "counted_key",
progress = "@1/@2 eaten",
auto_description = { "Eat @2", "Eat @1×@2" },
auto_description_total = { "Eat @1 item", "Eat @1 items." },
get_key = function(self, def)
return minetest.registered_aliases[def.trigger.item] or def.trigger.item
end
})
minetest.register_on_item_eat(function(_, _, itemstack, player, _)
if not player or itemstack:empty() then
return
end
local itemname = itemstack:get_name()
itemname = minetest.registered_aliases[itemname] or itemname
awards.notify_craft(player, itemname, itemstack:get_count())
end)