added on_breed on_grown and do_punch custom functions

This commit is contained in:
TenPlus1 2017-09-15 16:06:35 +01:00
parent 7b0a1cf233
commit 4785c37f18
2 changed files with 58 additions and 16 deletions

56
api.lua
View File

@ -1,9 +1,9 @@
-- Mobs Api (8th September 2017) -- Mobs Api (15th September 2017)
mobs = {} mobs = {}
mobs.mod = "redo" mobs.mod = "redo"
mobs.version = "20170908" mobs.version = "20170915"
-- Intllib -- Intllib
@ -814,12 +814,17 @@ local breed = function(self)
collisionbox = self.base_colbox, collisionbox = self.base_colbox,
}) })
-- jump when fully grown so not to fall into ground -- custom function when child grows up
self.object:setvelocity({ if self.on_grown then
x = 0, self.on_grown(self)
y = self.jump_height, else
z = 0 -- jump when fully grown so as not to fall into ground
}) self.object:setvelocity({
x = 0,
y = self.jump_height,
z = 0
})
end
end end
return return
@ -838,7 +843,7 @@ local breed = function(self)
end end
end end
-- find another same animal who is also horny and mate if close enough -- find another same animal who is also horny and mate if nearby
if self.horny == true if self.horny == true
and self.hornytimer <= 40 then and self.hornytimer <= 40 then
@ -892,14 +897,27 @@ local breed = function(self)
-- spawn baby -- spawn baby
minetest.after(5, function() minetest.after(5, function()
-- custom breed function
if self.on_breed then
-- when false skip going any further
if self.on_breed(self, ent) == false then
return
end
else
effect(pos, 15, "tnt_smoke.png", 1, 2, 2, 15, 5)
end
local mob = minetest.add_entity(pos, self.name) local mob = minetest.add_entity(pos, self.name)
local ent2 = mob:get_luaentity() local ent2 = mob:get_luaentity()
local textures = self.base_texture local textures = self.base_texture
-- using specific child texture (if found)
if self.child_texture then if self.child_texture then
textures = self.child_texture[1] textures = self.child_texture[1]
end end
-- and resize to half height
mob:set_properties({ mob:set_properties({
textures = textures, textures = textures,
visual_size = { visual_size = {
@ -915,6 +933,7 @@ local breed = function(self)
self.base_colbox[6] * .5, self.base_colbox[6] * .5,
}, },
}) })
-- that is tamed and owned by parents' owner
ent2.child = true ent2.child = true
ent2.tamed = true ent2.tamed = true
ent2.owner = self.owner ent2.owner = self.owner
@ -2059,6 +2078,15 @@ end
-- deal damage and effects when mob punched -- deal damage and effects when mob punched
local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) local mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
-- custom punch function
if self.do_punch then
-- when false skip going any further
if self.do_punch(self, hitter, tflp, tool_caps, dir) == false then
return
end
end
-- mob health check -- mob health check
if self.health <= 0 then if self.health <= 0 then
return return
@ -2157,12 +2185,12 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
local s = random(0, #weapon:get_definition().sounds) local s = random(0, #weapon:get_definition().sounds)
minetest.sound_play(weapon:get_definition().sounds[s], { minetest.sound_play(weapon:get_definition().sounds[s], {
object = hitter, object = self.object, --hitter,
max_hear_distance = 8 max_hear_distance = 8
}) })
else else
minetest.sound_play("default_punch", { minetest.sound_play("default_punch", {
object = hitter, object = self.object, --hitter,
max_hear_distance = 5 max_hear_distance = 5
}) })
end end
@ -2704,8 +2732,14 @@ minetest.register_entity(name, {
on_step = mob_step, on_step = mob_step,
do_punch = def.do_punch,
on_punch = mob_punch, on_punch = mob_punch,
on_breed = def.on_breed,
on_grown = def.on_grown,
on_activate = function(self, staticdata, dtime) on_activate = function(self, staticdata, dtime)
return mob_activate(self, staticdata, def, dtime) return mob_activate(self, staticdata, def, dtime)
end, end,

18
api.txt
View File

@ -1,5 +1,5 @@
MOB API (1st September 2017) MOB API (15th September 2017)
The mob api is a function that can be called on by other mods to add new animals or monsters into minetest. The mob api is a function that can be called on by other mods to add new animals or monsters into minetest.
@ -75,9 +75,7 @@ This functions registers a new mob as a Minetest entity.
'fall_damage' will mob be hurt when falling from height 'fall_damage' will mob be hurt when falling from height
'fall_speed' maximum falling velocity of mob (default is -10 and must be below -2) 'fall_speed' maximum falling velocity of mob (default is -10 and must be below -2)
'fear_height' when mob walks near a drop then anything over this value makes it stop and turn back (default is 0 to disable) 'fear_height' when mob walks near a drop then anything over this value makes it stop and turn back (default is 0 to disable)
'on_die' a function that is called when the mob is killed the parameters are (self, pos)
'floats' 1 to float in water, 0 to sink 'floats' 1 to float in water, 0 to sink
'on_rightclick' its same as in minetest.register_entity()
'pathfinding' set to 1 for mobs to use pathfinder feature to locate player, set to 2 so they can build/break also (only works with dogfight attack) 'pathfinding' set to 1 for mobs to use pathfinder feature to locate player, set to 2 so they can build/break also (only works with dogfight attack)
'attack_type' the attack type of a monster 'attack_type' the attack type of a monster
'dogfight' follows player in range and attacks when in reach 'dogfight' follows player in range and attacks when in reach
@ -89,13 +87,11 @@ This functions registers a new mob as a Minetest entity.
'dogshoot_count2_max' number of seconds before switching back to shoot mode. 'dogshoot_count2_max' number of seconds before switching back to shoot mode.
'custom_attack' when set this function is called instead of the normal mob melee attack, parameters are (self, to_attack) 'custom_attack' when set this function is called instead of the normal mob melee attack, parameters are (self, to_attack)
'double_melee_attack' if false then api will choose randomly between 'punch' and 'punch2' attack animations 'double_melee_attack' if false then api will choose randomly between 'punch' and 'punch2' attack animations
'on_blast' is called when an explosion happens near mob when using TNT functions, parameters are (object, damage) and returns (do_damage, do_knockback, drops)
'explosion_radius' radius of explosion attack (defaults to 1) 'explosion_radius' radius of explosion attack (defaults to 1)
'arrow' if the attack_type is "shoot" or "dogshoot" then the entity name of a pre-defined arrow is required, see below for arrow definition. 'arrow' if the attack_type is "shoot" or "dogshoot" then the entity name of a pre-defined arrow is required, see below for arrow definition.
'shoot_interval' the minimum shoot interval 'shoot_interval' the minimum shoot interval
'shoot_offset' +/- value to position arrow/fireball when fired 'shoot_offset' +/- value to position arrow/fireball when fired
'reach' how far a reach this mob has, default is 3 'reach' how far a reach this mob has, default is 3
'on_spawn' is a custom function that runs on mob spawn with 'self' as variable, return true at end of function to run onyl once.
'sounds' this is a table with sounds of the mob 'sounds' this is a table with sounds of the mob
'random' random sounds during gameplay 'random' random sounds during gameplay
'war_cry' sound when starting to attack player 'war_cry' sound when starting to attack player
@ -107,6 +103,18 @@ This functions registers a new mob as a Minetest entity.
'explode' sound when exploding 'explode' sound when exploding
'distance' maximum distance sounds are heard from (default is 10) 'distance' maximum distance sounds are heard from (default is 10)
Custom mob functions inside mob registry:
'on_die' a function that is called when the mob is killed the parameters are (self, pos)
'on_rightclick' its same as in minetest.register_entity()
'on_blast' is called when an explosion happens near mob when using TNT functions, parameters are (object, damage) and returns (do_damage, do_knockback, drops)
'on_spawn' is a custom function that runs on mob spawn with 'self' as variable, return true at end of function to run only once.
'on_breed' called when two similar mobs breed, paramaters are (parent1, parent2) objects, return false to stop child from being resized and owner/tamed flags and child textures being applied.
'on_grown' is called when a child mob has grown up, only paramater is (self).
'do_punch' called when mob is punched with paramaters (self, hitter, time_from_last_punch, tool_capabilities, direction), return false to stop punch damage and knockback from taking place.
Mobs can look for specific nodes as they walk and replace them to mimic eating. Mobs can look for specific nodes as they walk and replace them to mimic eating.
'replace_what' group if items to replace e.g. {"farming:wheat_8", "farming:carrot_8"} 'replace_what' group if items to replace e.g. {"farming:wheat_8", "farming:carrot_8"}