1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-02-07 13:31:40 +02:00

Merge pull request #70 from ComfyFactory/refactor

refactor of modules
This commit is contained in:
Gerkiz 2021-05-25 22:21:55 +02:00 committed by GitHub
commit 212d6094cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
36 changed files with 970 additions and 742 deletions

View File

@ -22,7 +22,7 @@ local function jail(player, source_player)
if player.name == source_player.name then if player.name == source_player.name then
return player.print("You can't select yourself!", {r = 1, g = 0.5, b = 0.1}) return player.print("You can't select yourself!", {r = 1, g = 0.5, b = 0.1})
end end
Jailed.try_ul_data(player.name, true, source_player.name) Jailed.try_ul_data(player.name, true, source_player.name, 'Jailed by script!')
end end
local function free(player, source_player) local function free(player, source_player)

View File

@ -7,7 +7,6 @@ local Gui = require 'utils.gui'
local this = { local this = {
players = {}, players = {},
activate_custom_buttons = false, activate_custom_buttons = false,
bottom_right = false,
bottom_quickbar_button = {} bottom_quickbar_button = {}
} }
@ -56,13 +55,20 @@ function Public.set(key, value)
end end
end end
function Public.clear_data(player)
this.players[player.index] = nil
this.bottom_quickbar_button[player.index] = nil
end
function Public.reset() function Public.reset()
local players = game.players local players = game.players
for i = 1, #players do for i = 1, #players do
local player = players[i] local player = players[i]
if not player.connected then if player and player.valid then
this.players[player.index] = nil if not player.connected then
this.bottom_quickbar_button[player.index] = nil this.players[player.index] = nil
this.bottom_quickbar_button[player.index] = nil
end
end end
end end
end end
@ -75,34 +81,41 @@ local function destroy_frame(player)
if frame and frame.valid then if frame and frame.valid then
frame.destroy() frame.destroy()
end end
this.bottom_quickbar_button[player.index] = nil
end end
local function create_frame(player, rebuild) local function create_frame(player, alignment, location, portable)
local gui = player.gui local gui = player.gui
local frame = gui.screen[bottom_guis_frame] local frame = gui.screen[bottom_guis_frame]
if frame and frame.valid then if frame and frame.valid then
if rebuild then destroy_frame(player)
frame.destroy()
else
return frame
end
end end
alignment = alignment or 'vertical'
frame = frame =
player.gui.screen.add { player.gui.screen.add {
type = 'frame', type = 'frame',
name = bottom_guis_frame, name = bottom_guis_frame,
direction = 'vertical' direction = alignment
} }
frame.style.padding = 3 frame.style.padding = 3
frame.style.minimal_height = 96
frame.style.top_padding = 4 frame.style.top_padding = 4
if alignment == 'vertical' then
frame.style.minimal_height = 96
end
frame.location = location
if portable then
frame.caption = ''
end
global.frame = frame
local inner_frame = local inner_frame =
frame.add { frame.add {
type = 'frame', type = 'frame',
direction = 'vertical' direction = alignment
} }
inner_frame.style = 'quick_bar_inner_panel' inner_frame.style = 'quick_bar_inner_panel'
@ -131,30 +144,51 @@ local function create_frame(player, rebuild)
return frame return frame
end end
local function set_location(player) local function set_location(player, state)
local frame = create_frame(player) local data = Public.get_player_data(player)
local alignment = 'vertical'
local location
local resolution = player.display_resolution local resolution = player.display_resolution
local scale = player.display_scale local scale = player.display_scale
if this.players[player.index] and this.players[player.index].bottom_left then if state == 'bottom_left' then
frame.location = { if data.above then
x = (resolution.width / 2) - ((54 + 445) * scale), location = {
y = (resolution.height - (96 * scale)) x = (resolution.width / 2) - ((259) * scale),
} y = (resolution.height - (150 * scale))
return }
end alignment = 'horizontal'
else
if this.bottom_right then location = {
frame.location = { x = (resolution.width / 2) - ((54 + 444) * scale),
y = (resolution.height - (96 * scale))
}
end
data.bottom_state = 'bottom_left'
elseif state == 'bottom_right' then
if data.above then
location = {
x = (resolution.width / 2) - ((-376) * scale),
y = (resolution.height - (150 * scale))
}
alignment = 'horizontal'
else
location = {
x = (resolution.width / 2) - ((54 + -528) * scale),
y = (resolution.height - (96 * scale))
}
end
data.bottom_state = 'bottom_right'
else
Public.get_player_data(player, true)
location = {
x = (resolution.width / 2) - ((54 + -528) * scale), x = (resolution.width / 2) - ((54 + -528) * scale),
y = (resolution.height - (96 * scale)) y = (resolution.height - (96 * scale))
} }
else
frame.location = {
x = (resolution.width / 2) - ((54 + 445) * scale),
y = (resolution.height - (96 * scale))
}
end end
create_frame(player, alignment, location, data.portable)
end end
--- Activates the custom buttons --- Activates the custom buttons
@ -172,16 +206,6 @@ function Public.is_custom_buttons_enabled()
return this.activate_custom_buttons return this.activate_custom_buttons
end end
--- Sets the buttons to be aligned bottom right
---@param boolean
function Public.bottom_right(value)
if value then
this.bottom_right = value
else
this.bottom_right = false
end
end
Gui.on_click( Gui.on_click(
clear_corpse_button_name, clear_corpse_button_name,
function(event) function(event)
@ -219,19 +243,6 @@ Event.add(
end end
) )
Event.add(
defines.events.on_player_died,
function(event)
local player = game.get_player(event.player_index)
if this.activate_custom_buttons then
local frame = player.gui.screen[bottom_guis_frame]
if frame and frame.valid then
frame.destroy()
end
end
end
)
Event.add( Event.add(
defines.events.on_player_display_scale_changed, defines.events.on_player_display_scale_changed,
function(event) function(event)
@ -247,6 +258,7 @@ Event.add(
function(event) function(event)
local player = game.get_player(event.player_index) local player = game.get_player(event.player_index)
destroy_frame(player) destroy_frame(player)
Public.clear_data(player)
end end
) )

View File

@ -16,7 +16,9 @@ local Public = {}
local this = { local this = {
gui_config = { gui_config = {
spaghett = {}, spaghett = {
undo = {}
},
poll_trusted = false poll_trusted = false
} }
} }
@ -122,20 +124,47 @@ local functions = {
game.players[event.player_index].spectator = false game.players[event.player_index].spectator = false
end end
end, end,
['comfy_panel_bottom_right_frame'] = function(event) ['comfy_panel_bottom_location'] = function(event)
local player = game.get_player(event.player_index) local player = game.get_player(event.player_index)
if event.element.switch_state == 'left' then if event.element.switch_state == 'left' then
local bottom_frame = BottomFrame.get_player_data(player) BottomFrame.set_location(player, 'bottom_left')
if not bottom_frame then
return
end
bottom_frame.bottom_left = true
BottomFrame.set_location(player)
else else
BottomFrame.get_player_data(player, true) BottomFrame.set_location(player, 'bottom_right')
BottomFrame.set_location(player)
end end
end, end,
['comfy_panel_middle_location'] = function(event)
local player = game.get_player(event.player_index)
local data = BottomFrame.get_player_data(player)
if event.element.switch_state == 'left' then
data.above = true
data.portable = false
else
data.above = false
data.portable = false
end
if not data.bottom_state then
data.bottom_state = 'bottom_right'
end
BottomFrame.set_location(player, data.bottom_state)
end,
['comfy_panel_portable_button'] = function(event)
local player = game.get_player(event.player_index)
local data = BottomFrame.get_player_data(player)
if event.element.switch_state == 'left' then
data.above = false
data.portable = true
else
data.portable = false
data.above = false
end
if not data.bottom_state then
data.bottom_state = 'bottom_right'
end
BottomFrame.set_location(player, data.bottom_state)
end,
['comfy_panel_auto_hotbar_switch'] = function(event) ['comfy_panel_auto_hotbar_switch'] = function(event)
if event.element.switch_state == 'left' then if event.element.switch_state == 'left' then
global.auto_hotbar_enabled[event.player_index] = true global.auto_hotbar_enabled[event.player_index] = true
@ -345,6 +374,7 @@ local function build_config_gui(data)
} }
local scroll_style = scroll_pane.style local scroll_style = scroll_pane.style
scroll_style.vertically_squashable = true scroll_style.vertically_squashable = true
scroll_style.minimal_height = 350
scroll_style.bottom_padding = 2 scroll_style.bottom_padding = 2
scroll_style.left_padding = 2 scroll_style.left_padding = 2
scroll_style.right_padding = 2 scroll_style.right_padding = 2
@ -395,18 +425,51 @@ local function build_config_gui(data)
end end
if BottomFrame.is_custom_buttons_enabled() then if BottomFrame.is_custom_buttons_enabled() then
label = scroll_pane.add({type = 'label', caption = 'Bottom Buttons Settings'})
label.style.font = 'default-bold'
label.style.padding = 0
label.style.left_padding = 10
label.style.top_padding = 10
label.style.horizontal_align = 'left'
label.style.vertical_align = 'bottom'
label.style.font_color = Color.white_smoke
scroll_pane.add({type = 'line'})
switch_state = 'right' switch_state = 'right'
local bottom_frame = BottomFrame.get('players') local bottom_frame = BottomFrame.get_player_data(player)
if bottom_frame[player.index] then if bottom_frame and bottom_frame.bottom_state == 'bottom_left' then
switch_state = 'left' switch_state = 'left'
end end
add_switch( add_switch(
scroll_pane, scroll_pane,
switch_state, switch_state,
'comfy_panel_bottom_right_frame', 'comfy_panel_bottom_location',
'Button Location', 'Position - bottom',
'Toggle to select if you want the bottom button on the right side or the left side.' 'Toggle to select if you want the bottom button on the left side or the right side.'
) )
scroll_pane.add({type = 'line'})
switch_state = 'right'
if bottom_frame and bottom_frame.above then
switch_state = 'left'
end
add_switch(
scroll_pane,
switch_state,
'comfy_panel_middle_location',
'Position - middle',
'Toggle to select if you want the bottom button above the quickbar or the side of the quickbar.'
)
scroll_pane.add({type = 'line'})
switch_state = 'right'
if bottom_frame and bottom_frame.portable then
switch_state = 'left'
end
add_switch(scroll_pane, switch_state, 'comfy_panel_portable_button', 'Position - portable', 'Toggle to select if you want the bottom button to be portable or not.')
scroll_pane.add({type = 'line'}) scroll_pane.add({type = 'line'})
end end

View File

@ -247,6 +247,7 @@ local function on_gui_click(event)
end end
Event.add(defines.events.on_player_joined_game, on_player_joined_game) Event.add(defines.events.on_player_joined_game, on_player_joined_game)
Event.add(defines.events.on_player_created, on_player_joined_game)
Event.add(defines.events.on_gui_click, on_gui_click) Event.add(defines.events.on_gui_click, on_gui_click)
return Public return Public

View File

@ -805,6 +805,7 @@ local function tick()
end end
Event.add(defines.events.on_player_joined_game, player_joined) Event.add(defines.events.on_player_joined_game, player_joined)
Event.add(defines.events.on_player_created, player_joined)
Event.on_nth_tick(60, tick) Event.on_nth_tick(60, tick)
Gui.on_click(main_button_name, toggle) Gui.on_click(main_button_name, toggle)

View File

@ -250,13 +250,13 @@ commands.add_command(
game.print('[CREATIVE] ' .. player.name .. ' has activated creative-mode!', Color.warning) game.print('[CREATIVE] ' .. player.name .. ' has activated creative-mode!', Color.warning)
Server.to_discord_bold(table.concat {'[Creative] ' .. player.name .. ' has activated creative-mode!'}) Server.to_discord_bold(table.concat {'[Creative] ' .. player.name .. ' has activated creative-mode!'})
for k, v in pairs(game.connected_players) do for k, _player in pairs(game.connected_players) do
if v.character ~= nil then if _player.character ~= nil then
if v.get_inventory(defines.inventory.character_armor) then if _player.get_inventory(defines.inventory.character_armor) then
v.get_inventory(defines.inventory.character_armor).clear() _player.get_inventory(defines.inventory.character_armor).clear()
end end
v.insert {name = 'power-armor-mk2', count = 1} _player.insert {name = 'power-armor-mk2', count = 1}
local p_armor = v.get_inventory(5)[1].grid local p_armor = _player.get_inventory(5)[1].grid
if p_armor and p_armor.valid then if p_armor and p_armor.valid then
p_armor.put({name = 'fusion-reactor-equipment'}) p_armor.put({name = 'fusion-reactor-equipment'})
p_armor.put({name = 'fusion-reactor-equipment'}) p_armor.put({name = 'fusion-reactor-equipment'})
@ -282,9 +282,9 @@ commands.add_command(
Modifiers.update_single_modifier(player, 'character_mining_speed_modifier', 'creative', 50) 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_health_bonus', 'creative', 2000)
Modifiers.update_single_modifier(player, 'character_crafting_speed_modifier', 'creative', 50) 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') _player.character_inventory_slots_bonus = Modifiers.get_single_modifier(player, 'character_inventory_slots_bonus', 'creative')
v.insert {name = _k, count = _v.stack_size} _player.insert {name = _k, count = _v.stack_size}
v.print('[CREATIVE] Inserted all base items.', Color.success) _player.print('[CREATIVE] Inserted all base items.', Color.success)
Modifiers.update_player_modifiers(player) Modifiers.update_player_modifiers(player)
end end
end end
@ -442,15 +442,14 @@ function Public.insert_all_items(player)
end end
local item = game.item_prototypes local item = game.item_prototypes
local i = 0 local i = 0
local p_modifer = Modifiers.get_table()
for _k, _v in pairs(item) do for _k, _v in pairs(item) do
i = i + 1 i = i + 1
if _k and _v.type ~= 'mining-tool' then if _k and _v.type ~= 'mining-tool' then
p_modifer[player.index].character_inventory_slots_bonus['creative'] = tonumber(i) Modifiers.update_single_modifier(player, 'character_inventory_slots_bonus', 'creative', tonumber(i))
p_modifer[player.index].character_mining_speed_modifier['creative'] = 50 Modifiers.update_single_modifier(player, 'character_mining_speed_modifier', 'creative', 50)
p_modifer[player.index].character_health_bonus['creative'] = 2000 Modifiers.update_single_modifier(player, 'character_health_bonus', 'creative', 2000)
p_modifer[player.index].character_crafting_speed_modifier['creative'] = 50 Modifiers.update_single_modifier(player, 'character_crafting_speed_modifier', 'creative', 50)
player.character_inventory_slots_bonus = p_modifer[player.index].character_inventory_slots_bonus['creative'] player.character_inventory_slots_bonus = Modifiers.get_single_modifier(player, 'character_inventory_slots_bonus', 'creative')
player.insert {name = _k, count = _v.stack_size} player.insert {name = _k, count = _v.stack_size}
player.print('[CREATIVE] Inserted all base items.', Color.success) player.print('[CREATIVE] Inserted all base items.', Color.success)
Modifiers.update_player_modifiers(player) Modifiers.update_player_modifiers(player)

View File

@ -1,6 +1,4 @@
local RPG_F = require 'modules.rpg.functions' local RPG = require 'modules.rpg.main'
local RPG_T = require 'modules.rpg.table'
--local RPG_S = require "modules.rpg.settings"
local BiterHealthBooster = require 'modules.biter_health_booster_v2' local BiterHealthBooster = require 'modules.biter_health_booster_v2'
local Alert = require 'utils.alert' local Alert = require 'utils.alert'
local DungeonsTable = require 'maps.dungeons.table' local DungeonsTable = require 'maps.dungeons.table'
@ -167,9 +165,9 @@ local function spawn_boss(arena, biter, level)
end end
local function hide_rpg(player, show) local function hide_rpg(player, show)
local rpg_button = RPG_T.draw_main_frame_name local rpg_button = RPG.draw_main_frame_name
local rpg_frame = RPG_T.main_frame_name local rpg_frame = RPG.main_frame_name
local rpg_settings = RPG_T.settings_frame_name local rpg_settings = RPG.settings_frame_name
local rpg_b = player.gui.top[rpg_button] local rpg_b = player.gui.top[rpg_button]
local rpg_f = player.gui.screen[rpg_frame] local rpg_f = player.gui.screen[rpg_frame]
@ -196,7 +194,7 @@ local function teleport_player_out(arena, player)
local arenatable = DungeonsTable.get_arenatable() local arenatable = DungeonsTable.get_arenatable()
local surface = arenatable.previous_position[arena].surface local surface = arenatable.previous_position[arena].surface
local position = arenatable.previous_position[arena].position local position = arenatable.previous_position[arena].position
local rpg = RPG_T.get('rpg_t') local rpg = RPG.get('rpg_t')
rpg[player.index].one_punch = true rpg[player.index].one_punch = true
hide_rpg(player, true) hide_rpg(player, true)
player.teleport(surface.find_non_colliding_position('character', position, 20, 0.5), surface) player.teleport(surface.find_non_colliding_position('character', position, 20, 0.5), surface)
@ -213,7 +211,7 @@ local function teleport_player_in(arena, player)
arenatable.previous_position[arena].position = player.position arenatable.previous_position[arena].position = player.position
arenatable.previous_position[arena].surface = player.surface arenatable.previous_position[arena].surface = player.surface
arenatable.timer[arena] = game.tick arenatable.timer[arena] = game.tick
local rpg = RPG_T.get('rpg_t') local rpg = RPG.get('rpg_t')
rpg[player.index].one_punch = false rpg[player.index].one_punch = false
rpg[player.index].enable_entity_spawn = false rpg[player.index].enable_entity_spawn = false
hide_rpg(player, false) hide_rpg(player, false)
@ -261,7 +259,7 @@ local function boss_died(arena)
arenatable.won[arena] = true arenatable.won[arena] = true
arenatable.timer[arena] = game.tick - 30 arenatable.timer[arena] = game.tick - 30
--teleport_player_out(arena, player) --teleport_player_out(arena, player)
RPG_F.gain_xp(player, 4 + level, true) RPG.gain_xp(player, 4 + level, true)
if level % 10 == 0 and level > 0 then if level % 10 == 0 and level > 0 then
Alert.alert_all_players(8, {'dungeons_tiered.player_won', player.name, arenatable.bosses[player.index]}, {r = 0.8, g = 0.2, b = 0}, 'entity/behemoth-biter', 0.7) Alert.alert_all_players(8, {'dungeons_tiered.player_won', player.name, arenatable.bosses[player.index]}, {r = 0.8, g = 0.2, b = 0}, 'entity/behemoth-biter', 0.7)
else else
@ -301,7 +299,7 @@ local function enter_arena(player)
-- player.print({"dungeons_tiered.arena_occupied"}) -- player.print({"dungeons_tiered.arena_occupied"})
return return
end end
local rpg_t = RPG_T.get('rpg_t') local rpg_t = RPG.get('rpg_t')
if rpg_t[player.index].level < 5 then if rpg_t[player.index].level < 5 then
Alert.alert_player_warning(player, 8, {'dungeons_tiered.arena_level_needed'}) Alert.alert_player_warning(player, 8, {'dungeons_tiered.arena_level_needed'})
return return

View File

@ -4,7 +4,7 @@ local BiterRaffle = require 'functions.biter_raffle'
local LootRaffle = require 'functions.loot_raffle' local LootRaffle = require 'functions.loot_raffle'
local Get_noise = require 'utils.get_noise' local Get_noise = require 'utils.get_noise'
local DungeonsTable = require 'maps.dungeons.table' local DungeonsTable = require 'maps.dungeons.table'
require 'modules.rpg.table' require 'modules.rpg.main'
local table_shuffle_table = table.shuffle_table local table_shuffle_table = table.shuffle_table
local math_random = math.random local math_random = math.random

View File

@ -6,9 +6,7 @@ require 'modules.charging_station'
local MapInfo = require 'modules.map_info' local MapInfo = require 'modules.map_info'
local Room_generator = require 'functions.room_generator' local Room_generator = require 'functions.room_generator'
require 'modules.rpg.main' local RPG = require 'modules.rpg.main'
local RPG_F = require 'modules.rpg.functions'
local RPG_T = require 'modules.rpg.table'
local BiterHealthBooster = require 'modules.biter_health_booster_v2' local BiterHealthBooster = require 'modules.biter_health_booster_v2'
local BiterRaffle = require 'functions.biter_raffle' local BiterRaffle = require 'functions.biter_raffle'
local Functions = require 'maps.dungeons.functions' local Functions = require 'maps.dungeons.functions'
@ -263,7 +261,7 @@ local function draw_light(player)
if not player.character then if not player.character then
return return
end end
local rpg = RPG_T.get('rpg_t') local rpg = RPG.get('rpg_t')
local magicka = rpg[player.index].magicka local magicka = rpg[player.index].magicka
local scale = 1 local scale = 1
if magicka < 50 then if magicka < 50 then
@ -497,7 +495,7 @@ local function on_player_mined_entity(event)
if size < math.abs(entity.position.y) or size < math.abs(entity.position.x) then if size < math.abs(entity.position.y) or size < math.abs(entity.position.x) then
entity.surface.create_entity({name = entity.name, position = entity.position}) entity.surface.create_entity({name = entity.name, position = entity.position})
entity.destroy() entity.destroy()
RPG_F.gain_xp(player, -10) RPG.gain_xp(player, -10)
Alert.alert_player_warning(player, 30, {'dungeons_tiered.too_small'}, {r = 0.98, g = 0.22, b = 0}) Alert.alert_player_warning(player, 30, {'dungeons_tiered.too_small'}, {r = 0.98, g = 0.22, b = 0})
event.buffer.clear() event.buffer.clear()
return return
@ -514,7 +512,7 @@ local function on_player_mined_entity(event)
end end
local function on_entity_died(event) local function on_entity_died(event)
-- local rpg_extra = RPG_T.get('rpg_extra') -- local rpg_extra = RPG.get('rpg_extra')
-- local hp_units = BiterHealthBooster.get('biter_health_boost_units') -- local hp_units = BiterHealthBooster.get('biter_health_boost_units')
local entity = event.entity local entity = event.entity
if not entity.valid then if not entity.valid then
@ -555,7 +553,7 @@ end
local function get_lowest_safe_floor(player) local function get_lowest_safe_floor(player)
local dungeontable = DungeonsTable.get_dungeontable() local dungeontable = DungeonsTable.get_dungeontable()
local rpg = RPG_T.get('rpg_t') local rpg = RPG.get('rpg_t')
local level = rpg[player.index].level local level = rpg[player.index].level
local sizes = dungeontable.surface_size local sizes = dungeontable.surface_size
local safe = dungeontable.original_surface_index local safe = dungeontable.original_surface_index
@ -574,7 +572,7 @@ end
local function descend(player, button, shift) local function descend(player, button, shift)
local dungeontable = DungeonsTable.get_dungeontable() local dungeontable = DungeonsTable.get_dungeontable()
local rpg = RPG_T.get('rpg_t') local rpg = RPG.get('rpg_t')
if player.surface.index >= dungeontable.original_surface_index + 50 then if player.surface.index >= dungeontable.original_surface_index + 50 then
player.print({'dungeons_tiered.max_depth'}) player.print({'dungeons_tiered.max_depth'})
return return
@ -758,7 +756,7 @@ local function transfer_signals(surface_index)
end end
-- local function setup_magic() -- local function setup_magic()
-- local rpg_spells = RPG_T.get("rpg_spells") -- local rpg_spells = RPG.get("rpg_spells")
-- end -- end
local function on_init() local function on_init()
@ -820,8 +818,8 @@ local function on_init()
for _, tech in pairs(locked_researches) do for _, tech in pairs(locked_researches) do
game.forces.player.technologies[tech].enabled = false game.forces.player.technologies[tech].enabled = false
end end
RPG_T.set_surface_name('dungeons_floor') RPG.set_surface_name('dungeons_floor')
local rpg_table = RPG_T.get('rpg_extra') local rpg_table = RPG.get('rpg_extra')
rpg_table.personal_tax_rate = 0 rpg_table.personal_tax_rate = 0
-- rpg_table.enable_mana = true -- rpg_table.enable_mana = true
-- setup_magic() -- setup_magic()

View File

@ -1,5 +1,5 @@
local Event = require 'utils.event' local Event = require 'utils.event'
local RPG_Settings = require 'modules.rpg.table' local RPG = require 'modules.rpg.main'
local BiterHealthBooster = require 'modules.biter_health_booster_v2' local BiterHealthBooster = require 'modules.biter_health_booster_v2'
local insert = table.insert local insert = table.insert
local floor = math.floor local floor = math.floor
@ -111,7 +111,7 @@ local function on_entity_died(event)
for _, player in pairs(players_to_reward) do for _, player in pairs(players_to_reward) do
local forest_zone local forest_zone
if p then if p then
forest_zone = RPG_Settings.get_value_from_player(p.index, 'forest_zone') forest_zone = RPG.get_value_from_player(p.index, 'forest_zone')
end end
if forest_zone then if forest_zone then
if random(1, 12) == 1 then if random(1, 12) == 1 then

View File

@ -1,8 +1,7 @@
local Collapse = require 'modules.collapse' local Collapse = require 'modules.collapse'
local Terrain = require 'maps.mountain_fortress_v3.terrain' local Terrain = require 'maps.mountain_fortress_v3.terrain'
local Balance = require 'maps.mountain_fortress_v3.balance' local Balance = require 'maps.mountain_fortress_v3.balance'
local RPG_Settings = require 'modules.rpg.table' local RPG = require 'modules.rpg.main'
local Functions = require 'modules.rpg.functions'
local WPT = require 'maps.mountain_fortress_v3.table' local WPT = require 'maps.mountain_fortress_v3.table'
local Alert = require 'utils.alert' local Alert = require 'utils.alert'
local Event = require 'utils.event' local Event = require 'utils.event'
@ -86,20 +85,20 @@ local compare_player_pos = function(player)
local index = player.index local index = player.index
local zone = floor((abs(p.y / level_depth)) % 22) local zone = floor((abs(p.y / level_depth)) % 22)
if scrap[zone] then if scrap[zone] then
RPG_Settings.set_value_to_player(index, 'scrap_zone', true) RPG.set_value_to_player(index, 'scrap_zone', true)
else else
local has_scrap = RPG_Settings.get_value_from_player(index, 'scrap_zone') local has_scrap = RPG.get_value_from_player(index, 'scrap_zone')
if has_scrap then if has_scrap then
RPG_Settings.set_value_to_player(index, 'scrap_zone', false) RPG.set_value_to_player(index, 'scrap_zone', false)
end end
end end
if forest[zone] then if forest[zone] then
RPG_Settings.set_value_to_player(index, 'forest_zone', true) RPG.set_value_to_player(index, 'forest_zone', true)
else else
local is_in_forest = RPG_Settings.get_value_from_player(index, 'forest_zone') local is_in_forest = RPG.get_value_from_player(index, 'forest_zone')
if is_in_forest then if is_in_forest then
RPG_Settings.set_value_to_player(index, 'forest_zone', false) RPG.set_value_to_player(index, 'forest_zone', false)
end end
end end
end end
@ -140,8 +139,8 @@ end
local function distance(player) local function distance(player)
local index = player.index local index = player.index
local bonus = RPG_Settings.get_value_from_player(index, 'bonus') local bonus = RPG.get_value_from_player(index, 'bonus')
local rpg_extra = RPG_Settings.get('rpg_extra') local rpg_extra = RPG.get('rpg_extra')
local breached_wall = WPT.get('breached_wall') local breached_wall = WPT.get('breached_wall')
local bonus_xp_on_join = WPT.get('bonus_xp_on_join') local bonus_xp_on_join = WPT.get('bonus_xp_on_join')
local enable_arties = WPT.get('enable_arties') local enable_arties = WPT.get('enable_arties')
@ -217,9 +216,9 @@ local function distance(player)
Task.set_timeout_in_ticks(550, collapse_message, data) Task.set_timeout_in_ticks(550, collapse_message, data)
end end
RPG_Settings.set_value_to_player(index, 'bonus', bonus + 1) RPG.set_value_to_player(index, 'bonus', bonus + 1)
Functions.gain_xp(player, bonus_xp_on_join * bonus) RPG.gain_xp(player, bonus_xp_on_join * bonus)
return return
end end
end end

View File

@ -4,8 +4,7 @@ local Event = require 'utils.event'
local Server = require 'utils.server' local Server = require 'utils.server'
local BuriedEnemies = require 'maps.mountain_fortress_v3.buried_enemies' local BuriedEnemies = require 'maps.mountain_fortress_v3.buried_enemies'
local Loot = require 'maps.mountain_fortress_v3.loot' local Loot = require 'maps.mountain_fortress_v3.loot'
local RPG_Settings = require 'modules.rpg.table' local RPG = require 'modules.rpg.main'
local Functions = require 'modules.rpg.functions'
local Callbacks = require 'maps.mountain_fortress_v3.functions' local Callbacks = require 'maps.mountain_fortress_v3.functions'
local Mining = require 'maps.mountain_fortress_v3.mining' local Mining = require 'maps.mountain_fortress_v3.mining'
local Terrain = require 'maps.mountain_fortress_v3.terrain' local Terrain = require 'maps.mountain_fortress_v3.terrain'
@ -344,7 +343,7 @@ local function protect_entities(event)
end end
local function hidden_treasure(player, entity) local function hidden_treasure(player, entity)
local rpg = RPG_Settings.get('rpg_t') local rpg = RPG.get('rpg_t')
local magic = rpg[player.index].magicka local magic = rpg[player.index].magicka
if magic > 50 then if magic > 50 then
@ -404,7 +403,7 @@ local function angry_tree(entity, cause, player)
position = {entity.position.x + (-20 + random(0, 40)), entity.position.y + (-20 + random(0, 40))} position = {entity.position.x + (-20 + random(0, 40)), entity.position.y + (-20 + random(0, 40))}
end end
if player then if player then
local forest_zone = RPG_Settings.get_value_from_player(player.index, 'forest_zone') local forest_zone = RPG.get_value_from_player(player.index, 'forest_zone')
if forest_zone and random(1, 32) == 1 then if forest_zone and random(1, 32) == 1 then
local cbl = Callbacks.refill_turret_callback local cbl = Callbacks.refill_turret_callback
local data = {callback_data = Callbacks.piercing_rounds_magazine_ammo} local data = {callback_data = Callbacks.piercing_rounds_magazine_ammo}
@ -438,7 +437,7 @@ end
local function give_coin(player) local function give_coin(player)
local coin_amount = WPT.get('coin_amount') local coin_amount = WPT.get('coin_amount')
local coin_override = WPT.get('coin_override') local coin_override = WPT.get('coin_override')
local forest_zone = RPG_Settings.get_value_from_player(player.index, 'forest_zone') local forest_zone = RPG.get_value_from_player(player.index, 'forest_zone')
if forest_zone then if forest_zone then
if random(1, 3) ~= 1 then if random(1, 3) ~= 1 then
@ -697,7 +696,7 @@ local function on_player_mined_entity(event)
if not entity.valid then if not entity.valid then
return return
end end
local rpg = RPG_Settings.get('rpg_t') local rpg = RPG.get('rpg_t')
local rpg_char = rpg[player.index] local rpg_char = rpg[player.index]
local map_name = 'mountain_fortress_v3' local map_name = 'mountain_fortress_v3'
@ -906,8 +905,8 @@ local function on_player_repaired_entity(event)
if carriages_numbers[entity.unit_number] then if carriages_numbers[entity.unit_number] then
local player = game.players[event.player_index] local player = game.players[event.player_index]
local repair_speed = Functions.get_magicka(player) local repair_speed = RPG.get_magicka(player)
if repair_speed <= 0 then if table <= 0 then
set_train_final_health(-1, true) set_train_final_health(-1, true)
return return
else else

View File

@ -1,5 +1,5 @@
local Event = require 'utils.event' local Event = require 'utils.event'
local RPG_Settings = require 'modules.rpg.table' local RPG = require 'modules.rpg.main'
local WPT = require 'maps.mountain_fortress_v3.table' local WPT = require 'maps.mountain_fortress_v3.table'
local IC_Gui = require 'maps.mountain_fortress_v3.ic.gui' local IC_Gui = require 'maps.mountain_fortress_v3.ic.gui'
local IC_Minimap = require 'maps.mountain_fortress_v3.ic.minimap' local IC_Minimap = require 'maps.mountain_fortress_v3.ic.minimap'
@ -245,9 +245,9 @@ local function on_player_changed_surface(event)
return return
end end
local rpg_button = RPG_Settings.draw_main_frame_name local rpg_button = RPG.draw_main_frame_name
local rpg_frame = RPG_Settings.main_frame_name local rpg_frame = RPG.main_frame_name
local rpg_settings = RPG_Settings.settings_frame_name local rpg_settings = RPG.settings_frame_name
local main = WPT.get('locomotive') local main = WPT.get('locomotive')
local icw_locomotive = WPT.get('icw_locomotive') local icw_locomotive = WPT.get('icw_locomotive')
local wagon_surface = icw_locomotive.surface local wagon_surface = icw_locomotive.surface
@ -259,7 +259,7 @@ local function on_player_changed_surface(event)
local diff = player.gui.top['difficulty_gui'] local diff = player.gui.top['difficulty_gui']
local charging = player.gui.top['charging_station'] local charging = player.gui.top['charging_station']
local frame = player.gui.top[main_frame_name] local frame = player.gui.top[main_frame_name]
local spell_gui_frame_name = RPG_Settings.spell_gui_frame_name local spell_gui_frame_name = RPG.spell_gui_frame_name
local spell_cast_buttons = player.gui.screen[spell_gui_frame_name] local spell_cast_buttons = player.gui.screen[spell_gui_frame_name]
if info then if info then
@ -352,7 +352,7 @@ local function enable_guis(event)
return return
end end
local rpg_button = RPG_Settings.draw_main_frame_name local rpg_button = RPG.draw_main_frame_name
local info = player.gui.top[main_button_name] local info = player.gui.top[main_button_name]
local wd = player.gui.top['wave_defense'] local wd = player.gui.top['wave_defense']
local rpg_b = player.gui.top[rpg_button] local rpg_b = player.gui.top[rpg_button]
@ -405,7 +405,7 @@ function Public.update_gui(player)
end end
local gui = player.gui.top[main_frame_name] local gui = player.gui.top[main_frame_name]
local rpg_extra = RPG_Settings.get('rpg_extra') local rpg_extra = RPG.get('rpg_extra')
local mined_scrap = WPT.get('mined_scrap') local mined_scrap = WPT.get('mined_scrap')
local biters_killed = WPT.get('biters_killed') local biters_killed = WPT.get('biters_killed')
local upgrades = WPT.get('upgrades') local upgrades = WPT.get('upgrades')

View File

@ -649,6 +649,15 @@ function Public.kill_car(ic, entity)
return return
end end
local trust_system = IC.get('trust_system')
local owner = car.owner
if owner then
if trust_system[owner.index] then
trust_system[owner.index] = nil
end
end
local surface_index = car.surface local surface_index = car.surface
local surface = game.surfaces[surface_index] local surface = game.surfaces[surface_index]
kick_players_out_of_vehicles(car) kick_players_out_of_vehicles(car)

View File

@ -6,11 +6,13 @@ local Tabs = require 'comfy_panel.main'
local Event = require 'utils.event' local Event = require 'utils.event'
local Public = {} local Public = {}
local insert = table.insert
--! Gui Frames --! Gui Frames
local save_add_player_button_name = Gui.uid_name() local save_add_player_button_name = Gui.uid_name()
local save_transfer_car_button_name = Gui.uid_name() local save_transfer_car_button_name = Gui.uid_name()
local discard_add_player_button_name = Gui.uid_name() local discard_add_player_button_name = Gui.uid_name()
local transfer_player_select_name = Gui.uid_name()
local discard_transfer_car_button_name = Gui.uid_name() local discard_transfer_car_button_name = Gui.uid_name()
local main_frame_name = Gui.uid_name() local main_frame_name = Gui.uid_name()
local draw_add_player_frame_name = Gui.uid_name() local draw_add_player_frame_name = Gui.uid_name()
@ -55,6 +57,28 @@ local function does_player_table_exist(player)
end end
end end
local function get_players(player, frame, all)
local tbl = {}
local players = game.connected_players
local trust_system = create_player_table(player)
for _, p in pairs(players) do
if next(trust_system.players) and not all then
if not trust_system.players[p.name] then
insert(tbl, tostring(p.name))
end
else
insert(tbl, tostring(p.name))
end
end
insert(tbl, 'Select Player')
local selected_index = #tbl
local f = frame.add({type = 'drop-down', name = transfer_player_select_name, items = tbl, selected_index = selected_index})
return f
end
local function transfer_player_table(player, new_player) local function transfer_player_table(player, new_player)
local trust_system = ICT.get('trust_system') local trust_system = ICT.get('trust_system')
if not trust_system[player.index] then if not trust_system[player.index] then
@ -69,8 +93,8 @@ local function transfer_player_table(player, new_player)
trust_system[new_player.index] = trust_system[player.index] trust_system[new_player.index] = trust_system[player.index]
local name = new_player.name local name = new_player.name
if not trust_system[new_player.index][name] then if not trust_system[new_player.index].players[name] then
increment(trust_system[new_player.index], name) increment(trust_system[new_player.index].players, name)
end end
local cars = ICT.get('cars') local cars = ICT.get('cars')
@ -101,7 +125,7 @@ local function remove_main_frame(main_frame)
main_frame.destroy() main_frame.destroy()
end end
local function draw_add_player(frame) local function draw_add_player(player, frame)
local main_frame = local main_frame =
frame.add( frame.add(
{ {
@ -127,8 +151,7 @@ local function draw_add_player(frame)
inside_table_style.bottom_padding = 10 inside_table_style.bottom_padding = 10
inside_table_style.width = 325 inside_table_style.width = 325
local add_player_frame = main_frame.add({type = 'textfield', text = 'Name of the player.'}) local add_player_frame = get_players(player, main_frame)
add_player_frame.style.width = 140
local bottom_flow = main_frame.add({type = 'flow', direction = 'horizontal'}) local bottom_flow = main_frame.add({type = 'flow', direction = 'horizontal'})
@ -150,7 +173,7 @@ local function draw_add_player(frame)
Gui.set_data(save_button, add_player_frame) Gui.set_data(save_button, add_player_frame)
end end
local function draw_transfer_car(frame) local function draw_transfer_car(player, frame)
local main_frame = local main_frame =
frame.add( frame.add(
{ {
@ -178,8 +201,7 @@ local function draw_transfer_car(frame)
local transfer_car_alert_frame = main_frame.add({type = 'label', caption = "Warning, this action can't be undone!"}) local transfer_car_alert_frame = main_frame.add({type = 'label', caption = "Warning, this action can't be undone!"})
transfer_car_alert_frame.style.font_color = {r = 255, g = 0, b = 0} transfer_car_alert_frame.style.font_color = {r = 255, g = 0, b = 0}
local transfer_car_frame = main_frame.add({type = 'textfield', text = 'Name of the player.'}) local transfer_car_frame = get_players(player, main_frame, true)
transfer_car_frame.style.width = 140
local bottom_flow = main_frame.add({type = 'flow', direction = 'horizontal'}) local bottom_flow = main_frame.add({type = 'flow', direction = 'horizontal'})
@ -432,7 +454,7 @@ Gui.on_click(
end end
local player_frame = frame[draw_add_player_frame_name] local player_frame = frame[draw_add_player_frame_name]
if not player_frame or not player_frame.valid then if not player_frame or not player_frame.valid then
draw_add_player(frame) draw_add_player(player, frame)
else else
player_frame.destroy() player_frame.destroy()
end end
@ -454,7 +476,7 @@ Gui.on_click(
end end
local player_frame = frame[draw_transfer_car_frame_name] local player_frame = frame[draw_transfer_car_frame_name]
if not player_frame or not player_frame.valid then if not player_frame or not player_frame.valid then
draw_transfer_car(frame) draw_transfer_car(player, frame)
else else
player_frame.destroy() player_frame.destroy()
end end
@ -477,10 +499,10 @@ Gui.on_click(
if frame and frame.valid then if frame and frame.valid then
if player_list.allow_anyone == 'right' then if player_list.allow_anyone == 'right' then
player_list.allow_anyone = 'left' player_list.allow_anyone = 'left'
player.print('Everyone is allowed to enter your car!', Color.warning) player.print('[IC] Everyone is allowed to enter your car!', Color.warning)
else else
player_list.allow_anyone = 'right' player_list.allow_anyone = 'right'
player.print('Everyone is disallowed to enter your car except your trusted list!', Color.warning) player.print('[IC] Everyone is disallowed to enter your car except your trusted list!', Color.warning)
end end
if player.gui.screen[main_frame_name] then if player.gui.screen[main_frame_name] then
@ -505,24 +527,26 @@ Gui.on_click(
local add_player_frame = Gui.get_data(event.element) local add_player_frame = Gui.get_data(event.element)
if frame and frame.valid then if frame and frame.valid then
if add_player_frame and add_player_frame.valid and add_player_frame.text then if add_player_frame and add_player_frame.valid and add_player_frame then
local text = add_player_frame.text local player_gui_data = ICT.get('player_gui_data')
if not text then local fetched_name = player_gui_data[player.name]
if not fetched_name then
return return
end end
local player_to_add = game.get_player(text)
local player_to_add = game.get_player(fetched_name)
if not player_to_add or not player_to_add.valid then if not player_to_add or not player_to_add.valid then
return player.print('Target player was not valid.', Color.warning) return player.print('[IC] Target player was not valid.', Color.warning)
end end
local name = player_to_add.name local name = player_to_add.name
if not player_list.players[name] then if not player_list.players[name] then
player.print(name .. ' was added to your vehicle.', Color.info) player.print('[IC] ' .. name .. ' was added to your vehicle.', Color.info)
player_to_add.print(player.name .. ' added you to their vehicle. You may now enter it.', Color.info) player_to_add.print(player.name .. ' added you to their vehicle. You may now enter it.', Color.info)
increment(player_list.players, name) increment(player_list.players, name)
else else
return player.print('Target player is already trusted.', Color.warning) return player.print('[IC] Target player is already trusted.', Color.warning)
end end
remove_main_frame(event.element) remove_main_frame(event.element)
@ -548,33 +572,30 @@ Gui.on_click(
local transfer_car_frame = Gui.get_data(event.element) local transfer_car_frame = Gui.get_data(event.element)
if frame and frame.valid then if frame and frame.valid then
if transfer_car_frame and transfer_car_frame.valid and transfer_car_frame.text then if transfer_car_frame and transfer_car_frame.valid then
local text = transfer_car_frame.text local player_gui_data = ICT.get('player_gui_data')
if not text then local fetched_name = player_gui_data[player.name]
if not fetched_name then
return return
end end
local player_to_add = game.get_player(text)
local player_to_add = game.get_player(fetched_name)
if not player_to_add or not player_to_add.valid then if not player_to_add or not player_to_add.valid then
return player.print('Target player was not valid.', Color.warning) return player.print('[IC] Target player was not valid.', Color.warning)
end end
local name = player_to_add.name local name = player_to_add.name
local does_player_have_a_car = does_player_table_exist(name)
local does_player_have_a_car = does_player_table_exist(player_to_add)
if does_player_have_a_car then if does_player_have_a_car then
return player.print(name .. ' already has a vehicle.', Color.warning) return player.print('[IC] ' .. name .. ' already has a vehicle.', Color.warning)
end end
local to_add = game.get_player(name) local success = transfer_player_table(player, player_to_add)
if not (to_add and to_add.valid) then
return player.print(name .. ' does not exist.', Color.warning)
end
local success = transfer_player_table(player, to_add)
if not success then if not success then
player.print('Please try again.', Color.warning) player.print('[IC] Please try again.', Color.warning)
else else
player.print('You have successfully transferred your car to ' .. name, Color.success) player.print('[IC] You have successfully transferred your car to ' .. name, Color.success)
to_add.print('You have become the rightfully owner of ' .. player.name .. "'s car!", Color.success) player_to_add.print('[IC] You have become the rightfully owner of ' .. player.name .. "'s car!", Color.success)
end end
remove_main_frame(event.element) remove_main_frame(event.element)
@ -608,13 +629,13 @@ Gui.on_click(
end end
local target = game.get_player(player_name) local target = game.get_player(player_name)
if not target or not target.valid then if not target or not target.valid then
player.print('Target player was not valid.', Color.warning) player.print('[IC] Target player was not valid.', Color.warning)
return return
end end
local name = target.name local name = target.name
if player_list.players[name] then if player_list.players[name] then
player.print(name .. ' was removed from your vehicle.', Color.info) player.print('[IC] ' .. name .. ' was removed from your vehicle.', Color.info)
decrement(player_list.players, name) decrement(player_list.players, name)
raise_event( raise_event(
ICT.events.on_player_kicked_from_surface, ICT.events.on_player_kicked_from_surface,
@ -696,6 +717,47 @@ Gui.on_click(
end end
) )
Gui.on_selection_state_changed(
transfer_player_select_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[main_frame_name]
if not frame or not frame.valid then
return
end
local element = event.element
if not element or not element.valid then
return
end
local player_gui_data = ICT.get('player_gui_data')
local selected = element.items[element.selected_index]
if not selected then
return
end
if selected == 'Select Player' then
player.print('[IC] No target player selected.', Color.warning)
player_gui_data[player.name] = nil
return
end
if selected == player.name then
player.print('[IC] You can´t select yourself.', Color.warning)
player_gui_data[player.name] = nil
return
end
player_gui_data[player.name] = selected
end
)
Public.draw_main_frame = draw_main_frame Public.draw_main_frame = draw_main_frame
Public.toggle = toggle Public.toggle = toggle
Public.add_toolbar = add_toolbar Public.add_toolbar = add_toolbar

View File

@ -38,6 +38,7 @@ function Public.reset()
this.allowed_surface = 'nauvis' this.allowed_surface = 'nauvis'
this.trust_system = {} this.trust_system = {}
this.players = {} this.players = {}
this.player_gui_data = {}
this.surfaces = {} this.surfaces = {}
this.minimap = {} this.minimap = {}
this.entity_type = { this.entity_type = {

View File

@ -7,8 +7,7 @@ local WD = require 'modules.wave_defense.table'
local Session = require 'utils.datastore.session_data' local Session = require 'utils.datastore.session_data'
local Difficulty = require 'modules.difficulty_vote_by_amount' local Difficulty = require 'modules.difficulty_vote_by_amount'
local Jailed = require 'utils.datastore.jail_data' local Jailed = require 'utils.datastore.jail_data'
local RPG_Settings = require 'modules.rpg.table' local RPG = require 'modules.rpg.main'
local Functions = require 'modules.rpg.functions'
local Gui = require 'utils.gui' local Gui = require 'utils.gui'
local Server = require 'utils.server' local Server = require 'utils.server'
local Alert = require 'utils.alert' local Alert = require 'utils.alert'
@ -24,7 +23,7 @@ local format_number = require 'util'.format_number
local Public = {} local Public = {}
local concat = table.concat local concat = table.concat
local main_frame_name = Gui.uid_name() local main_frame_name = Gui.uid_name()
local rpg_main_frame = RPG_Settings.main_frame_name local rpg_main_frame = RPG.main_frame_name
local random = math.random local random = math.random
local floor = math.floor local floor = math.floor
local round = math.round local round = math.round
@ -355,7 +354,7 @@ local function property_boost(data)
if Math2D.bounding_box.contains_point(area, player.position) or player.surface.index == loco_surface.index then if Math2D.bounding_box.contains_point(area, player.position) or player.surface.index == loco_surface.index then
Public.add_player_to_permission_group(player, 'locomotive') Public.add_player_to_permission_group(player, 'locomotive')
local pos = player.position local pos = player.position
Functions.gain_xp(player, 0.5 * (rpg[player.index].bonus + xp_points)) RPG.gain_xp(player, 0.5 * (rpg[player.index].bonus + xp_points))
player.create_local_flying_text { player.create_local_flying_text {
text = '+' .. '', text = '+' .. '',
@ -1226,7 +1225,7 @@ local function gui_click(event)
player.name .. ' has bought the explosive bullet modifier for ' .. format_number(item.price) .. ' coins.' player.name .. ' has bought the explosive bullet modifier for ' .. format_number(item.price) .. ' coins.'
} }
) )
RPG_Settings.enable_explosive_bullets(true) RPG.enable_explosive_bullets(true)
this.explosive_bullets = true this.explosive_bullets = true
redraw_market_items(data.item_frame, player, data.search_text) redraw_market_items(data.item_frame, player, data.search_text)
@ -1903,7 +1902,7 @@ function Public.refresh_gui()
end end
function Public.boost_players_around_train() function Public.boost_players_around_train()
local rpg = RPG_Settings.get('rpg_t') local rpg = RPG.get('rpg_t')
local active_surface_index = WPT.get('active_surface_index') local active_surface_index = WPT.get('active_surface_index')
if not active_surface_index then if not active_surface_index then
return return

View File

@ -1,5 +1,3 @@
require 'modules.rpg.main'
local Functions = require 'maps.mountain_fortress_v3.functions' local Functions = require 'maps.mountain_fortress_v3.functions'
local BuriedEnemies = require 'maps.mountain_fortress_v3.buried_enemies' local BuriedEnemies = require 'maps.mountain_fortress_v3.buried_enemies'
@ -19,8 +17,7 @@ local Gui_mf = require 'maps.mountain_fortress_v3.gui'
local ICW = require 'maps.mountain_fortress_v3.icw.main' local ICW = require 'maps.mountain_fortress_v3.icw.main'
local WD = require 'modules.wave_defense.table' local WD = require 'modules.wave_defense.table'
local Map = require 'modules.map_info' local Map = require 'modules.map_info'
local RPG_Settings = require 'modules.rpg.table' local RPG = require 'modules.rpg.main'
local RPG_Func = require 'modules.rpg.functions'
local Event = require 'utils.event' local Event = require 'utils.event'
local WPT = require 'maps.mountain_fortress_v3.table' local WPT = require 'maps.mountain_fortress_v3.table'
local Locomotive = require 'maps.mountain_fortress_v3.locomotive' local Locomotive = require 'maps.mountain_fortress_v3.locomotive'
@ -31,7 +28,7 @@ local Difficulty = require 'modules.difficulty_vote_by_amount'
local Task = require 'utils.task' local Task = require 'utils.task'
local Token = require 'utils.token' local Token = require 'utils.token'
local Alert = require 'utils.alert' local Alert = require 'utils.alert'
-- local BottomFrame = require 'comfy_panel.bottom_frame' local BottomFrame = require 'comfy_panel.bottom_frame'
local AntiGrief = require 'antigrief' local AntiGrief = require 'antigrief'
local Misc = require 'commands.misc' local Misc = require 'commands.misc'
local Modifiers = require 'player_modifiers' local Modifiers = require 'player_modifiers'
@ -132,11 +129,10 @@ function Public.reset_map()
Autostash.insert_into_furnace(true) Autostash.insert_into_furnace(true)
Autostash.insert_into_wagon(true) Autostash.insert_into_wagon(true)
Autostash.bottom_button(false) Autostash.bottom_button(true)
BuriedEnemies.reset() BottomFrame.reset()
--[[ BottomFrame.reset()
BottomFrame.activate_custom_buttons(true) BottomFrame.activate_custom_buttons(true)
BottomFrame.bottom_right(true) ]] BuriedEnemies.reset()
Poll.reset() Poll.reset()
ICW.reset() ICW.reset()
IC.reset() IC.reset()
@ -145,20 +141,20 @@ function Public.reset_map()
game.reset_time_played() game.reset_time_played()
WPT.reset_table() WPT.reset_table()
RPG_Func.rpg_reset_all_players() RPG.rpg_reset_all_players()
RPG_Settings.set_surface_name(game.surfaces[this.active_surface_index].name) RPG.set_surface_name(game.surfaces[this.active_surface_index].name)
RPG_Settings.enable_health_and_mana_bars(true) RPG.enable_health_and_mana_bars(true)
RPG_Settings.enable_wave_defense(true) RPG.enable_wave_defense(true)
RPG_Settings.enable_mana(true) RPG.enable_mana(true)
RPG_Settings.enable_flame_boots(true) RPG.enable_flame_boots(true)
RPG_Settings.personal_tax_rate(0.4) RPG.personal_tax_rate(0.4)
RPG_Settings.enable_stone_path(true) RPG.enable_stone_path(true)
RPG_Settings.enable_one_punch(true) RPG.enable_one_punch(true)
RPG_Settings.enable_one_punch_globally(false) RPG.enable_one_punch_globally(false)
RPG_Settings.enable_auto_allocate(true) RPG.enable_auto_allocate(true)
RPG_Settings.disable_cooldowns_on_spells() RPG.disable_cooldowns_on_spells()
RPG_Settings.enable_explosive_bullets_globally(true) RPG.enable_explosive_bullets_globally(true)
RPG_Settings.enable_explosive_bullets(false) RPG.enable_explosive_bullets(false)
Group.reset_groups() Group.reset_groups()
Group.alphanumeric_only(false) Group.alphanumeric_only(false)

View File

@ -1,5 +1,5 @@
local WPT = require 'maps.mountain_fortress_v3.table' local WPT = require 'maps.mountain_fortress_v3.table'
local RPG_Settings = require 'modules.rpg.table' local RPG = require 'modules.rpg.main'
require 'modules.check_fullness' require 'modules.check_fullness'
local Public = {} local Public = {}
@ -433,7 +433,7 @@ function Public.on_player_mined_entity(event)
local index = player.index local index = player.index
local scrap_zone = RPG_Settings.get_value_from_player(index, 'scrap_zone') local scrap_zone = RPG.get_value_from_player(index, 'scrap_zone')
if scrap_zone or is_scrap then if scrap_zone or is_scrap then
randomness_scrap(data) randomness_scrap(data)
else else

View File

@ -598,9 +598,6 @@ local function do_whitelist()
end end
local function on_player_joined_game(event) local function on_player_joined_game(event)
if is_loaded('maps.biter_battles_v2.main') then
return
end
create_gui_button(game.players[event.player_index]) create_gui_button(game.players[event.player_index])
end end

View File

@ -91,10 +91,6 @@ local removeUnit =
end end
) )
if is_loaded('maps.biter_hatchery.terrain') then
entity_types['unit-spawner'] = nil
end
local function loaded_biters(event) local function loaded_biters(event)
local cause = event.cause local cause = event.cause
local entity = event.entity local entity = event.entity

View File

@ -356,6 +356,7 @@ function Public.get(key)
end end
end end
Event.add(defines.events.on_player_created, on_player_joined_game)
Event.add(defines.events.on_player_joined_game, on_player_joined_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_left_game, on_player_left_game)
Event.add(defines.events.on_gui_click, on_gui_click) Event.add(defines.events.on_gui_click, on_gui_click)

View File

@ -25,9 +25,6 @@ local function on_console_chat(event)
end end
local y_offset = -4 local y_offset = -4
if is_loaded('modules.rpg') then
y_offset = -4.5
end
if this.player_floaty_chat[player.index] then if this.player_floaty_chat[player.index] then
rendering.destroy(this.player_floaty_chat[player.index]) rendering.destroy(this.player_floaty_chat[player.index])

View File

@ -151,7 +151,6 @@ local function update_char_button(player)
end end
local function update_player_stats(player) local function update_player_stats(player)
local player_modifiers = P.get_table()
local strength = rpg_t[player.index].strength - 10 local strength = rpg_t[player.index].strength - 10
P.update_single_modifier(player, 'character_inventory_slots_bonus', 'rpg', math.round(strength * 0.2, 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)) P.update_single_modifier(player, 'character_mining_speed_modifier', 'rpg', math.round(strength * 0.008, 3))

View File

@ -7,7 +7,7 @@ local round = math.round
local validate_args = function(data) local validate_args = function(data)
local player = data.player local player = data.player
local target = data.target local target = data.target
local rpg_t = data.rpg_t local rpg_t = RPG.get_value_from_player(target.index)
if not target then if not target then
return false return false
@ -54,7 +54,7 @@ local validate_args = function(data)
return false return false
end end
if not rpg_t[target.index] then if not rpg_t then
Utils.print_to(player, 'Invalid target.') Utils.print_to(player, 'Invalid target.')
return false return false
end end
@ -62,20 +62,21 @@ local validate_args = function(data)
return true return true
end end
local print_stats = function(target, tbl) local print_stats = function(target)
if not target then if not target then
return return
end end
if not tbl then local rpg_t = RPG.get_value_from_player(target.index)
if not rpg_t then
return return
end end
local t = tbl[target.index]
local level = t.level local level = rpg_t.level
local xp = round(t.xp) local xp = round(rpg_t.xp)
local strength = t.strength local strength = rpg_t.strength
local magicka = t.magicka local magicka = rpg_t.magicka
local dexterity = t.dexterity local dexterity = rpg_t.dexterity
local vitality = t.vitality local vitality = rpg_t.vitality
local output = '[color=blue]' .. target.name .. '[/color] has the following stats: \n' local output = '[color=blue]' .. target.name .. '[/color] has the following stats: \n'
output = output .. '[color=green]Level:[/color] ' .. level .. '\n' output = output .. '[color=green]Level:[/color] ' .. level .. '\n'
output = output .. '[color=green]XP:[/color] ' .. xp .. '\n' output = output .. '[color=green]XP:[/color] ' .. xp .. '\n'
@ -111,16 +112,13 @@ commands.add_command(
return return
end end
local rpg_t = RPG.get('rpg_t')
local data = { local data = {
player = player, player = player,
target = target, target = target
rpg_t = rpg_t
} }
if validate_args(data) then if validate_args(data) then
local msg = print_stats(target, rpg_t) local msg = print_stats(target)
player.play_sound {path = 'utility/scenario_message', volume_modifier = 1} player.play_sound {path = 'utility/scenario_message', volume_modifier = 1}
player.print(msg) player.print(msg)
else else

18
modules/rpg/core.lua Normal file
View File

@ -0,0 +1,18 @@
local Public = require 'modules.rpg.table'
local Bullets = require 'modules.rpg.explosive_gun_bullets'
Public.explosive_bullet = Bullets
local Functions = require 'modules.rpg.functions'
Public.functions = Functions
local Gui = require 'modules.rpg.gui'
Public.gui = Gui
local Settings = require 'modules.rpg.settings'
Public.settings = Settings
local Spells = require 'modules.rpg.spells'
Public.spells = Spells
return Public

View File

@ -1,11 +1,9 @@
local RPG_T = require 'modules.rpg.table' local Public = require 'modules.rpg.table'
local radius = 3 local radius = 3
local random = math.random local random = math.random
local floor = math.floor local floor = math.floor
local sqrt = math.sqrt local sqrt = math.sqrt
local Public = {}
local function splash_damage(surface, position, final_damage_amount) local function splash_damage(surface, position, final_damage_amount)
local create = surface.create_entity local create = surface.create_entity
local damage = random(floor(final_damage_amount * 3), floor(final_damage_amount * 4)) local damage = random(floor(final_damage_amount * 3), floor(final_damage_amount * 4))
@ -26,7 +24,7 @@ local function splash_damage(surface, position, final_damage_amount)
end end
function Public.explosive_bullets(event) function Public.explosive_bullets(event)
local is_explosive_bullets_enabled = RPG_T.get_explosive_bullets() local is_explosive_bullets_enabled = Public.get_explosive_bullets()
if not is_explosive_bullets_enabled then if not is_explosive_bullets_enabled then
return return
end end
@ -57,8 +55,7 @@ function Public.explosive_bullets(event)
return return
end end
local player_data = RPG_T.get('rpg_t') local rpg_player = Public.get_value_from_player(p.index)
local rpg_player = player_data[p.index]
if not rpg_player.explosive_bullets then if not rpg_player.explosive_bullets then
return return
end end
@ -88,5 +85,3 @@ function Public.explosive_bullets(event)
splash_damage(surface, entity.position, event.final_damage_amount) splash_damage(surface, entity.position, event.final_damage_amount)
end end
end end
return Public

View File

@ -1,21 +1,20 @@
local Public = require 'modules.rpg.table'
local Task = require 'utils.task' local Task = require 'utils.task'
local RPG = require 'modules.rpg.table'
local Gui = require 'utils.gui' local Gui = require 'utils.gui'
local Color = require 'utils.color_presets' local Color = require 'utils.color_presets'
local Token = require 'utils.token' local Token = require 'utils.token'
local Alert = require 'utils.alert' local Alert = require 'utils.alert'
local Public = {}
local level_up_floating_text_color = {0, 205, 0} local level_up_floating_text_color = {0, 205, 0}
local visuals_delay = RPG.visuals_delay local visuals_delay = Public.visuals_delay
local xp_floating_text_color = RPG.xp_floating_text_color local xp_floating_text_color = Public.xp_floating_text_color
local experience_levels = RPG.experience_levels local experience_levels = Public.experience_levels
local points_per_level = RPG.points_per_level local points_per_level = Public.points_per_level
local settings_level = Public.gui_settings_levels
--RPG Frames --RPG Frames
local main_frame_name = RPG.main_frame_name local main_frame_name = Public.main_frame_name
local spell_gui_frame_name = RPG.spell_gui_frame_name local spell_gui_frame_name = Public.spell_gui_frame_name
local travelings = { local travelings = {
'bzzZZrrt', 'bzzZZrrt',
@ -100,14 +99,13 @@ local function set_bar(min, max, id, mana)
end end
local function level_up(player) local function level_up(player)
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
local RPG_GUI = is_loaded('modules.rpg.gui') local names = Public.auto_allocate_nodes_func
local names = RPG.auto_allocate_nodes_func
local distribute_points_gain = 0 local distribute_points_gain = 0
for i = rpg_t[player.index].level + 1, #experience_levels, 1 do for i = rpg_t.level + 1, #experience_levels, 1 do
if rpg_t[player.index].xp > experience_levels[i] then if rpg_t.xp > experience_levels[i] then
rpg_t[player.index].level = i rpg_t.level = i
distribute_points_gain = distribute_points_gain + points_per_level distribute_points_gain = distribute_points_gain + points_per_level
else else
break break
@ -116,29 +114,37 @@ local function level_up(player)
if distribute_points_gain == 0 then if distribute_points_gain == 0 then
return return
end end
RPG_GUI.draw_level_text(player)
rpg_t[player.index].points_left = rpg_t[player.index].points_left + distribute_points_gain if rpg_t.level >= settings_level['one_punch_label'] then
if rpg_t[player.index].allocate_index ~= 1 then rpg_t.one_punch = true
local node = rpg_t[player.index].allocate_index end
if rpg_t.level >= settings_level['stone_path_label'] then
rpg_t.stone_path = true
end
Public.draw_level_text(player)
rpg_t.points_left = rpg_t.points_left + distribute_points_gain
if rpg_t.allocate_index ~= 1 then
local node = rpg_t.allocate_index
local index = names[node]:lower() local index = names[node]:lower()
rpg_t[player.index][index] = rpg_t[player.index][index] + distribute_points_gain rpg_t[index] = rpg_t[index] + distribute_points_gain
rpg_t[player.index].points_left = rpg_t[player.index].points_left - distribute_points_gain rpg_t.points_left = rpg_t.points_left - distribute_points_gain
if not rpg_t[player.index].reset then if not rpg_t.reset then
rpg_t[player.index].total = rpg_t[player.index].total + distribute_points_gain rpg_t.total = rpg_t.total + distribute_points_gain
end end
RPG_GUI.update_player_stats(player) Public.update_player_stats(player)
else else
RPG_GUI.update_char_button(player) Public.update_char_button(player)
end end
if player.gui.screen[main_frame_name] then if player.gui.screen[main_frame_name] then
RPG_GUI.toggle(player, true) Public.toggle(player, true)
end end
Public.level_up_effects(player) Public.level_up_effects(player)
end end
local function add_to_global_pool(amount, personal_tax) local function add_to_global_pool(amount, personal_tax)
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
if not rpg_extra.global_pool then if not rpg_extra.global_pool then
return return
@ -256,13 +262,13 @@ function Public.validate_player(player)
end end
function Public.update_mana(player) function Public.update_mana(player)
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
if not rpg_extra.enable_mana then if not rpg_extra.enable_mana then
return return
end end
if not rpg_t[player.index] then if not rpg_t then
return return
end end
@ -270,38 +276,38 @@ function Public.update_mana(player)
local f = player.gui.screen[main_frame_name] local f = player.gui.screen[main_frame_name]
local data = Gui.get_data(f) local data = Gui.get_data(f)
if data.mana and data.mana.valid then if data.mana and data.mana.valid then
data.mana.caption = rpg_t[player.index].mana data.mana.caption = rpg_t.mana
end end
end end
if player.gui.screen[spell_gui_frame_name] then if player.gui.screen[spell_gui_frame_name] then
local f = player.gui.screen[spell_gui_frame_name] local f = player.gui.screen[spell_gui_frame_name]
if f['spell_table'] then if f['spell_table'] then
if f['spell_table']['mana'] then if f['spell_table']['mana'] then
f['spell_table']['mana'].caption = math.floor(rpg_t[player.index].mana) f['spell_table']['mana'].caption = math.floor(rpg_t.mana)
end end
if f['spell_table']['maxmana'] then if f['spell_table']['maxmana'] then
f['spell_table']['maxmana'].caption = math.floor(rpg_t[player.index].mana_max) f['spell_table']['maxmana'].caption = math.floor(rpg_t.mana_max)
end end
end end
end end
if rpg_t[player.index].mana < 1 then if rpg_t.mana < 1 then
return return
end end
if rpg_extra.enable_health_and_mana_bars then if rpg_extra.enable_health_and_mana_bars then
if rpg_t[player.index].show_bars then if rpg_t.show_bars then
if player.character and player.character.valid then if player.character and player.character.valid then
if not rpg_t[player.index].mana_bar then if not rpg_t.mana_bar then
rpg_t[player.index].mana_bar = create_manabar(player, 0.5) rpg_t.mana_bar = create_manabar(player, 0.5)
elseif not rendering.is_valid(rpg_t[player.index].mana_bar) then elseif not rendering.is_valid(rpg_t.mana_bar) then
rpg_t[player.index].mana_bar = create_manabar(player, 0.5) rpg_t.mana_bar = create_manabar(player, 0.5)
end end
set_bar(rpg_t[player.index].mana, rpg_t[player.index].mana_max, rpg_t[player.index].mana_bar, true) set_bar(rpg_t.mana, rpg_t.mana_max, rpg_t.mana_bar, true)
end end
else else
if rpg_t[player.index].mana_bar then if rpg_t.mana_bar then
if rendering.is_valid(rpg_t[player.index].mana_bar) then if rendering.is_valid(rpg_t.mana_bar) then
rendering.destroy(rpg_t[player.index].mana_bar) rendering.destroy(rpg_t.mana_bar)
end end
end end
end end
@ -309,8 +315,8 @@ function Public.update_mana(player)
end end
function Public.reward_mana(player, mana_to_add) function Public.reward_mana(player, mana_to_add)
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
if not rpg_extra.enable_mana then if not rpg_extra.enable_mana then
return return
end end
@ -319,7 +325,7 @@ function Public.reward_mana(player, mana_to_add)
return return
end end
if not rpg_t[player.index] then if not rpg_t then
return return
end end
@ -327,36 +333,36 @@ function Public.reward_mana(player, mana_to_add)
local f = player.gui.screen[main_frame_name] local f = player.gui.screen[main_frame_name]
local data = Gui.get_data(f) local data = Gui.get_data(f)
if data.mana and data.mana.valid then if data.mana and data.mana.valid then
data.mana.caption = rpg_t[player.index].mana data.mana.caption = rpg_t.mana
end end
end end
if player.gui.screen[spell_gui_frame_name] then if player.gui.screen[spell_gui_frame_name] then
local f = player.gui.screen[spell_gui_frame_name] local f = player.gui.screen[spell_gui_frame_name]
if f['spell_table'] then if f['spell_table'] then
if f['spell_table']['mana'] then if f['spell_table']['mana'] then
f['spell_table']['mana'].caption = math.floor(rpg_t[player.index].mana) f['spell_table']['mana'].caption = math.floor(rpg_t.mana)
end end
if f['spell_table']['maxmana'] then if f['spell_table']['maxmana'] then
f['spell_table']['maxmana'].caption = math.floor(rpg_t[player.index].mana_max) f['spell_table']['maxmana'].caption = math.floor(rpg_t.mana_max)
end end
end end
end end
if rpg_t[player.index].mana_max < 1 then if rpg_t.mana_max < 1 then
return return
end end
if rpg_t[player.index].mana >= rpg_t[player.index].mana_max then if rpg_t.mana >= rpg_t.mana_max then
rpg_t[player.index].mana = rpg_t[player.index].mana_max rpg_t.mana = rpg_t.mana_max
return return
end end
rpg_t[player.index].mana = rpg_t[player.index].mana + mana_to_add rpg_t.mana = rpg_t.mana + mana_to_add
end end
function Public.update_health(player) function Public.update_health(player)
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
if not player or not player.valid then if not player or not player.valid then
return return
@ -366,7 +372,7 @@ function Public.update_health(player)
return return
end end
if not rpg_t[player.index] then if not rpg_t then
return return
end end
@ -392,18 +398,18 @@ function Public.update_health(player)
end end
if rpg_extra.enable_health_and_mana_bars then if rpg_extra.enable_health_and_mana_bars then
if rpg_t[player.index].show_bars then if rpg_t.show_bars then
local max_life = math.floor(player.character.prototype.max_health + player.character_health_bonus + player.force.character_health_bonus) local max_life = math.floor(player.character.prototype.max_health + player.character_health_bonus + player.force.character_health_bonus)
if not rpg_t[player.index].health_bar then if not rpg_t.health_bar then
rpg_t[player.index].health_bar = create_healthbar(player, 0.5) rpg_t.health_bar = create_healthbar(player, 0.5)
elseif not rendering.is_valid(rpg_t[player.index].health_bar) then elseif not rendering.is_valid(rpg_t.health_bar) then
rpg_t[player.index].health_bar = create_healthbar(player, 0.5) rpg_t.health_bar = create_healthbar(player, 0.5)
end end
set_bar(player.character.health, max_life, rpg_t[player.index].health_bar) set_bar(player.character.health, max_life, rpg_t.health_bar)
else else
if rpg_t[player.index].health_bar then if rpg_t.health_bar then
if rendering.is_valid(rpg_t[player.index].health_bar) then if rendering.is_valid(rpg_t.health_bar) then
rendering.destroy(rpg_t[player.index].health_bar) rendering.destroy(rpg_t.health_bar)
end end
end end
end end
@ -411,8 +417,8 @@ function Public.update_health(player)
end end
function Public.level_limit_exceeded(player, value) function Public.level_limit_exceeded(player, value)
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
if not rpg_extra.level_limit_enabled then if not rpg_extra.level_limit_enabled then
return false return false
end end
@ -430,7 +436,7 @@ function Public.level_limit_exceeded(player, value)
[10] = 210 [10] = 210
} }
local level = rpg_t[player.index].level local level = rpg_t.level
local zone = rpg_extra.breached_walls local zone = rpg_extra.breached_walls
if zone >= 11 then if zone >= 11 then
zone = 10 zone = 10
@ -474,37 +480,37 @@ function Public.xp_effects(player)
end end
function Public.get_melee_modifier(player) function Public.get_melee_modifier(player)
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
return (rpg_t[player.index].strength - 10) * 0.10 return (rpg_t.strength - 10) * 0.10
end end
function Public.get_heal_modifier(player) function Public.get_heal_modifier(player)
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
return (rpg_t[player.index].vitality - 10) * 0.06 return (rpg_t.vitality - 10) * 0.06
end end
function Public.get_mana_modifier(player) function Public.get_mana_modifier(player)
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
if rpg_t[player.index].level <= 40 then if rpg_t.level <= 40 then
return (rpg_t[player.index].magicka - 10) * 0.02000 return (rpg_t.magicka - 10) * 0.02000
elseif rpg_t[player.index].level <= 80 then elseif rpg_t.level <= 80 then
return (rpg_t[player.index].magicka - 10) * 0.01800 return (rpg_t.magicka - 10) * 0.01800
else else
return (rpg_t[player.index].magicka - 10) * 0.01400 return (rpg_t.magicka - 10) * 0.01400
end end
end end
function Public.get_life_on_hit(player) function Public.get_life_on_hit(player)
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
return (rpg_t[player.index].vitality - 10) * 0.4 return (rpg_t.vitality - 10) * 0.4
end end
function Public.get_one_punch_chance(player) function Public.get_one_punch_chance(player)
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
if rpg_t[player.index].strength < 100 then if rpg_t.strength < 100 then
return 0 return 0
end end
local chance = math.round(rpg_t[player.index].strength * 0.01, 1) local chance = math.round(rpg_t.strength * 0.01, 1)
if chance > 100 then if chance > 100 then
chance = 100 chance = 100
end end
@ -512,20 +518,20 @@ function Public.get_one_punch_chance(player)
end end
function Public.get_extra_following_robots(player) function Public.get_extra_following_robots(player)
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
local strength = rpg_t[player.index].strength local strength = rpg_t.strength
local count = math.round(strength / 2 * 0.03, 3) local count = math.round(strength / 2 * 0.03, 3)
return count return count
end end
function Public.get_magicka(player) function Public.get_magicka(player)
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
return (rpg_t[player.index].magicka - 10) * 0.10 return (rpg_t.magicka - 10) * 0.10
end end
--- Gives connected player some bonus xp if the map was preemptively shut down. --- Gives connected player some bonus xp if the map was preemptively shut down.
-- amount (integer) -- 10 levels -- amount (integer) -- 10 levels
-- local Public = require 'modules.rpg.functions' Public.give_xp(512) -- local Public = require 'modules.rpg.table' Public.give_xp(512)
function Public.give_xp(amount) function Public.give_xp(amount)
for _, player in pairs(game.connected_players) do for _, player in pairs(game.connected_players) do
if not Public.validate_player(player) then if not Public.validate_player(player) then
@ -540,94 +546,104 @@ function Public.rpg_reset_player(player, one_time_reset)
player.set_controller({type = defines.controllers.god}) player.set_controller({type = defines.controllers.god})
player.create_character() player.create_character()
end end
local RPG_GUI = is_loaded('modules.rpg.gui') local rpg_t = Public.get_value_from_player(player.index)
local rpg_t = RPG.get('rpg_t') local rpg_extra = Public.get('rpg_extra')
local rpg_extra = RPG.get('rpg_extra')
if one_time_reset then if one_time_reset then
local total = rpg_t[player.index].total local total = rpg_t.total
if not total then if not total then
total = 0 total = 0
end end
local old_level = rpg_t[player.index].level if rpg_t.text then
local old_points_to_distribute = rpg_t[player.index].points_left rendering.destroy(rpg_t.text)
local old_xp = rpg_t[player.index].xp rpg_t.text = nil
rpg_t[player.index] = { end
level = 1, local old_level = rpg_t.level
xp = 0, local old_points_left = rpg_t.points_left
strength = 10, local old_xp = rpg_t.xp
magicka = 10, rpg_t =
dexterity = 10, Public.set_new_player_tbl(
vitality = 10, player.index,
mana = 0, {
mana_max = 0, level = 1,
last_spawned = 0, xp = 0,
dropdown_select_index = 1, strength = 10,
dropdown_select_index1 = 1, magicka = 10,
dropdown_select_index2 = 1, dexterity = 10,
dropdown_select_index3 = 1, vitality = 10,
allocate_index = 1, mana = 0,
flame_boots = false, mana_max = 0,
explosive_bullets = false, last_spawned = 0,
enable_entity_spawn = false, dropdown_select_index = 1,
health_bar = rpg_t[player.index].health_bar, dropdown_select_index1 = 1,
mana_bar = rpg_t[player.index].mana_bar, dropdown_select_index2 = 1,
points_left = 0, dropdown_select_index3 = 1,
last_floaty_text = visuals_delay, allocate_index = 1,
xp_since_last_floaty_text = 0, flame_boots = false,
reset = true, explosive_bullets = false,
capped = false, enable_entity_spawn = false,
bonus = rpg_extra.breached_walls or 1, health_bar = rpg_t.health_bar,
rotated_entity_delay = 0, mana_bar = rpg_t.mana_bar,
last_mined_entity_position = {x = 0, y = 0}, points_left = 0,
show_bars = false, last_floaty_text = visuals_delay,
stone_path = false, xp_since_last_floaty_text = 0,
one_punch = false reset = true,
} capped = false,
rpg_t[player.index].points_left = old_points_to_distribute + total bonus = rpg_extra.breached_walls or 1,
rpg_t[player.index].xp = old_xp rotated_entity_delay = 0,
rpg_t[player.index].level = old_level last_mined_entity_position = {x = 0, y = 0},
show_bars = false,
stone_path = false,
one_punch = false
}
)
rpg_t.points_left = old_points_left + total
rpg_t.xp = old_xp
rpg_t.level = old_level
else else
rpg_t[player.index] = { Public.set_new_player_tbl(
level = 1, player.index,
xp = 0, {
strength = 10, level = 1,
magicka = 10, xp = 0,
dexterity = 10, strength = 10,
vitality = 10, magicka = 10,
mana = 0, dexterity = 10,
mana_max = 0, vitality = 10,
last_spawned = 0, mana = 0,
dropdown_select_index = 1, mana_max = 0,
dropdown_select_index1 = 1, last_spawned = 0,
dropdown_select_index2 = 1, dropdown_select_index = 1,
dropdown_select_index3 = 1, dropdown_select_index1 = 1,
allocate_index = 1, dropdown_select_index2 = 1,
flame_boots = false, dropdown_select_index3 = 1,
explosive_bullets = false, allocate_index = 1,
enable_entity_spawn = false, flame_boots = false,
points_left = 0, explosive_bullets = false,
last_floaty_text = visuals_delay, enable_entity_spawn = false,
xp_since_last_floaty_text = 0, points_left = 0,
reset = false, last_floaty_text = visuals_delay,
capped = false, xp_since_last_floaty_text = 0,
total = 0, reset = false,
bonus = 1, capped = false,
rotated_entity_delay = 0, total = 0,
last_mined_entity_position = {x = 0, y = 0}, bonus = 1,
show_bars = false, rotated_entity_delay = 0,
stone_path = false, last_mined_entity_position = {x = 0, y = 0},
one_punch = false show_bars = false,
} stone_path = false,
one_punch = false
}
)
end end
RPG_GUI.draw_gui_char_button(player) Public.draw_gui_char_button(player)
RPG_GUI.draw_level_text(player) Public.draw_level_text(player)
RPG_GUI.update_char_button(player) Public.update_char_button(player)
RPG_GUI.update_player_stats(player) Public.update_player_stats(player)
end end
function Public.rpg_reset_all_players() function Public.rpg_reset_all_players()
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get('rpg_t')
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
for k, _ in pairs(rpg_t) do for k, _ in pairs(rpg_t) do
rpg_t[k] = nil rpg_t[k] = nil
end end
@ -643,13 +659,13 @@ function Public.gain_xp(player, amount, added_to_pool, text)
if not Public.validate_player(player) then if not Public.validate_player(player) then
return return
end end
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
if Public.level_limit_exceeded(player) then if Public.level_limit_exceeded(player) then
add_to_global_pool(amount, false) add_to_global_pool(amount, false)
if not rpg_t[player.index].capped then if not rpg_t.capped then
rpg_t[player.index].capped = true rpg_t.capped = true
local message = ({'rpg_functions.max_level'}) local message = ({'rpg_functions.max_level'})
Alert.alert_player_warning(player, 10, message) Alert.alert_player_warning(player, 10, message)
end end
@ -658,27 +674,27 @@ function Public.gain_xp(player, amount, added_to_pool, text)
local text_to_draw local text_to_draw
if rpg_t[player.index].capped then if rpg_t.capped then
rpg_t[player.index].capped = false rpg_t.capped = false
end end
if not added_to_pool then if not added_to_pool then
RPG.debug_log('RPG - ' .. player.name .. ' got org xp: ' .. amount) Public.debug_log('RPG - ' .. player.name .. ' got org xp: ' .. amount)
local fee = amount - add_to_global_pool(amount, true) local fee = amount - add_to_global_pool(amount, true)
RPG.debug_log('RPG - ' .. player.name .. ' got fee: ' .. fee) Public.debug_log('RPG - ' .. player.name .. ' got fee: ' .. fee)
amount = math.round(amount, 3) - fee amount = math.round(amount, 3) - fee
if rpg_extra.difficulty then if rpg_extra.difficulty then
amount = amount + rpg_extra.difficulty amount = amount + rpg_extra.difficulty
end end
RPG.debug_log('RPG - ' .. player.name .. ' got after fee: ' .. amount) Public.debug_log('RPG - ' .. player.name .. ' got after fee: ' .. amount)
else else
RPG.debug_log('RPG - ' .. player.name .. ' got org xp: ' .. amount) Public.debug_log('RPG - ' .. player.name .. ' got org xp: ' .. amount)
end end
rpg_t[player.index].xp = math.round(rpg_t[player.index].xp + amount, 3) rpg_t.xp = math.round(rpg_t.xp + amount, 3)
rpg_t[player.index].xp_since_last_floaty_text = rpg_t[player.index].xp_since_last_floaty_text + amount rpg_t.xp_since_last_floaty_text = rpg_t.xp_since_last_floaty_text + amount
if not experience_levels[rpg_t[player.index].level + 1] then if not experience_levels[rpg_t.level + 1] then
return return
end end
@ -686,15 +702,15 @@ function Public.gain_xp(player, amount, added_to_pool, text)
if f and f.valid then if f and f.valid then
local d = Gui.get_data(f) local d = Gui.get_data(f)
if d.exp_gui and d.exp_gui.valid then if d.exp_gui and d.exp_gui.valid then
d.exp_gui.caption = math.floor(rpg_t[player.index].xp) d.exp_gui.caption = math.floor(rpg_t.xp)
end end
end end
if rpg_t[player.index].xp >= experience_levels[rpg_t[player.index].level + 1] then if rpg_t.xp >= experience_levels[rpg_t.level + 1] then
level_up(player) level_up(player)
end end
if rpg_t[player.index].last_floaty_text > game.tick then if rpg_t.last_floaty_text > game.tick then
if not text then if not text then
return return
end end
@ -703,7 +719,7 @@ function Public.gain_xp(player, amount, added_to_pool, text)
if text then if text then
text_to_draw = '+' .. math.floor(amount) .. ' xp' text_to_draw = '+' .. math.floor(amount) .. ' xp'
else else
text_to_draw = '+' .. math.floor(rpg_t[player.index].xp_since_last_floaty_text) .. ' xp' text_to_draw = '+' .. math.floor(rpg_t.xp_since_last_floaty_text) .. ' xp'
end end
player.create_local_flying_text { player.create_local_flying_text {
@ -714,12 +730,12 @@ function Public.gain_xp(player, amount, added_to_pool, text)
speed = 2 speed = 2
} }
rpg_t[player.index].xp_since_last_floaty_text = 0 rpg_t.xp_since_last_floaty_text = 0
rpg_t[player.index].last_floaty_text = game.tick + visuals_delay rpg_t.last_floaty_text = game.tick + visuals_delay
end end
function Public.global_pool(players, count) function Public.global_pool(players, count)
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
if not rpg_extra.global_pool then if not rpg_extra.global_pool then
return return
@ -739,7 +755,7 @@ function Public.global_pool(players, count)
local share = pool / count local share = pool / count
RPG.debug_log('RPG - Share per player:' .. share) Public.debug_log('RPG - Share per player:' .. share)
for i = 1, #players do for i = 1, #players do
local p = players[i] local p = players[i]
@ -750,14 +766,14 @@ function Public.global_pool(players, count)
else else
share = share / 10 share = share / 10
rpg_extra.leftover_pool = rpg_extra.leftover_pool + share rpg_extra.leftover_pool = rpg_extra.leftover_pool + share
RPG.debug_log('RPG - player capped: ' .. p.name .. '. Amount to pool:' .. share) Public.debug_log('RPG - player capped: ' .. p.name .. '. Amount to pool:' .. share)
end end
else else
local message = ({'rpg_functions.pool_reward', p.name}) local message = ({'rpg_functions.pool_reward', p.name})
Alert.alert_player_warning(p, 10, message) Alert.alert_player_warning(p, 10, message)
share = share / 10 share = share / 10
rpg_extra.leftover_pool = rpg_extra.leftover_pool + share rpg_extra.leftover_pool = rpg_extra.leftover_pool + share
RPG.debug_log('RPG - player AFK: ' .. p.name .. '. Amount to pool:' .. share) Public.debug_log('RPG - player AFK: ' .. p.name .. '. Amount to pool:' .. share)
end end
end end
@ -801,5 +817,3 @@ function Public.distribute_pool()
end end
Public.add_to_global_pool = add_to_global_pool Public.add_to_global_pool = add_to_global_pool
return Public

View File

@ -3,29 +3,24 @@ local P = require 'player_modifiers'
local Gui = require 'utils.gui' local Gui = require 'utils.gui'
--RPG Modules --RPG Modules
local Functions = require 'modules.rpg.functions' local Public = require 'modules.rpg.table'
local RPG = require 'modules.rpg.table' local classes = Public.classes
local Settings = require 'modules.rpg.settings'
local Public = {}
local classes = RPG.classes
--RPG Settings --RPG Settings
local experience_levels = RPG.experience_levels local experience_levels = Public.experience_levels
--RPG Frames --RPG Frames
local main_frame_name = RPG.main_frame_name local main_frame_name = Public.main_frame_name
local draw_main_frame_name = RPG.draw_main_frame_name local draw_main_frame_name = Public.draw_main_frame_name
local settings_button_name = RPG.settings_button_name local settings_button_name = Public.settings_button_name
local settings_frame_name = RPG.settings_frame_name local settings_frame_name = Public.settings_frame_name
local discard_button_name = RPG.discard_button_name local discard_button_name = Public.discard_button_name
local save_button_name = RPG.save_button_name local save_button_name = Public.save_button_name
local spell_gui_button_name = RPG.spell_gui_button_name local spell_gui_button_name = Public.spell_gui_button_name
local spell_gui_frame_name = RPG.spell_gui_frame_name local spell_gui_frame_name = Public.spell_gui_frame_name
local spell1_button_name = RPG.spell1_button_name local spell1_button_name = Public.spell1_button_name
local spell2_button_name = RPG.spell2_button_name local spell2_button_name = Public.spell2_button_name
local spell3_button_name = RPG.spell3_button_name local spell3_button_name = Public.spell3_button_name
local sub = string.sub local sub = string.sub
@ -44,11 +39,11 @@ function Public.draw_gui_char_button(player)
end end
function Public.update_char_button(player) function Public.update_char_button(player)
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
if not player.gui.top[draw_main_frame_name] then if not player.gui.top[draw_main_frame_name] then
Public.draw_gui_char_button(player) Public.draw_gui_char_button(player)
end end
if rpg_t[player.index].points_left > 0 then if rpg_t.points_left > 0 then
player.gui.top[draw_main_frame_name].style.font_color = {245, 0, 0} player.gui.top[draw_main_frame_name].style.font_color = {245, 0, 0}
else else
player.gui.top[draw_main_frame_name].style.font_color = {175, 175, 175} player.gui.top[draw_main_frame_name].style.font_color = {175, 175, 175}
@ -56,13 +51,13 @@ function Public.update_char_button(player)
end end
local function get_class(player) local function get_class(player)
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
local average = (rpg_t[player.index].strength + rpg_t[player.index].magicka + rpg_t[player.index].dexterity + rpg_t[player.index].vitality) / 4 local average = (rpg_t.strength + rpg_t.magicka + rpg_t.dexterity + rpg_t.vitality) / 4
local high_attribute = 0 local high_attribute = 0
local high_attribute_name = '' local high_attribute_name = ''
for _, attribute in pairs({'strength', 'magicka', 'dexterity', 'vitality'}) do for _, attribute in pairs({'strength', 'magicka', 'dexterity', 'vitality'}) do
if rpg_t[player.index][attribute] > high_attribute then if rpg_t[attribute] > high_attribute then
high_attribute = rpg_t[player.index][attribute] high_attribute = rpg_t[attribute]
high_attribute_name = attribute high_attribute_name = attribute
end end
end end
@ -116,10 +111,10 @@ local function add_elem_stat(element, value, width, height, font, tooltip, name,
end end
local function add_gui_increase_stat(element, name, player) local function add_gui_increase_stat(element, name, player)
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
local sprite = 'virtual-signal/signal-red' local sprite = 'virtual-signal/signal-red'
local symbol = '' local symbol = ''
if rpg_t[player.index].points_left <= 0 then if rpg_t.points_left <= 0 then
sprite = 'virtual-signal/signal-black' sprite = 'virtual-signal/signal-black'
end end
local e = element.add({type = 'sprite-button', name = name, caption = symbol, sprite = sprite}) local e = element.add({type = 'sprite-button', name = name, caption = symbol, sprite = sprite})
@ -133,7 +128,7 @@ local function add_gui_increase_stat(element, name, player)
e.style.vertical_align = 'center' e.style.vertical_align = 'center'
e.style.padding = 0 e.style.padding = 0
e.style.margin = 0 e.style.margin = 0
e.tooltip = ({'rpg_gui.allocate_info', tostring(RPG.points_per_level)}) e.tooltip = ({'rpg_gui.allocate_info', tostring(Public.points_per_level)})
return e return e
end end
@ -182,8 +177,8 @@ local function draw_main_frame(player, location)
end end
local data = {} local data = {}
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
local inside_frame = local inside_frame =
main_frame.add { main_frame.add {
@ -231,21 +226,21 @@ local function draw_main_frame(player, location)
add_gui_description(scroll_table, ({'rpg_gui.level_name'}), 80) add_gui_description(scroll_table, ({'rpg_gui.level_name'}), 80)
if rpg_extra.level_limit_enabled then if rpg_extra.level_limit_enabled then
local level_tooltip = ({'rpg_gui.level_limit', Functions.level_limit_exceeded(player, true)}) local level_tooltip = ({'rpg_gui.level_limit', Public.level_limit_exceeded(player, true)})
add_gui_stat(scroll_table, rpg_t[player.index].level, 80, level_tooltip) add_gui_stat(scroll_table, rpg_t.level, 80, level_tooltip)
else else
add_gui_stat(scroll_table, rpg_t[player.index].level, 80) add_gui_stat(scroll_table, rpg_t.level, 80)
end end
add_gui_description(scroll_table, ({'rpg_gui.experience_name'}), 100) add_gui_description(scroll_table, ({'rpg_gui.experience_name'}), 100)
local exp_gui = add_gui_stat(scroll_table, math.floor(rpg_t[player.index].xp), 125, ({'rpg_gui.gain_info_tooltip'})) local exp_gui = add_gui_stat(scroll_table, math.floor(rpg_t.xp), 125, ({'rpg_gui.gain_info_tooltip'}))
data.exp_gui = exp_gui data.exp_gui = exp_gui
add_gui_description(scroll_table, ' ', 75) add_gui_description(scroll_table, ' ', 75)
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_description(scroll_table, ({'rpg_gui.next_level_name'}), 100)
add_gui_stat(scroll_table, experience_levels[rpg_t[player.index].level + 1], 125, ({'rpg_gui.gain_info_tooltip'})) add_gui_stat(scroll_table, experience_levels[rpg_t.level + 1], 125, ({'rpg_gui.gain_info_tooltip'}))
add_separator(scroll_pane, 400) add_separator(scroll_pane, 400)
@ -258,24 +253,24 @@ local function draw_main_frame(player, location)
local w2 = 63 local w2 = 63
add_gui_description(left_bottom_table, ({'rpg_gui.strength_name'}), w1, ({'rpg_gui.strength_tooltip'})) add_gui_description(left_bottom_table, ({'rpg_gui.strength_name'}), w1, ({'rpg_gui.strength_tooltip'}))
add_gui_stat(left_bottom_table, rpg_t[player.index].strength, w2, ({'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_increase_stat(left_bottom_table, 'strength', player)
add_gui_description(left_bottom_table, ({'rpg_gui.magic_name'}), w1, ({'rpg_gui.magic_tooltip'})) add_gui_description(left_bottom_table, ({'rpg_gui.magic_name'}), w1, ({'rpg_gui.magic_tooltip'}))
add_gui_stat(left_bottom_table, rpg_t[player.index].magicka, w2, ({'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_increase_stat(left_bottom_table, 'magicka', player)
add_gui_description(left_bottom_table, ({'rpg_gui.dexterity_name'}), w1, ({'rpg_gui.dexterity_tooltip'})) add_gui_description(left_bottom_table, ({'rpg_gui.dexterity_name'}), w1, ({'rpg_gui.dexterity_tooltip'}))
add_gui_stat(left_bottom_table, rpg_t[player.index].dexterity, w2, ({'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_increase_stat(left_bottom_table, 'dexterity', player)
add_gui_description(left_bottom_table, ({'rpg_gui.vitality_name'}), w1, ({'rpg_gui.vitality_tooltip'})) add_gui_description(left_bottom_table, ({'rpg_gui.vitality_name'}), w1, ({'rpg_gui.vitality_tooltip'}))
add_gui_stat(left_bottom_table, rpg_t[player.index].vitality, w2, ({'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_increase_stat(left_bottom_table, 'vitality', player)
add_gui_description(left_bottom_table, ({'rpg_gui.points_to_dist'}), w1) add_gui_description(left_bottom_table, ({'rpg_gui.points_to_dist'}), w1)
add_gui_stat(left_bottom_table, rpg_t[player.index].points_left, w2, nil, nil, {200, 0, 0}) 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, ' ', w2)
add_gui_description(left_bottom_table, ' ', 40) add_gui_description(left_bottom_table, ' ', 40)
@ -320,14 +315,14 @@ local function draw_main_frame(player, location)
end end
if rpg_extra.enable_mana then if rpg_extra.enable_mana then
local mana = rpg_t[player.index].mana local mana = rpg_t.mana
local mana_max = rpg_t[player.index].mana_max local mana_max = rpg_t.mana_max
local mana_tip = ({'rpg_gui.mana_tooltip'}) local mana_tip = ({'rpg_gui.mana_tooltip'})
add_gui_description(left_bottom_table, ({'rpg_gui.mana_name'}), w1, mana_tip) add_gui_description(left_bottom_table, ({'rpg_gui.mana_name'}), w1, mana_tip)
local mana_regen_tip = ({'rpg_gui.mana_regen_current'}) local mana_regen_tip = ({'rpg_gui.mana_regen_current'})
local mana_max_regen_tip local mana_max_regen_tip
if rpg_t[player.index].mana_max >= rpg_extra.mana_limit then if rpg_t.mana_max >= rpg_extra.mana_limit then
mana_max_regen_tip = ({'rpg_gui.mana_max_limit'}) mana_max_regen_tip = ({'rpg_gui.mana_max_limit'})
else else
mana_max_regen_tip = ({'rpg_gui.mana_max'}) mana_max_regen_tip = ({'rpg_gui.mana_max'})
@ -353,14 +348,14 @@ local function draw_main_frame(player, location)
add_gui_description(right_bottom_table, ' ', w0) add_gui_description(right_bottom_table, ' ', w0)
add_gui_description(right_bottom_table, ({'rpg_gui.melee_name'}), w1) add_gui_description(right_bottom_table, ({'rpg_gui.melee_name'}), w1)
local melee_damage_value = math.round(100 * (1 + Functions.get_melee_modifier(player))) .. '%' local melee_damage_value = math.round(100 * (1 + Public.get_melee_modifier(player))) .. '%'
local melee_damage_tooltip local melee_damage_tooltip
if rpg_extra.enable_one_punch then if rpg_extra.enable_one_punch then
melee_damage_tooltip = ({ melee_damage_tooltip = ({
'rpg_gui.one_punch_chance', 'rpg_gui.one_punch_chance',
Functions.get_life_on_hit(player), Public.get_life_on_hit(player),
Functions.get_one_punch_chance(player), Public.get_one_punch_chance(player),
Functions.get_extra_following_robots(player) Public.get_extra_following_robots(player)
}) })
else else
melee_damage_tooltip = ({'rpg_gui.one_punch_disabled'}) melee_damage_tooltip = ({'rpg_gui.one_punch_disabled'})
@ -380,7 +375,7 @@ local function draw_main_frame(player, location)
player.character_loot_pickup_distance_bonus, player.character_loot_pickup_distance_bonus,
player.character_item_pickup_distance_bonus, player.character_item_pickup_distance_bonus,
player.character_resource_reach_distance_bonus, player.character_resource_reach_distance_bonus,
Functions.get_magicka(player) Public.get_magicka(player)
}) })
add_gui_description(right_bottom_table, ' ', w0) add_gui_description(right_bottom_table, ' ', w0)
@ -404,17 +399,17 @@ local function draw_main_frame(player, location)
add_gui_description(right_bottom_table, ' ', w0) add_gui_description(right_bottom_table, ' ', w0)
add_gui_description(right_bottom_table, ({'rpg_gui.health_bonus_name'}), w1) add_gui_description(right_bottom_table, ({'rpg_gui.health_bonus_name'}), w1)
local health_bonus_value = '+ ' .. math.round((player.force.character_health_bonus + player.character_health_bonus)) local health_bonus_value = '+ ' .. math.round((player.force.character_health_bonus + player.character_health_bonus))
local health_tooltip = ({'rpg_gui.health_tooltip', Functions.get_heal_modifier(player)}) 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_stat(right_bottom_table, health_bonus_value, w2, health_tooltip)
add_gui_description(right_bottom_table, ' ', w0) add_gui_description(right_bottom_table, ' ', w0)
if rpg_extra.enable_mana then if rpg_extra.enable_mana then
add_gui_description(right_bottom_table, ({'rpg_gui.mana_bonus'}), w1) add_gui_description(right_bottom_table, ({'rpg_gui.mana_bonus'}), w1)
local mana_bonus_value = '+ ' .. (math.floor(Functions.get_mana_modifier(player) * 10) / 10) local mana_bonus_value = '+ ' .. (math.floor(Public.get_mana_modifier(player) * 10) / 10)
local mana_bonus_tooltip = ({ local mana_bonus_tooltip = ({
'rpg_gui.mana_regen_bonus', 'rpg_gui.mana_regen_bonus',
(math.floor(Functions.get_mana_modifier(player) * 10) / 10) (math.floor(Public.get_mana_modifier(player) * 10) / 10)
}) })
add_gui_stat(right_bottom_table, mana_bonus_value, w2, mana_bonus_tooltip) add_gui_stat(right_bottom_table, mana_bonus_value, w2, mana_bonus_tooltip)
end end
@ -432,15 +427,15 @@ function Public.draw_level_text(player)
return return
end end
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
if not rpg_t[player.index] then if not rpg_t then
return return
end end
if rpg_t[player.index].text then if rpg_t.text then
rendering.destroy(rpg_t[player.index].text) rendering.destroy(rpg_t.text)
rpg_t[player.index].text = nil rpg_t.text = nil
end end
local players = {} local players = {}
@ -453,9 +448,9 @@ function Public.draw_level_text(player)
return return
end end
rpg_t[player.index].text = rpg_t.text =
rendering.draw_text { rendering.draw_text {
text = 'lvl ' .. rpg_t[player.index].level, text = 'lvl ' .. rpg_t.level,
surface = player.surface, surface = player.surface,
target = player.character, target = player.character,
target_offset = {0, -3.25}, target_offset = {0, -3.25},
@ -474,14 +469,14 @@ function Public.draw_level_text(player)
end end
function Public.update_player_stats(player) function Public.update_player_stats(player)
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
local strength = rpg_t[player.index].strength - 10 local strength = rpg_t.strength - 10
P.update_single_modifier(player, 'character_inventory_slots_bonus', 'rpg', math.round(strength * 0.2, 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_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)) 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 magic = rpg_t.magicka - 10
local v = magic * 0.22 local v = magic * 0.22
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_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_item_drop_distance_bonus', 'rpg', math.min(60, math.round(v * 0.25, 3)))
@ -489,16 +484,16 @@ function Public.update_player_stats(player)
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_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_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))) 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 if rpg_t.mana_max >= rpg_extra.mana_limit then
rpg_t[player.index].mana_max = rpg_extra.mana_limit rpg_t.mana_max = rpg_extra.mana_limit
else else
rpg_t[player.index].mana_max = math.round((magic) * 2, 3) rpg_t.mana_max = math.round((magic) * 2, 3)
end end
local dexterity = rpg_t[player.index].dexterity - 10 local dexterity = rpg_t.dexterity - 10
P.update_single_modifier(player, 'character_running_speed_modifier', 'rpg', math.round(dexterity * 0.0015, 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_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_single_modifier(player, 'character_health_bonus', 'rpg', math.round((rpg_t.vitality - 10) * 6, 3))
P.update_player_modifiers(player) P.update_player_modifiers(player)
end end
@ -572,50 +567,50 @@ Gui.on_click(
local one_punch_gui_input = data.one_punch_gui_input local one_punch_gui_input = data.one_punch_gui_input
local auto_allocate_gui_input = data.auto_allocate_gui_input local auto_allocate_gui_input = data.auto_allocate_gui_input
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
if frame and frame.valid then 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 if auto_allocate_gui_input and auto_allocate_gui_input.valid and auto_allocate_gui_input.selected_index then
rpg_t[player.index].allocate_index = auto_allocate_gui_input.selected_index rpg_t.allocate_index = auto_allocate_gui_input.selected_index
end end
if one_punch_gui_input and one_punch_gui_input.valid then if one_punch_gui_input and one_punch_gui_input.valid then
if not one_punch_gui_input.state then if not one_punch_gui_input.state then
rpg_t[player.index].one_punch = false rpg_t.one_punch = false
elseif one_punch_gui_input.state then elseif one_punch_gui_input.state then
rpg_t[player.index].one_punch = true rpg_t.one_punch = true
end end
end end
if stone_path_gui_input and stone_path_gui_input.valid then if stone_path_gui_input and stone_path_gui_input.valid then
if not stone_path_gui_input.state then if not stone_path_gui_input.state then
rpg_t[player.index].stone_path = false rpg_t.stone_path = false
elseif stone_path_gui_input.state then elseif stone_path_gui_input.state then
rpg_t[player.index].stone_path = true rpg_t.stone_path = true
end end
end end
if enable_entity_gui_input and enable_entity_gui_input.valid then if enable_entity_gui_input and enable_entity_gui_input.valid then
if not enable_entity_gui_input.state then if not enable_entity_gui_input.state then
rpg_t[player.index].enable_entity_spawn = false rpg_t.enable_entity_spawn = false
elseif enable_entity_gui_input.state then elseif enable_entity_gui_input.state then
rpg_t[player.index].enable_entity_spawn = true rpg_t.enable_entity_spawn = true
end end
end end
if flame_boots_gui_input and flame_boots_gui_input.valid then if flame_boots_gui_input and flame_boots_gui_input.valid then
if not flame_boots_gui_input.state then if not flame_boots_gui_input.state then
rpg_t[player.index].flame_boots = false rpg_t.flame_boots = false
elseif flame_boots_gui_input.state then elseif flame_boots_gui_input.state then
rpg_t[player.index].flame_boots = true rpg_t.flame_boots = true
end end
end end
if explosive_bullets_gui_input and explosive_bullets_gui_input.valid then if explosive_bullets_gui_input and explosive_bullets_gui_input.valid then
if not explosive_bullets_gui_input.state then if not explosive_bullets_gui_input.state then
rpg_t[player.index].explosive_bullets = false rpg_t.explosive_bullets = false
elseif explosive_bullets_gui_input.state then elseif explosive_bullets_gui_input.state then
rpg_t[player.index].explosive_bullets = true rpg_t.explosive_bullets = true
end end
end end
@ -649,37 +644,37 @@ Gui.on_click(
end end
end end
if conjure_gui_input and conjure_gui_input.valid and conjure_gui_input.selected_index then if conjure_gui_input and conjure_gui_input.valid and conjure_gui_input.selected_index then
rpg_t[player.index].dropdown_select_index = conjure_gui_input.selected_index rpg_t.dropdown_select_index = conjure_gui_input.selected_index
end end
if spell_gui_input1 and spell_gui_input1.valid and spell_gui_input1.selected_index then if spell_gui_input1 and spell_gui_input1.valid and spell_gui_input1.selected_index then
rpg_t[player.index].dropdown_select_index1 = spell_gui_input1.selected_index rpg_t.dropdown_select_index1 = spell_gui_input1.selected_index
end end
if spell_gui_input2 and spell_gui_input2.valid and spell_gui_input2.selected_index then if spell_gui_input2 and spell_gui_input2.valid and spell_gui_input2.selected_index then
rpg_t[player.index].dropdown_select_index2 = spell_gui_input2.selected_index rpg_t.dropdown_select_index2 = spell_gui_input2.selected_index
end end
if spell_gui_input3 and spell_gui_input3.valid and spell_gui_input3.selected_index then if spell_gui_input3 and spell_gui_input3.valid and spell_gui_input3.selected_index then
rpg_t[player.index].dropdown_select_index3 = spell_gui_input3.selected_index rpg_t.dropdown_select_index3 = spell_gui_input3.selected_index
end end
if player.gui.screen[spell_gui_frame_name] then if player.gui.screen[spell_gui_frame_name] then
Settings.update_spell_gui(player, nil) Public.update_spell_gui(player, nil)
end end
if reset_gui_input and reset_gui_input.valid and reset_gui_input.state then if reset_gui_input and reset_gui_input.valid and reset_gui_input.state then
if not rpg_t[player.index].reset then if not rpg_t.reset then
rpg_t[player.index].allocate_index = 1 rpg_t.allocate_index = 1
rpg_t[player.index].reset = true rpg_t.reset = true
Functions.rpg_reset_player(player, true) Public.rpg_reset_player(player, true)
end end
end end
if health_bar_gui_input and health_bar_gui_input.valid then if health_bar_gui_input and health_bar_gui_input.valid then
if not health_bar_gui_input.state then if not health_bar_gui_input.state then
rpg_t[player.index].show_bars = false rpg_t.show_bars = false
Functions.update_health(player) Public.update_health(player)
Functions.update_mana(player) Public.update_mana(player)
elseif health_bar_gui_input.state then elseif health_bar_gui_input.state then
rpg_t[player.index].show_bars = true rpg_t.show_bars = true
Functions.update_health(player) Public.update_health(player)
Functions.update_mana(player) Public.update_mana(player)
end end
end end
@ -718,7 +713,7 @@ Gui.on_click(
return return
end end
local surface_name = RPG.get('rpg_extra').surface_name local surface_name = Public.get('rpg_extra').surface_name
if sub(player.surface.name, 0, #surface_name) ~= surface_name then if sub(player.surface.name, 0, #surface_name) ~= surface_name then
return return
end end
@ -727,7 +722,7 @@ Gui.on_click(
Gui.remove_data_recursively(frame) Gui.remove_data_recursively(frame)
frame.destroy() frame.destroy()
else else
Settings.extra_settings(player) Public.extra_settings(player)
end end
end end
) )
@ -742,7 +737,7 @@ Gui.on_click(
return return
end end
local surface_name = RPG.get('rpg_extra').surface_name local surface_name = Public.get('rpg_extra').surface_name
if sub(player.surface.name, 0, #surface_name) ~= surface_name then if sub(player.surface.name, 0, #surface_name) ~= surface_name then
return return
end end
@ -751,7 +746,7 @@ Gui.on_click(
Gui.remove_data_recursively(frame) Gui.remove_data_recursively(frame)
frame.destroy() frame.destroy()
else else
Settings.spell_gui_settings(player) Public.spell_gui_settings(player)
end end
end end
) )
@ -766,13 +761,13 @@ Gui.on_click(
return return
end end
local surface_name = RPG.get('rpg_extra').surface_name local surface_name = Public.get('rpg_extra').surface_name
if sub(player.surface.name, 0, #surface_name) ~= surface_name then if sub(player.surface.name, 0, #surface_name) ~= surface_name then
return return
end end
if frame and frame.valid then if frame and frame.valid then
Settings.update_spell_gui(player, 1) Public.update_spell_gui(player, 1)
end end
end end
) )
@ -787,13 +782,13 @@ Gui.on_click(
return return
end end
local surface_name = RPG.get('rpg_extra').surface_name local surface_name = Public.get('rpg_extra').surface_name
if sub(player.surface.name, 0, #surface_name) ~= surface_name then if sub(player.surface.name, 0, #surface_name) ~= surface_name then
return return
end end
if frame and frame.valid then if frame and frame.valid then
Settings.update_spell_gui(player, 2) Public.update_spell_gui(player, 2)
end end
end end
) )
@ -808,13 +803,13 @@ Gui.on_click(
return return
end end
local surface_name = RPG.get('rpg_extra').surface_name local surface_name = Public.get('rpg_extra').surface_name
if sub(player.surface.name, 0, #surface_name) ~= surface_name then if sub(player.surface.name, 0, #surface_name) ~= surface_name then
return return
end end
if frame and frame.valid then if frame and frame.valid then
Settings.update_spell_gui(player, 3) Public.update_spell_gui(player, 3)
end end
end end
) )

View File

@ -1,3 +1,5 @@
--RPG Modules
local Public = require 'modules.rpg.core'
local Gui = require 'utils.gui' local Gui = require 'utils.gui'
local Event = require 'utils.event' local Event = require 'utils.event'
local AntiGrief = require 'antigrief' local AntiGrief = require 'antigrief'
@ -9,21 +11,14 @@ local Explosives = require 'modules.explosives'
local WD = require 'modules.wave_defense.table' local WD = require 'modules.wave_defense.table'
local Math2D = require 'math2d' local Math2D = require 'math2d'
--RPG Modules
require 'modules.rpg.commands'
local ExplosiveBullets = require 'modules.rpg.explosive_gun_bullets'
local RPG = require 'modules.rpg.table'
local Functions = require 'modules.rpg.functions'
local RPG_GUI = require 'modules.rpg.gui'
--RPG Settings --RPG Settings
local enemy_types = RPG.enemy_types local enemy_types = Public.enemy_types
local die_cause = RPG.die_cause local die_cause = Public.die_cause
local points_per_level = RPG.points_per_level local points_per_level = Public.points_per_level
local nth_tick = RPG.nth_tick local nth_tick = Public.nth_tick
--RPG Frames --RPG Frames
local main_frame_name = RPG.main_frame_name local main_frame_name = Public.main_frame_name
local sub = string.sub local sub = string.sub
@ -50,7 +45,7 @@ local function on_gui_click(event)
end end
end end
local surface_name = RPG.get('rpg_extra').surface_name local surface_name = Public.get('rpg_extra').surface_name
if sub(player.surface.name, 0, #surface_name) ~= surface_name then if sub(player.surface.name, 0, #surface_name) ~= surface_name then
return return
end end
@ -68,7 +63,7 @@ local function on_gui_click(event)
return return
end end
local rpg_t = RPG.get_value_from_player(player.index) local rpg_t = Public.get_value_from_player(player.index)
local index = element.name local index = element.name
if not rpg_t[index] then if not rpg_t[index] then
@ -88,12 +83,12 @@ local function on_gui_click(event)
if not rpg_t.reset then if not rpg_t.reset then
rpg_t.total = rpg_t.total + count rpg_t.total = rpg_t.total + count
end end
RPG_GUI.toggle(player, true) Public.toggle(player, true)
RPG_GUI.update_player_stats(player) Public.update_player_stats(player)
elseif event.button == defines.mouse_button_type.right then elseif event.button == defines.mouse_button_type.right then
for _ = 1, points_per_level, 1 do for _ = 1, points_per_level, 1 do
if rpg_t.points_left <= 0 then if rpg_t.points_left <= 0 then
RPG_GUI.toggle(player, true) Public.toggle(player, true)
return return
end end
rpg_t.points_left = rpg_t.points_left - 1 rpg_t.points_left = rpg_t.points_left - 1
@ -101,14 +96,14 @@ local function on_gui_click(event)
if not rpg_t.reset then if not rpg_t.reset then
rpg_t.total = rpg_t.total + 1 rpg_t.total = rpg_t.total + 1
end end
RPG_GUI.update_player_stats(player) Public.update_player_stats(player)
end end
RPG_GUI.toggle(player, true) Public.toggle(player, true)
return return
end end
if rpg_t.points_left <= 0 then if rpg_t.points_left <= 0 then
RPG_GUI.toggle(player, true) Public.toggle(player, true)
return return
end end
rpg_t.points_left = rpg_t.points_left - 1 rpg_t.points_left = rpg_t.points_left - 1
@ -116,8 +111,8 @@ local function on_gui_click(event)
if not rpg_t.reset then if not rpg_t.reset then
rpg_t.total = rpg_t.total + 1 rpg_t.total = rpg_t.total + 1
end end
RPG_GUI.update_player_stats(player) Public.update_player_stats(player)
RPG_GUI.toggle(player, true) Public.toggle(player, true)
end end
local function train_type_cause(cause) local function train_type_cause(cause)
@ -201,13 +196,13 @@ local function on_entity_died(event)
end end
end end
end end
Functions.gain_xp(entity.last_user, 1) Public.gain_xp(entity.last_user, 1)
Functions.reward_mana(entity.last_user, 1) Public.reward_mana(entity.last_user, 1)
return return
end end
end end
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
if rpg_extra.enable_wave_defense then if rpg_extra.enable_wave_defense then
if rpg_extra.rpg_xp_yield['big-biter'] <= 16 then if rpg_extra.rpg_xp_yield['big-biter'] <= 16 then
@ -245,10 +240,10 @@ local function on_entity_died(event)
end end
if rpg_extra.turret_kills_to_global_pool then if rpg_extra.turret_kills_to_global_pool then
Functions.add_to_global_pool(amount, false) Public.add_to_global_pool(amount, false)
end end
else else
Functions.add_to_global_pool(0.5, false) Public.add_to_global_pool(0.5, false)
end end
return return
end end
@ -284,13 +279,13 @@ local function on_entity_died(event)
amount = rpg_extra.rpg_xp_yield[entity.name] amount = rpg_extra.rpg_xp_yield[entity.name]
end end
if rpg_extra.turret_kills_to_global_pool then if rpg_extra.turret_kills_to_global_pool then
local inserted = Functions.add_to_global_pool(amount, true) local inserted = Public.add_to_global_pool(amount, true)
Functions.gain_xp(player, inserted, true) Public.gain_xp(player, inserted, true)
else else
Functions.gain_xp(player, amount) Public.gain_xp(player, amount)
end end
else else
Functions.gain_xp(player, 0.5 * (1 / health_pool[2])) Public.gain_xp(player, 0.5 * (1 / health_pool[2]))
end end
end end
return return
@ -303,13 +298,13 @@ local function on_entity_died(event)
if rpg_extra.rpg_xp_yield[entity.name] then if rpg_extra.rpg_xp_yield[entity.name] then
local amount = rpg_extra.rpg_xp_yield[entity.name] local amount = rpg_extra.rpg_xp_yield[entity.name]
if rpg_extra.turret_kills_to_global_pool then if rpg_extra.turret_kills_to_global_pool then
local inserted = Functions.add_to_global_pool(amount, true) local inserted = Public.add_to_global_pool(amount, true)
Functions.gain_xp(player, inserted, true) Public.gain_xp(player, inserted, true)
else else
Functions.gain_xp(player, amount) Public.gain_xp(player, amount)
end end
else else
Functions.gain_xp(player, 0.5) Public.gain_xp(player, 0.5)
end end
end end
end end
@ -317,7 +312,7 @@ end
local function regen_health_player(players) local function regen_health_player(players)
for i = 1, #players do for i = 1, #players do
local player = players[i] local player = players[i]
local heal_per_tick = Functions.get_heal_modifier(player) local heal_per_tick = Public.get_heal_modifier(player)
if heal_per_tick <= 0 then if heal_per_tick <= 0 then
goto continue goto continue
end end
@ -330,16 +325,16 @@ local function regen_health_player(players)
::continue:: ::continue::
Functions.update_health(player) Public.update_health(player)
end end
end end
local function regen_mana_player(players) local function regen_mana_player(players)
for i = 1, #players do for i = 1, #players do
local player = players[i] local player = players[i]
local mana_per_tick = Functions.get_mana_modifier(player) local mana_per_tick = Public.get_mana_modifier(player)
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
local rpg_t = RPG.get_value_from_player(player.index) local rpg_t = Public.get_value_from_player(player.index)
if mana_per_tick <= 0.1 then if mana_per_tick <= 0.1 then
mana_per_tick = rpg_extra.mana_per_tick mana_per_tick = rpg_extra.mana_per_tick
end end
@ -366,12 +361,16 @@ local function regen_mana_player(players)
::continue:: ::continue::
Functions.update_mana(player) Public.update_mana(player)
end end
end end
local function give_player_flameboots(player) local function give_player_flameboots(player)
local rpg_t = RPG.get_value_from_player(player.index) local rpg_t = Public.get_value_from_player(player.index)
if not rpg_t then
return
end
if not rpg_t.flame_boots then if not rpg_t.flame_boots then
return return
end end
@ -531,9 +530,9 @@ local function on_entity_damaged(event)
cause.get_inventory(defines.inventory.character_ammo)[cause.selected_gun_index].valid_for_read or cause.get_inventory(defines.inventory.character_ammo)[cause.selected_gun_index].valid_for_read or
cause.get_inventory(defines.inventory.character_guns)[cause.selected_gun_index].valid_for_read cause.get_inventory(defines.inventory.character_guns)[cause.selected_gun_index].valid_for_read
then then
local is_explosive_bullets_enabled = RPG.get_explosive_bullets() local is_explosive_bullets_enabled = Public.get_explosive_bullets()
if is_explosive_bullets_enabled then if is_explosive_bullets_enabled then
ExplosiveBullets.explosive_bullets(event) Public.explosive_bullets(event)
end end
return return
end end
@ -543,7 +542,7 @@ local function on_entity_damaged(event)
local p = cause.player local p = cause.player
local surface_name = RPG.get('rpg_extra').surface_name local surface_name = Public.get('rpg_extra').surface_name
if sub(p.surface.name, 0, #surface_name) ~= surface_name then if sub(p.surface.name, 0, #surface_name) ~= surface_name then
return return
end end
@ -571,13 +570,13 @@ local function on_entity_damaged(event)
end end
end end
Functions.reward_mana(cause.player, 2) Public.reward_mana(cause.player, 2)
--Grant the player life-on-hit. --Grant the player life-on-hit.
cause.health = cause.health + Functions.get_life_on_hit(cause.player) cause.health = cause.health + Public.get_life_on_hit(cause.player)
--Calculate modified damage. --Calculate modified damage.
local damage = event.original_damage_amount + event.original_damage_amount * Functions.get_melee_modifier(cause.player) local damage = event.original_damage_amount + event.original_damage_amount * Public.get_melee_modifier(cause.player)
if entity.prototype.resistances then if entity.prototype.resistances then
if entity.prototype.resistances.physical then if entity.prototype.resistances.physical then
damage = damage - entity.prototype.resistances.physical.decrease damage = damage - entity.prototype.resistances.physical.decrease
@ -589,13 +588,13 @@ local function on_entity_damaged(event)
damage = 1 damage = 1
end end
local enable_one_punch = RPG.get('rpg_extra').enable_one_punch local enable_one_punch = Public.get('rpg_extra').enable_one_punch
local rpg_t = RPG.get_value_from_player(cause.player.index) local rpg_t = Public.get_value_from_player(cause.player.index)
--Cause a one punch. --Cause a one punch.
if enable_one_punch then if enable_one_punch then
if rpg_t.one_punch then if rpg_t.one_punch then
if math.random(0, 999) < Functions.get_one_punch_chance(cause.player) * 10 then if math.random(0, 999) < Public.get_one_punch_chance(cause.player) * 10 then
one_punch(cause, entity, damage) one_punch(cause, entity, damage)
if entity.valid then if entity.valid then
entity.die(entity.force.name, cause) entity.die(entity.force.name, cause)
@ -662,9 +661,9 @@ local function on_entity_damaged(event)
entity.die(cause.force.name, cause) entity.die(cause.force.name, cause)
end end
local is_explosive_bullets_enabled = RPG.get_explosive_bullets() local is_explosive_bullets_enabled = Public.get_explosive_bullets()
if is_explosive_bullets_enabled then if is_explosive_bullets_enabled then
ExplosiveBullets.explosive_bullets(event) Public.explosive_bullets(event)
end end
end end
@ -693,10 +692,10 @@ local function on_player_repaired_entity(event)
return return
end end
Functions.gain_xp(player, 0.05) Public.gain_xp(player, 0.05)
Functions.reward_mana(player, 0.2) Public.reward_mana(player, 0.2)
local repair_speed = Functions.get_magicka(player) local repair_speed = Public.get_magicka(player)
if repair_speed <= 0 then if repair_speed <= 0 then
return return
end end
@ -713,12 +712,12 @@ local function on_player_rotated_entity(event)
return return
end end
local rpg_t = RPG.get_value_from_player(player.index) local rpg_t = Public.get_value_from_player(player.index)
if rpg_t.rotated_entity_delay > game.tick then if rpg_t.rotated_entity_delay > game.tick then
return return
end end
rpg_t.rotated_entity_delay = game.tick + 20 rpg_t.rotated_entity_delay = game.tick + 20
Functions.gain_xp(player, 0.20) Public.gain_xp(player, 0.20)
end end
local function on_player_changed_position(event) local function on_player_changed_position(event)
@ -727,7 +726,7 @@ local function on_player_changed_position(event)
return return
end end
local enable_flame_boots = RPG.get('rpg_extra').enable_flame_boots local enable_flame_boots = Public.get('rpg_extra').enable_flame_boots
if enable_flame_boots then if enable_flame_boots then
give_player_flameboots(player) give_player_flameboots(player)
@ -742,7 +741,7 @@ local function on_player_changed_position(event)
if player.character.driving then if player.character.driving then
return return
end end
Functions.gain_xp(player, 1.0) Public.gain_xp(player, 1.0)
end end
local building_and_mining_blacklist = { local building_and_mining_blacklist = {
@ -758,7 +757,7 @@ local function on_player_died(event)
return return
end end
RPG_GUI.remove_frame(player) Public.remove_frame(player)
end end
local function on_pre_player_left_game(event) local function on_pre_player_left_game(event)
@ -768,7 +767,7 @@ local function on_pre_player_left_game(event)
return return
end end
RPG_GUI.remove_frame(player) Public.remove_frame(player)
end end
local function on_pre_player_mined_item(event) local function on_pre_player_mined_item(event)
@ -788,12 +787,12 @@ local function on_pre_player_mined_item(event)
return return
end end
local surface_name = RPG.get('rpg_extra').surface_name local surface_name = Public.get('rpg_extra').surface_name
if sub(player.surface.name, 0, #surface_name) ~= surface_name then if sub(player.surface.name, 0, #surface_name) ~= surface_name then
return return
end end
local rpg_t = RPG.get_value_from_player(player.index) local rpg_t = Public.get_value_from_player(player.index)
if rpg_t.last_mined_entity_position.x == event.entity.position.x and rpg_t.last_mined_entity_position.y == event.entity.position.y then if rpg_t.last_mined_entity_position.x == event.entity.position.x and rpg_t.last_mined_entity_position.y == event.entity.position.y then
return return
end end
@ -817,8 +816,8 @@ local function on_pre_player_mined_item(event)
end end
end end
Functions.gain_xp(player, xp_amount) Public.gain_xp(player, xp_amount)
Functions.reward_mana(player, 0.5 * distance_multiplier) Public.reward_mana(player, 0.5 * distance_multiplier)
end end
local function on_player_crafted_item(event) local function on_player_crafted_item(event)
@ -834,7 +833,7 @@ local function on_player_crafted_item(event)
return return
end end
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
local is_blacklisted = rpg_extra.tweaked_crafting_items local is_blacklisted = rpg_extra.tweaked_crafting_items
local tweaked_crafting_items_enabled = rpg_extra.tweaked_crafting_items_enabled local tweaked_crafting_items_enabled = rpg_extra.tweaked_crafting_items_enabled
@ -850,41 +849,41 @@ local function on_player_crafted_item(event)
end end
end end
Functions.gain_xp(player, event.recipe.energy * amount) Public.gain_xp(player, event.recipe.energy * amount)
Functions.reward_mana(player, amount) Public.reward_mana(player, amount)
end end
local function on_player_respawned(event) local function on_player_respawned(event)
local player = game.players[event.player_index] local player = game.players[event.player_index]
local rpg_t = RPG.get_value_from_player(player.index) local rpg_t = Public.get_value_from_player(player.index)
if not rpg_t then if not rpg_t then
Functions.rpg_reset_player(player) Public.rpg_reset_player(player)
return return
end end
RPG_GUI.update_player_stats(player) Public.update_player_stats(player)
RPG_GUI.draw_level_text(player) Public.draw_level_text(player)
Functions.update_health(player) Public.update_health(player)
Functions.update_mana(player) Public.update_mana(player)
end end
local function on_player_joined_game(event) local function on_player_joined_game(event)
local player = game.players[event.player_index] local player = game.players[event.player_index]
local rpg_t = RPG.get_value_from_player(player.index) local rpg_t = Public.get_value_from_player(player.index)
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
if not rpg_t then if not rpg_t then
Functions.rpg_reset_player(player) Public.rpg_reset_player(player)
if rpg_extra.reward_new_players > 10 then if rpg_extra.reward_new_players > 10 then
Functions.gain_xp(player, rpg_extra.reward_new_players) Public.gain_xp(player, rpg_extra.reward_new_players)
end end
end end
for _, p in pairs(game.connected_players) do for _, p in pairs(game.connected_players) do
RPG_GUI.draw_level_text(p) Public.draw_level_text(p)
end end
RPG_GUI.draw_gui_char_button(player) Public.draw_gui_char_button(player)
if not player.character then if not player.character then
return return
end end
RPG_GUI.update_player_stats(player) Public.update_player_stats(player)
end end
local function create_projectile(surface, name, position, force, target, max_range) local function create_projectile(surface, name, position, force, target, max_range)
@ -985,14 +984,14 @@ local function tame_unit_effects(player, entity)
end end
local function on_player_used_capsule(event) local function on_player_used_capsule(event)
local enable_mana = RPG.get('rpg_extra').enable_mana local enable_mana = Public.get('rpg_extra').enable_mana
local surface_name = RPG.get('rpg_extra').surface_name local surface_name = Public.get('rpg_extra').surface_name
if not enable_mana then if not enable_mana then
return return
end end
local conjure_items = RPG.get_spells() local conjure_items = Public.get_spells()
local projectile_types = RPG.get_projectiles local projectile_types = Public.get_projectiles
local player = game.players[event.player_index] local player = game.players[event.player_index]
if not player or not player.valid then if not player or not player.valid then
@ -1019,7 +1018,7 @@ local function on_player_used_capsule(event)
return return
end end
local rpg_t = RPG.get_value_from_player(player.index) local rpg_t = Public.get_value_from_player(player.index)
if not rpg_t.enable_entity_spawn then if not rpg_t.enable_entity_spawn then
return return
@ -1092,11 +1091,11 @@ local function on_player_used_capsule(event)
force = 'player' force = 'player'
end end
if obj_name == 'suicidal_comfylatron' then if obj_name == 'suicidal_comfylatron' then
Functions.suicidal_comfylatron(position, surface) Public.suicidal_comfylatron(position, surface)
p(({'rpg_main.suicidal_comfylatron', 'Suicidal Comfylatron'}), Color.success) p(({'rpg_main.suicidal_comfylatron', 'Suicidal Comfylatron'}), Color.success)
rpg_t.mana = rpg_t.mana - object.mana_cost rpg_t.mana = rpg_t.mana - object.mana_cost
elseif obj_name == 'repair_aoe' then elseif obj_name == 'repair_aoe' then
local ents = Functions.repair_aoe(player, position) local ents = Public.repair_aoe(player, position)
p(({'rpg_main.repair_aoe', ents}), Color.success) p(({'rpg_main.repair_aoe', ents}), Color.success)
rpg_t.mana = rpg_t.mana - object.mana_cost rpg_t.mana = rpg_t.mana - object.mana_cost
elseif obj_name == 'pointy_explosives' then elseif obj_name == 'pointy_explosives' then
@ -1118,7 +1117,7 @@ local function on_player_used_capsule(event)
elseif obj_name == 'warp-gate' then elseif obj_name == 'warp-gate' then
player.teleport(surface.find_non_colliding_position('character', game.forces.player.get_spawn_position(surface), 3, 0, 5), surface) player.teleport(surface.find_non_colliding_position('character', game.forces.player.get_spawn_position(surface), 3, 0, 5), surface)
rpg_t.mana = 0 rpg_t.mana = 0
Functions.damage_player_over_time(player, math.random(8, 16)) Public.damage_player_over_time(player, math.random(8, 16))
player.play_sound {path = 'utility/armor_insert', volume_modifier = 1} player.play_sound {path = 'utility/armor_insert', volume_modifier = 1}
p(({'rpg_main.warped_ok'}), Color.info) p(({'rpg_main.warped_ok'}), Color.info)
rpg_t.mana = rpg_t.mana - object.mana_cost rpg_t.mana = rpg_t.mana - object.mana_cost
@ -1179,14 +1178,14 @@ local function on_player_used_capsule(event)
local msg = player.name .. ' casted ' .. obj_name .. '. ' local msg = player.name .. ' casted ' .. obj_name .. '. '
rpg_t.last_spawned = game.tick + object.tick rpg_t.last_spawned = game.tick + object.tick
Functions.update_mana(player) Public.update_mana(player)
local reward_xp = object.mana_cost * 0.085 local reward_xp = object.mana_cost * 0.085
if reward_xp < 1 then if reward_xp < 1 then
reward_xp = 1 reward_xp = 1
end end
Functions.gain_xp(player, reward_xp) Public.gain_xp(player, reward_xp)
AntiGrief.insert_into_capsule_history(player, position, msg) AntiGrief.insert_into_capsule_history(player, position, msg)
@ -1195,18 +1194,22 @@ end
local function on_player_changed_surface(event) local function on_player_changed_surface(event)
local player = game.get_player(event.player_index) local player = game.get_player(event.player_index)
RPG_GUI.draw_level_text(player) Public.draw_level_text(player)
end
local function on_player_removed(event)
Public.remove_player(event.player_index)
end end
local function tick() local function tick()
local ticker = game.tick local ticker = game.tick
local count = #game.connected_players local count = #game.connected_players
local players = game.connected_players local players = game.connected_players
local enable_flameboots = RPG.get('rpg_extra').enable_flameboots local enable_flameboots = Public.get('rpg_extra').enable_flameboots
local enable_mana = RPG.get('rpg_extra').enable_mana local enable_mana = Public.get('rpg_extra').enable_mana
if ticker % nth_tick == 0 then if ticker % nth_tick == 0 then
Functions.global_pool(players, count) Public.global_pool(players, count)
end end
if ticker % 30 == 0 then if ticker % 30 == 0 then
@ -1240,7 +1243,7 @@ if _DEBUG then
return return
end end
p('Distributed ' .. param .. ' of xp.') p('Distributed ' .. param .. ' of xp.')
Functions.give_xp(param) Public.give_xp(param)
end end
end end
end end
@ -1255,10 +1258,14 @@ Event.add(defines.events.on_gui_click, on_gui_click)
Event.add(defines.events.on_player_changed_position, on_player_changed_position) Event.add(defines.events.on_player_changed_position, on_player_changed_position)
Event.add(defines.events.on_player_crafted_item, on_player_crafted_item) Event.add(defines.events.on_player_crafted_item, on_player_crafted_item)
Event.add(defines.events.on_player_joined_game, on_player_joined_game) Event.add(defines.events.on_player_joined_game, on_player_joined_game)
Event.add(defines.events.on_player_created, on_player_joined_game)
Event.add(defines.events.on_player_repaired_entity, on_player_repaired_entity) Event.add(defines.events.on_player_repaired_entity, on_player_repaired_entity)
Event.add(defines.events.on_player_respawned, on_player_respawned) Event.add(defines.events.on_player_respawned, on_player_respawned)
Event.add(defines.events.on_player_rotated_entity, on_player_rotated_entity) Event.add(defines.events.on_player_rotated_entity, on_player_rotated_entity)
Event.add(defines.events.on_pre_player_mined_item, on_pre_player_mined_item) Event.add(defines.events.on_pre_player_mined_item, on_pre_player_mined_item)
Event.add(defines.events.on_player_used_capsule, on_player_used_capsule) Event.add(defines.events.on_player_used_capsule, on_player_used_capsule)
Event.add(defines.events.on_player_changed_surface, on_player_changed_surface) Event.add(defines.events.on_player_changed_surface, on_player_changed_surface)
Event.add(defines.events.on_player_removed, on_player_removed)
Event.on_nth_tick(10, tick) Event.on_nth_tick(10, tick)
return Public

View File

@ -1,18 +1,18 @@
local RPG = require 'modules.rpg.table' local Public = require 'modules.rpg.table'
local Gui = require 'utils.gui' local Gui = require 'utils.gui'
local P = require 'player_modifiers' local P = require 'player_modifiers'
local Session = require 'utils.datastore.session_data' local Session = require 'utils.datastore.session_data'
local Public = {} local settings_frame_name = Public.settings_frame_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 spell1_button_name = Public.spell1_button_name
local spell2_button_name = Public.spell2_button_name
local spell3_button_name = Public.spell3_button_name
local settings_frame_name = RPG.settings_frame_name local settings_level = Public.gui_settings_levels
local save_button_name = RPG.save_button_name
local discard_button_name = RPG.discard_button_name
local spell_gui_button_name = RPG.spell_gui_button_name
local spell_gui_frame_name = RPG.spell_gui_frame_name
local spell1_button_name = RPG.spell1_button_name
local spell2_button_name = RPG.spell2_button_name
local spell3_button_name = RPG.spell3_button_name
local function create_input_element(frame, type, value, items, index) local function create_input_element(frame, type, value, items, index)
if type == 'slider' then if type == 'slider' then
@ -28,8 +28,8 @@ local function create_input_element(frame, type, value, items, index)
end end
function Public.update_spell_gui(player, spell_index) function Public.update_spell_gui(player, spell_index)
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
local spells, names = RPG.rebuild_spells() local spells, names = Public.rebuild_spells()
local main_frame = player.gui.screen[spell_gui_frame_name] local main_frame = player.gui.screen[spell_gui_frame_name]
if not main_frame then if not main_frame then
return return
@ -37,48 +37,48 @@ function Public.update_spell_gui(player, spell_index)
local spell_table = main_frame['spell_table'] local spell_table = main_frame['spell_table']
if spell_index then if spell_index then
if spell_index == 1 then if spell_index == 1 then
rpg_t[player.index].dropdown_select_index = rpg_t[player.index].dropdown_select_index1 rpg_t.dropdown_select_index = rpg_t.dropdown_select_index1
elseif spell_index == 2 then elseif spell_index == 2 then
rpg_t[player.index].dropdown_select_index = rpg_t[player.index].dropdown_select_index2 rpg_t.dropdown_select_index = rpg_t.dropdown_select_index2
elseif spell_index == 3 then elseif spell_index == 3 then
rpg_t[player.index].dropdown_select_index = rpg_t[player.index].dropdown_select_index3 rpg_t.dropdown_select_index = rpg_t.dropdown_select_index3
end end
end end
spell_table[spell1_button_name].tooltip = names[rpg_t[player.index].dropdown_select_index1] or '---' spell_table[spell1_button_name].tooltip = names[rpg_t.dropdown_select_index1] or '---'
spell_table[spell1_button_name].sprite = spells[rpg_t[player.index].dropdown_select_index1].sprite spell_table[spell1_button_name].sprite = spells[rpg_t.dropdown_select_index1].sprite
spell_table[spell2_button_name].tooltip = names[rpg_t[player.index].dropdown_select_index2] or '---' spell_table[spell2_button_name].tooltip = names[rpg_t.dropdown_select_index2] or '---'
spell_table[spell2_button_name].sprite = spells[rpg_t[player.index].dropdown_select_index2].sprite spell_table[spell2_button_name].sprite = spells[rpg_t.dropdown_select_index2].sprite
spell_table[spell3_button_name].tooltip = names[rpg_t[player.index].dropdown_select_index3] or '---' spell_table[spell3_button_name].tooltip = names[rpg_t.dropdown_select_index3] or '---'
spell_table[spell3_button_name].sprite = spells[rpg_t[player.index].dropdown_select_index3].sprite spell_table[spell3_button_name].sprite = spells[rpg_t.dropdown_select_index3].sprite
if rpg_t[player.index].dropdown_select_index1 == rpg_t[player.index].dropdown_select_index then if rpg_t.dropdown_select_index1 == rpg_t.dropdown_select_index then
spell_table[spell1_button_name].enabled = false spell_table[spell1_button_name].enabled = false
spell_table[spell1_button_name].number = 1 spell_table[spell1_button_name].number = 1
else else
spell_table[spell1_button_name].enabled = true spell_table[spell1_button_name].enabled = true
spell_table[spell1_button_name].number = nil spell_table[spell1_button_name].number = nil
end end
if rpg_t[player.index].dropdown_select_index2 == rpg_t[player.index].dropdown_select_index then if rpg_t.dropdown_select_index2 == rpg_t.dropdown_select_index then
spell_table[spell2_button_name].enabled = false spell_table[spell2_button_name].enabled = false
spell_table[spell2_button_name].number = 1 spell_table[spell2_button_name].number = 1
else else
spell_table[spell2_button_name].enabled = true spell_table[spell2_button_name].enabled = true
spell_table[spell2_button_name].number = nil spell_table[spell2_button_name].number = nil
end end
if rpg_t[player.index].dropdown_select_index3 == rpg_t[player.index].dropdown_select_index then if rpg_t.dropdown_select_index3 == rpg_t.dropdown_select_index then
spell_table[spell3_button_name].enabled = false spell_table[spell3_button_name].enabled = false
spell_table[spell3_button_name].number = 1 spell_table[spell3_button_name].number = 1
else else
spell_table[spell3_button_name].enabled = true spell_table[spell3_button_name].enabled = true
spell_table[spell3_button_name].number = nil spell_table[spell3_button_name].number = nil
end end
spell_table['mana-cost'].caption = spells[rpg_t[player.index].dropdown_select_index].mana_cost spell_table['mana-cost'].caption = spells[rpg_t.dropdown_select_index].mana_cost
spell_table['mana'].caption = math.floor(rpg_t[player.index].mana) spell_table['mana'].caption = math.floor(rpg_t.mana)
spell_table['maxmana'].caption = math.floor(rpg_t[player.index].mana_max) spell_table['maxmana'].caption = math.floor(rpg_t.mana_max)
end end
function Public.spell_gui_settings(player) function Public.spell_gui_settings(player)
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
local spells, names = RPG.rebuild_spells() local spells, names = Public.rebuild_spells()
local main_frame = player.gui.screen[spell_gui_frame_name] local main_frame = player.gui.screen[spell_gui_frame_name]
if not main_frame or not main_frame.valid then if not main_frame or not main_frame.valid then
main_frame = main_frame =
@ -95,25 +95,25 @@ function Public.spell_gui_settings(player)
table.add( table.add(
{ {
type = 'sprite-button', type = 'sprite-button',
sprite = spells[rpg_t[player.index].dropdown_select_index1].sprite, sprite = spells[rpg_t.dropdown_select_index1].sprite,
name = spell1_button_name, name = spell1_button_name,
tooltip = names[rpg_t[player.index].dropdown_select_index1] or '---' tooltip = names[rpg_t.dropdown_select_index1] or '---'
} }
) )
table.add( table.add(
{ {
type = 'sprite-button', type = 'sprite-button',
sprite = spells[rpg_t[player.index].dropdown_select_index2].sprite, sprite = spells[rpg_t.dropdown_select_index2].sprite,
name = spell2_button_name, name = spell2_button_name,
tooltip = names[rpg_t[player.index].dropdown_select_index2] or '---' tooltip = names[rpg_t.dropdown_select_index2] or '---'
} }
) )
table.add( table.add(
{ {
type = 'sprite-button', type = 'sprite-button',
sprite = spells[rpg_t[player.index].dropdown_select_index3].sprite, sprite = spells[rpg_t.dropdown_select_index3].sprite,
name = spell3_button_name, name = spell3_button_name,
tooltip = names[rpg_t[player.index].dropdown_select_index3] or '---' tooltip = names[rpg_t.dropdown_select_index3] or '---'
} }
) )
local b1 = table.add({type = 'sprite-button', name = 'mana-cost', tooltip = {'rpg_settings.mana_cost'}, caption = 0}) local b1 = table.add({type = 'sprite-button', name = 'mana-cost', tooltip = {'rpg_settings.mana_cost'}, caption = 0})
@ -129,8 +129,8 @@ function Public.spell_gui_settings(player)
end end
function Public.extra_settings(player) function Public.extra_settings(player)
local rpg_extra = RPG.get('rpg_extra') local rpg_extra = Public.get('rpg_extra')
local rpg_t = RPG.get('rpg_t') local rpg_t = Public.get_value_from_player(player.index)
local trusted = Session.get_trusted_table() local trusted = Session.get_trusted_table()
local main_frame = local main_frame =
player.gui.screen.add( player.gui.screen.add(
@ -195,7 +195,7 @@ function Public.extra_settings(player)
local input_style = health_bar_input.style local input_style = health_bar_input.style
input_style.height = 35 input_style.height = 35
input_style.vertical_align = 'center' input_style.vertical_align = 'center'
health_bar_gui_input = create_input_element(health_bar_input, 'boolean', rpg_t[player.index].show_bars) health_bar_gui_input = create_input_element(health_bar_input, 'boolean', rpg_t.show_bars)
health_bar_gui_input.tooltip = ({'rpg_settings.tooltip_check'}) health_bar_gui_input.tooltip = ({'rpg_settings.tooltip_check'})
if not rpg_extra.enable_mana then if not rpg_extra.enable_mana then
health_bar_label.caption = ({'rpg_settings.health_only_text_label'}) health_bar_label.caption = ({'rpg_settings.health_only_text_label'})
@ -222,13 +222,13 @@ function Public.extra_settings(player)
reset_input_style.vertical_align = 'center' reset_input_style.vertical_align = 'center'
local reset_gui_input = create_input_element(reset_input, 'boolean', false) local reset_gui_input = create_input_element(reset_input, 'boolean', false)
if not rpg_t[player.index].reset then if not rpg_t.reset then
if not trusted[player.name] then if not trusted[player.name] then
reset_gui_input.enabled = false reset_gui_input.enabled = false
reset_gui_input.tooltip = ({'rpg_settings.not_trusted'}) reset_gui_input.tooltip = ({'rpg_settings.not_trusted'})
goto continue goto continue
end end
if rpg_t[player.index].level < 50 then if rpg_t.level < settings_level['reset_text_label'] then
reset_gui_input.enabled = false reset_gui_input.enabled = false
reset_gui_input.tooltip = ({'rpg_settings.low_level', 50}) reset_gui_input.tooltip = ({'rpg_settings.low_level', 50})
reset_label.tooltip = ({'rpg_settings.low_level', 50}) reset_label.tooltip = ({'rpg_settings.low_level', 50})
@ -330,14 +330,14 @@ function Public.extra_settings(player)
stone_path_input_style.height = 35 stone_path_input_style.height = 35
stone_path_input_style.vertical_align = 'center' stone_path_input_style.vertical_align = 'center'
local stone_path local stone_path
if rpg_t[player.index].stone_path then if rpg_t.stone_path then
stone_path = rpg_t[player.index].stone_path stone_path = rpg_t.stone_path
else else
stone_path = false stone_path = false
end end
stone_path_gui_input = create_input_element(stone_path_input, 'boolean', stone_path) stone_path_gui_input = create_input_element(stone_path_input, 'boolean', stone_path)
if rpg_t[player.index].level < 20 then if rpg_t.level < settings_level['stone_path_label'] then
stone_path_gui_input.enabled = false stone_path_gui_input.enabled = false
stone_path_gui_input.tooltip = ({'rpg_settings.low_level', 20}) stone_path_gui_input.tooltip = ({'rpg_settings.low_level', 20})
stone_path_label.tooltip = ({'rpg_settings.low_level', 20}) stone_path_label.tooltip = ({'rpg_settings.low_level', 20})
@ -367,8 +367,8 @@ function Public.extra_settings(player)
one_punch_input_style.height = 35 one_punch_input_style.height = 35
one_punch_input_style.vertical_align = 'center' one_punch_input_style.vertical_align = 'center'
local one_punch local one_punch
if rpg_t[player.index].one_punch then if rpg_t.one_punch then
one_punch = rpg_t[player.index].one_punch one_punch = rpg_t.one_punch
else else
one_punch = false one_punch = false
end end
@ -379,7 +379,7 @@ function Public.extra_settings(player)
one_punch_gui_input.enabled = false one_punch_gui_input.enabled = false
one_punch_gui_input.tooltip = ({'rpg_settings.one_punch_globally'}) one_punch_gui_input.tooltip = ({'rpg_settings.one_punch_globally'})
else else
if rpg_t[player.index].level < 30 then if rpg_t.level < settings_level['one_punch_label'] then
one_punch_gui_input.enabled = false one_punch_gui_input.enabled = false
one_punch_gui_input.tooltip = ({'rpg_settings.low_level', 30}) one_punch_gui_input.tooltip = ({'rpg_settings.low_level', 30})
else else
@ -409,15 +409,15 @@ function Public.extra_settings(player)
flame_boots_input_style.height = 35 flame_boots_input_style.height = 35
flame_boots_input_style.vertical_align = 'center' flame_boots_input_style.vertical_align = 'center'
local flame_mod local flame_mod
if rpg_t[player.index].flame_boots then if rpg_t.flame_boots then
flame_mod = rpg_t[player.index].flame_boots flame_mod = rpg_t.flame_boots
else else
flame_mod = false flame_mod = false
end end
flame_boots_gui_input = create_input_element(flame_boots_input, 'boolean', flame_mod) flame_boots_gui_input = create_input_element(flame_boots_input, 'boolean', flame_mod)
if rpg_t[player.index].mana > 50 then if rpg_t.mana > 50 then
if rpg_t[player.index].level < 100 then if rpg_t.level < settings_level['flameboots_label'] then
flame_boots_gui_input.enabled = false flame_boots_gui_input.enabled = false
flame_boots_gui_input.tooltip = ({'rpg_settings.low_level', 100}) flame_boots_gui_input.tooltip = ({'rpg_settings.low_level', 100})
flame_boots_label.tooltip = ({'rpg_settings.low_level', 100}) flame_boots_label.tooltip = ({'rpg_settings.low_level', 100})
@ -451,14 +451,14 @@ function Public.extra_settings(player)
explosive_bullet_input_style.height = 35 explosive_bullet_input_style.height = 35
explosive_bullet_input_style.vertical_align = 'center' explosive_bullet_input_style.vertical_align = 'center'
local explosive_bullets local explosive_bullets
if rpg_t[player.index].explosive_bullets then if rpg_t.explosive_bullets then
explosive_bullets = rpg_t[player.index].explosive_bullets explosive_bullets = rpg_t.explosive_bullets
else else
explosive_bullets = false explosive_bullets = false
end end
explosive_bullets_gui_input = create_input_element(explosive_bullet_input, 'boolean', explosive_bullets) explosive_bullets_gui_input = create_input_element(explosive_bullet_input, 'boolean', explosive_bullets)
if rpg_t[player.index].level < 50 then if rpg_t.level < settings_level['explosive_bullets_label'] then
explosive_bullets_gui_input.enabled = false explosive_bullets_gui_input.enabled = false
explosive_bullets_gui_input.tooltip = ({'rpg_settings.low_level', 50}) explosive_bullets_gui_input.tooltip = ({'rpg_settings.low_level', 50})
explosive_bullets_label.tooltip = ({'rpg_settings.low_level', 50}) explosive_bullets_label.tooltip = ({'rpg_settings.low_level', 50})
@ -513,8 +513,8 @@ function Public.extra_settings(player)
entity_input_style.vertical_align = 'center' entity_input_style.vertical_align = 'center'
entity_input_style.horizontal_align = 'right' entity_input_style.horizontal_align = 'right'
local entity_mod local entity_mod
if rpg_t[player.index].enable_entity_spawn then if rpg_t.enable_entity_spawn then
entity_mod = rpg_t[player.index].enable_entity_spawn entity_mod = rpg_t.enable_entity_spawn
else else
entity_mod = false entity_mod = false
end end
@ -537,7 +537,7 @@ function Public.extra_settings(player)
} }
) )
local spells, names = RPG.rebuild_spells() local spells, names = Public.rebuild_spells()
local conjure_label_style = conjure_label.style local conjure_label_style = conjure_label.style
conjure_label_style.horizontally_stretchable = true conjure_label_style.horizontally_stretchable = true
@ -548,7 +548,7 @@ function Public.extra_settings(player)
local conjure_input_style = conjure_input.style local conjure_input_style = conjure_input.style
conjure_input_style.height = 35 conjure_input_style.height = 35
conjure_input_style.vertical_align = 'center' conjure_input_style.vertical_align = 'center'
conjure_gui_input = create_input_element(conjure_input, 'dropdown', false, names, rpg_t[player.index].dropdown_select_index) conjure_gui_input = create_input_element(conjure_input, 'dropdown', false, names, rpg_t.dropdown_select_index)
for _, entity in pairs(spells) do for _, entity in pairs(spells) do
if entity.type == 'item' then if entity.type == 'item' then
@ -577,23 +577,23 @@ function Public.extra_settings(player)
}) })
end end
end end
if not spells[rpg_t[player.index].dropdown_select_index1] then if not spells[rpg_t.dropdown_select_index1] then
rpg_t[player.index].dropdown_select_index1 = 1 rpg_t.dropdown_select_index1 = 1
end end
if not spells[rpg_t[player.index].dropdown_select_index2] then if not spells[rpg_t.dropdown_select_index2] then
rpg_t[player.index].dropdown_select_index2 = 1 rpg_t.dropdown_select_index2 = 1
end end
if not spells[rpg_t[player.index].dropdown_select_index3] then if not spells[rpg_t.dropdown_select_index3] then
rpg_t[player.index].dropdown_select_index3 = 1 rpg_t.dropdown_select_index3 = 1
end end
mana_frame.add({type = 'label', caption = {'rpg_settings.spell_gui_setup'}, tooltip = {'rpg_settings.spell_gui_tooltip'}}) 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 spell_grid = mana_frame.add({type = 'table', column_count = 4, name = 'spell_grid_table'})
spell_gui_input1 = create_input_element(spell_grid, 'dropdown', false, names, rpg_t[player.index].dropdown_select_index1) spell_gui_input1 = create_input_element(spell_grid, 'dropdown', false, names, rpg_t.dropdown_select_index1)
spell_gui_input1.style.maximal_width = 135 spell_gui_input1.style.maximal_width = 135
spell_gui_input2 = create_input_element(spell_grid, 'dropdown', false, names, rpg_t[player.index].dropdown_select_index2) spell_gui_input2 = create_input_element(spell_grid, 'dropdown', false, names, rpg_t.dropdown_select_index2)
spell_gui_input2.style.maximal_width = 135 spell_gui_input2.style.maximal_width = 135
spell_gui_input3 = create_input_element(spell_grid, 'dropdown', false, names, rpg_t[player.index].dropdown_select_index3) spell_gui_input3 = create_input_element(spell_grid, 'dropdown', false, names, rpg_t.dropdown_select_index3)
spell_gui_input3.style.maximal_width = 135 spell_gui_input3.style.maximal_width = 135
spell_grid.add({type = 'sprite-button', name = spell_gui_button_name, sprite = 'item/raw-fish'}) spell_grid.add({type = 'sprite-button', name = spell_gui_button_name, sprite = 'item/raw-fish'})
end end
@ -631,7 +631,7 @@ function Public.extra_settings(player)
) )
allocate_label.tooltip = ({'rpg_settings.allocation_tooltip'}) allocate_label.tooltip = ({'rpg_settings.allocation_tooltip'})
local names = RPG.auto_allocate_nodes local names = Public.auto_allocate_nodes
local allocate_label_style = allocate_label.style local allocate_label_style = allocate_label.style
allocate_label_style.horizontally_stretchable = true allocate_label_style.horizontally_stretchable = true
@ -642,7 +642,7 @@ function Public.extra_settings(player)
local name_input_style = name_input.style local name_input_style = name_input.style
name_input_style.height = 35 name_input_style.height = 35
name_input_style.vertical_align = 'center' name_input_style.vertical_align = 'center'
auto_allocate_gui_input = create_input_element(name_input, 'dropdown', false, names, rpg_t[player.index].allocate_index) auto_allocate_gui_input = create_input_element(name_input, 'dropdown', false, names, rpg_t.allocate_index)
end end
local data = { local data = {
@ -702,5 +702,3 @@ function Public.extra_settings(player)
player.opened = main_frame player.opened = main_frame
end end
return Public

View File

@ -260,7 +260,7 @@ function Public.conjure_items()
mana_cost = 200, mana_cost = 200,
tick = 100, tick = 100,
enabled = true, enabled = true,
sprite = 'recipe/repair_pack' sprite = 'recipe/repair-pack'
} }
spells[#spells + 1] = { spells[#spells + 1] = {
name = {'spells.acid_stream'}, name = {'spells.acid_stream'},

View File

@ -39,6 +39,14 @@ for a = 1, 9999, 1 do
Public.experience_levels[#Public.experience_levels + 1] = Public.experience_levels[#Public.experience_levels] + a * 8 Public.experience_levels[#Public.experience_levels + 1] = Public.experience_levels[#Public.experience_levels] + a * 8
end end
Public.gui_settings_levels = {
['reset_text_label'] = 50,
['stone_path_label'] = 20,
['one_punch_label'] = 30,
['flameboots_label'] = 100,
['explosive_bullets_label'] = 50
}
Public.die_cause = { Public.die_cause = {
['ammo-turret'] = true, ['ammo-turret'] = true,
['electric-turret'] = true, ['electric-turret'] = true,
@ -179,6 +187,30 @@ function Public.set_value_to_player(key, value, setter)
end end
end end
--- Sets a new table to rpg_t table
---@param key <string>
---@param tbl <string>
function Public.set_new_player_tbl(key, tbl)
if key and tbl then
if type(tbl) ~= 'table' then
return error('Given parameter is not a table.')
end
this.rpg_t[key] = tbl
return this.rpg_t[key]
end
end
--- Removes a player from rpg_t table
---@param key <LuaPlayerIndex>
function Public.remove_player(index)
if index then
if this.rpg_t[index] then
this.rpg_t[index] = nil
end
end
end
--- Sets value to table --- Sets value to table
---@param key <string> ---@param key <string>
function Public.set(key) function Public.set(key)

View File

@ -35,6 +35,9 @@ local function get_player_data(player, remove)
end end
local function unpack_inventory(inventory) local function unpack_inventory(inventory)
if not inventory then
return
end
local unpacked = {} local unpacked = {}
for i = 1, #inventory do for i = 1, #inventory do
unpacked[i] = inventory[i] unpacked[i] = inventory[i]
@ -288,6 +291,10 @@ local function open_inventory(source, target)
data.last_tab = 'Main' data.last_tab = 'Main'
local main = unpack_inventory(target.get_main_inventory()) local main = unpack_inventory(target.get_main_inventory())
if not main then
return
end
local armor = unpack_inventory(target.get_inventory(defines.inventory.character_armor)) local armor = unpack_inventory(target.get_inventory(defines.inventory.character_armor))
local guns = unpack_inventory(target.get_inventory(defines.inventory.character_guns)) local guns = unpack_inventory(target.get_inventory(defines.inventory.character_guns))
local ammo = unpack_inventory(target.get_inventory(defines.inventory.character_ammo)) local ammo = unpack_inventory(target.get_inventory(defines.inventory.character_ammo))
@ -354,6 +361,10 @@ local function on_gui_click(event)
return false return false
end end
local main = unpack_inventory(viewingPlayer.get_main_inventory()) local main = unpack_inventory(viewingPlayer.get_main_inventory())
if not main then
return
end
local armor = unpack_inventory(viewingPlayer.get_inventory(defines.inventory.character_armor)) local armor = unpack_inventory(viewingPlayer.get_inventory(defines.inventory.character_armor))
local guns = unpack_inventory(viewingPlayer.get_inventory(defines.inventory.character_guns)) local guns = unpack_inventory(viewingPlayer.get_inventory(defines.inventory.character_guns))
local ammo = unpack_inventory(viewingPlayer.get_inventory(defines.inventory.character_ammo)) local ammo = unpack_inventory(viewingPlayer.get_inventory(defines.inventory.character_ammo))
@ -419,6 +430,10 @@ local function update_gui(event)
end end
main = unpack_inventory(player.get_main_inventory()) main = unpack_inventory(player.get_main_inventory())
if not main then
return
end
local armor = unpack_inventory(player.get_inventory(defines.inventory.character_armor)) local armor = unpack_inventory(player.get_inventory(defines.inventory.character_armor))
local guns = unpack_inventory(player.get_inventory(defines.inventory.character_guns)) local guns = unpack_inventory(player.get_inventory(defines.inventory.character_guns))
local ammo = unpack_inventory(player.get_inventory(defines.inventory.character_ammo)) local ammo = unpack_inventory(player.get_inventory(defines.inventory.character_ammo))

View File

@ -1,5 +1,6 @@
local Event = require 'utils.event' local Event = require 'utils.event'
local BiterHealthBooster = require 'modules.biter_health_booster_v2' local BiterHealthBooster = require 'modules.biter_health_booster_v2'
local Difficulty = require 'modules.difficulty_vote_by_amount'
local BiterRolls = require 'modules.wave_defense.biter_rolls' local BiterRolls = require 'modules.wave_defense.biter_rolls'
local SideTargets = require 'modules.wave_defense.side_targets' local SideTargets = require 'modules.wave_defense.side_targets'
local ThreatEvent = require 'modules.wave_defense.threat_events' local ThreatEvent = require 'modules.wave_defense.threat_events'
@ -501,17 +502,6 @@ local function increase_biter_damage()
return return
end end
local Difficulty
if is_loaded('modules.difficulty_vote_by_amount') then
Difficulty = is_loaded('modules.difficulty_vote_by_amount')
elseif is_loaded('modules.difficulty_vote') then
Difficulty = is_loaded('modules.difficulty_vote')
end
if not Difficulty then
return
end
local e = game.forces.enemy local e = game.forces.enemy
local new = Difficulty.get().difficulty_vote_value * 0.04 local new = Difficulty.get().difficulty_vote_value * 0.04
local melee = new local melee = new

View File

@ -1,6 +1,7 @@
--Central to add all player modifiers together. --Central to add all player modifiers together.
--Will overwrite character stats from other mods. --Will overwrite character stats from other mods.
local Event = require 'utils.event'
local Global = require 'utils.global' local Global = require 'utils.global'
local this = { local this = {
@ -17,8 +18,23 @@ Global.register(
local Public = {} local Public = {}
function Public.get_table() function Public.get(key)
return this if key then
return this[key]
else
return this
end
end
function Public.set(key, value)
if key and (value or value == false) then
this[key] = value
return this[key]
elseif key then
return this[key]
else
return this
end
end end
local modifiers = { local modifiers = {
@ -37,13 +53,23 @@ local modifiers = {
} }
function Public.update_player_modifiers(player) function Public.update_player_modifiers(player)
local player_modifiers = this.modifiers[player.index]
if not player_modifiers then
return
end
local disabled_modifiers = this.disabled_modifier[player.index]
if not disabled_modifiers then
return
end
for k, modifier in pairs(modifiers) do for k, modifier in pairs(modifiers) do
local sum_value = 0 local sum_value = 0
for _, value in pairs(this.modifiers[player.index][k]) do for _, value in pairs(player_modifiers[k]) do
sum_value = sum_value + value sum_value = sum_value + value
end end
if player.character then if player.character then
if this.disabled_modifier[player.index] and this.disabled_modifier[player.index][k] then if disabled_modifiers and disabled_modifiers[k] then
player[modifier] = 0 player[modifier] = 0
else else
player[modifier] = sum_value player[modifier] = sum_value
@ -53,28 +79,30 @@ function Public.update_player_modifiers(player)
end end
function Public.update_single_modifier(player, modifier, category, value) function Public.update_single_modifier(player, modifier, category, value)
if not this.modifiers[player.index] then local player_modifiers = this.modifiers[player.index]
if not player_modifiers then
return return
end end
if not modifier then if not modifier then
return return
end end
for k, _ in pairs(this.modifiers[player.index]) do for k, _ in pairs(player_modifiers) do
if modifiers[k] == modifier and this.modifiers[player.index][k] then if modifiers[k] == modifier and player_modifiers[k] then
if category then if category then
if not this.modifiers[player.index][k][category] then if not player_modifiers[k][category] then
this.modifiers[player.index][k][category] = {} player_modifiers[k][category] = {}
end end
this.modifiers[player.index][k][category] = value player_modifiers[k][category] = value
else else
this.modifiers[player.index][k] = value player_modifiers[k] = value
end end
end end
end end
end end
function Public.disable_single_modifier(player, modifier, value) function Public.disable_single_modifier(player, modifier, value)
if not this.disabled_modifier[player.index] then local disabled_modifiers = this.disabled_modifier[player.index]
if not disabled_modifiers then
return return
end end
if not modifier then if not modifier then
@ -83,30 +111,31 @@ function Public.disable_single_modifier(player, modifier, value)
for k, _ in pairs(modifiers) do for k, _ in pairs(modifiers) do
if modifiers[k] == modifier then if modifiers[k] == modifier then
if value then if value then
this.disabled_modifier[player.index][k] = value disabled_modifiers[k] = value
else else
this.disabled_modifier[player.index][k] = nil disabled_modifiers[k] = nil
end end
end end
end end
end end
function Public.get_single_modifier(player, modifier, category) function Public.get_single_modifier(player, modifier, category)
if not this.modifiers[player.index] then local player_modifiers = this.modifiers[player.index]
if not player_modifiers then
return return
end end
if not modifier then if not modifier then
return return
end end
for k, _ in pairs(this.modifiers[player.index]) do for k, _ in pairs(player_modifiers) do
if modifiers[k] == modifier then if modifiers[k] == modifier then
if category then if category then
if this.modifiers[player.index][k] and this.modifiers[player.index][k][category] then if player_modifiers[k] and player_modifiers[k][category] then
return this.modifiers[player.index][k][category] return player_modifiers[k][category]
end end
else else
if this.modifiers[player.index][k] then if player_modifiers[k] then
return this.modifiers[player.index][k] return player_modifiers[k]
end end
end end
return false return false
@ -116,21 +145,22 @@ function Public.get_single_modifier(player, modifier, category)
end end
function Public.get_single_disabled_modifier(player, modifier, category) function Public.get_single_disabled_modifier(player, modifier, category)
if not this.disabled_modifier[player.index] then local disabled_modifiers = this.disabled_modifier[player.index]
if not disabled_modifiers then
return return
end end
if not modifier then if not modifier then
return return
end end
for k, _ in pairs(this.disabled_modifier[player.index]) do for k, _ in pairs(disabled_modifiers) do
if modifiers[k] == modifier then if modifiers[k] == modifier then
if category then if category then
if this.disabled_modifier[player.index][k] and this.disabled_modifier[player.index][k][category] then if disabled_modifiers[k] and disabled_modifiers[k][category] then
return this.disabled_modifier[player.index][k][category] return disabled_modifiers[k][category]
end end
else else
if this.disabled_modifier[player.index][k] then if disabled_modifiers[k] then
return this.disabled_modifier[player.index][k] return disabled_modifiers[k]
end end
end end
return false return false
@ -163,8 +193,17 @@ local function on_player_respawned(event)
Public.update_player_modifiers(game.players[event.player_index]) Public.update_player_modifiers(game.players[event.player_index])
end end
local Event = require 'utils.event' local function on_player_removed(event)
if this.modifiers[event.player_index] then
this.modifiers[event.player_index] = nil
end
if this.disabled_modifier[event.player_index] then
this.disabled_modifier[event.player_index] = nil
end
end
Event.add(defines.events.on_player_joined_game, on_player_joined_game) Event.add(defines.events.on_player_joined_game, on_player_joined_game)
Event.add(defines.events.on_player_respawned, on_player_respawned) Event.add(defines.events.on_player_respawned, on_player_respawned)
Event.add(defines.events.on_player_removed, on_player_removed)
return Public return Public