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:
parent
f6b94654c5
commit
1ecd90425d
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user