1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2026-06-20 16:32:28 +02:00

refactor and changes

This commit is contained in:
Gerkiz
2021-05-23 17:03:52 +02:00
parent f056414b84
commit fbaa411073
24 changed files with 403 additions and 236 deletions
+13 -20
View File
@@ -56,14 +56,15 @@ function Public.set(key, value)
end
end
Event.on_init(
function()
this.players = {}
end
)
function Public.reset()
this.players = {}
local players = game.players
for i = 1, #players do
local player = players[i]
if not player.connected then
this.players[player.index] = nil
this.bottom_quickbar_button[player.index] = nil
end
end
end
----! Gui Functions ! ----
@@ -73,8 +74,8 @@ local function destroy_frame(player)
local frame = gui.screen[bottom_guis_frame]
if frame and frame.valid then
frame.destroy()
this.bottom_quickbar_button[player.index] = nil
end
this.bottom_quickbar_button[player.index] = nil
end
local function create_frame(player, rebuild)
@@ -149,18 +150,10 @@ local function set_location(player)
y = (resolution.height - (96 * scale))
}
else
local experimental = get_game_version()
if experimental then
frame.location = {
x = (resolution.width / 2) - ((54 + 445) * scale),
y = (resolution.height - (96 * scale))
}
else
frame.location = {
x = (resolution.width / 2) - ((54 + 258) * scale),
y = (resolution.height - (96 * scale))
}
end
frame.location = {
x = (resolution.width / 2) - ((54 + 445) * scale),
y = (resolution.height - (96 * scale))
}
end
end
+47
View File
@@ -5,8 +5,10 @@ local SessionData = require 'utils.datastore.session_data'
local Utils = require 'utils.core'
local Tabs = require 'comfy_panel.main'
local SpamProtection = require 'utils.spam_protection'
local BottomFrame = require 'comfy_panel.bottom_frame'
local Token = require 'utils.token'
local Global = require 'utils.global'
local Gui = require 'utils.gui'
local module_name = 'Config'
@@ -120,6 +122,20 @@ local functions = {
game.players[event.player_index].spectator = false
end
end,
['comfy_panel_bottom_right_frame'] = function(event)
local player = game.get_player(event.player_index)
if event.element.switch_state == 'left' then
local bottom_frame = BottomFrame.get_player_data(player)
if not bottom_frame then
return
end
bottom_frame.bottom_left = true
BottomFrame.set_location(player)
else
BottomFrame.get_player_data(player, true)
BottomFrame.set_location(player)
end
end,
['comfy_panel_auto_hotbar_switch'] = function(event)
if event.element.switch_state == 'left' then
global.auto_hotbar_enabled[event.player_index] = true
@@ -166,6 +182,13 @@ local functions = {
global.bb_settings.only_admins_vote = false
game.print('Admin-only difficulty voting has been disabled!')
end
end,
['disable_cleaning'] = function(event)
if event.element.switch_state == 'left' then
Gui.set_disable_clear_invalid_data(true)
else
Gui.set_disable_clear_invalid_data(false)
end
end
}
@@ -371,6 +394,22 @@ local function build_config_gui(data)
scroll_pane.add({type = 'line'})
end
if BottomFrame.is_custom_buttons_enabled() then
switch_state = 'right'
local bottom_frame = BottomFrame.get('players')
if bottom_frame[player.index] then
switch_state = 'left'
end
add_switch(
scroll_pane,
switch_state,
'comfy_panel_bottom_right_frame',
'Button Location',
'Toggle to select if you want the bottom button on the right side or the left side.'
)
scroll_pane.add({type = 'line'})
end
if admin then
label = scroll_pane.add({type = 'label', caption = 'Admin Settings'})
label.style.font = 'default-bold'
@@ -391,6 +430,14 @@ local function build_config_gui(data)
scroll_pane.add({type = 'line'})
switch_state = 'right'
if Gui.get_disable_clear_invalid_data() then
switch_state = 'left'
end
add_switch(scroll_pane, switch_state, 'disable_cleaning', 'Gui Data Cleaning', 'Toggles the Gui data cleaning.')
scroll_pane.add({type = 'line'})
switch_state = 'right'
if this.gui_config.spaghett.enabled then
switch_state = 'left'
+12 -1
View File
@@ -775,7 +775,7 @@ local function tick()
if not polls.running then
return
end
for _, p in pairs(game.connected_players) do
for _, p in pairs(game.players) do
local frame = p.gui.left[main_frame_name]
if frame and frame.valid then
local data = Gui.get_data(frame)
@@ -790,6 +790,17 @@ local function tick()
end
end
end
local player_index = p.index
local tbl = player_create_poll_data[player_index]
if tbl then
for k, element in pairs(tbl) do
if type(element) == 'table' then
if not element.valid then
player_create_poll_data[player_index] = nil
end
end
end
end
end
end
+5 -6
View File
@@ -275,15 +275,14 @@ commands.add_command(
end
local item = game.item_prototypes
local i = 0
local p_modifer = Modifiers.get_table()
for _k, _v in pairs(item) do
i = i + 1
if _k and _v.type ~= 'mining-tool' then
p_modifer[player.index].character_inventory_slots_bonus['creative'] = tonumber(i)
p_modifer[player.index].character_mining_speed_modifier['creative'] = 50
p_modifer[player.index].character_health_bonus['creative'] = 2000
p_modifer[player.index].character_crafting_speed_modifier['creative'] = 50
v.character_inventory_slots_bonus = p_modifer[player.index].character_inventory_slots_bonus['creative']
Modifiers.update_single_modifier(player, 'character_inventory_slots_bonus', 'creative', tonumber(i))
Modifiers.update_single_modifier(player, 'character_mining_speed_modifier', 'creative', 50)
Modifiers.update_single_modifier(player, 'character_health_bonus', 'creative', 2000)
Modifiers.update_single_modifier(player, 'character_crafting_speed_modifier', 'creative', 50)
v.character_inventory_slots_bonus = Modifiers.get_single_modifier(player, 'character_inventory_slots_bonus', 'creative')
v.insert {name = _k, count = _v.stack_size}
v.print('[CREATIVE] Inserted all base items.', Color.success)
Modifiers.update_player_modifiers(player)
+1 -1
View File
@@ -35,7 +35,7 @@ dexterity_name=DEXTERITY
dexterity_tooltip=Increases running and crafting speed.
vitality_name=VITALITY
vitality_tooltip=Increases health.\nIncreases melee life on-hit.
points_to_dist=POINTS TO\nDISTRIBUTE
points_to_dist=POINTS LEFT
life_name=LIFE
life_tooltip=Your current health
life_increase=Current life. Increase it by adding vitality.
+1 -3
View File
@@ -4,7 +4,6 @@
global.offline_loot = true
local darkness = false
require 'player_modifiers'
require 'functions.soft_reset'
require 'functions.basic_markets'
@@ -442,7 +441,6 @@ local function on_research_finished(event)
end
local function on_player_joined_game(event)
local player_modifiers = Modifier.get_table()
local player = game.players[event.player_index]
set_difficulty()
@@ -467,7 +465,7 @@ local function on_player_joined_game(event)
end
end
player_modifiers[player.index].character_mining_speed_modifier['mountain_fortress'] = 0.5
Modifier.update_single_modifier(player, 'character_mining_speed_modifier', 'mountain_fortress', 0.5)
Modifier.update_player_modifiers(player)
local tile = surface.get_tile(player.position)
+12 -44
View File
@@ -21,7 +21,13 @@ local this = {
surface_cleared = false
}
local starting_items = {['pistol'] = 1, ['firearm-magazine'] = 16, ['rail'] = 16, ['wood'] = 16, ['explosives'] = 32}
local starting_items = {
['pistol'] = 1,
['firearm-magazine'] = 16,
['rail'] = 16,
['wood'] = 16,
['explosives'] = 32
}
Global.register(
this,
@@ -59,21 +65,6 @@ local artillery_target_entities = {
'spidertron'
}
function Public.get_player_data(player, remove_user_data)
local players = WPT.get('players')
if remove_user_data then
if players[player.index] then
players[player.index] = nil
end
end
if not players[player.index] then
players[player.index] = {}
end
return players[player.index]
end
local get_player_data = Public.get_player_data
local function debug_str(msg)
local debug = WPT.get('debug')
if not debug then
@@ -1132,6 +1123,7 @@ end
function Public.on_player_joined_game(event)
local active_surface_index = WPT.get('active_surface_index')
local players = WPT.get('players')
local player = game.players[event.player_index]
local surface = game.surfaces[active_surface_index]
@@ -1139,15 +1131,15 @@ function Public.on_player_joined_game(event)
ICW_Func.is_minimap_valid(player, surface)
local player_data = get_player_data(player)
if not player_data.first_join then
if player.online_time < 1 then
if not players[player.index] then
players[player.index] = {}
end
local message = ({'main.greeting', player.name})
Alert.alert_player(player, 15, message)
for item, amount in pairs(starting_items) do
player.insert({name = item, count = amount})
end
player_data.first_join = true
end
local top = player.gui.top
@@ -1213,26 +1205,6 @@ function Public.on_pre_player_left_game(event)
end
end
function Public.on_player_respawned(event)
local player = game.get_player(event.player_index)
if not (player and player.valid) then
return
end
local player_data = get_player_data(player)
if player_data.died then
player_data.died = nil
end
end
function Public.on_player_died(event)
local player = game.get_player(event.player_index)
if not (player and player.valid) then
return
end
local player_data = get_player_data(player)
player_data.died = true
end
function Public.on_player_changed_position(event)
local active_surface_index = WPT.get('active_surface_index')
if not active_surface_index then
@@ -1363,16 +1335,12 @@ end
local on_player_joined_game = Public.on_player_joined_game
local on_player_left_game = Public.on_player_left_game
local on_player_respawned = Public.on_player_respawned
local on_player_died = Public.on_player_died
local on_research_finished = Public.on_research_finished
local on_player_changed_position = Public.on_player_changed_position
local on_pre_player_left_game = Public.on_pre_player_left_game
Event.add(defines.events.on_player_joined_game, on_player_joined_game)
Event.add(defines.events.on_player_left_game, on_player_left_game)
Event.add(defines.events.on_player_respawned, on_player_respawned)
Event.add(defines.events.on_player_died, on_player_died)
Event.add(defines.events.on_research_finished, on_research_finished)
Event.add(defines.events.on_player_changed_position, on_player_changed_position)
Event.add(defines.events.on_pre_player_left_game, on_pre_player_left_game)
+26
View File
@@ -619,6 +619,10 @@ local function redraw_market_items(gui, player, search_text)
return
end
local players = WPT.get('players')
if not players then
return
end
local trusted = Session.get_trusted_table()
if gui and gui.valid then
@@ -781,6 +785,9 @@ end
local function slider_changed(event)
local player = game.players[event.player_index]
local players = WPT.get('players')
if not players then
return
end
local slider_value
slider_value = players
@@ -821,6 +828,10 @@ local function text_changed(event)
end
local players = WPT.get('players')
if not players then
return
end
local player = game.players[event.player_index]
local data = players[player.index].data
@@ -886,6 +897,9 @@ local function gui_opened(event)
local player_item_count = inventory.get_item_count('coin')
local players = WPT.get('players')
if not players then
return
end
if not players[player.index].data then
players[player.index].data = {}
@@ -983,6 +997,9 @@ end
local function gui_click(event)
local players = WPT.get('players')
if not players then
return
end
local element = event.element
local player = game.players[event.player_index]
@@ -1316,6 +1333,9 @@ end
local function gui_closed(event)
local player = game.players[event.player_index]
local players = WPT.get('players')
if not players then
return
end
local type = event.gui_type
@@ -1330,6 +1350,9 @@ end
local function on_player_changed_position(event)
local players = WPT.get('players')
if not players then
return
end
local player = game.players[event.player_index]
if not players[player.index] then
return
@@ -1868,6 +1891,9 @@ function Public.refresh_gui()
local screen = gui.screen
local player_data = WPT.get('players')
if not players then
return
end
local data = player_data[player.index].data
if screen and data and data.frame then
+8 -10
View File
@@ -31,6 +31,7 @@ local Difficulty = require 'modules.difficulty_vote_by_amount'
local Task = require 'utils.task'
local Token = require 'utils.token'
local Alert = require 'utils.alert'
-- local BottomFrame = require 'comfy_panel.bottom_frame'
local AntiGrief = require 'antigrief'
local Misc = require 'commands.misc'
local Modifiers = require 'player_modifiers'
@@ -131,8 +132,11 @@ function Public.reset_map()
Autostash.insert_into_furnace(true)
Autostash.insert_into_wagon(true)
Autostash.bottom_button(false)
BuriedEnemies.reset()
--[[ BottomFrame.reset()
BottomFrame.activate_custom_buttons(true)
BottomFrame.bottom_right(true) ]]
Poll.reset()
ICW.reset()
IC.reset()
@@ -277,15 +281,9 @@ end
local is_player_valid = function()
local players = game.connected_players
for _, player in pairs(players) do
if player.connected and not player.character or not player.character.valid then
if not player.admin then
local player_data = Functions.get_player_data(player)
if player_data.died then
return
end
player.set_controller {type = defines.controllers.god}
player.create_character()
end
if player.connected and player.controller_type == 2 then
player.set_controller {type = defines.controllers.god}
player.create_character()
end
end
end
+2 -4
View File
@@ -201,10 +201,8 @@ function Public.reset_table()
}
this.market_announce = game.tick + 1200
this.check_heavy_damage = true
--!reset player tables
for _, player in pairs(this.players) do
player.died = false
for k, _ in pairs(this.players) do
this.players[k] = {}
end
end
+49 -17
View File
@@ -3,6 +3,7 @@
local Global = require 'utils.global'
local Event = require 'utils.event'
local BottomFrame = require 'comfy_panel.bottom_frame'
local floor = math.floor
local print_color = {r = 120, g = 255, b = 0}
@@ -11,6 +12,7 @@ local this = {
whitelist = {},
insert_into_furnace = false,
insert_into_wagon = false,
bottom_button = false,
small_radius = 2
}
@@ -537,23 +539,38 @@ local function create_gui_button(player)
else
tooltip = 'Sort your inventory into nearby chests.\nLMB: Everything, excluding quickbar items.\nRMB: Only ores to nearby chests, excluding quickbar items.'
end
local b =
player.gui.top.add(
{
type = 'sprite-button',
sprite = 'item/wooden-chest',
name = 'auto_stash',
tooltip = tooltip
}
)
b.style.font_color = {r = 0.11, g = 0.8, b = 0.44}
b.style.font = 'heading-1'
b.style.minimal_height = 40
b.style.maximal_width = 40
b.style.minimal_width = 38
b.style.maximal_height = 38
b.style.padding = 1
b.style.margin = 0
if this.bottom_button then
local data = BottomFrame.get('bottom_quickbar_button')
-- save it for later use
data.tooltip = tooltip
data.sprite = 'item/wooden-chest'
if data[player.index] then
local f = data[player.index]
if f.frame and f.frame.valid then
f.frame.sprite = 'item/wooden-chest'
f.frame.tooltip = tooltip
end
end
else
local b =
player.gui.top.add(
{
type = 'sprite-button',
sprite = 'item/wooden-chest',
name = 'auto_stash',
tooltip = tooltip
}
)
b.style.font_color = {r = 0.11, g = 0.8, b = 0.44}
b.style.font = 'heading-1'
b.style.minimal_height = 40
b.style.maximal_width = 40
b.style.minimal_width = 38
b.style.maximal_height = 38
b.style.padding = 1
b.style.margin = 0
end
end
local function do_whitelist()
@@ -596,6 +613,13 @@ local function on_gui_click(event)
end
local player = game.players[event.player_index]
local name = 'auto_stash'
if this.bottom_button then
local data = BottomFrame.get('bottom_quickbar_button')
if data[player.index] then
data = data[player.index]
name = data.name
end
end
if event.element.name == name then
auto_stash(player, event)
@@ -618,6 +642,14 @@ function Public.insert_into_wagon(value)
end
end
function Public.bottom_button(value)
if value then
this.bottom_button = value
else
this.bottom_button = false
end
end
Event.on_configuration_changed(do_whitelist)
Event.on_init(do_whitelist)
+2 -3
View File
@@ -40,14 +40,13 @@ local function compute_fullness(player)
end
local function check_burden(event)
local player_modifiers = Modifier.get_table()
local player = game.players[event.player_index]
if not validate_player(player) then
return
end
local fullness = compute_fullness(player)
player_modifiers[player.index].character_running_speed_modifier['randomness'] = 0.3 - fullness
player_modifiers[player.index].character_mining_speed_modifier['randomess'] = 0.3 - fullness
Modifier.update_single_modifier(player, 'character_running_speed_modifier', 'randomness', 0.3 - fullness)
Modifier.update_single_modifier(player, 'character_mining_speed_modifier', 'randomness', 0.3 - fullness)
Modifier.update_player_modifiers(player)
if fullness >= 0.9 and fullness <= 0.901 then
player.print('Maybe you should drop some of that inventory to lessen the burden.', Color.red)
+3 -6
View File
@@ -1,7 +1,5 @@
-- hunger module by mewmew --
require 'player_modifiers'
local P = require 'player_modifiers'
local starve_messages = {' ran out of foodstamps.', ' starved.', ' should not have skipped breakfast today.'}
@@ -101,7 +99,6 @@ local function update_hunger_gui(player)
end
local function hunger_update(player, food_value)
local player_modifiers = P.get_table()
if not player.character then
return
end
@@ -147,11 +144,11 @@ local function hunger_update(player, food_value)
end
if player_hunger_buff[global.player_hunger[player.name]] < 0 then
player_modifiers[player.index].character_running_speed_modifier['hunger'] = player_hunger_buff[global.player_hunger[player.name]] * 0.75
P.update_single_modifier(player, 'character_running_speed_modifier', 'hunger', player_hunger_buff[global.player_hunger[player.name]] * 0.75)
else
player_modifiers[player.index].character_running_speed_modifier['hunger'] = player_hunger_buff[global.player_hunger[player.name]] * 0.15
P.update_single_modifier(player, 'character_running_speed_modifier', 'hunger', player_hunger_buff[global.player_hunger[player.name]] * 0.15)
end
player_modifiers[player.index].character_mining_speed_modifier['hunger'] = player_hunger_buff[global.player_hunger[player.name]]
P.update_single_modifier(player, 'character_mining_speed_modifier', 'hunger', player_hunger_buff[global.player_hunger[player.name]])
P.update_player_modifiers(player)
update_hunger_gui(player)
+20 -24
View File
@@ -13,8 +13,6 @@ VITALITY > character_health_bonus
Modified by Gerkiz *-*
]]
require 'player_modifiers'
local math_random = math.random
local math_sqrt = math.sqrt
local math_floor = math.floor
@@ -145,7 +143,7 @@ local function update_char_button(player)
if not player.gui.top.rpg then
draw_gui_char_button(player)
end
if rpg_t[player.index].points_to_distribute > 0 then
if rpg_t[player.index].points_left > 0 then
player.gui.top.rpg.style.font_color = {245, 0, 0}
else
player.gui.top.rpg.style.font_color = {175, 175, 175}
@@ -155,24 +153,22 @@ end
local function update_player_stats(player)
local player_modifiers = P.get_table()
local strength = rpg_t[player.index].strength - 10
player_modifiers[player.index].character_inventory_slots_bonus['rpg'] = math.round(strength * 0.2, 3)
player_modifiers[player.index].character_mining_speed_modifier['rpg'] = math.round(strength * 0.008, 3)
P.update_single_modifier(player, 'character_inventory_slots_bonus', 'rpg', math.round(strength * 0.2, 3))
P.update_single_modifier(player, 'character_mining_speed_modifier', 'rpg', math.round(strength * 0.008, 3))
local magic = rpg_t[player.index].magic - 10
local v = magic * 0.15
player_modifiers[player.index].character_build_distance_bonus['rpg'] = math.round(v, 3)
player_modifiers[player.index].character_item_drop_distance_bonus['rpg'] = math.round(v, 3)
player_modifiers[player.index].character_reach_distance_bonus['rpg'] = math.round(v, 3)
player_modifiers[player.index].character_loot_pickup_distance_bonus['rpg'] = math.round(v * 0.5, 3)
player_modifiers[player.index].character_item_pickup_distance_bonus['rpg'] = math.round(v * 0.25, 3)
player_modifiers[player.index].character_resource_reach_distance_bonus['rpg'] = math.round(v * 0.15, 3)
P.update_single_modifier(player, 'character_build_distance_bonus', 'rpg', math.round(v, 3))
P.update_single_modifier(player, 'character_item_drop_distance_bonus', 'rpg', math.round(v, 3))
P.update_single_modifier(player, 'character_reach_distance_bonus', 'rpg', math.round(v, 3))
P.update_single_modifier(player, 'character_loot_pickup_distance_bonus', 'rpg', math.round(v * 0.5, 3))
P.update_single_modifier(player, 'character_item_pickup_distance_bonus', 'rpg', math.round(v * 0.25, 3))
P.update_single_modifier(player, 'character_resource_reach_distance_bonus', 'rpg', math.round(v * 0.15, 3))
local dexterity = rpg_t[player.index].dexterity - 10
player_modifiers[player.index].character_running_speed_modifier['rpg'] = math.round(dexterity * 0.002, 3)
player_modifiers[player.index].character_crafting_speed_modifier['rpg'] = math.round(dexterity * 0.015, 3)
player_modifiers[player.index].character_health_bonus['rpg'] = math.round((rpg_t[player.index].vitality - 10) * 6, 3)
P.update_single_modifier(player, 'character_running_speed_modifier', 'rpg', math.round(dexterity * 0.002, 3))
P.update_single_modifier(player, 'character_crafting_speed_modifier', 'rpg', math.round(dexterity * 0.015, 3))
P.update_single_modifier(player, 'character_health_bonus', 'rpg', math.round((rpg_t[player.index].vitality - 10) * 6, 3))
P.update_player_modifiers(player)
end
@@ -222,7 +218,7 @@ end
local function add_gui_increase_stat(element, name, player, width)
local sprite = 'virtual-signal/signal-red'
local symbol = ''
if rpg_t[player.index].points_to_distribute <= 0 then
if rpg_t[player.index].points_left <= 0 then
sprite = 'virtual-signal/signal-black'
end
local e = element.add({type = 'sprite-button', name = name, caption = symbol, sprite = sprite})
@@ -335,7 +331,7 @@ local function draw_gui(player, forced)
add_gui_increase_stat(tt, 'vitality', player)
add_gui_description(tt, 'POINTS TO\nDISTRIBUTE', w1)
local e = add_gui_stat(tt, rpg_t[player.index].points_to_distribute, w2)
local e = add_gui_stat(tt, rpg_t[player.index].points_left, w2)
e.style.font_color = {200, 0, 0}
add_gui_description(tt, ' ', w2)
@@ -500,7 +496,7 @@ local function level_up(player)
return
end
draw_level_text(player)
rpg_t[player.index].points_to_distribute = rpg_t[player.index].points_to_distribute + distribute_points_gain
rpg_t[player.index].points_left = rpg_t[player.index].points_left + distribute_points_gain
update_char_button(player)
table.shuffle_table(rpg_frame_icons)
if player.gui.left.rpg then
@@ -552,7 +548,7 @@ function Public.rpg_reset_player(player)
magic = 10,
dexterity = 10,
vitality = 10,
points_to_distribute = 0,
points_left = 0,
last_floaty_text = visuals_delay,
xp_since_last_floaty_text = 0,
rotated_entity_delay = 0,
@@ -616,11 +612,11 @@ local function on_gui_click(event)
if event.button == defines.mouse_button_type.right then
for a = 1, 5, 1 do
if rpg_t[player.index].points_to_distribute <= 0 then
if rpg_t[player.index].points_left <= 0 then
draw_gui(player, true)
return
end
rpg_t[player.index].points_to_distribute = rpg_t[player.index].points_to_distribute - 1
rpg_t[player.index].points_left = rpg_t[player.index].points_left - 1
rpg_t[player.index][index] = rpg_t[player.index][index] + 1
update_player_stats(player)
end
@@ -628,11 +624,11 @@ local function on_gui_click(event)
return
end
if rpg_t[player.index].points_to_distribute <= 0 then
if rpg_t[player.index].points_left <= 0 then
draw_gui(player, true)
return
end
rpg_t[player.index].points_to_distribute = rpg_t[player.index].points_to_distribute - 1
rpg_t[player.index].points_left = rpg_t[player.index].points_left - 1
rpg_t[player.index][index] = rpg_t[player.index][index] + 1
update_player_stats(player)
draw_gui(player, true)
+6 -6
View File
@@ -117,12 +117,12 @@ local function level_up(player)
return
end
RPG_GUI.draw_level_text(player)
rpg_t[player.index].points_to_distribute = rpg_t[player.index].points_to_distribute + distribute_points_gain
rpg_t[player.index].points_left = rpg_t[player.index].points_left + distribute_points_gain
if rpg_t[player.index].allocate_index ~= 1 then
local node = rpg_t[player.index].allocate_index
local index = names[node]:lower()
rpg_t[player.index][index] = rpg_t[player.index][index] + distribute_points_gain
rpg_t[player.index].points_to_distribute = rpg_t[player.index].points_to_distribute - distribute_points_gain
rpg_t[player.index].points_left = rpg_t[player.index].points_left - distribute_points_gain
if not rpg_t[player.index].reset then
rpg_t[player.index].total = rpg_t[player.index].total + distribute_points_gain
end
@@ -517,7 +517,7 @@ function Public.rpg_reset_player(player, one_time_reset)
total = 0
end
local old_level = rpg_t[player.index].level
local old_points_to_distribute = rpg_t[player.index].points_to_distribute
local old_points_to_distribute = rpg_t[player.index].points_left
local old_xp = rpg_t[player.index].xp
rpg_t[player.index] = {
level = 1,
@@ -539,7 +539,7 @@ function Public.rpg_reset_player(player, one_time_reset)
enable_entity_spawn = false,
health_bar = rpg_t[player.index].health_bar,
mana_bar = rpg_t[player.index].mana_bar,
points_to_distribute = 0,
points_left = 0,
last_floaty_text = visuals_delay,
xp_since_last_floaty_text = 0,
reset = true,
@@ -551,7 +551,7 @@ function Public.rpg_reset_player(player, one_time_reset)
stone_path = false,
one_punch = false
}
rpg_t[player.index].points_to_distribute = old_points_to_distribute + total
rpg_t[player.index].points_left = old_points_to_distribute + total
rpg_t[player.index].xp = old_xp
rpg_t[player.index].level = old_level
else
@@ -573,7 +573,7 @@ function Public.rpg_reset_player(player, one_time_reset)
flame_boots = false,
explosive_bullets = false,
enable_entity_spawn = false,
points_to_distribute = 0,
points_left = 0,
last_floaty_text = visuals_delay,
xp_since_last_floaty_text = 0,
reset = false,
+29 -41
View File
@@ -48,7 +48,7 @@ function Public.update_char_button(player)
if not player.gui.top[draw_main_frame_name] then
Public.draw_gui_char_button(player)
end
if rpg_t[player.index].points_to_distribute > 0 then
if rpg_t[player.index].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}
@@ -119,7 +119,7 @@ local function add_gui_increase_stat(element, name, player)
local rpg_t = RPG.get('rpg_t')
local sprite = 'virtual-signal/signal-red'
local symbol = ''
if rpg_t[player.index].points_to_distribute <= 0 then
if rpg_t[player.index].points_left <= 0 then
sprite = 'virtual-signal/signal-black'
end
local e = element.add({type = 'sprite-button', name = name, caption = symbol, sprite = sprite})
@@ -275,7 +275,7 @@ local function draw_main_frame(player, location)
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[player.index].points_to_distribute, w2, nil, nil, {200, 0, 0})
add_gui_stat(left_bottom_table, rpg_t[player.index].points_left, w2, nil, nil, {200, 0, 0})
add_gui_description(left_bottom_table, ' ', w2)
add_gui_description(left_bottom_table, ' ', 40)
@@ -476,20 +476,19 @@ end
function Public.update_player_stats(player)
local rpg_extra = RPG.get('rpg_extra')
local rpg_t = RPG.get('rpg_t')
local player_modifiers = P.get_table()
local strength = rpg_t[player.index].strength - 10
player_modifiers[player.index].character_inventory_slots_bonus['rpg'] = math.round(strength * 0.2, 3)
player_modifiers[player.index].character_mining_speed_modifier['rpg'] = math.round(strength * 0.007, 3)
player_modifiers[player.index].character_maximum_following_robot_count_bonus['rpg'] = math.round(strength / 2 * 0.03, 3)
P.update_single_modifier(player, 'character_inventory_slots_bonus', 'rpg', math.round(strength * 0.2, 3))
P.update_single_modifier(player, 'character_mining_speed_modifier', 'rpg', math.round(strength * 0.007, 3))
P.update_single_modifier(player, 'character_maximum_following_robot_count_bonus', 'rpg', math.round(strength / 2 * 0.03, 3))
local magic = rpg_t[player.index].magicka - 10
local v = magic * 0.22
player_modifiers[player.index].character_build_distance_bonus['rpg'] = math.min(60, math.round(v * 0.25, 3))
player_modifiers[player.index].character_item_drop_distance_bonus['rpg'] = math.min(60, math.round(v * 0.25, 3))
player_modifiers[player.index].character_reach_distance_bonus['rpg'] = math.min(60, math.round(v * 0.25, 3))
player_modifiers[player.index].character_loot_pickup_distance_bonus['rpg'] = math.min(20, math.round(v * 0.22, 3))
player_modifiers[player.index].character_item_pickup_distance_bonus['rpg'] = math.min(20, math.round(v * 0.25, 3))
player_modifiers[player.index].character_resource_reach_distance_bonus['rpg'] = math.min(20, math.round(v * 0.15, 3))
P.update_single_modifier(player, 'character_build_distance_bonus', 'rpg', math.min(60, math.round(v * 0.25, 3)))
P.update_single_modifier(player, 'character_item_drop_distance_bonus', 'rpg', math.min(60, math.round(v * 0.25, 3)))
P.update_single_modifier(player, 'character_reach_distance_bonus', 'rpg', math.min(60, math.round(v * 0.25, 3)))
P.update_single_modifier(player, 'character_loot_pickup_distance_bonus', 'rpg', math.min(20, math.round(v * 0.22, 3)))
P.update_single_modifier(player, 'character_item_pickup_distance_bonus', 'rpg', math.min(20, math.round(v * 0.25, 3)))
P.update_single_modifier(player, 'character_resource_reach_distance_bonus', 'rpg', math.min(20, math.round(v * 0.15, 3)))
if rpg_t[player.index].mana_max >= rpg_extra.mana_limit then
rpg_t[player.index].mana_max = rpg_extra.mana_limit
else
@@ -497,11 +496,9 @@ function Public.update_player_stats(player)
end
local dexterity = rpg_t[player.index].dexterity - 10
player_modifiers[player.index].character_running_speed_modifier['rpg'] = math.round(dexterity * 0.0015, 3)
player_modifiers[player.index].character_crafting_speed_modifier['rpg'] = math.round(dexterity * 0.015, 3)
player_modifiers[player.index].character_health_bonus['rpg'] = math.round((rpg_t[player.index].vitality - 10) * 6, 3)
P.update_single_modifier(player, 'character_running_speed_modifier', 'rpg', math.round(dexterity * 0.0015, 3))
P.update_single_modifier(player, 'character_crafting_speed_modifier', 'rpg', math.round(dexterity * 0.015, 3))
P.update_single_modifier(player, 'character_health_bonus', 'rpg', math.round((rpg_t[player.index].vitality - 10) * 6, 3))
P.update_player_modifiers(player)
end
@@ -559,7 +556,6 @@ Gui.on_click(
local screen = player.gui.screen
local frame = screen[settings_frame_name]
local player_modifiers = P.get_table()
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
@@ -624,39 +620,31 @@ Gui.on_click(
end
if movement_speed_gui_input and movement_speed_gui_input.valid then
if not player_modifiers.disabled_modifier[player.index] then
player_modifiers.disabled_modifier[player.index] = {}
end
if not movement_speed_gui_input.state then
player_modifiers.disabled_modifier[player.index].character_running_speed_modifier = true
P.disable_single_modifier(player, 'character_running_speed_modifier', true)
P.update_player_modifiers(player)
elseif movement_speed_gui_input.state then
player_modifiers.disabled_modifier[player.index].character_running_speed_modifier = false
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 player_modifiers.disabled_modifier[player.index] then
player_modifiers.disabled_modifier[player.index] = {}
end
if not magic_pickup_gui_input.state then
player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus = true
player_modifiers.disabled_modifier[player.index].character_build_distance_bonus = true
player_modifiers.disabled_modifier[player.index].character_item_drop_distance_bonus = true
player_modifiers.disabled_modifier[player.index].character_reach_distance_bonus = true
player_modifiers.disabled_modifier[player.index].character_loot_pickup_distance_bonus = true
player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus = true
player_modifiers.disabled_modifier[player.index].character_resource_reach_distance_bonus = true
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
player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus = false
player_modifiers.disabled_modifier[player.index].character_build_distance_bonus = false
player_modifiers.disabled_modifier[player.index].character_item_drop_distance_bonus = false
player_modifiers.disabled_modifier[player.index].character_reach_distance_bonus = false
player_modifiers.disabled_modifier[player.index].character_loot_pickup_distance_bonus = false
player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus = false
player_modifiers.disabled_modifier[player.index].character_resource_reach_distance_bonus = false
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
+6 -6
View File
@@ -78,11 +78,11 @@ local function on_gui_click(event)
end
if shift then
local count = rpg_t.points_to_distribute
local count = rpg_t.points_left
if not count then
return
end
rpg_t.points_to_distribute = 0
rpg_t.points_left = 0
rpg_t[index] = rpg_t[index] + count
if not rpg_t.reset then
rpg_t.total = rpg_t.total + count
@@ -91,11 +91,11 @@ local function on_gui_click(event)
RPG_GUI.update_player_stats(player)
elseif event.button == defines.mouse_button_type.right then
for _ = 1, points_per_level, 1 do
if rpg_t.points_to_distribute <= 0 then
if rpg_t.points_left <= 0 then
RPG_GUI.toggle(player, true)
return
end
rpg_t.points_to_distribute = rpg_t.points_to_distribute - 1
rpg_t.points_left = rpg_t.points_left - 1
rpg_t[index] = rpg_t[index] + 1
if not rpg_t.reset then
rpg_t.total = rpg_t.total + 1
@@ -106,11 +106,11 @@ local function on_gui_click(event)
return
end
if rpg_t.points_to_distribute <= 0 then
if rpg_t.points_left <= 0 then
RPG_GUI.toggle(player, true)
return
end
rpg_t.points_to_distribute = rpg_t.points_to_distribute - 1
rpg_t.points_left = rpg_t.points_left - 1
rpg_t[index] = rpg_t[index] + 1
if not rpg_t.reset then
rpg_t.total = rpg_t.total + 1
+6 -5
View File
@@ -129,7 +129,6 @@ function Public.spell_gui_settings(player)
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()
@@ -263,8 +262,9 @@ function Public.extra_settings(player)
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
local character_item_pickup_distance_bonus = P.get_single_disabled_modifier(player, 'character_item_pickup_distance_bonus')
if character_item_pickup_distance_bonus then
reach_mod = false
else
reach_mod = true
end
@@ -290,8 +290,9 @@ function Public.extra_settings(player)
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
local character_running_speed_modifier = P.get_single_disabled_modifier(player, 'character_running_speed_modifier')
if character_running_speed_modifier then
speed_mod = false
else
speed_mod = true
end
+14
View File
@@ -311,6 +311,9 @@ end
local function on_gui_click(event)
local player = game.players[event.player_index]
if not this.data[player.index] then
return
end
local element = event.element
@@ -371,6 +374,9 @@ local function on_gui_click(event)
end
local function gui_closed(event)
local player = game.players[event.player_index]
if not this.data[player.index] then
return
end
local type = event.gui_type
@@ -385,6 +391,10 @@ end
local function on_pre_player_left_game(event)
local player = game.players[event.player_index]
if not this.data[player.index] then
return
end
close_player_inventory(player)
end
@@ -394,6 +404,10 @@ local function update_gui(event)
return
end
if not this.data[player.index] then
return
end
local sourcePlayer = watching_inventory(player)
local success, tab = last_tab(player)
+3 -4
View File
@@ -14,10 +14,9 @@ local function update_player_modifiers(player)
end
local m = ((global.hydration[player.index] - 100) * 0.01) + 0.2
local modifiers = Player_modifiers.get_table()
modifiers[player.index].character_mining_speed_modifier['thirst'] = m
modifiers[player.index].character_running_speed_modifier['thirst'] = m
modifiers[player.index].character_crafting_speed_modifier['thirst'] = m
Player_modifiers.update_single_modifier(player, 'character_mining_speed_modifier', 'thirst', m)
Player_modifiers.update_single_modifier(player, 'character_running_speed_modifier', 'thirst', m)
Player_modifiers.update_single_modifier(player, 'character_crafting_speed_modifier', 'thirst', m)
Player_modifiers.update_player_modifiers(player)
end
+6 -5
View File
@@ -369,7 +369,7 @@ local function set_enemy_evolution()
local threat = WD.get('threat')
local evolution_factor = wave_number * 0.001
local biter_h_boost = 1
--local damage_increase = 0
local enemy = game.forces.enemy
if evolution_factor > 1 then
evolution_factor = 1
@@ -383,12 +383,13 @@ local function set_enemy_evolution()
if biter_h_boost <= 1 then
biter_h_boost = 1
end
--damage_increase = math_round(damage_increase + threat * 0.0000025, 3)
BiterHealthBooster.set('biter_health_boost', biter_h_boost)
--game.forces.enemy.set_ammo_damage_modifier("melee", damage_increase)
--game.forces.enemy.set_ammo_damage_modifier("biological", damage_increase)
game.forces.enemy.evolution_factor = evolution_factor
if enemy.evolution_factor == 1 and evolution_factor == 1 then
return
end
enemy.evolution_factor = evolution_factor
end
local function can_units_spawn()
+108 -22
View File
@@ -4,6 +4,7 @@
local Global = require 'utils.global'
local this = {
modifiers = {},
disabled_modifier = {}
}
@@ -21,28 +22,28 @@ function Public.get_table()
end
local modifiers = {
'character_build_distance_bonus',
'character_crafting_speed_modifier',
'character_health_bonus',
'character_inventory_slots_bonus',
'character_item_drop_distance_bonus',
'character_item_pickup_distance_bonus',
'character_loot_pickup_distance_bonus',
'character_mining_speed_modifier',
'character_reach_distance_bonus',
'character_resource_reach_distance_bonus',
'character_maximum_following_robot_count_bonus',
'character_running_speed_modifier'
[1] = 'character_build_distance_bonus',
[2] = 'character_crafting_speed_modifier',
[3] = 'character_health_bonus',
[4] = 'character_inventory_slots_bonus',
[5] = 'character_item_drop_distance_bonus',
[6] = 'character_item_pickup_distance_bonus',
[7] = 'character_loot_pickup_distance_bonus',
[8] = 'character_mining_speed_modifier',
[9] = 'character_reach_distance_bonus',
[10] = 'character_resource_reach_distance_bonus',
[11] = 'character_maximum_following_robot_count_bonus',
[12] = 'character_running_speed_modifier'
}
function Public.update_player_modifiers(player)
for _, modifier in pairs(modifiers) do
for k, modifier in pairs(modifiers) do
local sum_value = 0
for _, value in pairs(this[player.index][modifier]) do
for _, value in pairs(this.modifiers[player.index][k]) do
sum_value = sum_value + value
end
if player.character then
if this.disabled_modifier[player.index] and this.disabled_modifier[player.index][modifier] then
if this.disabled_modifier[player.index] and this.disabled_modifier[player.index][k] then
player[modifier] = 0
else
player[modifier] = sum_value
@@ -51,14 +52,99 @@ function Public.update_player_modifiers(player)
end
end
function Public.update_single_modifier(player, modifier, category, value)
if not this.modifiers[player.index] then
return
end
if not modifier then
return
end
for k, _ in pairs(this.modifiers[player.index]) do
if modifiers[k] == modifier and this.modifiers[player.index][k] then
if category then
if not this.modifiers[player.index][k][category] then
this.modifiers[player.index][k][category] = {}
end
this.modifiers[player.index][k][category] = value
else
this.modifiers[player.index][k] = value
end
end
end
end
function Public.disable_single_modifier(player, modifier, value)
if not this.disabled_modifier[player.index] then
return
end
if not modifier then
return
end
for k, _ in pairs(modifiers) do
if modifiers[k] == modifier then
if value then
this.disabled_modifier[player.index][k] = value
else
this.disabled_modifier[player.index][k] = nil
end
end
end
end
function Public.get_single_modifier(player, modifier, category)
if not this.modifiers[player.index] then
return
end
if not modifier then
return
end
for k, _ in pairs(this.modifiers[player.index]) do
if modifiers[k] == modifier then
if category then
if this.modifiers[player.index][k] and this.modifiers[player.index][k][category] then
return this.modifiers[player.index][k][category]
end
else
if this.modifiers[player.index][k] then
return this.modifiers[player.index][k]
end
end
return false
end
end
return false
end
function Public.get_single_disabled_modifier(player, modifier, category)
if not this.disabled_modifier[player.index] then
return
end
if not modifier then
return
end
for k, _ in pairs(this.disabled_modifier[player.index]) do
if modifiers[k] == modifier then
if category then
if this.disabled_modifier[player.index][k] and this.disabled_modifier[player.index][k][category] then
return this.disabled_modifier[player.index][k][category]
end
else
if this.disabled_modifier[player.index][k] then
return this.disabled_modifier[player.index][k]
end
end
return false
end
end
return false
end
function Public.reset_player_modifiers(player)
if player and player.valid then
this[player.index] = {}
if this.disabled_modifier[player.index] then
this.disabled_modifier[player.index] = {}
end
for _, modifier in pairs(modifiers) do
this[player.index][modifier] = {}
this.modifiers[player.index] = {}
this.disabled_modifier[player.index] = {}
for k, _ in pairs(modifiers) do
this.modifiers[player.index][k] = {}
end
Public.update_player_modifiers(player)
end
@@ -66,7 +152,7 @@ end
local function on_player_joined_game(event)
local player = game.get_player(event.player_index)
if this[player.index] then
if this.modifiers[player.index] then
Public.update_player_modifiers(player)
return
end
+1 -2
View File
@@ -117,8 +117,7 @@ end
local function on_player_joined_game(event)
local player = game.players[event.player_index]
local modifiers = Player_modifiers.get_table()
modifiers[player.index].character_mining_speed_modifier['caves'] = 3
Player_modifiers.update_single_modifier(player, 'character_mining_speed_modifier', 'caves', 3)
Player_modifiers.update_player_modifiers(player)
end
+23 -6
View File
@@ -10,13 +10,15 @@ local Gui = {}
local data = {}
local element_map = {}
local settings = {}
Gui.token =
Global.register(
{data = data, element_map = element_map},
{data = data, element_map = element_map, settings = settings},
function(tbl)
data = tbl.data
element_map = tbl.element_map
settings = tbl.settings
end
)
@@ -115,13 +117,16 @@ function Gui.clear(element)
element.clear()
end
--[[
local function clear_invalid_data()
for _, player in pairs(game.connected_players) do
local function clear_invalid_data()
if settings.disable_clear_invalid_data then
return
end
for _, player in pairs(game.players) do
local player_index = player.index
local values = data[player_index]
if values then
for _, element in next, values do
for k, element in next, values do
if type(element) == 'table' then
for key, obj in next, element do
if type(obj) == 'table' and obj.valid ~= nil then
@@ -130,13 +135,15 @@ end
end
end
end
if type(element) == 'userdata' and not element.valid then
values[k] = nil
end
end
end
end
end
end
Event.on_nth_tick(300, clear_invalid_data)
]]
local function handler_factory(event_id)
local handlers
@@ -195,6 +202,16 @@ local function custom_raise(handlers, element, player)
handler({element = element, player = player})
end
-- Disabled the handler so it does not clean then data table of invalid data.
function Gui.set_disable_clear_invalid_data(value)
settings.disable_clear_invalid_data = value or false
end
-- Gets state if the cleaner handler is active or false
function Gui.get_disable_clear_invalid_data()
return settings.disable_clear_invalid_data
end
-- Register a handler for the on_gui_checked_state_changed event for LuaGuiElements with element_name.
-- Can only have one handler per element name.
-- Guarantees that the element and the player are valid when calling the handler.