]> git.lizzy.rs Git - Crafter.git/blob - mods/mob/spawning.lua
Add in fishing
[Crafter.git] / mods / mob / spawning.lua
1 --this is where mob spawning is defined
2
3 --spawn mob in a square doughnut shaped radius
4 local chance = 20
5 --inner and outer part of square donut radius
6 local inner = 24
7 local outer = 80
8 --the height in which the game will search the x and z chosen (NUMBER up, NUMBER down)
9 local find_node_height = 32
10
11 --for debug testing to isolate mobs
12 local spawn = true
13
14 local spawn_table = {"pig"}
15 local dark_spawn_table = {"creeper","spider"}
16 local nether_spawn_table = {"nitro_creeper"}
17 local aether_spawn_table = {"phyg"}
18
19 local function spawn_mobs()
20         print("---------------------------------------------")
21         if spawn and global_mob_amount < mob_limit then
22                 --check through players
23                 for _,player in ipairs(minetest.get_connected_players()) do                     
24                         local int = {-1,1}
25                         local pos = vector.floor(vector.add(player:get_pos(),0.5))
26                         
27                         local x,z
28                         
29                         --this is used to determine the axis buffer from the player
30                         local axis = math.random(0,1)
31                         
32                         --cast towards the direction
33                         if axis == 0 then --x
34                                 x = pos.x + math.random(inner,outer)*int[math.random(1,2)]
35                                 z = pos.z + math.random(-outer,outer)
36                         else --z
37                                 z = pos.z + math.random(inner,outer)*int[math.random(1,2)]
38                                 x = pos.x + math.random(-outer,outer)
39                         end
40                         
41                         local spawner = {}
42                         if pos.y >= 21000 then
43                                 spawner = minetest.find_nodes_in_area_under_air(vector.new(x,pos.y-find_node_height,z), vector.new(x,pos.y+find_node_height,z), {"aether:grass"})
44                         elseif pos.y <= -10033 and pos.y >= -20112 then
45                                 spawner = minetest.find_nodes_in_area_under_air(vector.new(x,pos.y-find_node_height,z), vector.new(x,pos.y+find_node_height,z), {"nether:netherrack"})
46                         else
47                                 spawner = minetest.find_nodes_in_area_under_air(vector.new(x,pos.y-find_node_height,z), vector.new(x,pos.y+find_node_height,z), {"main:grass","main:sand","main:water"})
48                         end
49                         
50                         --print(dump(spawner))
51                         if table.getn(spawner) > 0 then
52                                 local mob_pos = spawner[1]
53                                 --aether spawning
54                                 if mob_pos.y >= 21000 then
55                                         mob_pos.y = mob_pos.y + 1
56                                         local mob_spawning = aether_spawn_table[math.random(1,table.getn(aether_spawn_table))]
57                                         print("Aether Spawning "..mob_spawning.." at: "..minetest.pos_to_string(mob_pos))
58                                         minetest.add_entity(mob_pos,"mob:"..mob_spawning)
59                                 elseif mob_pos.y <= -10033 and mob_pos.y >= -20112 then
60                                         mob_pos.y = mob_pos.y + 1
61                                         local mob_spawning = nether_spawn_table[math.random(1,table.getn(nether_spawn_table))]
62                                         print("Nether Spawning "..mob_spawning.." at: "..minetest.pos_to_string(mob_pos))
63                                         minetest.add_entity(mob_pos,"mob:"..mob_spawning)
64                                 else
65                                         local light_level = minetest.get_node_light(spawner[1])
66                                         if light_level < 10 then
67                                                 mob_pos.y = mob_pos.y + 1
68                                                 local mob_spawning = dark_spawn_table[math.random(1,table.getn(dark_spawn_table))]
69                                                 print("Dark Spawning "..mob_spawning.." at: "..minetest.pos_to_string(mob_pos))
70                                                 minetest.add_entity(mob_pos,"mob:"..mob_spawning)
71                                         else
72                                                 mob_pos.y = mob_pos.y + 1
73                                                 local mob_spawning = spawn_table[math.random(1,table.getn(spawn_table))]
74                                                 print("Light Spawning "..mob_spawning.." at: "..minetest.pos_to_string(mob_pos))
75                                                 minetest.add_entity(mob_pos,"mob:"..mob_spawning)
76                                         end
77                                 end
78                         end
79                 end
80         end
81         minetest.after(6, function()
82                 spawn_mobs()
83         end)
84 end
85
86 spawn_mobs()