forked from VoxeLibre/VoxeLibre
Tweak mob death particles
This commit is contained in:
parent
7c0c0d4d0c
commit
28aead0a60
|
@ -495,6 +495,31 @@ local damage_effect = function(self, damage)
|
|||
end
|
||||
end
|
||||
|
||||
mobs.death_effect = function(pos, collisionbox)
|
||||
local min, max
|
||||
if collisionbox then
|
||||
min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]}
|
||||
max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]}
|
||||
else
|
||||
min = { x = -0.5, y = 0, z = -0.5 }
|
||||
max = { x = 0.5, y = 0.5, z = 0.5 }
|
||||
end
|
||||
|
||||
minetest.add_particlespawner({
|
||||
amount = 40,
|
||||
time = 0.1,
|
||||
minpos = vector.add(pos, min),
|
||||
maxpos = vector.add(pos, max),
|
||||
minvel = {x = -0.2, y = -0.1, z = -0.2},
|
||||
maxvel = {x = 0.2, y = 0.1, z = 0.2},
|
||||
minexptime = 0.5,
|
||||
maxexptime = 1.5,
|
||||
minsize = 0.5,
|
||||
maxsize = 1.5,
|
||||
texture = "tnt_smoke.png",
|
||||
})
|
||||
end
|
||||
|
||||
local update_tag = function(self)
|
||||
self.object:set_properties({
|
||||
nametag = self.nametag,
|
||||
|
@ -629,6 +654,11 @@ local check_for_death = function(self, cause, cmi_cause)
|
|||
return true
|
||||
end
|
||||
|
||||
local collisionbox
|
||||
if self.collisionbox then
|
||||
collisionbox = table.copy(self.collisionbox)
|
||||
end
|
||||
|
||||
-- default death function and die animation (if defined)
|
||||
if self.animation
|
||||
and self.animation.die_start
|
||||
|
@ -656,6 +686,7 @@ local check_for_death = function(self, cause, cmi_cause)
|
|||
end
|
||||
|
||||
self.object:remove()
|
||||
mobs.death_effect(pos)
|
||||
end, self)
|
||||
else
|
||||
|
||||
|
@ -664,10 +695,9 @@ local check_for_death = function(self, cause, cmi_cause)
|
|||
end
|
||||
|
||||
self.object:remove()
|
||||
mobs.death_effect(pos, collisionbox)
|
||||
end
|
||||
|
||||
effect(pos, 20, "tnt_smoke.png")
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
|
|
|
@ -283,7 +283,9 @@ Along with the above mob registry settings we can also use custom functions to
|
|||
enhance mob functionality and have them do many interesting things:
|
||||
|
||||
'on_die' a function that is called when the mob is killed the
|
||||
parameters are (self, pos)
|
||||
parameters are (self, pos). When this function is used,
|
||||
the death particles will be skipped on death. You can get
|
||||
them back by calling mobs:death_effect manually
|
||||
'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
|
||||
|
@ -410,6 +412,10 @@ This function spawns a mob as a child. The parameter mob_type is the
|
|||
entitystring of the new mob.
|
||||
This function returns the mob on success and nil otherwise.
|
||||
|
||||
mobs:death_effect(pos, collisionbox)
|
||||
|
||||
Create death particles at pos with the given collisionbox.
|
||||
|
||||
|
||||
Making Arrows
|
||||
-------------
|
||||
|
|
|
@ -81,6 +81,7 @@ mobs:register_mob("mobs_mc:creeper", {
|
|||
local r = math.random(1, #mobs_mc.items.music_discs)
|
||||
minetest.add_item({x=pos.x, y=pos.y+1, z=pos.z}, mobs_mc.items.music_discs[r])
|
||||
end
|
||||
mobs.death_effect(pos, self.collisionbox)
|
||||
end,
|
||||
maxdrops = 2,
|
||||
drops = {
|
||||
|
|
|
@ -267,8 +267,8 @@ mobs:register_mob("mobs_mc:enderman", {
|
|||
self.state = ""
|
||||
else
|
||||
if self.attack then
|
||||
target = self.attack
|
||||
pos = target:get_pos()
|
||||
local target = self.attack
|
||||
local pos = target:get_pos()
|
||||
if pos ~= nil then
|
||||
if vector.distance(self.object:get_pos(), target:get_pos()) > 10 then
|
||||
self:teleport(target)
|
||||
|
@ -507,6 +507,7 @@ mobs:register_mob("mobs_mc:enderman", {
|
|||
if self._taken_node ~= nil and self._taken_node ~= "" then
|
||||
minetest.add_item(pos, self._taken_node)
|
||||
end
|
||||
mobs.death_effect(pos, self.collisionbox)
|
||||
end,
|
||||
do_punch = function(self, hitter, tflp, tool_caps, dir)
|
||||
-- damage from rain caused by itself so we don't want it to attack itself.
|
||||
|
|
|
@ -175,6 +175,8 @@ local horse = {
|
|||
mobs.detach(self.driver, {x = 1, y = 0, z = 1})
|
||||
end
|
||||
|
||||
mobs.death_effect(pos, self.collisionbox)
|
||||
|
||||
end,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
|
|
@ -111,6 +111,7 @@ mobs:register_mob("mobs_mc:llama", {
|
|||
if self.driver then
|
||||
mobs.detach(self.driver, {x = 1, y = 0, z = 1})
|
||||
end
|
||||
mobs.death_effect(pos, self.collisionbox)
|
||||
|
||||
end,
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ mobs:register_mob("mobs_mc:pig", {
|
|||
if self.driver then
|
||||
mobs.detach(self.driver, {x = 1, y = 0, z = 1})
|
||||
end
|
||||
|
||||
mobs.death_effect(pos, self.collisionbox)
|
||||
end,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
|
|
@ -128,6 +128,26 @@ mobs:register_mob("mobs_mc:snowman", {
|
|||
end,
|
||||
})
|
||||
|
||||
local summon_particles = function(obj)
|
||||
local lua = obj:get_luaentity()
|
||||
local min = {x=lua.collisionbox[1], y=lua.collisionbox[2], z=lua.collisionbox[3]}
|
||||
local max = {x=lua.collisionbox[4], y=lua.collisionbox[5], z=lua.collisionbox[6]}
|
||||
local pos = obj:get_pos()
|
||||
minetest.add_particlespawner({
|
||||
amount = 60,
|
||||
time = 0.1,
|
||||
minpos = vector.add(pos, min),
|
||||
maxpos = vector.add(pos, max),
|
||||
minvel = {x = -0.1, y = -0.1, z = -0.1},
|
||||
maxvel = {x = 0.1, y = 0.1, z = 0.1},
|
||||
minexptime = 1.0,
|
||||
maxexptime = 2.0,
|
||||
minsize = 2.0,
|
||||
maxsize = 3.0,
|
||||
texture = "tnt_smoke.png",
|
||||
})
|
||||
end
|
||||
|
||||
-- This is to be called when a pumpkin or jack'o lantern has been placed. Recommended: In the on_construct function
|
||||
-- of the node.
|
||||
-- This summons a snow golen when pos is next to a row of two snow blocks.
|
||||
|
@ -157,7 +177,10 @@ mobs_mc.tools.check_snow_golem_summon = function(pos)
|
|||
core.check_for_falling(pos)
|
||||
core.check_for_falling(b1)
|
||||
core.check_for_falling(b2)
|
||||
minetest.add_entity(place, "mobs_mc:snowman")
|
||||
local obj = minetest.add_entity(place, "mobs_mc:snowman")
|
||||
if obj then
|
||||
summon_particles(obj)
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1053,6 +1053,7 @@ mobs:register_mob("mobs_mc:villager", {
|
|||
return_fields(player)
|
||||
end
|
||||
end
|
||||
mobs.death_effect(pos, self.collisionbox)
|
||||
end,
|
||||
})
|
||||
|
||||
|
|
Reference in New Issue