essential/extras/extras.lua
2021-04-02 06:03:02 +00:00

108 lines
3.0 KiB
Lua
Executable File

print("[extras] library functions loading")
extras.table_empty = function ( tab )
for key in pairs(tab) do
return false
end
return true
end
extras.getnodepos = function(npos)
local node = minetest.get_node_or_nil(npos)
if not node then
minetest.get_voxel_manip():read_from_map(npos, npos)
node = minetest.get_node(npos)
end
return node
end
extras.setpos = function (pos,obj)
local count = 0
local node = extras.getnodepos(pos)
while node.name ~= "air" do
pos.y = pos.y + 1
count = count + 1
--obj:setpos(pos)
node = extras.getnodepos(pos)
end
local name = obj:get_player_name()
if name ~= "" then
if count > 1 then
minetest.chat_send_player(name, " You were rescued from being buried "..count.." meters deep.")
end
end
obj:setpos(pos)
if count > 1 then
pos.y = pos.y - count
end
end
extras.setprivs_jailed = function ( name)
minetest.chat_send_all("*************************")
minetest.chat_send_all(name.." has had all privs removed.")
minetest.chat_send_all("*************************")
minetest.chat_send_all(name.." is granted shout to explain themselves...")
local privs = {}
privs.shout = true
minetest.set_player_privs(name, privs)
return true
end
extras.setprivs_released = function ( name)
minetest.chat_send_all("Granting "..name.." default privs.")
local privs = {}
local str = extras.defaultprivs
for priv in string.gmatch(str, '([^,]+)') do
privs[priv] = true
end
minetest.set_player_privs(name, privs)
return true
end
if extras.jail~=0 then
extras.save_jail = function (jail_data)
print("[extras] jail - saving data")
if extras.table_empty(jail_data) then
print("[extras] jail - jail.data was empty on save")
return
end
local data = minetest.serialize( jail_data )
local path = minetest.get_worldpath().."/jail.data"
local file = io.open( path, "w" )
if( file ) then
file:write( data )
file:close()
return true
else
return nil
end
end
extras.load_jail = function ()
print("[extras] jail - loading data")
local path = minetest.get_worldpath().."/jail.data"
local file = io.open( path, "r" )
if( file ) then
local jail_data = minetest.deserialize( file:read("*all") )
file:close()
if extras.table_empty(jail_data) then
print("[extras] jail - jail.data is empty, deleting")
os.remove(path)
end
return jail_data
else
print("[extras] jail - no data to load")
return {}
end
end
extras.jail_data = extras.load_jail()
if not extras.jail_data then
jail_data.jailpos = { x = 0, y = 5000, z = 0 }
jail_data.releasepos = minetest.setting_get_pos("static_spawnpoint") or {x=0, y=15, z=0}
extras.save_jail(jail_data)
end
end