1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-03-17 20:58:13 +02:00

jail data - fix that players who left and joined lost state

This commit is contained in:
Gerkiz 2021-02-01 00:00:48 +01:00
parent f6b94654c5
commit 1ecd90425d

View File

@ -190,23 +190,28 @@ end
local teleport_player_to_gulag = function(player, action)
local p_data = get_player_data(player)
local gulag_tp = function(surface)
get_player_data(player, true)
player.teleport(surface.find_non_colliding_position('character', game.forces.player.get_spawn_position(surface), 128, 1), surface.name)
end
if action == 'jail' then
local gulag = game.surfaces['gulag']
p_data.fallback_surface_index = player.surface.index
p_data.position = player.position
p_data.p_group_id = player.permission_group.group_id
p_data.locked = true
if p_data and not p_data.locked then
p_data.fallback_surface_index = player.surface.index
p_data.position = player.position
p_data.p_group_id = player.permission_group.group_id
p_data.locked = true
end
player.teleport(gulag.find_non_colliding_position('character', {0, 0}, 128, 1), gulag.name)
local data = {
player = player
}
Task.set_timeout_in_ticks(5, clear_gui, data)
elseif action == 'free' then
jailed[player.name] = nil
if votejail[player.name] then
votejail[player.name] = nil
end
if votefree[player.name] then
votefree[player.name] = nil
end
local surface = game.surfaces[p_data.fallback_surface_index]
local p = p_data.position
local p_group = game.permissions.get_group(p_data.p_group_id)
@ -214,11 +219,12 @@ local teleport_player_to_gulag = function(player, action)
local pos = {x = p.x, y = p.y}
local get_tile = surface.get_tile(pos)
if get_tile.valid and get_tile.name == 'out-of-map' then
gulag_tp(surface)
player.teleport(surface.find_non_colliding_position('character', game.forces.player.get_spawn_position(surface), 128, 1), surface.name)
else
get_player_data(player, true)
player.teleport(surface.find_non_colliding_position('character', p, 128, 1), surface.name)
end
get_player_data(player, true)
end
end
@ -241,6 +247,33 @@ local on_player_changed_surface = function(event)
end
end
local on_player_joined_game = function(event)
local player = game.players[event.player_index]
if not player or not player.valid then
return
end
if not jailed[player.name] then
return
end
local surface = game.surfaces['gulag']
if player.surface.index ~= surface.index then
local p_data = get_player_data(player)
if jailed[player.name] and p_data and p_data.locked then
teleport_player_to_gulag(player, 'jail')
end
end
local gulag = get_gulag_permission_group()
gulag.add_player(player)
if player.character and player.character.valid and player.character.driving then
player.character.driving = false
end
end
local validate_args = function(data)
local player = data.player
local griefer = data.griefer
@ -371,10 +404,9 @@ local jail = function(player, griefer, msg)
local g = game.players[griefer]
teleport_player_to_gulag(g, 'jail')
if g.surface.name == 'gulag' then
local gulag = get_gulag_permission_group()
gulag.add_player(griefer)
end
local gulag = get_gulag_permission_group()
gulag.add_player(griefer)
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
@ -407,17 +439,8 @@ local free = function(player, griefer)
local message = griefer .. ' was set free from jail by ' .. player .. '.'
jailed[griefer] = nil
set_data(jailed_data_set, griefer, nil)
if votejail[griefer] then
votejail[griefer] = nil
end
if votefree[griefer] then
votefree[griefer] = nil
end
Utils.print_to(nil, message)
Utils.action_warning_embed('{Jailed}', message)
return true
@ -597,6 +620,7 @@ Event.add(
end
)
Event.add(defines.events.on_player_joined_game, on_player_joined_game)
Event.add(defines.events.on_player_changed_surface, on_player_changed_surface)
Event.on_init(create_gulag_surface)