Introduce snowball_vulnerable armor group

This commit is contained in:
Wuzzy 2020-01-30 16:12:25 +01:00
parent be04de084b
commit c234b273ad
4 changed files with 17 additions and 18 deletions

View file

@ -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

View file

@ -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.

View file

@ -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",

View file

@ -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