local RPG = require 'modules.rpg.table' local Gui = require 'utils.gui' local P = require 'player_modifiers' local Session = require 'utils.datastore.session_data' local Public = {} local settings_frame_name = RPG.settings_frame_name local save_button_name = RPG.save_button_name local discard_button_name = RPG.discard_button_name local function create_input_element(frame, type, value, items, index) if type == 'slider' then return frame.add({type = 'slider', value = value, minimum_value = 0, maximum_value = 1}) end if type == 'boolean' then return frame.add({type = 'checkbox', state = value}) end if type == 'dropdown' then return frame.add({type = 'drop-down', items = items, selected_index = index}) end return frame.add({type = 'text-box', text = value}) end function Public.extra_settings(player) local player_modifiers = P.get_table() local rpg_extra = RPG.get('rpg_extra') local rpg_t = RPG.get('rpg_t') local trusted = Session.get_trusted_table() local main_frame = player.gui.screen.add( { type = 'frame', name = settings_frame_name, caption = ({'rpg_settings.name'}), direction = 'vertical' } ) main_frame.auto_center = true local main_frame_style = main_frame.style main_frame_style.width = 500 local inside_frame = main_frame.add {type = 'frame', style = 'inside_shallow_frame'} local inside_frame_style = inside_frame.style inside_frame_style.padding = 0 local inside_table = inside_frame.add {type = 'table', column_count = 1} local inside_table_style = inside_table.style inside_table_style.vertical_spacing = 0 inside_table.add({type = 'line'}) local info_text = inside_table.add({type = 'label', caption = ({'rpg_settings.info_text_label'})}) local info_text_style = info_text.style info_text_style.font = 'default-bold' info_text_style.padding = 0 info_text_style.left_padding = 10 info_text_style.horizontal_align = 'left' info_text_style.vertical_align = 'bottom' info_text_style.font_color = {0.55, 0.55, 0.99} inside_table.add({type = 'line'}) local scroll_pane = inside_table.add({type = 'scroll-pane'}) local scroll_style = scroll_pane.style scroll_style.vertically_squashable = true scroll_style.maximal_height = 800 scroll_style.bottom_padding = 5 scroll_style.left_padding = 5 scroll_style.right_padding = 5 scroll_style.top_padding = 5 local setting_grid = scroll_pane.add({type = 'table', column_count = 2}) local health_bar_gui_input if rpg_extra.enable_health_and_mana_bars then local health_bar_label = setting_grid.add( { type = 'label', caption = ({'rpg_settings.health_text_label'}) } ) local style = health_bar_label.style style.horizontally_stretchable = true style.height = 35 style.vertical_align = 'center' local health_bar_input = setting_grid.add({type = 'flow'}) local input_style = health_bar_input.style input_style.height = 35 input_style.vertical_align = 'center' health_bar_gui_input = create_input_element(health_bar_input, 'boolean', rpg_t[player.index].show_bars) health_bar_gui_input.tooltip = ({'rpg_settings.tooltip_check'}) if not rpg_extra.enable_mana then health_bar_label.caption = ({'rpg_settings.health_only_text_label'}) end end local reset_label = setting_grid.add( { type = 'label', caption = ({'rpg_settings.reset_text_label'}), tooltip = '' } ) local reset_label_style = reset_label.style reset_label_style.horizontally_stretchable = true reset_label_style.height = 35 reset_label_style.vertical_align = 'center' local reset_input = setting_grid.add({type = 'flow'}) local reset_input_style = reset_input.style reset_input_style.height = 35 reset_input_style.vertical_align = 'center' local reset_gui_input = create_input_element(reset_input, 'boolean', false) if not rpg_t[player.index].reset then if not trusted[player.name] then reset_gui_input.enabled = false reset_gui_input.tooltip = ({'rpg_settings.not_trusted'}) goto continue end if rpg_t[player.index].level < 50 then reset_gui_input.enabled = false reset_gui_input.tooltip = ({'rpg_settings.low_level', 50}) reset_label.tooltip = ({'rpg_settings.low_level', 50}) else reset_gui_input.enabled = true reset_gui_input.tooltip = ({'rpg_settings.reset_tooltip'}) reset_label.tooltip = ({'rpg_settings.reset_tooltip'}) end else reset_gui_input.enabled = false reset_gui_input.tooltip = ({'rpg_settings.used_up'}) end ::continue:: local magic_pickup_label = setting_grid.add( { type = 'label', caption = ({'rpg_settings.reach_text_label'}), tooltip = ({'rpg_settings.reach_text_tooltip'}) } ) local magic_pickup_label_style = magic_pickup_label.style magic_pickup_label_style.horizontally_stretchable = true magic_pickup_label_style.height = 35 magic_pickup_label_style.vertical_align = 'center' local magic_pickup_input = setting_grid.add({type = 'flow'}) local magic_pickup_input_style = magic_pickup_input.style magic_pickup_input_style.height = 35 magic_pickup_input_style.vertical_align = 'center' local reach_mod if player_modifiers.disabled_modifier[player.index] and player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus then reach_mod = not player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus else reach_mod = true end local magic_pickup_gui_input = create_input_element(magic_pickup_input, 'boolean', reach_mod) magic_pickup_gui_input.tooltip = ({'rpg_settings.tooltip_check'}) local movement_speed_label = setting_grid.add( { type = 'label', caption = ({'rpg_settings.movement_text_label'}), tooltip = ({'rpg_settings.movement_text_tooltip'}) } ) local movement_speed_label_style = movement_speed_label.style movement_speed_label_style.horizontally_stretchable = true movement_speed_label_style.height = 35 movement_speed_label_style.vertical_align = 'center' local movement_speed_input = setting_grid.add({type = 'flow'}) local movement_speed_input_style = movement_speed_input.style movement_speed_input_style.height = 35 movement_speed_input_style.vertical_align = 'center' local speed_mod if player_modifiers.disabled_modifier[player.index] and player_modifiers.disabled_modifier[player.index].character_running_speed_modifier then speed_mod = not player_modifiers.disabled_modifier[player.index].character_running_speed_modifier else speed_mod = true end local movement_speed_gui_input = create_input_element(movement_speed_input, 'boolean', speed_mod) movement_speed_gui_input.tooltip = ({'rpg_settings.tooltip_check'}) local enable_entity_gui_input local conjure_gui_input local flame_boots_gui_input local stone_path_gui_input local one_punch_gui_input local auto_allocate_gui_input if rpg_extra.enable_stone_path then local stone_path_label = setting_grid.add( { type = 'label', caption = ({'rpg_settings.stone_path_label'}), tooltip = ({'rpg_settings.stone_path_tooltip'}) } ) local stone_path_label_style = stone_path_label.style stone_path_label_style.horizontally_stretchable = true stone_path_label_style.height = 35 stone_path_label_style.vertical_align = 'center' local stone_path_input = setting_grid.add({type = 'flow'}) local stone_path_input_style = stone_path_input.style stone_path_input_style.height = 35 stone_path_input_style.vertical_align = 'center' local stone_path if rpg_t[player.index].stone_path then stone_path = rpg_t[player.index].stone_path else stone_path = false end stone_path_gui_input = create_input_element(stone_path_input, 'boolean', stone_path) if rpg_t[player.index].level < 20 then stone_path_gui_input.enabled = false stone_path_gui_input.tooltip = ({'rpg_settings.low_level', 20}) stone_path_label.tooltip = ({'rpg_settings.low_level', 20}) else stone_path_gui_input.enabled = true stone_path_gui_input.tooltip = ({'rpg_settings.tooltip_check'}) end end if rpg_extra.enable_one_punch then local one_punch_label = setting_grid.add( { type = 'label', caption = ({'rpg_settings.one_punch_label'}), tooltip = ({'rpg_settings.one_punch_tooltip'}) } ) local one_punch_label_style = one_punch_label.style one_punch_label_style.horizontally_stretchable = true one_punch_label_style.height = 35 one_punch_label_style.vertical_align = 'center' local one_punch_input = setting_grid.add({type = 'flow'}) local one_punch_input_style = one_punch_input.style one_punch_input_style.height = 35 one_punch_input_style.vertical_align = 'center' local one_punch if rpg_t[player.index].one_punch then one_punch = rpg_t[player.index].one_punch else one_punch = false end one_punch_gui_input = create_input_element(one_punch_input, 'boolean', one_punch) if rpg_extra.enable_one_punch_globally then one_punch_gui_input.state = true one_punch_gui_input.enabled = false one_punch_gui_input.tooltip = ({'rpg_settings.one_punch_globally'}) else if rpg_t[player.index].level < 30 then one_punch_gui_input.enabled = false one_punch_gui_input.tooltip = ({'rpg_settings.low_level', 30}) else one_punch_gui_input.enabled = true one_punch_gui_input.tooltip = ({'rpg_settings.tooltip_check'}) end end end if rpg_extra.enable_flame_boots then local flame_boots_label = setting_grid.add( { type = 'label', caption = ({'rpg_settings.flameboots_label'}), tooltip = ({'rpg_settings.flameboots_tooltip'}) } ) local flame_boots_label_style = flame_boots_label.style flame_boots_label_style.horizontally_stretchable = true flame_boots_label_style.height = 35 flame_boots_label_style.vertical_align = 'center' local flame_boots_input = setting_grid.add({type = 'flow'}) local flame_boots_input_style = flame_boots_input.style flame_boots_input_style.height = 35 flame_boots_input_style.vertical_align = 'center' local flame_mod if rpg_t[player.index].flame_boots then flame_mod = rpg_t[player.index].flame_boots else flame_mod = false end flame_boots_gui_input = create_input_element(flame_boots_input, 'boolean', flame_mod) if rpg_t[player.index].mana > 50 then if rpg_t[player.index].level < 100 then flame_boots_gui_input.enabled = false flame_boots_gui_input.tooltip = ({'rpg_settings.low_level', 100}) flame_boots_label.tooltip = ({'rpg_settings.low_level', 100}) else flame_boots_gui_input.enabled = true flame_boots_gui_input.tooltip = ({'rpg_settings.tooltip_check'}) end else flame_boots_gui_input.enabled = false flame_boots_gui_input.tooltip = ({'rpg_settings.no_mana'}) end end if rpg_extra.enable_mana then local mana_frame = inside_table.add({type = 'scroll-pane'}) local mana_style = mana_frame.style mana_style.vertically_squashable = true mana_style.bottom_padding = 5 mana_style.left_padding = 5 mana_style.right_padding = 5 mana_style.top_padding = 5 mana_frame.add({type = 'line'}) local label = mana_frame.add({type = 'label', caption = ({'rpg_settings.mana_label'})}) label.style.font = 'default-bold' label.style.padding = 0 label.style.left_padding = 10 label.style.horizontal_align = 'left' label.style.vertical_align = 'bottom' label.style.font_color = {0.55, 0.55, 0.99} mana_frame.add({type = 'line'}) local setting_grid_2 = mana_frame.add({type = 'table', column_count = 2}) local mana_grid = mana_frame.add({type = 'table', column_count = 2}) local enable_entity = setting_grid_2.add( { type = 'label', caption = ({'rpg_settings.magic_label'}), tooltip = ({'rpg_settings.magic_tooltip'}) } ) local enable_entity_style = enable_entity.style enable_entity_style.horizontally_stretchable = true enable_entity_style.height = 35 enable_entity_style.vertical_align = 'center' local entity_input = setting_grid_2.add({type = 'flow'}) local entity_input_style = entity_input.style entity_input_style.height = 35 entity_input_style.vertical_align = 'center' entity_input_style.horizontal_align = 'right' local entity_mod if rpg_t[player.index].enable_entity_spawn then entity_mod = rpg_t[player.index].enable_entity_spawn else entity_mod = false end enable_entity_gui_input = create_input_element(entity_input, 'boolean', entity_mod) if not trusted[player.name] then enable_entity_gui_input.enabled = false enable_entity_gui_input.tooltip = ({'rpg_settings.not_trusted'}) else enable_entity_gui_input.enabled = true enable_entity_gui_input.tooltip = ({'rpg_settings.tooltip_check'}) end local conjure_label = mana_grid.add( { type = 'label', caption = ({'rpg_settings.magic_spell'}), tooltip = '' } ) local spells, names = RPG.rebuild_spells() local conjure_label_style = conjure_label.style conjure_label_style.horizontally_stretchable = true conjure_label_style.height = 35 conjure_label_style.vertical_align = 'center' local conjure_input = mana_grid.add({type = 'flow'}) local conjure_input_style = conjure_input.style conjure_input_style.height = 35 conjure_input_style.vertical_align = 'center' conjure_gui_input = create_input_element(conjure_input, 'dropdown', false, names, rpg_t[player.index].dropdown_select_index) for _, entity in pairs(spells) do if entity.type == 'item' then conjure_label.tooltip = ({ 'rpg_settings.magic_item_requirement', conjure_label.tooltip, entity.obj_to_create, entity.mana_cost, entity.level }) elseif entity.type == 'entity' then conjure_label.tooltip = ({ 'rpg_settings.magic_entity_requirement', conjure_label.tooltip, entity.obj_to_create, entity.mana_cost, entity.level }) elseif entity.type == 'special' then conjure_label.tooltip = ({ 'rpg_settings.magic_special_requirement', conjure_label.tooltip, entity.name, entity.mana_cost, entity.level }) end end end if rpg_extra.enable_auto_allocate then local allocate_frame = inside_table.add({type = 'scroll-pane'}) local allocate_style = allocate_frame.style allocate_style.vertically_squashable = true allocate_style.bottom_padding = 5 allocate_style.left_padding = 5 allocate_style.right_padding = 5 allocate_style.top_padding = 5 allocate_frame.add({type = 'line'}) local a_label = allocate_frame.add({type = 'label', caption = ({'rpg_settings.allocation_settings_label'})}) a_label.style.font = 'default-bold' a_label.style.padding = 0 a_label.style.left_padding = 10 a_label.style.horizontal_align = 'left' a_label.style.vertical_align = 'bottom' a_label.style.font_color = {0.55, 0.55, 0.99} allocate_frame.add({type = 'line'}) local allocate_grid = allocate_frame.add({type = 'table', column_count = 2}) local allocate_label = allocate_grid.add( { type = 'label', caption = ({'rpg_settings.allocation_label'}), tooltip = '' } ) allocate_label.tooltip = ({'rpg_settings.allocation_tooltip'}) local names = RPG.auto_allocate_nodes local allocate_label_style = allocate_label.style allocate_label_style.horizontally_stretchable = true allocate_label_style.height = 35 allocate_label_style.vertical_align = 'center' local name_input = allocate_grid.add({type = 'flow'}) local name_input_style = name_input.style name_input_style.height = 35 name_input_style.vertical_align = 'center' auto_allocate_gui_input = create_input_element(name_input, 'dropdown', false, names, rpg_t[player.index].allocate_index) end local data = { reset_gui_input = reset_gui_input, magic_pickup_gui_input = magic_pickup_gui_input, movement_speed_gui_input = movement_speed_gui_input } if rpg_extra.enable_health_and_mana_bars then data.health_bar_gui_input = health_bar_gui_input end if rpg_extra.enable_mana then data.conjure_gui_input = conjure_gui_input data.enable_entity_gui_input = enable_entity_gui_input end if rpg_extra.enable_flame_boots then data.flame_boots_gui_input = flame_boots_gui_input end if rpg_extra.enable_stone_path then data.stone_path_gui_input = stone_path_gui_input end if rpg_extra.enable_one_punch then data.one_punch_gui_input = one_punch_gui_input end if rpg_extra.enable_auto_allocate then data.auto_allocate_gui_input = auto_allocate_gui_input end local bottom_flow = main_frame.add({type = 'flow', direction = 'horizontal'}) local left_flow = bottom_flow.add({type = 'flow'}) left_flow.style.horizontal_align = 'left' left_flow.style.horizontally_stretchable = true local close_button = left_flow.add({type = 'button', name = discard_button_name, caption = ({'rpg_settings.discard_changes'})}) close_button.style = 'back_button' local right_flow = bottom_flow.add({type = 'flow'}) right_flow.style.horizontal_align = 'right' local save_button = right_flow.add({type = 'button', name = save_button_name, caption = ({'rpg_settings.save_changes'})}) save_button.style = 'confirm_button' Gui.set_data(save_button, data) player.opened = main_frame end return Public