minetest-quake/_weapons/weapons_utils.lua

30 lines
1.1 KiB
Lua

quake.explode = function(self)
local explosion_range = self.initial_properties.explosion_range
local explosion_damage = self.initial_properties.explosion_damage
local origin = self.object:get_pos()
local objs = minetest.env:get_objects_inside_radius(origin, explosion_range)
-- se ho colpito qualcosa
if objs then
for _, obj in ipairs(objs) do
if (obj:get_entity_name() ~= self.initial_properties.name and obj:is_player()) then
local p_pos = obj:get_pos()
local lenx = math.abs(p_pos.x - origin.x)
local leny = math.abs(p_pos.y - origin.y)
local lenz = math.abs(p_pos.z - origin.z)
local hypot = math.sqrt((lenx * lenx) + (lenz * lenz))
local dist = math.sqrt((hypot * hypot) + (leny * leny))
local damage = explosion_damage - (explosion_damage * dist / explosion_range)
-- se colpisco me stesso, prendo 1/5 di danno
if (obj:get_player_name() ~= self.p_name) then
quake.shoot(self.p_name, obj, damage, false)
else
quake.shoot(self.p_name, obj, (damage/5), false)
end
end
end
end
end