1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-06 00:23:49 +02:00
ComfyFactorio/modules/rpg/settings.lua
2024-11-05 20:04:00 +01:00

849 lines
35 KiB
Lua

local Public = require 'modules.rpg.table'
local Gui = require 'utils.gui'
local P = require 'utils.player_modifiers'
local Session = require 'utils.datastore.session_data'
local settings_frame_name = Public.settings_frame_name
local close_settings_tooltip_frame = Public.close_settings_tooltip_frame
local settings_tooltip_frame = Public.settings_tooltip_frame
local settings_tooltip_name = Public.settings_tooltip_name
local save_button_name = Public.save_button_name
local discard_button_name = Public.discard_button_name
local spell_gui_button_name = Public.spell_gui_button_name
local spell_gui_frame_name = Public.spell_gui_frame_name
local enable_spawning_frame_name = Public.enable_spawning_frame_name
local spell1_button_name = Public.spell1_button_name
local spell2_button_name = Public.spell2_button_name
local spell3_button_name = Public.spell3_button_name
local cooldown_indicator_name = Public.cooldown_indicator_name
local settings_level = Public.gui_settings_levels
local comparators = {
['levels'] = function (a, b)
return a.level < b.level
end
}
local function get_comparator(sort_by)
return comparators[sort_by]
end
local function create_input_element(frame, type, value, items, index, tooltip)
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 == 'label' then
local label = frame.add({ type = 'label', caption = value })
label.style.font = 'default-listbox'
label.tooltip = tooltip or ''
return label
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
local function create_sprite(frame, sprite, localised_string, value, tooltip)
local t = frame.add({ type = 'flow' })
local s = t.add({ type = 'sprite', sprite = sprite })
if s then
s.style.minimal_width = 25
s.style.maximal_width = 25
s.style.minimal_height = 25
s.style.maximal_height = 25
end
local heading = t.add({ type = 'label', caption = localised_string })
heading.tooltip = tooltip or ''
heading.style.font = 'default-listbox'
local subheading = t.add({ type = 'label', caption = value })
subheading.style.font = 'default-listbox'
return subheading
end
local function create_bonus_label(player, setting_grid, caption, tooltip, modifier)
local modifier_label =
setting_grid.add(
{
type = 'label',
caption = caption,
tooltip = tooltip
}
)
local modifier_label_style = modifier_label.style
modifier_label_style.horizontally_stretchable = true
modifier_label_style.height = 35
modifier_label_style.vertical_align = 'center'
local modifier_input = setting_grid.add({ type = 'flow' })
local modifier_input_style = modifier_input.style
modifier_input_style.height = 35
modifier_input_style.vertical_align = 'center'
local status
local bonus_modifier = P.get_single_disabled_modifier(player, modifier)
if bonus_modifier then
status = false
else
status = true
end
local modifier_gui_input = create_input_element(modifier_input, 'boolean', status)
modifier_gui_input.tooltip = ({ 'rpg_settings.tooltip_check' })
return modifier_gui_input
end
function Public.update_spell_gui_indicator(player)
local rpg_t = Public.get_value_from_player(player.index)
if not rpg_t then
return
end
local main_frame = player.gui.screen[spell_gui_frame_name]
if not main_frame then
return
end
local indicator = main_frame['spell_table']['indicator']
indicator.sprite = 'virtual-signal/signal-' .. (rpg_t.enable_entity_spawn and 'green' or 'red')
end
function Public.update_spell_gui(player, spell_index)
local rpg_t = Public.get_value_from_player(player.index)
if not rpg_t then
return
end
local main_frame = player.gui.screen[spell_gui_frame_name]
if not main_frame then
return
end
local spell_table = main_frame['spell_table']
if spell_index then
if spell_index == 1 then
rpg_t.dropdown_select_name = rpg_t.dropdown_select_name_1
rpg_t.dropdown_select_index = rpg_t.dropdown_select_index_1
elseif spell_index == 2 then
rpg_t.dropdown_select_name = rpg_t.dropdown_select_name_2
rpg_t.dropdown_select_index = rpg_t.dropdown_select_index_2
elseif spell_index == 3 then
rpg_t.dropdown_select_name = rpg_t.dropdown_select_name_3
rpg_t.dropdown_select_index = rpg_t.dropdown_select_index_3
end
end
local spell_1_data = Public.get_spell_by_name(rpg_t, rpg_t.dropdown_select_name_1)
local spell_2_data = Public.get_spell_by_name(rpg_t, rpg_t.dropdown_select_name_2)
local spell_3_data = Public.get_spell_by_name(rpg_t, rpg_t.dropdown_select_name_3)
local shift_tooltip = 'Hold [color=yellow]SHIFT[/color] while clicking a spell to quickly change your spells.'
local shift_active_tooltip = 'Current activated spell.'
local t1 = { '', { spell_1_data and spell_1_data.name and spell_1_data.name[1] or '---' }, '\n', shift_tooltip }
spell_table[spell1_button_name].tooltip = t1
spell_table[spell1_button_name].sprite = spell_1_data and spell_1_data.sprite
local t2 = { '', { spell_2_data and spell_2_data.name and spell_2_data.name[1] or '---' }, '\n', shift_tooltip }
spell_table[spell2_button_name].tooltip = t2
spell_table[spell2_button_name].sprite = spell_2_data.sprite
local t3 = { '', { spell_3_data and spell_3_data.name and spell_3_data.name[1] or '---' }, '\n', shift_tooltip }
spell_table[spell3_button_name].tooltip = t3
spell_table[spell3_button_name].sprite = spell_3_data.sprite
if rpg_t.dropdown_select_index_1 == rpg_t.dropdown_select_index then
local te1 = { '', { spell_1_data and spell_1_data.name and spell_1_data.name[1] or '---' }, '\n', shift_active_tooltip }
spell_table[spell1_button_name].enabled = false
spell_table[spell1_button_name].number = 1
spell_table[spell1_button_name].tooltip = te1
rpg_t.dropdown_select_name = rpg_t.dropdown_select_name_1
else
spell_table[spell1_button_name].enabled = true
spell_table[spell1_button_name].number = nil
end
if rpg_t.dropdown_select_index_2 == rpg_t.dropdown_select_index then
local te2 = { '', { spell_2_data and spell_2_data.name and spell_2_data.name[1] or '---' }, '\n', shift_active_tooltip }
spell_table[spell2_button_name].enabled = false
spell_table[spell2_button_name].number = 1
spell_table[spell2_button_name].tooltip = te2
rpg_t.dropdown_select_name = rpg_t.dropdown_select_name_2
else
spell_table[spell2_button_name].enabled = true
spell_table[spell2_button_name].number = nil
end
if rpg_t.dropdown_select_index_3 == rpg_t.dropdown_select_index then
local te3 = { '', { spell_3_data and spell_3_data.name and spell_3_data.name[1] or '---' }, '\n', shift_active_tooltip }
spell_table[spell3_button_name].enabled = false
spell_table[spell3_button_name].number = 1
spell_table[spell3_button_name].tooltip = te3
rpg_t.dropdown_select_name = rpg_t.dropdown_select_name_3
else
spell_table[spell3_button_name].enabled = true
spell_table[spell3_button_name].number = nil
end
local active_spell = Public.get_spell_by_name(rpg_t, rpg_t.dropdown_select_name)
spell_table['mana-cost'].caption = active_spell.mana_cost
spell_table['mana'].caption = math.floor(rpg_t.mana)
spell_table['maxmana'].caption = math.floor(rpg_t.mana_max)
Public.update_spell_gui_indicator(player)
end
function Public.spell_gui_settings(player)
local rpg_t = Public.get_value_from_player(player.index)
if not rpg_t then
return
end
local spells, names = Public.get_all_spells_filtered(rpg_t)
local main_frame = player.gui.screen[spell_gui_frame_name]
if not main_frame or not main_frame.valid then
main_frame =
player.gui.screen.add(
{
type = 'frame',
name = spell_gui_frame_name,
caption = ({ 'rpg_settings.spell_name' }),
direction = 'vertical'
}
)
main_frame.auto_center = true
local table = main_frame.add({ type = 'table', column_count = 4, name = 'spell_table' })
table.add(
{
type = 'sprite-button',
sprite = 'item/raw-fish',
name = enable_spawning_frame_name,
tooltip = ({ 'rpg_settings.toggle_cast_spell_label' })
}
)
table.add(
{
type = 'sprite-button',
sprite = spells[rpg_t.dropdown_select_index_1].sprite,
name = spell1_button_name,
tooltip = names[rpg_t.dropdown_select_index_1] or '---'
}
)
table.add(
{
type = 'sprite-button',
sprite = spells[rpg_t.dropdown_select_index_2].sprite,
name = spell2_button_name,
tooltip = names[rpg_t.dropdown_select_index_2] or '---'
}
)
table.add(
{
type = 'sprite-button',
sprite = spells[rpg_t.dropdown_select_index_3].sprite,
name = spell3_button_name,
tooltip = names[rpg_t.dropdown_select_index_3] or '---'
}
)
table.add({ type = 'sprite-button', name = 'indicator', enabled = false })
local b1 = table.add({ type = 'sprite-button', name = 'mana-cost', tooltip = { 'rpg_settings.mana_cost' }, caption = 0 })
local b2 = table.add({ type = 'sprite-button', name = 'mana', tooltip = { 'rpg_settings.mana' }, caption = 0 })
local b3 = table.add({ type = 'sprite-button', name = 'maxmana', tooltip = { 'rpg_settings.mana_max' }, caption = 0 })
b1.style.font_color = { r = 0.98, g = 0.98, b = 0.98 }
b2.style.font_color = { r = 0.98, g = 0.98, b = 0.98 }
b3.style.font_color = { r = 0.98, g = 0.98, b = 0.98 }
local cooldown =
main_frame.add(
{
type = 'progressbar',
name = cooldown_indicator_name,
tooltip = 'Shows the cooldown of the active spell.',
value = 0
}
)
cooldown.style.maximal_width = 170
Public.update_spell_gui(player, nil)
else
main_frame.destroy()
end
end
function Public.extra_settings(player)
local rpg_extra = Public.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
if not rpg_t then
return
end
local trusted = Session.get_trusted_table()
local main_frame, inside_table = Gui.add_main_frame_with_toolbar(player, 'screen', settings_frame_name, settings_tooltip_name, nil, 'RPG Settings', true)
if not main_frame then
return
end
if not inside_table then
return
end
local data = {}
local main_frame_style = main_frame.style
main_frame_style.width = 500
main_frame.auto_center = true
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 = 400
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.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.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.level < settings_level['reset_text_label'] 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
data.reset_gui_input = reset_gui_input
::continue::
data.character_build_distance_bonus = create_bonus_label(player, setting_grid, ({ 'rpg_settings.build_dist_label' }), ({ 'rpg_settings.build_dist_tooltip' }), 'character_build_distance_bonus')
data.character_crafting_speed_modifier = create_bonus_label(player, setting_grid, ({ 'rpg_settings.craft_speed_label' }), ({ 'rpg_settings.craft_speed_tooltip' }), 'character_crafting_speed_modifier')
data.character_health_bonus = create_bonus_label(player, setting_grid, ({ 'rpg_settings.health_bonus_label' }), ({ 'rpg_settings.health_bonus_tooltip' }), 'character_health_bonus')
data.character_inventory_slots_bonus = create_bonus_label(player, setting_grid, ({ 'rpg_settings.inv_slots_label' }), ({ 'rpg_settings.inv_slots_tooltip' }), 'character_inventory_slots_bonus')
data.character_item_drop_distance_bonus = create_bonus_label(player, setting_grid, ({ 'rpg_settings.drop_dist_label' }), ({ 'rpg_settings.drop_dist_tooltip' }), 'character_item_drop_distance_bonus')
data.character_item_pickup_distance_bonus = create_bonus_label(player, setting_grid, ({ 'rpg_settings.reach_text_label' }), ({ 'rpg_settings.reach_text_tooltip' }), 'character_item_pickup_distance_bonus')
data.character_loot_pickup_distance_bonus = create_bonus_label(player, setting_grid, ({ 'rpg_settings.loot_pickup_label' }), ({ 'rpg_settings.loot_pickup_tooltip' }), 'character_loot_pickup_distance_bonus')
data.character_mining_speed_modifier = create_bonus_label(player, setting_grid, ({ 'rpg_settings.mining_speed_label' }), ({ 'rpg_settings.mining_speed_tooltip' }), 'character_mining_speed_modifier')
data.character_reach_distance_bonus = create_bonus_label(player, setting_grid, ({ 'rpg_settings.char_reach_label' }), ({ 'rpg_settings.char_reach_tooltip' }), 'character_reach_distance_bonus')
data.character_resource_reach_distance_bonus = create_bonus_label(player, setting_grid, ({ 'rpg_settings.resource_reach_label' }), ({ 'rpg_settings.resource_reach_tooltip' }), 'character_resource_reach_distance_bonus')
data.character_running_speed_modifier = create_bonus_label(player, setting_grid, ({ 'rpg_settings.mov_speed_label' }), ({ 'rpg_settings.mov_speed_tooltip' }), 'character_running_speed_modifier')
local enable_entity_gui_input
local conjure_gui_input
local spell_gui_input1
local spell_gui_input2
local spell_gui_input3
local explosive_bullets_gui_input
local stone_path_gui_input
local aoe_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.stone_path then
stone_path = rpg_t.stone_path
else
stone_path = false
end
stone_path_gui_input = create_input_element(stone_path_input, 'boolean', stone_path)
if rpg_t.level < settings_level['stone_path_label'] 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_aoe_punch then
local aoe_punch_label =
setting_grid.add(
{
type = 'label',
caption = ({ 'rpg_settings.aoe_punch_label' }),
tooltip = ({ 'rpg_settings.aoe_punch_tooltip' })
}
)
local aoe_punch_label_style = aoe_punch_label.style
aoe_punch_label_style.horizontally_stretchable = true
aoe_punch_label_style.height = 35
aoe_punch_label_style.vertical_align = 'center'
local aoe_punch_input = setting_grid.add({ type = 'flow' })
local aoe_punch_input_style = aoe_punch_input.style
aoe_punch_input_style.height = 35
aoe_punch_input_style.vertical_align = 'center'
local aoe_punch
if rpg_t.aoe_punch then
aoe_punch = rpg_t.aoe_punch
else
aoe_punch = false
end
aoe_punch_gui_input = create_input_element(aoe_punch_input, 'boolean', aoe_punch)
if rpg_extra.enable_aoe_punch_globally then
aoe_punch_gui_input.state = true
aoe_punch_gui_input.enabled = false
aoe_punch_gui_input.tooltip = ({ 'rpg_settings.aoe_punch_globally' })
else
if rpg_t.level < settings_level['aoe_punch_label'] then
aoe_punch_gui_input.enabled = false
aoe_punch_gui_input.tooltip = ({ 'rpg_settings.low_level', 30 })
else
aoe_punch_gui_input.enabled = true
aoe_punch_gui_input.tooltip = ({ 'rpg_settings.tooltip_check' })
end
end
end
if rpg_extra.enable_explosive_bullets_globally then
local explosive_bullets_label =
setting_grid.add(
{
type = 'label',
caption = ({ 'rpg_settings.explosive_bullets_label' }),
tooltip = ({ 'rpg_settings.explosive_bullets_tooltip' })
}
)
local explosive_bullets_label_style = explosive_bullets_label.style
explosive_bullets_label_style.horizontally_stretchable = true
explosive_bullets_label_style.height = 35
explosive_bullets_label_style.vertical_align = 'center'
local explosive_bullet_input = setting_grid.add({ type = 'flow' })
local explosive_bullet_input_style = explosive_bullet_input.style
explosive_bullet_input_style.height = 35
explosive_bullet_input_style.vertical_align = 'center'
local explosive_bullets
if rpg_t.explosive_bullets then
explosive_bullets = rpg_t.explosive_bullets
else
explosive_bullets = false
end
explosive_bullets_gui_input = create_input_element(explosive_bullet_input, 'boolean', explosive_bullets)
if rpg_t.level < settings_level['explosive_bullets_label'] then
explosive_bullets_gui_input.enabled = false
explosive_bullets_gui_input.tooltip = ({ 'rpg_settings.low_level', 50 })
explosive_bullets_label.tooltip = ({ 'rpg_settings.low_level', 50 })
else
explosive_bullets_gui_input.enabled = true
explosive_bullets_gui_input.tooltip = ({ 'rpg_settings.explosive_bullets_tooltip' })
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.maximal_height = 400
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 modded_hotkeys = rpg_extra.modded_hotkeys
local magic_caption = ({ 'rpg_settings.magic_label' })
local magic_tooltip = ({ 'rpg_settings.magic_tooltip' })
if modded_hotkeys then
magic_caption = ({ 'rpg_settings.magic_label_custom' })
magic_tooltip = ({ 'rpg_settings.magic_tooltip_custom' })
end
local enable_entity =
setting_grid_2.add(
{
type = 'label',
caption = magic_caption,
tooltip = 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.enable_entity_spawn then
entity_mod = rpg_t.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 = 'Check the info button at upper right for more information\nOnly spells that you can cast are listed here.'
}
)
local spells, names = Public.get_all_spells_filtered(rpg_t)
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'
local index = Public.get_spell_by_index(rpg_t, rpg_t.dropdown_select_name)
if not index then
index = rpg_t.dropdown_select_index
end
conjure_gui_input = create_input_element(conjure_input, 'dropdown', false, names, index)
if not spells[rpg_t.dropdown_select_index_1] then
rpg_t.dropdown_select_index_1 = 1
end
if not spells[rpg_t.dropdown_select_index_2] then
rpg_t.dropdown_select_index_2 = 1
end
if not spells[rpg_t.dropdown_select_index_3] then
rpg_t.dropdown_select_index_3 = 1
end
mana_frame.add({ type = 'label', caption = { 'rpg_settings.spell_gui_setup' }, tooltip = { 'rpg_settings.spell_gui_tooltip' } })
local spell_grid = mana_frame.add({ type = 'table', column_count = 4, name = 'spell_grid_table' })
local index1 = Public.get_spell_by_index(rpg_t, rpg_t.dropdown_select_name_1)
if not index1 then
index1 = rpg_t.dropdown_select_index_1
end
spell_gui_input1 = create_input_element(spell_grid, 'dropdown', false, names, index1)
spell_gui_input1.style.maximal_width = 135
local index2 = Public.get_spell_by_index(rpg_t, rpg_t.dropdown_select_name_2)
if not index2 then
index2 = rpg_t.dropdown_select_index_2
end
spell_gui_input2 = create_input_element(spell_grid, 'dropdown', false, names, index2)
spell_gui_input2.style.maximal_width = 135
local index3 = Public.get_spell_by_index(rpg_t, rpg_t.dropdown_select_name_3)
if not index3 then
index3 = rpg_t.dropdown_select_index_3
end
spell_gui_input3 = create_input_element(spell_grid, 'dropdown', false, names, index3)
spell_gui_input3.style.maximal_width = 135
spell_grid.add({ type = 'sprite-button', name = spell_gui_button_name, sprite = 'item/raw-fish' })
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 = Public.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.allocate_index)
end
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.spell_gui_input1 = spell_gui_input1
data.spell_gui_input2 = spell_gui_input2
data.spell_gui_input3 = spell_gui_input3
data.enable_entity_gui_input = enable_entity_gui_input
end
if rpg_extra.enable_explosive_bullets_globally then
data.explosive_bullets_gui_input = explosive_bullets_gui_input
end
if rpg_extra.enable_stone_path then
data.stone_path_gui_input = stone_path_gui_input
end
if rpg_extra.enable_aoe_punch then
data.aoe_punch_gui_input = aoe_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)
if not main_frame or not main_frame.valid then
return
end
main_frame.auto_center = true
player.opened = main_frame
end
function Public.settings_tooltip(player)
local rpg_extra = Public.get('rpg_extra')
local main_frame, inside_table = Gui.add_main_frame_with_toolbar(player, 'center', settings_tooltip_frame, nil, close_settings_tooltip_frame, 'Spell info')
if not main_frame then
return
end
if not inside_table then
return
end
local inside_table_style = inside_table.style
inside_table_style.width = 530
local info_text = inside_table.add({ type = 'label', caption = ({ 'rpg_settings.spellbook_label' }) })
local info_text_style = info_text.style
info_text_style.font = 'heading-2'
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 }
if rpg_extra.enable_mana then
local normal_spell_pane = inside_table.add({ type = 'scroll-pane' })
local ns = normal_spell_pane.style
ns.vertically_squashable = true
ns.minimal_width = 530
ns.maximal_width = 530
ns.bottom_padding = 5
ns.left_padding = 5
ns.right_padding = 5
ns.top_padding = 5
normal_spell_pane.add({ type = 'line' })
local entity_spells = normal_spell_pane.add({ type = 'label', caption = ({ 'rpg_settings.entity_spells_label' }) })
local entity_spells_style = entity_spells.style
entity_spells_style.font = 'default-semibold'
entity_spells_style.padding = 0
entity_spells_style.left_padding = 10
entity_spells_style.horizontal_align = 'left'
entity_spells_style.font_color = { 0.55, 0.55, 0.99 }
local normal_spell_grid = normal_spell_pane.add({ type = 'table', column_count = 2 })
local spells = Public.rebuild_spells()
local comparator = get_comparator('levels')
table.sort(spells, comparator)
for _, entity in pairs(spells) do
if entity.enabled then
local cooldown = (math.round(entity.cooldown / 60, 1)) .. 's'
if entity.type == 'item' then
local text = '[item=' .. entity.entityName .. '] ▪️ Level: [font=default-bold]' .. entity.level .. '[/font] Mana: [font=default-bold]' .. entity.mana_cost .. '[/font]. Cooldown: [font=default-bold]' .. cooldown .. '[/font]'
create_input_element(normal_spell_grid, 'label', text, nil, nil, entity.tooltip)
elseif entity.type == 'entity' then
local text = '[entity=' .. entity.entityName .. '] ▪️ Level: [font=default-bold]' .. entity.level .. '[/font] Mana: [font=default-bold]' .. entity.mana_cost .. '[/font]. Cooldown: [font=default-bold]' .. cooldown .. '[/font]'
create_input_element(normal_spell_grid, 'label', text, nil, nil, entity.tooltip)
end
end
end
local special_spell_pane = inside_table.add({ type = 'scroll-pane' })
local ss = special_spell_pane.style
ss.vertically_squashable = true
ss.maximal_height = 350
ss.minimal_width = 530
ss.maximal_width = 530
ss.bottom_padding = 5
ss.left_padding = 5
ss.right_padding = 5
ss.top_padding = 5
normal_spell_pane.add({ type = 'line' })
local special_spells = special_spell_pane.add({ type = 'label', caption = ({ 'rpg_settings.special_spells_label' }) })
local special_spells_style = special_spells.style
special_spells_style.font = 'default-semibold'
special_spells_style.padding = 0
special_spells_style.left_padding = 10
special_spells_style.horizontal_align = 'left'
special_spells_style.font_color = { 0.55, 0.55, 0.99 }
local special_spell_grid = special_spell_pane.add({ type = 'table', column_count = 1 })
for _, entity in pairs(spells) do
if entity.enabled then
local cooldown = (math.round(entity.cooldown / 60, 1)) .. 's'
if entity.type == 'special' then
local text = '▪️ Level: [font=default-bold]' .. entity.level .. '[/font] Mana: [font=default-bold]' .. entity.mana_cost .. '[/font]. Cooldown: [font=default-bold]' .. cooldown .. '[/font]'
create_sprite(special_spell_grid, entity.sprite, entity.name, text, entity.tooltip)
end
end
end
end
player.opened = main_frame
end