Changed animal spawn chance. Monster/Npc attack closest threat.
This commit is contained in:
parent
b2d615301f
commit
6072df0f93
45
api.lua
45
api.lua
@ -1,4 +1,4 @@
|
||||
-- Mobs Api (21st April 2015)
|
||||
-- Mobs Api (26th April 2015)
|
||||
mobs = {}
|
||||
mobs.mod = "redo"
|
||||
|
||||
@ -312,9 +312,12 @@ lifetimer = def.lifetimer or 600,
|
||||
if self.type == "monster" and damage_enabled and self.state ~= "attack" then
|
||||
|
||||
local s = self.object:getpos()
|
||||
local p, sp, dist
|
||||
local player = nil
|
||||
local type = nil
|
||||
local obj = nil
|
||||
local min_dist = self.view_range + 1
|
||||
local min_player = nil
|
||||
|
||||
for _,oir in ipairs(minetest.get_objects_inside_radius(s,self.view_range)) do
|
||||
|
||||
@ -330,38 +333,51 @@ lifetimer = def.lifetimer or 600,
|
||||
end
|
||||
|
||||
if type == "player" or type == "npc" then
|
||||
local s = self.object:getpos()
|
||||
local p = player:getpos()
|
||||
local sp = s
|
||||
s = self.object:getpos()
|
||||
p = player:getpos()
|
||||
sp = s
|
||||
p.y = p.y + 1
|
||||
sp.y = sp.y + 1 -- aim higher to make looking up hills more realistic
|
||||
local dist = ((p.x-s.x)^2 + (p.y-s.y)^2 + (p.z-s.z)^2)^0.5
|
||||
dist = ((p.x-s.x)^2 + (p.y-s.y)^2 + (p.z-s.z)^2)^0.5
|
||||
if dist < self.view_range then -- and self.in_fov(self,p) then
|
||||
if minetest.line_of_sight(sp,p,2) == true then
|
||||
self.do_attack(self,player,dist)
|
||||
break
|
||||
-- choose closest player to attack
|
||||
if minetest.line_of_sight(sp,p,2) == true
|
||||
and dist < min_dist then
|
||||
min_dist = dist
|
||||
min_player = player
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
-- attack player
|
||||
if min_player then
|
||||
self.do_attack(self, min_player, min_dist)
|
||||
end
|
||||
end
|
||||
|
||||
-- npc, find monster to attack
|
||||
-- npc, find closest monster to attack
|
||||
local min_dist = self.view_range + 1
|
||||
local min_player = nil
|
||||
|
||||
if self.type == "npc" and self.attacks_monsters and self.state ~= "attack" then
|
||||
local s = self.object:getpos()
|
||||
local obj = nil
|
||||
local p, dist
|
||||
s = self.object:getpos()
|
||||
obj = nil
|
||||
for _, oir in pairs(minetest.get_objects_inside_radius(s,self.view_range)) do
|
||||
obj = oir:get_luaentity()
|
||||
if obj and obj.type == "monster" then
|
||||
-- attack monster
|
||||
p = obj.object:getpos()
|
||||
dist = ((p.x-s.x)^2 + (p.y-s.y)^2 + (p.z-s.z)^2)^0.5
|
||||
self.do_attack(self,obj.object,dist)
|
||||
break
|
||||
if dist < min_dist then
|
||||
min_dist = dist
|
||||
min_player = obj.object
|
||||
end
|
||||
end
|
||||
end
|
||||
if min_player then
|
||||
self.do_attack(self, min_player, min_dist)
|
||||
end
|
||||
end
|
||||
|
||||
-- horny animal can mate for 40 seconds, afterwards horny animal cannot mate again for 200 seconds
|
||||
if self.horny == true and self.hornytimer < 240 and self.child == false then
|
||||
@ -548,7 +564,6 @@ lifetimer = def.lifetimer or 600,
|
||||
|
||||
elseif self.state == "walk" then
|
||||
|
||||
local lp = nil
|
||||
local s = self.object:getpos()
|
||||
-- if there is water nearby, try to avoid it
|
||||
local lp = minetest.find_node_near(s, 2, {"group:water"})
|
||||
|
2
bee.lua
2
bee.lua
@ -46,7 +46,7 @@ mobs:register_mob("mobs:bee", {
|
||||
end,
|
||||
})
|
||||
|
||||
mobs:register_spawn("mobs:bee", {"group:flower"}, 20, 8, 5000, 1, 31000)
|
||||
mobs:register_spawn("mobs:bee", {"group:flower"}, 20, 10, 9000, 1, 31000)
|
||||
|
||||
mobs:register_egg("mobs:bee", "Bee", "mobs_bee_inv.png", 0)
|
||||
|
||||
|
@ -80,7 +80,7 @@ mobs:register_mob("mobs:chicken", {
|
||||
end,
|
||||
})
|
||||
|
||||
mobs:register_spawn("mobs:chicken", {"default:dirt_with_grass", "ethereal:bamboo_dirt"}, 20, 8, 9000, 1, 31000)
|
||||
mobs:register_spawn("mobs:chicken", {"default:dirt_with_grass", "ethereal:bamboo_dirt"}, 20, 10, 15000, 1, 31000)
|
||||
|
||||
mobs:register_egg("mobs:chicken", "Chicken", "mobs_chicken_inv.png", 0)
|
||||
|
||||
|
2
cow.lua
2
cow.lua
@ -98,7 +98,7 @@ mobs:register_mob("mobs:cow", {
|
||||
end,
|
||||
})
|
||||
|
||||
mobs:register_spawn("mobs:cow", {"default:dirt_with_grass", "ethereal:green_dirt"}, 20, 8, 11000, 1, 31000)
|
||||
mobs:register_spawn("mobs:cow", {"default:dirt_with_grass", "ethereal:green_dirt"}, 20, 10, 15000, 1, 31000)
|
||||
|
||||
mobs:register_egg("mobs:cow", "Cow", "default_grass.png", 1)
|
||||
|
||||
|
@ -63,6 +63,6 @@ mobs:register_mob("mobs:kitten", {
|
||||
end,
|
||||
})
|
||||
|
||||
mobs:register_spawn("mobs:kitten", {"default:dirt_with_grass", "ethereal:grove_dirt"}, 20, 8, 12000, 1, 31000)
|
||||
mobs:register_spawn("mobs:kitten", {"default:dirt_with_grass", "ethereal:grove_dirt"}, 20, 10, 15000, 1, 31000)
|
||||
|
||||
mobs:register_egg("mobs:kitten", "Kitten", "mobs_kitten_inv.png", 0)
|
||||
|
2
rat.lua
2
rat.lua
@ -34,7 +34,7 @@ mobs:register_mob("mobs:rat", {
|
||||
end,
|
||||
})
|
||||
|
||||
mobs:register_spawn("mobs:rat", {"default:stone"}, 20, 0, 11000, 1, 0)
|
||||
mobs:register_spawn("mobs:rat", {"default:stone"}, 20, 5, 15000, 1, 0)
|
||||
|
||||
mobs:register_egg("mobs:rat", "Rat", "mobs_rat_inventory.png", 0)
|
||||
|
||||
|
@ -103,7 +103,7 @@ mobs:register_mob("mobs:sheep", {
|
||||
end,
|
||||
})
|
||||
|
||||
mobs:register_spawn("mobs:sheep", {"default:dirt_with_grass", "ethereal:green_dirt"}, 20, 8, 9000, 1, 31000)
|
||||
mobs:register_spawn("mobs:sheep", {"default:dirt_with_grass", "ethereal:green_dirt"}, 20, 10, 15000, 1, 31000)
|
||||
|
||||
mobs:register_egg("mobs:sheep", "Sheep", "wool_white.png", 1)
|
||||
|
||||
|
@ -75,7 +75,7 @@ mobs:register_mob("mobs:pumba", {
|
||||
end,
|
||||
})
|
||||
|
||||
mobs:register_spawn("mobs:pumba", {"ethereal:mushroom_dirt", "default:dirt"}, 20, 8, 9000, 1, 31000)
|
||||
mobs:register_spawn("mobs:pumba", {"ethereal:mushroom_dirt", "default:dirt"}, 20, 10, 15000, 1, 31000)
|
||||
|
||||
mobs:register_egg("mobs:pumba", "Warthog", "wool_pink.png", 1)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user