added localization (inttlib); added german

master
Sokomine 2017-12-25 02:08:06 +01:00
parent 0dbcda24c1
commit 661919aaaf
7 changed files with 305 additions and 95 deletions

View File

@ -1 +1,2 @@
mesecons?
intllib?

View File

@ -2,11 +2,12 @@
-- All doors (not only these here) in front of a travelnet or elevator are opened automaticly when a player arrives
-- and are closed when a player departs from the travelnet or elevator.
-- Autor: Sokomine
local S = travelnet.S;
travelnet.register_door = function( node_base_name, def_tiles, material )
minetest.register_node( node_base_name.."_open", {
description = "elevator door (open)",
description = S("elevator door (open)"),
drawtype = "nodebox",
-- top, bottom, side1, side2, inner, outer
tiles = def_tiles,
@ -36,7 +37,7 @@ travelnet.register_door = function( node_base_name, def_tiles, material )
})
minetest.register_node(node_base_name.."_closed", {
description = "elevator door (closed)",
description = S("elevator door (closed)"),
drawtype = "nodebox",
-- top, bottom, side1, side2, inner, outer
tiles = def_tiles,

View File

@ -1,6 +1,7 @@
-- This version of the travelnet box allows to move up or down only.
-- The network name is determined automaticly from the position (x/z coordinates).
-- >utor: Sokomine
local S = travelnet.S;
travelnet.show_nearest_elevator = function( pos, owner_name, param2 )
if( not( pos ) or not(pos.x) or not(pos.z) or not( owner_name )) then
@ -8,9 +9,9 @@ travelnet.show_nearest_elevator = function( pos, owner_name, param2 )
end
if( not( travelnet.targets[ owner_name ] )) then
minetest.chat_send_player( owner_name, "Congratulations! This is your first elevator."..
minetest.chat_send_player( owner_name, S("Congratulations! This is your first elevator."..
"You can build an elevator network by placing further elevators somewhere above "..
"or below this one. Just make sure that the x and z coordinate are the same.");
"or below this one. Just make sure that the x and z coordinate are the same."));
return;
end
@ -19,10 +20,10 @@ travelnet.show_nearest_elevator = function( pos, owner_name, param2 )
if( travelnet.targets[ owner_name ][ network_name ]
-- does the network have any members at all?
and next( travelnet.targets[ owner_name ][ network_name ], nil )) then
minetest.chat_send_player( owner_name, "This elevator will automaticly connect to the "..
minetest.chat_send_player( owner_name, S("This elevator will automaticly connect to the "..
"other elevators you have placed at diffrent heights. Just enter a station name "..
"and click on \"store\" to set it up. Or just punch it to set the height as station "..
"name.");
"name."));
return;
end
@ -47,46 +48,47 @@ travelnet.show_nearest_elevator = function( pos, owner_name, param2 )
end
end
if( nearest_name ~= "" ) then
local text = "Your nearest elevator network is located ";
local text = S("Your nearest elevator network is located").." ";
-- in front of/behind
if( (param2==0 and nearest_dist_z>=0)or (param2==2 and nearest_dist_z<=0)) then
text = text..tostring( math.abs(nearest_dist_z )).." m behind this elevator and ";
text = text..tostring( math.abs(nearest_dist_z )).." "..S("m behind this elevator and");
elseif((param2==1 and nearest_dist_x>=0)or (param2==3 and nearest_dist_x<=0)) then
text = text..tostring( math.abs(nearest_dist_x )).." m behind this elevator and ";
text = text..tostring( math.abs(nearest_dist_x )).." "..S("m behind this elevator and");
elseif((param2==0 and nearest_dist_z< 0)or (param2==2 and nearest_dist_z> 0)) then
text = text..tostring( math.abs(nearest_dist_z )).." m in front of this elevator and ";
text = text..tostring( math.abs(nearest_dist_z )).." "..S("m in front of this elevator and");
elseif((param2==1 and nearest_dist_x< 0)or (param2==3 and nearest_dist_x> 0)) then
text = text..tostring( math.abs(nearest_dist_x )).." m in front of this elevator and ";
else text = text.." ERROR ";
text = text..tostring( math.abs(nearest_dist_x )).." "..S("m in front of this elevator and");
else text = text..S(" ERROR");
end
text = text.." ";
-- right/left
if( (param2==0 and nearest_dist_x< 0)or (param2==2 and nearest_dist_x> 0)) then
text = text..tostring( math.abs(nearest_dist_x )).." m to the left";
text = text..tostring( math.abs(nearest_dist_x )).." "..S("m to the left");
elseif((param2==1 and nearest_dist_z>=0)or (param2==3 and nearest_dist_z<=0)) then
text = text..tostring( math.abs(nearest_dist_z )).." m to the left";
text = text..tostring( math.abs(nearest_dist_z )).." "..S("m to the left");
elseif((param2==0 and nearest_dist_x>=0)or (param2==2 and nearest_dist_x<=0)) then
text = text..tostring( math.abs(nearest_dist_x )).." m to the right";
text = text..tostring( math.abs(nearest_dist_x )).." "..S("m to the right");
elseif((param2==1 and nearest_dist_z< 0)or (param2==3 and nearest_dist_z> 0)) then
text = text..tostring( math.abs(nearest_dist_z )).." m to the right";
else text = text.." ERROR ";
text = text..tostring( math.abs(nearest_dist_z )).." "..S("m to the right");
else text = text..S(" ERROR");
end
minetest.chat_send_player( owner_name, text..
", located at x="..tostring( pos.x+nearest_dist_x)..
S(", located at x").."="..tostring( pos.x+nearest_dist_x)..
", z="..tostring( pos.z+nearest_dist_z)..
" This elevator here will start a new shaft/network." );
". "..S("This elevator here will start a new shaft/network."));
else
minetest.chat_send_player( owner_name, "This is your first elevator. It differs from "..
minetest.chat_send_player( owner_name, S("This is your first elevator. It differs from "..
"travelnet networks by only allowing movement in vertical direction (up or down). "..
"All further elevators which you will place at the same x,z coordinates at differnt "..
"heights will be able to connect to this elevator.");
"heights will be able to connect to this elevator."));
end
end
minetest.register_node("travelnet:elevator", {
description = "Elevator",
description = S("Elevator"),
drawtype = "mesh",
mesh = "travelnet_elevator.obj",
sunlight_propagates = true,
@ -127,17 +129,17 @@ minetest.register_node("travelnet:elevator", {
after_place_node = function(pos, placer, itemstack)
local meta = minetest.get_meta(pos);
meta:set_string("infotext", "Elevator (unconfigured)");
meta:set_string("infotext", S("Elevator (unconfigured)"));
meta:set_string("station_name", "");
meta:set_string("station_network","");
meta:set_string("owner", placer:get_player_name() );
-- request initial data
meta:set_string("formspec",
"size[12,10]"..
"field[0.3,5.6;6,0.7;station_name;Name of this station:;]"..
"field[0.3,5.6;6,0.7;station_name;"..S("Name of this station:")..";]"..
-- "field[0.3,6.6;6,0.7;station_network;Assign to Network:;]"..
-- "field[0.3,7.6;6,0.7;owner_name;(optional) owned by:;]"..
"button_exit[6.3,6.2;1.7,0.7;station_set;Store]" );
"button_exit[6.3,6.2;1.7,0.7;station_set;"..S("Store").."]" );
local p = {x=pos.x, y=pos.y+1, z=pos.z}
local p2 = minetest.dir_to_facedir(placer:get_look_dir())
@ -170,7 +172,7 @@ minetest.register_node("travelnet:elevator", {
local node = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z});
-- leftover elevator_top nodes can be removed by placing a new elevator underneath
if( node ~= nil and node.name ~= "air" and node.name ~= 'travelnet:elevator_top') then
minetest.chat_send_player( placer:get_player_name(), 'Not enough vertical space to place the travelnet box!' )
minetest.chat_send_player( placer:get_player_name(), S('Not enough vertical space to place the travelnet box!'))
return;
end
return minetest.item_place(itemstack, placer, pointed_thing);

154
init.lua
View File

@ -22,6 +22,8 @@
Please configure this mod in config.lua
Changelog:
24.12.17 - Added support for localization through intllib.
Added localization for German (de).
17.07.17 - Added more detailled licence information.
TNT and DungeonMasters ought to leave travelnets and elevators untouched now.
Added function to register elevator doors.
@ -73,13 +75,21 @@
--]]
minetest.register_privilege("travelnet_attach", { description = "allows to attach travelnet boxes to travelnets of other players", give_to_singleplayer = false});
minetest.register_privilege("travelnet_remove", { description = "allows to dig travelnet boxes which belog to nets of other players", give_to_singleplayer = false});
travelnet = {};
travelnet.targets = {};
-- Boilerplate to support localized strings if intllib mod is installed.
if minetest.get_modpath( "intllib" ) and intllib then
travelnet.S = intllib.Getter()
else
travelnet.S = function(s) return s end
end
local S = travelnet.S;
minetest.register_privilege("travelnet_attach", { description = S("allows to attach travelnet boxes to travelnets of other players"), give_to_singleplayer = false});
minetest.register_privilege("travelnet_remove", { description = S("allows to dig travelnet boxes which belog to nets of other players"), give_to_singleplayer = false});
-- read the configuration
dofile(minetest.get_modpath("travelnet").."/config.lua"); -- the normal, default travelnet
@ -98,7 +108,7 @@ travelnet.save_data = function()
file:write( data );
file:close();
else
print("[Mod travelnet] Error: Savefile '"..tostring( path ).."' could not be written.");
print(S("[Mod travelnet] Error: Savefile '%s' could not be written."):format(tostring(path)));
end
end
@ -113,7 +123,7 @@ travelnet.restore_data = function()
travelnet.targets = minetest.deserialize( data );
file:close();
else
print("[Mod travelnet] Error: Savefile '"..tostring( path ).."' not found.");
print(S("[Mod travelnet] Error: Savefile '%s' not found."):format(tostring(path)));
end
end
@ -145,8 +155,8 @@ travelnet.show_message = function( pos, player_name, title, message )
local formspec = "size[8,3]"..
"label[3,0;"..minetest.formspec_escape( title or "Error").."]"..
"textlist[0,0.5;8,1.5;;"..minetest.formspec_escape( message or "- nothing -")..";]"..
"button_exit[3.5,2.5;1.0,0.5;back;Back]"..
"button_exit[6.8,2.5;1.0,0.5;station_exit;Exit]"..
"button_exit[3.5,2.5;1.0,0.5;back;"..S("Back").."]"..
"button_exit[6.8,2.5;1.0,0.5;station_exit;"..S("Exit").."]"..
"field[20,20;0.1,0.1;pos2str;Pos;".. minetest.pos_to_string( pos ).."]";
minetest.show_formspec(player_name, "travelnet:show", formspec);
end
@ -189,7 +199,7 @@ travelnet.reset_formspec = function( meta )
if( not( meta )) then
return;
end
meta:set_string("infotext", "Travelnet-box (unconfigured)");
meta:set_string("infotext", S("Travelnet-box (unconfigured)"));
meta:set_string("station_name", "");
meta:set_string("station_network","");
meta:set_string("owner", "");
@ -201,19 +211,19 @@ travelnet.reset_formspec = function( meta )
-- request initinal data
meta:set_string("formspec",
"size[10,6.0]"..
"label[2.0,0.0;--> Configure this travelnet station <--]"..
"field[0.3,1.2;9,0.9;station_name;Name of this station:;"..
"label[2.0,0.0;--> "..S("Configure this travelnet station").." <--]"..
"field[0.3,1.2;9,0.9;station_name;"..S("Name of this station")..":;"..
minetest.formspec_escape(station_name or "").."]"..
"label[0.3,1.5;How do you call this place here? Example: \"my first house\", \"mine\", \"shop\"...]"..
"label[0.3,1.5;"..S("How do you call this place here? Example: \"my first house\", \"mine\", \"shop\"...").."]"..
"field[0.3,2.8;9,0.9;station_network;Assign to Network:;"..
"field[0.3,2.8;9,0.9;station_network;"..S("Assign to Network:")..";"..
minetest.formspec_escape(station_network or "").."]"..
"label[0.3,3.1;You can have more than one network. If unsure, use \""..tostring(station_network).."\".]"..
"field[0.3,4.4;9,0.9;owner;Owned by:;]"..
"label[0.3,4.7;Unless you know what you are doing, leave this empty.]"..
"button_exit[1.3,5.3;1.7,0.7;station_help_setup;Help]"..
"button_exit[3.8,5.3;1.7,0.7;station_set;Save]"..
"button_exit[6.3,5.3;1.7,0.7;station_exit;Exit]");
"label[0.3,3.1;"..S("You can have more than one network. If unsure, use \"%s\""):format(tostring(station_network)).."\".]"..
"field[0.3,4.4;9,0.9;owner;"..S("Owned by:")..";]"..
"label[0.3,4.7;"..S("Unless you know what you are doing, leave this empty.").."]"..
"button_exit[1.3,5.3;1.7,0.7;station_help_setup;"..S("Help").."]"..
"button_exit[3.8,5.3;1.7,0.7;station_set;"..S("Save").."]"..
"button_exit[6.3,5.3;1.7,0.7;station_exit;"..S("Exit").."]");
end
@ -252,7 +262,7 @@ travelnet.update_formspec = function( pos, puncher_name, fields )
travelnet.reset_formspec( meta );
travelnet.show_message( pos, puncher_name, "Error", "Update failed! Resetting this box on the travelnet." );
travelnet.show_message( pos, puncher_name, "Error", S("Update failed! Resetting this box on the travelnet."));
return;
end
@ -280,7 +290,8 @@ travelnet.update_formspec = function( pos, puncher_name, fields )
-- add this station
travelnet.targets[ owner_name ][ station_network ][ station_name ] = {pos=pos, timestamp=zeit };
minetest.chat_send_player(owner_name, "Station '"..station_name.."' has been reattached to the network '"..station_network.."'.");
minetest.chat_send_player(owner_name, S("Station '%s'"):format(station_name).." "..
S(" has been reattached to the network '%s'."):format(station_network));
travelnet.save_data();
end
@ -289,15 +300,15 @@ travelnet.update_formspec = function( pos, puncher_name, fields )
local zusatzstr = "";
local trheight = "10";
if( this_node and this_node.name=="locked_travelnet:travelnet" ) then
zusatzstr = "field[0.3,11;6,0.7;locks_sent_lock_command;Locked travelnet. Type /help for help:;]";
zusatzstr = "field[0.3,11;6,0.7;locks_sent_lock_command;"..S("Locked travelnet. Type /help for help:")..";]";
trheight = "11.5";
end
local formspec = "size[12,"..trheight.."]"..
"label[3.3,0.0;Travelnet-Box:]".."label[6.3,0.0;Punch box to update target list.]"..
"label[0.3,0.4;Name of this station:]".."label[6.3,0.4;"..minetest.formspec_escape(station_name or "?").."]"..
"label[0.3,0.8;Assigned to Network:]" .."label[6.3,0.8;"..minetest.formspec_escape(station_network or "?").."]"..
"label[0.3,1.2;Owned by:]" .."label[6.3,1.2;"..minetest.formspec_escape(owner_name or "?").."]"..
"label[3.3,1.6;Click on target to travel there:]"..
"label[3.3,0.0;"..S("Travelnet-Box")..":]".."label[6.3,0.0;"..S("Punch box to update target list.").."]"..
"label[0.3,0.4;"..S("Name of this station:").."]".."label[6.3,0.4;"..minetest.formspec_escape(station_name or "?").."]"..
"label[0.3,0.8;"..S("Assigned to Network:").."]" .."label[6.3,0.8;"..minetest.formspec_escape(station_network or "?").."]"..
"label[0.3,1.2;"..S("Owned by:").."]" .."label[6.3,1.2;"..minetest.formspec_escape(owner_name or "?").."]"..
"label[3.3,1.6;"..S("Click on target to travel there:").."]"..
zusatzstr;
-- "button_exit[5.3,0.3;8,0.8;do_update;Punch box to update destination list. Click on target to travel there.]"..
local x = 0;
@ -330,7 +341,7 @@ travelnet.update_formspec = function( pos, puncher_name, fields )
end
for index,k in ipairs( stations ) do
if( index == ground_level ) then
travelnet.targets[ owner_name ][ station_network ][ k ].nr = 'G';
travelnet.targets[ owner_name ][ station_network ][ k ].nr = S('G');
else
travelnet.targets[ owner_name ][ station_network ][ k ].nr = tostring( ground_level - index );
end
@ -368,10 +379,10 @@ travelnet.update_formspec = function( pos, puncher_name, fields )
end
-- handle errors
if( swap_with_pos < 1) then
travelnet.show_message( pos, puncher_name, "Info", "This station is already the first one on the list.");
travelnet.show_message( pos, puncher_name, "Info", S("This station is already the first one on the list."));
return;
elseif( swap_with_pos > #stations ) then
travelnet.show_message( pos, puncher_name, "Info", "This station is already the last one on the list.");
travelnet.show_message( pos, puncher_name, "Info", S("This station is already the last one on the list."));
return;
else
-- swap the actual data by which the stations are sorted
@ -436,15 +447,17 @@ travelnet.update_formspec = function( pos, puncher_name, fields )
end
end
formspec = formspec..
"label[8.0,1.6;Position in list:]"..
"button_exit[11.3,0.0;1.0,0.5;station_exit;Exit]"..
"button_exit[9.6,1.6;1.4,0.5;move_up;move up]"..
"button_exit[10.9,1.6;1.4,0.5;move_down;move down]";
"label[8.0,1.6;"..S("Position in list:").."]"..
"button_exit[11.3,0.0;1.0,0.5;station_exit;"..S("Exit").."]"..
"button_exit[9.6,1.6;1.4,0.5;move_up;"..S("move up").."]"..
"button_exit[10.9,1.6;1.4,0.5;move_down;"..S("move down").."]";
meta:set_string( "formspec", formspec );
meta:set_string( "infotext", "Station '"..tostring( station_name ).."' on travelnet '"..tostring( station_network )..
"' (owned by "..tostring( owner_name )..") ready for usage. Right-click to travel, punch to update.");
meta:set_string( "infotext", S("Station '%s'"):format(tostring( station_name )).." "..
S("on travelnet '%s'"):format(tostring( station_network )).." "..
S("(owned by %s)"):format(tostring( owner_name )).." "..
S("ready for usage. Right-click to travel, punch to update."));
-- show the player the updated formspec
travelnet.show_current_formspec( pos, meta, puncher_name );
@ -464,18 +477,18 @@ travelnet.add_target = function( station_name, network_name, pos, player_name, m
is_elevator = true;
network_name = tostring( pos.x )..','..tostring( pos.z );
if( not( station_name ) or station_name == '' ) then
station_name = 'at '..tostring( pos.y )..'m';
station_name = S('at %s m'):format(tostring( pos.y ));
end
end
if( station_name == "" or not(station_name )) then
travelnet.show_message( pos, player_name, "Error", "Please provide a name for this station." );
travelnet.show_message( pos, player_name, S("Error"), S("Please provide a name for this station." ));
return;
end
if( network_name == "" or not( network_name )) then
travelnet.show_message( pos, player_name, "Error",
"Please provide the name of the network this station ought to be connected to." );
travelnet.show_message( pos, player_name, S("Error"),
S("Please provide the name of the network this station ought to be connected to."));
return;
end
@ -487,16 +500,16 @@ travelnet.add_target = function( station_name, network_name, pos, player_name, m
elseif( not( minetest.check_player_privs(player_name, {interact=true}))) then
travelnet.show_message( pos, player_name, "Error",
"There is no player with interact privilege named '"..tostring( player_name ).."'. Aborting.");
travelnet.show_message( pos, player_name, S("Error"),
S("There is no player with interact privilege named '%s'. Aborting."):format(tostring( player_name )));
return;
elseif( not( minetest.check_player_privs(player_name, {travelnet_attach=true}))
and not( travelnet.allow_attach( player_name, owner_name, network_name ))) then
travelnet.show_message( pos, player_name, "Error",
"You do not have the travelnet_attach priv which is required to attach your box to "..
"the network of someone else. Aborting.");
travelnet.show_message( pos, player_name, S("Error"),
S("You do not have the travelnet_attach priv which is required to attach your box to "..
"the network of someone else. Aborting."));
return;
end
@ -515,8 +528,8 @@ travelnet.add_target = function( station_name, network_name, pos, player_name, m
for k,v in pairs( travelnet.targets[ owner_name ][ network_name ] ) do
if( k == station_name ) then
travelnet.show_message( pos, player_name, "Error",
"A station named '"..station_name.."' already exists on this network. Please choose a diffrent name!");
travelnet.show_message( pos, player_name, S("Error"),
S("A station named '%s' already exists on this network. Please choose a diffrent name!"):format(station_name));
return;
end
@ -525,10 +538,10 @@ travelnet.add_target = function( station_name, network_name, pos, player_name, m
-- we don't want too many stations in the same network because that would get confusing when displaying the targets
if( anz+1 > travelnet.MAX_STATIONS_PER_NETWORK ) then
travelnet.show_message( pos, player_name, "Error",
"Network '"..network_name.."' already contains the maximum number (="..
(travelnet.MAX_STATIONS_PER_NETWORK)..") of allowed stations per network. "..
"Please choose a diffrent/new network name.");
travelnet.show_message( pos, player_name, S("Error"),
S("Network '%s',"):format(network_name).." "..
S("already contains the maximum number (=%s) of allowed stations per network. "..
"Please choose a diffrent/new network name."):format(travelnet.MAX_STATIONS_PER_NETWORK));
return;
end
@ -538,8 +551,9 @@ travelnet.add_target = function( station_name, network_name, pos, player_name, m
-- do we have a new node to set up? (and are not just reading from a safefile?)
if( meta ) then
minetest.chat_send_player(player_name, "Station '"..station_name.."' has been added to the network '"
..network_name.."', which now consists of "..( anz+1 ).." station(s).");
minetest.chat_send_player(player_name, S("Station '%s'"):format(station_name).." "..
S("has been added to the network '%s'"):format(network_name)..
S(", which now consists of %s station(s)."):format(anz+1));
meta:set_string( "station_name", station_name );
meta:set_string( "station_network", network_name );
@ -548,8 +562,8 @@ travelnet.add_target = function( station_name, network_name, pos, player_name, m
meta:set_string("formspec",
"size[12,10]"..
"field[0.3,0.6;6,0.7;station_name;Station:;".. minetest.formspec_escape(meta:get_string("station_name")).."]"..
"field[0.3,3.6;6,0.7;station_network;Network:;"..minetest.formspec_escape(meta:get_string("station_network")).."]" );
"field[0.3,0.6;6,0.7;station_name;"..S("Station:")..";".. minetest.formspec_escape(meta:get_string("station_name")).."]"..
"field[0.3,3.6;6,0.7;station_network;"..S("Network:")..";"..minetest.formspec_escape(meta:get_string("station_network")).."]" );
-- display a list of all stations that can be reached from here
travelnet.update_formspec( pos, player_name, nil );
@ -626,7 +640,7 @@ travelnet.on_receive_fields = function(pos, formname, fields, player)
if( node and node.name and minetest.registered_nodes[ node.name ] ) then
travelnet.show_message( pos, name, "--> Help <--",
-- TODO: actually add help page
"If only there would be any help for "..tostring( node.name ).."..");
S("No help available yet."));
end
return;
end
@ -650,7 +664,7 @@ travelnet.on_receive_fields = function(pos, formname, fields, player)
end
if( not( fields.target )) then
minetest.chat_send_player(name, "Please click on the target you want to travel to.");
minetest.chat_send_player(name, S("Please click on the target you want to travel to."));
return;
end
@ -672,7 +686,8 @@ travelnet.on_receive_fields = function(pos, formname, fields, player)
and station_network ) then
travelnet.add_target( station_name, station_network, pos, owner_name, meta, owner_name );
else
minetest.chat_send_player(name, "Error: There is something wrong with the configuration of this station. "..
minetest.chat_send_player(name, S("Error")..": "..
S("There is something wrong with the configuration of this station.")..
" DEBUG DATA: owner: "..( owner_name or "?")..
" station_name: "..(station_name or "?")..
" station_network: "..(station_network or "?")..".");
@ -685,7 +700,8 @@ travelnet.on_receive_fields = function(pos, formname, fields, player)
or not( travelnet.targets )
or not( travelnet.targets[ owner_name ] )
or not( travelnet.targets[ owner_name ][ station_network ] )) then
minetest.chat_send_player(name, "Error: This travelnet is lacking data and/or improperly configured.");
minetest.chat_send_player(name, S("Error")..": "..
S("This travelnet is lacking data and/or improperly configured."));
print( "ERROR: The travelnet at "..minetest.pos_to_string( pos ).." has a problem: "..
" DATA: owner: "..( owner_name or "?")..
" station_name: "..(station_name or "?")..
@ -707,7 +723,8 @@ travelnet.on_receive_fields = function(pos, formname, fields, player)
-- if the target station is gone
if( not( travelnet.targets[ owner_name ][ station_network ][ fields.target ] )) then
minetest.chat_send_player(name, "Station '"..( fields.target or "?").." does not exist (anymore?) on this network.");
minetest.chat_send_player(name, S("Station '%s'"):format( fields.target or "?").." "..
S("does not exist (anymore?) on this network."));
travelnet.update_formspec( pos, name, nil );
return;
end
@ -716,7 +733,7 @@ travelnet.on_receive_fields = function(pos, formname, fields, player)
if( not( travelnet.allow_travel( name, owner_name, station_network, station_name, fields.target ))) then
return;
end
minetest.chat_send_player(name, "Initiating transfer to station '"..( fields.target or "?").."'.'");
minetest.chat_send_player(name, S("Initiating transfer to station '%s'."):format( fields.target or "?"));
@ -782,7 +799,8 @@ end
travelnet.remove_box = function( pos, oldnode, oldmetadata, digger )
if( not( oldmetadata ) or oldmetadata=="nil" or not(oldmetadata.fields)) then
minetest.chat_send_player( digger:get_player_name(), "Error: Could not find information about the station that is to be removed.");
minetest.chat_send_player( digger:get_player_name(), S("Error")..": "..
S("Could not find information about the station that is to be removed."));
return;
end
@ -797,16 +815,19 @@ travelnet.remove_box = function( pos, oldnode, oldmetadata, digger )
or not( travelnet.targets[ owner_name ] )
or not( travelnet.targets[ owner_name ][ station_network ] )) then
minetest.chat_send_player( digger:get_player_name(), "Error: Could not find the station that is to be removed.");
minetest.chat_send_player( digger:get_player_name(), S("Error")..": "..
S("Could not find the station that is to be removed."));
return;
end
travelnet.targets[ owner_name ][ station_network ][ station_name ] = nil;
-- inform the owner
minetest.chat_send_player( owner_name, "Station '"..station_name.."' has been REMOVED from the network '"..station_network.."'.");
minetest.chat_send_player( owner_name, S("Station '%s'"):format(station_name ).." "..
S("has been REMOVED from the network '%s'."):format(station_network));
if( digger ~= nil and owner_name ~= digger:get_player_name() ) then
minetest.chat_send_player( digger:get_player_name(), "Station '"..station_name.."' has been REMOVED from the network '"..station_network.."'.");
minetest.chat_send_player( digger:get_player_name(), S("Station '%s'"):format(station_name)..
S("has been REMOVED from the network '%s'."):format(station_network));
end
-- save the updated network data in a savefile over server restart
@ -832,11 +853,11 @@ travelnet.can_dig = function( pos, player, description )
end
if( not( meta ) or not( owner) or owner=='') then
minetest.chat_send_player(name, "This "..description.." has not been configured yet. Please set it up first to claim it. Afterwards you can remove it because you are then the owner.");
minetest.chat_send_player(name, S("This %s has not been configured yet. Please set it up first to claim it. Afterwards you can remove it because you are then the owner."):format(description));
return false;
elseif( owner ~= name ) then
minetest.chat_send_player(name, "This "..description.." belongs to "..tostring( meta:get_string('owner'))..". You can't remove it.");
minetest.chat_send_player(name, S("This %s belongs to %s. You can't remove it."):format(description, tostring( meta:get_string('owner'))));
return false;
end
return true;
@ -895,4 +916,3 @@ end
-- upon server start, read the savefile
travelnet.restore_data();

92
locale/de.txt Normal file
View File

@ -0,0 +1,92 @@
# Template
### config.lua ###
### init.lua ###
allows to attach travelnet boxes to travelnets of other players = erlaubt es, Stationen zu den Reisenetzwerken anderer Spieler hinzuzufügen
allows to dig travelnet boxes which belog to nets of other players = erlaubt es, die Reisenetz-Stationen anderer Spieler zu entfernen
[Mod travelnet] Error: Savefile '%s' could not be written. = [Mod travelnet] Fehler: Sicherungsdatei '%s' konnte nicht geschrieben werden.
[Mod travelnet] Error: Savefile '%s' not found. = [Mod travelnet] Fehler: Sicherungsdatei '%s' nicht gefunden.
Back = Zurück
Exit = Ende
Travelnet-box (unconfigured) = Reisenetz-Box (nicht konfiguriert)
Configure this travelnet station = Konfiguration dieser Reisenetz-Box
Name of this station = Name dieser Reisenetz-Box
How do you call this place here? Example: \"my first house\", \"mine\", \"shop\"... = Wie willst du diesen Ort nennen? Beispiel: \"mein erstes Haus\", \"Mine\", \"Laden\"...
Assign to Network: = Station dem folgendem Netzwerk zuweisen:
You can have more than one network. If unsure, use \"%s\" = Du kannst mehrere Netzwerke anlegen. Falls du nicht weißt, was du tun sollst, wähle \"%s\"
Owned by: = Besitzer:
Unless you know what you are doing, leave this empty. = Wenn du nicht weißt, wozu dieses Feld dient, laß es leer.
Help = Hilfe
Save = Speichern
Update failed! Resetting this box on the travelnet. = Aktualisierung gescheitert. Konfiguration der Reisenetz-Box wird zurückgesetzt.
Station '%s' = Station '%s'
has been reattached to the network '%s'. = wurde dem Netzwerk '%s' wieder hinzugefügt.
Locked travelnet. Type /help for help: = Abgeschlossene Reisenetz-Box. Tippe /help für Hilfe:
Punch box to update target list. = Reisenetz-Box mit Linksklick aktualisieren.
Travelnet-Box = Reisenetz-Box
Name of this station: = Name dieser Station:
Assigned to Network: = Zugehöriges Netzwerk:
Click on target to travel there: = Klicke auf das Ziel um dorthin zu reisen:
G = E
This station is already the first one on the list. = Diese Reisenetz-Box ist bereits die erste auf der Liste.
This station is already the last one on the list. = Diese Reisenetz-Box ist bereits die letzte auf der Liste.
Position in list: = Listenposition:
move up = hoch
move down = runter
on travelnet '%s' = im Reisenetzwerk '%s'
owned by %s = Eigentum von %s
ready for usage. Right-click to travel, punch to update. = bereit für die Nutzung. Rechtsklick um zu Reisen, Linksklick für Update.
at %s m = in %s m Höhe
Error = Fehler
Please provide a name for this station. = Bitte gib einen Namen für diese Reisenetz-Box an.
Please provide the name of the network this station ought to be connected to. = Bitte gib einen Namen für das Netzwerk an zu dem diese Reisenetz-Box gehören soll.
There is no player with interact privilege named '%s'. Aborting. = Es gibt keinen Spieler mit interact-Recht names '%s'. Abbruch.
You do not have the travelnet_attach priv which is required to attach your box to the network of someone else. Aborting. = Dir fehlt das travelnet_attach-Recht, welches für das Hinzufügen von Reisenetz-Boxen zu Netzwerken nötig ist, die anderen Spielern gehören. Abbruch.
A station named '%s' already exists on this network. Please choose a diffrent name! = Eine Reisenetz-Box namens '%s' existiert bereits in diesem Netzwerk. Abbruch.
Network '%s' = Netzwerk '%s'
already contains the maximum number (=%s) of allowed stations per network. Please choose a diffrent/new network name. = enthält bereits die maixmale Anzahl (=%s) erlaubert Stationen pro Netzwerk. Bitte wähle ein anderes bzw. neues Netzwerk.
has been added to the network '%s' = wurde an das Netzwerk '%s' angeschlossen.
, which now consists of %s station(s). = , das nun aus %s Station(en) besteht.
Station: = Station:
Network: = Netzwerk:
No help available yet. = Noch keine Hilfe eingebaut.
Please click on the target you want to travel to. = Bitte klicke auf das Ziel zu dem du reisen willst.
There is something wrong with the configuration of this station. = Die Konfiguration dieser Reisenetz-Box ist fehlerhaft.
This travelnet is lacking data and/or improperly configured. = Diese Reisenetz-Box ist fehlerhaft oder unvollständig konfiguriert.
does not exist (anymore?) on this network. = gibt es nicht (mehr?) in diesem Netzwerk.
Initiating transfer to station '%s'. = leite Reise zur Station '%s' ein.
Could not find information about the station that is to be removed. = Konnte keine Informationen über die zu entfernende Station finden.
Could not find the station that is to be removed. = Konnte die zu entfernende Station nicht finden.
has been REMOVED from the network '%s'. = wurde vom Netzwerk '%s' ENTFERNT.
This %s has not been configured yet. Please set it up first to claim it. Afterwards you can remove it because you are then the owner. = Diese Reisenetz-Box wurde noch nicht konfiguriert. Bitte konfiguriere sie um sie in Besitz zu nehmen. Anschließend kannst du sie auch wieder entfernen da du dann der Besitzer bist.
This %s belongs to %s. You can't remove it. = Diese Reisenetz-Box gehört %s. Du kannst sie nicht entfernen.
### travelnet.lua ###
Not enough vertical space to place the travelnet box! = Nicht genug Platz (vertikal) um die Reisenetz-Box zu setzen!
### elevator.lua ###
Congratulations! This is your first elevator. You can build an elevator network by placing further elevators somewhere above or below this one. Just make sure that the x and z coordinate are the same. =
This elevator will automaticly connect to the other elevators you have placed at diffrent heights. Just enter a station name and click on \"store\" to set it up. Or just punch it to set the height as station name. = Dieser Aufzug wird sich automatisch mit anderen Aufzügen verbinden die du auf unterschiedlichen Höhen positioniert hast. Gib einfach einen Namen für diese Station hier ein und klicke auf \"Speichern\" um die Station einzurichten. Oder mache einen Linksklick um die Höhe als Stationsname zu setzen.
Your nearest elevator network is located = Dein nächstgelegenes Aufzugs-Netzwerk befindet sich
m behind this elevator and = m hinter diesem Aufzug und
m in front of this elevator and = m vor diesem Aufzug und
m to the left = m links
m to the right = m rechts
, located at x = , an Position x
This elevator here will start a new shaft/network. = Dieser Aufzug hier wird einen neuen Schaft bzw. ein neues Netzwerk erstellen.
This is your first elevator. It differs from travelnet networks by only allowing movement in vertical direction (up or down). All further elevators which you will place at the same x,z coordinates at differnt heights will be able to connect to this elevator. = Dies ist dein erster Aufzug. Der Aufzug unterscheidet sich von Reisenetz-Boxen insofern als daß er nur Reisen in vertikaler Richtung (hoch und runter) erlaubt. Alle folgenden Aufzüge, die du an die selben x,z Koordinaten auf verschiedenen Höhenpositionen setzen wirst, werden sich automatisch mit diesem Aufzug verbinden.
Elevator = Aufzug
Elevator (unconfigured) = Aufzug (nicht konfiguriert)
### doors.lua ###
elevator door (open) = Aufzugstür (offen)
elevator door (closed) = Aufzugstür (geschlossen)

92
locale/template.txt Normal file
View File

@ -0,0 +1,92 @@
# Template
### config.lua ###
### init.lua ###
allows to attach travelnet boxes to travelnets of other players =
allows to dig travelnet boxes which belog to nets of other players =
[Mod travelnet] Error: Savefile '%s' could not be written. =
[Mod travelnet] Error: Savefile '%s' not found. =
Back =
Exit =
Travelnet-box (unconfigured) =
Configure this travelnet station =
Name of this station =
How do you call this place here? Example: \"my first house\", \"mine\", \"shop\"... =
Assign to Network: =
You can have more than one network. If unsure, use \"%s\" =
Owned by: =
Unless you know what you are doing, leave this empty. =
Help =
Save =
Update failed! Resetting this box on the travelnet. =
Station '%s' =
has been reattached to the network '%s'. =
Locked travelnet. Type /help for help: =
Punch box to update target list. =
Travelnet-Box =
Name of this station: =
Assigned to Network: =
Click on target to travel there: =
G =
This station is already the first one on the list. =
This station is already the last one on the list. =
Position in list: =
move up =
move down =
on travelnet '%s' =
owned by %s =
ready for usage. Right-click to travel, punch to update. =
at %s m =
Error =
Please provide a name for this station. =
Please provide the name of the network this station ought to be connected to. =
There is no player with interact privilege named '%s'. Aborting. =
You do not have the travelnet_attach priv which is required to attach your box to the network of someone else. Aborting. =
A station named '%s' already exists on this network. Please choose a diffrent name! =
Network '%s' =
already contains the maximum number (=%s) of allowed stations per network. Please choose a diffrent/new network name. =
has been added to the network '%s' =
, which now consists of %s station(s). =
Station: =
Network: =
No help available yet. =
Please click on the target you want to travel to. =
There is something wrong with the configuration of this station. =
This travelnet is lacking data and/or improperly configured. =
does not exist (anymore?) on this network. =
Initiating transfer to station '%s'. =
Could not find information about the station that is to be removed. =
Could not find the station that is to be removed. =
has been REMOVED from the network '%s'. =
This %s has not been configured yet. Please set it up first to claim it. Afterwards you can remove it because you are then the owner. =
This %s belongs to %s. You can't remove it. =
### travelnet.lua ###
Not enough vertical space to place the travelnet box! =
### elevator.lua ###
Congratulations! This is your first elevator. You can build an elevator network by placing further elevators somewhere above or below this one. Just make sure that the x and z coordinate are the same. =
This elevator will automaticly connect to the other elevators you have placed at diffrent heights. Just enter a station name and click on \"store\" to set it up. Or just punch it to set the height as station name. =
Your nearest elevator network is located =
m behind this elevator and =
m in front of this elevator and =
m to the left =
m to the right =
, located at x =
This elevator here will start a new shaft/network. =
This is your first elevator. It differs from travelnet networks by only allowing movement in vertical direction (up or down). All further elevators which you will place at the same x,z coordinates at differnt heights will be able to connect to this elevator. =
Elevator =
Elevator (unconfigured) =
### doors.lua ###
elevator door (open) =
elevator door (closed) =

View File

@ -3,9 +3,11 @@
-- digging of such a travelnet is limited to the owner and to people with the travelnet_remove priv (useful for admins to clean up)
-- (this can be overrided in config.lua)
-- Author: Sokomine
local S = travelnet.S;
minetest.register_node("travelnet:travelnet", {
description = "Travelnet box",
description = S("Travelnet-Box"),
drawtype = "mesh",
mesh = "travelnet.obj",
@ -81,7 +83,7 @@ minetest.register_node("travelnet:travelnet", {
local pos = pointed_thing.above;
if( minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name ~= "air" ) then
minetest.chat_send_player( placer:get_player_name(), 'Not enough vertical space to place the travelnet box!' )
minetest.chat_send_player( placer:get_player_name(), S('Not enough vertical space to place the travelnet box!'))
return;
end
return minetest.item_place(itemstack, placer, pointed_thing);