From cd56cbe281fa910030131c951ce0fc30c3b64e21 Mon Sep 17 00:00:00 2001 From: Cooldude2606 Date: Sat, 30 May 2020 16:23:42 +0100 Subject: [PATCH] Added trees and reseach to stats --- config/statistics.lua | 8 +++-- modules/data/statistics.lua | 69 ++++++++++++++++++++++--------------- 2 files changed, 47 insertions(+), 30 deletions(-) diff --git a/config/statistics.lua b/config/statistics.lua index b7058b47..36c60da3 100644 --- a/config/statistics.lua +++ b/config/statistics.lua @@ -7,9 +7,12 @@ return { AfkTime = true, --- @setting AfkTime If afk time is tracked for a player, play time measured in minutes, afk is once a player does nothing for 5 minutes DistanceTraveled = true, --- @setting DistanceTraveled If distance traveled is checked, only counts if not afk MachinesRemoved = true, --- @setting MachinesRemoved If removed machines are tracked, includes marked for decon and player mined entity - OreMined = true, --- @setting OreMined If ore mined is tracked for a player, includes player mined entity but only ore, + TreesDestroyed = true, --- @setting OreMined If ore mined is tracked for a player, includes marked for decon and player mined entity but only trees + OreMined = true, --- @setting OreMined If ore mined is tracked for a player, includes player mined entity but only ore DamageDealt = true, --- @setting DamageDealt If damage dealt is tracked for a player, includes any damage to entities not on the same force or neutral Kills = true, --- @setting Kills If kills are tracked for a player, includes all kills not on same force or neutral + RocketsLaunched = true, --- @setting RocketsLaunched If the number of rockets launched should be tracked, done for all players on the force + ResearchCompleted = true, --- @setting ResearchCompleted If the number of researches completed should be tracked, done for all players on the force counters = { --- @setting counters Simple statistics that just go up by one each time an event happens MachinesBuilt = e.on_built_entity, MapTagsMade = e.on_chart_tag_added, @@ -23,7 +26,6 @@ return { Deaths = e.on_player_died, JoinCount = e.on_player_joined_game, TilesRemoved = e.on_player_mined_tile, - CapsulesUsed = e.on_player_used_capsule, - RocketsLaunched = e.on_rocket_launched + CapsulesUsed = e.on_player_used_capsule } } \ No newline at end of file diff --git a/modules/data/statistics.lua b/modules/data/statistics.lua index 65d30fcb..fd554b8b 100644 --- a/modules/data/statistics.lua +++ b/modules/data/statistics.lua @@ -50,34 +50,26 @@ if config.DistanceTraveled then end) end ---- Add MachinesRemoved if it is enabled -if config.MachinesRemoved then - local stat = Statistics:combine('MachinesRemoved') +--- Add MachinesRemoved and TreesDestroyed and config.OreMined if it is enabled +if config.MachinesRemoved or config.TreesDestroyed or config.OreMined then + local machines, trees, ore + if config.MachinesRemoved then machines = Statistics:combine('MachinesRemoved') end + if config.TreesDestroyed then trees = Statistics:combine('TreesDestroyed') end + if config.OreMined then ore = Statistics:combine('OreMined') end local function on_event(event) if not event.player_index then return end -- Check player is valid local player = game.players[event.player_index] if not player.valid or not player.connected then return end local entity = event.entity -- Check entity is valid - if not entity.valid or entity.force ~= player.force then return end - stat:increment(player) + if not entity.valid then return end + if entity.type == 'resource' then ore:increment(player) + elseif entity.type == 'tree' then trees:increment(player) + elseif entity.force == player.force then machines:increment(player) end end Event.add(defines.events.on_marked_for_deconstruction, on_event) Event.add(defines.events.on_player_mined_entity, on_event) end ---- Add OreMined if it is enabled -if config.OreMined then - local stat = Statistics:combine('OreMined') - Event.add(defines.events.on_player_mined_entity, function(event) - if not event.player_index then return end -- Check player is valid - local player = game.players[event.player_index] - if not player.valid or not player.connected then return end - local entity = event.entity -- Check entity is valid - if not entity.valid or entity.type ~= 'resource' then return end - stat:increment(player) - end) -end - --- Add DamageDealt if it is enabled if config.DamageDealt then local stat = Statistics:combine('DamageDealt') @@ -106,18 +98,41 @@ if config.DamageDealt then end) end +--- Add RocketsLaunched if it is enabled +if config.RocketsLaunched then + local stat = Statistics:combine('RocketsLaunched') + Event.add(defines.events.on_rocket_launched, function(event) + local silo = event.rocket_silo -- Check silo is valid + if not silo or not silo.valid then return end + local force = silo.force -- Check force is valid + if not force or not force.valid then return end + for _, player in pairs(force.connected_players) do + stat:increment(player) + end + end) +end + +--- Add RocketsLaunched if it is enabled +if config.ResearchCompleted then + local stat = Statistics:combine('ResearchCompleted') + Event.add(defines.events.on_research_finished, function(event) + local research = event.research -- Check research is valid + if event.by_script or not research or not research.valid then return end + local force = research.force -- Check force is valid + if not force or not force.valid then return end + for _, player in pairs(force.connected_players) do + stat:increment(player) + end + end) +end + --- Add all the remaining statistics from the config for statistic, event_name in pairs(config.counters) do local stat = Statistics:combine(statistic) Event.add(event_name, function(event) - if event.player_index then - local player = game.players[event.player_index] - if not player.valid or not player.connected then return end - stat:increment(player) - else - for _, player in pairs(game.connected_players) do - stat:increment(player) - end - end + if not event.player_index then return end + local player = game.players[event.player_index] + if not player.valid or not player.connected then return end + stat:increment(player) end) end \ No newline at end of file