1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-03-19 21:10:19 +02:00

Merge branch 'develop' into develop

This commit is contained in:
Gerkiz 2022-03-15 20:04:30 +01:00 committed by GitHub
commit eea9f7e441
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 307 additions and 71 deletions

View File

@ -2,10 +2,10 @@ local Task = require 'utils.task'
local Token = require 'utils.token' local Token = require 'utils.token'
local Event = require 'utils.event' local Event = require 'utils.event'
local Terrain = require 'maps.deep_jungle.terrain' local Terrain = require 'maps.deep_jungle.terrain'
local DPT = require 'maps.deep_jungle.table'
local Public = {} local Public = {}
local force_chunk = false
local ceil = math.ceil local ceil = math.ceil
local queue_task = Task.queue_task local queue_task = Task.queue_task
local tiles_per_call = 12 local tiles_per_call = 12
@ -496,7 +496,11 @@ local do_chunk = Public.do_chunk
local schedule_chunk = Public.schedule_chunk local schedule_chunk = Public.schedule_chunk
local function on_chunk(event) local function on_chunk(event)
if force_chunk then local settings = DPT.get('settings')
if settings.stop_chunk then
return
end
if settings.force_chunk then
do_chunk(event) do_chunk(event)
else else
schedule_chunk(event) schedule_chunk(event)

View File

@ -4,32 +4,22 @@ require 'modules.biters_yield_coins'
require 'modules.rocks_yield_coins' require 'modules.rocks_yield_coins'
require 'modules.flashlight_toggle_button' require 'modules.flashlight_toggle_button'
require 'maps.deep_jungle.generate' require 'maps.deep_jungle.generate'
local Global = require 'utils.global'
local Event = require 'utils.event' local Event = require 'utils.event'
local map_functions = require 'tools.map_functions' local map_functions = require 'tools.map_functions'
local Task = require 'utils.task'
local DPT = require 'maps.deep_jungle.table'
local random = math.random local random = math.random
local this = {
chunks_charted = {}
}
Global.register(
this,
function(tbl)
this = tbl
end
)
local Public = {}
local function on_chunk_charted(event) local function on_chunk_charted(event)
local settings = DPT.get('settings')
local surface = game.get_surface(event.surface_index) local surface = game.get_surface(event.surface_index)
local deco = game.decorative_prototypes local deco = game.decorative_prototypes
local position = event.position local position = event.position
if this.chunks_charted[tostring(position.x) .. tostring(position.y)] then if settings.chunks_charted[tostring(position.x) .. tostring(position.y)] then
return return
end end
this.chunks_charted[tostring(position.x) .. tostring(position.y)] = true settings.chunks_charted[tostring(position.x) .. tostring(position.y)] = true
local decorative_names = {} local decorative_names = {}
for k, v in pairs(deco) do for k, v in pairs(deco) do
@ -113,8 +103,29 @@ local function on_entity_died(event)
end end
end end
local function chunk_load()
local tick = game.tick
local settings = DPT.get('settings')
if settings.chunk_load_tick then
if settings.chunk_load_tick < tick then
settings.force_chunk = false
DPT.remove('settings', 'chunk_load_tick')
Task.set_queue_speed(8)
end
end
end
local on_tick = function()
local tick = game.tick
if tick % 40 == 0 then
chunk_load()
end
end
local function on_init() local function on_init()
local map_gen_settings = {} local map_gen_settings = {}
local settings = DPT.get('settings')
map_gen_settings.moisture = 0.99 map_gen_settings.moisture = 0.99
map_gen_settings.water = 'none' map_gen_settings.water = 'none'
map_gen_settings.starting_area = 'normal' map_gen_settings.starting_area = 'normal'
@ -130,13 +141,14 @@ local function on_init()
} }
game.create_surface('deep_jungle', map_gen_settings) game.create_surface('deep_jungle', map_gen_settings)
game.forces.player.set_spawn_position({0, 0}, game.surfaces['deep_jungle']) game.forces.player.set_spawn_position({0, 0}, game.surfaces['deep_jungle'])
settings.force_chunk = true
settings.chunk_load_tick = game.tick + 200
end end
Event.on_init(on_init) Event.on_init(on_init)
Event.add(defines.events.on_chunk_charted, on_chunk_charted) Event.add(defines.events.on_chunk_charted, on_chunk_charted)
Event.add(defines.events.on_entity_died, on_entity_died) Event.add(defines.events.on_entity_died, on_entity_died)
Event.add(defines.events.on_player_joined_game, on_player_joined_game) Event.add(defines.events.on_player_joined_game, on_player_joined_game)
Event.on_nth_tick(10, on_tick)
require 'modules.rocks_yield_ore' require 'modules.rocks_yield_ore'
return Public

View File

@ -0,0 +1,48 @@
local Global = require 'utils.global'
local this = {
settings = {
chunk_load_tick = false,
chunks_charted = {}
}
}
Global.register(
this,
function(tbl)
this = tbl
end
)
local Public = {}
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
function Public.remove(key, sub_key)
if key then
if this[key] and this[key][sub_key] then
this[key][sub_key] = nil
elseif this[key] then
this[key] = nil
end
end
end
return Public

View File

@ -252,10 +252,14 @@ function Public.set(key, value)
end end
end end
function Public.remove(key) function Public.remove(key, sub_key)
if key then if key then
if this[key] and this[key][sub_key] then
this[key][sub_key] = nil
elseif this[key] then
this[key] = nil this[key] = nil
end end
end
end end
local on_init = function() local on_init = function()

View File

@ -6,13 +6,16 @@ local Task = require 'utils.task'
local Server = require 'utils.server' local Server = require 'utils.server'
local Event = require 'utils.event' local Event = require 'utils.event'
local Utils = require 'utils.core' local Utils = require 'utils.core'
local table = require 'utils.table'
local jailed_data_set = 'jailed' local jailed_data_set = 'jailed'
local revoked_permissions_set = 'revoked_permissions_jailed'
local jailed = {} local jailed = {}
local player_data = {} local player_data = {}
local terms_tbl = {} local terms_tbl = {}
local votejail = {} local votejail = {}
local votefree = {} local votefree = {}
local revoked_permissions = {}
local settings = { local settings = {
playtime_for_vote = 25920000, -- 5 days playtime_for_vote = 25920000, -- 5 days
playtime_for_instant_jail = 103680000, -- 20 days playtime_for_instant_jail = 103680000, -- 20 days
@ -38,7 +41,8 @@ Global.register(
votefree = votefree, votefree = votefree,
settings = settings, settings = settings,
player_data = player_data, player_data = player_data,
terms_tbl = terms_tbl terms_tbl = terms_tbl,
revoked_permissions = revoked_permissions
}, },
function(t) function(t)
jailed = t.jailed jailed = t.jailed
@ -47,12 +51,13 @@ Global.register(
settings = t.settings settings = t.settings
player_data = t.player_data player_data = t.player_data
terms_tbl = t.terms_tbl terms_tbl = t.terms_tbl
revoked_permissions = t.revoked_permissions
end end
) )
local Public = {} local Public = {}
local validate_entity = function(entity) local function validate_entity(entity)
if not (entity and entity.valid) then if not (entity and entity.valid) then
return false return false
end end
@ -60,6 +65,43 @@ local validate_entity = function(entity)
return true return true
end end
local function is_revoked(name)
if name then
if revoked_permissions[name] then
return true
else
return false
end
end
return false
end
local function add_revoked(name, admin, reason)
if name then
if not revoked_permissions[name] then
revoked_permissions[name] = true
set_data(revoked_permissions_set, name, {revoked = true, actor = admin, reason = reason})
return true
else
return false
end
end
return false
end
local function remove_revoked(name)
if name then
if revoked_permissions[name] then
revoked_permissions[name] = nil
set_data(revoked_permissions_set, name, nil)
return true
else
return false
end
end
return false
end
local clear_terms_tbl = local clear_terms_tbl =
Token.register( Token.register(
function(data) function(data)
@ -124,7 +166,7 @@ local clear_gui =
end end
) )
local validate_playtime = function(player) local function validate_playtime(player)
local tracker = Session.get_session_table() local tracker = Session.get_session_table()
local playtime = player.online_time local playtime = player.online_time
@ -136,7 +178,7 @@ local validate_playtime = function(player)
return playtime return playtime
end end
local validate_trusted = function(player) local function validate_trusted(player)
local trusted = Session.get_trusted_table() local trusted = Session.get_trusted_table()
local is_trusted = false local is_trusted = false
@ -148,7 +190,7 @@ local validate_trusted = function(player)
return is_trusted return is_trusted
end end
local get_player_data = function(player, remove) local function get_player_data(player, remove)
if remove and player_data[player.name] then if remove and player_data[player.name] then
player_data[player.name] = nil player_data[player.name] = nil
return return
@ -159,7 +201,7 @@ local get_player_data = function(player, remove)
return player_data[player.name] return player_data[player.name]
end end
local get_gulag_permission_group = function() local function get_gulag_permission_group()
local gulag = game.permissions.get_group('gulag') local gulag = game.permissions.get_group('gulag')
if not gulag then if not gulag then
gulag = game.permissions.create_group('gulag') gulag = game.permissions.create_group('gulag')
@ -172,7 +214,7 @@ local get_gulag_permission_group = function()
return gulag return gulag
end end
local create_gulag_surface = function() local function create_gulag_surface()
local surface = game.surfaces['gulag'] local surface = game.surfaces['gulag']
if not surface then if not surface then
local walls = {} local walls = {}
@ -243,7 +285,7 @@ local create_gulag_surface = function()
return surface return surface
end end
local teleport_player_to_gulag = function(player, action) local function teleport_player_to_gulag(player, action)
local p_data = get_player_data(player) local p_data = get_player_data(player)
if action == 'jail' then if action == 'jail' then
@ -290,7 +332,7 @@ local teleport_player_to_gulag = function(player, action)
end end
end end
local validate_args = function(data) local function validate_args(data)
local player = data.player local player = data.player
local griefer = data.griefer local griefer = data.griefer
local trusted = data.trusted local trusted = data.trusted
@ -367,7 +409,7 @@ local validate_args = function(data)
return true return true
end end
local vote_to_jail = function(player, griefer, msg) local function vote_to_jail(player, griefer, msg)
if not griefer then if not griefer then
return return
end end
@ -398,7 +440,7 @@ local vote_to_jail = function(player, griefer, msg)
end end
end end
local vote_to_free = function(player, griefer) local function vote_to_free(player, griefer)
if not griefer then if not griefer then
return return
end end
@ -432,7 +474,7 @@ local vote_to_free = function(player, griefer)
return return
end end
local jail = function(player, griefer, msg, raised) local function jail(player, griefer, msg, raised)
player = player or 'script' player = player or 'script'
if jailed[griefer] then if jailed[griefer] then
@ -443,21 +485,21 @@ local jail = function(player, griefer, msg, raised)
return return
end end
if not game.players[griefer] then if not game.get_player(griefer) then
return return
end end
local g = game.players[griefer] local to_jail_player = game.get_player(griefer)
teleport_player_to_gulag(g, 'jail') teleport_player_to_gulag(to_jail_player, 'jail')
local gulag = get_gulag_permission_group() local gulag = get_gulag_permission_group()
gulag.add_player(griefer) gulag.add_player(griefer)
local message = griefer .. ' has been jailed by ' .. player .. '. Cause: ' .. msg local message = griefer .. ' has been jailed by ' .. player .. '. Cause: ' .. msg
if game.players[griefer].character and game.players[griefer].character.valid and game.players[griefer].character.driving then if to_jail_player.character and to_jail_player.character.valid and to_jail_player.character.driving then
game.players[griefer].character.driving = false to_jail_player.character.driving = false
end end
jailed[griefer] = {jailed = true, actor = player, reason = msg} jailed[griefer] = {jailed = true, actor = player, reason = msg}
@ -476,23 +518,23 @@ local jail = function(player, griefer, msg, raised)
votejail[griefer].jailed = true votejail[griefer].jailed = true
end end
game.players[griefer].clear_console() to_jail_player.clear_console()
Utils.print_to(griefer, message) Utils.print_to(griefer, message)
return true return true
end end
local free = function(player, griefer) local function free(player, griefer)
player = player or 'script' player = player or 'script'
if not jailed[griefer] then if not jailed[griefer] then
return false return false
end end
if not game.players[griefer] then if not game.get_player(griefer) then
return return
end end
local g = game.players[griefer] local to_jail_player = game.get_player(griefer)
teleport_player_to_gulag(g, 'free') teleport_player_to_gulag(to_jail_player, 'free')
local message = griefer .. ' was set free from jail by ' .. player .. '.' local message = griefer .. ' was set free from jail by ' .. player .. '.'
@ -592,6 +634,64 @@ function Public.get_jailed_table()
return jailed return jailed
end end
--- Sets a value to required_playtime_for_instant_jail
-- @param value<int>
function Public.required_playtime_for_instant_jail(value)
if value then
settings.playtime_for_instant_jail = value
end
return settings.playtime_for_instant_jail
end
--- Sets a value to set_valid_surface
-- @param value<string>
function Public.set_valid_surface(value)
settings.valid_surface = value or 'nauvis'
return settings.valid_surface
end
--- Sets a value to required_playtime_for_vote
-- @param value<int>
function Public.required_playtime_for_vote(value)
if value then
settings.playtime_for_vote = value
end
return settings.playtime_for_vote
end
--- Resets reset_vote_table
function Public.reset_vote_table()
for k, _ in pairs(votejail) do
votejail[k] = nil
end
for k, _ in pairs(votefree) do
votefree[k] = nil
end
end
--- Writes the data called back from the server into the revoked_permissions table, clearing any previous entries
local sync_revoked_permissions_callback =
Token.register(
function(data)
if not data then
return
end
if not data.entries then
return
end
table.clear_table(revoked_permissions)
for k, v in pairs(data.entries) do
revoked_permissions[k] = v
end
end
)
--- Signals the server to retrieve the revoked_permissions dataset
function Public.sync_revoked_permissions()
Server.try_get_all_data(revoked_permissions_set, sync_revoked_permissions_callback)
end
Server.on_data_set_changed( Server.on_data_set_changed(
jailed_data_set, jailed_data_set,
function(data) function(data)
@ -610,6 +710,17 @@ Server.on_data_set_changed(
end end
) )
Server.on_data_set_changed(
revoked_permissions_set,
function(data)
if not data then
return
end
revoked_permissions[data.key] = data.value
end
)
commands.add_command( commands.add_command(
'jail', 'jail',
'Sends the player to gulag! Valid arguments are:\n/jail <LuaPlayer> <reason>', 'Sends the player to gulag! Valid arguments are:\n/jail <LuaPlayer> <reason>',
@ -626,33 +737,76 @@ commands.add_command(
end end
) )
function Public.required_playtime_for_instant_jail(value) commands.add_command(
if value then 'toggle_jail_permission',
settings.playtime_for_instant_jail = value 'Usable only for admins - controls who may use jail commands!',
end function(cmd)
return settings.playtime_for_instant_jail local name
end local player = game.player
function Public.set_valid_surface(value) if not player or not player.valid then
settings.valid_surface = value or 'nauvis' name = 'Server'
return settings.valid_surface else
end name = player.name
function Public.required_playtime_for_vote(value) if not player.admin then
if value then return
settings.playtime_for_vote = value end
end end
return settings.playtime_for_vote
end
function Public.reset_vote_table() local param = cmd.parameter
for k, _ in pairs(votejail) do
votejail[k] = nil local t_player
local revoke_reason
local revoke_player
local str = ''
if not param then
return Utils.print_to(player, 'Both player and reason is needed!')
end end
for k, _ in pairs(votefree) do
votefree[k] = nil local t = {}
for i in string.gmatch(param, '%S+') do
table.insert(t, i)
end end
end
t_player = t[1]
for i = 2, #t do
str = str .. t[i] .. ' '
revoke_reason = str
end
if game.get_player(t_player) then
revoke_player = game.get_player(t_player)
else
return Utils.print_to(player, 'No player was provided.')
end
if is_revoked(revoke_player.name) then
remove_revoked(revoke_player.name)
Utils.print_to(player, revoke_player.name .. ' can now utilize jail commands once again!')
return
end
if revoke_reason then
if revoke_reason and string.len(revoke_reason) <= 0 then
Utils.print_to(player, 'No valid reason was given.')
return
end
if revoke_reason and string.len(revoke_reason) <= 10 then
Utils.print_to(player, 'Reason is too short.')
return
end
add_revoked(revoke_player.name, name, revoke_reason)
Utils.print_to(player, revoke_player.name .. ' is now forbidden from utilizing jail commands!')
else
Utils.print_to(player, 'No message was provided')
end
end
)
Event.on_init( Event.on_init(
function() function()
@ -661,6 +815,13 @@ Event.on_init(
end end
) )
Event.add(
Server.events.on_server_started,
function()
Public.sync_revoked_permissions()
end
)
Event.add( Event.add(
defines.events.on_console_command, defines.events.on_console_command,
function(event) function(event)
@ -672,10 +833,16 @@ Event.add(
local param = event.parameters local param = event.parameters
if event.player_index then if event.player_index then
local player = game.players[event.player_index] local player = game.get_player(event.player_index)
local playtime = validate_playtime(player) local playtime = validate_playtime(player)
local trusted = validate_trusted(player) local trusted = validate_trusted(player)
if is_revoked(player.name) then
Utils.warning(player, 'You have abused your trusted permissions and therefore')
Utils.warning(player, 'your permissions have been revoked!')
return
end
if not param then if not param then
return Utils.print_to(player, 'No valid reason given.') return Utils.print_to(player, 'No valid reason given.')
end end
@ -709,8 +876,8 @@ Event.add(
local delay = 30 local delay = 30
if game.players[griefer] then if game.get_player(griefer) then
griefer = game.players[griefer].name griefer = game.get_player(griefer).name
end end
if trusted and playtime >= settings.playtime_for_vote and playtime < settings.playtime_for_instant_jail and not player.admin then if trusted and playtime >= settings.playtime_for_vote and playtime < settings.playtime_for_instant_jail and not player.admin then
@ -720,6 +887,7 @@ Event.add(
player, player,
'Abusing the jail command will lead to revoked permissions. Jailing someone in case of disagreement is _NEVER_ OK!' 'Abusing the jail command will lead to revoked permissions. Jailing someone in case of disagreement is _NEVER_ OK!'
) )
Utils.warning(player, "Jailing someone because they're afk or other stupid reasons is NOT valid!")
Utils.warning(player, 'Run this command again to if you really want to do this!') Utils.warning(player, 'Run this command again to if you really want to do this!')
for i = 1, 4 do for i = 1, 4 do
Task.set_timeout_in_ticks(delay, play_alert_sound, {name = player.name}) Task.set_timeout_in_ticks(delay, play_alert_sound, {name = player.name})
@ -801,7 +969,7 @@ Event.add(
Event.add( Event.add(
defines.events.on_player_changed_surface, defines.events.on_player_changed_surface,
function(event) function(event)
local player = game.players[event.player_index] local player = game.get_player(event.player_index)
if not player or not player.valid then if not player or not player.valid then
return return
end end