Merge pull request 'Some mob-fix fixes' (#2798) from mobs_falling into master
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/2798arrow_node_collision
commit
b4374fe961
|
@ -2058,7 +2058,7 @@ local monster_attack = function(self)
|
||||||
player = obj.object
|
player = obj.object
|
||||||
name = obj.name or ""
|
name = obj.name or ""
|
||||||
end
|
end
|
||||||
if obj.type == self.type and obj.passive == false and obj.state == "attack" and obj.attack then
|
if obj and obj.type == self.type and obj.passive == false and obj.state == "attack" and obj.attack then
|
||||||
table.insert(blacklist_attack, obj.attack)
|
table.insert(blacklist_attack, obj.attack)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -3278,11 +3278,10 @@ local falling = function(self, pos)
|
||||||
-- fall damage onto solid ground
|
-- fall damage onto solid ground
|
||||||
if self.fall_damage == 1
|
if self.fall_damage == 1
|
||||||
and self.object:get_velocity().y == 0 then
|
and self.object:get_velocity().y == 0 then
|
||||||
|
local n = node_ok(vector.offset(pos,0,-1,0)).name
|
||||||
local d = (self.old_y or 0) - self.object:get_pos().y
|
local d = (self.old_y or 0) - self.object:get_pos().y
|
||||||
|
|
||||||
if d > 5 then
|
if d > 5 and n ~= "air" and n ~= "ignore" then
|
||||||
|
|
||||||
local add = minetest.get_item_group(self.standing_on, "fall_damage_add_percent")
|
local add = minetest.get_item_group(self.standing_on, "fall_damage_add_percent")
|
||||||
local damage = d - 5
|
local damage = d - 5
|
||||||
if add ~= 0 then
|
if add ~= 0 then
|
||||||
|
@ -3866,17 +3865,25 @@ local mob_step = function(self, dtime)
|
||||||
self.object:set_rotation(rot)
|
self.object:set_rotation(rot)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if not player_in_active_range(self) then
|
||||||
|
set_animation(self, "stand", true)
|
||||||
|
local node_under = node_ok(vector.offset(pos,0,-1,0)).name
|
||||||
|
local acc = self.object:get_acceleration()
|
||||||
|
if acc.y > 0 or node_under ~= "air" then
|
||||||
|
self.object:set_acceleration(vector.new(0,0,0))
|
||||||
|
self.object:set_velocity(vector.new(0,0,0))
|
||||||
|
end
|
||||||
|
if acc.y == 0 and node_under == "air" then
|
||||||
|
falling(self, pos)
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
if v then
|
if v then
|
||||||
--diffuse object velocity
|
--diffuse object velocity
|
||||||
self.object:set_velocity({x = v.x*d, y = v.y, z = v.z*d})
|
self.object:set_velocity({x = v.x*d, y = v.y, z = v.z*d})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
if not player_in_active_range(self) then
|
|
||||||
set_animation(self, "stand", true)
|
|
||||||
self.object:set_velocity(vector.new(0,0,0))
|
|
||||||
return
|
|
||||||
end
|
|
||||||
check_item_pickup(self)
|
check_item_pickup(self)
|
||||||
check_aggro(self,dtime)
|
check_aggro(self,dtime)
|
||||||
particlespawner_check(self,dtime)
|
particlespawner_check(self,dtime)
|
||||||
|
|
Loading…
Reference in New Issue