Advertisement
ecube8

permafy: init.lua

May 14th, 2013
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.04 KB | None | 0 0
  1. --
  2. -- Permafy Mod for Minetest 0.4.3
  3. -- by Orby (orbitaldecay@gmail.com)
  4.  
  5. -- Updated 04-13-2013 for 0.4.5
  6. -- Updated 05-14-2013 to fix > 10000 block changes
  7. --- How much space above block to protect. Head height is 3.
  8.  
  9. local old_node_dig = minetest.node_dig
  10. function minetest.node_dig(pos, node, digger)
  11.     local meta = minetest.env:get_meta(pos)
  12.     owner = meta:get_string("owner")
  13.  
  14.  
  15.     if owner == "" then
  16.         return old_node_dig(pos, node, digger)
  17.     end
  18.  
  19.     if owner == digger:get_player_name() or minetest.get_player_privs(digger:get_player_name())["privs"] then
  20.         ret = old_node_dig(pos, node, digger)
  21.         air_meta = minetest.env:get_meta(pos)
  22.         air_meta:set_string("owner", owner)
  23.         air_meta:set_string("infotext", "Owned by " .. owner .. ".")
  24.     else
  25.         minetest.chat_send_player(digger:get_player_name(), "This node is owned by "..meta:get_string("owner")..".")
  26.         return false
  27.     end
  28. end
  29.  
  30. local old_node_place = minetest.item_place
  31. function minetest.item_place(itemstack, placer, pointed_thing)
  32.  
  33.     if itemstack:get_definition().type ~= "node" then
  34.         return old_node_place(itemstack, placer, pointed_thing)
  35.     end
  36.  
  37.     meta = minetest.env:get_meta(pointed_thing.above)
  38.     owner = meta:get_string("owner")
  39.  
  40.     if owner == "" then
  41.  
  42.         return old_node_place(itemstack, placer, pointed_thing)
  43.  
  44.     elseif owner == placer:get_player_name() or minetest.get_player_privs(placer:get_player_name())["privs"] then
  45.  
  46.         local ret = old_node_place(itemstack, placer, pointed_thing)
  47.         new_node_meta = minetest.env:get_meta(pointed_thing.above)
  48.         new_node_meta:set_string("owner", owner)
  49.         new_node_meta:set_string("infotext", "Owned by " .. owner .. ".")
  50.         return ret
  51.  
  52.     else
  53.  
  54.         minetest.chat_send_player(placer:get_player_name(), "This space is owned by "..owner..".")
  55.         return
  56.  
  57.     end
  58. end
  59.  
  60. minetest.register_chatcommand("permafy",
  61. {
  62.     params = "owner x1, y1, z1, x2, y2, z2",
  63.     description = "Turns an area of blocks into permablocks",
  64.     privs = { privs = true },
  65.     func = function(name, param)
  66.         local a = {}
  67.         local b = {}
  68.         local owner
  69.  
  70.         owner, a.x, a.y, a.z, b.x, b.y, b.z = string.match(param, "^([^ ]+) +([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
  71.         if owner and a.x and a.y and a.z and b.x and b.y and b.z then
  72.             minetest.chat_send_player(name, "Start corner is ("..a.x..", "..a.y..", "..a.z..")")
  73.             minetest.chat_send_player(name, "End corner is ("..b.x..", "..b.y..", "..b.z..")")
  74.             if tonumber(b.x) < tonumber(a.x) then
  75.                 temp = a.x
  76.                 a.x = b.x
  77.                 b.x = temp
  78.             end
  79.             if tonumber(b.y) < tonumber(a.y) then
  80.                 temp = a.y
  81.                 a.y = b.y
  82.                 b.y = temp
  83.             end
  84.             if tonumber(b.z) < tonumber(a.z) then
  85.                 temp = a.z
  86.                 a.z = b.z
  87.                 b.z = temp
  88.             end
  89.             -- if (b.x - a.x) * (b.y - a.y) * (b.z - a.z) > 10000 then
  90.             --    minetest.chat_send_player(name, "Try a smaller area")
  91.             --    return
  92.             --end                        -- -- ecube
  93.             temp = 0 -- ++ ecube
  94.             for ix = a.x, b.x do
  95.                 for iy = a.y, b.y do
  96.                     for iz = a.z, b.z do
  97.                         local meta = minetest.env:get_meta({x = ix, y = iy, z = iz})
  98.                         local node = minetest.env:get_node({x = ix, y = iy, z = iz})
  99.                         meta:set_string("owner", owner)
  100.                         meta:set_string("infotext", "Owned by "..owner..".")
  101.                         temp = temp + 1 -- ++ ecube
  102.                         if temp == 9999 then -- ++ ecube
  103.                           temp = 0 -- ++ ecube
  104.                           TIME_Sleep( 2000 ) -- ++ ecube
  105.                         end -- ++ ecube
  106.                     end
  107.                 end
  108.             end
  109.  
  110.             minetest.chat_send_player(name, "Owner name is "..owner)
  111.         else
  112.             minetest.chat_send_player(name, "Incorrect usage of permafy.")
  113.         end
  114.     end
  115. })
  116.  
  117. minetest.register_chatcommand("depermafy",
  118. {
  119.     params = "x1, y1, z1, x2, y2, z2",
  120.     description = "Removes any ownership flags over the area",
  121.     privs = { privs = true },
  122.     func = function(name, param)
  123.         local a = {}
  124.         local b = {}
  125.  
  126.         a.x, a.y, a.z, b.x, b.y, b.z = string.match(param, "([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
  127.         if a.x and a.y and a.z and b.x and b.y and b.z then
  128.             minetest.chat_send_player(name, "Start corner is ("..a.x..", "..a.y..", "..a.z..")")
  129.             minetest.chat_send_player(name, "End corner is ("..b.x..", "..b.y..", "..b.z..")")
  130.             if tonumber(b.x) < tonumber(a.x) then
  131.                 temp = a.x
  132.                 a.x = b.x
  133.                 b.x = temp
  134.             end
  135.             if tonumber(b.y) < tonumber(a.y) then
  136.                 temp = a.y
  137.                 a.y = b.y
  138.                 b.y = temp
  139.             end
  140.             if tonumber(b.z) < tonumber(a.z) then
  141.                 temp = a.z
  142.                 a.z = b.z
  143.                 b.z = temp
  144.             end
  145.             if (b.x - a.x) * (b.y - a.y) * (b.z - a.z) > 100000 then
  146.                 minetest.chat_send_player(name, "Try a smaller area")
  147.                 return
  148.             end
  149.             for ix = a.x, b.x do
  150.                 for iy = a.y, b.y do
  151.                     for iz = a.z, b.z do
  152.                         local meta = minetest.env:get_meta({x = ix, y = iy, z = iz})
  153.                         local node = minetest.env:get_node({x = ix, y = iy, z = iz})
  154.                         meta:set_string("owner", "")
  155.                         meta:set_string("infotext", "")
  156.                     end
  157.                 end
  158.             end
  159.         else
  160.             minetest.chat_send_player(name, "Incorrect usage of depermafy.")
  161.         end
  162.     end
  163. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement