mirror of
https://codeberg.org/tenplus1/mobs_redo.git
synced 2025-07-22 10:00:28 +02:00
Compare commits
2 Commits
bdea826b7c
...
4a6518eeba
Author | SHA1 | Date | |
---|---|---|---|
4a6518eeba | |||
a4d2918383 |
34
api.lua
34
api.lua
@ -8,7 +8,7 @@ local use_cmi = minetest.global_exists("cmi")
|
|||||||
|
|
||||||
mobs = {
|
mobs = {
|
||||||
mod = "redo",
|
mod = "redo",
|
||||||
version = "20201115",
|
version = "20201130",
|
||||||
intllib = S,
|
intllib = S,
|
||||||
invis = minetest.global_exists("invisibility") and invisibility or {}
|
invis = minetest.global_exists("invisibility") and invisibility or {}
|
||||||
}
|
}
|
||||||
@ -58,6 +58,7 @@ local mobs_drop_items = settings:get_bool("mobs_drop_items") ~= false
|
|||||||
local mobs_griefing = settings:get_bool("mobs_griefing") ~= false
|
local mobs_griefing = settings:get_bool("mobs_griefing") ~= false
|
||||||
local spawn_protected = settings:get_bool("mobs_spawn_protected") ~= false
|
local spawn_protected = settings:get_bool("mobs_spawn_protected") ~= false
|
||||||
local remove_far = settings:get_bool("remove_far_mobs") ~= false
|
local remove_far = settings:get_bool("remove_far_mobs") ~= false
|
||||||
|
local mob_area_spawn = settings:get_bool("mob_area_spawn")
|
||||||
local difficulty = tonumber(settings:get("mob_difficulty")) or 1.0
|
local difficulty = tonumber(settings:get("mob_difficulty")) or 1.0
|
||||||
local show_health = settings:get_bool("mob_show_health") ~= false
|
local show_health = settings:get_bool("mob_show_health") ~= false
|
||||||
local max_per_block = tonumber(settings:get("max_objects_per_block") or 99)
|
local max_per_block = tonumber(settings:get("max_objects_per_block") or 99)
|
||||||
@ -276,10 +277,10 @@ function mob_class:set_velocity(v)
|
|||||||
c_x, c_y = unpack(self:collision())
|
c_x, c_y = unpack(self:collision())
|
||||||
end
|
end
|
||||||
|
|
||||||
local yaw = (self.object:get_yaw() or 0) + self.rotate
|
local yaw = (self.object:get_yaw() or 0) + (self.rotate or 0)
|
||||||
|
|
||||||
-- nil check for velocity
|
-- nil check for velocity
|
||||||
v = v or 0
|
v = v or 0.01
|
||||||
|
|
||||||
-- check if standing in liquid with max viscosity of 7
|
-- check if standing in liquid with max viscosity of 7
|
||||||
local visc = min(minetest.registered_nodes[self.standing_in].liquid_viscosity, 7)
|
local visc = min(minetest.registered_nodes[self.standing_in].liquid_viscosity, 7)
|
||||||
@ -291,8 +292,8 @@ function mob_class:set_velocity(v)
|
|||||||
v = v / (visc + 1)
|
v = v / (visc + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- set velocity with hard limit of 10
|
-- set velocity
|
||||||
local vel = self.object:get_velocity()
|
local vel = self.object:get_velocity() or 0
|
||||||
|
|
||||||
local new_vel = {
|
local new_vel = {
|
||||||
x = (sin(yaw) * -v) + c_x,
|
x = (sin(yaw) * -v) + c_x,
|
||||||
@ -3908,8 +3909,27 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- returns position if we have enough space to spawn mob
|
-- should we check mob area for obstructions ?
|
||||||
pos = can_spawn(pos, name)
|
if mob_area_spawn ~= true then
|
||||||
|
|
||||||
|
-- do we have enough height clearance to spawn mob?
|
||||||
|
local ent = minetest.registered_entities[name]
|
||||||
|
local height = max(1, math.ceil(
|
||||||
|
(ent.collisionbox[5] or 0.25) - (ent.collisionbox[2] or -0.25) - 1))
|
||||||
|
|
||||||
|
for n = 0, height do
|
||||||
|
|
||||||
|
local pos2 = {x = pos.x, y = pos.y + n, z = pos.z}
|
||||||
|
|
||||||
|
if minetest.registered_nodes[node_ok(pos2).name].walkable == true then
|
||||||
|
--print ("--- inside block", name, node_ok(pos2).name)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
-- returns position if we have enough space to spawn mob
|
||||||
|
pos = can_spawn(pos, name)
|
||||||
|
end
|
||||||
|
|
||||||
if pos then
|
if pos then
|
||||||
|
|
||||||
|
3
api.txt
3
api.txt
@ -697,6 +697,9 @@ External Settings for "minetest.conf"
|
|||||||
function.
|
function.
|
||||||
'mob_nospawn_range' Minimum range a mob can spawn near player (def: 12)
|
'mob_nospawn_range' Minimum range a mob can spawn near player (def: 12)
|
||||||
'mob_active_limit' Number of active mobs in game, 0 for unlimited
|
'mob_active_limit' Number of active mobs in game, 0 for unlimited
|
||||||
|
'mob_area_spawn' When true will check surrounding area the size of the
|
||||||
|
mob for obstructions before spawning, otherwise it
|
||||||
|
defaults to checking the height of the mob only.
|
||||||
|
|
||||||
Players can override the spawn chance for each mob registered by adding a line
|
Players can override the spawn chance for each mob registered by adding a line
|
||||||
to their minetest.conf file with a new value, the lower the value the more each
|
to their minetest.conf file with a new value, the lower the value the more each
|
||||||
|
@ -33,3 +33,6 @@ mob_nospawn_range (Mob no-spawn range) float 12.0
|
|||||||
|
|
||||||
# Sets maximum number of active mobs in game (0 for unlimited)
|
# Sets maximum number of active mobs in game (0 for unlimited)
|
||||||
mob_active_limit (Mob Active Limit) float 0
|
mob_active_limit (Mob Active Limit) float 0
|
||||||
|
|
||||||
|
# Enables area check when spawning mobs
|
||||||
|
mob_area_spawn (Mob Area Spawn) bool false
|
||||||
|
Reference in New Issue
Block a user