mirror of
https://git.minetest.land/Mineclonia/Mineclonia.git
synced 2024-11-16 22:15:10 +00:00
Place dungeon chests randomly at wall position
This commit is contained in:
parent
231f12e3fa
commit
6c4aff7f6a
1 changed files with 21 additions and 4 deletions
|
@ -154,10 +154,23 @@ minetest.register_on_generated(function(minp, maxp)
|
||||||
|
|
||||||
-- Check conditions. If okay, start generating
|
-- Check conditions. If okay, start generating
|
||||||
|
|
||||||
local chestsLeft = 2
|
-- But prepare random chest positions beforehand
|
||||||
|
-- We assign each position at the wall a number and each chest gets one of these numbers randomly
|
||||||
|
local totalChests = 2
|
||||||
|
local totalChestSlots = (dim.x-1) * (dim.z-1)
|
||||||
|
local chestSlots = {}
|
||||||
|
-- There is a small chance that both chests have the same slot.
|
||||||
|
-- In this case, only 1 chest is spawned. This intended.
|
||||||
|
for i=1, totalChests do
|
||||||
|
table.insert(chestSlots, math.random(1, totalChestSlots))
|
||||||
|
end
|
||||||
|
table.sort(chestSlots)
|
||||||
|
local currentChest = 1
|
||||||
|
|
||||||
if ceilingfloor_ok and openings >= 0 and openings <= 5000 then
|
if ceilingfloor_ok and openings >= 0 and openings <= 5000 then
|
||||||
-- Ceiling and floor
|
-- Ceiling and floor
|
||||||
local maxx, maxy, maxz = x+dim.x+1, y+dim.y+1, z+dim.z+1
|
local maxx, maxy, maxz = x+dim.x+1, y+dim.y+1, z+dim.z+1
|
||||||
|
local chestSlotCounter = 1
|
||||||
for tx = x, maxx do
|
for tx = x, maxx do
|
||||||
for tz = z, maxz do
|
for tz = z, maxz do
|
||||||
for ty = y, maxy do
|
for ty = y, maxy do
|
||||||
|
@ -177,14 +190,18 @@ minetest.register_on_generated(function(minp, maxp)
|
||||||
|
|
||||||
-- Room interiour
|
-- Room interiour
|
||||||
else
|
else
|
||||||
|
local forChest = ty==y+1 and (tx==x+1 or tx==maxx-1 or tz==z+1 or tz==maxz-1)
|
||||||
|
|
||||||
-- Chest
|
-- Place next chest at the wall (if it was its chosen wall slot)
|
||||||
if ty == y + 1 and chestsLeft > 0 and math.random(1,6) == 1 then
|
if forChest and (currentChest < totalChests + 1) and (chestSlots[currentChest] == chestSlotCounter) then
|
||||||
chestsLeft = chestsLeft - 1
|
currentChest = currentChest + 1
|
||||||
table.insert(chest_posses, {x=tx, y=ty, z=tz})
|
table.insert(chest_posses, {x=tx, y=ty, z=tz})
|
||||||
else
|
else
|
||||||
data[p_pos] = c_air
|
data[p_pos] = c_air
|
||||||
end
|
end
|
||||||
|
if forChest then
|
||||||
|
chestSlotCounter = chestSlotCounter + 1
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue