1
0
mirror of https://github.com/sys4-fr/server-nalc.git synced 2024-12-25 02:00:37 +01:00

fixed creeper break unbreakable nodes

fixed creeper break nodes in protected areas when is limit to area
fixed creeper explosion kill without armor but not with
This commit is contained in:
crabman77 2015-06-23 22:29:54 +02:00
parent 3ec5522d06
commit 1b9689bba7

View File

@ -669,7 +669,7 @@ function mobs:register_mob(name, def)
end end
if self.timer > 3 then if self.timer > 3 then
local pos = vector.round(self.object:getpos()) local pos = vector.round(self.object:getpos())
entity_physics(pos, 3) -- hurt player/mobs caught in blast area entity_physics(pos, 3, self) -- hurt player/mobs caught in blast area
if minetest.find_node_near(pos, 1, {"group:water"}) if minetest.find_node_near(pos, 1, {"group:water"})
or minetest.is_protected(pos, "") then or minetest.is_protected(pos, "") then
self.object:remove() self.object:remove()
@ -1106,8 +1106,8 @@ function mobs:explosion(pos, radius, fire, smoke, sound)
local n = minetest.get_node(p).name local n = minetest.get_node(p).name
-- do NOT destroy protection nodes but DO destroy nodes in protected area -- do NOT destroy protection nodes but DO destroy nodes in protected area
if not n:find("protector:") if not n:find("protector:")
--and not minetest.is_protected(p, "") and not minetest.is_protected(p, "")
and minetest.get_item_group(n.name, "unbreakable") ~= 1 then and minetest.get_item_group(n, "unbreakable") ~= 1 then
-- if chest then drop items inside -- if chest then drop items inside
if n == "default:chest" then if n == "default:chest" then
local meta = minetest.get_meta(p) local meta = minetest.get_meta(p)
@ -1180,19 +1180,20 @@ function calc_velocity(pos1, pos2, old_vel, power)
end end
-- modified from TNT mod -- modified from TNT mod
function entity_physics(pos, radius) function entity_physics(pos, radius, self)
radius = radius * 2 radius = radius * 2
local objs = minetest.get_objects_inside_radius(pos, radius) local objs = minetest.get_objects_inside_radius(pos, radius)
local obj_pos, obj_vel, dist local obj_pos, obj_vel, dist
for _, obj in pairs(objs) do for _, obj in pairs(objs) do
obj_pos = obj:getpos() obj_pos = obj:getpos()
obj_vel = obj:getvelocity() obj_vel = obj:getvelocity()
dist = math.max(1, vector.distance(pos, obj_pos)) --dist = math.max(1, vector.distance(pos, obj_pos))
if obj_vel ~= nil then if obj_vel ~= nil then
obj:setvelocity(calc_velocity(pos, obj_pos, obj_vel, radius * 10)) obj:setvelocity(calc_velocity(pos, obj_pos, obj_vel, radius * 10))
end end
local damage = (4 / dist) * radius --local damage = (4 / dist) * radius
obj:set_hp(obj:get_hp() - damage) obj:punch(self.object, 1.0,{full_punch_interval=1.0, damage_groups = {fleshy=self.damage} })
--obj:set_hp(obj:get_hp() - damage)
end end
end end