realtest/mods/core/helper_functions.lua

113 lines
2.1 KiB
Lua
Raw Normal View History

function table:contains(v)
for _, i in ipairs(self) do
2012-10-30 16:04:35 +06:00
if i == v then
return true
end
end
return false
end
function table:get_index(value)
for i, v in ipairs(self) do
if v == value then
return i
2012-10-30 16:04:35 +06:00
end
end
end
2013-05-02 14:51:12 +06:00
function copy_table(t)
local u = { }
for k, v in pairs(t) do
u[k] = v
end
return setmetatable(u, getmetatable(t))
end
function mod_pos(p, dx, dy, dz)
return { x = p.x + dx, y = p.y + dy, z = p.z + dz }
end
2012-10-30 16:04:35 +06:00
function hacky_swap_node(pos,name)
local node = minetest.get_node(pos)
local meta = minetest.get_meta(pos)
2012-10-30 16:04:35 +06:00
local meta0 = meta:to_table()
if node.name == name then
return
end
node.name = name
local meta0 = meta:to_table()
minetest.set_node(pos,node)
meta = minetest.get_meta(pos)
2012-10-30 16:04:35 +06:00
meta:from_table(meta0)
end
function string:capitalize()
return self:sub(1,1):upper()..self:sub(2):lower()
end
2012-11-26 17:17:12 +06:00
function string:remove_modname_prefix()
2013-05-01 20:02:17 +06:00
for i = 1,2 do
local i = self:find(":")
if i then
self = self:sub(i+1)
end
2012-11-26 17:17:12 +06:00
end
2013-05-01 20:02:17 +06:00
return self
2012-11-26 17:17:12 +06:00
end
2012-12-02 00:20:05 +06:00
2013-04-22 16:49:01 +06:00
function string:get_modname_prefix()
local i = self:find(":")
if i == 1 then
self = self:sub(2, -1)
end
i = self:find(":")
if i then
return self:sub(1, i-1)
end
2013-05-01 20:02:17 +06:00
return self
end
2012-12-16 21:58:53 +06:00
function merge(lhs, rhs)
local merged_table = {}
for _, v in ipairs(lhs) do
table.insert(merged_table, v)
end
for _, v in ipairs(rhs) do
table.insert(merged_table, v)
end
return merged_table
end
function rshift(x, by)
return math.floor(x / 2 ^ by)
end
2013-10-31 12:48:16 +00:00
--Papyrus Growth
minetest.register_abm({
nodenames = {"default:papyrus"},
neighbors = {"default:dirt", "default:dirt_with_grass"},
interval = 50,
chance = 20,
action = function(pos, node)
pos.y = pos.y-1
local name = minetest.get_node(pos).name
if name == "default:dirt" or name == "default:dirt_with_grass" then
if minetest.find_node_near(pos, 3, {"group:water"}) == nil then
return
end
pos.y = pos.y+1
local height = 0
while minetest.get_node(pos).name == "default:papyrus" and height < 4 do
height = height+1
pos.y = pos.y+1
end
if height < 4 then
if minetest.get_node(pos).name == "air" then
minetest.set_node(pos, {name="default:papyrus"})
end
end
end
end,
})