Guest User

Fix for MoreAchievements

a guest
Apr 28th, 2022
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.79 KB | None | 0 0
  1. script.on_init(function(e)
  2.     global.trees_destroyed = 0
  3. end
  4. )
  5.  
  6. function treeDestroyed(e)
  7.     if e.entity.type == "tree" then
  8.         global.trees_destroyed = global.trees_destroyed + 1 --increment the number of trees destroyed
  9.         if global.trees_destroyed >= 100000 then
  10.             for index, player in pairs(game.players) do --give the achievement to every player
  11.                 player.unlock_achievement("deforestation")
  12.             end
  13.         end
  14.     end
  15. end
  16. script.on_event(defines.events.on_player_mined_entity, treeDestroyed)
  17. script.on_event(defines.events.on_robot_pre_mined, treeDestroyed)
  18.  
  19. function onEntityDied(e)
  20.     local entity = e.entity
  21.     local cause = e.cause
  22.     local causeForce = e.force
  23.  
  24.     --Friendly fire - destroy your own building
  25.     if cause and causeForce and cause.type == "character" and entity.force == causeForce then
  26.         cause.player.unlock_achievement("friendly-fire")
  27.         --tango down - have a turret kill a biter
  28.     elseif cause and causeForce and cause.name == "gun-turret" and entity.type == "unit" then
  29.         for index, player in pairs(causeForce.players) do
  30.             player.unlock_achievement("tango-down")
  31.         end
  32.         -- Homewrecker
  33.     elseif cause and causeForce and cause.type == "character" and entity.type == "unit-spawner" then
  34.         for index, player in pairs(causeForce.players) do
  35.             player.unlock_achievement("homewrecker")
  36.         end
  37.         -- Turret creeper
  38.     elseif cause and causeForce and cause.type:find("turret") and entity.type == "unit-spawner" then
  39.         for index, player in pairs(cause.force.players) do
  40.             player.unlock_achievement("turret-creeper")
  41.         end
  42.         -- Shot down
  43.     elseif cause and causeForce and cause.type == "unit" and (entity.type == "construction-robot" or entity.type == "logistic-robot") then
  44.         for index, player in pairs(entity.force.players) do
  45.             player.unlock_achievement("shot-down")
  46.         end
  47.         -- Deforestation
  48.     elseif entity.type == "tree" then
  49.         treeDestroyed(e)
  50.  
  51.         -- If you build it they will destroy it
  52.     elseif cause and causeForce and cause.type == "unit" and entity.has_flag("player-creation") then
  53.         for index, player in pairs(entity.force.players) do
  54.             for index, player in pairs(entity.force.players) do
  55.                 player.unlock_achievement("if-you-build-it-they-will-destroy-it")
  56.             end
  57.         end
  58.     elseif not cause and entity.type:find("turret") and entity.has_flag("player-creation") then --god damn it Wube, why you gotta make turrets weird
  59.         for index, player in pairs(entity.force.players) do
  60.             for index, player in pairs(entity.force.players) do
  61.                 player.unlock_achievement("if-you-build-it-they-will-destroy-it")
  62.             end
  63.         end
  64.     end
  65. end
  66. script.on_event(defines.events.on_entity_died, onEntityDied)
  67.  
  68. -- Determines if the area provided is a zero size area.
  69. function isZeroSizeArea(area)
  70.     return (area.left_top.x == area.right_bottom.x) and (area.left_top.y == area.right_bottom.y)
  71. end
  72.  
  73. function onBlueprint(e)
  74.     local player = game.players[e.player_index]
  75.     if not player then return end
  76.     player.unlock_achievement("blueprinted")
  77.     if not isZeroSizeArea(e.area) and player.surface.count_entities_filtered{type = "splitter", area = e.area} >= 10 then
  78.         player.unlock_achievement("well-balanced")
  79.     end
  80. end
  81. script.on_event(defines.events.on_player_setup_blueprint, onBlueprint)
  82.  
  83. function onItemPickup(e)
  84.     local player = game.players[e.player_index]
  85.     if not player then return end
  86.     player.unlock_achievement("looted")
  87. end
  88. script.on_event(defines.events.on_picked_up_item, onItemPickup)
  89.  
  90. -- This must be done to give the achievement to the right force that owns the drill
  91. function onResourceDepleted(e)
  92.     local entity = e.entity.surface.find_entities_filtered{type="mining-drill", position = e.entity.position}
  93.     if not entity or not entity[1] then return end
  94.     for index, player in pairs(entity[1].force.players) do
  95.         player.unlock_achievement("depleted")
  96.     end
  97. end
  98. script.on_event(defines.events.on_resource_depleted, onResourceDepleted)
  99.  
  100. function onSettingsPasted(e)
  101.     local player = game.players[e.player_index]
  102.     if player then
  103.         player.unlock_achievement("copy-and-pasted")
  104.     end
  105. end
  106. script.on_event(defines.events.on_entity_settings_pasted, onSettingsPasted)
  107.  
  108. function onConsoleChat(e)
  109.     if not e.player_index then return end
  110.     local player = game.players[e.player_index]
  111.     if player then
  112.         player.unlock_achievement("hello-world")
  113.     end
  114. end
  115. script.on_event(defines.events.on_console_chat, onConsoleChat)
  116.  
  117. -- game.print(e.item_stack.count) -- work \ water have 0 count
  118. function onPlayerCrafted(e)
  119.     ------------------------------------------ Custom code | ADD check for fluid
  120.     if e.item_stack.count == 0 then return end
  121.     ------------------------------------------
  122.     if not e.item_stack or not e.item_stack.valid then return end
  123.  
  124.     local item = e.item_stack.name
  125.     local player = game.players[e.player_index]
  126.  
  127.     if item == "submachine-gun" then
  128.         player.unlock_achievement("fully-automatic")
  129.     elseif item == "rocket-launcher" then
  130.         player.unlock_achievement("maggots")
  131.     elseif item == "flamethrower" then
  132.         player.unlock_achievement("we-didnt-start-the-fire")
  133.     end
  134. end
  135. script.on_event(defines.events.on_player_crafted_item, onPlayerCrafted)
  136.  
  137. function onPlaced(e)
  138.     if e.created_entity.type == "entity-ghost" and game.players[e.player_index] then
  139.         game.players[e.player_index].unlock_achievement("ghosted")
  140.     end
  141. end
  142. script.on_event(defines.events.on_built_entity, onPlaced)
  143. --script.on_event(defines.events.on_robot_built_entity, onPlaced) We don't get a player index here, so we are unable to attribute the achievement to a player
  144.  
  145. function onResearch(e)
  146.     local research = e.research
  147.     local force = research.force
  148.     if research.name:find("-50") then --A level 50 research
  149.         for index, player in pairs(force.players) do
  150.             player.unlock_achievement("dedication")
  151.         end
  152.     end
  153. end
  154. script.on_event(defines.events.on_research_finished, onResearch)
  155.  
  156. function onRocketLaunched(event)
  157.     local force = event.rocket.force
  158.     -- if they launch a rocket containing no satellite and no fish
  159.     if event.rocket.get_item_count("satellite") == 0 and event.rocket.get_item_count("raw-fish") == 0 and event.rocket.get_item_count("car") == 0 then
  160.         for index, player in pairs(force.players) do
  161.             player.unlock_achievement("you-forgot-something")
  162.         end
  163.     elseif event.rocket.get_item_count("satellite") == 0 and event.rocket.get_item_count("raw-fish") == 0 and event.rocket.get_item_count("car") >= 1 then
  164.         for index, player in pairs(force.players) do
  165.             player.unlock_achievement("dont-panic")
  166.         end
  167.     end
  168. end
  169. script.on_event(defines.events.on_rocket_launched, onRocketLaunched)
  170.  
  171. function onTick(e)
  172.     if e.tick % 8000 == 0 then
  173.         if game.surfaces[1].count_entities_filtered{name = "small-lamp"} >= 200 then
  174.             for index, player in pairs(game.players) do
  175.                 player.unlock_achievement("let-there-be-light")
  176.             end
  177.         end
  178.         if game.surfaces[1].count_entities_filtered{name = "solar-panel"} >= 10000 then
  179.             for index, player in pairs(game.players) do
  180.                 player.unlock_achievement("praise-the-sun")
  181.             end
  182.         end
  183.     end
  184.     if e.tick % 16000 == 0 then
  185.         if game.surfaces[1].count_entities_filtered{type = "transport-belt"} >= 10000 then
  186.             for index, player in pairs(game.players) do
  187.                 player.unlock_achievement("convey-your-ideas")
  188.             end
  189.         end
  190.     end
  191. end
  192. script.on_event(defines.events.on_tick, onTick)
  193.  
  194. -- I'm melting
  195. script.on_event(defines.events.on_player_died, function(e)
  196.     local causeEntity = e.cause
  197.     -- Check for validity, since worm turrets are annoying
  198.     if not causeEntity then return end
  199.     local player = game.players[e.player_index]
  200.  
  201.     if causeEntity.name == "small-worm-turret" or causeEntity.name == "medium-worm-turret" or causeEntity.name == "big-worm-turret" then
  202.         player.unlock_achievement("im-melting")
  203.     end
  204. end)
  205.  
  206. function cliffDestroyed(e)
  207.     if e.robot then
  208.         for i, player in pairs(e.robot.force.players) do
  209.             player.unlock_achievement("terraformer")
  210.         end
  211.     else
  212.         local player = game.players[e.player_index]
  213.         local capsuleUsed = e.item
  214.         if capsuleUsed.name == "cliff-explosives" then
  215.             player.unlock_achievement("terraformer")
  216.         end
  217.     end
  218. end
  219. script.on_event({defines.events.on_player_used_capsule, defines.events.on_robot_exploded_cliff}, cliffDestroyed)
  220.  
Advertisement
Add Comment
Please, Sign In to add comment