Greetings my fellow ROBLOX scripters and developers,
As a person new to creating games on this platform, I have had lots of help to create this sophisticated prison system which I want to work beautifully, but unfortunately I have run out of help and I am looking for a helpful person who would like to help me with this. My script currently has a GUI which is brought up when the tool is opened and you are near a player, and detains them when you press E. Then the only relevant option is to press arrest where there is a GUI for the amount of time you want them to be in jail for and a reason. And then after that the player who is being arrested should get teleported to the prison area for the suggested time, and then respawned. However, the issue is that when you press arrest, the player is only respawned and not put into jail. And the other issue is that the tool only works once - it stops working after you have used it on someone. I will put my script below (it is long) but if you know a possible solution please don't hesitate to leave a reply.
--services local players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local Http = game:GetService("HttpService") local RunService = game:GetService("RunService") local MarketplaceService = game:GetService("MarketplaceService") local webhook = "" --events local prison = ReplicatedStorage:WaitForChild("prison") --vars local PrisonSystem = workspace:WaitForChild("PrisonSystem") local processed = {}--{"player", "connection", "reason", "time", "arrestee"} local function completeTime(player) local reset = false player.CharacterAdded:Connect(function() reset = true end) while not reset and wait(1) do if not players:FindFirstChild(player.Name) or not player.Character then break end for i,v in pairs(processed) do --if player is removed from processed index will adapt if processed[i][1].Name == player.Name then processed[i][4] = processed[i][4] - 1 prison:FireClient(player, "arrest", processed[i][3], processed[i][4], processed[i][5]) end if processed[i][4] <= 0 then processed[i] = nil player:LoadCharacter() break end end end end local function establishCell(player) local cells = PrisonSystem:WaitForChild("Cells"):GetChildren() local connection connection = player.CharacterAdded:Connect(function() local processing = false for i,v in pairs(processed) do if processed[i][1].Name == player.Name then processing = true end end wait(1) player.Character.HumanoidRootPart.CFrame = cells[math.random(1,#cells)].CFrame completeTime(player) end) if players:FindFirstChild(player.Name) then player:LoadCharacter() end return connection end local function establishConnection(player) for i,v in pairs(processed) do if processed[i][1].Name == player.Name then establishCell(player) end end end --[[ local function postArrestLog(log) assert(typeof(log) == "string", "Log needs to be a string") local response = Http:RequestAsync({ Url = "https://623b9506.eu-gb.apiconnect.appdomain.cloud/usar/arrest", Method = "POST", Headers = { ["Content-Type"] = "application/json", ["X-IBM-Client-Id"] = "d67d9e82-f27f-4b42-bd46-3031c3ac234f" }, Body = Http:JSONEncode({message = log}) }) print(response.Success, response.StatusCode) end ]] local whiteListedGroups = { {"9459284", 247}, --AZNU HQ {"9734974", 2} --MP } local function checkPlayer(player) for i,v in pairs(whiteListedGroups) do if player:IsInGroup(whiteListedGroups[i][1]) and player:GetRankInGroup(whiteListedGroups[i][1]) >= whiteListedGroups[i][2] then return true end end print("Player is not whitelisted") return false end local detainedPlayers = {} prison.OnServerEvent:Connect(function(player, status, reason, _time, holdingPlayer, auto) if not checkPlayer(player) then return end if player and player.Character and holdingPlayer and holdingPlayer.Character then local mag = (player.Character.HumanoidRootPart.Position - holdingPlayer.Character.HumanoidRootPart.Position).Magnitude if mag > 10 then return end end for i,v in pairs(processed) do --if player is removed from processed index will adapt if processed[i][1].Name == holdingPlayer.Name then return end end if status == "detain" then holdingPlayer.Character.Humanoid.WalkSpeed = 0 prison:FireClient(holdingPlayer, status) detainedPlayers[holdingPlayer.Name] = holdingPlayer.Character.Head.Position holdingPlayer.Character.Humanoid.Died:Connect(function() detainedPlayers[holdingPlayer.Name] = nil end) elseif status == "release" then detainedPlayers[holdingPlayer.Name] = nil holdingPlayer.Character.Humanoid.WalkSpeed = 16 prison:FireClient(holdingPlayer, status) elseif status == "arrest" then detainedPlayers[holdingPlayer.Name] = nil if _time > 900 then _time = 900 elseif _time < 1 then _time = 1 end local date = os.date("!*t") local embed = { ['embeds'] = {{ ["title"] = "**SERVER ARREST REPORT**", ["description"] = "Situation: " ..holdingPlayer.Name.. " was arrested by " ..player.Name, ["color"] = 16711680, ["thumbnail"] = { url = players:GetUserThumbnailAsync(holdingPlayer.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420) }, ["fields"] = { { name = "Arrested Profile Link", value = "https://www.roblox.com/users/" ..holdingPlayer.UserId.. "/profile" }, { name = "Reason:", value = reason }, { name = "Sentence:", value = tostring(_time).." seconds" } }, ["footer"] = { text = "Arrested at Aldin Keep " ..date.month.. "/" ..date.day.. "/" ..date.year.. " at " ..date.hour.. ":" ..date.min.. " UTC" --"..MarketplaceService:GetProductInfo(game.GameId).Name.." } }} } Http:PostAsync(webhook, Http:JSONEncode(embed)) table.insert(processed, {holdingPlayer, establishCell(holdingPlayer), reason, _time, player.Name}) end end) RunService.Heartbeat:Connect(function() for _player, pos in pairs(detainedPlayers) do local player = players:FindFirstChild(_player) if player and player.Character then local mag = (player.Character.Head.Position - pos).Magnitude if mag > 50 then detainedPlayers[_player] = nil player:Kick("Leaving detained original position, automatic 15 minute arrest in place upon being in server") end end end end) players.PlayerAdded:Connect(function(player) establishConnection(player) end)