]> git.lizzy.rs Git - Crafter.git/blobdiff - mods/mob/spawning.lua
Make mobs insanely smart
[Crafter.git] / mods / mob / spawning.lua
index 73fb58c586b9e0f013256ee185afb42ce5f90e5f..908136cc6a4f5e92c2b2b76a85d476c92e2b214b 100644 (file)
@@ -1,7 +1,11 @@
 --this is where mob spawning is defined
 
 --spawn mob in a square doughnut shaped radius
-local chance = 20
+local timer = 6
+--the amount of mobs that the game will try to spawn
+local spawn_goal = 10
+--the amount of mobs that the spawner will cap out at
+local mob_limit = 100
 --inner and outer part of square donut radius
 local inner = 24
 local outer = 80
@@ -11,13 +15,14 @@ local find_node_height = 32
 --for debug testing to isolate mobs
 local spawn = true
 
-local spawn_table = {"pig"}
-local dark_spawn_table = {"creeper","spider"}
+local spawn_table = {"pig","chicken","sheep"}
+local snow_spawn_table = {"snowman","snoider","sneeper",}
+local dark_spawn_table = {"creeper","creeper","creeper","spider","spider","spider","big_slime","medium_slime","small_slime"}
 local nether_spawn_table = {"nitro_creeper"}
 local aether_spawn_table = {"phyg"}
 
 local function spawn_mobs()
-       print("---------------------------------------------")
+       --print("---------------------------------------------")
        if spawn and global_mob_amount < mob_limit then
                --check through players
                for _,player in ipairs(minetest.get_connected_players()) do                     
@@ -50,37 +55,50 @@ local function spawn_mobs()
                        --print(dump(spawner))
                        if table.getn(spawner) > 0 then
                                local mob_pos = spawner[1]
+                               mob_pos.y = mob_pos.y + 1
                                --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(aether_spawn_table))]
-                                       print("Aether Spawning "..mob_spawning.." at: "..minetest.pos_to_string(mob_pos))
+                                       --print("Aether Spawning "..mob_spawning.." at: "..minetest.pos_to_string(mob_pos))
                                        minetest.add_entity(mob_pos,"mob:"..mob_spawning)
                                elseif mob_pos.y <= -10033 and mob_pos.y >= -20112 then
-                                       mob_pos.y = mob_pos.y + 1
                                        local mob_spawning = nether_spawn_table[math.random(1,table.getn(nether_spawn_table))]
-                                       print("Nether Spawning "..mob_spawning.." at: "..minetest.pos_to_string(mob_pos))
+                                       --print("Nether 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
+                                       if weather_type == 1 then
+                                               local mob_spawning = snow_spawn_table[math.random(1,table.getn(snow_spawn_table))]
+                                               --print("Snow Spawning "..mob_spawning.." at: "..minetest.pos_to_string(mob_pos))
+                                               minetest.add_entity(mob_pos,"mob:"..mob_spawning)
+                                       elseif light_level < 10 then
                                                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))
+                                               --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))
+                                               --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
-       minetest.after(6, function()
+
+       --fine tune mobs
+       local after_timer = global_mob_amount/spawn_goal
+       if after_timer > timer then 
+               after_timer = timer 
+       end
+
+       minetest.after(after_timer, function()
                spawn_mobs()
        end)
 end
-
-spawn_mobs()
\ No newline at end of file
+if spawning then
+       minetest.register_on_mods_loaded(function()
+               minetest.after(0,function()
+                       spawn_mobs()
+               end)
+       end)
+end