Added custom_attack function (thanks to NPXcoot)

This commit is contained in:
TenPlus1 2016-04-28 20:18:00 +01:00
parent b512f882e9
commit b51bafcf0e
3 changed files with 33 additions and 2856 deletions

52
api.lua
View File

@ -1,5 +1,5 @@
-- Mobs Api (25th April 2016) -- Mobs Api (28th April 2016)
mobs = {} mobs = {}
mobs.mod = "redo" mobs.mod = "redo"
@ -1529,33 +1529,44 @@ local do_states = function(self, dtime)
set_velocity(self, 0) set_velocity(self, 0)
set_animation(self, "punch") set_animation(self, "punch")
if self.timer > 1 then if not self.custom_attack then
self.timer = 0 if self.timer > 1 then
local p2 = p self.timer = 0
local s2 = s
p2.y = p2.y + 1.5 local p2 = p
s2.y = s2.y + 1.5 local s2 = s
--if minetest.line_of_sight(p2, s2) == true then p2.y = p2.y + 1.5
if line_of_sight_water(self, p2, s2) == true then s2.y = s2.y + 1.5
-- play attack sound --if minetest.line_of_sight(p2, s2) == true then
if self.sounds.attack then if line_of_sight_water(self, p2, s2) == true then
minetest.sound_play(self.sounds.attack, { -- play attack sound
object = self.object, if self.sounds.attack then
max_hear_distance = self.sounds.distance
}) minetest.sound_play(self.sounds.attack, {
object = self.object,
max_hear_distance = self.sounds.distance
})
end
-- punch player
self.attack:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = self.damage}
}, nil)
end end
end
else -- call custom attack every second
if self.custom_attack
and self.timer > 1 then
-- punch player self.timer = 0
self.attack:punch(self.object, 1.0, {
full_punch_interval = 1.0, self.custom_attack(self, p)
damage_groups = {fleshy = self.damage}
}, nil)
end end
end end
end end
@ -2165,6 +2176,7 @@ minetest.register_entity(name, {
pathfinding = def.pathfinding, pathfinding = def.pathfinding,
immune_to = def.immune_to or {}, immune_to = def.immune_to or {},
explosion_radius = def.explosion_radius, explosion_radius = def.explosion_radius,
custom_attack = def.custom_attack,
on_step = mob_step, on_step = mob_step,

View File

@ -79,6 +79,7 @@ This functions registers a new mob as a Minetest entity.
'shoot' shoots defined arrows when player is within range 'shoot' shoots defined arrows when player is within range
'explode' follows player in range and will flash and explode when in reach 'explode' follows player in range and will flash and explode when in reach
'dogshoot' shoots arrows when in range and one on one attack when in reach 'dogshoot' shoots arrows when in range and one on one attack when in reach
'custom_attack' is a function that is called when mob is in range to attack player, parameters are (self, to_attack)
'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 the arrow is required 'arrow' if the attack_type is "shoot" or "dogshoot" then the entity name of the arrow is required
'shoot_interval' the minimum shoot interval 'shoot_interval' the minimum shoot interval

File diff suppressed because it is too large Load Diff