formspecs.lua 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. local S = minetest.get_translator("folks")
  2. function folks.get_edit_formspec(npc_id)
  3. local npc = folks.backend.get_npc(npc_id)
  4. local escape = minetest.formspec_escape
  5. local formspec = {}
  6. if npc then
  7. formspec = {
  8. "formspec_version[3]",
  9. "size[11,11]",
  10. "label[4.85,1;", S("Edit Folk"), "]",
  11. "field[2,2;3,0.75;folk_name;", S("Folk name"), ";", escape(npc._npc_name), "]",
  12. "field[6,2;3,0.75;folk_name_color;", S("Folk Name Color"), ";", escape(npc._npc_name_color), "]",
  13. "field[2,3.5;7,0.75;folk_texture;", S("Folk Texture (with or without .png)"), ";", escape(table.concat(npc._npc_textures)), "]",
  14. "textarea[2,5;7,4;folk_messages;", S("Messages (every line is a message)"), ";", escape(table.concat(npc._npc_messages, "\n")), "]",
  15. "button_exit[4,9.5;3,0.75;folk_save_edit;", S("Save"), "]",
  16. "button_exit[9.5,0.2;1,0.75;folk_close_edit;X]",
  17. }
  18. end
  19. return table.concat(formspec)
  20. end
  21. function folks.get_spawn_formspec()
  22. local escape = minetest.formspec_escape
  23. local npcs = folks.backend.get_npcs()
  24. local dropdown_items = {}
  25. for npc_id, npc in pairs(npcs) do
  26. table.insert(dropdown_items, escape(npc._npc_name .. " - " .. npc_id))
  27. end
  28. local formspec = {
  29. "formspec_version[3]",
  30. "size[9,8.5]",
  31. "label[3.7,1;", S("Spawn NPC"), "]",
  32. "button_exit[7.5,0.5;1,0.75;folks_close_spawner;X]",
  33. "dropdown[1,3;7,1;folks_select_npc;", table.concat(dropdown_items, ",") ,";1]",
  34. "button_exit[3,7;3,0.75;folks_spawn_npc;", S("Spawn"), "]",
  35. }
  36. return table.concat(formspec)
  37. end
  38. local function handle_edit_formspec(player, formname, fields)
  39. if fields.folk_save_edit then
  40. local p_name = player:get_player_name()
  41. if not minetest.check_player_privs(player:get_player_name(), { folks_admin=true }) then return end
  42. if player then
  43. local meta = player:get_meta()
  44. if meta then
  45. local editing_npc = meta:get_string("folks_editing_npc")
  46. if editing_npc == "" then
  47. minetest.chat_send_player(p_name, minetest.colorize("#ff0000", S("You are not editing an NPC. Click the NPC you want to edit with the NPC editor item.")))
  48. return
  49. end
  50. local npc = folks.backend.get_npc(editing_npc)
  51. if npc then
  52. local msgs = string.split(fields.folk_messages, "\n")
  53. folks.edit_npc_name(editing_npc, fields.folk_name)
  54. folks.edit_npc_name_color(editing_npc, fields.folk_name_color)
  55. folks.edit_npc_texture(editing_npc, fields.folk_texture)
  56. folks.edit_npc_messages(editing_npc, msgs)
  57. meta:set_string("folks_editing_npc", "")
  58. minetest.chat_send_player(p_name, minetest.colorize("#00ff00", S("Edited NPC: @1", editing_npc)))
  59. end
  60. end
  61. end
  62. end
  63. if fields.folk_close_edit then
  64. if player then
  65. local meta = player:get_meta()
  66. if meta then
  67. minetest.chat_send_player(player:get_player_name(), minetest.colorize("#00ff00", S("Exited from NPC: @1", meta:get_string("folks_editing_npc"))))
  68. meta:set_string("folks_editing_npc", "")
  69. end
  70. end
  71. end
  72. end
  73. local function handle_spawn_formspec(player, formname, fields)
  74. if fields.folks_spawn_npc then
  75. local p_name = player:get_player_name()
  76. if not minetest.check_player_privs(p_name, { folks_admin=true }) then return end
  77. if fields.folks_select_npc ~= "" then
  78. local npc_id = string.split(fields.folks_select_npc, " - ")[2]
  79. if folks.spawn_npc(npc_id, player:get_pos()) then
  80. minetest.chat_send_player(p_name, minetest.colorize("#00ff00", S("Spawned NPC: @1", npc_id)))
  81. return
  82. end
  83. else
  84. minetest.chat_send_player(p_name, minetest.colorize("#ff0000", S("No NPC selected")))
  85. return
  86. end
  87. end
  88. end
  89. minetest.register_on_player_receive_fields(function(player, formname, fields)
  90. if formname == "folks:edit_npc_formspec" then
  91. handle_edit_formspec(player, formname, fields)
  92. return
  93. end
  94. if formname == "folks:spawn_npc_formspec" then
  95. handle_spawn_formspec(player, formname, fields)
  96. return
  97. end
  98. return
  99. end)