commit
b5648fff22
@ -19,6 +19,7 @@ local function fish_brain(self)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
if mobkit.timer(self,1) then
|
if mobkit.timer(self,1) then
|
||||||
|
local prty = mobkit.get_queue_priority(self)
|
||||||
if not self.isinliquid then
|
if not self.isinliquid then
|
||||||
mobkit.hurt(self,1)
|
mobkit.hurt(self,1)
|
||||||
end
|
end
|
||||||
@ -30,10 +31,13 @@ local function fish_brain(self)
|
|||||||
if self.isinliquid and self.isinliquid =="default:river_water_source" then
|
if self.isinliquid and self.isinliquid =="default:river_water_source" then
|
||||||
water_life.hq_swimto(self,30,1,"default:water_source")
|
water_life.hq_swimto(self,30,1,"default:water_source")
|
||||||
end
|
end
|
||||||
if mobkit.is_queue_empty_high(self) then
|
if mobkit.is_queue_empty_high(self) and self.isinliquid then
|
||||||
mobkit.animate(self,"def")
|
mobkit.animate(self,"def")
|
||||||
mobkit.hq_aqua_roam(self,10,0.5)
|
water_life.hq_aqua_roam(self,10,0.5,false,true)
|
||||||
end
|
end
|
||||||
|
if prty < 90 and not self.isinliquid then
|
||||||
|
water_life.hq_go2water(self,99,2)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ local rad = math.rad
|
|||||||
local function croc_brain(self)
|
local function croc_brain(self)
|
||||||
|
|
||||||
local prty = mobkit.get_queue_priority(self)
|
local prty = mobkit.get_queue_priority(self)
|
||||||
|
-- minetest.chat_send_all(dump(prty))
|
||||||
|
|
||||||
--die
|
--die
|
||||||
if self.hp <= 0 then
|
if self.hp <= 0 then
|
||||||
@ -66,13 +67,13 @@ local function croc_brain(self)
|
|||||||
and water_life.isinliquid(target) then
|
and water_life.isinliquid(target) then
|
||||||
local dist = water_life.dist2tgt(self,target)
|
local dist = water_life.dist2tgt(self,target)
|
||||||
if dist > 2 and dist < 16 then
|
if dist > 2 and dist < 16 then
|
||||||
water_life.hq_water_attack(self,target,24,7,true)
|
water_life.hq_water_attack(self,target,26,7,true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if food and mobkit.is_in_deep(food) and not aliveinwater then
|
if food and mobkit.is_in_deep(food) and not aliveinwater then
|
||||||
local dist = water_life.dist2tgt(self,food)
|
local dist = water_life.dist2tgt(self,food)
|
||||||
if dist > 2 and dist < 16 then
|
if dist > 2 and dist < 16 then
|
||||||
water_life.hq_water_attack(self,food,25,7,true)
|
water_life.hq_water_attack(self,food,26,7,true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if self.isinliquid then
|
if self.isinliquid then
|
||||||
@ -85,7 +86,7 @@ local function croc_brain(self)
|
|||||||
end
|
end
|
||||||
if food and mobkit.is_alive(food) and not water_life.isinliquid(food) then
|
if food and mobkit.is_alive(food) and not water_life.isinliquid(food) then
|
||||||
local dist = water_life.dist2tgt(self,food)
|
local dist = water_life.dist2tgt(self,food)
|
||||||
if dist < 10 then
|
if dist < 16 then
|
||||||
water_life.hq_go2land(self,15,food)
|
water_life.hq_go2land(self,15,food)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -99,13 +100,13 @@ local function croc_brain(self)
|
|||||||
end
|
end
|
||||||
if target and mobkit.is_alive(target) then
|
if target and mobkit.is_alive(target) then
|
||||||
local dist = water_life.dist2tgt(self,target)
|
local dist = water_life.dist2tgt(self,target)
|
||||||
if dist < 7 then
|
if dist < 8 and prty < 24 then
|
||||||
water_life.hq_hunt(self,24,target,7)
|
water_life.hq_hunt(self,24,target,7)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if food and mobkit.is_alive(food) then
|
if food and mobkit.is_alive(food) then
|
||||||
local dist = water_life.dist2tgt(self,food)
|
local dist = water_life.dist2tgt(self,food)
|
||||||
if dist < 7 then
|
if dist < 8 and prty < 25 then
|
||||||
water_life.hq_hunt(self,25,food,7)
|
water_life.hq_hunt(self,25,food,7)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -129,9 +130,9 @@ end
|
|||||||
|
|
||||||
minetest.register_entity("water_life:croc",{
|
minetest.register_entity("water_life:croc",{
|
||||||
physical = true,
|
physical = true,
|
||||||
stepheight = 0.5,
|
stepheight = 1.1,
|
||||||
collide_with_objects = true,
|
collide_with_objects = false,
|
||||||
collisionbox = {-0.5, 0, -0.5, 0.5, 0.3, 0.5},
|
collisionbox = {-0.49, -0.01, -0.49, 0.49, 0.3, 0.49},
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
mesh = "water_life_crocodile.b3d",
|
mesh = "water_life_crocodile.b3d",
|
||||||
textures = {"water_life_crocodile.png"},
|
textures = {"water_life_crocodile.png"},
|
||||||
|
@ -9,6 +9,15 @@ local pow = math.pow
|
|||||||
local sign = math.sign
|
local sign = math.sign
|
||||||
local rad = math.rad
|
local rad = math.rad
|
||||||
|
|
||||||
|
local function MoskitosAround(pos)
|
||||||
|
if not pos then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
local nodes = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1},
|
||||||
|
{x=pos.x+1, y=pos.y+1, z=pos.z+1}, {"water_life:moskito"})
|
||||||
|
return #nodes
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_on_player_hpchange(function(player, hp_change, reason)
|
minetest.register_on_player_hpchange(function(player, hp_change, reason)
|
||||||
if not player then return hp_change end
|
if not player then return hp_change end
|
||||||
if hp_change > 0 then return hp_change end
|
if hp_change > 0 then return hp_change end
|
||||||
@ -96,7 +105,7 @@ minetest.register_node("water_life:moskito", {
|
|||||||
spos.y > water_life.moskito_minpos and
|
spos.y > water_life.moskito_minpos and
|
||||||
spos.y < water_life.moskito_maxpos and
|
spos.y < water_life.moskito_maxpos and
|
||||||
not water_life.ihateinsects then
|
not water_life.ihateinsects then
|
||||||
if rnd < bdata.humid then
|
if rnd < bdata.humid and MoskitosAround(spos) < 3 then
|
||||||
minetest.set_node(spos, {name = "water_life:moskito"})
|
minetest.set_node(spos, {name = "water_life:moskito"})
|
||||||
minetest.get_node_timer(spos):start(random(mmintime, mmaxtime))
|
minetest.get_node_timer(spos):start(random(mmintime, mmaxtime))
|
||||||
local pmeta = minetest.get_meta(spos)
|
local pmeta = minetest.get_meta(spos)
|
||||||
|
@ -5,6 +5,11 @@ water_life.urchinspawn = {
|
|||||||
"default:coral_green",
|
"default:coral_green",
|
||||||
"default:coral_pink",
|
"default:coral_pink",
|
||||||
"default:coral_orange",
|
"default:coral_orange",
|
||||||
|
"default:sand_with_kelp",
|
||||||
|
"water_life:kelpbrown",
|
||||||
|
"water_life:kelpgreen",
|
||||||
|
"water_life:seagrassgreen",
|
||||||
|
"water_life:seagrassred",
|
||||||
"water_life:coralmagenta",
|
"water_life:coralmagenta",
|
||||||
"water_life:coralskyblue",
|
"water_life:coralskyblue",
|
||||||
"seacoral:seacoralsandaqua",
|
"seacoral:seacoralsandaqua",
|
||||||
|
9
api.lua
9
api.lua
@ -260,7 +260,7 @@ function water_life.get_close_drops(self,name)
|
|||||||
if #objs < 1 then return nil end
|
if #objs < 1 then return nil end
|
||||||
for i = #objs,1,-1 do
|
for i = #objs,1,-1 do
|
||||||
local entity = objs[i]:get_luaentity()
|
local entity = objs[i]:get_luaentity()
|
||||||
if not entity or not entity.name == "__builtin:item" then
|
if not entity or entity.name ~= "__builtin:item" then
|
||||||
table.remove(objs,i)
|
table.remove(objs,i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -299,11 +299,14 @@ function water_life.aqua_radar_dumb(pos,yaw,range,reverse,shallow)
|
|||||||
local function okpos(p)
|
local function okpos(p)
|
||||||
local node = mobkit.nodeatpos(p)
|
local node = mobkit.nodeatpos(p)
|
||||||
if node then
|
if node then
|
||||||
if node.drawtype == 'liquid' then
|
if node.drawtype == 'liquid' then
|
||||||
|
if shallow then
|
||||||
|
return true
|
||||||
|
end
|
||||||
local nodeu = mobkit.nodeatpos(mobkit.pos_shift(p,{y=1}))
|
local nodeu = mobkit.nodeatpos(mobkit.pos_shift(p,{y=1}))
|
||||||
local noded = mobkit.nodeatpos(mobkit.pos_shift(p,{y=-1}))
|
local noded = mobkit.nodeatpos(mobkit.pos_shift(p,{y=-1}))
|
||||||
if ((nodeu and nodeu.drawtype == 'liquid') or (noded and
|
if ((nodeu and nodeu.drawtype == 'liquid') or (noded and
|
||||||
noded.drawtype == 'liquid')) or shallow then
|
noded.drawtype == 'liquid')) then
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
return false
|
return false
|
||||||
|
@ -474,12 +474,15 @@ function water_life.hq_aqua_roam(self,prty,speed,anim)
|
|||||||
mobkit.animate(self,anim)
|
mobkit.animate(self,anim)
|
||||||
init = false
|
init = false
|
||||||
end
|
end
|
||||||
|
if mobkit.timer(self,1) and self.isonground then
|
||||||
|
return true
|
||||||
|
end
|
||||||
local pos = mobkit.get_stand_pos(self)
|
local pos = mobkit.get_stand_pos(self)
|
||||||
local yaw = self.object:get_yaw()
|
local yaw = self.object:get_yaw()
|
||||||
local scanpos = mobkit.get_node_pos(mobkit.pos_translate2d(pos,yaw,speed))
|
local scanpos = mobkit.get_node_pos(mobkit.pos_translate2d(pos,yaw,speed))
|
||||||
if not vector.equals(prvscanpos,scanpos) then
|
if not vector.equals(prvscanpos,scanpos) then
|
||||||
prvscanpos=scanpos
|
prvscanpos=scanpos
|
||||||
local nyaw,height = water_life.aqua_radar_dumb(pos,yaw,speed,true,true)
|
local nyaw,height = water_life.aqua_radar_dumb(pos,yaw,speed,false,true)
|
||||||
if height and height > pos.y then
|
if height and height > pos.y then
|
||||||
local vel = self.object:get_velocity()
|
local vel = self.object:get_velocity()
|
||||||
vel.y = vel.y+1
|
vel.y = vel.y+1
|
||||||
@ -488,7 +491,7 @@ function water_life.hq_aqua_roam(self,prty,speed,anim)
|
|||||||
if yaw ~= nyaw then
|
if yaw ~= nyaw then
|
||||||
tyaw=nyaw
|
tyaw=nyaw
|
||||||
mobkit.hq_aqua_turn(self,prty + 1,tyaw,speed)
|
mobkit.hq_aqua_turn(self,prty + 1,tyaw,speed)
|
||||||
--return
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if mobkit.timer(self,1) then
|
if mobkit.timer(self,1) then
|
||||||
@ -528,12 +531,16 @@ function water_life.hq_attack(self,prty,tgtobj)
|
|||||||
noob = 0
|
noob = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
if (dist and dist > 3) or poison > 0 or noob > 0 then
|
if (self.name == "water_life.rattlesnake") and ((dist and dist > 3)
|
||||||
|
or poison > 0 or noob > 0) then
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
|
if dist and dist > 8 then
|
||||||
|
return true
|
||||||
|
end
|
||||||
mobkit.lq_turn2pos(self,tpos)
|
mobkit.lq_turn2pos(self,tpos)
|
||||||
local height = tgtobj:is_player() and 0.35 or
|
local height = tgtobj:is_player() and 0.35 or
|
||||||
tgtobj:get_luaentity().height*0.6
|
tgtobj:get_luaentity().height*0.3
|
||||||
if tpos.y+height>pos.y then
|
if tpos.y+height>pos.y then
|
||||||
mobkit.make_sound(self,"attack")
|
mobkit.make_sound(self,"attack")
|
||||||
water_life.lq_jumpattack(self,tpos.y+height-pos.y,tgtobj)
|
water_life.lq_jumpattack(self,tpos.y+height-pos.y,tgtobj)
|
||||||
@ -592,13 +599,14 @@ function water_life.hq_slow_roam(self,prty,idle)
|
|||||||
|
|
||||||
local func=function(self)
|
local func=function(self)
|
||||||
if self.isinliquid then return true end
|
if self.isinliquid then return true end
|
||||||
if mobkit.is_queue_empty_low(self) and self.isonground then
|
if mobkit.is_queue_empty_low(self) then
|
||||||
local pos = mobkit.get_stand_pos(self)
|
|
||||||
local neighbor = random(8)
|
local neighbor = random(8)
|
||||||
local height, tpos, liquidflag = mobkit.is_neighbor_node_reachable(
|
local height, tpos, liquidflag = mobkit.is_neighbor_node_reachable(
|
||||||
self,neighbor)
|
self,neighbor)
|
||||||
if height and not liquidflag then
|
if height and tpos then
|
||||||
mobkit.dumbstep(self,height,tpos,1,idle)
|
mobkit.dumbstep(self,height,tpos,0.1)--,idle)
|
||||||
|
else
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -610,13 +618,16 @@ function water_life.hq_go2water(self,prty,speed)
|
|||||||
local pos = mobkit.get_stand_pos(self)
|
local pos = mobkit.get_stand_pos(self)
|
||||||
local target = minetest.find_node_near(pos, self.view_range, {"group:water"})
|
local target = minetest.find_node_near(pos, self.view_range, {"group:water"})
|
||||||
if not speed then speed = 0.1 end
|
if not speed then speed = 0.1 end
|
||||||
|
if not target then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
local func=function(self)
|
local func=function(self)
|
||||||
if self.isinliquid or not target then return true end
|
if self.isinliquid then
|
||||||
if mobkit.is_queue_empty_low(self) and self.isonground then
|
return true
|
||||||
pos = mobkit.get_stand_pos(self)
|
end
|
||||||
local height = target.y - pos.y
|
if mobkit.is_queue_empty_low(self) or self.isonground then
|
||||||
mobkit.dumbstep(self,height,target,speed,0)
|
mobkit.dumbstep(self,0,target,speed,0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
mobkit.queue_high(self,func,prty)
|
mobkit.queue_high(self,func,prty)
|
||||||
|
14
crafts.lua
14
crafts.lua
@ -114,7 +114,7 @@ if not water_life.apionly then
|
|||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
if placer and not placer:is_player() then return itemstack end
|
if placer and not placer:is_player() then return itemstack end
|
||||||
if not pointed_thing then return itemstack end
|
if not pointed_thing then return itemstack end
|
||||||
if not pointed_thing.type == "node" then return itemstack end
|
if pointed_thing.type ~= "node" then return itemstack end
|
||||||
local pos = pointed_thing.above
|
local pos = pointed_thing.above
|
||||||
local number = water_life.count_objects(pos)
|
local number = water_life.count_objects(pos)
|
||||||
if number.all > water_life.maxmobs or number.fish > 10 then return itemstack end
|
if number.all > water_life.maxmobs or number.fish > 10 then return itemstack end
|
||||||
@ -140,7 +140,7 @@ if not water_life.apionly then
|
|||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
if placer and not placer:is_player() then return itemstack end
|
if placer and not placer:is_player() then return itemstack end
|
||||||
if not pointed_thing then return itemstack end
|
if not pointed_thing then return itemstack end
|
||||||
if not pointed_thing.type == "node" then return itemstack end
|
if pointed_thing.type ~= "node" then return itemstack end
|
||||||
local pos = pointed_thing.above
|
local pos = pointed_thing.above
|
||||||
local number = water_life.count_objects(pos,nil,"water_life:piranha")
|
local number = water_life.count_objects(pos,nil,"water_life:piranha")
|
||||||
if number.all > water_life.maxmobs or number.name > 10 then return itemstack end
|
if number.all > water_life.maxmobs or number.name > 10 then return itemstack end
|
||||||
@ -165,7 +165,7 @@ if not water_life.apionly then
|
|||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
if placer and not placer:is_player() then return itemstack end
|
if placer and not placer:is_player() then return itemstack end
|
||||||
if not pointed_thing then return itemstack end
|
if not pointed_thing then return itemstack end
|
||||||
if not pointed_thing.type == "node" then return itemstack end
|
if pointed_thing.type ~= "node" then return itemstack end
|
||||||
local pos = pointed_thing.above
|
local pos = pointed_thing.above
|
||||||
local number = water_life.count_objects(pos,nil,"water_life:coralfish_tamed")
|
local number = water_life.count_objects(pos,nil,"water_life:coralfish_tamed")
|
||||||
if number.all > water_life.maxmobs or number.name > 10 then return itemstack end
|
if number.all > water_life.maxmobs or number.name > 10 then return itemstack end
|
||||||
@ -195,7 +195,7 @@ if not water_life.apionly then
|
|||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
if placer and not placer:is_player() then return itemstack end
|
if placer and not placer:is_player() then return itemstack end
|
||||||
if not pointed_thing then return itemstack end
|
if not pointed_thing then return itemstack end
|
||||||
if not pointed_thing.type == "node" then return itemstack end
|
if pointed_thing.type ~= "node" then return itemstack end
|
||||||
local pos = pointed_thing.above
|
local pos = pointed_thing.above
|
||||||
local number = water_life.count_objects(pos,nil,"water_life:clownfish_tamed")
|
local number = water_life.count_objects(pos,nil,"water_life:clownfish_tamed")
|
||||||
if number.all > water_life.maxmobs or number.name > 10 then
|
if number.all > water_life.maxmobs or number.name > 10 then
|
||||||
@ -223,7 +223,7 @@ if not water_life.apionly then
|
|||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
if placer and not placer:is_player() then return itemstack end
|
if placer and not placer:is_player() then return itemstack end
|
||||||
if not pointed_thing then return itemstack end
|
if not pointed_thing then return itemstack end
|
||||||
if not pointed_thing.type == "node" then return itemstack end
|
if pointed_thing.type ~= "node" then return itemstack end
|
||||||
local pos = pointed_thing.above
|
local pos = pointed_thing.above
|
||||||
local number = water_life.count_objects(pos,10,"water_life:urchin")
|
local number = water_life.count_objects(pos,10,"water_life:urchin")
|
||||||
if number.all > water_life.maxmobs or number.name > 10 then return itemstack end
|
if number.all > water_life.maxmobs or number.name > 10 then return itemstack end
|
||||||
@ -248,7 +248,7 @@ if not water_life.apionly then
|
|||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
if placer and not placer:is_player() then return itemstack end
|
if placer and not placer:is_player() then return itemstack end
|
||||||
if not pointed_thing then return itemstack end
|
if not pointed_thing then return itemstack end
|
||||||
if not pointed_thing.type == "node" then return itemstack end
|
if pointed_thing.type ~= "node" then return itemstack end
|
||||||
local pos = pointed_thing.above
|
local pos = pointed_thing.above
|
||||||
local number = water_life.count_objects(pos,10,"water_life:jellyfish")
|
local number = water_life.count_objects(pos,10,"water_life:jellyfish")
|
||||||
if number.all > water_life.maxmobs or number.name > 10 then return itemstack end
|
if number.all > water_life.maxmobs or number.name > 10 then return itemstack end
|
||||||
@ -272,7 +272,7 @@ if not water_life.apionly then
|
|||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
if placer and not placer:is_player() then return itemstack end
|
if placer and not placer:is_player() then return itemstack end
|
||||||
if not pointed_thing then return itemstack end
|
if not pointed_thing then return itemstack end
|
||||||
if not pointed_thing.type == "node" then return itemstack end
|
if pointed_thing.type ~= "node" then return itemstack end
|
||||||
local pos = pointed_thing.above
|
local pos = pointed_thing.above
|
||||||
local number = water_life.count_objects(pos,water_life.abr * 16,"water_life:snake")
|
local number = water_life.count_objects(pos,water_life.abr * 16,"water_life:snake")
|
||||||
if number.all > water_life.maxmobs or number.name > 5 then return itemstack end
|
if number.all > water_life.maxmobs or number.name > 5 then return itemstack end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user