You can avoid triggering rocket launch achievments with the following code. This code does not include "lazy-bastard" and "raining-bullets". If you want to prevent the last two, you need to manually track their states using on_player_crafted_item and on_built listeners.
-- data-updates.lua
local co_achievments = data.raw["complete-objective-achievement"]
for i, achievment in pairs(co_achievments) do
if achievment.objective_condition == "rocket-launched" then
achievment.type = "achievement"
data.raw["achievement"][achievment.name] = util.table.deepcopy(achievment)
co_achievments[achievment.name] = nil
log("Set " .. achievment.name .. " to only trigger manually.")
end
end
-- control.lua
local function trigger_launch_achievments(force)
local f_players = {}
for i, player in pairs(game.players) do
if player.force == force then
table.insert(f_players, player)
player.unlock_achievement("smoke-me-a-kipper-i-will-be-back-for-breakfast")
end
end
if game.tick <= 3240000 then
for i, player in ipairs(f_players) do
player.unlock_achievement("no-time-for-chitchat")
end
end
if game.tick <= 1728000 then
for i, player in ipairs(f_players) do
player.unlock_achievement("there-is-no-spoon")
end
end
end
-- EVENT: ROCKET LAUNCHED
script.on_event(defines.events.on_rocket_launched, function(event)
local rocket = event.rocket
if rocket.name ~= "ballistic-missile" then
trigger_launch_achievments(rocket.force)
end
...