2024-12-16 15:13:17 -06:00

55 lines
1.3 KiB
Lua

PyuTest.lightning_strike = function(pos, radius, size)
local s = size or 40
core.add_particlespawner({
amount = 1,
time = 0.4,
-- make it hit the top of a block exactly with the bottom
minpos = {x = pos.x, y = pos.y + (s / 2) + 1/2, z = pos.z },
maxpos = {x = pos.x, y = pos.y + (s / 2) + 1/2, z = pos.z },
minvel = {x = 0, y = 0, z = 0},
maxvel = {x = 0, y = 0, z = 0},
minacc = {x = 0, y = 0, z = 0},
maxacc = {x = 0, y = 0, z = 0},
minexptime = 0.2,
maxexptime = 0.2,
minsize = s * 10,
maxsize = s * 10,
collisiondetection = true,
vertical = true,
texture = "pyutest-lightning.png",
glow = core.LIGHT_MAX,
})
core.sound_play("pyutest-thunder", {
gain = 2,
pos = pos
})
local r = radius or 3
for o in core.objects_inside_radius(pos, r) do
PyuTest.deal_damage(o, 12, PyuTest.DAMAGE_TYPES.lightning())
end
for x = -r, r do
for z = -r, r do
local y_pos
if core.get_node(pos).name ~= "air" then
y_pos = pos.y + 1
elseif core.get_node(pos - vector.new(0, 1, 0)).name ~= "air" then
y_pos = pos.y
end
if y_pos then
local npos = vector.new(pos.x + x, y_pos, pos.z +z)
if math.random(1, 6) == 1 then
core.set_node(npos, {name = "pyutest_blocks:fire"})
end
end
end
end
end