corpse.lua 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. local function lobby_voting(survivors)
  2. local formspec =
  3. 'size[12,7]'..
  4. 'no_prepend[]'..
  5. 'bgcolor[#080808BB;true]'..
  6. 'textarea[1,1.5;11,6;;;Who dun it? make your pick. These players are on this map:'..
  7. '\n'..survivors..
  8. '\nYou can see the list of survivors at any time by using the /survivors command.'..
  9. '\nVote to kick the traitor with /kick <playername>, use skip to skip voting.]'..
  10. 'button_exit[4.5,5;3,1;go;Discuss]'
  11. return formspec
  12. end
  13. minetest.register_node('lobby:corpse', {
  14. description = 'Corpse',
  15. drawtype = 'mesh',
  16. mesh = 'corpse.obj',
  17. tiles = {'lobby_corpse.png', 'lobby_blood.png'},
  18. use_texture_alpha = true,
  19. groups = {breakable=1, not_in_creative_inventory=1},
  20. paramtype = 'light',
  21. paramtype2 = 'facedir',
  22. selection_box = {
  23. type = 'fixed',
  24. fixed = {-.6, -.5, -.6, .6, -.2, .6}, -- Right, Bottom, Back, Left, Top, Front
  25. },
  26. collision_box = {
  27. type = 'fixed',
  28. fixed = {-.6, -.5, -.6, .6, -.2, .6}, -- Right, Bottom, Back, Left, Top, Front
  29. },
  30. on_rightclick = function(pos, node, clicker, itemstack)
  31. local name = clicker:get_player_name()
  32. local map_id = lobby.game[name]
  33. if map_id ~= 'lobby' then
  34. minetest.remove_node(pos)
  35. local game_data = lobby.savedata.data[map_id]
  36. local game_pos = game_data['level_pos']
  37. local survivors = lobby.players_on_level(map_id)
  38. lobby.votes[map_id] = 0
  39. for _, player in pairs(minetest.get_connected_players()) do
  40. local rname = player:get_player_name()
  41. if lobby.game[rname] == map_id then
  42. lobby.voted[rname] = false
  43. player:set_physics_override({speed=0})
  44. minetest.chat_send_player(rname, minetest.colorize('#FF0000', 'Somebody discovered a corpse!'))
  45. minetest.show_formspec(rname, 'lobby:voting', lobby_voting(survivors))
  46. player:setpos({x=game_pos.x+(math.random(-3,3)),y=game_pos.y,z=game_pos.z+(math.random(-3,3))})
  47. end
  48. end
  49. end
  50. end,
  51. })
  52. minetest.register_node('lobby:emergency_button', {
  53. description = 'Emergency Button',
  54. --drawtype = 'mesh',
  55. --mesh = 'corpse.obj',
  56. --tiles = {'lobby_corpse.png', 'lobby_blood.png'},
  57. --use_texture_alpha = true,
  58. groups = {breakable=1},
  59. paramtype = 'light',
  60. paramtype2 = 'facedir',
  61. selection_box = {
  62. type = 'fixed',
  63. fixed = {-.6, -.5, -.6, .6, -.2, .6}, -- Right, Bottom, Back, Left, Top, Front
  64. },
  65. collision_box = {
  66. type = 'fixed',
  67. fixed = {-.6, -.5, -.6, .6, -.2, .6}, -- Right, Bottom, Back, Left, Top, Front
  68. },
  69. on_rightclick = function(pos, node, clicker, itemstack)
  70. local name = clicker:get_player_name()
  71. local map_id = lobby.game[name]
  72. local game_data = lobby.savedata.data[map_id]
  73. local game_pos = game_data['level_pos']
  74. local survivors = lobby.players_on_level(map_id)
  75. lobby.votes[map_id] = 0
  76. for _, player in pairs(minetest.get_connected_players()) do
  77. local rname = player:get_player_name()
  78. if lobby.game[rname] == map_id then
  79. lobby.voted[rname] = false
  80. player:set_physics_override({speed=0})
  81. minetest.chat_send_player(rname, minetest.colorize('#FF0000', name..' called an emergency meeting!'))
  82. minetest.show_formspec(rname, 'lobby:voting', lobby_voting(survivors))
  83. player:setpos({x=game_pos.x+(math.random(-3,3)),y=game_pos.y,z=game_pos.z+(math.random(-3,3))})
  84. end
  85. end
  86. end,
  87. })