forked from mtcontrib/mobs_redo
		
	added new spawn check for specific mob numbers
This commit is contained in:
		
							
								
								
									
										49
									
								
								api.lua
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								api.lua
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | |||||||
|  |  | ||||||
| -- Mobs Api (14th October 2016) | -- Mobs Api (21st October 2016) | ||||||
|  |  | ||||||
| mobs = {} | mobs = {} | ||||||
| mobs.mod = "redo" | mobs.mod = "redo" | ||||||
| @@ -2403,24 +2403,47 @@ minetest.register_entity(name, { | |||||||
|  |  | ||||||
| end -- END mobs:register_mob function | end -- END mobs:register_mob function | ||||||
|  |  | ||||||
|  | -- count how many mobs of one type are inside an area | ||||||
|  | local count_mobs = function(pos, type) | ||||||
|  |  | ||||||
|  | 	local num = 0 | ||||||
|  | 	local objs = minetest.get_objects_inside_radius(pos, 16) | ||||||
|  |  | ||||||
|  | 	for n = 1, #objs do | ||||||
|  |  | ||||||
|  | 		if not objs[n]:is_player() then | ||||||
|  |  | ||||||
|  | 			obj = objs[n]:get_luaentity() | ||||||
|  |  | ||||||
|  | 			if obj and obj.name and obj.name == type then | ||||||
|  | 				num = num + 1 | ||||||
|  | 			end | ||||||
|  | 		end | ||||||
|  | 	end | ||||||
|  |  | ||||||
|  | 	return num | ||||||
|  | end | ||||||
|  |  | ||||||
| -- global functions | -- global functions | ||||||
|  |  | ||||||
| function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, | function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, | ||||||
| 	interval, chance, aoc, min_height, max_height, day_toggle, on_spawn) | 	interval, chance, aoc, min_height, max_height, day_toggle, on_spawn) | ||||||
|  |  | ||||||
| 	-- chance override in minetest.conf for registered mob | 	-- chance/spawn number override in minetest.conf for registered mob | ||||||
| 	local new_chance = tonumber(minetest.setting_get(name .. "_chance")) | 	local numbers = minetest.setting_get(name) | ||||||
|  |  | ||||||
| 	if new_chance ~= nil then | 	if numbers then | ||||||
|  | 		numbers = numbers:split(",") | ||||||
|  | 		chance = tonumber(numbers[1]) or chance | ||||||
|  | 		aoc = tonumber(numbers[2]) or aoc | ||||||
|  |  | ||||||
| 		if new_chance == 0 then | 		if chance == 0 then | ||||||
| 			print(S("[Mobs Redo] @1 has spawning disabled", name)) | 			print(S("[Mobs Redo] @1 has spawning disabled", name)) | ||||||
| 			return | 			return | ||||||
| 		end | 		end | ||||||
|  |  | ||||||
| 		chance = new_chance | 		print (S("[Mobs Redo] Chance setting for @1 changed to @2", name, chance) | ||||||
|  | 			.. " (total: " .. aoc .. ")") | ||||||
| 		print (S("[Mobs Redo] Chance setting for @1 changed to @2", name, chance)) |  | ||||||
|  |  | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| @@ -2435,9 +2458,15 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, | |||||||
|  |  | ||||||
| 		action = function(pos, node, active_object_count, active_object_count_wider) | 		action = function(pos, node, active_object_count, active_object_count_wider) | ||||||
|  |  | ||||||
| 			-- do not spawn if too many active entities in area | 			-- is mob actually registered? | ||||||
|  | 			if not mobs.spawning_mobs[name] then | ||||||
|  | --print ("--- mob doesn't exist", name) | ||||||
|  | 				return | ||||||
|  | 			end | ||||||
|  |  | ||||||
|  | 			-- do not spawn if too many of same mob in area | ||||||
| 			if active_object_count_wider >= aoc | 			if active_object_count_wider >= aoc | ||||||
| 			or not mobs.spawning_mobs[name] then | 			and count_mobs(pos, name) >= aoc then | ||||||
| --print ("--- too many entities", name, aoc) | --print ("--- too many entities", name, aoc) | ||||||
| 				return | 				return | ||||||
| 			end | 			end | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								api.txt
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								api.txt
									
									
									
									
									
								
							| @@ -10,7 +10,7 @@ The mob api is a function that can be called on by other mods to add new animals | |||||||
|     'mobs_disable_blood' if false blood effects appear when mob is hit (default is false) |     'mobs_disable_blood' if false blood effects appear when mob is hit (default is false) | ||||||
|     'mobs_spawn_protected' if set to 1 then mobs will not spawn in protected areas (default is 0) |     'mobs_spawn_protected' if set to 1 then mobs will not spawn in protected areas (default is 0) | ||||||
|     'remove_far_mobs' if true then mobs that are outside players visual range will be removed (default is false) |     'remove_far_mobs' if true then mobs that are outside players visual range will be removed (default is false) | ||||||
|     'mobname_chance' can change specific mob chance rates or set to 0 to disable e.g. mobs_animal:cow_chance = 1000 |     'mobname' can change specific mob chance rate (0 to disable) and spawn number e.g. mobs_animal:cow = 1000,5 | ||||||
|     'mob_difficulty' sets difficulty level (health and hit damage multiplied by this number), defaults to 1.0. |     'mob_difficulty' sets difficulty level (health and hit damage multiplied by this number), defaults to 1.0. | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user