forked from mtcontrib/mobs_redo
Added custom_attack function (thanks to NPXcoot)
This commit is contained in:
parent
b512f882e9
commit
b51bafcf0e
52
api.lua
52
api.lua
@ -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,
|
||||||
|
|
||||||
|
1
api.txt
1
api.txt
@ -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
|
||||||
|
2836
api_old.lua
2836
api_old.lua
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user