Introduce snowball_vulnerable armor group
parent
be04de084b
commit
c234b273ad
|
@ -2876,7 +2876,14 @@ local mob_activate = function(self, staticdata, def, dtime)
|
|||
self.path.stuck_timer = 0 -- if stuck for too long search for path
|
||||
|
||||
-- mob defaults
|
||||
self.object:set_armor_groups({immortal = 1, fleshy = self.armor})
|
||||
local armor
|
||||
if type(self.armor) == "table" then
|
||||
armor = table.copy(self.armor)
|
||||
armor.immortal = 1
|
||||
else
|
||||
armor = {immortal=1, fleshy = self.armor}
|
||||
end
|
||||
self.object:set_armor_groups(armor)
|
||||
self.old_y = self.object:get_pos().y
|
||||
self.old_health = self.health
|
||||
self.sounds.distance = self.sounds.distance or 10
|
||||
|
|
|
@ -35,8 +35,12 @@ functions needed for the mob to work properly which contains the following:
|
|||
'breathes_in_water' If true, mob loses breath when not in water. Otherwise,
|
||||
mob loses breath when inside a node with `drowning` attribute
|
||||
set (default: false).
|
||||
'armor' holds strength of mob, 100 is normal, lower is more powerful
|
||||
and needs more hits and better weapons to kill.
|
||||
'armor' entity armor groups (see lua_api.txt). If table, a list of
|
||||
armor groups like for entities. If number, set value of
|
||||
'fleshy' armor group only.
|
||||
Note: The 'immortal=1' armor group will automatically be added
|
||||
since this mod handles health and damage manually.
|
||||
Default: 100 (mob will take full dmg from 'fleshy' hits)
|
||||
'passive' when true allows animals to defend themselves when hit,
|
||||
otherwise they amble onwards.
|
||||
'walk_velocity' is the speed that your mob can walk around.
|
||||
|
|
|
@ -21,6 +21,7 @@ mobs:register_mob("mobs_mc:blaze", {
|
|||
textures = {
|
||||
{"mobs_mc_blaze.png"},
|
||||
},
|
||||
armor = { fleshy = 100, snowball_vulnerable = 100 },
|
||||
visual_size = {x=3, y=3},
|
||||
sounds = {
|
||||
random = "mobs_mc_blaze_breath",
|
||||
|
|
|
@ -145,7 +145,7 @@ local flying_bobber_ENTITY={
|
|||
objtype="fishing",
|
||||
}
|
||||
|
||||
local check_object_hit = function(self, pos, mob_damage)
|
||||
local check_object_hit = function(self, pos, dmg)
|
||||
for _,object in pairs(minetest.get_objects_inside_radius(pos, 1.5)) do
|
||||
|
||||
local entity = object:get_luaentity()
|
||||
|
@ -158,11 +158,6 @@ local check_object_hit = function(self, pos, mob_damage)
|
|||
self.object:remove()
|
||||
return true
|
||||
elseif entity._cmi_is_mob == true and (self._thrower ~= object) then
|
||||
local dmg = {}
|
||||
if mob_damage then
|
||||
dmg = mob_damage(entity.name)
|
||||
end
|
||||
|
||||
-- FIXME: Knockback is broken
|
||||
object:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
|
@ -193,15 +188,7 @@ local snowball_on_step = function(self, dtime)
|
|||
end
|
||||
end
|
||||
|
||||
local mob_damage = function(mobname)
|
||||
if mobname == "mobs_mc:blaze" then
|
||||
return {fleshy = 3}
|
||||
else
|
||||
return {}
|
||||
end
|
||||
end
|
||||
|
||||
if check_object_hit(self, pos, mob_damage) then
|
||||
if check_object_hit(self, pos, {snowball_vulnerable = 3}) then
|
||||
minetest.sound_play("mcl_throwing_snowball_impact_soft", { pos = self.object:get_pos(), max_hear_distance=16, gain=0.7 })
|
||||
return
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue