X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=mods%2Fmob%2Fspawning.lua;h=328f6e4097aaeb85c03830ef11256275a9be7034;hb=0929c2a1a3db4dd89b2db5e3a714774b02d9d2ed;hp=1dd86531d0dfa12082f526bab64f90c3bd86d94d;hpb=500f06e77540705e452d32b6b8504d082ae76bed;p=Crafter.git diff --git a/mods/mob/spawning.lua b/mods/mob/spawning.lua index 1dd8653..328f6e4 100644 --- a/mods/mob/spawning.lua +++ b/mods/mob/spawning.lua @@ -1,9 +1,7 @@ --this is where mob spawning is defined - +--[[ --spawn mob in a square doughnut shaped radius local chance = 20 -local tick = 0.2 -local timer = 0 --inner and outer part of square donut radius local inner = 24 local outer = 128 @@ -11,12 +9,13 @@ local outer = 128 --for debug testing to isolate mobs local spawn = true -minetest.register_globalstep(function(dtime) - if spawn then - timer = timer + dtime - if timer >= tick and math.random(1,chance) == chance then - --print("ticking") - timer = 0 +local spawn_table = {"pig"} +local dark_spawn_table = {"slime","creepig"} +local aether_spawn_table = {"flying_pig"} + +local function spawn_mobs() + print("---------------------------------------------") + if spawn and global_mob_amount < mob_limit then --check through players for _,player in ipairs(minetest.get_connected_players()) do --don't spawn near dead players @@ -41,20 +40,45 @@ minetest.register_globalstep(function(dtime) x = pos.x + math.random(-outer,outer) end + local spawner + if pos.y >= 21000 then + spawner = minetest.find_nodes_in_area_under_air(vector.new(x,pos.y-32,z), vector.new(x,pos.y+32,z), {"aether:grass"}) + else + spawner = minetest.find_nodes_in_area_under_air(vector.new(x,pos.y-32,z), vector.new(x,pos.y+32,z), {"main:grass","main:sand","main:water"}) + end - local spawner = minetest.find_nodes_in_area_under_air(vector.new(x,pos.y-32,z), vector.new(x,pos.y+32,z), {"main:grass","main:sand","main:water"}) - --print(dump(spawner)) if table.getn(spawner) > 0 then local mob_pos = spawner[1] - mob_pos.y = mob_pos.y + 1 - print("Spawning at: "..minetest.pos_to_string(mob_pos)) - minetest.add_entity(mob_pos,"mob:pig") + --aether spawning + if mob_pos.y >= 21000 then + mob_pos.y = mob_pos.y + 1 + local mob_spawning = aether_spawn_table[math.random(1,table.getn(spawn_table))] + print("Aether Spawning "..mob_spawning.." at: "..minetest.pos_to_string(mob_pos)) + minetest.add_entity(mob_pos,"mob:"..mob_spawning) + + else + local light_level = minetest.get_node_light(spawner[1]) + if light_level < 10 then + mob_pos.y = mob_pos.y + 1 + local mob_spawning = dark_spawn_table[math.random(1,table.getn(dark_spawn_table))] + print("Dark Spawning "..mob_spawning.." at: "..minetest.pos_to_string(mob_pos)) + minetest.add_entity(mob_pos,"mob:"..mob_spawning) + else + mob_pos.y = mob_pos.y + 1 + local mob_spawning = spawn_table[math.random(1,table.getn(spawn_table))] + print("Light Spawning "..mob_spawning.." at: "..minetest.pos_to_string(mob_pos)) + minetest.add_entity(mob_pos,"mob:"..mob_spawning) + end + end end end end - elseif timer > tick then - timer = 0 - end end -end) + minetest.after(5, function() + spawn_mobs() + end) +end + +spawn_mobs() +]]--