1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-10 00:43:27 +02:00
ComfyFactorio/functions/tick_tack_trap.lua
2020-02-14 21:10:10 +01:00

91 lines
2.8 KiB
Lua

-- timer traps -- by mewmew
local tick_tacks = {"*tick*", "*tick*", "*tack*", "*tak*", "*tik*", "*tok*"}
local kaboom_weights = {
{name = "grenade", chance = 7},
{name = "cluster-grenade", chance = 1},
{name = "destroyer-capsule", chance = 1},
{name = "defender-capsule", chance = 4},
{name = "distractor-capsule", chance = 3},
{name = "poison-capsule", chance = 2},
{name = "explosive-uranium-cannon-projectile", chance = 3},
{name = "explosive-cannon-projectile", chance = 5},
}
local kabooms = {}
for _, t in pairs (kaboom_weights) do
for x = 1, t.chance, 1 do
table.insert(kabooms, t.name)
end
end
local function create_flying_text(surface, position, text)
if not surface.valid then return end
surface.create_entity({
name = "flying-text",
position = position,
text = text,
color = {r=0.75, g=0.75, b=0.75}
})
if text == "..." then return end
surface.play_sound({path="utility/armor_insert", position=position, volume_modifier=0.75})
end
local function create_kaboom(surface, position, name)
if not surface.valid then return end
local target = position
local speed = 0.5
if name == "defender-capsule" or name == "destroyer-capsule" or name == "distractor-capsule" then
surface.create_entity({
name = "flying-text",
position = position,
text = "(((Sentries Engaging Target)))",
color = {r=0.8, g=0.0, b=0.0}
})
local nearest_player_unit = surface.find_nearest_enemy({position = position, max_distance=128, force="enemy"})
if nearest_player_unit then target = nearest_player_unit.position end
speed = 0.001
end
surface.create_entity({
name = name,
position = position,
force = "enemy",
target = target,
speed = speed
})
end
local function tick_tack_trap(surface, position)
if not surface then return end
if not surface.valid then return end
if not position then return end
if not position.x then return end
if not position.y then return end
local tick_tack_count = math.random(5, 9)
for t = 60, tick_tack_count * 60, 60 do
if not global.on_tick_schedule[game.tick + t] then global.on_tick_schedule[game.tick + t] = {} end
if t < tick_tack_count * 60 then
global.on_tick_schedule[game.tick + t][#global.on_tick_schedule[game.tick + t] + 1] = {
func = create_flying_text,
args = {surface, {x = position.x, y = position.y}, tick_tacks[math.random(1, #tick_tacks)]}
}
else
if math.random(1, 10) == 1 then
global.on_tick_schedule[game.tick + t][#global.on_tick_schedule[game.tick + t] + 1] = {
func = create_flying_text,
args = {surface, {x = position.x, y = position.y}, "..."}
}
else
global.on_tick_schedule[game.tick + t][#global.on_tick_schedule[game.tick + t] + 1] = {
func = create_kaboom,
args = {surface, {x = position.x, y = position.y}, kabooms[math.random(1, #kabooms)]}
}
end
end
end
end
return tick_tack_trap