21 Commits

Author SHA1 Message Date
bd9707abfe format text message "too much lines" 2015-04-26 10:50:04 +02:00
0f7badedd9 check for protection before allowing to write on the sign 2015-04-03 10:38:51 +02:00
e2938bf17e improved linebreak.
removes now whitespaces before and after a linebreak.
2015-04-03 10:32:57 +02:00
2907b3dd0c update to version 4.1
fixed:
* text is saved if user exit formspec by pressign esc
* everybody was allowed to edit the locked arrow sign
* uninitialized global variable
* tidy up code
2015-03-13 15:02:54 +01:00
73bf457a8c Merged in Jat15/dependstxt-edited-online-with-bitbucket-1423246322583 (pull request #6)
Fix craft (group) with modpack homedecor
2015-02-06 19:37:06 +01:00
ad28a5b7f6 Fix craft (group) with modpack homedecor 2015-02-06 18:12:47 +00:00
e403d916d2 fixed selection box 2014-08-13 19:48:11 +02:00
03579c3912 Merged in dev (pull request #5)
Merging Dev in Master
2014-08-13 19:39:16 +02:00
f963f894ca merged dev into master pull request #5 by Jat15 2014-08-13 19:31:35 +02:00
Jat
eb129da27e For creative 2014-08-13 19:31:09 +02:00
Jat
d881fce213 Fix return 2014-08-13 18:13:25 +02:00
Jat
bbbe7b2192 Fix for 0.4.10 (thx adrido) 2014-08-13 18:00:41 +02:00
Jat
129efd98d8 New method for place signs. 2014-08-13 17:37:00 +02:00
d252588de1 fixed not working in version 0.4.10 2014-07-20 08:22:02 +02:00
Jat
9b4970622a Alias usless and add old node in redefinition 2014-03-19 06:06:34 +01:00
Jat
efd9866ff7 New method for place signs. 2014-03-19 05:43:07 +01:00
Jat
135668b35c Update nodebox, redefinition, images.
"Sign right" does not stick to the wall...
2014-01-08 08:27:10 +01:00
Jat
969362c041 Add homedecor in depends.txt 2014-01-08 07:55:58 +01:00
7f84a95d1e Merged in Jat15/arrow_signs/correction (pull request #3)
Minetest.env: deprecated.
2014-01-05 22:01:19 +01:00
Jat
0232c5bbd1 Use one node for all direction
Bug correct and optimization for later
-Facedir 5 and 7 bug texture
-Prediction node for facedir to change
2014-01-05 19:01:57 +01:00
Jat
de70260127 Minetest.env: deprecated. 2014-01-05 17:08:59 +01:00
17 changed files with 264 additions and 487 deletions

View File

@ -1,2 +1,3 @@
default
signs_lib?
locks?

391
init.lua
View File

@ -1,4 +1,5 @@
--more_signs by addi
--arrow_signs by addi
--thanks to Jat15 for the new place and rotate-system.
--Code and Textures are under the CC by-sa 3.0 licence
--see: http://creativecommons.org/licenses/by-sa/3.0/
@ -6,254 +7,214 @@
arrow_signs={}
function arrow_signs:savetext(pos, formname, fields, sender)
arrow_signs.formspec = "field[text;Sign text:;${text}]";
arrow_signs.on_place = function(itemstack, placer, pointed_thing)
local posabove = pointed_thing.above
local posunder = pointed_thing.under
local vector = placer:get_look_dir()
local place = true
if posabove.y>posunder.y then
if(vector.z>0.5 and vector.z<=1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 10})
elseif (vector.x>0.5 and vector.x<=1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 19})
elseif(-0.5>vector.z and -1<=vector.z) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 4})
elseif (-0.5>vector.x and -1<=vector.x) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 13})
else
place = false
end
elseif posabove.y<posunder.y then
if(vector.z>0.5 and vector.z<=1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 8})
elseif (vector.x>0.5 and vector.x<=1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 17})
elseif(-0.5>vector.z and -1<=vector.z) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 6})
elseif (-0.5>vector.x and -1<=vector.x) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 15})
else
place = false
end
elseif posabove.z>posunder.z then
if(vector.y>0.75 and vector.y<=1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 22})
elseif (vector.y>=-1 and vector.y<-0.75) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 2})
elseif (vector.x>=0 and vector.x<=1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 18})
elseif (vector.x<0 and vector.x>=-1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 14})
else
place = false
end
elseif posabove.z<posunder.z then
if(vector.y>0.75 and vector.y<=1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 20})
elseif (vector.y>=-1 and vector.y<-0.75) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 0})
elseif (vector.x>=0 and vector.x<=1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 16})
elseif (vector.x<0 and vector.x>=-1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 12})
else
place = false
end
elseif posabove.x>posunder.x then
if(vector.y>0.75 and vector.y<=1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 21})
elseif (vector.y>=-1 and vector.y<-0.75) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 3})
elseif (vector.z>=0 and vector.z<=1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 11})
elseif (vector.z<0 and vector.z>=-1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 7})
else
place = false
end
elseif posabove.x<posunder.x then
if(vector.y>0.75 and vector.y<=1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 23})
elseif (vector.y>=-1 and vector.y<-0.75) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 1})
elseif (vector.z>=0 and vector.z<=1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 9})
elseif (vector.z<0 and vector.z>=-1) then
minetest.add_node(posabove,{name = itemstack:get_name(), param2 = 5})
else
place = false
end
else
place = false
end
if not(place) then
minetest.rotate_node(itemstack, placer, pointed_thing)
else
itemstack:take_item()
end
if not minetest.setting_getbool("creative_mode") then
return itemstack
end
end
arrow_signs.savetext = function(pos, formname, fields, sender)
if fields.text then
if not minetest.get_player_privs(sender:get_player_name())["interact"] then
minetest.chat_send_player(sender:get_player_name(), "error: you don't have permission to edit the sign. you need the interact priv")
return
end
local meta = minetest.env:get_meta(pos)
if minetest.is_protected(pos, sender:get_player_name()) then
minetest.record_protection_violation(pos, sender:get_player_name())
return
end
local meta = minetest.get_meta(pos)
fields.text = fields.text or ""
print((sender:get_player_name() or "").." wrote \""..fields.text..
"\" to sign at "..minetest.pos_to_string(pos))
minetest.log("action", (sender:get_player_name() or "").." wrote \""..fields.text..
"\" to sign at "..minetest.pos_to_string(pos));
meta:set_string("text", fields.text)
text = arrow_signs:create_lines(fields.text)
local text,lines = arrow_signs.create_lines(fields.text)
meta:set_string("infotext", '"'..text..'"')
i=0
for wort in text:gfind("\n") do
i=i+1
end
if i > 4 then
minetest.chat_send_player(sender:get_player_name(),"\tInformation: \nYou've written more than 5 lines. \n it may be that not all lines are displayed. \n Please remove the last entry")
if lines > 4 then
minetest.chat_send_player(sender:get_player_name(),"Information: \nYou've written more than 5 lines. \nIt may be that not all lines are displayed. \nPlease remove the last entry")
end
return true
end
function arrow_signs:create_lines(text)
text = text:gsub("/", "\"\n\"")
text = text:gsub("|", "\"\n\"")
return text
end
local clone_registered = function(case,name)
local params = {}
local list
if case == "item" then list = minetest.registered_items end
if case == "node" then list = minetest.registered_nodes end
if case == "craftitem" then list = minetest.registered_craftitems end
if case == "tool" then list = minetest.registered_tools end
if case == "entity" then list = minetest.registered_entities end
if list then
for k,v in pairs(list[name]) do
params[k] = v
end
end
return params
--this function creates the linebreaks
arrow_signs.create_lines = function(text)
local text, n = text:gsub("[ ]*(%|)[ ]*", '"\n"')--search for |
local text, m = text:gsub("[ ]*(%/)[ ]*", '"\n"')--search for /
return text, n+m
end
-- usage
local node = clone_registered("node","default:sign_wall")
if node.legacy_wallmounted then
node.groups = {choppy=2,dig_immediate=2,attached_node=1,sign=1}
else
node.groups = {choppy=2,dig_immediate=2,sign=1}
end
minetest.register_node(":default:sign_wall", node)
minetest.override_item("default:sign_wall", {
groups = {choppy=2,dig_immediate=2,attached_node=1,sign=1},
})
--Sign right
minetest.register_node("arrow_signs:wall_right", {
description = "Sign right",
drawtype = "signlike",
tiles = {"arrow_sign_right.png"},
inventory_image = "arrow_sign_right.png",
--Sign arrow
minetest.register_node("arrow_signs:wall", {
description = "Arrow signs",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{ 0.25, -0.25, 0.5, -0.25, 0.5, 0.47},
{ 0.1875, -0.3125, 0.5, -0.1875, -0.25, 0.47},
{ 0.125, -0.3125, 0.5, -0.125, -0.375, 0.47},
{ 0.0625, -0.375, 0.5, -0.0625, -0.437, 0.47}
}
},
selection_box = {
type = "fixed",
fixed = {
{ 0.30, -0.5, 0.5, -0.30, 0.5, 0.47}
}
},
tiles = {"arrow_sign_border_left.png","arrow_sign_border_right.png","arrow_sign_border_up.png","arrow_sign_border_down.png","arrow_sign.png","arrow_sign.png"},
inventory_image = "arrow_sign.png",
paramtype = "light",
paramtype2 = "wallmounted",
paramtype2 = "facedir",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "wallmounted",
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
},
groups = {choppy=2,dig_immediate=2,attached_node=1,sign=1},
legacy_wallmounted = true,
groups = {choppy=2,dig_immediate=2,sign=1},
sounds = default.node_sound_defaults(),
on_place = arrow_signs.on_place,
on_construct = function(pos)
--local n = minetest.env:get_node(pos)
local meta = minetest.env:get_meta(pos)
meta:set_string("formspec", "hack:sign_text_input")
meta:set_string("infotext", "\"\"")
--local n = minetest.get_node(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", arrow_signs.formspec)
meta:set_string("infotext", [[""]])
end,
on_receive_fields = function(pos, formname, fields, sender)
arrow_signs:savetext(pos, formname, fields, sender)
end,
on_receive_fields = arrow_signs.savetext,
})
-- sign left
minetest.register_node("arrow_signs:wall_left", {
description = "Sign left",
drawtype = "signlike",
tiles = {"arrow_sign_left.png"},
inventory_image = "arrow_sign_left.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "wallmounted",
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
},
groups = {choppy=2,dig_immediate=2,attached_node=1,sign=1},
legacy_wallmounted = true,
sounds = default.node_sound_defaults(),
on_construct = function(pos)
--local n = minetest.env:get_node(pos)
local meta = minetest.env:get_meta(pos)
meta:set_string("formspec", "hack:sign_text_input")
meta:set_string("infotext", "\"\"")
end,
on_receive_fields = function(pos, formname, fields, sender)
arrow_signs:savetext(pos, formname, fields, sender)
end,
})
--Sign up
minetest.register_node("arrow_signs:wall_up", {
description = "Sign up",
drawtype = "signlike",
tiles = {"arrow_sign_up.png"},
inventory_image = "arrow_sign_up.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "wallmounted",
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
},
groups = {choppy=2,dig_immediate=2,attached_node=1,sign=1},
legacy_wallmounted = true,
sounds = default.node_sound_defaults(),
on_construct = function(pos)
--local n = minetest.env:get_node(pos)
local meta = minetest.env:get_meta(pos)
meta:set_string("formspec", "hack:sign_text_input")
meta:set_string("infotext", "\"\"")
end,
on_receive_fields = function(pos, formname, fields, sender)
arrow_signs:savetext(pos, formname, fields, sender)
end,
})
--Sign down
minetest.register_node("arrow_signs:wall_down", {
description = "Sign down",
drawtype = "signlike",
tiles = {"arrow_sign_down.png"},
inventory_image = "arrow_sign_down.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "wallmounted",
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
},
groups = {choppy=2,dig_immediate=2,attached_node=1,sign=1},
legacy_wallmounted = true,
sounds = default.node_sound_defaults(),
on_construct = function(pos)
--local n = minetest.env:get_node(pos)
local meta = minetest.env:get_meta(pos)
meta:set_string("formspec", "hack:sign_text_input")
meta:set_string("infotext", "\"\"")
end,
on_receive_fields = function(pos, formname, fields, sender)
arrow_signs:savetext(pos, formname, fields, sender)
end,
})
--recipes
--Recipes
minetest.register_craft({
output = 'arrow_signs:wall_right 1',
recipe = {
{'', '', ''},
{'', 'group:sign', 'default:stick'},
{'', '', ''},
}
})
minetest.register_craft({
output = 'arrow_signs:wall_left 1',
recipe = {
{'', '', ''},
{'default:stick', 'group:sign', ''},
{'', '', ''},
}
})
minetest.register_craft({
output = 'arrow_signs:wall_up 1',
recipe = {
{'', 'default:stick', ''},
{'', 'group:sign', ''},
{'', '', ''},
}
})
minetest.register_craft({
output = 'arrow_signs:wall_down 1',
recipe = {
{'', '', ''},
{'', 'group:sign', ''},
{'', 'default:stick', ''},
}
type = 'shapeless',
output = 'arrow_signs:wall',
recipe = {'group:sign', 'default:stick'},
})
minetest.register_craft({
output = 'default:sign_wall',
recipe = {
{'group:sign'},
}
})
minetest.register_alias("more_signs:wall_right", "arrow_signs:wall_right")
minetest.register_alias("sign_right", "arrow_signs:wall_right")
minetest.register_alias("more_signs:wall_left", "arrow_signs:wall_left")
minetest.register_alias("sign_left", "arrow_signs:wall_left")
minetest.register_alias("more_signs:wall_up", "arrow_signs:wall_up")
minetest.register_alias("sign_up", "arrow_signs:wall_up")
minetest.register_alias("more_signs:wall_down", "arrow_signs:wall_down")
minetest.register_alias("sign_down", "arrow_signs:wall_down")
--Redefinition
minetest.register_abm({
nodenames = {"arrow_signs:wall_right", "arrow_signs:wall_left", "arrow_signs:wall_up", "arrow_signs:wall_down",
"more_signs:wall_right","more_signs:wall_left","more_signs:wall_up" ,"more_signs:wall_down"
},
interval = 1,
chance = 1,
action = function(pos, node)
local convert_facedir={
["arrow_signs:wall_right"] = {6,4,5,11,16,14},
["arrow_signs:wall_left"] = {8,10,9,7,12,18},
["arrow_signs:wall_up"] = {15,19,23,21,20,22},
["arrow_signs:wall_down"] = {17,13,1,3,0,2},
-- For old mod
["more_signs:wall_right"] = {6,4,5,11,16,14},
["more_signs:wall_left"] = {8,10,9,7,12,18},
["more_signs:wall_up"] = {15,19,23,21,20,22},
["more_signs:wall_down"] = {17,13,1,3,0,2},
}
minetest.swap_node(pos, {name="arrow_signs:wall",param2=convert_facedir[node.name][node.param2+1]})
end,
})
--Locked sign
if locks then
local MODPATH = minetest.get_modpath("arrow_signs");
dofile(MODPATH.."/shared_locked.lua")
local MODPATH = minetest.get_modpath("arrow_signs");
dofile(MODPATH.."/shared_locked.lua")
end

View File

@ -1,284 +1,99 @@
-- a sign
minetest.register_node("arrow_signs:shared_locked_right", {
description = "Shared locked sign right",
drawtype = "signlike",
tiles = {"arrow_sign_right.png"},
inventory_image = "arrow_sign_right.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "wallmounted",
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
},
groups = {choppy=2,dig_immediate=2,sign_locked=1},
legacy_wallmounted = true,
minetest.register_node("arrow_signs:shared_locked", {
description = "Shared locked sign",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{ 0.25, -0.25, 0.5, -0.25, 0.5, 0.47},
{ 0.1875, -0.3125, 0.5, -0.1875, -0.25, 0.47},
{ 0.125, -0.3125, 0.5, -0.125, -0.375, 0.47},
{ 0.0625, -0.375, 0.5, -0.0625, -0.437, 0.47}
}
},
selection_box = {
type = "fixed",
fixed = {
{ 0.30, -0.5, 0.5, -0.30, 0.5, 0.47}
}
},
tiles = {"arrow_sign_border_left.png","arrow_sign_border_right.png","arrow_sign_border_up.png","arrow_sign_border_down.png","arrow_sign.png","arrow_sign.png"},
inventory_image = "arrow_sign.png",
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
walkable = false,
groups = {choppy=2,dig_immediate=2,sign_locked=1},
legacy_wallmounted = true,
on_place = function(itemstack, placer, pointed_thing)
arrow_signs.on_place(itemstack, placer, pointed_thing);
locks:lock_set_owner( pointed_thing.above, placer, "Shared locked sign" );
end,
on_construct = function(pos)
local meta = minetest.get_meta(pos)
-- prepare the lock of the sign
locks:lock_init( pos,
"size[8,4]"..
"field[0.3,0.6;6,0.7;text;Text:;${text}]"..
"field[0.3,3.6;6,0.7;locks_sent_lock_command;Locked sign. Type /help for help:;]"..
"button_exit[6.3,3.2;1.7,0.7;locks_sent_input;Proceed]" );
end,
after_place_node = function(pos, placer)
locks:lock_set_owner( pos, placer, "Shared locked sign" );
end,
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
-- prepare the lock of the sign
locks:lock_init( pos,
"size[8,4]"..
"field[0.3,0.6;6,0.7;text;Text:;]"..
"field[0.3,3.6;6,0.7;locks_sent_lock_command;Locked sign. Type /help for help:;]"..
"button_exit[6.3,3.2;1.7,0.7;locks_sent_input;Proceed]" );
end,
can_dig = function(pos,player)
return locks:lock_allow_dig( pos, player );
end,
after_place_node = function(pos, placer)
locks:lock_set_owner( pos, placer, "Shared locked sign" );
end,
on_receive_fields = function(pos, formname, fields, sender)
-- if the user already has the right to use this and did input text
if( fields.text
and ( not(fields.locks_sent_lock_command)
or fields.locks_sent_lock_command=="")
and locks:lock_allow_use( pos, sender )) then
--then save the text to the sign meta
--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
local meta = minetest.get_meta(pos)
fields.text = fields.text or "";
minetest.log("action", (sender:get_player_name() or "").." wrote \""..fields.text..
"\" to sign at "..minetest.pos_to_string(pos));
meta:set_string("text", fields.text);
local text = arrow_signs.create_lines(fields.text)
meta:set_string("infotext", '"'..text..'"'.." ["..sender:get_player_name().."]");
-- a command for the lock?
else
--do nothing, because user does not have the right to change the sign
--a warning message is also printed by the locks mod
--arrow_signs.savetext( pos, formname, fields, sender );
end
can_dig = function(pos,player)
return locks:lock_allow_dig( pos, player );
end,
on_receive_fields = function(pos, formname, fields, sender)
-- if the user already has the right to use this and did input text
if( fields.text
and ( not(fields.locks_sent_lock_command)
or fields.locks_sent_lock_command=="")
and locks:lock_allow_use( pos, sender )) then
--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
local meta = minetest.env:get_meta(pos)
fields.text = fields.text or "";
print((sender:get_player_name() or "").." wrote \""..fields.text..
"\" to sign at "..minetest.pos_to_string(pos));
meta:set_string("text", fields.text.." ["..sender:get_player_name().."]");
meta:set_string("infotext", '"'..fields.text..'"'.." ["..sender:get_player_name().."]");
-- a command for the lock?
else
arrow_signs:savetext( pos, formname, fields, sender );
end
end,
});
--left
minetest.register_node("arrow_signs:shared_locked_left", {
description = "Shared locked sign left",
drawtype = "signlike",
tiles = {"arrow_sign_left.png"},
inventory_image = "arrow_sign_left.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "wallmounted",
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
},
groups = {choppy=2,dig_immediate=2,sign_locked=1},
legacy_wallmounted = true,
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
-- prepare the lock of the sign
locks:lock_init( pos,
"size[8,4]"..
"field[0.3,0.6;6,0.7;text;Text:;]"..
"field[0.3,3.6;6,0.7;locks_sent_lock_command;Locked sign. Type /help for help:;]"..
"button_exit[6.3,3.2;1.7,0.7;locks_sent_input;Proceed]" );
end,
after_place_node = function(pos, placer)
locks:lock_set_owner( pos, placer, "Shared locked sign" );
end,
can_dig = function(pos,player)
return locks:lock_allow_dig( pos, player );
end,
on_receive_fields = function(pos, formname, fields, sender)
-- if the user already has the right to use this and did input text
if( fields.text
and ( not(fields.locks_sent_lock_command)
or fields.locks_sent_lock_command=="")
and locks:lock_allow_use( pos, sender )) then
--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
local meta = minetest.env:get_meta(pos)
fields.text = fields.text or "";
print((sender:get_player_name() or "").." wrote \""..fields.text..
"\" to sign at "..minetest.pos_to_string(pos));
meta:set_string("text", fields.text.." ["..sender:get_player_name().."]");
meta:set_string("infotext", '"'..fields.text..'"'.." ["..sender:get_player_name().."]");
-- a command for the lock?
else
arrow_signs:savetext( pos, formname, fields, sender );
end
end,
});
--up
minetest.register_node("arrow_signs:shared_locked_up", {
description = "Shared locked sign up",
drawtype = "signlike",
tiles = {"arrow_sign_up.png"},
inventory_image = "arrow_sign_up.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "wallmounted",
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
},
groups = {choppy=2,dig_immediate=2,sign_locked=1},
legacy_wallmounted = true,
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
-- prepare the lock of the sign
locks:lock_init( pos,
"size[8,4]"..
"field[0.3,0.6;6,0.7;text;Text:;]"..
"field[0.3,3.6;6,0.7;locks_sent_lock_command;Locked sign. Type /help for help:;]"..
"button_exit[6.3,3.2;1.7,0.7;locks_sent_input;Proceed]" );
end,
after_place_node = function(pos, placer)
locks:lock_set_owner( pos, placer, "Shared locked sign" );
end,
can_dig = function(pos,player)
return locks:lock_allow_dig( pos, player );
end,
on_receive_fields = function(pos, formname, fields, sender)
-- if the user already has the right to use this and did input text
if( fields.text
and ( not(fields.locks_sent_lock_command)
or fields.locks_sent_lock_command=="")
and locks:lock_allow_use( pos, sender )) then
--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
local meta = minetest.env:get_meta(pos)
fields.text = fields.text or "";
print((sender:get_player_name() or "").." wrote \""..fields.text..
"\" to sign at "..minetest.pos_to_string(pos));
meta:set_string("text", fields.text.." ["..sender:get_player_name().."]");
meta:set_string("infotext", '"'..fields.text..'"'.." ["..sender:get_player_name().."]");
-- a command for the lock?
else
arrow_signs:savetext( pos, formname, fields, sender );
end
end,
});
--down
minetest.register_node("arrow_signs:shared_locked_down", {
description = "Shared locked sign down",
drawtype = "signlike",
tiles = {"arrow_sign_down.png"},
inventory_image = "arrow_sign_down.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "wallmounted",
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
},
groups = {choppy=2,dig_immediate=2,sign_locked=1},
legacy_wallmounted = true,
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
-- prepare the lock of the sign
locks:lock_init( pos,
"size[8,4]"..
"field[0.3,0.6;6,0.7;text;Text:;]"..
"field[0.3,3.6;6,0.7;locks_sent_lock_command;Locked sign. Type /help for help:;]"..
"button_exit[6.3,3.2;1.7,0.7;locks_sent_input;Proceed]" );
end,
after_place_node = function(pos, placer)
locks:lock_set_owner( pos, placer, "Shared locked sign" );
end,
can_dig = function(pos,player)
return locks:lock_allow_dig( pos, player );
end,
on_receive_fields = function(pos, formname, fields, sender)
-- if the user already has the right to use this and did input text
if( fields.text
and ( not(fields.locks_sent_lock_command)
or fields.locks_sent_lock_command=="")
and locks:lock_allow_use( pos, sender )) then
--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
local meta = minetest.env:get_meta(pos)
fields.text = fields.text or "";
print((sender:get_player_name() or "").." wrote \""..fields.text..
"\" to sign at "..minetest.pos_to_string(pos));
meta:set_string("text", fields.text.." ["..sender:get_player_name().."]");
meta:set_string("infotext", '"'..fields.text..'"'.." ["..sender:get_player_name().."]");
-- a command for the lock?
else
arrow_signs:savetext( pos, formname, fields, sender );
end
end,
end,
});
minetest.register_craft({
output = 'arrow_signs:shared_locked_right',
recipe = {
{ 'arrow_signs:wall_right', 'locks:lock', '' },
},
type = 'shapeless',
output = 'arrow_signs:shared_locked',
recipe = {'arrow_signs:wall', 'locks:lock'},
})
minetest.register_craft({
output = 'arrow_signs:shared_locked_left',
recipe = {
{ 'arrow_signs:wall_left', 'locks:lock', '' },
},
--Redefinition
minetest.register_abm({
nodenames = {"arrow_signs:shared_locked_right", "'arrow_signs:shared_locked_left", "arrow_signs:shared_locked_up", "arrow_signs:shared_locked_down"},
interval = 1,
chance = 1,
action = function(pos, node)
local convert_facedir={
["arrow_signs:shared_locked_right"]={6,4,5,11,16,14},
["arrow_signs:shared_locked_left"]={8,10,9,7,12,18},
["arrow_signs:shared_locked_up"]={15,19,23,21,20,22},
["arrow_signs:shared_locked_down"]={17,13,1,3,0,2}
}
minetest.swap_node(pos, {name="arrow_signs:shared_locked",param2=convert_facedir[node.name][node.param2-1]})
end,
})
minetest.register_craft({
output = 'arrow_signs:shared_locked_up',
recipe = {
{ 'arrow_signs:wall_up', 'locks:lock', '' },
},
})
minetest.register_craft({
output = 'arrow_signs:shared_locked_down',
recipe = {
{ 'arrow_signs:wall_down', 'locks:lock', '' },
},
})
minetest.register_craft({
output = 'arrow_signs:shared_locked_right',
recipe = {
{ 'group:', 'locks:lock', '' },
},
})

View File

Before

Width:  |  Height:  |  Size: 676 B

After

Width:  |  Height:  |  Size: 676 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 658 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 666 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 691 B

BIN
textures/rightandleft.xcf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
textures/upanddown.xcf Normal file

Binary file not shown.