Mobs spawn and despawn away from player, tweaked and tidied code
This commit is contained in:
parent
9885b76b74
commit
629ac9186b
@ -28,6 +28,7 @@ This mod contains the following additions:
|
|||||||
|
|
||||||
Changelog:
|
Changelog:
|
||||||
|
|
||||||
|
1.25- Mobs no longer spawn within 12 blocks of player or despawn within same range. Code tidy and tweak.
|
||||||
1.24- Added feature where certain animals run away when punched (runaway = true in mob definition)
|
1.24- Added feature where certain animals run away when punched (runaway = true in mob definition)
|
||||||
1.23- Added mob spawner block for admin to setup spawners in-game (place and right click to enter settings)
|
1.23- Added mob spawner block for admin to setup spawners in-game (place and right click to enter settings)
|
||||||
1.22- Added ability to name tamed animals and npc using nametags, also npc will attack anyone who punches them apart from owner
|
1.22- Added ability to name tamed animals and npc using nametags, also npc will attack anyone who punches them apart from owner
|
||||||
|
45
api.lua
45
api.lua
@ -1,4 +1,4 @@
|
|||||||
-- Mobs Api (1st February 2016)
|
-- Mobs Api (2nd February 2016)
|
||||||
mobs = {}
|
mobs = {}
|
||||||
mobs.mod = "redo"
|
mobs.mod = "redo"
|
||||||
|
|
||||||
@ -35,21 +35,12 @@ end
|
|||||||
|
|
||||||
set_velocity = function(self, v)
|
set_velocity = function(self, v)
|
||||||
|
|
||||||
local x = 0
|
local yaw = (self.object:getyaw() + self.rotate) or 0
|
||||||
local z = 0
|
|
||||||
|
|
||||||
-- if v and v ~= 0 then
|
|
||||||
|
|
||||||
local yaw = (self.object:getyaw() + self.rotate) or 0
|
|
||||||
|
|
||||||
x = math.sin(yaw) * -v
|
|
||||||
z = math.cos(yaw) * v
|
|
||||||
-- end
|
|
||||||
|
|
||||||
self.object:setvelocity({
|
self.object:setvelocity({
|
||||||
x = x,
|
x = math.sin(yaw) * -v,
|
||||||
y = self.object:getvelocity().y,
|
y = self.object:getvelocity().y,
|
||||||
z = z
|
z = math.cos(yaw) * v
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -322,13 +313,11 @@ do_env_damage = function(self)
|
|||||||
pos.y = pos.y + self.collisionbox[2] + 0.1 -- foot level
|
pos.y = pos.y + self.collisionbox[2] + 0.1 -- foot level
|
||||||
|
|
||||||
local nod = node_ok(pos, "air") ; --print ("standing in "..nod)
|
local nod = node_ok(pos, "air") ; --print ("standing in "..nod)
|
||||||
--local nodef = minetest.registered_nodes[nod]
|
|
||||||
|
|
||||||
pos.y = pos.y + 1
|
pos.y = pos.y + 1
|
||||||
|
|
||||||
-- water
|
-- water
|
||||||
if self.water_damage ~= 0
|
if self.water_damage ~= 0
|
||||||
--and nodef.groups.water then
|
|
||||||
and minetest.get_item_group(nod, "water") ~= 0 then
|
and minetest.get_item_group(nod, "water") ~= 0 then
|
||||||
|
|
||||||
self.object:set_hp(self.object:get_hp() - self.water_damage)
|
self.object:set_hp(self.object:get_hp() - self.water_damage)
|
||||||
@ -338,7 +327,6 @@ do_env_damage = function(self)
|
|||||||
|
|
||||||
-- lava or fire
|
-- lava or fire
|
||||||
if self.lava_damage ~= 0
|
if self.lava_damage ~= 0
|
||||||
--and (nodef.groups.lava
|
|
||||||
and (minetest.get_item_group(nod, "lava") ~= 0
|
and (minetest.get_item_group(nod, "lava") ~= 0
|
||||||
or nod == "fire:basic_flame"
|
or nod == "fire:basic_flame"
|
||||||
or nod == "fire:permanent_flame") then
|
or nod == "fire:permanent_flame") then
|
||||||
@ -758,6 +746,19 @@ minetest.register_entity(name, {
|
|||||||
|
|
||||||
if self.lifetimer <= 0 then
|
if self.lifetimer <= 0 then
|
||||||
|
|
||||||
|
-- only despawn away from player
|
||||||
|
local objs = minetest.get_objects_inside_radius(pos, 12)
|
||||||
|
|
||||||
|
for _,oir in pairs(objs) do
|
||||||
|
|
||||||
|
if oir:is_player() then
|
||||||
|
|
||||||
|
self.lifetimer = 20
|
||||||
|
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
minetest.log("action",
|
minetest.log("action",
|
||||||
"lifetimer expired, removed " .. self.name)
|
"lifetimer expired, removed " .. self.name)
|
||||||
|
|
||||||
@ -785,7 +786,6 @@ minetest.register_entity(name, {
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- in water then float up
|
-- in water then float up
|
||||||
--if minetest.registered_nodes[node_ok(pos)].groups.water then
|
|
||||||
if minetest.get_item_group(node_ok(pos), "water") ~= 0 then
|
if minetest.get_item_group(node_ok(pos), "water") ~= 0 then
|
||||||
|
|
||||||
if self.floats == 1 then
|
if self.floats == 1 then
|
||||||
@ -1872,6 +1872,16 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light,
|
|||||||
-- spawn above node
|
-- spawn above node
|
||||||
pos.y = pos.y + 1
|
pos.y = pos.y + 1
|
||||||
|
|
||||||
|
-- only spawn away from player
|
||||||
|
local objs = minetest.get_objects_inside_radius(pos, 12)
|
||||||
|
|
||||||
|
for _,oir in pairs(objs) do
|
||||||
|
|
||||||
|
if oir:is_player() then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- mobs cannot spawn in protected areas when enabled
|
-- mobs cannot spawn in protected areas when enabled
|
||||||
if spawn_protected == 1
|
if spawn_protected == 1
|
||||||
and minetest.is_protected(pos, "") then
|
and minetest.is_protected(pos, "") then
|
||||||
@ -2015,7 +2025,6 @@ function mobs:explosion(pos, radius, fire, smoke, sound)
|
|||||||
|
|
||||||
-- after effects
|
-- after effects
|
||||||
if fire > 0
|
if fire > 0
|
||||||
--and (minetest.registered_nodes[n].groups.flammable
|
|
||||||
and (minetest.get_item_group(n, "flammable") ~= 0
|
and (minetest.get_item_group(n, "flammable") ~= 0
|
||||||
or math.random(1, 100) <= 30) then
|
or math.random(1, 100) <= 30) then
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user