forked from mtcontrib/mobs_redo
added new spawn check for specific mob numbers
This commit is contained in:
parent
3f61935a07
commit
7014152bf9
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.
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user