]> git.lizzy.rs Git - Crafter.git/blobdiff - mods/mob/spawning.lua
Fix more deprecated calls and locals not being local
[Crafter.git] / mods / mob / spawning.lua
index 1dd86531d0dfa12082f526bab64f90c3bd86d94d..328f6e4097aaeb85c03830ef11256275a9be7034 100644 (file)
@@ -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()
+]]--