mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-06 00:23:49 +02:00
849 lines
35 KiB
Lua
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
|