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
2019-03-11 03:17:03 +01:00

87 lines
2.7 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)
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)
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 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