diff --git a/utils/datastore/jail_data.lua b/utils/datastore/jail_data.lua index 9fa4fd35..9782ee2f 100644 --- a/utils/datastore/jail_data.lua +++ b/utils/datastore/jail_data.lua @@ -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)