3 dofile(minetest
.get_modpath("tsm_pyramids").."/mummy.lua")
4 dofile(minetest
.get_modpath("tsm_pyramids").."/nodes.lua")
5 dofile(minetest
.get_modpath("tsm_pyramids").."/room.lua")
8 {name
="default:apple", max = 3},
9 {name
="farming:bread", max = 3},
10 {name
="default:steel_ingot", max = 2},
11 {name
="default:gold_ingot", max = 2},
12 {name
="default:diamond", max = 1},
13 {name
="default:pick_steel", max = 1},
14 {name
="default:pick_diamond", max = 1}
18 function pyramids
.fill_chest(pos
)
19 minetest
.after(2, function()
20 local n
= minetest
.get_node(pos
)
21 if n
and n
.name
and n
.name
== "default:chest" then
22 local meta
= minetest
.get_meta(pos
)
23 local inv
= meta
:get_inventory()
24 inv
:set_size("main", 8*4)
25 if math
.random(1,10) < 7 then return end
27 if minetest
.get_modpath("treasurer") ~= nil then
28 stacks
= treasurer
.select_random_treasures(3,7,9,{"minetool", "food", "crafting_component"})
31 local stuff
= chest_stuff
[math
.random(1,#chest_stuff
)]
32 if stuff
.name
== "farming:bread" and not minetest
.get_modpath("farming") then stuff
= chest_stuff
[1] end
33 table.insert(stacks
, {name
=stuff
.name
, count
= math
.random(1,stuff
.max)})
37 if not inv
:contains_item("main", stacks
[s
]) then
38 inv
:set_stack("main", math
.random(1,32), stacks
[s
])
46 local function add_spawner(pos
)
47 minetest
.set_node(pos
, {name
="tsm_pyramids:spawner_mummy"})
48 if not minetest
.setting_getbool("only_peaceful_mobs") then pyramids
.spawn_mummy({x
=pos
.x
,y
=pos
.y
,z
=pos
.z
-2},2) end
51 local function can_replace(pos
)
52 local n
= minetest
.get_node_or_nil(pos
)
53 if n
and n
.name
and minetest
.registered_nodes
[n
.name
] and not minetest
.registered_nodes
[n
.name
].walkable
then
62 local function underground(pos
)
65 local mat
= "desert_sand"
67 while can_replace(p2
)==true do
69 if cnt
> 25 then break end
70 if cnt
>math
.random(2,4) then mat
= "desert_stone"end
71 minetest
.set_node(p2
, {name
="default:"..mat
})
76 local function make_entrance(pos
)
77 local gang
= {x
=pos
.x
+10,y
=pos
.y
, z
=pos
.z
}
80 minetest
.remove_node({x
=gang
.x
+1,y
=gang
.y
+iy
,z
=gang
.z
+iz
})
81 if iz
>=3 and iy
== 3 then
82 minetest
.set_node({x
=gang
.x
,y
=gang
.y
+iy
+1,z
=gang
.z
+iz
}, {name
="default:sandstonebrick"})
83 minetest
.set_node({x
=gang
.x
+1,y
=gang
.y
+iy
+1,z
=gang
.z
+iz
}, {name
="default:sandstonebrick"})
84 minetest
.set_node({x
=gang
.x
+2,y
=gang
.y
+iy
+1,z
=gang
.z
+iz
}, {name
="default:sandstonebrick"})
90 local function make(pos
)
91 minetest
.log("action", "Created pyramid at ("..pos
.x
..","..pos
.y
..","..pos
.z
..")")
95 if iy
<1 then underground({x
=pos
.x
+ix
,y
=pos
.y
,z
=pos
.z
+iz
}) end
96 minetest
.set_node({x
=pos
.x
+ix
,y
=pos
.y
+iy
,z
=pos
.z
+iz
}, {name
="default:sandstonebrick"})
98 local n
= minetest
.get_node({x
=pos
.x
+ix
,y
=pos
.y
+iy
+yy
,z
=pos
.z
+iz
})
99 if n
and n
.name
and n
.name
== "default:desert_stone" then minetest
.set_node({x
=pos
.x
+ix
,y
=pos
.y
+iy
+yy
,z
=pos
.z
+iz
},{name
="default:desert_sand"}) end
105 pyramids
.make_room(pos
)
106 minetest
.after(2, pyramids
.make_traps
, pos
)
107 add_spawner({x
=pos
.x
+11,y
=pos
.y
+2, z
=pos
.z
+17})
108 make_entrance({x
=pos
.x
,y
=pos
.y
, z
=pos
.z
})
111 local perl1
= {SEED1
= 9130, OCTA1
= 3, PERS1
= 0.5, SCAL1
= 250} -- Values should match minetest mapgen V6 desert noise.
113 local function hlp_fnct(pos
, name
)
114 local n
= minetest
.get_node_or_nil(pos
)
115 if n
and n
.name
and n
.name
== name
then
121 local function ground(pos
, old
)
123 while hlp_fnct(p2
, "air") do
134 minetest
.register_on_generated(function(minp
, maxp
, seed
)
135 if maxp
.y
< 0 then return end
136 math
.randomseed(seed
)
139 local perlin1
= minetest
.env
:get_perlin(perl1
.SEED1
, perl1
.OCTA1
, perl1
.PERS1
, perl1
.SCAL1
)
140 local noise1
= perlin1
:get2d({x
=minp
.x
,y
=minp
.y
})--,z=minp.z})
142 if noise1
> 0.25 or noise1
< -0.26 then
143 local mpos
= {x
=math
.random(minp
.x
,maxp
.x
), y
=math
.random(minp
.y
,maxp
.y
), z
=math
.random(minp
.z
,maxp
.z
)}
145 p2
= minetest
.find_node_near(mpos
, 25, {"default:desert_sand"})
146 while p2
== nil and cnt
< 5 do
148 mpos
= {x
=math
.random(minp
.x
,maxp
.x
), y
=math
.random(minp
.y
,maxp
.y
), z
=math
.random(minp
.z
,maxp
.z
)}
149 p2
= minetest
.find_node_near(mpos
, 25, {"default:desert_sand"})
151 if p2
== nil then return end
152 if p2
.y
< 0 then return end
155 local opos1
= {x
=p2
.x
+22,y
=p2
.y
-1,z
=p2
.z
+22}
156 local opos2
= {x
=p2
.x
+22,y
=p2
.y
-1,z
=p2
.z
}
157 local opos3
= {x
=p2
.x
,y
=p2
.y
-1,z
=p2
.z
+22}
158 local opos1_n
= minetest
.get_node_or_nil(opos1
)
159 local opos2_n
= minetest
.get_node_or_nil(opos2
)
160 local opos3_n
= minetest
.get_node_or_nil(opos3
)
161 if opos1_n
and opos1_n
.name
and opos1_n
.name
== "air" then
162 p2
= ground(opos1
, p2
)
164 if opos2_n
and opos2_n
.name
and opos2_n
.name
== "air" then
165 p2
= ground(opos2
, p2
)
167 if opos3_n
and opos3_n
.name
and opos3_n
.name
== "air" then
168 p2
= ground(opos3
, p2
)
171 if p2
.y
< 0 then p2
.y
= 0 end
172 if minetest
.find_node_near(p2
, 25, {"default:water_source"}) ~= nil or minetest
.find_node_near(p2
, 22, {"default:dirt_with_grass"}) ~= nil or minetest
.find_node_near(p2
, 52, {"default:sandstonebrick"}) ~= nil then return end
174 if math
.random(0,10) > 7 then return end
175 minetest
.after(0.8,make
,p2
)