config_tool.lua 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. local function config_door_form(infotext_top, infotext_bot, power_level, security_level, save)
  2. local formspec =
  3. 'formspec_version[3]'..
  4. 'size[12,9]'..
  5. 'textarea[1,1;10,4;;;Set the required power level, security level, and an optional infotext]'..
  6. 'field[1,4.5;4,.6;infotext_top;Outside (top) Infotext;'..infotext_top..']'..
  7. 'field[1,5.5;4,.6;infotext_bot;Inside (bot) Infotext;'..infotext_bot..']'..
  8. 'field[1,6.5;4,.6;power_level;Power Level;'..power_level..']'..
  9. 'field[1,7.5;4,.6;security_level;Security Level;'..security_level..']'..
  10. 'button_exit[8,7;3,1;'..save..';Submit]'
  11. return formspec
  12. end
  13. local function config_door_bot(name, pos)
  14. local meta = minetest.get_meta(pos)
  15. local infotext_bot = meta:get_string('infotext') or ''
  16. local power_level = meta:get_int('power_level') or 0
  17. local security_level = meta:get_int('security_level') or 0
  18. local pos2 = {x=pos.x, y=pos.y+1, z=pos.z}
  19. local meta = minetest.get_meta(pos2)
  20. local infotext_top = meta:get_string('infotext') or ''
  21. minetest.show_formspec(name, 'sss_core:config_door', config_door_form(infotext_top, infotext_bot, power_level, security_level, 'save_bot'))
  22. end
  23. local function config_door_top(name, pos)
  24. local meta = minetest.get_meta(pos)
  25. local infotext_top = meta:get_string('infotext') or ''
  26. local pos2 = {x=pos.x, y=pos.y-1, z=pos.z}
  27. local meta = minetest.get_meta(pos2)
  28. local power_level = meta:get_int('power_level') or 0
  29. local security_level = meta:get_int('security_level') or 0
  30. local infotext_bot = meta:get_string('infotext') or ''
  31. minetest.show_formspec(name, 'sss_core:config_door', config_door_form(infotext_top, infotext_bot, power_level, security_level, 'save_top'))
  32. end
  33. minetest.register_tool('sss_core:config_tool', {
  34. description = 'Configuration Tool',
  35. inventory_image = 'sss_core_config_tool.png',
  36. on_use = function(itemstack, user, pointed_thing)
  37. local pos = minetest.get_pointed_thing_position(pointed_thing)
  38. if pos then
  39. local name = user:get_player_name()
  40. local node = minetest.get_node(pos)
  41. if not minetest.is_protected(pos, name) or minetest.check_player_privs(name, {server = true}) then
  42. sss_core.player_config[name] = pos
  43. if minetest.get_item_group(node.name, 'door') == 1 then
  44. config_door_bot(name, pos)
  45. elseif minetest.get_item_group(node.name, 'door') == 2 then
  46. config_door_top(name, pos)
  47. else
  48. minetest.chat_send_player(name, 'Sorry, that item can not be configured.')
  49. end
  50. end
  51. end
  52. end,
  53. })
  54. minetest.register_on_player_receive_fields(function(player, formname, fields)
  55. local name = player:get_player_name()
  56. if formname == 'sss_core:config_door' then
  57. if fields.save_bot then
  58. if sss_core.is_integer(fields.power_level) and sss_core.is_integer(fields.security_level) then
  59. local pos = sss_core.player_config[name]
  60. local meta = minetest.get_meta(pos)
  61. meta:set_string('infotext', fields.infotext_bot)
  62. meta:set_int('power_level', fields.power_level)
  63. meta:set_int('security_level', fields.security_level)
  64. local pos2 = {x=pos.x, y=pos.y+1, z=pos.z}
  65. local meta = minetest.get_meta(pos2)
  66. meta:set_string('infotext', fields.infotext_top)
  67. else
  68. minetest.chat_send_player(name, 'Please check your inputs.')
  69. end
  70. elseif fields.save_top then
  71. if sss_core.is_integer(fields.power_level) and sss_core.is_integer(fields.security_level) then
  72. local pos = sss_core.player_config[name]
  73. local meta = minetest.get_meta(pos)
  74. meta:set_string('infotext', fields.infotext_top)
  75. print (fields.infotext_top)
  76. local pos2 = {x=pos.x, y=pos.y-1, z=pos.z}
  77. local meta = minetest.get_meta(pos2)
  78. meta:set_string('infotext', fields.infotext_bot)
  79. meta:set_int('power_level', fields.power_level)
  80. meta:set_int('security_level', fields.security_level)
  81. else
  82. minetest.chat_send_player(name, 'Please check your inputs.')
  83. end
  84. end
  85. end
  86. end)