90 lines
2.8 KiB
Lua
90 lines
2.8 KiB
Lua
local random_seed = math.random(0,1000)
|
|
|
|
minetest.register_on_generated(function(minp, maxp, seed)
|
|
for i=0, 3 do
|
|
local pos = {x=math.random(minp.x,maxp.x),z=math.random(minp.z,maxp.z), y=minp.y}
|
|
local env = minetest.env
|
|
-- Find ground level (0...15)
|
|
local ground = nil
|
|
for y=maxp.y,minp.y+1,-1 do
|
|
if env:get_node({x=pos.x,y=y,z=pos.z}).name ~= "air" and env:get_node({x=pos.x,y=y,z=pos.z}).name ~= "default:water_source" and env:get_node({x=pos.x,y=y,z=pos.z}).name ~= "snow:snow" then
|
|
ground = y
|
|
break
|
|
end
|
|
end
|
|
|
|
if ground then
|
|
local invcontent = {}
|
|
local pos = {x=pos.x,y=ground+1,z=pos.z}
|
|
local rand = PseudoRandom(seed+random_seed)
|
|
if rand:next(1,4) == 1 then
|
|
table.insert(invcontent, 'default:apple '..tostring(rand:next(1,5)))
|
|
end
|
|
if rand:next(1,8) == 1 then
|
|
table.insert(invcontent, 'default:ladder '..tostring(rand:next(1,5)))
|
|
end
|
|
if rand:next(1,4) == 1 then
|
|
table.insert(invcontent, 'default:torch '..tostring(rand:next(1,6)))
|
|
end
|
|
if rand:next(1,3) == 1 then
|
|
table.insert(invcontent, 'default:sword_wood 1')
|
|
end
|
|
if rand:next(1,3) == 1 then
|
|
table.insert(invcontent, 'default:axe_wood 1')
|
|
end
|
|
if rand:next(1,5) == 1 then
|
|
table.insert(invcontent, 'default:axe_stone 1')
|
|
end
|
|
if rand:next(1,10) == 1 then
|
|
table.insert(invcontent, 'default:axe_steel 1')
|
|
end
|
|
if rand:next(1,3) == 1 then
|
|
table.insert(invcontent, 'throwing:bow_wood 1')
|
|
end
|
|
if rand:next(1,20) == 1 then
|
|
table.insert(invcontent, 'bucket:bucket_lava 1')
|
|
end
|
|
if rand:next(1,5) == 1 then
|
|
table.insert(invcontent, 'default:sword_stone 1')
|
|
end
|
|
if rand:next(1,5) == 1 then
|
|
table.insert(invcontent, 'throwing:bow_stone 1')
|
|
end
|
|
if rand:next(1,10) == 1 then
|
|
table.insert(invcontent, 'default:sword_steel 1')
|
|
end
|
|
if rand:next(1,10) == 1 then
|
|
table.insert(invcontent, 'throwing:bow_steel 1')
|
|
end
|
|
if rand:next(1,10) == 1 then
|
|
table.insert(invcontent, 'food:bread 1')
|
|
end
|
|
if rand:next(1,5) == 1 then
|
|
table.insert(invcontent, 'food:bun 1')
|
|
end
|
|
if rand:next(1,3) == 1 then
|
|
table.insert(invcontent, 'food:bread_slice 1')
|
|
end
|
|
if rand:next(1,4) == 1 then
|
|
table.insert(invcontent, 'food:cup 1')
|
|
end
|
|
if rand:next(1,4) == 1 then
|
|
table.insert(invcontent, 'throwing:arrow '..tostring(rand:next(1,6)))
|
|
end
|
|
if rand:next(1,6) == 1 then
|
|
table.insert(invcontent, 'throwing:arrow_fire '..tostring(rand:next(1,6)))
|
|
end
|
|
if rand:next(1,20) == 1 then
|
|
table.insert(invcontent, 'throwing:arrow_teleport '..tostring(rand:next(1,6)))
|
|
end
|
|
env:add_node(pos,{name='default:chest', inv=invcontent})
|
|
local meta = minetest.env:get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
for _,itemstring in ipairs(invcontent) do
|
|
inv:add_item('main', itemstring)
|
|
end
|
|
print("spawn near "..pos.x.." "..pos.z)
|
|
end
|
|
end
|
|
end)
|