initial commit
subgame + mods
This commit is contained in:
56
mods/lavatemple/mapgen.lua
Executable file
56
mods/lavatemple/mapgen.lua
Executable file
@@ -0,0 +1,56 @@
|
||||
lavatemple.mapgen_data = {}
|
||||
lavatemple.file = minetest.get_worldpath()..'/lavatemple.mt'
|
||||
|
||||
-- try to load the data from file
|
||||
local f = io.open(lavatemple.file, "r")
|
||||
if f then
|
||||
local contents = f:read()
|
||||
io.close(f)
|
||||
if contents ~= nil then
|
||||
lavatemple.mapgen_data = minetest.deserialize(contents)
|
||||
end
|
||||
end
|
||||
|
||||
-- generate position of the temple (if not done already)
|
||||
if type (lavatemple.mapgen_data) ~= "table" or
|
||||
lavatemple.mapgen_data.pos == nil or
|
||||
lavatemple.mapgen_data.pos.x == nil or
|
||||
lavatemple.mapgen_data.pos.y == nil or
|
||||
lavatemple.mapgen_data.pos.z == nil then
|
||||
|
||||
-- generate the temple position
|
||||
math.randomseed(os.time())
|
||||
lavatemple.mapgen_data.pos = {
|
||||
x=math.random(-2000,2000),
|
||||
y=math.random(-500,-50),
|
||||
z=math.random(-2000,2000)
|
||||
}
|
||||
|
||||
-- save data
|
||||
local f = io.open(lavatemple.file, "w")
|
||||
f:write(minetest.serialize(lavatemple.mapgen_data))
|
||||
io.close(f)
|
||||
end
|
||||
|
||||
minetest.register_on_generated(function(minp,maxp,seed)
|
||||
local ltp = lavatemple.mapgen_data.pos
|
||||
if ltp.x > minp.x and ltp.x < maxp.x and
|
||||
ltp.y > minp.y and ltp.y < maxp.y and
|
||||
ltp.z > minp.z and ltp.z < maxp.z then
|
||||
local f = io.open(minetest.get_modpath("lavatemple").."/schems/lavatemple.we", "r")
|
||||
if not f then return end
|
||||
local contents = f:read()
|
||||
io.close(f)
|
||||
if not contents then return end
|
||||
-- Clear the area since worldedit doesn't save "air" nodes
|
||||
pos1, pos2, count = worldedit.allocate(ltp, contents)
|
||||
for x=pos1.x,pos2.x do
|
||||
for y=pos1.y,pos2.y do
|
||||
for z=pos1.z,pos2.z do
|
||||
minetest.env:remove_node({x=x,y=y,z=z})
|
||||
end end end
|
||||
-- Deserialize the temple
|
||||
worldedit.deserialize(ltp, contents, minetest.env)
|
||||
end
|
||||
end)
|
||||
|
Reference in New Issue
Block a user