function build_gui(player) -- here only build gui, but not try to update it with player data that is not always already available (in init_player for example) local guif = player.gui.top.flw_zoom if guif == nil then guif = player.gui.top.add({type = "flow", name = "flw_zoom", direction = "horizontal", style = "zoom_flow_style"}) guif.add({type = "sprite-button", name = "but_zoom_zout", sprite = "sprite_zout", style = "zoom_sprite_style"}) guif.add({type = "sprite-button", name = "but_zoom_zin", sprite = "sprite_zin", style = "zoom_sprite_style"}) end end local function on_gui_click(event) local player = game.players[event.player_index] if event.element.name == "but_zoom_zin" then player.zoom = player.zoom*player.mod_settings["some-zoom-zoomchangefactor"].value elseif event.element.name == "but_zoom_zout" then player.zoom = player.zoom/player.mod_settings["some-zoom-zoomchangefactor"].value end end local function on_runtime_mod_setting_changed(event) local player = game.players[event.player_index] if player.connected then player.zoom_limits = {} local defzoomlimit = player.zoom_limits local zoomlimitfactor = 1 player.zoom_limits = { furthest = { distance = defzoomlimit.furthest.distance*player.mod_settings["some-zoom-zoomlimitfactor"].value, max_distance = defzoomlimit.furthest.max_distance*player.mod_settings["some-zoom-zoomlimitfactor"].value}, furthest_game_view = { distance = defzoomlimit.furthest.distance*player.mod_settings["some-zoom-zoomlimitfactor"].value, max_distance = defzoomlimit.furthest.max_distance*player.mod_settings["some-zoom-zoomlimitfactor"].value} } end end local function on_init() for _, player in pairs(game.players) do if player.connected then player.zoom_limits = {} local defzoomlimit = player.zoom_limits local zoomlimitfactor = 1 player.zoom_limits = { furthest = { distance = defzoomlimit.furthest.distance*player.mod_settings["some-zoom-zoomlimitfactor"].value, max_distance = defzoomlimit.furthest.max_distance*player.mod_settings["some-zoom-zoomlimitfactor"].value}, furthest_game_view = { distance = defzoomlimit.furthest.distance*player.mod_settings["some-zoom-zoomlimitfactor"].value, max_distance = defzoomlimit.furthest.max_distance*player.mod_settings["some-zoom-zoomlimitfactor"].value} } build_gui(player) end end end script.on_event(defines.events.on_runtime_mod_setting_changed, on_runtime_mod_setting_changed) script.on_event(defines.events.on_gui_click, on_gui_click) script.on_init(on_init)