update street signs and travelnet

This commit is contained in:
Vanessa Dannenberg 2018-09-21 20:48:11 -04:00
parent 3966b90b10
commit 0a1c40ae38
4 changed files with 383 additions and 30 deletions

View File

@ -29,25 +29,6 @@ street_signs.modpath = minetest.get_modpath("street_signs")
local DEFAULT_TEXT_SCALE = {x=10, y=10}
street_signs.standard_sign_model = {
nodebox = {
type = "fixed",
fixed = {
{ -1/32, 23/16, -1/32, 1/32, 24/16, 1/32 },
{ -1/32, 18/16, -8/16, 1/32, 23/16, 8/16 },
{ -1/32, 17/16, -1/32, 1/32, 18/16, 1/32 },
{ -8/16, 12/16, -1/32, 8/16, 17/16, 1/32 },
{ -1/16, -8/16, -1/16, 1/16, 12/16, 1/16 },
}
},
yaw = {
0,
math.pi / -2,
math.pi,
math.pi / 2,
}
}
-- infinite stacks
if not minetest.settings:get_bool("creative_mode") then
@ -386,10 +367,13 @@ street_signs.update_sign = function(pos, fields)
-- if there is no entity
local signnode = minetest.get_node(pos)
local signname = signnode.name
local text = minetest.add_entity(pos, "street_signs:text")
local yaw = street_signs.standard_sign_model.yaw[minetest.get_node(pos).param2 + 1]
if not yaw then return end
text:setyaw(yaw)
local def = minetest.registered_items[signname]
local obj = minetest.add_entity(pos, "street_signs:text")
if not def.entity_info then return end
obj:setyaw(def.entity_info.yaw[signnode.param2 + 1])
obj:set_properties({
mesh = def.entity_info.mesh,
})
end
function street_signs.receive_fields(pos, formname, fields, sender)
@ -408,14 +392,25 @@ function street_signs.receive_fields(pos, formname, fields, sender)
end
end
local cbox = {
type = "fixed",
fixed = {
{ -1/32, 23/16, -1/32, 1/32, 24/16, 1/32 },
{ -1/32, 18/16, -8/16, 1/32, 23/16, 8/16 },
{ -1/32, 17/16, -1/32, 1/32, 18/16, 1/32 },
{ -8/16, 12/16, -1/32, 8/16, 17/16, 1/32 },
{ -1/16, -8/16, -1/16, 1/16, 12/16, 1/16 },
}
}
minetest.register_node("street_signs:sign_basic", {
description = "Basic street name sign",
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
drawtype = "mesh",
node_box = street_signs.standard_sign_model.nodebox,
selection_box = street_signs.standard_sign_model.nodebox,
node_box = cbox,
selection_box = cbox,
mesh = "street_signs_basic.obj",
tiles = { "street_signs_basic.png" },
groups = {choppy=2, dig_immediate=2},
@ -432,6 +427,62 @@ minetest.register_node("street_signs:sign_basic", {
on_punch = function(pos, node, puncher)
street_signs.update_sign(pos)
end,
entity_info = {
mesh = "street_signs_basic_entity.obj",
yaw = {
0,
math.pi / -2,
math.pi,
math.pi / 2,
}
}
})
cbox = {
type = "fixed",
fixed = {
{ -1/32, 7/16, -1/32, 1/32, 8/16, 1/32 },
{ -1/32, 2/16, -8/16, 1/32, 7/16, 8/16 },
{ -1/32, 1/16, -1/32, 1/32, 2/16, 1/32 },
{ -8/16, -4/16, -1/32, 8/16, 1/16, 1/32 },
{ -1/16, -8/16, -1/16, 1/16, -4/16, 1/16 },
}
}
minetest.register_node("street_signs:sign_basic_top_only", {
description = "Basic street name sign, top only",
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
drawtype = "mesh",
node_box = cbox,
selection_box = cbox,
mesh = "street_signs_basic_top_only.obj",
tiles = { "street_signs_basic.png" },
groups = {choppy=2, dig_immediate=2},
default_color = "f",
on_construct = function(pos)
street_signs.construct_sign(pos)
end,
on_destruct = function(pos)
street_signs.destruct_sign(pos)
end,
on_receive_fields = function(pos, formname, fields, sender)
street_signs.receive_fields(pos, formname, fields, sender)
end,
on_punch = function(pos, node, puncher)
street_signs.update_sign(pos)
end,
entity_info = {
mesh = "street_signs_basic_top_only_entity.obj",
yaw = {
0,
math.pi / -2,
math.pi,
math.pi / 2,
}
}
})
local signs_text_on_activate
@ -439,10 +490,16 @@ local signs_text_on_activate
signs_text_on_activate = function(self)
local pos = self.object:getpos()
local meta = minetest.get_meta(pos)
local signnode = minetest.get_node(pos)
local signname = signnode.name
local def = minetest.registered_items[signname]
local text = meta:get_string("text")
if text and minetest.registered_nodes[minetest.get_node(pos).name] then
if text and def and def.entity_info then
text = trim_input(text)
set_obj_text(self.object, text, nil, pos)
self.object:set_properties({
mesh = def.entity_info.mesh,
})
end
end
@ -487,6 +544,44 @@ if minetest.get_modpath("signs_lib") then
})
end
minetest.register_craft({
output = "street_signs:sign_basic_top_only",
recipe = {
{ "dye:green", "default:sign_wall_steel", "dye:green" },
{ "dye:white", "default:steel_ingot", "" },
}
})
minetest.register_craft({
output = "street_signs:sign_basic_top_only",
recipe = {
{ "dye:green", "default:sign_wall_steel", "dye:green" },
{ "", "default:steel_ingot", "dye:white" },
}
})
if minetest.get_modpath("signs_lib") then
minetest.register_craft({
output = "street_signs:sign_basic_top_only",
recipe = {
{ "signs:sign_wall_green" },
{ "default:steel_ingot" },
}
})
end
minetest.register_craft({
output = "street_signs:sign_basic",
recipe = {
{ "street_signs:sign_basic_top_only" },
{ "default:steel_ingot" }
}
})
-- restore signs' text after /clearobjects and the like, the next time
-- a block is reloaded by the server.

View File

@ -0,0 +1,196 @@
# Blender v2.79 (sub 0) OBJ File: 'street signs basic.blend'
# www.blender.org
o Cube
v 0.062500 -0.250000 -0.062500
v 0.062500 -0.250000 0.062500
v -0.062500 -0.250000 -0.062500
v -0.062500 -0.250000 0.062500
v 0.031250 0.437500 -0.500000
v 0.031250 0.437500 0.500000
v -0.031250 0.437500 -0.500000
v -0.031250 0.437500 0.500000
v 0.031250 0.125000 -0.500000
v 0.031250 0.125000 0.500000
v -0.031250 0.125000 0.500000
v -0.031250 0.125000 -0.500000
v 0.500000 0.062500 -0.031250
v 0.500000 0.062500 0.031250
v -0.500000 0.062500 0.031250
v -0.500000 0.062500 -0.031250
v 0.500000 -0.250000 -0.031250
v 0.500000 -0.250000 0.031250
v -0.500000 -0.250000 0.031250
v -0.500000 -0.250000 -0.031250
v 0.031250 0.062500 -0.031250
v 0.031250 0.062500 0.031250
v -0.031250 0.062500 -0.031250
v -0.031250 0.062500 0.031250
v 0.031250 0.125000 -0.031250
v 0.031250 0.125000 0.031250
v -0.031250 0.125000 0.031250
v -0.031250 0.125000 -0.031250
v 0.031250 0.437500 -0.031250
v 0.031250 0.437500 0.031250
v -0.031250 0.437500 -0.031250
v -0.031250 0.437500 0.031250
v 0.031250 0.500000 -0.031250
v 0.031250 0.500000 0.031250
v -0.031250 0.500000 0.031250
v -0.031250 0.500000 -0.031250
v -0.062500 -0.500000 0.062500
v 0.062500 -0.500000 0.062500
v -0.062500 -0.500000 -0.062500
v 0.062500 -0.500000 -0.062500
vt 0.281250 0.593750
vt 0.156250 0.593750
vt 0.156250 0.531250
vt 0.281250 0.531250
vt 0.781250 0.093750
vt 0.718750 0.093750
vt 0.718750 0.593750
vt 0.781250 0.593750
vt 0.781250 0.093750
vt 0.781250 0.593750
vt 0.718750 0.593750
vt 0.718750 0.093750
vt 1.000000 0.968750
vt 1.000000 0.812500
vt 0.000000 0.812500
vt 0.000000 0.968750
vt 0.000000 0.968750
vt 0.000000 0.812500
vt 1.000000 0.812500
vt 1.000000 0.968750
vt 0.968750 0.593750
vt 0.968750 0.437500
vt 0.906250 0.437500
vt 0.906250 0.593750
vt 0.906250 0.593750
vt 0.906250 0.437500
vt 0.968750 0.437500
vt 0.968750 0.593750
vt 0.718750 0.093750
vt 0.718750 0.593750
vt 0.781250 0.593750
vt 0.781250 0.093750
vt 0.718750 0.093750
vt 0.781250 0.093750
vt 0.781250 0.593750
vt 0.718750 0.593750
vt 1.000000 0.781250
vt 1.000000 0.625000
vt 0.000000 0.625000
vt 0.000000 0.781250
vt 0.000000 0.781250
vt 0.000000 0.625000
vt 1.000000 0.625000
vt 1.000000 0.781250
vt 0.968750 0.593750
vt 0.968750 0.437500
vt 0.906250 0.437500
vt 0.906250 0.593750
vt 0.906250 0.593750
vt 0.906250 0.437500
vt 0.968750 0.437500
vt 0.968750 0.593750
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.531250 0.781250
vt 0.468750 0.781250
vt 0.468750 0.812500
vt 0.531250 0.812500
vt 0.468750 0.781250
vt 0.531250 0.781250
vt 0.531250 0.812500
vt 0.468750 0.812500
vt 0.468750 0.781250
vt 0.468750 0.812500
vt 0.531250 0.781250
vt 0.531250 0.812500
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.218750 0.468750
vt 0.156250 0.468750
vt 0.156250 0.437500
vt 0.218750 0.437500
vt 0.531250 0.968750
vt 0.468750 0.968750
vt 0.468750 1.000000
vt 0.531250 1.000000
vt 0.468750 0.968750
vt 0.531250 0.968750
vt 0.531250 1.000000
vt 0.468750 1.000000
vt 0.531250 0.968750
vt 0.468750 0.968750
vt 0.468750 1.000000
vt 0.468750 0.968750
vt 0.531250 0.968750
vt 0.531250 1.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.562500 0.500000
vt 0.437500 0.500000
vt 0.437500 0.625000
vt 0.562500 0.625000
vt 0.437500 0.500000
vt 0.562500 0.500000
vt 0.562500 0.625000
vt 0.437500 0.625000
vt 0.562500 0.500000
vt 0.562500 0.625000
vt 0.437500 0.500000
vt 0.437500 0.625000
vn 0.0000 1.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
g Cube_Cube_top
s off
f 4/1/1 2/2/1 1/3/1 3/4/1
f 8/5/1 6/6/1 5/7/1 7/8/1
f 11/9/2 12/10/2 9/11/2 10/12/2
f 7/13/3 12/14/3 11/15/3 8/16/3
f 6/17/4 10/18/4 9/19/4 5/20/4
f 5/21/5 9/22/5 12/23/5 7/24/5
f 8/25/6 11/26/6 10/27/6 6/28/6
f 15/29/1 14/30/1 13/31/1 16/32/1
f 19/33/2 20/34/2 17/35/2 18/36/2
f 13/37/5 17/38/5 20/39/5 16/40/5
f 15/41/6 19/42/6 18/43/6 14/44/6
f 16/45/3 20/46/3 19/47/3 15/48/3
f 14/49/4 18/50/4 17/51/4 13/52/4
f 24/53/2 23/54/2 21/55/2 22/56/2
f 27/57/1 26/58/1 25/59/1 28/60/1
f 23/61/3 24/62/3 27/63/3 28/64/3
f 22/65/4 21/66/4 25/67/4 26/68/4
f 21/66/5 23/69/5 28/70/5 25/67/5
f 24/62/6 22/71/6 26/72/6 27/63/6
f 32/73/2 31/74/2 29/75/2 30/76/2
f 35/77/1 34/78/1 33/79/1 36/80/1
f 31/81/3 32/82/3 35/83/3 36/84/3
f 30/85/4 29/86/4 33/87/4 34/88/4
f 29/89/5 31/90/5 36/91/5 33/87/5
f 32/92/6 30/93/6 34/94/6 35/83/6
g Cube_Cube_top_NONE
f 37/95/2 39/96/2 40/97/2 38/98/2
g Cube_Cube_right
f 39/99/3 37/100/3 4/101/3 3/102/3
g Cube_Cube_left
f 38/103/4 40/104/4 1/105/4 2/106/4
g Cube_Cube_back
f 37/100/6 38/107/6 2/108/6 4/101/6
g Cube_Cube_front
f 40/104/5 39/109/5 3/110/5 1/105/5

View File

@ -0,0 +1,45 @@
# Blender v2.79 (sub 0) OBJ File: 'street signs entity.blend'
# www.blender.org
o Cube
v 0.039063 0.437500 -0.500000
v 0.039063 0.437500 0.500000
v -0.039063 0.437500 -0.500000
v -0.039063 0.437500 0.500000
v 0.039063 0.125000 -0.500000
v 0.039063 0.125000 0.500000
v -0.039063 0.125000 0.500000
v -0.039063 0.125000 -0.500000
v 0.500000 0.062500 -0.039063
v 0.500000 0.062500 0.039063
v -0.500000 0.062500 0.039063
v -0.500000 0.062500 -0.039063
v 0.500000 -0.250000 -0.039063
v 0.500000 -0.250000 0.039063
v -0.500000 -0.250000 0.039063
v -0.500000 -0.250000 -0.039063
vt 0.000000 1.000000
vt 0.000000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt -0.000000 0.750000
vt -0.000000 0.500000
vt 1.000000 0.500000
vt 1.000000 0.750000
vt 0.000000 0.500000
vt 0.000000 0.250000
vt 1.000000 0.250000
vt 1.000000 0.500000
vt -0.000000 0.250000
vt -0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 0.250000
vn -1.0000 0.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
g Cube_Cube_top
s off
f 3/1/1 8/2/1 7/3/1 4/4/1
f 2/5/2 6/6/2 5/7/2 1/8/2
f 9/9/3 13/10/3 16/11/3 12/12/3
f 11/13/4 15/14/4 14/15/4 10/16/4

View File

@ -22,8 +22,11 @@
Please configure this mod in config.lua
Changelog:
22.09.18 - If in creative mode, wield a diamond pick to dig the station. This avoids
conflicts with too fast punches.
24.12.17 - Added support for localization through intllib.
Added localization for German (de).
Door opening/closing can now handle more general doors.
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.
@ -137,6 +140,13 @@ travelnet.check_if_trying_to_dig = function( puncher, node )
if( not( puncher) or not( puncher:get_wielded_item())) then
return false;
end
-- show menu when in creative mode
if( creative
and creative.is_enabled_for(puncher:get_player_name())
and (not(puncher:get_wielded_item())
or puncher:get_wielded_item():get_name()~="default:pick_diamond")) then
return false;
end
local tool_capabilities = puncher:get_wielded_item():get_tool_capabilities();
if( not( tool_capabilities )
or not( tool_capabilities["groupcaps"])
@ -593,8 +603,7 @@ travelnet.open_close_door = function( pos, player, mode )
-- at least for homedecor, same facedir would mean "door closed"
-- do not close the elevator door if it is already closed
if( mode==1 and ( door_node.name == 'travelnet:elevator_door_glass_closed'
or door_node.name == 'travelnet:elevator_door_steel_closed'
if( mode==1 and ( string.sub( door_node.name, -7 ) == '_closed'
-- handle doors that change their facedir
or ( door_node.param2 == this_node.param2
and door_node.name ~= 'travelnet:elevator_door_glass_open'
@ -602,8 +611,7 @@ travelnet.open_close_door = function( pos, player, mode )
return;
end
-- do not open the doors if they are already open (works only on elevator-doors; not on doors in general)
if( mode==2 and ( door_node.name == 'travelnet:elevator_door_glass_open'
or door_node.name == 'travelnet:elevator_door_steel_open'
if( mode==2 and ( string.sub( door_node.name, -5 ) == '_open'
-- handle doors that change their facedir
or ( door_node.param2 ~= this_node.param2
and door_node.name ~= 'travelnet:elevator_door_glass_closed'
@ -846,6 +854,15 @@ travelnet.can_dig = function( pos, player, description )
local owner = meta:get_string('owner');
local network_name = meta:get_string( "station_network" );
-- in creative mode, accidental digging could happen too easily when trying to update the net
if(creative and creative.is_enabled_for(player:get_player_name())) then
-- only a diamond pick can dig the travelnet
if( not(player:get_wielded_item())
or player:get_wielded_item():get_name()~="default:pick_diamond") then
return false;
end
end
-- players with that priv can dig regardless of owner
if( minetest.check_player_privs(name, {travelnet_remove=true})
or travelnet.allow_dig( name, owner, network_name )) then