ajustes diversos

master
BrunoMine 2018-12-28 00:07:44 -02:00
parent cabbe5d314
commit 5d3b190ad8
23 changed files with 798 additions and 95 deletions

16
API.txt
View File

@ -3,12 +3,9 @@ API taverna_barbara
==============> Spawnar criaturas na taverna <==============
Esse mod pode ser usado para spawnar criaturas/personagens
dentro das tavernas. Todos as tavernas podem ter 3 tipos
de carpetes:
*Marrom (macronodes:carpete_marrom)
*Cinza Escuro (macronodes:carpete_cinzaescuro)
*Vermelho (macronodes:carpete_vermelho)
Portanto, o personagem deve poder aparecer nos 3 tipos,
dentro das tavernas. Todos as tavernas devem ter o carpete
vermelho especifico (itemstring: taverna_barbara:carpete)
Portanto, o personagem deve poder aparecer no carpete,
pois eles sinalizam a area da taverna onde mobs devem
surgir/spawnar. Compativel com o cme (creatures MOB-Engine)
Cuidado pois os mobs podem acabar saindo pela porta e se
@ -20,11 +17,8 @@ definir um comportamento para ele)
=================> Estrutura das tavernas <=================
Devem ter exatos 12 blocos de cada lado e altura de 15
blocos.
Deve conter os carpetes abaixo para definir areas de spawn
de personagens para outros mods:
*Marrom (macronodes:carpete_marrom)
*Cinza Escuro (macronodes:carpete_cinzaescuro)
*Vermelho (macronodes:carpete_vermelho)
Deve conter o carpete especifico para tavernas
(itemstring: taverna_barbara:carpete)
Usar o bau do trambiqueiro e o piso do barman nos lugares
corretos.
Serializar com o comando auxiliar no arquivo comandos.lua

38
carpete.lua Normal file
View File

@ -0,0 +1,38 @@
--[[
Mod Taverna_Barbara para Minetest
Copyright (C) 2018 BrunoMine (https://github.com/BrunoMine)
Recebeste uma cópia da GNU Lesser General
Public License junto com esse software,
se não, veja em <http://www.gnu.org/licenses/>.
Carpete
]]
-- Tradução de strings
local S = taverna_barbara.S
-- Carpete de palha
minetest.register_node("taverna_barbara:carpete", {
description = S("Carpete de Taverna Barbara"),
tiles = {"wool_red.png"},
drawtype = "nodebox",
paramtype = "light",
liquids_pointable = false,
walkable = false,
buildable_to = true,
drop = {},
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}
}
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}
},
groups = {choppy=2,oddly_breakable_by_hand=3,flammable=1,attached_node=1,fall_damage_add_percent=-5},
sounds = default.node_sound_leaves_defaults(),
})

View File

@ -1,72 +0,0 @@
--[[
Mod Taverna_Barbara para Minetest
Copyright (C) 2017 BrunoMine (https://github.com/BrunoMine)
Recebeste uma cópia da GNU Lesser General
Public License junto com esse software,
se não, veja em <http://www.gnu.org/licenses/>.
Comandos
]]
local modpath = minetest.get_modpath("taverna_barbara")
-- Comando de serializar estrutura
minetest.register_chatcommand("taverna_barbara", {
privs = {server=true},
params = "[<s> <numero> | Serializar uma estrutura com sulfixo <numero> || <d> <numero> | Deserializar uma estrutura com sulfixo <numero>]",
description = "Serializa e Desarializar uma estrutura",
func = function(name, param)
local m = string.split(param, " ")
local param1, param2 = m[1], m[2]
if param1 == "s" then
if tonumber(param2) then
local player = minetest.get_player_by_name(name)
local pos = player:getpos()
local arquivo = modpath .. "/estruturas/taverna_barbara_"..param2..".mts"
minetest.create_schematic(pos, {x=pos.x+11, y=pos.y+14, z=pos.z+11}, {}, arquivo)
minetest.chat_send_player(name, "Estrutura de taverna barbara "..param2.." salva com sucesso")
else
minetest.chat_send_player(name, "Numero de estrutura invalida")
end
elseif param1 == "d" then
if tonumber(param2) then
local player = minetest.get_player_by_name(name)
local pos = player:getpos()
local arquivo = modpath .. "/estruturas/taverna_barbara_"..param2..".mts"
minetest.place_schematic(pos, arquivo, nil, nil, true)
minetest.chat_send_player(name, "Estrutura de taverna barbara "..param2.." criada com sucesso")
else
minetest.chat_send_player(name, "Numero de estrutura invalida")
end
else
minetest.chat_send_player(name, "Comando invalido")
end
end
})
-- Comando de deserializar estrutura
minetest.register_chatcommand("d", {
privs = {server=true},
params = "[<arquivo/nome> <largura> <altura>]",
description = "Deserializa uma estrutura",
func = function(name, param)
local m = string.split(param, " ")
local param1, param2, param3 = m[1], m[2], m[3]
if param1 then
local player = minetest.get_player_by_name(name)
local pos = player:getpos()
if gestor.estruturador.carregar(pos, param1, param2, param3, modpath) then
minetest.chat_send_player(name, "Estrutura deserializada com sucesso")
else
minetest.chat_send_player(name, "Falha ao deserializar estrutura")
end
else
minetest.chat_send_player(name, "Comando invalido")
end
end
})

View File

@ -25,8 +25,9 @@ minetest.register_craftitem("taverna_barbara:cerveja", {
return itemstack
end,
})
hbhunger.register_food("taverna_barbara:cerveja", 4, "macronodes:garrafa_vidro", nil, 2, "taverna_barbara_bebendo_garrafa_de_vidro")
if hbhunger then
hbhunger.register_food("taverna_barbara:cerveja", 4, "macronodes:garrafa_vidro", nil, 2, "taverna_barbara_bebendo_garrafa_de_vidro")
end
-- Whisky
minetest.register_craftitem("taverna_barbara:whisky", {
@ -43,8 +44,9 @@ minetest.register_craftitem("taverna_barbara:whisky", {
return itemstack
end,
})
hbhunger.register_food("taverna_barbara:whisky", 5, "macronodes:garrafa_vidro", nil, 4, "taverna_barbara_bebendo_garrafa_de_vidro")
if hbhunger then
hbhunger.register_food("taverna_barbara:whisky", 5, "macronodes:garrafa_vidro", nil, 4, "taverna_barbara_bebendo_garrafa_de_vidro")
end
-- Amendoim Crocante
minetest.register_craftitem("taverna_barbara:amendoim", {
@ -53,7 +55,9 @@ minetest.register_craftitem("taverna_barbara:amendoim", {
stack_max = 20,
on_use = core.item_eat(2),
})
hbhunger.register_food("taverna_barbara:amendoim", 20, nil, nil, nil, "taverna_barbara_comendo_amendoim")
if hbhunger then
hbhunger.register_food("taverna_barbara:amendoim", 20, nil, nil, nil, "taverna_barbara_comendo_amendoim")
end
-- Balinha Sortida
minetest.register_craftitem("taverna_barbara:balinha_sortida", {
@ -63,8 +67,9 @@ minetest.register_craftitem("taverna_barbara:balinha_sortida", {
stack_max = 20,
on_use = core.item_eat(0)
})
hbhunger.register_food("taverna_barbara:balinha_sortida", 0, nil, nil, nil, "taverna_barbara_balinha_sortida")
if hbhunger then
hbhunger.register_food("taverna_barbara:balinha_sortida", 0, nil, nil, nil, "taverna_barbara_balinha_sortida")
end
-- Batanoura Defumada (Cruzamento de Batata com Cenoura)
minetest.register_craftitem("taverna_barbara:batanoura_defumada", {
@ -73,4 +78,6 @@ minetest.register_craftitem("taverna_barbara:batanoura_defumada", {
stack_max = 10,
on_use = core.item_eat(4)
})
hbhunger.register_food("taverna_barbara:batanoura_defumada", 4)
if hbhunger then
hbhunger.register_food("taverna_barbara:batanoura_defumada", 4)
end

View File

@ -1,7 +1,7 @@
default
hbhunger
hbhunger?
creatures
plagen
vessels
macromoney
areas?
wool

Binary file not shown.

Binary file not shown.

View File

@ -22,6 +22,11 @@ local modpath = minetest.get_modpath("taverna_barbara")
-- Variavel global
taverna_barbara = {}
-- Plagen
taverna_barbara.plagen = dofile(modpath.."/lib/plagen.lua")
dofile(modpath.."/tradutor.lua")
-- Carregar scripts
notificar("Carregando...")
dofile(modpath.."/diretrizes.lua")
@ -30,6 +35,6 @@ dofile(modpath.."/craftitens.lua")
dofile(modpath.."/nodes.lua")
dofile(modpath.."/barman.lua")
dofile(modpath.."/trambiqueiro.lua")
dofile(modpath.."/comandos.lua")
dofile(modpath.."/carpete.lua")
dofile(modpath.."/mapgen.lua")
notificar("OK")

45
lib/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

365
lib/plagen.lua Normal file
View File

@ -0,0 +1,365 @@
--[[
Lib Plagen para Minetest
Plagen v2.0.0 Copyright (C) 2017 BrunoMine (https://github.com/BrunoMine)
Recebeste uma cópia da GNU Lesser General
Public License junto com esse software,
se não, veja em <http://www.gnu.org/licenses/>.
Autoria do código:
Originalmente por BrunoMine, Bruno Borges <borgesdossantosbruno@gmail.com>
]]
local plagen = {}
-- Metodo para pegar blocos mesmo nao carregados
local function pegar_node(pos)
local node = minetest.get_node(pos)
if node.name == "ignore" then
minetest.get_voxel_manip():read_from_map(pos, pos)
node = minetest.get_node(pos)
end
return node
end
-- Calcular diferença do novo degrau
local function calc_dif(y, y1, y2)
if y2 > y1 then
return y + 1
elseif y2 < y1 then
return y - 1
else
return y
end
end
-- Metodo para colocar um nivel de blocos (como um solo)
local function montar_solo(pos, solo, subsolo, rocha)
if not pos or not solo or not subsolo or not rocha then
return false
end
local miny = pos.y-20
local maxy = pos.y+20
for y=miny, maxy do
if y < pos.y - 2 then
minetest.set_node({x=pos.x,y=y,z=pos.z}, {name=rocha})
elseif y < pos.y then
minetest.set_node({x=pos.x,y=y,z=pos.z}, {name=subsolo})
elseif y == pos.y then
minetest.set_node({x=pos.x,y=y,z=pos.z}, {name=solo})
else
minetest.remove_node({x=pos.x,y=y,z=pos.z})
end
end
return true
end
-- Encontrar altura de um bloco alvo (em uma coluna)
local pegar_altura_solo = function(pos, alvos, amplitude)
local y = pos.y + amplitude
local resp = pos.y
while y >= pos.y - amplitude do
if table.maxn(minetest.find_nodes_in_area({x=pos.x,y=y,z=pos.z}, {x=pos.x,y=y,z=pos.z}, alvos)) == 1 then
resp = y
break
end
y = y - 1
end
return resp
end
-- Planificar uma area
--[[
Esse metodo planifica uma area
Retornos:
<booleano> true para operação bem sucedida e false para nao sucedida
Argumentos:
<pos> do centro da area a ser planificada
<tipo> tipo de planificação
"quadrada" para planificar uma area quadrada
<largura> largura da area planificada
<amplitude> Quantidade de blocos para cima e para baixo em que ocorre a operação (colocação de blocos)
<nodes> É o material utilizado na planificação
{rocha="string", subsolo="string", solo="string"}
<borda> É quantos blocos a partir da area planificada serão afetado para formar os degrais
<calc_media> é booleano para planificar em uma faixa de altura média da area a planificar
<verif_mapa> Verificar se o mapa está gerado por segurança
]]
local solos_gerais = {"group:soil", "group:stone", "group:sand"}
plagen.planificar = function(pos, tipo, largura, amplitude, nodes, borda, calc_media, verif_mapa)
-- Verificar dados
if not pos then
minetest.log("error", "[Plagen] Tabela 'pos' nula (em plagen.planificar)")
return false
end
if not tipo then
minetest.log("error", "[Plagen] String de 'tipo' nula (em plagen.planificar)")
return false
end
if not largura then
minetest.log("error", "[Plagen] Variavel 'largura' nula (em plagen.planificar)")
return false
end
if not amplitude then
minetest.log("error", "[Plagen] Variavel 'amplitude' nula (em plagen.planificar)")
return false
end
if not nodes then
minetest.log("error", "[Plagen] Tabela 'nodes' nula (em plagen.planificar)")
return false
end
-- Refino de dados
if tipo ~= "quadrada" then
minetest.log("error", "[Plagen] Tipo de planificacao "..dump(tipo).." invalida (em plagen.planificar)")
return false
end
if not nodes.rocha then
minetest.log("error", "[Plagen] Tabela 'nodes' nao tem 'rocha' definido (em plagen.planificar)")
return false
end
if not nodes.subsolo then
minetest.log("error", "[Plagen] Tabela 'nodes' nao tem 'subsolo' definido (em plagen.planificar)")
return false
end
if not nodes.solo then
minetest.log("error", "[Plagen] Tabela 'nodes' nao tem 'solo' definido (em plagen.planificar)")
return false
end
-- Reajuste de dados
if not borda then borda = 0 end
-- Criado variaveis auxiliares
-- Materiais
local solo = nodes.solo
local subsolo = nodes.subsolo
local rocha = nodes.rocha
-- Distancia do centro a borda da area plana
local dist = math.ceil(largura/2) -- arredonda pra cima
-- Coordenadas da area plana
local minp = {x=pos.x-dist, z=pos.z-dist}
local maxp = {x=pos.x+dist, z=pos.z+dist}
-- Altura da area plana
local altura = pos.y
-- Verificar se o mapa está gerado
if verif_mapa then
local d = borda + dist
local node1 = pegar_node({x=pos.x+d, y=pos.y+borda, z=pos.z})
local node2 = pegar_node({x=pos.x-d, y=pos.y+borda, z=pos.z})
local node3 = pegar_node({x=pos.x, y=pos.y+borda, z=pos.z+d})
local node4 = pegar_node({x=pos.x, y=pos.y+borda, z=pos.z-d})
local node5 = pegar_node({x=pos.x+d, y=pos.y-borda, z=pos.z})
local node6 = pegar_node({x=pos.x-d, y=pos.y-borda, z=pos.z})
local node7 = pegar_node({x=pos.x, y=pos.y-borda, z=pos.z+d})
local node8 = pegar_node({x=pos.x, y=pos.y-borda, z=pos.z-d})
if node1.name == "ignore" or node2.name == "ignore" or node3.name == "ignore" or node4.name == "ignore"
or node5.name == "ignore" or node6.name == "ignore" or node7.name == "ignore" or node8.name == "ignore"
then
return false
end
end
-- Calcular altura média dos blocos de solo na area a ser aplanada para definir a altura mais adequada
if calc_media then
local nodes = minetest.find_nodes_in_area(
{x=minp.x, y=pos.y-amplitude, z=minp.z},
{x=maxp.x, y=pos.y+amplitude, z=maxp.z},
{solo}
)
local n = 0
for _, vpos in ipairs(nodes) do
n = n + vpos.y
end
if table.maxn(nodes) > 0 then
altura = math.ceil(n/table.maxn(nodes))
end
end
-- Inicia um processo de planagem
if tipo == "quadrada" then
-- Montar faixa de terra plana
for x=minp.x, maxp.x do
for z=minp.z, maxp.z do
montar_solo({x=x,y=altura,z=z}, solo, subsolo, rocha)
end
end
-- Montar degrais de blocos (em direção a borda)
if borda > 0 then
for degrau=1, borda do
--[[
y1 é a altura do degrau já construindo
y2 é a altura do degrau que será contruindo
]]
-- Montar fileira de Degrais X+
for z=minp.z, maxp.z do
local p = {x=maxp.x,y=altura,z=z}
local y1 = pegar_altura_solo(p, {solo}, amplitude)
p.y = y1
p.x = p.x + 1
local y2 = pegar_altura_solo(p, solos_gerais, amplitude)
-- Verifica precipicios
if y2 == false then y2 = y1 end
-- Calcula novo degrau
p.y = calc_dif(p.y, y1, y2)
montar_solo(p, solo, subsolo, rocha)
end
-- Montar fileira de Degrais X-
for z=minp.z, maxp.z do
local p = {x=minp.x,y=altura,z=z}
local y1 = pegar_altura_solo(p, {solo}, amplitude)
p.y = y1
p.x = p.x - 1
local y2 = pegar_altura_solo(p, solos_gerais, amplitude)
-- Verifica precipicios
if y2 == false then y2 = y1 end
-- Calcula novo degrau
p.y = calc_dif(p.y, y1, y2)
montar_solo(p, solo, subsolo, rocha)
end
-- Montar fileira de Degrais Z+
for x=minp.x, maxp.x do
local p = {x=x,y=altura,z=maxp.z}
local y1 = pegar_altura_solo(p, {solo}, amplitude)
p.y = y1
p.z = p.z + 1
local y2 = pegar_altura_solo(p, solos_gerais, amplitude)
-- Verifica precipicios
if y2 == false then y2 = y1 end
-- Calcula novo degrau
p.y = calc_dif(p.y, y1, y2)
montar_solo(p, solo, subsolo, rocha)
end
-- Montar fileira de Degrais Z-
for x=minp.x, maxp.x do
local p = {x=x,y=altura,z=minp.z}
local y1 = pegar_altura_solo(p, {solo}, amplitude)
p.y = y1
p.z = p.z - 1
local y2 = pegar_altura_solo(p, solos_gerais, amplitude)
-- Verifica precipicios
if y2 == false then y2 = y1 end
-- Calcula novo degrau
p.y = calc_dif(p.y, y1, y2)
montar_solo(p, solo, subsolo, rocha)
end
-- Montar quinas
-- Quina X+Z+
local p = {x=maxp.x,y=altura,z=maxp.z}
local y1 = pegar_altura_solo(p, {solo}, amplitude)
p.y = y1
p.x = p.x + 1
p.z = p.z + 1
local y2 = pegar_altura_solo(p, solos_gerais, amplitude)
-- Verifica precipicios
if y2 == false then y2 = y1 end
-- Calcula novo degrau
p.y = calc_dif(p.y, y1, y2)
montar_solo(p, solo, subsolo, rocha)
-- Quina X+Z-
p = {x=maxp.x,y=altura,z=minp.z}
y1 = pegar_altura_solo(p, {solo}, amplitude)
p.y = y1
p.x = p.x + 1
p.z = p.z - 1
y2 = pegar_altura_solo(p, solos_gerais, amplitude)
-- Verifica precipicios
if y2 == false then y2 = y1 end
-- Calcula novo degrau
p.y = calc_dif(p.y, y1, y2)
montar_solo(p, solo, subsolo, rocha)
-- Quina X-Z-
p = {x=minp.x,y=altura,z=minp.z}
y1 = pegar_altura_solo(p, {solo}, amplitude)
p.y = y1
p.x = p.x - 1
p.z = p.z - 1
y2 = pegar_altura_solo(p, solos_gerais, amplitude)
-- Verifica precipicios
if y2 == false then y2 = y1 end
-- Calcula novo degrau
p.y = calc_dif(p.y, y1, y2)
montar_solo(p, solo, subsolo, rocha)
-- Quina X-Z+
p = {x=minp.x,y=altura,z=maxp.z}
y1 = pegar_altura_solo(p, {solo}, amplitude)
p.y = y1
p.x = p.x - 1
p.z = p.z + 1
y2 = pegar_altura_solo(p, solos_gerais, amplitude)
-- Verifica precipicios
if y2 == false then y2 = y1 end
-- Calcula novo degrau
p.y = calc_dif(p.y, y1, y2)
montar_solo(p, solo, subsolo, rocha)
-- Preparar para proximo degrau
minp = {x=minp.x-1, z=minp.z-1}
maxp = {x=maxp.x+1, z=maxp.z+1}
end
end
end
-- Remove arvores danificadas perto
local d = borda + dist + 2
local arvores = minetest.find_nodes_in_area(
{x=pos.x-d, y=pos.y+borda, z=pos.z-d},
{x=pos.x+d, y=pos.y-borda, z=pos.z+d},
{"group:tree"}
)
for _, pos in ipairs(arvores) do
minetest.remove_node(pos)
end
-- Terreno aplanado com sucesso
return true
end
return plagen

View File

@ -0,0 +1 @@
barman.lua carpete.lua craftitens.lua nodes.lua protetor.lua trambiqueiro.lua

BIN
locale/en.mo Normal file

Binary file not shown.

23
locale/en.po Normal file
View File

@ -0,0 +1,23 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-12-27 23:36-0200\n"
"PO-Revision-Date: 2018-12-27 23:38-0200\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2\n"
"Last-Translator: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: en\n"
#: carpete.lua
msgid "Carpete de Taverna Barbara"
msgstr "Carpet of the Taverna"

BIN
locale/pt.mo Normal file

Binary file not shown.

23
locale/pt.po Normal file
View File

@ -0,0 +1,23 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-12-27 23:36-0200\n"
"PO-Revision-Date: 2018-12-27 23:36-0200\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2\n"
"Last-Translator: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: pt\n"
#: carpete.lua
msgid "Carpete de Taverna Barbara"
msgstr "Carpete de Taverna Barbara"

View File

@ -0,0 +1,3 @@
### Arquivo gerado por taverna_barbara apartir de en.po
# textdomain: taverna_barbara
Carpet of the Taverna=Carpet of the Taverna

View File

@ -0,0 +1,3 @@
### Arquivo gerado por taverna_barbara apartir de en.po
# textdomain: taverna_barbara
Carpet of the Taverna=Carpet of the Taverna

View File

@ -0,0 +1,3 @@
### Arquivo gerado por taverna_barbara apartir de pt.po
# textdomain: taverna_barbara
Carpet of the Taverna=Carpete de Taverna Barbara

22
locale/template.pot Normal file
View File

@ -0,0 +1,22 @@
# 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: 2018-12-27 23:36-0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: carpete.lua
msgid "Carpete de Taverna Barbara"
msgstr ""

View File

@ -324,7 +324,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
end
-- Planificar area
if plagen.planificar(pos, "quadrada", 14, 40, {solo=node.name, subsolo="default:dirt", rocha="default:stone"}, 6, true, true) == false then
if taverna_barbara.plagen.planificar(pos, "quadrada", 14, 40, {solo=node.name, subsolo="default:dirt", rocha="default:stone"}, 6, true, true) == false then
return false
end

33
tools/xgettext.bat Normal file
View File

@ -0,0 +1,33 @@
@echo off
setlocal
set me=%~n0
rem # Uncomment the following line if gettext is not in your PATH.
rem # Value must be absolute and end in a backslash.
rem set gtprefix=C:\path\to\gettext\bin\
if "%1" == "" (
echo Usage: %me% FILE... 1>&2
exit 1
)
set xgettext=%gtprefix%xgettext.exe
set msgmerge=%gtprefix%msgmerge.exe
md locale > nul 2>&1
echo Generating template... 1>&2
echo %xgettext% --from-code=UTF-8 -kS -kNS:1,2 -k_ -o locale/template.pot %*
%xgettext% --from-code=UTF-8 -kS -kNS:1,2 -k_ -o locale/template.pot %*
if %ERRORLEVEL% neq 0 goto done
cd locale
for %%f in (*.po) do (
echo Updating %%f... 1>&2
%msgmerge% --update %%f template.pot
)
echo DONE! 1>&2
:done

27
tools/xgettext.sh Executable file
View File

@ -0,0 +1,27 @@
#! /bin/bash
me=$(basename "${BASH_SOURCE[0]}");
if [[ $# -lt 1 ]]; then
echo "Usage: $me FILE..." >&2;
exit 1;
fi
mkdir -p locale;
echo "Generating template..." >&2;
xgettext --from-code=UTF-8 \
--keyword=S \
--keyword=NS:1,2 \
--keyword=N_ \
--add-comments='Translators:' \
--add-location=file \
-o locale/template.pot \
"$@" \
|| exit;
find locale -name '*.po' -type f | while read -r file; do
echo "Updating $file..." >&2;
msgmerge --update "$file" locale/template.pot;
done
echo "DONE!" >&2;

183
tradutor.lua Normal file
View File

@ -0,0 +1,183 @@
--[[
Mod taverna_barbara para Minetest
Copyright (C) 2018 BrunoMine (https://github.com/BrunoMine)
Recebeste uma cópia da GNU Lesser General
Public License junto com esse software,
se não, veja em <http://www.gnu.org/licenses/>.
Sistema de tradução
]]
-- Modpath
local modpath = minetest.get_modpath("taverna_barbara")
-- Tradução intllib
taverna_barbara.intllib = {}
taverna_barbara.intllib.S, taverna_barbara.intllib.NS = dofile(modpath.."/lib/intllib.lua")
-- Configura tradutor opicional
taverna_barbara.S = taverna_barbara.intllib.S
taverna_barbara.NS = taverna_barbara.intllib.NS
--
-- Ajustes devido ao bug de tradutor ler apenas traduzir do ingles
--
-- Strings para repassar textos em ingles
local pt_to_en = {}
-- Gera arquivos de tradução taverna_barbara.*.tr
do
local file_to_tb = function(file)
local msgid = nil
local msgstr = nil
local tb = {}
for line in io.lines(file) do
-- Iniciando 'msgid'
if string.sub(line, 1, 5) == "msgid" then
-- Escrever no catalogo a anterior
if msgid ~= nil and msgstr ~= nil then
if msgid ~= "" then
tb[msgid] = msgstr
end
msgid = nil
msgstr = nil
end
if line == "msgid \"\"" then
msgid = ""
else
msgid = string.sub(line, 8, (string.len(line)-1))
end
-- Continuando 'msgid'
elseif string.sub(line, 1, 1) == "\"" and msgstr == nil and msgid ~= nil then
msgid = msgid .. string.sub(line, 2, (string.len(line)-1))
-- Iniciando 'msgstr'
elseif string.sub(line, 1, 6) == "msgstr" then
if line == "msgstr \"\"" then
msgstr = ""
else
msgstr = string.sub(line, 9, (string.len(line)-1))
end
-- Continuando 'msgstr'
elseif string.sub(line, 1, 1) == "\"" and msgstr ~= nil then
msgstr = msgstr .. string.sub(line, 2, (string.len(line)-1))
end
end
-- Escrever ultima
if msgid ~= nil and msgstr ~= nil then
if msgid ~= "" then
tb[msgid] = msgstr
end
msgid = nil
msgstr = nil
end
return tb
end
-- Pegar strings principais en-pt para realizar as trocas
pt_to_en = file_to_tb(modpath.."/locale/en.po")
--minetest.log("error", "pt_to_en = "..dump(pt_to_en))
local list = minetest.get_dir_list(modpath.."/locale")
for _,file in ipairs(list) do
if string.match(file, "~") == nil then
-- Traduções ".po"
if string.match(file, ".pot") == nil and string.match(file, ".po") then
local lang_code = string.gsub(file, ".po", "")
local pt_to_lang = file_to_tb(modpath.."/locale/"..file)
-- tabela desejada
local en_to_lang = {}
for pt,en in pairs(pt_to_en) do
en_to_lang[en] = pt_to_lang[pt]
end
-- Novo arquivo
local new_file = "### Arquivo gerado por taverna_barbara apartir de "..file.."\n# textdomain: taverna_barbara\n"
for en,lang in pairs(en_to_lang) do
new_file = new_file .. en .. "=" .. lang .. "\n"
end
local saida = io.open(modpath.."/locale/taverna_barbara."..lang_code..".tr", "w")
saida:write(new_file)
io.close(saida)
-- Gera arquivo com lang_code nulo para evitar mensagens de erro (bug do minetest)
if lang_code == "en" then
local saida2 = io.open(modpath.."/locale/taverna_barbara..tr", "w")
saida2:write(new_file)
io.close(saida2)
end
end
end
end
end
-- Ajuste para repassar termos em ingles
local s
if minetest.get_translator ~= nil then
s = minetest.get_translator("taverna_barbara")
else
s = taverna_barbara.intllib.S
end
taverna_barbara.s = function(...)
local args = { ... }
if pt_to_en[args[1]] ~= nil then
return s(pt_to_en[args[1]], unpack(args, 2))
end
minetest.log("error", "[taverna_barbara] String "..dump(args[1]).." nao catalogada")
return s(...)
end
-- Não troca string caso esteja trabalhando com intllib
if minetest.get_modpath("intllib") ~= nil
and minetest.get_translator == nil
then
taverna_barbara.s = s
end
taverna_barbara.S = function(...)
local args = { ... }
if type(args[1]) == "table" then
local r = {}
for n,a in ipairs(args[1]) do
if n ~= 1 then -- Não traduz o primeiro
table.insert(r, taverna_barbara.S(a))
else
table.insert(r, a)
end
end
return taverna_barbara.s(unpack(r))
elseif type(args[1]) == "string" then
-- Não traduz caso faltem argumentos (devido strings ilustrativas)
return taverna_barbara.s(...)
else
return args[1]
end
end
-- Função que retorna a string inalterada para passar pela checagem
taverna_barbara.Sfake = function(s) return s end