Merge branch 'release/6.2.0' into dev

This commit is contained in:
Cooldude2606
2021-05-10 21:09:12 +01:00
22 changed files with 148 additions and 84 deletions

View File

@@ -24,63 +24,66 @@
## Explosive Gaming
Explosive Gaming (often ExpGaming) is a server hosting community with a strong focus on Factorio and games that follow similar ideas. Our Factorio server are known for hosting large maps with the main goal of being a "mega base" which can produce as much as possible within our reset schedule. Although these servers tend to attract the more experienced players, our servers are open to everyone. You can find us through our [website], [discord], [wiki], or in the public games tab in Factorio (ExpGaming S1, ExpGaming S2, etc.).
Explosive Gaming (often ExpGaming) is a server hosting community with a strong focus on [Factorio](factorio) and games with similar themes. We are best known for our weekly reset Factorio server with a vanilla+ scenario. Although our servers tend to attract the more experienced players, our servers are open to everyone. You can find us through our [website], [discord], or the public server list with the name ExpGaming.
## Use and Installation
1) Download this [git repository](https://github.com/explosivegaming/scenario/archive/master.zip) for the stable release. The dev branch can be found [here](https://github.com/explosivegaming/scenario/archive/dev.zip) for those who want the latest features. See [releases](#releases) for other release branches.
1) Download our [git repository](stable-dl) for the stable release. For the latest features you can download our [dev branch](experimental-dl). See [releases](#releases) for other major releases.
2) Extract the downloaded zip file from the branch you downloaded into Factorio's scenario directory:
2) Extract the downloaded zip file into your Factorio scenario directory:
* Windows: `%appdata%\Factorio\scenarios`
* Linux: `~/.factorio/scenarios`
3) Within the scenario you can find `./config/_file_loader.lua` which contains a list of all the modules that will be loaded by the scenario; simply comment out (or remove) features you do not want but note that some modules may load other modules as dependencies even when removed from the list.
3) Within the scenario you can find `./config/_file_loader.lua` which contains a list of all the modules which will be loaded by the scenario. Comment out (or remove) features you do not want. Be aware modules may load other modules as dependencies even when removed from the list.
4) More advanced users may want to play with the other configs files within `./config` but please be aware that some of the config files will require a basic understanding of lua while others may just be a list of values.
4) More advanced users can adjust other configs files within `./config` but please be aware some files will require a basic understanding of lua.
5) Once you have made any config changes that you wish to make open Factorio, select play, then start scenario (or host scenario from within multiplayer tab), and select the scenario which will be called `scenario-master` if you have downloaded the latest stable release and have not changed the folder name.
5) Once you have made your config changes: open Factorio, select either single or multiplayer, select (host) new game, and finally select our scenario which will be called `scenario-master` or `scenario-dev` under user scenarios.
6) The scenario will now load all the selected modules and start the map, any errors or exceptions raised in the scenario should not cause a game/server crash, so if any features do not work as expected then it may be returning an error in the log.
Please report these errors to [the issues page](issues).
6) You will now be asked to generate your map and the scenario will load all selected modules. If any module does not load as expected please check `factorio-current.log` in your Factorio directory for errors and report them to our [issues page](issues).
## Contributing
All are welcome to make pull requests and issues for this scenario, if you are in any doubt, please ask someone in our [discord]. If you do not know lua and don't feel like learning you can always make a [feature request]. To find out what we already have please read our [docs]. Please keep in mind while making code changes:
All are welcome to make bug reports, feature requests, and pull requests for our scenario. We do not require you to have any lua or coding knowledge to make bug reports and feature requests. If you have any questions ask us in our [discord].
For developers wanting to add features please follow these guidelines:
* All code is documented using ldoc, the end result can be found [here](docs).
* Changes should be made on your own fork and merged into `dev` through a pull request.
* Pull requests are automatically linted and documentation checked.
* Pull requests are manually reviewed to maintain code and language quality.
* New features should have the branch names: `feature/feature-name`
* New features are merged into `dev` after it has been completed, this can be done through a pull request.
* After a number of features have been added a release branch is made: `release/X.Y.0`
* Bug fixes and localization can be made to the release branch with a pull request rather than into dev.
* A release is merged into `master` on the following friday after it is considered stable.
* Patches may be named `patch/X.Y.Z` and will be merged into `dev` and then `master` when appropriate.
* Bug fixes should have the branch names: `fix/bug-name`
## Releases
| Scenario Version* | Version Name | Factorio Version** |
| Release* | Release Name | Factorio Version** |
|---|---|---|
| [v6.1][s6.1] | External Data Overhaul | [v1.0.0][f1.0.0] |
| [v6.0][s6.0] | Gui / 0.18 Overhaul | [v0.18.17][f0.18.17] |
| [v5.10][s5.10] | Data Store Rewrite | [v0.17.71][f0.17.71] |
| [v5.9][s5.9] | Control Modules and Documentation | [v0.17.63][f0.17.63] |
| [v5.8][s5.8] | Home and Chat Bot | [v0.17.47][f0.17.49] |
| [v5.7][s5.7] | Warp System | [v0.17.47][f0.17.47] |
| [v5.6][s5.6] | Information Guis | [v0.17.44][f0.17.44] |
| [v5.5][s5.5] | Gui System | [v0.17.43][f0.17.43] |
| [v5.4][s5.4] | Admin Controls | [v0.17.32][f0.17.32] |
| [v5.3][s5.3] | Custom Roles | [v0.17.28][f0.17.28] |
| [v5.2][s5.2] | Quality of life | [v0.17.22][f0.17.22] |
| [v5.1][s5.1] | Permission Groups | [v0.17.13][f0.17.13] |
| [v5.0][s5.0] | 0.17 Overhaul| [v0.17][f0.17.9] |
| [v4.0][s4.0] | Softmod Manager | [v0.16.51][f0.16.51] |
| [v3.0][s3.0] | 0.16 Overhaul | [v0.16][f0.16] |
| [v2.0][s2.0] | Localization and clean up | [v0.15][f0.15] |
| [v1.0][s1.0] | Modulation | [v0.15][f0.15] |
| [v0.1][s0.1] | First Tracked Version | [v0.14][f0.14] |
| [6.2][s6.2] | Mega Feature Bundle | [1.1.32][f1.1.32] |
| [6.1][s6.1] | External Data Overhaul | [1.0.0][f1.0.0] |
| [6.0][s6.0] | Gui / 0.18 Overhaul | [0.18.17][f0.18.17] |
| [5.10][s5.10] | Data Store Rewrite | [0.17.71][f0.17.71] |
| [5.9][s5.9] | Control Modules and Documentation | [0.17.63][f0.17.63] |
| [5.8][s5.8] | Home and Chat Bot | [0.17.47][f0.17.49] |
| [5.7][s5.7] | Warp System | [0.17.47][f0.17.47] |
| [5.6][s5.6] | Information Guis | [0.17.44][f0.17.44] |
| [5.5][s5.5] | Gui System | [0.17.43][f0.17.43] |
| [5.4][s5.4] | Admin Controls | [0.17.32][f0.17.32] |
| [5.3][s5.3] | Custom Roles | [0.17.28][f0.17.28] |
| [5.2][s5.2] | Quality of life | [0.17.22][f0.17.22] |
| [5.1][s5.1] | Permission Groups | [0.17.13][f0.17.13] |
| [5.0][s5.0] | 0.17 Overhaul| [0.17][f0.17.9] |
| [4.0][s4.0] | Softmod Manager | [0.16.51][f0.16.51] |
| [3.0][s3.0] | 0.16 Overhaul | [0.16][f0.16] |
| [2.0][s2.0] | Localization and clean up | [0.15][f0.15] |
| [1.0][s1.0] | Modulation | [0.15][f0.15] |
| [0.1][s0.1] | First Tracked Version | [0.14][f0.14] |
\* Scenario patch versions have been omitted.
\* Scenario patch releases have been omitted and can be found [here](https://github.com/explosivegaming/scenario/releases).
\*\* Factorio versions show the version they were made for, often the minimum requirement.
\*\* Factorio versions show the version they were made for, often the minimum requirement to run the scenario.
[s6.2]: https://github.com/explosivegaming/scenario/releases/tag/6.2.0
[s6.1]: https://github.com/explosivegaming/scenario/releases/tag/6.1.0
[s6.0]: https://github.com/explosivegaming/scenario/releases/tag/6.0.0
[s5.10]: https://github.com/explosivegaming/scenario/releases/tag/5.10.0
@@ -100,6 +103,7 @@ All are welcome to make pull requests and issues for this scenario, if you are i
[s1.0]: https://github.com/explosivegaming/scenario/releases/tag/v1.0
[s0.1]: https://github.com/explosivegaming/scenario/releases/tag/v0.1
[f1.1.32]: https://wiki.factorio.com/Version_history/1.1.0#1.1.32
[f1.0.0]: https://wiki.factorio.com/Version_history/1.0.0#1.0.0
[f0.18.17]: https://wiki.factorio.com/Version_history/0.18.0#0.18.17
[f0.17.71]: https://wiki.factorio.com/Version_history/0.17.0#0.17.71
@@ -122,8 +126,10 @@ All are welcome to make pull requests and issues for this scenario, if you are i
The Explosive Gaming codebase is licensed under the [GNU General Public License v3.0](LICENSE)
[stable-dl]: https://github.com/explosivegaming/scenario/archive/master.zip
[experimental-dl]: https://github.com/explosivegaming/scenario/archive/dev.zip
[factorio]: https://factorio.com/
[docs]: https://explosivegaming.github.io/scenario/
[issues]: https://github.com/explosivegaming/scenario/issues/new/choose
[website]: https://explosivegaming.nl
[discord]: https://discord.explosivegaming.nl
[wiki]: https://wiki.explosivegaming.nl

View File

@@ -49,6 +49,7 @@ return {
'modules.addons.tree-decon',
'modules.addons.afk-kick',
'modules.addons.report-jail',
'modules.addons.protection-jail',
--- Data
'modules.data.statistics',
@@ -63,12 +64,12 @@ return {
'modules.gui.readme',
'modules.gui.rocket-info',
'modules.gui.science-info',
'modules.gui.autofill',
'modules.gui.warp-list',
'modules.gui.task-list',
'modules.gui.player-list',
'modules.gui.server-ups',
'modules.commands.debug',
'modules.gui.autofill',
--- Config Files
'config.expcore.command_auth_admin', -- commands tagged with admin_only are blocked for non admins

View File

@@ -16,7 +16,6 @@ return {
['discord'] = {'info.discord'},
['expgaming'] = {'info.website'},
['website'] = {'info.website'},
['wiki'] = {'info.wiki'},
['status'] = {'info.status'},
['github'] = {'info.github'},
['patreon'] = {'info.patreon'},

View File

@@ -12,7 +12,6 @@ return {
{'info.read-readme'},
{'info.discord'},
{'info.softmod'},
{'info.wiki'},
{'info.redmew'},
{'info.custom-commands'},
{'info.status'},

View File

@@ -2,6 +2,7 @@
-- @config Discord-Alerts
return {
show_playtime=true,
entity_protection=true,
player_reports=true,
player_warnings=true,

View File

@@ -20,7 +20,7 @@ end)
--- Admin Roles
Roles.new_role('System','SYS')
:set_permission_group('Admin')
:set_permission_group('Default', true)
:set_flag('is_admin')
:set_flag('is_spectator')
:set_flag('report-immune')

View File

@@ -18,36 +18,38 @@ Debug = require 'overrides.debug' -- Global Debug module
_C = require 'expcore.common' -- _C is used to store lots of common functions expected to be used
-- Please go to config/file_loader.lua to edit the files that are loaded
log('[INFO] Getting file loader config')
local files = require 'config._file_loader' --- @dep config._file_loader
log('[INFO] Reading loader config')
local files = require 'config._file_loader'
-- Error handler for loading files
local errors = {}
local error_count = 0
local error_format = '[ERROR] %s :: %s'
local currently_loading = nil
local function error_handler(err)
error_count = error_count + 1
if err:find('module '..currently_loading..' not found;', nil, true) then
log('[ERROR] File not found: '..currently_loading)
errors[error_count] = error_format:format(currently_loading, err)
else
log('[ERROR] Failed to load: '..currently_loading)
errors[error_count] = debug.traceback(error_format:format(currently_loading, err))
end
end
-- Loads all files from the config and logs that they are loaded
local total_file_count = string.format('%3d', #files)
local errors = {}
for index, path in pairs(files) do
-- Loads the next file in the list
currently_loading = path
log(string.format('[INFO] Loading file %3d/%s (%s)', index, total_file_count, path))
local success, file = pcall(require, path)
-- Error Checking
if not success then
-- Failed to load a file
log('[ERROR] Failed to load file: '..path)
table.insert(errors, '[ERROR] '..path..' :: '..file)
elseif type(file) == 'string' and file:find('not found') then
-- Returned a file not found message
log('[ERROR] File not found: '..path)
table.insert(errors, '[ERROR] '..path..' :: Not Found')
end
xpcall(require, error_handler, path)
end
-- Override the default require; require can no longer load new scripts
log('[INFO] Require Overright! No more requires can be made!')
log('[INFO] Require Overwrite! No more requires can be made!')
require 'overrides.require'
-- Logs all errors again to make it make it easy to find
log('[INFO] All files loaded with '..#errors..' errors:')
for _, error in pairs(errors) do log(error) end
log('[INFO] All files loaded with '..error_count..' errors:')
for _, error in ipairs(errors) do log(error) end
log('[END] -----| Explosive Gaming Scenario Loader |-----')

View File

@@ -142,15 +142,15 @@ end
@tparam boolean state the state that you want to set it to, true = allow, false = disallow
@treturn Permissions_Groups._prototype returns self so function can be chained
@usage-- Set an action to be disalowed
@usage-- Set an action to be disallowed
group:set_action('toggle_map_editor', false)
]]
function Permissions_Groups._prototype:set_action(action, state)
if type(action) == 'string' then
action = defines.input_action[action]
end
self.actions[action] = state
local input_action = defines.input_action[action]
if input_action == nil then input_action = action end
assert(type(input_action) == 'number', tostring(action)..' is not a valid input action')
self.actions[input_action] = state
return self
end

View File

@@ -9,7 +9,6 @@ player-damage=__1__
[links]
discord=https://discord.explosivegaming.nl
website=https://www.explosivegaming.nl
wiki=https://wiki.explosivegaming.nl/
status=https://status.explosivegaming.nl
github=https://github.com/explosivegaming/scenario
patreon=https://www.patreon.com/ExpGaming
@@ -19,7 +18,6 @@ players-online=There are __1__ players online
total-map-time=This map has been on for __1__
discord=Join us on our discord at: https://discord.explosivegaming.nl
website=Please visit our website at: https://www.explosivegaming.nl
wiki=You can get more information about us and the custom scenario from our wiki: https://wiki.explosivegaming.nl/
status=Want to check if out servers are down? Visit: https://status.explosivegaming.nl
github=Want to help improve our server with some extra features? Help us at: https://github.com/explosivegaming/scenario
patreon=Consider supporting our server at: https://www.patreon.com/ExpGaming
@@ -81,4 +79,7 @@ verify=Please return to our discord and type r!verify __1__
message=All players were kicked because everyone was AFK.
[report-jail]
jail=__1__ was jailed because they were reported too many times.
jail=__1__ was jailed because they were reported too many times. Please wait for a moderator.
[protection-jail]
jail=__1__ was jailed because they removed too many protected entities. Please wait for a moderator.

View File

@@ -58,7 +58,7 @@ set=Your bonus has been set to __1__.
wip=This command is temporary and will be replaced at some point in the future.
[expcom-ratio]
notSelecting=Please select an entetiy with a recpie.
notSelecting=Please select an entity with a recipe.
item-in=You need __1__ per second of [item=__2__].
fluid-in=You need __1__ per second of [fluid=__2__].
item-out=This will result in: __1__ [item=__2__] per second.

View File

@@ -30,7 +30,7 @@ Event.on_nth_tick(config.update_time, function()
-- Check for active players
for _, player in ipairs(game.connected_players) do
if player.afk_time < config.afk_time
or config.admin_as_active and config.player.admin
or config.admin_as_active and player.admin
or config.trust_as_active and player.online_time > config.trust_time
or config.active_role and Roles.player_has_role(player, config.active_role) then
-- Active player was found

View File

@@ -6,6 +6,14 @@ local Colors = require 'utils.color_presets' --- @dep utils.color_presets
local write_json, format_time = _C.write_json, _C.format_time --- @dep expcore.common
local config = require 'config.discord_alerts' --- @dep config.discord_alerts
local playtime_format = { short = true, hours = true, minutes = true, string = true }
local function append_playtime(player_name)
if not config.show_playtime then return player_name end
local player = game.get_player(player_name)
if not player then return player_name end
return player.name..' ('..format_time(player.online_time, playtime_format)..')'
end
local function get_player_name(event)
local player = game.players[event.player_index]
return player.name, event.by_player_name
@@ -85,7 +93,7 @@ if config.entity_protection then
title='Entity Protection',
description='A player removed protected entities',
color=Colors.yellow,
['Player']='<inline>'..player_name,
['Player']='<inline>'..append_playtime(player_name),
['Entity']='<inline>'..event.entity.name
}
end)
@@ -100,8 +108,8 @@ if config.player_reports then
title='Report',
description='A player was reported',
color=Colors.yellow,
['Player']='<inline>'..player_name,
['By']='<inline>'..by_player_name,
['Player']='<inline>'..append_playtime(player_name),
['By']='<inline>'..append_playtime(by_player_name),
['Report Count']='<inline>'..Reports.count_reports(player_name),
['Reason']=event.reason
}

View File

@@ -0,0 +1,37 @@
--- When a player triggers protection multiple times they are automatically jailed
-- @addon protection-jail
local Event = require 'utils.event' ---@dep utils.event
local Global = require 'utils.global' ---@dep utils.global
local Jail = require 'modules.control.jail' ---@dep modules.control.jail
local Protection = require 'modules.control.protection' --- @dep modules.control.protection
local format_chat_player_name = _C.format_chat_player_name --- @dep expcore.common
--- Stores how many times the repeat violation was triggered
local repeat_count = {}
Global.register(repeat_count, function(tbl)
repeat_count = tbl
end)
--- When a protection is triggered increment their counter and jail if needed
Event.add(Protection.events.on_repeat_violation, function(event)
local player = game.get_player(event.player_index)
-- Increment the counter
if repeat_count[player.index] then
repeat_count[player.index] = repeat_count[player.index] + 1
else
repeat_count[player.index] = 1
end
-- Jail if needed
if repeat_count[player.index] < 3 then return end
local player_name_color = format_chat_player_name(player)
Jail.jail_player(player, '<protection>', 'Removed too many protected entities, please wait for a moderator.')
game.print{'protection-jail.jail', player_name_color}
end)
--- Clear the counter when they leave the game (stops a build up of data)
Event.add(defines.events.on_player_left_game, function(event)
repeat_count[event.player_index] = nil
end)

View File

@@ -55,7 +55,7 @@ local function sort_players(players, func)
for index, player in ipairs(players) do
local value = func(player)
-- Check if the item will make the top 5 elements
if value > threshold or index <= 5 then
if index <= 5 or value > threshold then
local inserted = false
values[player] = value
-- Find where in the top 5 to insert the element

View File

@@ -91,6 +91,13 @@ function Jail.jail_player(player, by_player_name, reason)
local roles = get_roles(player)
old_roles[player.name] = roles
player.walking_state = { walking = false }
player.riding_state = { acceleration = defines.riding.acceleration.nothing, direction = player.riding_state.direction }
player.mining_state = { mining = false }
player.shooting_state = { state = defines.shooting.not_shooting }
player.picking_state = false
player.repair_state = { repairing = false }
assign_roles(player, 'Jail', by_player_name, nil, true)
unassign_roles(player, roles, by_player_name, nil, true)

View File

@@ -157,7 +157,7 @@ Event.add(defines.events.on_pre_player_mined_item, function(event)
local player = game.get_player(event.player_index)
-- Check if the player should be ignored
if config.ignore_admins and player.admin then return end
if entity.last_user.index == player.index then return end
if entity.last_user == nil or entity.last_user.index == player.index then return end
if config.ignore_permission and Roles.player_allowed(player, config.ignore_permission) then return end
-- Check if the entity is protected

View File

@@ -35,9 +35,11 @@ function Public.start_spectate(player)
assert(player and player.valid, 'Invalid player given to follower')
if spectating[player.index] or not player.character then return false end
local character = player.character
local opened = player.opened
player.set_controller{ type = defines.controllers.spectator }
player.associate_character(character)
spectating[player.index] = character
if opened then player.opened = opened end -- Maintain opened after controller change
return true
end

View File

@@ -24,6 +24,7 @@ PlayerBonus:set_metadata{
--- Apply a bonus amount to a player
local function apply_bonus(player, amount)
if not amount then return end
if not player.character then return end
for bonus, min_max in pairs(config) do
local increase = min_max[2]*amount
player[bonus] = min_max[1]+increase

View File

@@ -85,6 +85,11 @@ end)
element.sprite = 'utility/confirm_slot'
element.style = 'shortcut_bar_button_green'
end
-- Correct the button size
local style = element.style
style.padding = -2
style.height = 22
style.width = 22
end)
--- Draw a section header and main scroll

View File

@@ -219,7 +219,7 @@ local task_list =
}
scroll_pane.style.horizontally_stretchable = true
scroll_pane.style.padding = 0
scroll_pane.style.maximal_height = 280
scroll_pane.style.maximal_height = 224
local flow =
scroll_pane.add {
@@ -572,12 +572,6 @@ local update_task = function(player, task_list_element, task_id)
element[task_list_item.name].tooltip = {"task-list.last-edit", last_edit_name, format_time(last_edit_time)}
end
--- Button on the top flow used to toggle the task list container
-- @element toggle_task_list
Gui.left_toolbar_button('utility/not_enough_repair_packs_icon', {'task-list.main-tooltip'}, task_list_container, function(player)
return Roles.player_allowed(player, 'gui/task-list')
end)
-- Update the footer task edit view
local update_task_edit_footer = function(player, task_id)
local task = Tasks.get_task(task_id)

View File

@@ -616,6 +616,7 @@ local function update_all_warp_force(force)
local frame = Gui.get_left_element(player, warp_list_container)
local warp_table = frame.container.scroll.table
warp_table.clear() -- Needed to re-sort the warps
for _, warp_id in ipairs(warp_ids) do
update_warp(player, warp_table, warp_id)
end

View File

@@ -1,5 +1,5 @@
return {
expgaming_lua = '6.0.0',
expgaming_lua = '6.2.0',
expgaming_api = '2.0.0',
redmew_lua = '2019-02-24-76871ee'
}