1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-04 00:15:45 +02:00
ComfyFactorio/modules/rpg/gui.lua
2021-12-05 22:26:18 +01:00

854 lines
32 KiB
Lua

local ComfyGui = require 'comfy_panel.main'
local Session = require 'utils.datastore.session_data'
local P = require 'utils.player_modifiers'
local Gui = require 'utils.gui'
local Color = require 'utils.color_presets'
--RPG Modules
local Public = require 'modules.rpg.table'
local classes = Public.classes
--RPG Settings
local experience_levels = Public.experience_levels
--RPG Frames
local main_frame_name = Public.main_frame_name
local draw_main_frame_name = Public.draw_main_frame_name
local settings_button_name = Public.settings_button_name
local settings_frame_name = Public.settings_frame_name
local discard_button_name = Public.discard_button_name
local save_button_name = Public.save_button_name
local enable_spawning_frame_name = Public.enable_spawning_frame_name
local spell_gui_button_name = Public.spell_gui_button_name
local spell_gui_frame_name = Public.spell_gui_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 sub = string.sub
local round = math.round
local floor = math.floor
function Public.draw_gui_char_button(player)
if player.gui.top[draw_main_frame_name] then
return
end
local b = player.gui.top.add({type = 'sprite-button', name = draw_main_frame_name, caption = '[RPG]', tooltip = 'RPG'})
b.style.font_color = {165, 165, 165}
b.style.font = 'heading-3'
b.style.minimal_height = 38
b.style.maximal_height = 38
b.style.minimal_width = 50
b.style.padding = 0
b.style.margin = 0
end
function Public.update_char_button(player)
local rpg_t = Public.get_value_from_player(player.index)
if not player.gui.top[draw_main_frame_name] then
Public.draw_gui_char_button(player)
end
if rpg_t.points_left > 0 then
player.gui.top[draw_main_frame_name].style.font_color = {245, 0, 0}
else
player.gui.top[draw_main_frame_name].style.font_color = {175, 175, 175}
end
end
local function get_class(player)
local rpg_t = Public.get_value_from_player(player.index)
local average = (rpg_t.strength + rpg_t.magicka + rpg_t.dexterity + rpg_t.vitality) / 4
local high_attribute = 0
local high_attribute_name = ''
for _, attribute in pairs({'strength', 'magicka', 'dexterity', 'vitality'}) do
if rpg_t[attribute] > high_attribute then
high_attribute = rpg_t[attribute]
high_attribute_name = attribute
end
end
if high_attribute < average + average * 0.25 then
high_attribute_name = 'engineer'
end
return classes[high_attribute_name]
end
local function add_gui_description(element, value, width, tooltip, min_height, max_height)
local e = element.add({type = 'label', caption = value})
e.tooltip = tooltip or ''
e.style.single_line = false
e.style.maximal_width = width
e.style.minimal_width = width
e.style.maximal_height = max_height or 40
e.style.minimal_height = min_height or 38
e.style.font = 'default-bold'
e.style.font_color = {175, 175, 200}
e.style.horizontal_align = 'right'
e.style.vertical_align = 'center'
return e
end
local function add_gui_stat(element, value, width, tooltip, name, color)
local e = element.add({type = 'sprite-button', name = name or nil, caption = value})
e.tooltip = tooltip or ''
e.style.maximal_width = width
e.style.minimal_width = width
e.style.maximal_height = 38
e.style.minimal_height = 38
e.style.font = 'default-bold'
e.style.horizontal_align = 'center'
e.style.vertical_align = 'center'
e.style.font_color = color or {222, 222, 222}
return e
end
local function add_elem_stat(element, value, width, height, font, tooltip, name, color)
local e = element.add({type = 'sprite-button', name = name or nil, caption = value})
e.tooltip = tooltip or ''
e.style.maximal_width = width
e.style.minimal_width = width
e.style.maximal_height = height
e.style.minimal_height = height
e.style.font = font or 'default-bold'
e.style.horizontal_align = 'center'
e.style.vertical_align = 'center'
e.style.font_color = color or {222, 222, 222}
return e
end
local function add_gui_increase_stat(element, name, player)
local rpg_t = Public.get_value_from_player(player.index)
local sprite = 'virtual-signal/signal-red'
local symbol = ''
if rpg_t.points_left <= 0 then
sprite = 'virtual-signal/signal-black'
end
local e = element.add({type = 'sprite-button', name = name, caption = symbol, sprite = sprite})
e.style.maximal_height = 38
e.style.minimal_height = 38
e.style.maximal_width = 38
e.style.minimal_width = 38
e.style.font = 'default-large-semibold'
e.style.font_color = {0, 0, 0}
e.style.horizontal_align = 'center'
e.style.vertical_align = 'center'
e.style.padding = 0
e.style.margin = 0
e.tooltip = ({'rpg_gui.allocate_info', tostring(Public.points_per_level)})
return e
end
local function add_separator(element, width)
local e = element.add({type = 'line'})
e.style.maximal_width = width
e.style.minimal_width = width
e.style.minimal_height = 12
return e
end
local function remove_settings_frame(settings_frame)
Gui.remove_data_recursively(settings_frame)
settings_frame.destroy()
end
local function remove_main_frame(main_frame, screen)
Gui.remove_data_recursively(main_frame)
main_frame.destroy()
local settings_frame = screen[settings_frame_name]
if settings_frame and settings_frame.valid then
remove_settings_frame(settings_frame)
end
end
local function draw_main_frame(player, location)
if not player.character then
return
end
local main_frame =
player.gui.screen.add(
{
type = 'frame',
name = main_frame_name,
caption = 'RPG',
direction = 'vertical'
}
)
if location then
main_frame.location = location
else
main_frame.location = {x = 1, y = 40}
end
local data = {}
local rpg_extra = Public.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
local inside_frame =
main_frame.add {
type = 'frame',
style = 'deep_frame_in_shallow_frame'
}
local inside_frame_style = inside_frame.style
inside_frame_style.padding = 0
inside_frame_style.maximal_height = 800
local inside_table =
inside_frame.add {
type = 'table',
column_count = 1
}
local scroll_pane =
inside_table.add {
type = 'scroll-pane',
vertical_scroll_policy = 'never',
horizontal_scroll_policy = 'never'
}
local scroll_style = scroll_pane.style
scroll_style.vertically_squashable = true
scroll_style.bottom_padding = 2
scroll_style.left_padding = 2
scroll_style.right_padding = 2
scroll_style.top_padding = 2
--!top table
local main_table = scroll_pane.add({type = 'table', column_count = 2})
local player_name = add_gui_stat(main_table, player.name, 200, ({'rpg_gui.player_name', player.name}))
player_name.style.font_color = player.chat_color
player_name.style.font = 'default-large-bold'
local rank = add_gui_stat(main_table, get_class(player), 200, ({'rpg_gui.class_info', get_class(player)}))
rank.style.font = 'default-large-bold'
add_elem_stat(main_table, ({'rpg_gui.settings_name'}), 200, 35, nil, ({'rpg_gui.settings_frame'}), settings_button_name)
add_separator(scroll_pane, 400)
--!sub top table
local scroll_table = scroll_pane.add({type = 'table', column_count = 4})
scroll_table.style.cell_padding = 1
add_gui_description(scroll_table, ({'rpg_gui.level_name'}), 80)
if rpg_extra.level_limit_enabled then
local level_tooltip = ({'rpg_gui.level_limit', Public.level_limit_exceeded(player, true)})
add_gui_stat(scroll_table, rpg_t.level, 80, level_tooltip)
else
add_gui_stat(scroll_table, rpg_t.level, 80)
end
add_gui_description(scroll_table, ({'rpg_gui.experience_name'}), 100)
local exp_gui = add_gui_stat(scroll_table, floor(rpg_t.xp), 125, ({'rpg_gui.gain_info_tooltip'}))
data.exp_gui = exp_gui
add_gui_description(scroll_table, ' ', 75)
add_gui_description(scroll_table, ' ', 75)
add_gui_description(scroll_table, ({'rpg_gui.next_level_name'}), 100)
add_gui_stat(scroll_table, experience_levels[rpg_t.level + 1], 125, ({'rpg_gui.gain_info_tooltip'}))
add_separator(scroll_pane, 400)
--!bottom table
local bottom_table = scroll_pane.add({type = 'table', column_count = 2})
local left_bottom_table = bottom_table.add({type = 'table', column_count = 3})
left_bottom_table.style.cell_padding = 1
local w0 = 2
local w1 = 85
local w2 = 63
add_gui_description(left_bottom_table, ({'rpg_gui.strength_name'}), w1, ({'rpg_gui.strength_tooltip'}))
add_gui_stat(left_bottom_table, rpg_t.strength, w2, ({'rpg_gui.strength_tooltip'}))
add_gui_increase_stat(left_bottom_table, 'strength', player)
add_gui_description(left_bottom_table, ({'rpg_gui.magic_name'}), w1, ({'rpg_gui.magic_tooltip'}))
add_gui_stat(left_bottom_table, rpg_t.magicka, w2, ({'rpg_gui.magic_tooltip'}))
add_gui_increase_stat(left_bottom_table, 'magicka', player)
add_gui_description(left_bottom_table, ({'rpg_gui.dexterity_name'}), w1, ({'rpg_gui.dexterity_tooltip'}))
add_gui_stat(left_bottom_table, rpg_t.dexterity, w2, ({'rpg_gui.dexterity_tooltip'}))
add_gui_increase_stat(left_bottom_table, 'dexterity', player)
add_gui_description(left_bottom_table, ({'rpg_gui.vitality_name'}), w1, ({'rpg_gui.vitality_tooltip'}))
add_gui_stat(left_bottom_table, rpg_t.vitality, w2, ({'rpg_gui.vitality_tooltip'}))
add_gui_increase_stat(left_bottom_table, 'vitality', player)
add_gui_description(left_bottom_table, ({'rpg_gui.points_to_dist'}), w1)
add_gui_stat(left_bottom_table, rpg_t.points_left, w2, nil, nil, {200, 0, 0})
add_gui_description(left_bottom_table, ' ', w2)
add_gui_description(left_bottom_table, ' ', 40)
add_gui_description(left_bottom_table, ' ', 40)
add_gui_description(left_bottom_table, ' ', 40)
add_gui_description(left_bottom_table, ({'rpg_gui.life_name'}), w1, ({'rpg_gui.life_tooltip'}))
local health_gui = add_gui_stat(left_bottom_table, floor(player.character.health), w2, ({'rpg_gui.life_increase'}))
data.health = health_gui
add_gui_stat(
left_bottom_table,
floor(player.character.prototype.max_health + player.character_health_bonus + player.force.character_health_bonus),
w2,
({'rpg_gui.life_maximum'})
)
local shield = 0
local shield_max = 0
local shield_desc_tip = ({'rpg_gui.shield_no_shield'})
local shield_tip = ({'rpg_gui.shield_no_armor'})
local shield_max_tip = shield_tip
local i = player.character.get_inventory(defines.inventory.character_armor)
if not i.is_empty() then
if i[1].grid then
shield = floor(i[1].grid.shield)
shield_max = floor(i[1].grid.max_shield)
shield_desc_tip = ({'rpg_gui.shield_tooltip'})
shield_tip = ({'rpg_gui.shield_current'})
shield_max_tip = ({'rpg_gui.shield_max'})
add_gui_description(left_bottom_table, ({'rpg_gui.shield_name'}), w1, shield_desc_tip)
local shield_gui = add_gui_stat(left_bottom_table, shield, w2, shield_tip)
local shield_max_gui = add_gui_stat(left_bottom_table, shield_max, w2, shield_max_tip)
data.shield = shield_gui
data.shield_max = shield_max_gui
end
else
add_gui_description(left_bottom_table, ({'rpg_gui.shield_name'}), w1, shield_desc_tip)
add_gui_stat(left_bottom_table, shield, w2, shield_tip)
add_gui_stat(left_bottom_table, shield_max, w2, shield_max_tip)
end
if rpg_extra.enable_mana then
local mana = rpg_t.mana
local mana_max = rpg_t.mana_max
local mana_tip = ({'rpg_gui.mana_tooltip'})
add_gui_description(left_bottom_table, ({'rpg_gui.mana_name'}), w1, mana_tip)
local mana_regen_tip = ({'rpg_gui.mana_regen_current'})
local mana_max_regen_tip
if rpg_t.mana_max >= rpg_extra.mana_limit then
mana_max_regen_tip = ({'rpg_gui.mana_max_limit'})
else
mana_max_regen_tip = ({'rpg_gui.mana_max'})
end
local mana_gui = add_gui_stat(left_bottom_table, mana, w2, mana_regen_tip)
local mana_max_gui = add_gui_stat(left_bottom_table, mana_max, w2, mana_max_regen_tip)
data.mana = mana_gui
data.mana_max = mana_max_gui
end
local right_bottom_table = bottom_table.add({type = 'table', column_count = 3})
right_bottom_table.style.cell_padding = 1
add_gui_description(right_bottom_table, ' ', w0)
add_gui_description(right_bottom_table, ({'rpg_gui.mining_name'}), w1)
local mining_speed_value = round((player.force.manual_mining_speed_modifier + player.character_mining_speed_modifier + 1) * 100) .. '%'
add_gui_stat(right_bottom_table, mining_speed_value, w2)
add_gui_description(right_bottom_table, ' ', w0)
add_gui_description(right_bottom_table, ({'rpg_gui.slot_name'}), w1)
local slot_bonus_value = '+ ' .. round(player.force.character_inventory_slots_bonus + player.character_inventory_slots_bonus)
add_gui_stat(right_bottom_table, slot_bonus_value, w2)
add_gui_description(right_bottom_table, ' ', w0)
add_gui_description(right_bottom_table, ({'rpg_gui.melee_name'}), w1)
local melee_damage_value = round(100 * (1 + Public.get_melee_modifier(player))) .. '%'
local melee_damage_tooltip
if rpg_extra.enable_one_punch then
melee_damage_tooltip = ({
'rpg_gui.one_punch_chance',
Public.get_life_on_hit(player),
Public.get_one_punch_chance(player),
Public.get_extra_following_robots(player)
})
else
melee_damage_tooltip = ({'rpg_gui.one_punch_disabled'})
end
add_gui_stat(right_bottom_table, melee_damage_value, w2, melee_damage_tooltip)
add_gui_description(right_bottom_table, '', w0, '', nil, 5)
add_gui_description(right_bottom_table, '', w0, '', nil, 5)
add_gui_description(right_bottom_table, '', w0, '', nil, 5)
local reach_distance_value = '+ ' .. (player.force.character_reach_distance_bonus + player.character_reach_distance_bonus)
local reach_bonus_tooltip = ({
'rpg_gui.bonus_tooltip',
player.character_reach_distance_bonus,
player.character_build_distance_bonus,
player.character_item_drop_distance_bonus,
player.character_loot_pickup_distance_bonus,
player.character_item_pickup_distance_bonus,
player.character_resource_reach_distance_bonus,
Public.get_magicka(player)
})
add_gui_description(right_bottom_table, ' ', w0)
add_gui_description(right_bottom_table, ({'rpg_gui.reach_distance'}), w1)
add_gui_stat(right_bottom_table, reach_distance_value, w2, reach_bonus_tooltip)
add_gui_description(right_bottom_table, '', w0, '', nil, 10)
add_gui_description(right_bottom_table, '', w0, '', nil, 10)
add_gui_description(right_bottom_table, '', w0, '', nil, 10)
add_gui_description(right_bottom_table, ' ', w0)
add_gui_description(right_bottom_table, ({'rpg_gui.crafting_speed'}), w1)
local crafting_speed_value = round((player.force.manual_crafting_speed_modifier + player.character_crafting_speed_modifier + 1) * 100) .. '%'
add_gui_stat(right_bottom_table, crafting_speed_value, w2)
add_gui_description(right_bottom_table, ' ', w0)
add_gui_description(right_bottom_table, ({'rpg_gui.running_speed'}), w1)
local running_speed_value = round((player.force.character_running_speed_modifier + player.character_running_speed_modifier + 1) * 100) .. '%'
add_gui_stat(right_bottom_table, running_speed_value, w2)
add_gui_description(right_bottom_table, ' ', w0)
add_gui_description(right_bottom_table, ({'rpg_gui.health_bonus_name'}), w1)
local health_bonus_value = '+ ' .. round((player.force.character_health_bonus + player.character_health_bonus))
local health_tooltip = ({'rpg_gui.health_tooltip', Public.get_heal_modifier(player)})
add_gui_stat(right_bottom_table, health_bonus_value, w2, health_tooltip)
add_gui_description(right_bottom_table, ' ', w0)
if rpg_extra.enable_mana then
add_gui_description(right_bottom_table, ({'rpg_gui.mana_bonus'}), w1)
local mana_bonus_value = '+ ' .. (floor(Public.get_mana_modifier(player) * 10) / 10)
local mana_bonus_tooltip = ({
'rpg_gui.mana_regen_bonus',
(floor(Public.get_mana_modifier(player) * 10) / 10)
})
add_gui_stat(right_bottom_table, mana_bonus_value, w2, mana_bonus_tooltip)
end
add_separator(scroll_pane, 400)
Public.update_char_button(player)
data.frame = main_frame
Gui.set_data(main_frame, data)
end
function Public.draw_level_text(player)
if not player.character then
return
end
local rpg_t = Public.get_value_from_player(player.index)
if not rpg_t then
return
end
if rpg_t.text then
rendering.destroy(rpg_t.text)
rpg_t.text = nil
end
local players = {}
for _, p in pairs(game.players) do
if p.index ~= player.index then
players[#players + 1] = p.index
end
end
if #players == 0 then
return
end
rpg_t.text =
rendering.draw_text {
text = 'lvl ' .. rpg_t.level,
surface = player.surface,
target = player.character,
target_offset = {0, -3.25},
color = {
r = player.color.r * 0.6 + 0.25,
g = player.color.g * 0.6 + 0.25,
b = player.color.b * 0.6 + 0.25,
a = 1
},
players = players,
scale = 1.00,
font = 'default-large-semibold',
alignment = 'center',
scale_with_zoom = false
}
end
function Public.update_player_stats(player)
local rpg_extra = Public.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
local strength = rpg_t.strength - 10
P.update_single_modifier(player, 'character_inventory_slots_bonus', 'rpg', round(strength * 0.2, 3))
P.update_single_modifier(player, 'character_mining_speed_modifier', 'rpg', round(strength * 0.007, 3))
P.update_single_modifier(player, 'character_maximum_following_robot_count_bonus', 'rpg', round(strength / 2 * 0.03, 3))
local magic = rpg_t.magicka - 10
local v = magic * 0.22
P.update_single_modifier(player, 'character_build_distance_bonus', 'rpg', math.min(60, round(v * 0.12, 3)))
P.update_single_modifier(player, 'character_item_drop_distance_bonus', 'rpg', math.min(60, round(v * 0.05, 3)))
P.update_single_modifier(player, 'character_reach_distance_bonus', 'rpg', math.min(60, round(v * 0.12, 3)))
P.update_single_modifier(player, 'character_loot_pickup_distance_bonus', 'rpg', math.min(20, round(v * 0.12, 3)))
P.update_single_modifier(player, 'character_item_pickup_distance_bonus', 'rpg', math.min(20, round(v * 0.12, 3)))
P.update_single_modifier(player, 'character_resource_reach_distance_bonus', 'rpg', math.min(20, round(v * 0.05, 3)))
if rpg_t.mana_max >= rpg_extra.mana_limit then
rpg_t.mana_max = rpg_extra.mana_limit
else
rpg_t.mana_max = round((magic) * 2, 3)
end
local dexterity = rpg_t.dexterity - 10
P.update_single_modifier(player, 'character_running_speed_modifier', 'rpg', round(dexterity * 0.0010, 3)) -- reduced since too high speed kills UPS.
P.update_single_modifier(player, 'character_crafting_speed_modifier', 'rpg', round(dexterity * 0.015, 3))
P.update_single_modifier(player, 'character_health_bonus', 'rpg', round((rpg_t.vitality - 10) * 6, 3))
P.update_player_modifiers(player)
end
function Public.toggle(player, recreate)
local screen = player.gui.screen
local main_frame = screen[main_frame_name]
if recreate and main_frame then
local location = main_frame.location
remove_main_frame(main_frame, screen)
draw_main_frame(player, location)
return
end
if main_frame then
remove_main_frame(main_frame, screen)
else
ComfyGui.comfy_panel_clear_left_gui(player)
draw_main_frame(player)
end
end
function Public.remove_frame(player)
local screen = player.gui.screen
local main_frame = screen[main_frame_name]
if main_frame then
remove_main_frame(main_frame, screen)
end
end
local toggle = Public.toggle
Public.remove_main_frame = remove_main_frame
Gui.on_click(
draw_main_frame_name,
function(event)
local player = event.player
if not player or not player.valid or not player.character then
return
end
toggle(player)
end
)
Gui.on_click(
save_button_name,
function(event)
local player = event.player
if not player or not player.valid or not player.character then
return
end
local screen = player.gui.screen
local frame = screen[settings_frame_name]
local data = Gui.get_data(event.element)
local health_bar_gui_input = data.health_bar_gui_input
local reset_gui_input = data.reset_gui_input
local conjure_gui_input = data.conjure_gui_input
local spell_gui_input1 = data.spell_gui_input1
local spell_gui_input2 = data.spell_gui_input2
local spell_gui_input3 = data.spell_gui_input3
local magic_pickup_gui_input = data.magic_pickup_gui_input
local movement_speed_gui_input = data.movement_speed_gui_input
local flame_boots_gui_input = data.flame_boots_gui_input
local explosive_bullets_gui_input = data.explosive_bullets_gui_input
local enable_entity_gui_input = data.enable_entity_gui_input
local stone_path_gui_input = data.stone_path_gui_input
local one_punch_gui_input = data.one_punch_gui_input
local auto_allocate_gui_input = data.auto_allocate_gui_input
local rpg_t = Public.get_value_from_player(player.index)
if frame and frame.valid then
if auto_allocate_gui_input and auto_allocate_gui_input.valid and auto_allocate_gui_input.selected_index then
rpg_t.allocate_index = auto_allocate_gui_input.selected_index
end
if one_punch_gui_input and one_punch_gui_input.valid then
if not one_punch_gui_input.state then
rpg_t.one_punch = false
elseif one_punch_gui_input.state then
rpg_t.one_punch = true
end
end
if stone_path_gui_input and stone_path_gui_input.valid then
if not stone_path_gui_input.state then
rpg_t.stone_path = false
elseif stone_path_gui_input.state then
rpg_t.stone_path = true
end
end
if enable_entity_gui_input and enable_entity_gui_input.valid then
if not enable_entity_gui_input.state then
rpg_t.enable_entity_spawn = false
elseif enable_entity_gui_input.state then
rpg_t.enable_entity_spawn = true
end
end
if flame_boots_gui_input and flame_boots_gui_input.valid then
if not flame_boots_gui_input.state then
rpg_t.flame_boots = false
elseif flame_boots_gui_input.state then
rpg_t.flame_boots = true
end
end
if explosive_bullets_gui_input and explosive_bullets_gui_input.valid then
if not explosive_bullets_gui_input.state then
rpg_t.explosive_bullets = false
elseif explosive_bullets_gui_input.state then
rpg_t.explosive_bullets = true
end
end
if movement_speed_gui_input and movement_speed_gui_input.valid then
if not movement_speed_gui_input.state then
P.disable_single_modifier(player, 'character_running_speed_modifier', true)
P.update_player_modifiers(player)
elseif movement_speed_gui_input.state then
P.disable_single_modifier(player, 'character_running_speed_modifier', false)
P.update_player_modifiers(player)
end
end
if magic_pickup_gui_input and magic_pickup_gui_input.valid then
if not magic_pickup_gui_input.state then
P.disable_single_modifier(player, 'character_item_pickup_distance_bonus', true)
P.disable_single_modifier(player, 'character_build_distance_bonus', true)
P.disable_single_modifier(player, 'character_item_drop_distance_bonus', true)
P.disable_single_modifier(player, 'character_reach_distance_bonus', true)
P.disable_single_modifier(player, 'character_loot_pickup_distance_bonus', true)
P.disable_single_modifier(player, 'character_resource_reach_distance_bonus', true)
P.update_player_modifiers(player)
elseif magic_pickup_gui_input.state then
P.disable_single_modifier(player, 'character_item_pickup_distance_bonus', false)
P.disable_single_modifier(player, 'character_build_distance_bonus', false)
P.disable_single_modifier(player, 'character_item_drop_distance_bonus', false)
P.disable_single_modifier(player, 'character_reach_distance_bonus', false)
P.disable_single_modifier(player, 'character_loot_pickup_distance_bonus', false)
P.disable_single_modifier(player, 'character_resource_reach_distance_bonus', false)
P.update_player_modifiers(player)
end
end
if conjure_gui_input and conjure_gui_input.valid and conjure_gui_input.selected_index then
rpg_t.dropdown_select_index = conjure_gui_input.selected_index
end
if spell_gui_input1 and spell_gui_input1.valid and spell_gui_input1.selected_index then
rpg_t.dropdown_select_index1 = spell_gui_input1.selected_index
end
if spell_gui_input2 and spell_gui_input2.valid and spell_gui_input2.selected_index then
rpg_t.dropdown_select_index2 = spell_gui_input2.selected_index
end
if spell_gui_input3 and spell_gui_input3.valid and spell_gui_input3.selected_index then
rpg_t.dropdown_select_index3 = spell_gui_input3.selected_index
end
if player.gui.screen[spell_gui_frame_name] then
Public.update_spell_gui(player, nil)
end
if reset_gui_input and reset_gui_input.valid and reset_gui_input.state then
if not rpg_t.reset then
rpg_t.allocate_index = 1
rpg_t.reset = true
Public.rpg_reset_player(player, true)
end
end
if health_bar_gui_input and health_bar_gui_input.valid then
if not health_bar_gui_input.state then
rpg_t.show_bars = false
Public.update_health(player)
Public.update_mana(player)
elseif health_bar_gui_input.state then
rpg_t.show_bars = true
Public.update_health(player)
Public.update_mana(player)
end
end
remove_settings_frame(event.element)
if player.gui.screen[main_frame_name] then
toggle(player, true)
end
end
end
)
Gui.on_click(
discard_button_name,
function(event)
local player = event.player
local screen = player.gui.screen
local frame = screen[settings_frame_name]
if not player or not player.valid or not player.character then
return
end
if frame and frame.valid then
Gui.remove_data_recursively(frame)
frame.destroy()
end
end
)
Gui.on_click(
settings_button_name,
function(event)
local player = event.player
local screen = player.gui.screen
local frame = screen[settings_frame_name]
if not player or not player.valid or not player.character then
return
end
local surface_name = Public.get('rpg_extra').surface_name
if sub(player.surface.name, 0, #surface_name) ~= surface_name then
return
end
if frame and frame.valid then
Gui.remove_data_recursively(frame)
frame.destroy()
else
Public.extra_settings(player)
end
end
)
Gui.on_click(
enable_spawning_frame_name,
function(event)
local player = event.player
local screen = player.gui.screen
local frame = screen[spell_gui_frame_name]
if not player or not player.valid or not player.character then
return
end
if not Session.get_trusted_player(player) then
player.print({'rpg_settings.not_trusted'}, Color.fail)
return player.play_sound({path = 'utility/cannot_build', volume_modifier = 0.75})
end
if frame and frame.valid then
local rpg_t = Public.get_value_from_player(player.index)
if not rpg_t.enable_entity_spawn then
player.print({'rpg_settings.cast_spell_enabled_label'}, Color.success)
player.play_sound({path = 'utility/armor_insert', volume_modifier = 0.75})
rpg_t.enable_entity_spawn = true
else
player.print({'rpg_settings.cast_spell_disabled_label'}, Color.warning)
player.play_sound({path = 'utility/cannot_build', volume_modifier = 0.75})
rpg_t.enable_entity_spawn = false
end
Public.update_spell_gui_indicator(player)
end
end
)
Gui.on_click(
spell_gui_button_name,
function(event)
local player = event.player
local screen = player.gui.screen
local frame = screen[spell_gui_frame_name]
if not player or not player.valid or not player.character then
return
end
local surface_name = Public.get('rpg_extra').surface_name
if sub(player.surface.name, 0, #surface_name) ~= surface_name then
return
end
if frame and frame.valid then
Gui.remove_data_recursively(frame)
frame.destroy()
else
Public.spell_gui_settings(player)
end
end
)
Gui.on_click(
spell1_button_name,
function(event)
local player = event.player
local screen = player.gui.screen
local frame = screen[spell_gui_frame_name]
if not player or not player.valid or not player.character then
return
end
local surface_name = Public.get('rpg_extra').surface_name
if sub(player.surface.name, 0, #surface_name) ~= surface_name then
return
end
if frame and frame.valid then
Public.update_spell_gui(player, 1)
end
end
)
Gui.on_click(
spell2_button_name,
function(event)
local player = event.player
local screen = player.gui.screen
local frame = screen[spell_gui_frame_name]
if not player or not player.valid or not player.character then
return
end
local surface_name = Public.get('rpg_extra').surface_name
if sub(player.surface.name, 0, #surface_name) ~= surface_name then
return
end
if frame and frame.valid then
Public.update_spell_gui(player, 2)
end
end
)
Gui.on_click(
spell3_button_name,
function(event)
local player = event.player
local screen = player.gui.screen
local frame = screen[spell_gui_frame_name]
if not player or not player.valid or not player.character then
return
end
local surface_name = Public.get('rpg_extra').surface_name
if sub(player.surface.name, 0, #surface_name) ~= surface_name then
return
end
if frame and frame.valid then
Public.update_spell_gui(player, 3)
end
end
)
ComfyGui.screen_to_bypass(spell_gui_frame_name)
return Public