Compare commits

...

49 Commits

Author SHA1 Message Date
0f78ef70de add arrow symbols to fonts
accessible by putting ^1 to ^8 (think "arrow number 1", etc) in your text
for narrow-width arrows (good for "wide font" highway signs), or ^a to ^h
for double-width arrows (good for all of the normal narrow-font signs).

in order, arrows 1 and "a" point up, 2/b points up-and-right, 3/c points
right, and so on, turning clockwise

Any other ^x pair just renders directly (no escape char, sorry)
2018-10-09 07:49:41 -04:00
fac33e369f Merge branch 'patch-1' into 'master'
pass node information to sign update function, remove all entities on update incase of rogue

See merge request VanessaE/signs_lib!1
2018-09-26 19:21:22 +00:00
00148f4770 remove print 2018-09-26 12:21:17 +00:00
e57faeb8cf pass node information to sign update function, remove all entities on update incase of rogue 2018-09-26 12:13:34 +00:00
6995c3e768 fix screwdriver rotation on all sign types
add it where missing
2018-09-26 05:14:27 -04:00
69b172f001 ditto for orange sign 2018-09-25 22:52:41 -04:00
908a087570 tweak yellow signs to comply with MUTCD 2009 2018-09-25 21:21:12 -04:00
a2f7f62bf2 Merge pull request #32 from Jat15/patch-unknown
Fix crash if sign is "unknown block"
2018-05-24 23:46:32 -04:00
907797ba11 Fix crash if sign is "unknown block" 2018-05-25 03:01:24 +02:00
c30e7ce0fa Merge pull request #26 from codexp/issue-25
add support for cyrillic characters
2018-05-11 09:21:51 -04:00
dc16606b8a Merge pull request #29 from codexp/german-translation
update german translation
2018-05-11 09:00:28 -04:00
2a521af511 Merge pull request #28 from codexp/russian-translation
add Russian translation
2018-05-11 09:00:13 -04:00
2af55ad7c5 update german translation 2018-03-24 22:39:40 +01:00
fa5b88197e add russian translation 2018-03-24 22:27:54 +01:00
c6e81f2882 add support for cyrillic cahracters 2018-03-24 20:35:42 +01:00
fc529993b8 Merge pull request #23 from MuhdNurHidayat/master
Add Malay translation
2017-11-16 14:02:06 -05:00
2ac9f2d3f4 Add Malay translation 2017-11-17 02:38:46 +08:00
a755607f7d remove unneeded recipe for locked sign 2017-09-25 23:29:44 -04:00
f6b8c941c3 Merge pull request #21 from fat115/master
updated intllib method (po/pot files)
2017-08-12 16:28:58 -04:00
96161c18dc updated intllib method (po/pot files)
added french translation (complete)
german and spanish translations are incomplete
2017-07-31 18:55:35 +02:00
217ea08cac Merge pull request #20 from tenplus1/patch-1
add nil check
2017-07-20 01:44:27 -04:00
cba3e847d9 add nil check
add nil check to fix this error: https://github.com/minetest-mods/signs_lib/issues/18
2017-07-19 19:46:54 +01:00
3e001599a6 Add spanish translation. 2017-05-20 12:10:41 -03:00
347d6ffaa4 Merge pull request #14 from AntumDeluge/settings
Replace deprecated methods
2017-05-18 05:44:03 -04:00
1470570405 Merge pull request #13 from AntumDeluge/craft_guide
Add cornernote's 'craft_guide' as optional dependency:
2017-05-18 05:43:55 -04:00
a33f58df61 Replace deprecated methods:
- 'setting_get' with 'settings:get'
- 'setting_getbool' with 'settings:get_bool'
2017-05-12 21:57:11 -07:00
770978c632 Add cornernote's 'craft_guide' as optional dependency:
http://cornernote.github.io/minetest-craft_guide/
2017-05-11 12:10:12 -07:00
2c36937054 Merge pull request #11 from MinetestForFun/master
Fix unplaceable signs on blocks w/ on_rightclick when sneaking
2017-03-05 14:19:52 -05:00
523978edcf Fix unplaceable signs on blocks w/ on_rightclick when sneaking 2017-03-05 13:56:13 -05:00
7657d0d1f2 pass pointed_thing to on_rightclick 2017-01-28 06:59:19 -05:00
66265132dd Merge pull request #7 from xisd/patch-1
make colored metal signs optional (default to enabled)
2016-10-04 05:14:42 -04:00
9daf035d44 colored metal signs optional and display size
That a small change but for someone who try to prevent having one craft guide page per item (and multiples variants) it make all the difference :)
This mod is great but it would be even greater if it was easier to configure
like an option use_big_font_size that would change CHARS_PERLINE from 30 to 12  and NUMBER_OF_LINES from 6 to 3
(I tried to do that but I failed)
2016-10-04 10:43:07 +02:00
db0973439c minor API change: defaultcolor -> default_color 2016-09-15 08:40:16 -04:00
4481ea8726 infinite stacks only depend on creative mode now
(don't care of unified inventory is installed)
2016-09-15 08:33:23 -04:00
9dab7d8736 add default steel sign to restore-entities LBM 2016-09-15 07:57:34 -04:00
a6caa51a85 allow custom nodes to define the text entity's size
in your node def, add:

text_size = {x=foo, y=bar},

Size defaults to x=0.8 and y=0.5, respectively.
2016-09-15 07:20:34 -04:00
707f28c309 removed metal sign -> locked wooden sign recipe
(makes no sense in practice)
2016-09-09 06:45:50 -04:00
a6be7f222d Allow setting default text color in sign node def
Caveat: signs used to reset the text color to black at the start of each
line. Now, they reset to the node's default text color, after which
users' "#x" color codes are applied.  This means some signs will change
to a new color where the user didn't explicitly set it.  This will only
be visible on green, red w/white border, white w/red border, blue, and
brown metal signs, as these have either white or red as the new default
color.  All other signs will render in black, as usual.
2016-09-09 05:37:36 -04:00
b85eabb58d added option to specify text position when making a custom sign node 2016-09-09 04:32:51 -04:00
5bbaa4f294 remove debug stuff 2016-09-09 04:14:34 -04:00
9d6d9b11e1 add support for visible text on default steel signs
(if defined by subgame)
2016-09-09 04:08:20 -04:00
931a3e2b15 Use minetest_game steel sign to craft the various colored metal signs
instead of using steel ingots.  Reduced yield to one per craft.

(the "sheet metal" recipes still exist for users of "steel" mod, yield
there is unchanged)
2016-09-09 03:45:25 -04:00
fef163662a adjusted positions of all signs' entities
to move them to approx. 1 pixels in front of the surface

(trying to workaround an apparent irrlicht/Minetest precision glitch on
entity reload)
2016-09-09 03:28:32 -04:00
7735a3a382 Clarify comment/reason for LBM 2016-09-09 02:55:21 -04:00
700baef196 Merge pull request #6 from cheapie/master
Use LBM instead of ABM to restore sign text
2016-09-03 17:59:15 -04:00
d85713cf63 Use LBM instead of ABM to restore sign text 2016-09-03 15:09:55 -05:00
cbe3c8a811 "debug" is not a valid log level. 2016-04-23 19:57:16 -07:00
f40f588367 Add screenshot.png 2016-03-27 22:24:35 -07:00
62989f1e1d Adding standard mod files 2016-03-27 21:35:38 -07:00
104 changed files with 1356 additions and 361 deletions

View File

@ -2,3 +2,4 @@ default
intllib?
screwdriver?
keyword_interact?
craft_guide?

1
description.txt Normal file
View File

@ -0,0 +1 @@
Adds signs with readable text.

265
encoding.lua Normal file
View File

@ -0,0 +1,265 @@
-- encoding borrowed from signs_lib mod of https://github.com/lord-server/lord
local ansi_decode = {
[128] = "\208\130",
[129] = "\208\131",
[130] = "\226\128\154",
[131] = "\209\147",
[132] = "\226\128\158",
[133] = "\226\128\166",
[134] = "\226\128\160",
[135] = "\226\128\161",
[136] = "\226\130\172",
[137] = "\226\128\176",
[138] = "\208\137",
[139] = "\226\128\185",
[140] = "\208\138",
[141] = "\208\140",
[142] = "\208\139",
[143] = "\208\143",
[144] = "\209\146",
[145] = "\226\128\152",
[146] = "\226\128\153",
[147] = "\226\128\156",
[148] = "\226\128\157",
[149] = "\226\128\162",
[150] = "\226\128\147",
[151] = "\226\128\148",
[152] = "\194\152",
[153] = "\226\132\162",
[154] = "\209\153",
[155] = "\226\128\186",
[156] = "\209\154",
[157] = "\209\156",
[158] = "\209\155",
[159] = "\209\159",
[160] = "\194\160",
[161] = "\209\142",
[162] = "\209\158",
[163] = "\208\136",
[164] = "\194\164",
[165] = "\210\144",
[166] = "\194\166",
[167] = "\194\167",
[168] = "\208\129",
[169] = "\194\169",
[170] = "\208\132",
[171] = "\194\171",
[172] = "\194\172",
[173] = "\194\173",
[174] = "\194\174",
[175] = "\208\135",
[176] = "\194\176",
[177] = "\194\177",
[178] = "\208\134",
[179] = "\209\150",
[180] = "\210\145",
[181] = "\194\181",
[182] = "\194\182",
[183] = "\194\183",
[184] = "\209\145",
[185] = "\226\132\150",
[186] = "\209\148",
[187] = "\194\187",
[188] = "\209\152",
[189] = "\208\133",
[190] = "\209\149",
[191] = "\209\151"
}
local utf8_decode = {
[128] = {
[147] = "\150",
[148] = "\151",
[152] = "\145",
[153] = "\146",
[154] = "\130",
[156] = "\147",
[157] = "\148",
[158] = "\132",
[160] = "\134",
[161] = "\135",
[162] = "\149",
[166] = "\133",
[176] = "\137",
[185] = "\139",
[186] = "\155"
},
[130] = {[172] = "\136"},
[132] = {[150] = "\185", [162] = "\153"},
[194] = {
[152] = "\152",
[160] = "\160",
[164] = "\164",
[166] = "\166",
[167] = "\167",
[169] = "\169",
[171] = "\171",
[172] = "\172",
[173] = "\173",
[174] = "\174",
[176] = "\176",
[177] = "\177",
[181] = "\181",
[182] = "\182",
[183] = "\183",
[187] = "\187"
},
[208] = {
[129] = "\168",
[130] = "\128",
[131] = "\129",
[132] = "\170",
[133] = "\189",
[134] = "\178",
[135] = "\175",
[136] = "\163",
[137] = "\138",
[138] = "\140",
[139] = "\142",
[140] = "\141",
[143] = "\143",
[144] = "\192",
[145] = "\193",
[146] = "\194",
[147] = "\195",
[148] = "\196",
[149] = "\197",
[150] = "\198",
[151] = "\199",
[152] = "\200",
[153] = "\201",
[154] = "\202",
[155] = "\203",
[156] = "\204",
[157] = "\205",
[158] = "\206",
[159] = "\207",
[160] = "\208",
[161] = "\209",
[162] = "\210",
[163] = "\211",
[164] = "\212",
[165] = "\213",
[166] = "\214",
[167] = "\215",
[168] = "\216",
[169] = "\217",
[170] = "\218",
[171] = "\219",
[172] = "\220",
[173] = "\221",
[174] = "\222",
[175] = "\223",
[176] = "\224",
[177] = "\225",
[178] = "\226",
[179] = "\227",
[180] = "\228",
[181] = "\229",
[182] = "\230",
[183] = "\231",
[184] = "\232",
[185] = "\233",
[186] = "\234",
[187] = "\235",
[188] = "\236",
[189] = "\237",
[190] = "\238",
[191] = "\239"
},
[209] = {
[128] = "\240",
[129] = "\241",
[130] = "\242",
[131] = "\243",
[132] = "\244",
[133] = "\245",
[134] = "\246",
[135] = "\247",
[136] = "\248",
[137] = "\249",
[138] = "\250",
[139] = "\251",
[140] = "\252",
[141] = "\253",
[142] = "\254",
[143] = "\255",
[144] = "\161",
[145] = "\184",
[146] = "\144",
[147] = "\131",
[148] = "\186",
[149] = "\190",
[150] = "\179",
[151] = "\191",
[152] = "\188",
[153] = "\154",
[154] = "\156",
[155] = "\158",
[156] = "\157",
[158] = "\162",
[159] = "\159"
},
[210] = {[144] = "\165", [145] = "\180"}
}
local nmdc = {
[36] = "$",
[124] = "|"
}
function AnsiToUtf8(s)
local r, b = ""
for i = 1, s and s:len() or 0 do
b = s:byte(i)
if b < 128 then
r = r .. string.char(b)
else
if b > 239 then
r = r .. "\209" .. string.char(b - 112)
elseif b > 191 then
r = r .. "\208" .. string.char(b - 48)
elseif ansi_decode[b] then
r = r .. ansi_decode[b]
else
r = r .. "_"
end
end
end
return r
end
function Utf8ToAnsi(s)
local a, j, r, b = 0, 0, ""
for i = 1, s and s:len() or 0 do
b = s:byte(i)
if b < 128 then
if nmdc[b] then
r = r .. nmdc[b]
else
r = r .. string.char(b)
end
elseif a == 2 then
a, j = a - 1, b
elseif a == 1 then
--if j == nil or b == nil then return r end
--print(j)
--print(b)
--local ansi = utf8_decode[j]
--if ansi == nil then return r end
--if ansi[b] == nil then return r end
if utf8_decode[j] then
if utf8_decode[j][b] then
a, r = a - 1, r .. utf8_decode[j][b]
end
end
elseif b == 226 then
a = 2
elseif b == 194 or b == 208 or b == 209 or b == 210 then
j, a = b, 1
else
r = r .. "_"
end
end
return r
end

442
init.lua
View File

@ -9,28 +9,68 @@
-- { delta = {entity position for 270° yaw}, exact yaw expression }
-- { delta = {entity position for 90° yaw}, exact yaw expression }
-- }
-- Made colored metal signs optionals
local enable_colored_metal_signs = true
-- CWz's keyword interact mod uses this setting.
local current_keyword = minetest.setting_get("interact_keyword") or "iaccept"
local current_keyword = minetest.settings:get("interact_keyword") or "iaccept"
signs_lib = {}
signs_lib.path = minetest.get_modpath(minetest.get_current_modname())
screwdriver = screwdriver or {}
signs_lib.wallmounted_rotate = function(pos, node, user, mode, new_param2)
if mode ~= screwdriver.ROTATE_AXIS then return false end
minetest.swap_node(pos, {name = node.name, param2 = (node.param2 + 1) % 6})
for _, v in ipairs(minetest.get_objects_inside_radius(pos, 0.5)) do
local e = v:get_luaentity()
if e and e.name == "signs:text" then
v:remove()
end
end
signs_lib.update_sign(pos)
-- Load support for intllib.
local S, NS = dofile(signs_lib.path .. "/intllib.lua")
signs_lib.gettext = S
-- text encoding
dofile(signs_lib.path .. "/encoding.lua");
local wall_dir_change = {
[0] = 4,
0,
5,
1,
2,
3,
0
}
signs_lib.wallmounted_rotate = function(pos, node, user, mode)
if mode ~= screwdriver.ROTATE_FACE then return false end
minetest.swap_node(pos, { name = node.name, param2 = wall_dir_change[node.param2 % 6] })
signs_lib.update_sign(pos,nil,nil,node)
return true
end
signs_lib.facedir_rotate = function(pos, node, user, mode)
if mode ~= screwdriver.ROTATE_FACE then return false end
local newparam2 = (node.param2 %8) + 1
if newparam2 == 5 then
newparam2 = 6
elseif newparam2 > 6 then
newparam2 = 0
end
minetest.swap_node(pos, { name = node.name, param2 = newparam2 })
signs_lib.update_sign(pos,nil,nil,node)
return true
end
signs_lib.facedir_rotate_simple = function(pos, node, user, mode)
if mode ~= screwdriver.ROTATE_FACE then return false end
local newparam2 = (node.param2 %8) + 1
if newparam2 > 3 then newparam2 = 0 end
minetest.swap_node(pos, { name = node.name, param2 = newparam2 })
signs_lib.update_sign(pos,nil,nil,node)
return true
end
signs_lib.modpath = minetest.get_modpath("signs_lib")
local DEFAULT_TEXT_SCALE = {x=0.8, y=0.5}
signs_lib.regular_wall_sign_model = {
nodebox = {
type = "wallmounted",
@ -41,10 +81,10 @@ signs_lib.regular_wall_sign_model = {
textpos = {
nil,
nil,
{delta = {x = 0.43, y = 0.07, z = 0 }, yaw = math.pi / -2},
{delta = {x = -0.43, y = 0.07, z = 0 }, yaw = math.pi / 2},
{delta = {x = 0, y = 0.07, z = 0.43 }, yaw = 0},
{delta = {x = 0, y = 0.07, z = -0.43 }, yaw = math.pi},
{delta = { x = 0.41, y = 0.07, z = 0 }, yaw = math.pi / -2},
{delta = { x = -0.41, y = 0.07, z = 0 }, yaw = math.pi / 2},
{delta = { x = 0, y = 0.07, z = 0.41 }, yaw = 0},
{delta = { x = 0, y = 0.07, z = -0.41 }, yaw = math.pi},
}
}
@ -54,10 +94,10 @@ signs_lib.metal_wall_sign_model = {
fixed = {-0.4375, -0.25, 0.4375, 0.4375, 0.375, 0.5}
},
textpos = {
{delta = {x = 0, y = 0.07, z = 0.43 }, yaw = 0},
{delta = {x = 0.43, y = 0.07, z = 0 }, yaw = math.pi / -2},
{delta = {x = 0, y = 0.07, z = -0.43 }, yaw = math.pi},
{delta = {x = -0.43, y = 0.07, z = 0 }, yaw = math.pi / 2},
{delta = { x = 0, y = 0.07, z = 0.41 }, yaw = 0},
{delta = { x = 0.41, y = 0.07, z = 0 }, yaw = math.pi / -2},
{delta = { x = 0, y = 0.07, z = -0.41 }, yaw = math.pi},
{delta = { x = -0.41, y = 0.07, z = 0 }, yaw = math.pi / 2},
}
}
@ -70,10 +110,10 @@ signs_lib.yard_sign_model = {
}
},
textpos = {
{delta = {x = 0, y = 0.07, z = -0.068}, yaw = 0},
{delta = {x = -0.068, y = 0.07, z = 0 }, yaw = math.pi / -2},
{delta = {x = 0, y = 0.07, z = 0.068}, yaw = math.pi},
{delta = {x = 0.068, y = 0.07, z = 0 }, yaw = math.pi / 2},
{delta = { x = 0, y = 0.07, z = -0.08 }, yaw = 0},
{delta = { x = -0.08, y = 0.07, z = 0 }, yaw = math.pi / -2},
{delta = { x = 0, y = 0.07, z = 0.08 }, yaw = math.pi},
{delta = { x = 0.08, y = 0.07, z = 0 }, yaw = math.pi / 2},
}
}
@ -86,10 +126,10 @@ signs_lib.hanging_sign_model = {
}
},
textpos = {
{delta = {x = 0, y = -0.02, z = -0.063}, yaw = 0},
{delta = {x = -0.063, y = -0.02, z = 0 }, yaw = math.pi / -2},
{delta = {x = 0, y = -0.02, z = 0.063}, yaw = math.pi},
{delta = {x = 0.063, y = -0.02, z = 0 }, yaw = math.pi / 2},
{delta = { x = 0, y = -0.02, z = -0.08 }, yaw = 0},
{delta = { x = -0.08, y = -0.02, z = 0 }, yaw = math.pi / -2},
{delta = { x = 0, y = -0.02, z = 0.08 }, yaw = math.pi},
{delta = { x = 0.08, y = -0.02, z = 0 }, yaw = math.pi / 2},
}
}
@ -102,21 +142,18 @@ signs_lib.sign_post_model = {
}
},
textpos = {
{delta = {x = 0, y = 0.07, z = -0.188}, yaw = 0},
{delta = {x = -0.188, y = 0.07, z = 0 }, yaw = math.pi / -2},
{delta = {x = 0, y = 0.07, z = 0.188 }, yaw = math.pi},
{delta = {x = 0.188, y = 0.07, z = 0 }, yaw = math.pi / 2},
{delta = { x = 0, y = 0.07, z = -0.2 }, yaw = 0},
{delta = { x = -0.2, y = 0.07, z = 0 }, yaw = math.pi / -2},
{delta = { x = 0, y = 0.07, z = 0.2 }, yaw = math.pi},
{delta = { x = 0.2, y = 0.07, z = 0 }, yaw = math.pi / 2},
}
}
-- Boilerplate to support localized strings if intllib mod is installed.
local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
signs_lib.gettext = S
-- the list of standard sign nodes
signs_lib.sign_node_list = {
"default:sign_wall_wood",
"default:sign_wall_steel",
"signs:sign_yard",
"signs:sign_hanging",
"signs:sign_wall_green",
@ -141,10 +178,13 @@ else
default_sign_image = "default_sign_wall.png"
end
default_sign_metal = "default:sign_wall_steel"
default_sign_metal_image = "default_sign_steel.png"
--table copy
function signs_lib.table_copy(t)
local nt = { };
local nt = { }
for k, v in pairs(t) do
if type(v) == "table" then
nt[k] = signs_lib.table_copy(v)
@ -157,7 +197,7 @@ end
-- infinite stacks
if minetest.get_modpath("unified_inventory") or not minetest.setting_getbool("creative_mode") then
if not minetest.settings:get_bool("creative_mode") then
signs_lib.expect_infinite_stacks = false
else
signs_lib.expect_infinite_stacks = true
@ -165,30 +205,48 @@ end
-- CONSTANTS
local MP = minetest.get_modpath("signs_lib")
-- Used by `build_char_db' to locate the file.
local FONT_FMT = "%s/hdf_%02x.png"
-- Simple texture name for building text texture.
local FONT_FMT_SIMPLE = "hdf_%02x.png"
-- Path to the textures.
local TP = MP.."/textures"
local TP = signs_lib.path .. "/textures"
-- Font file formatter
local CHAR_FILE = "%s_%02x.png"
-- Fonts path
local CHAR_PATH = TP .. "/" .. CHAR_FILE
local TEXT_SCALE = {x=0.8, y=0.5}
-- Font name.
local font_name = "hdf"
-- Lots of overkill here. KISS advocates, go away, shoo! ;) -- kaeza
local PNG_HDR = string.char(0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A)
-- check if a file does exist
-- to avoid reopening file after checking again
-- pass TRUE as second argument
function file_exists(name, return_handle, mode)
mode = mode or "r";
local f = io.open(name, mode)
if f ~= nil then
if (return_handle) then
return f
end
io.close(f)
return true
else
return false
end
end
-- Read the image size from a PNG file.
-- Returns image_w, image_h.
-- Only the LSB is read from each field!
local function read_image_size(filename)
local f = io.open(filename, "rb")
local f = file_exists(filename, true, "rb")
-- file might not exist (don't crash the game)
if (not f) then
return 0, 0
end
f:seek("set", 0x0)
local hdr = f:read(8)
local hdr = f:read(string.len(PNG_HDR))
if hdr ~= PNG_HDR then
f:close()
return
@ -236,8 +294,8 @@ local function build_char_db()
local total_width = 0
local char_count = 0
for c = 32, 126 do
local w, h = read_image_size(FONT_FMT:format(TP, c))
for c = 32, 255 do
local w, h = read_image_size(CHAR_PATH:format(font_name, c))
if w and h then
local ch = string.char(c)
charwidth[ch] = w
@ -301,19 +359,52 @@ local function fill_line(x, y, w, c)
return table.concat(tex)
end
local function make_line_texture(line, lineno)
-- make char texture file name
-- if texture file does not exist use fallback texture instead
local function char_tex(font_name, ch)
local c = ch:byte()
local exists, tex = file_exists(CHAR_PATH:format(font_name, c))
if exists and c ~= 14 then
tex = CHAR_FILE:format(font_name, c)
else
tex = CHAR_FILE:format(font_name, 0x0)
end
return tex, exists
end
local function make_line_texture(line, lineno, pos)
local width = 0
local maxw = 0
local words = { }
local n = minetest.registered_nodes[minetest.get_node(pos).name]
local default_color = n.default_color or 0
local cur_color = 0
local cur_color = tonumber(default_color, 16)
-- We check which chars are available here.
for word_i, word in ipairs(line) do
local chars = { }
local ch_offs = 0
word = string.gsub(word, "%^[12345678abcdefgh]", {
["^1"] = string.char(0x81),
["^2"] = string.char(0x82),
["^3"] = string.char(0x83),
["^4"] = string.char(0x84),
["^5"] = string.char(0x85),
["^6"] = string.char(0x86),
["^7"] = string.char(0x87),
["^8"] = string.char(0x88),
["^a"] = string.char(0x8a),
["^b"] = string.char(0x8b),
["^c"] = string.char(0x8c),
["^d"] = string.char(0x8d),
["^e"] = string.char(0x8e),
["^f"] = string.char(0x8f),
["^g"] = string.char(0x90),
["^h"] = string.char(0x91)
})
local word_l = #word
local i = 1
while i <= word_l do
@ -336,7 +427,7 @@ local function make_line_texture(line, lineno)
if #chars < MAX_INPUT_CHARS then
table.insert(chars, {
off = ch_offs,
tex=FONT_FMT_SIMPLE:format(c:byte()),
tex = char_tex(font_name, c),
col = ("%X"):format(cur_color),
})
end
@ -378,7 +469,10 @@ local function make_line_texture(line, lineno)
end
table.insert(texture, (":%d,%d=%s"):format(xpos + ch.off, ypos, ch.tex))
end
table.insert(texture, (":%d,%d=hdf_20.png"):format(xpos + word.w, ypos))
table.insert(
texture,
(":%d,%d="):format(xpos + word.w, ypos) .. char_tex(font_name, " ")
)
xpos = xpos + word.w + charwidth[" "]
if xpos >= (SIGN_WIDTH + charwidth[" "]) then break end
end
@ -389,12 +483,12 @@ local function make_line_texture(line, lineno)
return table.concat(texture), lineno
end
local function make_sign_texture(lines)
local function make_sign_texture(lines, pos)
local texture = { ("[combine:%dx%d"):format(SIGN_WIDTH, LINE_HEIGHT * NUMBER_OF_LINES) }
local lineno = 0
for i = 1, #lines do
if lineno >= NUMBER_OF_LINES then break end
local linetex, ln = make_line_texture(lines[i], lineno)
local linetex, ln = make_line_texture(lines[i], lineno, pos)
table.insert(texture, linetex)
lineno = ln + 1
end
@ -402,11 +496,14 @@ local function make_sign_texture(lines)
return table.concat(texture, "")
end
local function set_obj_text(obj, text, new)
local function set_obj_text(obj, text, new, pos)
local split = new and split_lines_and_words or split_lines_and_words_old
local text_ansi = Utf8ToAnsi(text)
local n = minetest.registered_nodes[minetest.get_node(pos).name]
local text_scale = (n and n.text_scale) or DEFAULT_TEXT_SCALE
obj:set_properties({
textures={make_sign_texture(split(text))},
visual_size = TEXT_SCALE,
textures={make_sign_texture(split(text_ansi), pos)},
visual_size = text_scale,
})
end
@ -416,7 +513,7 @@ signs_lib.construct_sign = function(pos, locked)
"formspec",
"size[6,4]"..
"textarea[0,-0.3;6.5,3;text;;${text}]"..
"button_exit[2,3.4;2,1;ok;Write]"..
"button_exit[2,3.4;2,1;ok;"..S("Write").."]"..
"background[-0.5,-0.5;7,5;bg_signs_lib.jpg]")
meta:set_string("infotext", "")
end
@ -441,7 +538,7 @@ local function make_infotext(text)
return table.concat(lines2, "\n")
end
signs_lib.update_sign = function(pos, fields, owner)
signs_lib.update_sign = function(pos, fields, owner, node)
-- First, check if the interact keyword from CWz's mod is being set,
-- or has been changed since the last restart...
@ -463,7 +560,7 @@ signs_lib.update_sign = function(pos, fields, owner)
signs_lib.destruct_sign(pos)
meta:set_string("keyword", current_keyword)
local ownstr = ""
if owner then ownstr = "Locked sign, owned by "..owner.."\n" end
if owner then ownstr = S("Locked sign, owned by @1\n", owner) end
meta:set_string("infotext", ownstr..string.gsub(make_infotext(stored_text), "@KEYWORD", current_keyword).." ")
end
end
@ -475,7 +572,7 @@ signs_lib.update_sign = function(pos, fields, owner)
fields.text = trim_input(fields.text)
local ownstr = ""
if owner then ownstr = "Locked sign, owned by "..owner.."\n" end
if owner then ownstr = S("Locked sign, owned by @1\n", owner) end
meta:set_string("infotext", ownstr..string.gsub(make_infotext(fields.text), "@KEYWORD", current_keyword).." ")
meta:set_string("text", fields.text)
@ -485,34 +582,22 @@ signs_lib.update_sign = function(pos, fields, owner)
else
new = (meta:get_int("__signslib_new_format") ~= 0)
end
signs_lib.destruct_sign(pos)
local text = meta:get_string("text")
if text == nil then return end
local objects = minetest.get_objects_inside_radius(pos, 0.5)
local found
for _, v in ipairs(objects) do
local e = v:get_luaentity()
if e and e.name == "signs:text" then
if found then
v:remove()
else
set_obj_text(v, text, new)
found = true
end
end
end
if found then
return
end
-- if there is no entity
if text == nil or text == "" then return end
local sign_info
local signnode = minetest.get_node(pos)
if signnode.name == "signs:sign_yard" then
local signnode = node or minetest.get_node(pos)
local signname = signnode.name
local textpos = minetest.registered_nodes[signname].textpos
if textpos then
sign_info = textpos[minetest.get_node(pos).param2 + 1]
elseif signnode.name == "signs:sign_yard" then
sign_info = signs_lib.yard_sign_model.textpos[minetest.get_node(pos).param2 + 1]
elseif signnode.name == "signs:sign_hanging" then
sign_info = signs_lib.hanging_sign_model.textpos[minetest.get_node(pos).param2 + 1]
elseif string.find(signnode.name, "sign_wall") then
if signnode.name == default_sign
or signnode.name == default_sign_metal
or signnode.name == "locked_sign:sign_wall_locked" then
sign_info = signs_lib.regular_wall_sign_model.textpos[minetest.get_node(pos).param2 + 1]
else
@ -556,8 +641,10 @@ function signs_lib.determine_sign_type(itemstack, placer, pointed_thing, locked)
local node=minetest.get_node(pointed_thing.under)
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack)
if minetest.registered_nodes[node.name] and
minetest.registered_nodes[node.name].on_rightclick and
not placer:get_player_control().sneak then
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack, pointed_thing)
else
local above = pointed_thing.above
local under = pointed_thing.under
@ -577,7 +664,6 @@ function signs_lib.determine_sign_type(itemstack, placer, pointed_thing, locked)
end
local fdir = minetest.dir_to_facedir(dir)
local pt_name = minetest.get_node(under).name
local signname = itemstack:get_name()
@ -587,8 +673,11 @@ function signs_lib.determine_sign_type(itemstack, placer, pointed_thing, locked)
minetest.add_node(above, {name = "signs:sign_hanging", param2 = fdir})
elseif wdir == 1 and signname == default_sign then
minetest.add_node(above, {name = "signs:sign_yard", param2 = fdir})
elseif signname == default_sign_metal then
minetest.add_node(above, {name = signname, param2 = wdir })
elseif signname ~= default_sign
and signname ~= "locked_sign:sign_wall_locked" then -- it's a metal wall sign.
and signname ~= default_sign_metal
and signname ~= "locked_sign:sign_wall_locked" then -- it's a signs_lib colored metal wall sign.
minetest.add_node(above, {name = signname, param2 = fdir})
else -- it must be a default or locked wooden wall sign
minetest.add_node(above, {name = signname, param2 = wdir }) -- note it's wallmounted here!
@ -612,11 +701,12 @@ function signs_lib.receive_fields(pos, formname, fields, sender, lock)
sender:get_player_name())
return
end
local lockstr = lock and "locked " or ""
local lockstr = lock and S("locked ") or ""
if fields and fields.text and fields.ok then
minetest.log("action", S("%s wrote \"%s\" to "..lockstr.."sign at %s"):format(
minetest.log("action", S("@1 wrote \"@2\" to @3sign at @4",
(sender:get_player_name() or ""),
fields.text,
fields.text:gsub('\\', '\\\\'):gsub("\n", "\\n"),
lockstr,
minetest.pos_to_string(pos)
))
if lock then
@ -653,7 +743,7 @@ minetest.register_node(":"..default_sign, {
signs_lib.receive_fields(pos, formname, fields, sender)
end,
on_punch = function(pos, node, puncher)
signs_lib.update_sign(pos)
signs_lib.update_sign(pos,nil,nil,node)
end,
on_rotate = signs_lib.wallmounted_rotate
})
@ -682,8 +772,10 @@ minetest.register_node(":signs:sign_yard", {
signs_lib.receive_fields(pos, formname, fields, sender)
end,
on_punch = function(pos, node, puncher)
signs_lib.update_sign(pos)
signs_lib.update_sign(pos,nil,nil,node)
end,
on_rotate = signs_lib.facedir_rotate_simple
})
minetest.register_node(":signs:sign_hanging", {
@ -717,8 +809,9 @@ minetest.register_node(":signs:sign_hanging", {
signs_lib.receive_fields(pos, formname, fields, sender)
end,
on_punch = function(pos, node, puncher)
signs_lib.update_sign(pos)
signs_lib.update_sign(pos,nil,nil,node)
end,
on_rotate = signs_lib.facedir_rotate_simple
})
minetest.register_node(":signs:sign_post", {
@ -743,14 +836,15 @@ minetest.register_node(":signs:sign_post", {
{ items = { "default:fence_wood" }},
},
},
on_rotate = signs_lib.facedir_rotate_simple
})
-- Locked wall sign
minetest.register_privilege("sign_editor", "Can edit all locked signs")
minetest.register_privilege("sign_editor", S("Can edit all locked signs"))
minetest.register_node(":locked_sign:sign_wall_locked", {
description = S("Sign"),
description = S("Locked Sign"),
inventory_image = "signs_locked_inv.png",
wield_image = "signs_locked_inv.png",
node_placement_prediction = "",
@ -774,34 +868,79 @@ minetest.register_node(":locked_sign:sign_wall_locked", {
local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner")
local pname = sender:get_player_name() or ""
if pname ~= owner and pname ~= minetest.setting_get("name")
if pname ~= owner and pname ~= minetest.settings:get("name")
and not minetest.check_player_privs(pname, {sign_editor=true}) then
return
end
signs_lib.receive_fields(pos, formname, fields, sender, true)
end,
on_punch = function(pos, node, puncher)
signs_lib.update_sign(pos)
signs_lib.update_sign(pos,nil,nil,node)
end,
can_dig = function(pos, player)
local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner")
local pname = player:get_player_name()
return pname == owner or pname == minetest.setting_get("name")
return pname == owner or pname == minetest.settings:get("name")
or minetest.check_player_privs(pname, {sign_editor=true})
end,
on_rotate = signs_lib.wallmounted_rotate
})
-- default metal sign, if defined
if minetest.registered_nodes["default:sign_wall_steel"] then
minetest.register_node(":"..default_sign_metal, {
description = S("Sign"),
inventory_image = default_sign_metal_image,
wield_image = default_sign_metal_image,
node_placement_prediction = "",
sunlight_propagates = true,
paramtype = "light",
paramtype2 = "wallmounted",
drawtype = "nodebox",
node_box = signs_lib.regular_wall_sign_model.nodebox,
tiles = {"signs_wall_sign_metal.png"},
groups = sign_groups,
on_place = function(itemstack, placer, pointed_thing)
return signs_lib.determine_sign_type(itemstack, placer, pointed_thing)
end,
on_construct = function(pos)
signs_lib.construct_sign(pos)
end,
on_destruct = function(pos)
signs_lib.destruct_sign(pos)
end,
on_receive_fields = function(pos, formname, fields, sender)
signs_lib.receive_fields(pos, formname, fields, sender)
end,
on_punch = function(pos, node, puncher)
signs_lib.update_sign(pos,nil,nil,node)
end,
on_rotate = signs_lib.wallmounted_rotate
})
end
-- metal, colored signs
if enable_colored_metal_signs then
-- array : color, translated color, default text color
local sign_colors = {
{"green", S("green"), "f"},
{"yellow", S("yellow"), "0"},
{"red", S("red"), "f"},
{"white_red", S("white_red"), "4"},
{"white_black", S("white_black"), "0"},
{"orange", S("orange"), "0"},
{"blue", S("blue"), "f"},
{"brown", S("brown"), "f"},
}
local sign_colors = { "green", "yellow", "red", "white_red", "white_black", "orange", "blue", "brown" }
for _, color in ipairs(sign_colors) do
minetest.register_node(":signs:sign_wall_"..color, {
description = S("Sign ("..color..", metal)"),
inventory_image = "signs_"..color.."_inv.png",
wield_image = "signs_"..color.."_inv.png",
for i, color in ipairs(sign_colors) do
minetest.register_node(":signs:sign_wall_"..color[1], {
description = S("Sign (@1, metal)", color[2]),
inventory_image = "signs_"..color[1].."_inv.png",
wield_image = "signs_"..color[1].."_inv.png",
node_placement_prediction = "",
paramtype = "light",
sunlight_propagates = true,
@ -814,8 +953,9 @@ for _, color in ipairs(sign_colors) do
"signs_metal_sides.png",
"signs_metal_sides.png",
"signs_metal_back.png",
"signs_"..color.."_front.png"
"signs_"..color[1].."_front.png"
},
default_color = color[3],
groups = sign_groups,
on_place = function(itemstack, placer, pointed_thing)
return signs_lib.determine_sign_type(itemstack, placer, pointed_thing)
@ -830,20 +970,23 @@ for _, color in ipairs(sign_colors) do
signs_lib.receive_fields(pos, formname, fields, sender)
end,
on_punch = function(pos, node, puncher)
signs_lib.update_sign(pos)
signs_lib.update_sign(pos,nil,nil,node)
end,
on_rotate = signs_lib.facedir_rotate
})
end
end
local signs_text_on_activate
signs_text_on_activate = function(self)
local meta = minetest.get_meta(self.object:getpos())
local pos = self.object:getpos()
local meta = minetest.get_meta(pos)
local text = meta:get_string("text")
local new = (meta:get_int("__signslib_new_format") ~= 0)
if text then
if text and minetest.registered_nodes[minetest.get_node(pos).name] then
text = trim_input(text)
set_obj_text(self.object, text, new)
set_obj_text(self.object, text, new, pos)
end
end
@ -861,7 +1004,7 @@ function signs_lib.register_fence_with_sign(fencename, fencewithsignname)
local def = minetest.registered_nodes[fencename]
local def_sign = minetest.registered_nodes[fencewithsignname]
if not (def and def_sign) then
minetest.log("warning", "[signs_lib] Attempt to register unknown node as fence")
minetest.log("warning", "[signs_lib] "..S("Attempt to register unknown node as fence"))
return
end
def = signs_lib.table_copy(def)
@ -887,7 +1030,7 @@ function signs_lib.register_fence_with_sign(fencename, fencewithsignname)
end
if def_under and def_under.on_rightclick then
return def_under.on_rightclick(pointed_thing.under, node_under, placer, itemstack) or itemstack
return def_under.on_rightclick(pointed_thing.under, node_under, placer, itemstack, pointed_thing) or itemstack
elseif def_under and def_under.buildable_to then
minetest.add_node(pointed_thing.under, {name = fencename, param2 = fdir})
if not signs_lib.expect_infinite_stacks then
@ -913,18 +1056,20 @@ function signs_lib.register_fence_with_sign(fencename, fencewithsignname)
signs_lib.receive_fields(pos, formname, fields, sender)
end
def_sign.on_punch = function(pos, node, puncher, ...)
signs_lib.update_sign(pos)
signs_lib.update_sign(pos,nil,nil,node)
end
local fencename = fencename
def_sign.after_dig_node = function(pos, node, ...)
node.name = fencename
minetest.add_node(pos, node)
end
def_sign.on_rotate = signs_lib.facedir_rotate_simple
def_sign.drop = default_sign
minetest.register_node(":"..fencename, def)
minetest.register_node(":"..fencewithsignname, def_sign)
table.insert(signs_lib.sign_node_list, fencewithsignname)
minetest.log("debug", S("Registered %s and %s"):format(fencename, fencewithsignname))
minetest.log("verbose", S("Registered @1 and @2", fencename, fencewithsignname))
end
build_char_db()
@ -934,30 +1079,21 @@ minetest.register_alias("sign_wall_locked", "locked_sign:sign_wall_locked")
signs_lib.register_fence_with_sign("default:fence_wood", "signs:sign_post")
-- restore signs' text after /clearobjects and the like
-- restore signs' text after /clearobjects and the like, the next time
-- a block is reloaded by the server.
minetest.register_abm({
minetest.register_lbm({
nodenames = signs_lib.sign_node_list,
interval = 15,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
signs_lib.update_sign(pos)
name = "signs_lib:restore_sign_text",
label = "Restore sign text",
run_at_every_load = true,
action = function(pos, node)
signs_lib.update_sign(pos,nil,nil,node)
end
})
-- locked sign
minetest.register_craft({
output = "locked_sign:sign_wall_locked",
recipe = {
{"group:wood", "group:wood", "group:wood"},
{"group:wood", "group:wood", "default:steel_ingot"},
{"", "group:stick", ""},
}
})
--Alternate recipe.
minetest.register_craft({
output = "locked_sign:sign_wall_locked",
recipe = {
@ -967,12 +1103,13 @@ minetest.register_craft({
})
-- craft recipes for the metal signs
if enable_colored_metal_signs then
minetest.register_craft( {
output = "signs:sign_wall_green 4",
output = "signs:sign_wall_green",
recipe = {
{ "dye:dark_green", "dye:white", "dye:dark_green" },
{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }
{ "", default_sign_metal, "" }
},
})
@ -985,10 +1122,10 @@ minetest.register_craft( {
})
minetest.register_craft( {
output = "signs:sign_wall_yellow 4",
output = "signs:sign_wall_yellow",
recipe = {
{ "dye:yellow", "dye:black", "dye:yellow" },
{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }
{ "", default_sign_metal, "" }
},
})
@ -1001,10 +1138,10 @@ minetest.register_craft( {
})
minetest.register_craft( {
output = "signs:sign_wall_red 4",
output = "signs:sign_wall_red",
recipe = {
{ "dye:red", "dye:white", "dye:red" },
{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }
{ "", default_sign_metal, "" }
},
})
@ -1017,10 +1154,10 @@ minetest.register_craft( {
})
minetest.register_craft( {
output = "signs:sign_wall_white_red 4",
output = "signs:sign_wall_white_red",
recipe = {
{ "dye:white", "dye:red", "dye:white" },
{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }
{ "", default_sign_metal, "" }
},
})
@ -1033,10 +1170,10 @@ minetest.register_craft( {
})
minetest.register_craft( {
output = "signs:sign_wall_white_black 4",
output = "signs:sign_wall_white_black",
recipe = {
{ "dye:white", "dye:black", "dye:white" },
{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }
{ "", default_sign_metal, "" }
},
})
@ -1049,10 +1186,10 @@ minetest.register_craft( {
})
minetest.register_craft( {
output = "signs:sign_wall_orange 4",
output = "signs:sign_wall_orange",
recipe = {
{ "dye:orange", "dye:black", "dye:orange" },
{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }
{ "", default_sign_metal, "" }
},
})
@ -1065,10 +1202,10 @@ minetest.register_craft( {
})
minetest.register_craft( {
output = "signs:sign_wall_blue 4",
output = "signs:sign_wall_blue",
recipe = {
{ "dye:blue", "dye:white", "dye:blue" },
{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }
{ "", default_sign_metal, "" }
},
})
@ -1081,10 +1218,10 @@ minetest.register_craft( {
})
minetest.register_craft( {
output = "signs:sign_wall_brown 4",
output = "signs:sign_wall_brown",
recipe = {
{ "dye:brown", "dye:white", "dye:brown" },
{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }
{ "", default_sign_metal, "" }
},
})
@ -1095,7 +1232,8 @@ minetest.register_craft( {
{ "steel:sheet_metal", "steel:sheet_metal", "steel:sheet_metal" }
},
})
if minetest.setting_get("log_mods") then
minetest.log("action", S("signs loaded"))
end
if minetest.settings:get("log_mods") then
minetest.log("action", S("[MOD] signs loaded"))
end

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

97
locale/de.po Normal file
View File

@ -0,0 +1,97 @@
# German Translation for the signs_lib mod.
# Copyright (C) 2018 Vanessa Ezekowitz
# This file is distributed under the same license as the signs_lib package.
# Xanthin, 2017.
# CodeXP <codexp@gmx.net>, 2018.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 18:31+0200\n"
"PO-Revision-Date: 2018-03-24 22:00+0100\n"
"Last-Translator: CodeXP <codexp@gmx.net>\n"
"Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.12\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: init.lua
msgid "Write"
msgstr "schreiben"
#: init.lua
msgid "Locked sign, owned by @1\n"
msgstr "gesperrter Schild, gehört @1\n"
#: init.lua
msgid "locked "
msgstr "gesperrt "
#: init.lua
#, fuzzy
msgid "@1 wrote \"@2\" to @3sign at @4"
msgstr "@1 schrieb \"@2\" auf das @3Schild bei @4"
#: init.lua
msgid "Sign"
msgstr "Schild"
#: init.lua
msgid "Can edit all locked signs"
msgstr "Kann alle gesperrte Schilder bearbeiten"
#: init.lua
msgid "Locked Sign"
msgstr "gesperrter Schild"
#: init.lua
msgid "green"
msgstr "grün"
#: init.lua
msgid "yellow"
msgstr "gelb"
#: init.lua
msgid "red"
msgstr "rot"
#: init.lua
msgid "white_red"
msgstr "weißrot"
#: init.lua
msgid "white_black"
msgstr "schwarzweiß"
#: init.lua
msgid "orange"
msgstr "orange"
#: init.lua
msgid "blue"
msgstr "blau"
#: init.lua
msgid "brown"
msgstr "braun"
#: init.lua
msgid "Sign (@1, metal)"
msgstr "Schild (@1, Metall)"
#: init.lua
msgid "Attempt to register unknown node as fence"
msgstr "Versuch ein unbekanntes Element als Zaun zu registrieren"
#: init.lua
msgid "Registered @1 and @2"
msgstr "Registrierte @1 und @2"
#: init.lua
msgid "[MOD] signs loaded"
msgstr "[MOD] Schilder-Mod geladen"

View File

@ -1,9 +0,0 @@
# Translation by Xanthin
Reading cached character database. = Lese zwischengespeicherte Buchstabendatenbank.
Font seems to have changed. Rebuilding cache. = Schriftart scheint sich geaendert zu haben. Wiederaufbau des Zwischenspeichers.
Could not find font line height in cached DB. Trying brute force. = Konnte die Schriftzeilenhoehe nicht in der zwischengespeicherten DB finden. Versuche Brute-Force.
Sign = Schild
%s wrote "%s" to sign at %s = %s schrieb "%s" auf das Schild bei %s
Registered %s and %s = Registrierte %s und %s
signs loaded = signs geladen

95
locale/es.po Normal file
View File

@ -0,0 +1,95 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 18:22+0200\n"
"PO-Revision-Date: 2017-07-31 18:30+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 1.8.12\n"
"Last-Translator: Carlos Barraza\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: es\n"
#: init.lua
msgid "Locked sign, owned by @1\n"
msgstr ""
#: init.lua
msgid "locked "
msgstr "bloqueada "
#: init.lua
msgid "@1 wrote \"@2\" to @3sign at @4"
msgstr "@1 escribio \"@2\" en el cartel @3en @4"
#: init.lua
msgid "Sign"
msgstr "Letrero"
#: init.lua
msgid "Can edit all locked signs"
msgstr ""
#: init.lua
#, fuzzy
msgid "Locked Sign"
msgstr "Letrero bloqueada"
#: init.lua
msgid "green"
msgstr "verde"
#: init.lua
msgid "yellow"
msgstr "amarillo"
#: init.lua
msgid "red"
msgstr "rojo"
#: init.lua
#, fuzzy
msgid "white_red"
msgstr "rojo y blanco"
#: init.lua
#, fuzzy
msgid "white_black"
msgstr "negro y blanco"
#: init.lua
msgid "orange"
msgstr "naranja"
#: init.lua
msgid "blue"
msgstr "azul"
#: init.lua
msgid "brown"
msgstr "marrón"
#: init.lua
#, fuzzy
msgid "Sign (@1, metal)"
msgstr "Letrero (@1, metal)"
#: init.lua
msgid "Attempt to register unknown node as fence"
msgstr ""
#: init.lua
msgid "Registered @1 and @2"
msgstr "Registrado @1 y @2"
#: init.lua
msgid "[MOD] signs loaded"
msgstr "[MOD] signs cargados"

91
locale/fr.po Normal file
View File

@ -0,0 +1,91 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 18:13+0200\n"
"PO-Revision-Date: 2017-07-31 18:22+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 1.8.12\n"
"Last-Translator: fat115 <fat115@framasoft.org>\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: fr\n"
#: init.lua
msgid "Locked sign, owned by @1\n"
msgstr "Panneau verrouillé, appartient à @1\n"
#: init.lua
msgid "locked "
msgstr "verrouillé "
#: init.lua
msgid "@1 wrote \"@2\" to @3sign at @4"
msgstr "@1 a écrit \"@2\" sur le panneau @3en @4"
#: init.lua
msgid "Sign"
msgstr "Panneau"
#: init.lua
msgid "Can edit all locked signs"
msgstr "Peut modifier les panneaux verrouillés"
#: init.lua
msgid "Locked Sign"
msgstr "Panneau (verrouillé)"
#: init.lua
msgid "green"
msgstr "vert"
#: init.lua
msgid "yellow"
msgstr "jaune"
#: init.lua
msgid "red"
msgstr "rouge"
#: init.lua
msgid "white_red"
msgstr "rouge et blanc"
#: init.lua
msgid "white_black"
msgstr "noir et blanc"
#: init.lua
msgid "orange"
msgstr "orange"
#: init.lua
msgid "blue"
msgstr "bleu"
#: init.lua
msgid "brown"
msgstr "marron"
#: init.lua
msgid "Sign (@1, metal)"
msgstr "Panneau (@1, métal)"
#: init.lua
msgid "Attempt to register unknown node as fence"
msgstr "Tentative d'enregistrer un nœud inconnu comme barrière"
#: init.lua
msgid "Registered @1 and @2"
msgstr "Enregistrement de @1 et @"
#: init.lua
msgid "[MOD] signs loaded"
msgstr "[MOD] signs chargé"

91
locale/ms.po Normal file
View File

@ -0,0 +1,91 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 18:00+0200\n"
"PO-Revision-Date: 2017-11-17 02:38+0800\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.4\n"
"Last-Translator: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
"Language: ms\n"
#: init.lua
msgid "Locked sign, owned by @1\n"
msgstr "Papan tanda berkunci, milik @1\n"
#: init.lua
msgid "locked "
msgstr "berkunci "
#: init.lua
msgid "@1 wrote \"@2\" to @3sign at @4"
msgstr "@1 menulis \"@2\" atas papan tanda @3dekat @4"
#: init.lua
msgid "Sign"
msgstr "Papan Tanda"
#: init.lua
msgid "Can edit all locked signs"
msgstr "Boleh sunting semua papan tanda berkunci"
#: init.lua
msgid "Locked Sign"
msgstr "Papan Tanda Berkunci"
#: init.lua
msgid "green"
msgstr "hijau"
#: init.lua
msgid "yellow"
msgstr "kuning"
#: init.lua
msgid "red"
msgstr "merah"
#: init.lua
msgid "white_red"
msgstr "putih_merah"
#: init.lua
msgid "white_black"
msgstr "putih_hitam"
#: init.lua
msgid "orange"
msgstr "jingga"
#: init.lua
msgid "blue"
msgstr "biru"
#: init.lua
msgid "brown"
msgstr "perang"
#: init.lua
msgid "Sign (@1, metal)"
msgstr "Papan Tanda (@1, logam)"
#: init.lua
msgid "Attempt to register unknown node as fence"
msgstr "Cuba untuk mendaftar nod tidak diketahui sebagai pagar"
#: init.lua
msgid "Registered @1 and @2"
msgstr "Telah daftar @1 dan @2"
#: init.lua
msgid "[MOD] signs loaded"
msgstr "[MODS] signs telah dimuatkan"

94
locale/ru.po Normal file
View File

@ -0,0 +1,94 @@
# Russian Translation for the signs_lib mod.
# Copyright (C) 2018 Vanessa Ezekowitz
# This file is distributed under the same license as the signs_lib package.
# CodeXP <codexp@gmx.net>, 2018.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: signs_lib\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-24 22:23+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: CodeXP <codexp@gmx.net>\n"
"Language-Team: \n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: init.lua
msgid "Write"
msgstr "записать"
#: init.lua
msgid "Locked sign, owned by @1\n"
msgstr "защищенная табличка, пренадлежит @1\n"
#: init.lua
msgid "locked "
msgstr "защищенный "
#: init.lua
msgid "@1 wrote \"@2\" to @3sign at @4"
msgstr "@1 записал \"@2\" в @3sign на @4"
#: init.lua
msgid "Sign"
msgstr "табличка"
#: init.lua
msgid "Can edit all locked signs"
msgstr "Может редактировать все защищенные таблички"
#: init.lua
msgid "Locked Sign"
msgstr "защищенная табличка"
#: init.lua
msgid "green"
msgstr "зеленая"
#: init.lua
msgid "yellow"
msgstr "желтая"
#: init.lua
msgid "red"
msgstr "красная"
#: init.lua
msgid "white_red"
msgstr "краснобелая"
#: init.lua
msgid "white_black"
msgstr "чернобелая"
#: init.lua
msgid "orange"
msgstr "оранжевая"
#: init.lua
msgid "blue"
msgstr "синея"
#: init.lua
msgid "brown"
msgstr "коричневая"
#: init.lua
msgid "Sign (@1, metal)"
msgstr "Табличка (@1, металл)"
#: init.lua
msgid "Attempt to register unknown node as fence"
msgstr "Попытка зарегистрировать неизвестный узел как забор"
#: init.lua
msgid "Registered @1 and @2"
msgstr "Зарегистрировано @1 для @2"
#: init.lua
msgid "[MOD] signs loaded"
msgstr "[MOD] мод табличек загружен"

94
locale/template.pot Normal file
View File

@ -0,0 +1,94 @@
# LANGUAGE Translation for the signs_lib mod.
# Copyright (C) 2018 Vanessa Ezekowitz
# This file is distributed under the same license as the signs_lib package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: signs_lib\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-24 22:23+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: init.lua
msgid "Write"
msgstr ""
#: init.lua
msgid "Locked sign, owned by @1\n"
msgstr ""
#: init.lua
msgid "locked "
msgstr ""
#: init.lua
msgid "@1 wrote \"@2\" to @3sign at @4"
msgstr ""
#: init.lua
msgid "Sign"
msgstr ""
#: init.lua
msgid "Can edit all locked signs"
msgstr ""
#: init.lua
msgid "Locked Sign"
msgstr ""
#: init.lua
msgid "green"
msgstr ""
#: init.lua
msgid "yellow"
msgstr ""
#: init.lua
msgid "red"
msgstr ""
#: init.lua
msgid "white_red"
msgstr ""
#: init.lua
msgid "white_black"
msgstr ""
#: init.lua
msgid "orange"
msgstr ""
#: init.lua
msgid "blue"
msgstr ""
#: init.lua
msgid "brown"
msgstr ""
#: init.lua
msgid "Sign (@1, metal)"
msgstr ""
#: init.lua
msgid "Attempt to register unknown node as fence"
msgstr ""
#: init.lua
msgid "Registered @1 and @2"
msgstr ""
#: init.lua
msgid "[MOD] signs loaded"
msgstr ""

View File

@ -1,9 +0,0 @@
#Template
Reading cached character database. =
Font seems to have changed. Rebuilding cache. =
Could not find font line height in cached DB. Trying brute force. =
Sign =
%s wrote "%s" to sign at %s =
Registered %s and %s =
signs loaded =

1
mod.conf Normal file
View File

@ -0,0 +1 @@
name = signs_lib

BIN
screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
textures/hdf_00.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 B

BIN
textures/hdf_81.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 B

BIN
textures/hdf_82.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 B

BIN
textures/hdf_83.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

BIN
textures/hdf_84.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 B

BIN
textures/hdf_85.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

BIN
textures/hdf_86.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 B

BIN
textures/hdf_87.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 B

BIN
textures/hdf_88.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 B

BIN
textures/hdf_8a.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 B

BIN
textures/hdf_8b.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

BIN
textures/hdf_8c.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 B

BIN
textures/hdf_8d.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

BIN
textures/hdf_8e.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 B

BIN
textures/hdf_8f.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 B

BIN
textures/hdf_90.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 B

BIN
textures/hdf_91.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 B

BIN
textures/hdf_a8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 B

BIN
textures/hdf_b8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

BIN
textures/hdf_b9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 B

BIN
textures/hdf_c0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

BIN
textures/hdf_c1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

BIN
textures/hdf_c2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 B

BIN
textures/hdf_c3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 B

BIN
textures/hdf_c4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

BIN
textures/hdf_c5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 B

BIN
textures/hdf_c6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

BIN
textures/hdf_c7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

BIN
textures/hdf_c8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 B

BIN
textures/hdf_c9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

BIN
textures/hdf_ca.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

BIN
textures/hdf_cb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

BIN
textures/hdf_cc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 B

BIN
textures/hdf_cd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

BIN
textures/hdf_ce.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 B

BIN
textures/hdf_cf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 B

BIN
textures/hdf_d0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

BIN
textures/hdf_d1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

BIN
textures/hdf_d2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 B

BIN
textures/hdf_d3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

BIN
textures/hdf_d4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

BIN
textures/hdf_d5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

BIN
textures/hdf_d6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

BIN
textures/hdf_d7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 B

BIN
textures/hdf_d8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 B

BIN
textures/hdf_d9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 B

BIN
textures/hdf_da.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

BIN
textures/hdf_db.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

BIN
textures/hdf_dc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

BIN
textures/hdf_dd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

BIN
textures/hdf_de.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

BIN
textures/hdf_df.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

BIN
textures/hdf_e0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 B

BIN
textures/hdf_e1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

BIN
textures/hdf_e2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

BIN
textures/hdf_e3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

BIN
textures/hdf_e4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 B

BIN
textures/hdf_e5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

BIN
textures/hdf_e6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 B

BIN
textures/hdf_e7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 B

BIN
textures/hdf_e8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 B

BIN
textures/hdf_e9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

BIN
textures/hdf_ea.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 B

BIN
textures/hdf_eb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 B

BIN
textures/hdf_ec.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

BIN
textures/hdf_ed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 B

BIN
textures/hdf_ee.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

BIN
textures/hdf_ef.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 B

BIN
textures/hdf_f0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 B

BIN
textures/hdf_f1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

BIN
textures/hdf_f2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 B

BIN
textures/hdf_f3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 B

BIN
textures/hdf_f4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

BIN
textures/hdf_f5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

BIN
textures/hdf_f6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 B

BIN
textures/hdf_f7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 B

BIN
textures/hdf_f8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 B

BIN
textures/hdf_f9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

BIN
textures/hdf_fa.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

BIN
textures/hdf_fb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

BIN
textures/hdf_fc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 B

BIN
textures/hdf_fd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

BIN
textures/hdf_fe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

BIN
textures/hdf_ff.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 B

After

Width:  |  Height:  |  Size: 132 B

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