30 lines
1.1 KiB
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
|