replace get_objects_inside_radius() with get_connected_players() where possible
This commit is contained in:
parent
dd9b3d7add
commit
d64c104140
33
api.lua
33
api.lua
|
@ -266,11 +266,9 @@ function mob_class:collision()
|
|||
local prop = self.object:get_properties()
|
||||
local width = -prop.collisionbox[1] + prop.collisionbox[4] + 0.5
|
||||
|
||||
for _,object in pairs(minetest.get_objects_inside_radius(pos, width)) do
|
||||
|
||||
if is_player(object) then
|
||||
|
||||
local pos2 = object:get_pos()
|
||||
for _,player in pairs(minetest.get_connected_players()) do
|
||||
local pos2 = player:get_pos()
|
||||
if pos2:distance(pos) < width then
|
||||
local vec = {x = pos.x - pos2.x, z = pos.z - pos2.z}
|
||||
local force = (width + 0.5) - vector.distance(
|
||||
{x = pos.x, y = 0, z = pos.z},
|
||||
|
@ -2243,12 +2241,11 @@ function mob_class:do_states(dtime)
|
|||
|
||||
local lp
|
||||
local s = self.object:get_pos()
|
||||
local objs = minetest.get_objects_inside_radius(s, 3)
|
||||
|
||||
for n = 1, #objs do
|
||||
|
||||
if is_player(objs[n]) then
|
||||
lp = objs[n]:get_pos()
|
||||
for _,player in pairs(minetest.get_connected_players()) do
|
||||
local player_pos = player:get_pos()
|
||||
if player_pos:distance(s) <= 3 then
|
||||
lp = player_pos
|
||||
break
|
||||
end
|
||||
end
|
||||
|
@ -3334,14 +3331,9 @@ function mob_class:mob_expire(pos, dtime)
|
|||
if self.lifetimer <= 0 then
|
||||
|
||||
-- only despawn away from player
|
||||
local objs = minetest.get_objects_inside_radius(pos, 15)
|
||||
|
||||
for n = 1, #objs do
|
||||
|
||||
if is_player(objs[n]) then
|
||||
|
||||
for _,player in pairs(minetest.get_connected_players()) do
|
||||
if player:get_pos():distance(pos) <= 15 then
|
||||
self.lifetimer = 20
|
||||
|
||||
return
|
||||
end
|
||||
end
|
||||
|
@ -4064,11 +4056,8 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter
|
|||
end
|
||||
|
||||
-- only spawn a set distance away from player
|
||||
local objs = minetest.get_objects_inside_radius(pos, mob_nospawn_range)
|
||||
|
||||
for n = 1, #objs do
|
||||
|
||||
if is_player(objs[n]) then
|
||||
for _,player in pairs(minetest.get_connected_players()) do
|
||||
if player:get_pos():distance(pos) <= mob_nospawn_range then
|
||||
--print("--- player too close", name)
|
||||
return
|
||||
end
|
||||
|
|
16
spawner.lua
16
spawner.lua
|
@ -153,21 +153,19 @@ minetest.register_abm({
|
|||
-- spawn mob if player detected and in range
|
||||
if pla > 0 then
|
||||
|
||||
local in_range = 0
|
||||
local objsp = minetest.get_objects_inside_radius(pos, pla)
|
||||
|
||||
for _, oir in pairs(objsp) do
|
||||
|
||||
if is_player(oir) then
|
||||
|
||||
in_range = 1
|
||||
local in_range = false
|
||||
|
||||
local players = minetest.get_connected_players()
|
||||
for i = 1, #players do
|
||||
local player = players[i]
|
||||
if player:get_pos():distance(pos) <= pla then
|
||||
in_range = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- player not found
|
||||
if in_range == 0 then
|
||||
if in_range then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue