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.mod = "redo"
|
||||
|
@ -2403,24 +2403,47 @@ minetest.register_entity(name, {
|
|||
|
||||
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
|
||||
|
||||
function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light,
|
||||
interval, chance, aoc, min_height, max_height, day_toggle, on_spawn)
|
||||
|
||||
-- chance override in minetest.conf for registered mob
|
||||
local new_chance = tonumber(minetest.setting_get(name .. "_chance"))
|
||||
-- chance/spawn number override in minetest.conf for registered mob
|
||||
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))
|
||||
return
|
||||
end
|
||||
|
||||
chance = new_chance
|
||||
|
||||
print (S("[Mobs Redo] Chance setting for @1 changed to @2", name, chance))
|
||||
print (S("[Mobs Redo] Chance setting for @1 changed to @2", name, chance)
|
||||
.. " (total: " .. aoc .. ")")
|
||||
|
||||
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)
|
||||
|
||||
-- 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
|
||||
or not mobs.spawning_mobs[name] then
|
||||
and count_mobs(pos, name) >= aoc then
|
||||
--print ("--- too many entities", name, aoc)
|
||||
return
|
||||
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_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)
|
||||
'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.
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user