--Central to add all player modifiers together. --Will overwrite character stats from other mods. local Global = require 'utils.global' local this = {} Global.register( this, function(t) this = t end ) local Public = {} function Public.get_table() return this end local modifiers = { 'character_build_distance_bonus', 'character_crafting_speed_modifier', 'character_health_bonus', 'character_inventory_slots_bonus', 'character_item_drop_distance_bonus', 'character_item_pickup_distance_bonus', 'character_loot_pickup_distance_bonus', 'character_mining_speed_modifier', 'character_reach_distance_bonus', 'character_resource_reach_distance_bonus', 'character_maximum_following_robot_count_bonus', 'character_running_speed_modifier' } function Public.update_player_modifiers(player) for _, modifier in pairs(modifiers) do local sum_value = 0 for _, value in pairs(this[player.index][modifier]) do sum_value = sum_value + value end if player.character then player[modifier] = sum_value end end end local function on_player_joined_game(event) if this[event.player_index] then Public.update_player_modifiers(game.players[event.player_index]) return end this[event.player_index] = {} for _, modifier in pairs(modifiers) do this[event.player_index][modifier] = {} end end local function on_player_respawned(event) Public.update_player_modifiers(game.players[event.player_index]) end local Event = require 'utils.event' Event.add(defines.events.on_player_joined_game, on_player_joined_game) Event.add(defines.events.on_player_respawned, on_player_respawned) return Public