1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2024-12-28 23:06:38 +02:00
This commit is contained in:
Gerkiz 2021-05-25 22:19:20 +02:00
parent efc366c194
commit dab23f969a
36 changed files with 960 additions and 742 deletions

View File

@ -22,7 +22,7 @@ local function jail(player, source_player)
if player.name == source_player.name then
return player.print("You can't select yourself!", {r = 1, g = 0.5, b = 0.1})
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
local function free(player, source_player)

View File

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

View File

@ -16,7 +16,9 @@ local Public = {}
local this = {
gui_config = {
spaghett = {},
spaghett = {
undo = {}
},
poll_trusted = false
}
}
@ -122,20 +124,47 @@ local functions = {
game.players[event.player_index].spectator = false
end
end,
['comfy_panel_bottom_right_frame'] = function(event)
['comfy_panel_bottom_location'] = function(event)
local player = game.get_player(event.player_index)
if event.element.switch_state == 'left' then
local bottom_frame = BottomFrame.get_player_data(player)
if not bottom_frame then
return
end
bottom_frame.bottom_left = true
BottomFrame.set_location(player)
BottomFrame.set_location(player, 'bottom_left')
else
BottomFrame.get_player_data(player, true)
BottomFrame.set_location(player)
BottomFrame.set_location(player, 'bottom_right')
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)
if event.element.switch_state == 'left' then
global.auto_hotbar_enabled[event.player_index] = true
@ -345,6 +374,7 @@ local function build_config_gui(data)
}
local scroll_style = scroll_pane.style
scroll_style.vertically_squashable = true
scroll_style.minimal_height = 350
scroll_style.bottom_padding = 2
scroll_style.left_padding = 2
scroll_style.right_padding = 2
@ -395,18 +425,51 @@ local function build_config_gui(data)
end
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'
local bottom_frame = BottomFrame.get('players')
if bottom_frame[player.index] then
local bottom_frame = BottomFrame.get_player_data(player)
if bottom_frame and bottom_frame.bottom_state == 'bottom_left' then
switch_state = 'left'
end
add_switch(
scroll_pane,
switch_state,
'comfy_panel_bottom_right_frame',
'Button Location',
'Toggle to select if you want the bottom button on the right side or the left side.'
'comfy_panel_bottom_location',
'Position - bottom',
'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'})
end

View File

@ -247,6 +247,7 @@ local function on_gui_click(event)
end
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)
return Public

View File

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

View File

@ -1,6 +1,4 @@
local RPG_F = require 'modules.rpg.functions'
local RPG_T = require 'modules.rpg.table'
--local RPG_S = require "modules.rpg.settings"
local RPG = require 'modules.rpg.main'
local BiterHealthBooster = require 'modules.biter_health_booster_v2'
local Alert = require 'utils.alert'
local DungeonsTable = require 'maps.dungeons.table'
@ -167,9 +165,9 @@ local function spawn_boss(arena, biter, level)
end
local function hide_rpg(player, show)
local rpg_button = RPG_T.draw_main_frame_name
local rpg_frame = RPG_T.main_frame_name
local rpg_settings = RPG_T.settings_frame_name
local rpg_button = RPG.draw_main_frame_name
local rpg_frame = RPG.main_frame_name
local rpg_settings = RPG.settings_frame_name
local rpg_b = player.gui.top[rpg_button]
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 surface = arenatable.previous_position[arena].surface
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
hide_rpg(player, true)
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].surface = player.surface
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].enable_entity_spawn = false
hide_rpg(player, false)
@ -261,7 +259,7 @@ local function boss_died(arena)
arenatable.won[arena] = true
arenatable.timer[arena] = game.tick - 30
--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
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
@ -301,7 +299,7 @@ local function enter_arena(player)
-- player.print({"dungeons_tiered.arena_occupied"})
return
end
local rpg_t = RPG_T.get('rpg_t')
local rpg_t = RPG.get('rpg_t')
if rpg_t[player.index].level < 5 then
Alert.alert_player_warning(player, 8, {'dungeons_tiered.arena_level_needed'})
return

View File

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

View File

@ -6,9 +6,7 @@ require 'modules.charging_station'
local MapInfo = require 'modules.map_info'
local Room_generator = require 'functions.room_generator'
require 'modules.rpg.main'
local RPG_F = require 'modules.rpg.functions'
local RPG_T = require 'modules.rpg.table'
local RPG = require 'modules.rpg.main'
local BiterHealthBooster = require 'modules.biter_health_booster_v2'
local BiterRaffle = require 'functions.biter_raffle'
local Functions = require 'maps.dungeons.functions'
@ -263,7 +261,7 @@ local function draw_light(player)
if not player.character then
return
end
local rpg = RPG_T.get('rpg_t')
local rpg = RPG.get('rpg_t')
local magicka = rpg[player.index].magicka
local scale = 1
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
entity.surface.create_entity({name = entity.name, position = entity.position})
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})
event.buffer.clear()
return
@ -514,7 +512,7 @@ local function on_player_mined_entity(event)
end
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 entity = event.entity
if not entity.valid then
@ -555,7 +553,7 @@ end
local function get_lowest_safe_floor(player)
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 sizes = dungeontable.surface_size
local safe = dungeontable.original_surface_index
@ -574,7 +572,7 @@ end
local function descend(player, button, shift)
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
player.print({'dungeons_tiered.max_depth'})
return
@ -758,7 +756,7 @@ local function transfer_signals(surface_index)
end
-- local function setup_magic()
-- local rpg_spells = RPG_T.get("rpg_spells")
-- local rpg_spells = RPG.get("rpg_spells")
-- end
local function on_init()
@ -820,8 +818,8 @@ local function on_init()
for _, tech in pairs(locked_researches) do
game.forces.player.technologies[tech].enabled = false
end
RPG_T.set_surface_name('dungeons_floor')
local rpg_table = RPG_T.get('rpg_extra')
RPG.set_surface_name('dungeons_floor')
local rpg_table = RPG.get('rpg_extra')
rpg_table.personal_tax_rate = 0
-- rpg_table.enable_mana = true
-- setup_magic()

View File

@ -1,5 +1,5 @@
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 insert = table.insert
local floor = math.floor
@ -111,7 +111,7 @@ local function on_entity_died(event)
for _, player in pairs(players_to_reward) do
local forest_zone
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
if forest_zone then
if random(1, 12) == 1 then

View File

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

View File

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

View File

@ -1,5 +1,5 @@
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 IC_Gui = require 'maps.mountain_fortress_v3.ic.gui'
local IC_Minimap = require 'maps.mountain_fortress_v3.ic.minimap'
@ -245,9 +245,9 @@ local function on_player_changed_surface(event)
return
end
local rpg_button = RPG_Settings.draw_main_frame_name
local rpg_frame = RPG_Settings.main_frame_name
local rpg_settings = RPG_Settings.settings_frame_name
local rpg_button = RPG.draw_main_frame_name
local rpg_frame = RPG.main_frame_name
local rpg_settings = RPG.settings_frame_name
local main = WPT.get('locomotive')
local icw_locomotive = WPT.get('icw_locomotive')
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 charging = player.gui.top['charging_station']
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]
if info then
@ -352,7 +352,7 @@ local function enable_guis(event)
return
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 wd = player.gui.top['wave_defense']
local rpg_b = player.gui.top[rpg_button]
@ -405,7 +405,7 @@ function Public.update_gui(player)
end
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 biters_killed = WPT.get('biters_killed')
local upgrades = WPT.get('upgrades')

View File

@ -649,6 +649,15 @@ function Public.kill_car(ic, entity)
return
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 = game.surfaces[surface_index]
kick_players_out_of_vehicles(car)

View File

@ -6,11 +6,13 @@ local Tabs = require 'comfy_panel.main'
local Event = require 'utils.event'
local Public = {}
local insert = table.insert
--! Gui Frames
local save_add_player_button_name = Gui.uid_name()
local save_transfer_car_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 main_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
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 trust_system = ICT.get('trust_system')
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]
local name = new_player.name
if not trust_system[new_player.index][name] then
increment(trust_system[new_player.index], name)
if not trust_system[new_player.index].players[name] then
increment(trust_system[new_player.index].players, name)
end
local cars = ICT.get('cars')
@ -101,7 +125,7 @@ local function remove_main_frame(main_frame)
main_frame.destroy()
end
local function draw_add_player(frame)
local function draw_add_player(player, frame)
local main_frame =
frame.add(
{
@ -127,8 +151,7 @@ local function draw_add_player(frame)
inside_table_style.bottom_padding = 10
inside_table_style.width = 325
local add_player_frame = main_frame.add({type = 'textfield', text = 'Name of the player.'})
add_player_frame.style.width = 140
local add_player_frame = get_players(player, main_frame)
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)
end
local function draw_transfer_car(frame)
local function draw_transfer_car(player, frame)
local main_frame =
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!"})
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.'})
transfer_car_frame.style.width = 140
local transfer_car_frame = get_players(player, main_frame, true)
local bottom_flow = main_frame.add({type = 'flow', direction = 'horizontal'})
@ -432,7 +454,7 @@ Gui.on_click(
end
local player_frame = frame[draw_add_player_frame_name]
if not player_frame or not player_frame.valid then
draw_add_player(frame)
draw_add_player(player, frame)
else
player_frame.destroy()
end
@ -454,7 +476,7 @@ Gui.on_click(
end
local player_frame = frame[draw_transfer_car_frame_name]
if not player_frame or not player_frame.valid then
draw_transfer_car(frame)
draw_transfer_car(player, frame)
else
player_frame.destroy()
end
@ -477,10 +499,10 @@ Gui.on_click(
if frame and frame.valid then
if player_list.allow_anyone == 'right' then
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
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
if player.gui.screen[main_frame_name] then
@ -505,24 +527,26 @@ Gui.on_click(
local add_player_frame = Gui.get_data(event.element)
if frame and frame.valid then
if add_player_frame and add_player_frame.valid and add_player_frame.text then
local text = add_player_frame.text
if not text then
if add_player_frame and add_player_frame.valid and add_player_frame then
local player_gui_data = ICT.get('player_gui_data')
local fetched_name = player_gui_data[player.name]
if not fetched_name then
return
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
return player.print('Target player was not valid.', Color.warning)
return player.print('[IC] Target player was not valid.', Color.warning)
end
local name = player_to_add.name
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)
increment(player_list.players, name)
else
return player.print('Target player is already trusted.', Color.warning)
return player.print('[IC] Target player is already trusted.', Color.warning)
end
remove_main_frame(event.element)
@ -548,33 +572,30 @@ Gui.on_click(
local transfer_car_frame = Gui.get_data(event.element)
if frame and frame.valid then
if transfer_car_frame and transfer_car_frame.valid and transfer_car_frame.text then
local text = transfer_car_frame.text
if not text then
if transfer_car_frame and transfer_car_frame.valid then
local player_gui_data = ICT.get('player_gui_data')
local fetched_name = player_gui_data[player.name]
if not fetched_name then
return
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
return player.print('Target player was not valid.', Color.warning)
return player.print('[IC] Target player was not valid.', Color.warning)
end
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
return player.print(name .. ' already has a vehicle.', Color.warning)
return player.print('[IC] ' .. name .. ' already has a vehicle.', Color.warning)
end
local to_add = game.get_player(name)
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)
local success = transfer_player_table(player, player_to_add)
if not success then
player.print('Please try again.', Color.warning)
player.print('[IC] Please try again.', Color.warning)
else
player.print('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.print('[IC] You have successfully transferred your car to ' .. name, Color.success)
player_to_add.print('[IC] You have become the rightfully owner of ' .. player.name .. "'s car!", Color.success)
end
remove_main_frame(event.element)
@ -608,13 +629,13 @@ Gui.on_click(
end
local target = game.get_player(player_name)
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
end
local name = target.name
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)
raise_event(
ICT.events.on_player_kicked_from_surface,
@ -696,6 +717,47 @@ Gui.on_click(
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.toggle = toggle
Public.add_toolbar = add_toolbar

View File

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

View File

@ -7,8 +7,7 @@ local WD = require 'modules.wave_defense.table'
local Session = require 'utils.datastore.session_data'
local Difficulty = require 'modules.difficulty_vote_by_amount'
local Jailed = require 'utils.datastore.jail_data'
local RPG_Settings = require 'modules.rpg.table'
local Functions = require 'modules.rpg.functions'
local RPG = require 'modules.rpg.main'
local Gui = require 'utils.gui'
local Server = require 'utils.server'
local Alert = require 'utils.alert'
@ -24,7 +23,7 @@ local format_number = require 'util'.format_number
local Public = {}
local concat = table.concat
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 floor = math.floor
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
Public.add_player_to_permission_group(player, 'locomotive')
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 {
text = '+' .. '',
@ -1226,7 +1225,7 @@ local function gui_click(event)
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
redraw_market_items(data.item_frame, player, data.search_text)
@ -1903,7 +1902,7 @@ function Public.refresh_gui()
end
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')
if not active_surface_index then
return

View File

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

View File

@ -1,5 +1,5 @@
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'
local Public = {}
@ -433,7 +433,7 @@ function Public.on_player_mined_entity(event)
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
randomness_scrap(data)
else

View File

@ -598,9 +598,6 @@ local function do_whitelist()
end
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])
end

View File

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

View File

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

View File

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

View File

@ -151,7 +151,6 @@ local function update_char_button(player)
end
local function update_player_stats(player)
local player_modifiers = P.get_table()
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_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 player = data.player
local target = data.target
local rpg_t = data.rpg_t
local rpg_t = RPG.get_value_from_player(target.index)
if not target then
return false
@ -54,7 +54,7 @@ local validate_args = function(data)
return false
end
if not rpg_t[target.index] then
if not rpg_t then
Utils.print_to(player, 'Invalid target.')
return false
end
@ -62,20 +62,21 @@ local validate_args = function(data)
return true
end
local print_stats = function(target, tbl)
local print_stats = function(target)
if not target then
return
end
if not tbl then
local rpg_t = RPG.get_value_from_player(target.index)
if not rpg_t then
return
end
local t = tbl[target.index]
local level = t.level
local xp = round(t.xp)
local strength = t.strength
local magicka = t.magicka
local dexterity = t.dexterity
local vitality = t.vitality
local level = rpg_t.level
local xp = round(rpg_t.xp)
local strength = rpg_t.strength
local magicka = rpg_t.magicka
local dexterity = rpg_t.dexterity
local vitality = rpg_t.vitality
local output = '[color=blue]' .. target.name .. '[/color] has the following stats: \n'
output = output .. '[color=green]Level:[/color] ' .. level .. '\n'
output = output .. '[color=green]XP:[/color] ' .. xp .. '\n'
@ -111,16 +112,13 @@ commands.add_command(
return
end
local rpg_t = RPG.get('rpg_t')
local data = {
player = player,
target = target,
rpg_t = rpg_t
target = target
}
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.print(msg)
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 random = math.random
local floor = math.floor
local sqrt = math.sqrt
local Public = {}
local function splash_damage(surface, position, final_damage_amount)
local create = surface.create_entity
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
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
return
end
@ -57,8 +55,7 @@ function Public.explosive_bullets(event)
return
end
local player_data = RPG_T.get('rpg_t')
local rpg_player = player_data[p.index]
local rpg_player = Public.get_value_from_player(p.index)
if not rpg_player.explosive_bullets then
return
end
@ -88,5 +85,3 @@ function Public.explosive_bullets(event)
splash_damage(surface, entity.position, event.final_damage_amount)
end
end
return Public

View File

@ -1,21 +1,20 @@
local Public = require 'modules.rpg.table'
local Task = require 'utils.task'
local RPG = require 'modules.rpg.table'
local Gui = require 'utils.gui'
local Color = require 'utils.color_presets'
local Token = require 'utils.token'
local Alert = require 'utils.alert'
local Public = {}
local level_up_floating_text_color = {0, 205, 0}
local visuals_delay = RPG.visuals_delay
local xp_floating_text_color = RPG.xp_floating_text_color
local experience_levels = RPG.experience_levels
local points_per_level = RPG.points_per_level
local visuals_delay = Public.visuals_delay
local xp_floating_text_color = Public.xp_floating_text_color
local experience_levels = Public.experience_levels
local points_per_level = Public.points_per_level
local settings_level = Public.gui_settings_levels
--RPG Frames
local main_frame_name = RPG.main_frame_name
local spell_gui_frame_name = RPG.spell_gui_frame_name
local main_frame_name = Public.main_frame_name
local spell_gui_frame_name = Public.spell_gui_frame_name
local travelings = {
'bzzZZrrt',
@ -100,14 +99,13 @@ local function set_bar(min, max, id, mana)
end
local function level_up(player)
local rpg_t = RPG.get('rpg_t')
local RPG_GUI = is_loaded('modules.rpg.gui')
local names = RPG.auto_allocate_nodes_func
local rpg_t = Public.get_value_from_player(player.index)
local names = Public.auto_allocate_nodes_func
local distribute_points_gain = 0
for i = rpg_t[player.index].level + 1, #experience_levels, 1 do
if rpg_t[player.index].xp > experience_levels[i] then
rpg_t[player.index].level = i
for i = rpg_t.level + 1, #experience_levels, 1 do
if rpg_t.xp > experience_levels[i] then
rpg_t.level = i
distribute_points_gain = distribute_points_gain + points_per_level
else
break
@ -116,29 +114,37 @@ local function level_up(player)
if distribute_points_gain == 0 then
return
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[player.index].allocate_index ~= 1 then
local node = rpg_t[player.index].allocate_index
local index = names[node]:lower()
rpg_t[player.index][index] = rpg_t[player.index][index] + distribute_points_gain
rpg_t[player.index].points_left = rpg_t[player.index].points_left - distribute_points_gain
if not rpg_t[player.index].reset then
rpg_t[player.index].total = rpg_t[player.index].total + distribute_points_gain
if rpg_t.level >= settings_level['one_punch_label'] then
rpg_t.one_punch = true
end
RPG_GUI.update_player_stats(player)
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()
rpg_t[index] = rpg_t[index] + distribute_points_gain
rpg_t.points_left = rpg_t.points_left - distribute_points_gain
if not rpg_t.reset then
rpg_t.total = rpg_t.total + distribute_points_gain
end
Public.update_player_stats(player)
else
RPG_GUI.update_char_button(player)
Public.update_char_button(player)
end
if player.gui.screen[main_frame_name] then
RPG_GUI.toggle(player, true)
Public.toggle(player, true)
end
Public.level_up_effects(player)
end
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
return
@ -256,13 +262,13 @@ function Public.validate_player(player)
end
function Public.update_mana(player)
local rpg_extra = RPG.get('rpg_extra')
local rpg_t = RPG.get('rpg_t')
local rpg_extra = Public.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
if not rpg_extra.enable_mana then
return
end
if not rpg_t[player.index] then
if not rpg_t then
return
end
@ -270,38 +276,38 @@ function Public.update_mana(player)
local f = player.gui.screen[main_frame_name]
local data = Gui.get_data(f)
if data.mana and data.mana.valid then
data.mana.caption = rpg_t[player.index].mana
data.mana.caption = rpg_t.mana
end
end
if player.gui.screen[spell_gui_frame_name] then
local f = player.gui.screen[spell_gui_frame_name]
if f['spell_table'] 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
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
if rpg_t[player.index].mana < 1 then
if rpg_t.mana < 1 then
return
end
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 not rpg_t[player.index].mana_bar then
rpg_t[player.index].mana_bar = create_manabar(player, 0.5)
elseif not rendering.is_valid(rpg_t[player.index].mana_bar) then
rpg_t[player.index].mana_bar = create_manabar(player, 0.5)
if not rpg_t.mana_bar then
rpg_t.mana_bar = create_manabar(player, 0.5)
elseif not rendering.is_valid(rpg_t.mana_bar) then
rpg_t.mana_bar = create_manabar(player, 0.5)
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
else
if rpg_t[player.index].mana_bar then
if rendering.is_valid(rpg_t[player.index].mana_bar) then
rendering.destroy(rpg_t[player.index].mana_bar)
if rpg_t.mana_bar then
if rendering.is_valid(rpg_t.mana_bar) then
rendering.destroy(rpg_t.mana_bar)
end
end
end
@ -309,8 +315,8 @@ function Public.update_mana(player)
end
function Public.reward_mana(player, mana_to_add)
local rpg_extra = RPG.get('rpg_extra')
local rpg_t = RPG.get('rpg_t')
local rpg_extra = Public.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
if not rpg_extra.enable_mana then
return
end
@ -319,7 +325,7 @@ function Public.reward_mana(player, mana_to_add)
return
end
if not rpg_t[player.index] then
if not rpg_t then
return
end
@ -327,36 +333,36 @@ function Public.reward_mana(player, mana_to_add)
local f = player.gui.screen[main_frame_name]
local data = Gui.get_data(f)
if data.mana and data.mana.valid then
data.mana.caption = rpg_t[player.index].mana
data.mana.caption = rpg_t.mana
end
end
if player.gui.screen[spell_gui_frame_name] then
local f = player.gui.screen[spell_gui_frame_name]
if f['spell_table'] 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
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
if rpg_t[player.index].mana_max < 1 then
if rpg_t.mana_max < 1 then
return
end
if rpg_t[player.index].mana >= rpg_t[player.index].mana_max then
rpg_t[player.index].mana = rpg_t[player.index].mana_max
if rpg_t.mana >= rpg_t.mana_max then
rpg_t.mana = rpg_t.mana_max
return
end
rpg_t[player.index].mana = rpg_t[player.index].mana + mana_to_add
rpg_t.mana = rpg_t.mana + mana_to_add
end
function Public.update_health(player)
local rpg_extra = RPG.get('rpg_extra')
local rpg_t = RPG.get('rpg_t')
local rpg_extra = Public.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
if not player or not player.valid then
return
@ -366,7 +372,7 @@ function Public.update_health(player)
return
end
if not rpg_t[player.index] then
if not rpg_t then
return
end
@ -392,18 +398,18 @@ function Public.update_health(player)
end
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)
if not rpg_t[player.index].health_bar then
rpg_t[player.index].health_bar = create_healthbar(player, 0.5)
elseif not rendering.is_valid(rpg_t[player.index].health_bar) then
rpg_t[player.index].health_bar = create_healthbar(player, 0.5)
if not rpg_t.health_bar then
rpg_t.health_bar = create_healthbar(player, 0.5)
elseif not rendering.is_valid(rpg_t.health_bar) then
rpg_t.health_bar = create_healthbar(player, 0.5)
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
if rpg_t[player.index].health_bar then
if rendering.is_valid(rpg_t[player.index].health_bar) then
rendering.destroy(rpg_t[player.index].health_bar)
if rpg_t.health_bar then
if rendering.is_valid(rpg_t.health_bar) then
rendering.destroy(rpg_t.health_bar)
end
end
end
@ -411,8 +417,8 @@ function Public.update_health(player)
end
function Public.level_limit_exceeded(player, value)
local rpg_extra = RPG.get('rpg_extra')
local rpg_t = RPG.get('rpg_t')
local rpg_extra = Public.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
if not rpg_extra.level_limit_enabled then
return false
end
@ -430,7 +436,7 @@ function Public.level_limit_exceeded(player, value)
[10] = 210
}
local level = rpg_t[player.index].level
local level = rpg_t.level
local zone = rpg_extra.breached_walls
if zone >= 11 then
zone = 10
@ -474,37 +480,37 @@ function Public.xp_effects(player)
end
function Public.get_melee_modifier(player)
local rpg_t = RPG.get('rpg_t')
return (rpg_t[player.index].strength - 10) * 0.10
local rpg_t = Public.get_value_from_player(player.index)
return (rpg_t.strength - 10) * 0.10
end
function Public.get_heal_modifier(player)
local rpg_t = RPG.get('rpg_t')
return (rpg_t[player.index].vitality - 10) * 0.06
local rpg_t = Public.get_value_from_player(player.index)
return (rpg_t.vitality - 10) * 0.06
end
function Public.get_mana_modifier(player)
local rpg_t = RPG.get('rpg_t')
if rpg_t[player.index].level <= 40 then
return (rpg_t[player.index].magicka - 10) * 0.02000
elseif rpg_t[player.index].level <= 80 then
return (rpg_t[player.index].magicka - 10) * 0.01800
local rpg_t = Public.get_value_from_player(player.index)
if rpg_t.level <= 40 then
return (rpg_t.magicka - 10) * 0.02000
elseif rpg_t.level <= 80 then
return (rpg_t.magicka - 10) * 0.01800
else
return (rpg_t[player.index].magicka - 10) * 0.01400
return (rpg_t.magicka - 10) * 0.01400
end
end
function Public.get_life_on_hit(player)
local rpg_t = RPG.get('rpg_t')
return (rpg_t[player.index].vitality - 10) * 0.4
local rpg_t = Public.get_value_from_player(player.index)
return (rpg_t.vitality - 10) * 0.4
end
function Public.get_one_punch_chance(player)
local rpg_t = RPG.get('rpg_t')
if rpg_t[player.index].strength < 100 then
local rpg_t = Public.get_value_from_player(player.index)
if rpg_t.strength < 100 then
return 0
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
chance = 100
end
@ -512,20 +518,20 @@ function Public.get_one_punch_chance(player)
end
function Public.get_extra_following_robots(player)
local rpg_t = RPG.get('rpg_t')
local strength = rpg_t[player.index].strength
local rpg_t = Public.get_value_from_player(player.index)
local strength = rpg_t.strength
local count = math.round(strength / 2 * 0.03, 3)
return count
end
function Public.get_magicka(player)
local rpg_t = RPG.get('rpg_t')
return (rpg_t[player.index].magicka - 10) * 0.10
local rpg_t = Public.get_value_from_player(player.index)
return (rpg_t.magicka - 10) * 0.10
end
--- Gives connected player some bonus xp if the map was preemptively shut down.
-- 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)
for _, player in pairs(game.connected_players) do
if not Public.validate_player(player) then
@ -540,18 +546,24 @@ function Public.rpg_reset_player(player, one_time_reset)
player.set_controller({type = defines.controllers.god})
player.create_character()
end
local RPG_GUI = is_loaded('modules.rpg.gui')
local rpg_t = RPG.get('rpg_t')
local rpg_extra = RPG.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
local rpg_extra = Public.get('rpg_extra')
if one_time_reset then
local total = rpg_t[player.index].total
local total = rpg_t.total
if not total then
total = 0
end
local old_level = rpg_t[player.index].level
local old_points_to_distribute = rpg_t[player.index].points_left
local old_xp = rpg_t[player.index].xp
rpg_t[player.index] = {
if rpg_t.text then
rendering.destroy(rpg_t.text)
rpg_t.text = nil
end
local old_level = rpg_t.level
local old_points_left = rpg_t.points_left
local old_xp = rpg_t.xp
rpg_t =
Public.set_new_player_tbl(
player.index,
{
level = 1,
xp = 0,
strength = 10,
@ -569,8 +581,8 @@ function Public.rpg_reset_player(player, one_time_reset)
flame_boots = false,
explosive_bullets = false,
enable_entity_spawn = false,
health_bar = rpg_t[player.index].health_bar,
mana_bar = rpg_t[player.index].mana_bar,
health_bar = rpg_t.health_bar,
mana_bar = rpg_t.mana_bar,
points_left = 0,
last_floaty_text = visuals_delay,
xp_since_last_floaty_text = 0,
@ -583,11 +595,14 @@ function Public.rpg_reset_player(player, one_time_reset)
stone_path = false,
one_punch = false
}
rpg_t[player.index].points_left = old_points_to_distribute + total
rpg_t[player.index].xp = old_xp
rpg_t[player.index].level = old_level
)
rpg_t.points_left = old_points_left + total
rpg_t.xp = old_xp
rpg_t.level = old_level
else
rpg_t[player.index] = {
Public.set_new_player_tbl(
player.index,
{
level = 1,
xp = 0,
strength = 10,
@ -618,16 +633,17 @@ function Public.rpg_reset_player(player, one_time_reset)
stone_path = false,
one_punch = false
}
)
end
RPG_GUI.draw_gui_char_button(player)
RPG_GUI.draw_level_text(player)
RPG_GUI.update_char_button(player)
RPG_GUI.update_player_stats(player)
Public.draw_gui_char_button(player)
Public.draw_level_text(player)
Public.update_char_button(player)
Public.update_player_stats(player)
end
function Public.rpg_reset_all_players()
local rpg_t = RPG.get('rpg_t')
local rpg_extra = RPG.get('rpg_extra')
local rpg_t = Public.get('rpg_t')
local rpg_extra = Public.get('rpg_extra')
for k, _ in pairs(rpg_t) do
rpg_t[k] = nil
end
@ -643,13 +659,13 @@ function Public.gain_xp(player, amount, added_to_pool, text)
if not Public.validate_player(player) then
return
end
local rpg_extra = RPG.get('rpg_extra')
local rpg_t = RPG.get('rpg_t')
local rpg_extra = Public.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
if Public.level_limit_exceeded(player) then
add_to_global_pool(amount, false)
if not rpg_t[player.index].capped then
rpg_t[player.index].capped = true
if not rpg_t.capped then
rpg_t.capped = true
local message = ({'rpg_functions.max_level'})
Alert.alert_player_warning(player, 10, message)
end
@ -658,27 +674,27 @@ function Public.gain_xp(player, amount, added_to_pool, text)
local text_to_draw
if rpg_t[player.index].capped then
rpg_t[player.index].capped = false
if rpg_t.capped then
rpg_t.capped = false
end
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)
RPG.debug_log('RPG - ' .. player.name .. ' got fee: ' .. fee)
Public.debug_log('RPG - ' .. player.name .. ' got fee: ' .. fee)
amount = math.round(amount, 3) - fee
if rpg_extra.difficulty then
amount = amount + rpg_extra.difficulty
end
RPG.debug_log('RPG - ' .. player.name .. ' got after fee: ' .. amount)
Public.debug_log('RPG - ' .. player.name .. ' got after fee: ' .. amount)
else
RPG.debug_log('RPG - ' .. player.name .. ' got org xp: ' .. amount)
Public.debug_log('RPG - ' .. player.name .. ' got org xp: ' .. amount)
end
rpg_t[player.index].xp = math.round(rpg_t[player.index].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 = math.round(rpg_t.xp + amount, 3)
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
end
@ -686,15 +702,15 @@ function Public.gain_xp(player, amount, added_to_pool, text)
if f and f.valid then
local d = Gui.get_data(f)
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
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)
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
return
end
@ -703,7 +719,7 @@ function Public.gain_xp(player, amount, added_to_pool, text)
if text then
text_to_draw = '+' .. math.floor(amount) .. ' xp'
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
player.create_local_flying_text {
@ -714,12 +730,12 @@ function Public.gain_xp(player, amount, added_to_pool, text)
speed = 2
}
rpg_t[player.index].xp_since_last_floaty_text = 0
rpg_t[player.index].last_floaty_text = game.tick + visuals_delay
rpg_t.xp_since_last_floaty_text = 0
rpg_t.last_floaty_text = game.tick + visuals_delay
end
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
return
@ -739,7 +755,7 @@ function Public.global_pool(players, 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
local p = players[i]
@ -750,14 +766,14 @@ function Public.global_pool(players, count)
else
share = share / 10
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
else
local message = ({'rpg_functions.pool_reward', p.name})
Alert.alert_player_warning(p, 10, message)
share = share / 10
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
@ -801,5 +817,3 @@ function Public.distribute_pool()
end
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'
--RPG Modules
local Functions = require 'modules.rpg.functions'
local RPG = require 'modules.rpg.table'
local Settings = require 'modules.rpg.settings'
local Public = {}
local classes = RPG.classes
local Public = require 'modules.rpg.table'
local classes = Public.classes
--RPG Settings
local experience_levels = RPG.experience_levels
local experience_levels = Public.experience_levels
--RPG Frames
local main_frame_name = RPG.main_frame_name
local draw_main_frame_name = RPG.draw_main_frame_name
local settings_button_name = RPG.settings_button_name
local settings_frame_name = RPG.settings_frame_name
local discard_button_name = RPG.discard_button_name
local save_button_name = RPG.save_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 main_frame_name = Public.main_frame_name
local draw_main_frame_name = Public.draw_main_frame_name
local settings_button_name = Public.settings_button_name
local settings_frame_name = Public.settings_frame_name
local discard_button_name = Public.discard_button_name
local save_button_name = Public.save_button_name
local spell_gui_button_name = Public.spell_gui_button_name
local spell_gui_frame_name = Public.spell_gui_frame_name
local spell1_button_name = Public.spell1_button_name
local spell2_button_name = Public.spell2_button_name
local spell3_button_name = Public.spell3_button_name
local sub = string.sub
@ -44,11 +39,11 @@ function Public.draw_gui_char_button(player)
end
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
Public.draw_gui_char_button(player)
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}
else
player.gui.top[draw_main_frame_name].style.font_color = {175, 175, 175}
@ -56,13 +51,13 @@ function Public.update_char_button(player)
end
local function get_class(player)
local rpg_t = RPG.get('rpg_t')
local average = (rpg_t[player.index].strength + rpg_t[player.index].magicka + rpg_t[player.index].dexterity + rpg_t[player.index].vitality) / 4
local rpg_t = Public.get_value_from_player(player.index)
local average = (rpg_t.strength + rpg_t.magicka + rpg_t.dexterity + rpg_t.vitality) / 4
local high_attribute = 0
local high_attribute_name = ''
for _, attribute in pairs({'strength', 'magicka', 'dexterity', 'vitality'}) do
if rpg_t[player.index][attribute] > high_attribute then
high_attribute = rpg_t[player.index][attribute]
if rpg_t[attribute] > high_attribute then
high_attribute = rpg_t[attribute]
high_attribute_name = attribute
end
end
@ -116,10 +111,10 @@ local function add_elem_stat(element, value, width, height, font, tooltip, name,
end
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 symbol = ''
if rpg_t[player.index].points_left <= 0 then
if rpg_t.points_left <= 0 then
sprite = 'virtual-signal/signal-black'
end
local e = element.add({type = 'sprite-button', name = name, caption = symbol, sprite = sprite})
@ -133,7 +128,7 @@ local function add_gui_increase_stat(element, name, player)
e.style.vertical_align = 'center'
e.style.padding = 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
end
@ -182,8 +177,8 @@ local function draw_main_frame(player, location)
end
local data = {}
local rpg_extra = RPG.get('rpg_extra')
local rpg_t = RPG.get('rpg_t')
local rpg_extra = Public.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
local inside_frame =
main_frame.add {
@ -231,21 +226,21 @@ local function draw_main_frame(player, location)
add_gui_description(scroll_table, ({'rpg_gui.level_name'}), 80)
if rpg_extra.level_limit_enabled then
local level_tooltip = ({'rpg_gui.level_limit', Functions.level_limit_exceeded(player, true)})
add_gui_stat(scroll_table, rpg_t[player.index].level, 80, level_tooltip)
local level_tooltip = ({'rpg_gui.level_limit', Public.level_limit_exceeded(player, true)})
add_gui_stat(scroll_table, rpg_t.level, 80, level_tooltip)
else
add_gui_stat(scroll_table, rpg_t[player.index].level, 80)
add_gui_stat(scroll_table, rpg_t.level, 80)
end
add_gui_description(scroll_table, ({'rpg_gui.experience_name'}), 100)
local exp_gui = add_gui_stat(scroll_table, 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
add_gui_description(scroll_table, ' ', 75)
add_gui_description(scroll_table, ' ', 75)
add_gui_description(scroll_table, ({'rpg_gui.next_level_name'}), 100)
add_gui_stat(scroll_table, experience_levels[rpg_t[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)
@ -258,24 +253,24 @@ local function draw_main_frame(player, location)
local w2 = 63
add_gui_description(left_bottom_table, ({'rpg_gui.strength_name'}), w1, ({'rpg_gui.strength_tooltip'}))
add_gui_stat(left_bottom_table, rpg_t[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_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_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_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_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, ' ', 40)
@ -320,14 +315,14 @@ local function draw_main_frame(player, location)
end
if rpg_extra.enable_mana then
local mana = rpg_t[player.index].mana
local mana_max = rpg_t[player.index].mana_max
local mana = rpg_t.mana
local mana_max = rpg_t.mana_max
local mana_tip = ({'rpg_gui.mana_tooltip'})
add_gui_description(left_bottom_table, ({'rpg_gui.mana_name'}), w1, mana_tip)
local mana_regen_tip = ({'rpg_gui.mana_regen_current'})
local mana_max_regen_tip
if rpg_t[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'})
else
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, ({'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
if rpg_extra.enable_one_punch then
melee_damage_tooltip = ({
'rpg_gui.one_punch_chance',
Functions.get_life_on_hit(player),
Functions.get_one_punch_chance(player),
Functions.get_extra_following_robots(player)
Public.get_life_on_hit(player),
Public.get_one_punch_chance(player),
Public.get_extra_following_robots(player)
})
else
melee_damage_tooltip = ({'rpg_gui.one_punch_disabled'})
@ -380,7 +375,7 @@ local function draw_main_frame(player, location)
player.character_loot_pickup_distance_bonus,
player.character_item_pickup_distance_bonus,
player.character_resource_reach_distance_bonus,
Functions.get_magicka(player)
Public.get_magicka(player)
})
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, ({'rpg_gui.health_bonus_name'}), w1)
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_description(right_bottom_table, ' ', w0)
if rpg_extra.enable_mana then
add_gui_description(right_bottom_table, ({'rpg_gui.mana_bonus'}), w1)
local mana_bonus_value = '+ ' .. (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 = ({
'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)
end
@ -432,15 +427,15 @@ function Public.draw_level_text(player)
return
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
end
if rpg_t[player.index].text then
rendering.destroy(rpg_t[player.index].text)
rpg_t[player.index].text = nil
if rpg_t.text then
rendering.destroy(rpg_t.text)
rpg_t.text = nil
end
local players = {}
@ -453,9 +448,9 @@ function Public.draw_level_text(player)
return
end
rpg_t[player.index].text =
rpg_t.text =
rendering.draw_text {
text = 'lvl ' .. rpg_t[player.index].level,
text = 'lvl ' .. rpg_t.level,
surface = player.surface,
target = player.character,
target_offset = {0, -3.25},
@ -474,14 +469,14 @@ function Public.draw_level_text(player)
end
function Public.update_player_stats(player)
local rpg_extra = RPG.get('rpg_extra')
local rpg_t = RPG.get('rpg_t')
local strength = rpg_t[player.index].strength - 10
local rpg_extra = Public.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
local strength = rpg_t.strength - 10
P.update_single_modifier(player, 'character_inventory_slots_bonus', 'rpg', math.round(strength * 0.2, 3))
P.update_single_modifier(player, 'character_mining_speed_modifier', 'rpg', math.round(strength * 0.007, 3))
P.update_single_modifier(player, 'character_maximum_following_robot_count_bonus', 'rpg', math.round(strength / 2 * 0.03, 3))
local magic = rpg_t[player.index].magicka - 10
local magic = rpg_t.magicka - 10
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_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_item_pickup_distance_bonus', 'rpg', math.min(20, math.round(v * 0.25, 3)))
P.update_single_modifier(player, 'character_resource_reach_distance_bonus', 'rpg', math.min(20, math.round(v * 0.15, 3)))
if rpg_t[player.index].mana_max >= rpg_extra.mana_limit then
rpg_t[player.index].mana_max = rpg_extra.mana_limit
if rpg_t.mana_max >= rpg_extra.mana_limit then
rpg_t.mana_max = rpg_extra.mana_limit
else
rpg_t[player.index].mana_max = math.round((magic) * 2, 3)
rpg_t.mana_max = math.round((magic) * 2, 3)
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_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)
end
@ -572,50 +567,50 @@ Gui.on_click(
local one_punch_gui_input = data.one_punch_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 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
if one_punch_gui_input and one_punch_gui_input.valid 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
rpg_t[player.index].one_punch = true
rpg_t.one_punch = true
end
end
if stone_path_gui_input and stone_path_gui_input.valid then
if not stone_path_gui_input.state then
rpg_t[player.index].stone_path = false
rpg_t.stone_path = false
elseif stone_path_gui_input.state then
rpg_t[player.index].stone_path = true
rpg_t.stone_path = true
end
end
if enable_entity_gui_input and enable_entity_gui_input.valid then
if not enable_entity_gui_input.state then
rpg_t[player.index].enable_entity_spawn = false
rpg_t.enable_entity_spawn = false
elseif enable_entity_gui_input.state then
rpg_t[player.index].enable_entity_spawn = true
rpg_t.enable_entity_spawn = true
end
end
if flame_boots_gui_input and flame_boots_gui_input.valid then
if not flame_boots_gui_input.state then
rpg_t[player.index].flame_boots = false
rpg_t.flame_boots = false
elseif flame_boots_gui_input.state then
rpg_t[player.index].flame_boots = true
rpg_t.flame_boots = true
end
end
if explosive_bullets_gui_input and explosive_bullets_gui_input.valid then
if not explosive_bullets_gui_input.state then
rpg_t[player.index].explosive_bullets = false
rpg_t.explosive_bullets = false
elseif explosive_bullets_gui_input.state then
rpg_t[player.index].explosive_bullets = true
rpg_t.explosive_bullets = true
end
end
@ -649,37 +644,37 @@ Gui.on_click(
end
end
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
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
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
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
if player.gui.screen[spell_gui_frame_name] then
Settings.update_spell_gui(player, nil)
Public.update_spell_gui(player, nil)
end
if reset_gui_input and reset_gui_input.valid and reset_gui_input.state then
if not rpg_t[player.index].reset then
rpg_t[player.index].allocate_index = 1
rpg_t[player.index].reset = true
Functions.rpg_reset_player(player, true)
if not rpg_t.reset then
rpg_t.allocate_index = 1
rpg_t.reset = true
Public.rpg_reset_player(player, true)
end
end
if health_bar_gui_input and health_bar_gui_input.valid then
if not health_bar_gui_input.state then
rpg_t[player.index].show_bars = false
Functions.update_health(player)
Functions.update_mana(player)
rpg_t.show_bars = false
Public.update_health(player)
Public.update_mana(player)
elseif health_bar_gui_input.state then
rpg_t[player.index].show_bars = true
Functions.update_health(player)
Functions.update_mana(player)
rpg_t.show_bars = true
Public.update_health(player)
Public.update_mana(player)
end
end
@ -718,7 +713,7 @@ Gui.on_click(
return
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
return
end
@ -727,7 +722,7 @@ Gui.on_click(
Gui.remove_data_recursively(frame)
frame.destroy()
else
Settings.extra_settings(player)
Public.extra_settings(player)
end
end
)
@ -742,7 +737,7 @@ Gui.on_click(
return
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
return
end
@ -751,7 +746,7 @@ Gui.on_click(
Gui.remove_data_recursively(frame)
frame.destroy()
else
Settings.spell_gui_settings(player)
Public.spell_gui_settings(player)
end
end
)
@ -766,13 +761,13 @@ Gui.on_click(
return
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
return
end
if frame and frame.valid then
Settings.update_spell_gui(player, 1)
Public.update_spell_gui(player, 1)
end
end
)
@ -787,13 +782,13 @@ Gui.on_click(
return
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
return
end
if frame and frame.valid then
Settings.update_spell_gui(player, 2)
Public.update_spell_gui(player, 2)
end
end
)
@ -808,13 +803,13 @@ Gui.on_click(
return
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
return
end
if frame and frame.valid then
Settings.update_spell_gui(player, 3)
Public.update_spell_gui(player, 3)
end
end
)

View File

@ -1,3 +1,5 @@
--RPG Modules
local Public = require 'modules.rpg.core'
local Gui = require 'utils.gui'
local Event = require 'utils.event'
local AntiGrief = require 'antigrief'
@ -9,21 +11,14 @@ local Explosives = require 'modules.explosives'
local WD = require 'modules.wave_defense.table'
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
local enemy_types = RPG.enemy_types
local die_cause = RPG.die_cause
local points_per_level = RPG.points_per_level
local nth_tick = RPG.nth_tick
local enemy_types = Public.enemy_types
local die_cause = Public.die_cause
local points_per_level = Public.points_per_level
local nth_tick = Public.nth_tick
--RPG Frames
local main_frame_name = RPG.main_frame_name
local main_frame_name = Public.main_frame_name
local sub = string.sub
@ -50,7 +45,7 @@ local function on_gui_click(event)
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
return
end
@ -68,7 +63,7 @@ local function on_gui_click(event)
return
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
if not rpg_t[index] then
@ -88,12 +83,12 @@ local function on_gui_click(event)
if not rpg_t.reset then
rpg_t.total = rpg_t.total + count
end
RPG_GUI.toggle(player, true)
RPG_GUI.update_player_stats(player)
Public.toggle(player, true)
Public.update_player_stats(player)
elseif event.button == defines.mouse_button_type.right then
for _ = 1, points_per_level, 1 do
if rpg_t.points_left <= 0 then
RPG_GUI.toggle(player, true)
Public.toggle(player, true)
return
end
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
rpg_t.total = rpg_t.total + 1
end
RPG_GUI.update_player_stats(player)
Public.update_player_stats(player)
end
RPG_GUI.toggle(player, true)
Public.toggle(player, true)
return
end
if rpg_t.points_left <= 0 then
RPG_GUI.toggle(player, true)
Public.toggle(player, true)
return
end
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
rpg_t.total = rpg_t.total + 1
end
RPG_GUI.update_player_stats(player)
RPG_GUI.toggle(player, true)
Public.update_player_stats(player)
Public.toggle(player, true)
end
local function train_type_cause(cause)
@ -201,13 +196,13 @@ local function on_entity_died(event)
end
end
end
Functions.gain_xp(entity.last_user, 1)
Functions.reward_mana(entity.last_user, 1)
Public.gain_xp(entity.last_user, 1)
Public.reward_mana(entity.last_user, 1)
return
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.rpg_xp_yield['big-biter'] <= 16 then
@ -245,10 +240,10 @@ local function on_entity_died(event)
end
if rpg_extra.turret_kills_to_global_pool then
Functions.add_to_global_pool(amount, false)
Public.add_to_global_pool(amount, false)
end
else
Functions.add_to_global_pool(0.5, false)
Public.add_to_global_pool(0.5, false)
end
return
end
@ -284,13 +279,13 @@ local function on_entity_died(event)
amount = rpg_extra.rpg_xp_yield[entity.name]
end
if rpg_extra.turret_kills_to_global_pool then
local inserted = Functions.add_to_global_pool(amount, true)
Functions.gain_xp(player, inserted, true)
local inserted = Public.add_to_global_pool(amount, true)
Public.gain_xp(player, inserted, true)
else
Functions.gain_xp(player, amount)
Public.gain_xp(player, amount)
end
else
Functions.gain_xp(player, 0.5 * (1 / health_pool[2]))
Public.gain_xp(player, 0.5 * (1 / health_pool[2]))
end
end
return
@ -303,13 +298,13 @@ local function on_entity_died(event)
if rpg_extra.rpg_xp_yield[entity.name] then
local amount = rpg_extra.rpg_xp_yield[entity.name]
if rpg_extra.turret_kills_to_global_pool then
local inserted = Functions.add_to_global_pool(amount, true)
Functions.gain_xp(player, inserted, true)
local inserted = Public.add_to_global_pool(amount, true)
Public.gain_xp(player, inserted, true)
else
Functions.gain_xp(player, amount)
Public.gain_xp(player, amount)
end
else
Functions.gain_xp(player, 0.5)
Public.gain_xp(player, 0.5)
end
end
end
@ -317,7 +312,7 @@ end
local function regen_health_player(players)
for i = 1, #players do
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
goto continue
end
@ -330,16 +325,16 @@ local function regen_health_player(players)
::continue::
Functions.update_health(player)
Public.update_health(player)
end
end
local function regen_mana_player(players)
for i = 1, #players do
local player = players[i]
local mana_per_tick = Functions.get_mana_modifier(player)
local rpg_extra = RPG.get('rpg_extra')
local rpg_t = RPG.get_value_from_player(player.index)
local mana_per_tick = Public.get_mana_modifier(player)
local rpg_extra = Public.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
if mana_per_tick <= 0.1 then
mana_per_tick = rpg_extra.mana_per_tick
end
@ -366,12 +361,16 @@ local function regen_mana_player(players)
::continue::
Functions.update_mana(player)
Public.update_mana(player)
end
end
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
return
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_guns)[cause.selected_gun_index].valid_for_read
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
ExplosiveBullets.explosive_bullets(event)
Public.explosive_bullets(event)
end
return
end
@ -543,7 +542,7 @@ local function on_entity_damaged(event)
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
return
end
@ -571,13 +570,13 @@ local function on_entity_damaged(event)
end
end
Functions.reward_mana(cause.player, 2)
Public.reward_mana(cause.player, 2)
--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.
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.physical then
damage = damage - entity.prototype.resistances.physical.decrease
@ -589,13 +588,13 @@ local function on_entity_damaged(event)
damage = 1
end
local enable_one_punch = RPG.get('rpg_extra').enable_one_punch
local rpg_t = RPG.get_value_from_player(cause.player.index)
local enable_one_punch = Public.get('rpg_extra').enable_one_punch
local rpg_t = Public.get_value_from_player(cause.player.index)
--Cause a one punch.
if enable_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)
if entity.valid then
entity.die(entity.force.name, cause)
@ -662,9 +661,9 @@ local function on_entity_damaged(event)
entity.die(cause.force.name, cause)
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
ExplosiveBullets.explosive_bullets(event)
Public.explosive_bullets(event)
end
end
@ -693,10 +692,10 @@ local function on_player_repaired_entity(event)
return
end
Functions.gain_xp(player, 0.05)
Functions.reward_mana(player, 0.2)
Public.gain_xp(player, 0.05)
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
return
end
@ -713,12 +712,12 @@ local function on_player_rotated_entity(event)
return
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
return
end
rpg_t.rotated_entity_delay = game.tick + 20
Functions.gain_xp(player, 0.20)
Public.gain_xp(player, 0.20)
end
local function on_player_changed_position(event)
@ -727,7 +726,7 @@ local function on_player_changed_position(event)
return
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
give_player_flameboots(player)
@ -742,7 +741,7 @@ local function on_player_changed_position(event)
if player.character.driving then
return
end
Functions.gain_xp(player, 1.0)
Public.gain_xp(player, 1.0)
end
local building_and_mining_blacklist = {
@ -758,7 +757,7 @@ local function on_player_died(event)
return
end
RPG_GUI.remove_frame(player)
Public.remove_frame(player)
end
local function on_pre_player_left_game(event)
@ -768,7 +767,7 @@ local function on_pre_player_left_game(event)
return
end
RPG_GUI.remove_frame(player)
Public.remove_frame(player)
end
local function on_pre_player_mined_item(event)
@ -788,12 +787,12 @@ local function on_pre_player_mined_item(event)
return
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
return
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
return
end
@ -817,8 +816,8 @@ local function on_pre_player_mined_item(event)
end
end
Functions.gain_xp(player, xp_amount)
Functions.reward_mana(player, 0.5 * distance_multiplier)
Public.gain_xp(player, xp_amount)
Public.reward_mana(player, 0.5 * distance_multiplier)
end
local function on_player_crafted_item(event)
@ -834,7 +833,7 @@ local function on_player_crafted_item(event)
return
end
local rpg_extra = RPG.get('rpg_extra')
local rpg_extra = Public.get('rpg_extra')
local is_blacklisted = rpg_extra.tweaked_crafting_items
local tweaked_crafting_items_enabled = rpg_extra.tweaked_crafting_items_enabled
@ -850,41 +849,41 @@ local function on_player_crafted_item(event)
end
end
Functions.gain_xp(player, event.recipe.energy * amount)
Functions.reward_mana(player, amount)
Public.gain_xp(player, event.recipe.energy * amount)
Public.reward_mana(player, amount)
end
local function on_player_respawned(event)
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
Functions.rpg_reset_player(player)
Public.rpg_reset_player(player)
return
end
RPG_GUI.update_player_stats(player)
RPG_GUI.draw_level_text(player)
Functions.update_health(player)
Functions.update_mana(player)
Public.update_player_stats(player)
Public.draw_level_text(player)
Public.update_health(player)
Public.update_mana(player)
end
local function on_player_joined_game(event)
local player = game.players[event.player_index]
local rpg_t = RPG.get_value_from_player(player.index)
local rpg_extra = RPG.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
local rpg_extra = Public.get('rpg_extra')
if not rpg_t then
Functions.rpg_reset_player(player)
Public.rpg_reset_player(player)
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
for _, p in pairs(game.connected_players) do
RPG_GUI.draw_level_text(p)
Public.draw_level_text(p)
end
RPG_GUI.draw_gui_char_button(player)
Public.draw_gui_char_button(player)
if not player.character then
return
end
RPG_GUI.update_player_stats(player)
Public.update_player_stats(player)
end
local function create_projectile(surface, name, position, force, target, max_range)
@ -985,14 +984,14 @@ local function tame_unit_effects(player, entity)
end
local function on_player_used_capsule(event)
local enable_mana = RPG.get('rpg_extra').enable_mana
local surface_name = RPG.get('rpg_extra').surface_name
local enable_mana = Public.get('rpg_extra').enable_mana
local surface_name = Public.get('rpg_extra').surface_name
if not enable_mana then
return
end
local conjure_items = RPG.get_spells()
local projectile_types = RPG.get_projectiles
local conjure_items = Public.get_spells()
local projectile_types = Public.get_projectiles
local player = game.players[event.player_index]
if not player or not player.valid then
@ -1019,7 +1018,7 @@ local function on_player_used_capsule(event)
return
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
return
@ -1092,11 +1091,11 @@ local function on_player_used_capsule(event)
force = 'player'
end
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)
rpg_t.mana = rpg_t.mana - object.mana_cost
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)
rpg_t.mana = rpg_t.mana - object.mana_cost
elseif obj_name == 'pointy_explosives' then
@ -1118,7 +1117,7 @@ local function on_player_used_capsule(event)
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)
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}
p(({'rpg_main.warped_ok'}), Color.info)
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 .. '. '
rpg_t.last_spawned = game.tick + object.tick
Functions.update_mana(player)
Public.update_mana(player)
local reward_xp = object.mana_cost * 0.085
if reward_xp < 1 then
reward_xp = 1
end
Functions.gain_xp(player, reward_xp)
Public.gain_xp(player, reward_xp)
AntiGrief.insert_into_capsule_history(player, position, msg)
@ -1195,18 +1194,22 @@ end
local function on_player_changed_surface(event)
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
local function tick()
local ticker = game.tick
local count = #game.connected_players
local players = game.connected_players
local enable_flameboots = RPG.get('rpg_extra').enable_flameboots
local enable_mana = RPG.get('rpg_extra').enable_mana
local enable_flameboots = Public.get('rpg_extra').enable_flameboots
local enable_mana = Public.get('rpg_extra').enable_mana
if ticker % nth_tick == 0 then
Functions.global_pool(players, count)
Public.global_pool(players, count)
end
if ticker % 30 == 0 then
@ -1240,7 +1243,7 @@ if _DEBUG then
return
end
p('Distributed ' .. param .. ' of xp.')
Functions.give_xp(param)
Public.give_xp(param)
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_crafted_item, on_player_crafted_item)
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_respawned, on_player_respawned)
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_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_removed, on_player_removed)
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 P = require 'player_modifiers'
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 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 settings_level = Public.gui_settings_levels
local function create_input_element(frame, type, value, items, index)
if type == 'slider' then
@ -28,8 +28,8 @@ local function create_input_element(frame, type, value, items, index)
end
function Public.update_spell_gui(player, spell_index)
local rpg_t = RPG.get('rpg_t')
local spells, names = RPG.rebuild_spells()
local rpg_t = Public.get_value_from_player(player.index)
local spells, names = Public.rebuild_spells()
local main_frame = player.gui.screen[spell_gui_frame_name]
if not main_frame then
return
@ -37,48 +37,48 @@ function Public.update_spell_gui(player, spell_index)
local spell_table = main_frame['spell_table']
if spell_index 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
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
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
spell_table[spell1_button_name].tooltip = names[rpg_t[player.index].dropdown_select_index1] or '---'
spell_table[spell1_button_name].sprite = spells[rpg_t[player.index].dropdown_select_index1].sprite
spell_table[spell2_button_name].tooltip = names[rpg_t[player.index].dropdown_select_index2] or '---'
spell_table[spell2_button_name].sprite = spells[rpg_t[player.index].dropdown_select_index2].sprite
spell_table[spell3_button_name].tooltip = names[rpg_t[player.index].dropdown_select_index3] or '---'
spell_table[spell3_button_name].sprite = spells[rpg_t[player.index].dropdown_select_index3].sprite
if rpg_t[player.index].dropdown_select_index1 == rpg_t[player.index].dropdown_select_index then
spell_table[spell1_button_name].tooltip = names[rpg_t.dropdown_select_index1] or '---'
spell_table[spell1_button_name].sprite = spells[rpg_t.dropdown_select_index1].sprite
spell_table[spell2_button_name].tooltip = names[rpg_t.dropdown_select_index2] or '---'
spell_table[spell2_button_name].sprite = spells[rpg_t.dropdown_select_index2].sprite
spell_table[spell3_button_name].tooltip = names[rpg_t.dropdown_select_index3] or '---'
spell_table[spell3_button_name].sprite = spells[rpg_t.dropdown_select_index3].sprite
if rpg_t.dropdown_select_index1 == rpg_t.dropdown_select_index then
spell_table[spell1_button_name].enabled = false
spell_table[spell1_button_name].number = 1
else
spell_table[spell1_button_name].enabled = true
spell_table[spell1_button_name].number = nil
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].number = 1
else
spell_table[spell2_button_name].enabled = true
spell_table[spell2_button_name].number = nil
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].number = 1
else
spell_table[spell3_button_name].enabled = true
spell_table[spell3_button_name].number = nil
end
spell_table['mana-cost'].caption = spells[rpg_t[player.index].dropdown_select_index].mana_cost
spell_table['mana'].caption = math.floor(rpg_t[player.index].mana)
spell_table['maxmana'].caption = math.floor(rpg_t[player.index].mana_max)
spell_table['mana-cost'].caption = spells[rpg_t.dropdown_select_index].mana_cost
spell_table['mana'].caption = math.floor(rpg_t.mana)
spell_table['maxmana'].caption = math.floor(rpg_t.mana_max)
end
function Public.spell_gui_settings(player)
local rpg_t = RPG.get('rpg_t')
local spells, names = RPG.rebuild_spells()
local rpg_t = Public.get_value_from_player(player.index)
local spells, names = Public.rebuild_spells()
local main_frame = player.gui.screen[spell_gui_frame_name]
if not main_frame or not main_frame.valid then
main_frame =
@ -95,25 +95,25 @@ function Public.spell_gui_settings(player)
table.add(
{
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,
tooltip = names[rpg_t[player.index].dropdown_select_index1] or '---'
tooltip = names[rpg_t.dropdown_select_index1] or '---'
}
)
table.add(
{
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,
tooltip = names[rpg_t[player.index].dropdown_select_index2] or '---'
tooltip = names[rpg_t.dropdown_select_index2] or '---'
}
)
table.add(
{
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,
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})
@ -129,8 +129,8 @@ function Public.spell_gui_settings(player)
end
function Public.extra_settings(player)
local rpg_extra = RPG.get('rpg_extra')
local rpg_t = RPG.get('rpg_t')
local rpg_extra = Public.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
local trusted = Session.get_trusted_table()
local main_frame =
player.gui.screen.add(
@ -195,7 +195,7 @@ function Public.extra_settings(player)
local input_style = health_bar_input.style
input_style.height = 35
input_style.vertical_align = 'center'
health_bar_gui_input = create_input_element(health_bar_input, 'boolean', rpg_t[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'})
if not rpg_extra.enable_mana then
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'
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
reset_gui_input.enabled = false
reset_gui_input.tooltip = ({'rpg_settings.not_trusted'})
goto continue
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.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.vertical_align = 'center'
local stone_path
if rpg_t[player.index].stone_path then
stone_path = rpg_t[player.index].stone_path
if rpg_t.stone_path then
stone_path = rpg_t.stone_path
else
stone_path = false
end
stone_path_gui_input = create_input_element(stone_path_input, 'boolean', stone_path)
if rpg_t[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.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.vertical_align = 'center'
local one_punch
if rpg_t[player.index].one_punch then
one_punch = rpg_t[player.index].one_punch
if rpg_t.one_punch then
one_punch = rpg_t.one_punch
else
one_punch = false
end
@ -379,7 +379,7 @@ function Public.extra_settings(player)
one_punch_gui_input.enabled = false
one_punch_gui_input.tooltip = ({'rpg_settings.one_punch_globally'})
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.tooltip = ({'rpg_settings.low_level', 30})
else
@ -409,15 +409,15 @@ function Public.extra_settings(player)
flame_boots_input_style.height = 35
flame_boots_input_style.vertical_align = 'center'
local flame_mod
if rpg_t[player.index].flame_boots then
flame_mod = rpg_t[player.index].flame_boots
if rpg_t.flame_boots then
flame_mod = rpg_t.flame_boots
else
flame_mod = false
end
flame_boots_gui_input = create_input_element(flame_boots_input, 'boolean', flame_mod)
if rpg_t[player.index].mana > 50 then
if rpg_t[player.index].level < 100 then
if rpg_t.mana > 50 then
if rpg_t.level < settings_level['flameboots_label'] then
flame_boots_gui_input.enabled = false
flame_boots_gui_input.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.vertical_align = 'center'
local explosive_bullets
if rpg_t[player.index].explosive_bullets then
explosive_bullets = rpg_t[player.index].explosive_bullets
if rpg_t.explosive_bullets then
explosive_bullets = rpg_t.explosive_bullets
else
explosive_bullets = false
end
explosive_bullets_gui_input = create_input_element(explosive_bullet_input, 'boolean', explosive_bullets)
if rpg_t[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.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.horizontal_align = 'right'
local entity_mod
if rpg_t[player.index].enable_entity_spawn then
entity_mod = rpg_t[player.index].enable_entity_spawn
if rpg_t.enable_entity_spawn then
entity_mod = rpg_t.enable_entity_spawn
else
entity_mod = false
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
conjure_label_style.horizontally_stretchable = true
@ -548,7 +548,7 @@ function Public.extra_settings(player)
local conjure_input_style = conjure_input.style
conjure_input_style.height = 35
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
if entity.type == 'item' then
@ -577,23 +577,23 @@ function Public.extra_settings(player)
})
end
end
if not spells[rpg_t[player.index].dropdown_select_index1] then
rpg_t[player.index].dropdown_select_index1 = 1
if not spells[rpg_t.dropdown_select_index1] then
rpg_t.dropdown_select_index1 = 1
end
if not spells[rpg_t[player.index].dropdown_select_index2] then
rpg_t[player.index].dropdown_select_index2 = 1
if not spells[rpg_t.dropdown_select_index2] then
rpg_t.dropdown_select_index2 = 1
end
if not spells[rpg_t[player.index].dropdown_select_index3] then
rpg_t[player.index].dropdown_select_index3 = 1
if not spells[rpg_t.dropdown_select_index3] then
rpg_t.dropdown_select_index3 = 1
end
mana_frame.add({type = 'label', caption = {'rpg_settings.spell_gui_setup'}, tooltip = {'rpg_settings.spell_gui_tooltip'}})
local spell_grid = mana_frame.add({type = 'table', column_count = 4, name = 'spell_grid_table'})
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_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_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_grid.add({type = 'sprite-button', name = spell_gui_button_name, sprite = 'item/raw-fish'})
end
@ -631,7 +631,7 @@ function Public.extra_settings(player)
)
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
allocate_label_style.horizontally_stretchable = true
@ -642,7 +642,7 @@ function Public.extra_settings(player)
local name_input_style = name_input.style
name_input_style.height = 35
name_input_style.vertical_align = 'center'
auto_allocate_gui_input = create_input_element(name_input, 'dropdown', false, names, rpg_t[player.index].allocate_index)
auto_allocate_gui_input = create_input_element(name_input, 'dropdown', false, names, rpg_t.allocate_index)
end
local data = {
@ -702,5 +702,3 @@ function Public.extra_settings(player)
player.opened = main_frame
end
return Public

View File

@ -260,7 +260,7 @@ function Public.conjure_items()
mana_cost = 200,
tick = 100,
enabled = true,
sprite = 'recipe/repair_pack'
sprite = 'recipe/repair-pack'
}
spells[#spells + 1] = {
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
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 = {
['ammo-turret'] = true,
['electric-turret'] = true,
@ -179,6 +187,30 @@ function Public.set_value_to_player(key, value, setter)
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
---@param key <string>
function Public.set(key)

View File

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

View File

@ -1,5 +1,6 @@
local Event = require 'utils.event'
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 SideTargets = require 'modules.wave_defense.side_targets'
local ThreatEvent = require 'modules.wave_defense.threat_events'
@ -501,17 +502,6 @@ local function increase_biter_damage()
return
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 new = Difficulty.get().difficulty_vote_value * 0.04
local melee = new

View File

@ -1,6 +1,7 @@
--Central to add all player modifiers together.
--Will overwrite character stats from other mods.
local Event = require 'utils.event'
local Global = require 'utils.global'
local this = {
@ -17,8 +18,23 @@ Global.register(
local Public = {}
function Public.get_table()
function Public.get(key)
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
local modifiers = {
@ -37,13 +53,23 @@ local modifiers = {
}
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
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
end
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
else
player[modifier] = sum_value
@ -53,28 +79,30 @@ function Public.update_player_modifiers(player)
end
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
end
if not modifier then
return
end
for k, _ in pairs(this.modifiers[player.index]) do
if modifiers[k] == modifier and this.modifiers[player.index][k] then
for k, _ in pairs(player_modifiers) do
if modifiers[k] == modifier and player_modifiers[k] then
if category then
if not this.modifiers[player.index][k][category] then
this.modifiers[player.index][k][category] = {}
if not player_modifiers[k][category] then
player_modifiers[k][category] = {}
end
this.modifiers[player.index][k][category] = value
player_modifiers[k][category] = value
else
this.modifiers[player.index][k] = value
player_modifiers[k] = value
end
end
end
end
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
end
if not modifier then
@ -83,30 +111,31 @@ function Public.disable_single_modifier(player, modifier, value)
for k, _ in pairs(modifiers) do
if modifiers[k] == modifier then
if value then
this.disabled_modifier[player.index][k] = value
disabled_modifiers[k] = value
else
this.disabled_modifier[player.index][k] = nil
disabled_modifiers[k] = nil
end
end
end
end
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
end
if not modifier then
return
end
for k, _ in pairs(this.modifiers[player.index]) do
for k, _ in pairs(player_modifiers) do
if modifiers[k] == modifier then
if category then
if this.modifiers[player.index][k] and this.modifiers[player.index][k][category] then
return this.modifiers[player.index][k][category]
if player_modifiers[k] and player_modifiers[k][category] then
return player_modifiers[k][category]
end
else
if this.modifiers[player.index][k] then
return this.modifiers[player.index][k]
if player_modifiers[k] then
return player_modifiers[k]
end
end
return false
@ -116,21 +145,22 @@ function Public.get_single_modifier(player, modifier, category)
end
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
end
if not modifier then
return
end
for k, _ in pairs(this.disabled_modifier[player.index]) do
for k, _ in pairs(disabled_modifiers) do
if modifiers[k] == modifier then
if category then
if this.disabled_modifier[player.index][k] and this.disabled_modifier[player.index][k][category] then
return this.disabled_modifier[player.index][k][category]
if disabled_modifiers[k] and disabled_modifiers[k][category] then
return disabled_modifiers[k][category]
end
else
if this.disabled_modifier[player.index][k] then
return this.disabled_modifier[player.index][k]
if disabled_modifiers[k] then
return disabled_modifiers[k]
end
end
return false
@ -172,7 +202,6 @@ local function on_player_removed(event)
end
end
local Event = require 'utils.event'
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_removed, on_player_removed)