55 lines
1.3 KiB
Lua
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
|