mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-29 22:11:10 +01:00
Falling anvils now hurt players
Also fix depends of mcl_wip
This commit is contained in:
parent
4300795837
commit
14e61a5958
3 changed files with 66 additions and 2 deletions
62
mods/ITEMS/mcl_anvils/falling_anvil.lua
Normal file
62
mods/ITEMS/mcl_anvils/falling_anvil.lua
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
-- Hurt players hit by an anvil
|
||||||
|
|
||||||
|
local falling_node = minetest.registered_entities["__builtin:falling_node"]
|
||||||
|
local on_step_old = falling_node.on_step
|
||||||
|
local on_step_add = function(self, dtime)
|
||||||
|
if minetest.get_item_group(self.node.name, "anvil") == 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local kill
|
||||||
|
local pos = self.object:getpos()
|
||||||
|
if not self._startpos then
|
||||||
|
self._startpos = pos
|
||||||
|
end
|
||||||
|
local objs = minetest.get_objects_inside_radius(pos, 1)
|
||||||
|
for _,v in ipairs(objs) do
|
||||||
|
local hp = v:get_hp()
|
||||||
|
if v:is_player() and hp ~= 0 then
|
||||||
|
if not self.hit_players then
|
||||||
|
self.hit_players = {}
|
||||||
|
end
|
||||||
|
local name = v:get_player_name()
|
||||||
|
local hit = false
|
||||||
|
for _,v in ipairs(self.hit_players) do
|
||||||
|
if name == v then
|
||||||
|
hit = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not hit then
|
||||||
|
table.insert(self.hit_players, name)
|
||||||
|
local way = self._startpos.y - pos.y
|
||||||
|
local damage = (way - 1) * 2
|
||||||
|
damage = math.min(40, math.max(0, damage))
|
||||||
|
if damage >= 1 then
|
||||||
|
hp = hp - damage
|
||||||
|
if hp < 0 then
|
||||||
|
hp = 0
|
||||||
|
end
|
||||||
|
v:set_hp(hp)
|
||||||
|
if hp == 0 then
|
||||||
|
kill = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if kill then
|
||||||
|
local pos = self.object:getpos()
|
||||||
|
local pos = {x = pos.x, y = pos.y + 0.3, z = pos.z}
|
||||||
|
if minetest.registered_nodes[self.node.name] then
|
||||||
|
minetest.add_node(pos, self.node)
|
||||||
|
end
|
||||||
|
self.object:remove()
|
||||||
|
core.check_for_falling(pos)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local on_step_table = {on_step_old, on_step_add}
|
||||||
|
local on_step_new = table.copy(on_step_table)
|
||||||
|
falling_node.on_step = function(self, dtime)
|
||||||
|
for _,v in ipairs(on_step_new) do
|
||||||
|
v(self, dtime)
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,5 +1,5 @@
|
||||||
local anvildef = {
|
local anvildef = {
|
||||||
groups = {cracky=1, falling_node=1, deco_block=1},
|
groups = {cracky=1, falling_node=1, deco_block=1, anvil=1},
|
||||||
tiles = {"mcl_anvils_anvil_top_damaged_0.png^[transformR90", "mcl_anvils_anvil_base.png"},
|
tiles = {"mcl_anvils_anvil_top_damaged_0.png^[transformR90", "mcl_anvils_anvil_base.png"},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
|
@ -42,3 +42,5 @@ minetest.register_craft({
|
||||||
{ "mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot" },
|
{ "mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot" },
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
dofile(minetest.get_modpath(minetest.get_current_modname()).."/falling_anvil.lua")
|
||||||
|
|
|
@ -10,4 +10,4 @@ mcl_minecarts
|
||||||
mcl_sponges
|
mcl_sponges
|
||||||
gemalde
|
gemalde
|
||||||
signs
|
signs
|
||||||
mesecons_observers
|
mcl_observers
|
||||||
|
|
Loading…
Reference in a new issue