Advertisement
Guest User

secondechance_minetest2

a guest
Oct 6th, 2016
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.77 KB | None | 0 0
  1. local LASTSTAND_DURATION = 5
  2. local LASTSTAND_RES_HEALTH = 4
  3. local LASTSTAND_BROADCAST_RADIUS = 50
  4. local LASTSTAND_DEBUG = false
  5.  
  6. local dying_players = {}
  7. local saved_players = {}
  8.  
  9.  
  10. function showPlayerCountdown(player_name)
  11.     if dying_players[player_name] ~= nil and dying_players[player_name] > 0 then
  12.         minetest.chat_send_player(player_name, "wait for someone to resurrect you, dying in " .. dying_players[player_name] .. " seconds")
  13.         minetest.after(1, showPlayerCountdown, player_name)
  14.     end
  15. end
  16.  
  17. function getBonesInventoryBack(player)
  18.     local bones_pos = saved_players[player:get_player_name()]
  19.     local node = minetest.get_node(bones_pos)
  20.     minetest.chat_send_player(player:get_player_name(), "node name" .. node.name)
  21.     if node.name == "bones:bones" then
  22.         --minetest.node_dig(bones_pos, node, player)
  23.         saved_players[player:get_player_name()] = nil
  24.        
  25.         local bones_inv = minetest.get_inventory({type="node", pos=bones_pos})
  26.         local player_inv = player:get_inventory()
  27.         player_inv:set_list("main", bones_inv:get_list("main"))
  28.         --minetest.remove_node(bones_pos)
  29.         minetest.set_node(bones_pos, {name="air"})
  30.     end
  31. end
  32.  
  33. -- DEBUG
  34. minetest.register_on_joinplayer(function(player)
  35.     if LASTSTAND_DEBUG then
  36.         player:set_hp(1)
  37.     end
  38. end)
  39.  
  40. minetest.register_on_leaveplayer(function(player)
  41.     local player_name = player:get_player_name()
  42.     dying_players[player_name] = nil
  43.     saved_players[player_name] = nil
  44. end)
  45.  
  46. minetest.register_on_dieplayer(function(player)
  47.     local player_name = player:get_player_name()
  48.                                
  49.     if dying_players[player_name] ~= nil then -- TOTO add && not minetest.is_singleplayer()
  50.         return false
  51.     end
  52.                                
  53.     local node = minetest.registered_nodes[minetest.get_node(player:getpos()).name]
  54.     if node.groups.lava ~= nil or player:get_breath() == 0 then
  55.         return false
  56.     end
  57.    
  58.     dying_players[player_name] = LASTSTAND_DURATION
  59.     if LASTSTAND_DEBUG then
  60.         saved_players[player_name] = player:getpos()
  61.     end
  62.    
  63.     local players = minetest.get_objects_inside_radius(player:getpos(), LASTSTAND_BROADCAST_RADIUS)
  64.     for _,obj in ipairs(players) do
  65.         if obj:is_player() and obj:get_player_name() ~= player_name then
  66.             minetest.chat_send_player(obj:get_player_name(), player_name .. " is dying, he needs help")
  67.         end
  68.     end
  69.                                      
  70.     showPlayerCountdown(player_name)
  71.  
  72.     return true
  73. end)
  74.  
  75. minetest.register_on_respawnplayer(function(player)
  76.     local player_name = player:get_player_name()
  77.     dying_players[player_name] = nil
  78.  
  79.     if saved_players[player_name] ~= nil then
  80.         player:set_hp(LASTSTAND_RES_HEALTH)
  81.         minetest.after(1, getBonesInventoryBack, player)
  82.         return true
  83.     end
  84.    
  85.     if LASTSTAND_DEBUG then
  86.         player:set_hp(1)
  87.     end
  88.                                      
  89.     return false
  90. end)
  91.  
  92. minetest.register_globalstep(function(dtime)
  93.     for name, timer in pairs(dying_players) do
  94.         dying_players[name] = dying_players[name] - dtime
  95.         if dying_players[name] <= 0 then
  96.             minetest.chat_send_player(name, "you died and can't be resurrected anymore")
  97.             dying_players[name] = nil
  98.         end
  99.     end
  100.    
  101. end)
  102.                                
  103. minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage)
  104.     local player_name = player:get_player_name()
  105.     if dying_players[player_name] ~= nil then
  106.         minetest.chat_send_player(player_name, hitter:get_player_name() .. " helped you, click on resurrect")
  107.         saved_players[player_name] = player:getpos()
  108.     end
  109. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement