I made a script for a tower defense “capsule”. Basically all it does is teleport you inside the capsule, starts a timer, makes you select a level. If you don’t select a level before 20 seconds you get kicked out of the capsule. The script was completely fine for months, until yesterday where my script editors “Autocomplete” stopped working and when closing the studio, it would freeze and I would have to close the tab through task manager. When i remove the script, close the tab through task manager and reopen the tab, Autocomplete suddenly works and when I close the tab it actually closes. This is the script, its a bit long.
If you don’t quite understand what I mean do say so😁
local TPS = game:GetService("TeleportService")
local P = game:GetService("Players")
local SSS = game:GetService("ServerScriptService")
--//Services
local profilesModule = require(game.ServerScriptService:WaitForChild("ProfileServiceFolder"):WaitForChild("PlayerData"):WaitForChild("Profiles"))
local teleportServiceModule = require(RS:WaitForChild("ModuleScript"):WaitForChild("TeleportService"))
--//Modules
local teleportPart = script.Parent
local teleportPosition = teleportPart.Parent:WaitForChild("TeleportPosition")
local capsule = teleportPart.Parent
local teleportOutPosition = teleportPart.Parent:WaitForChild("TeleportOutPosition")
local capsuleValues = capsule:WaitForChild("CapsuleValues")
--//CapsuleParts
local remoteEventsFolder = RS:WaitForChild("RemoteEvents")
local giveCapsuleUIEvent = remoteEventsFolder:WaitForChild("GiveCapsuleUI")
local selectGameModeEvent = remoteEventsFolder:WaitForChild("SelectGameMode")
local teleportCapsuleEvent = remoteEventsFolder:WaitForChild("TeleportCapsule")
local removePlayerEvent = remoteEventsFolder:WaitForChild("LeaveTeleport")
local removeCapsuleUIEvent = remoteEventsFolder:WaitForChild("RemoveCapsuleUI")
--//Remote Events
local playersInside = {}
local capsuleHost = {}
--//Tables
local profiles = profilesModule.Profiles
local playerJoindDB = false
local maxAmountOfPlayers = 4
local timer = 20 --/////CHANGE IF YOU WANT. IMO 20 IS VALID
--//Capsule stuff
local gamePlaceID = 109364848141235
local function teleportOutPlayer(player)
if not table.find(playersInside, player) then return end
if #playersInside >= 1 then --/// checks if there is a player inside
if player then
local character = player.Character
local playerIndexInsideTable = table.find(playersInside, player)
print(playersInside)
--//////////////////////////////////////////////////////////////////////////////////
local isHost = table.find(capsuleHost, player)
if isHost then
table.remove(capsuleHost, 1)
table.remove(playersInside, playerIndexInsideTable)
capsuleValues:SetAttribute("AmountOfPlayers", capsuleValues:GetAttribute("AmountOfPlayers") - 1 )
character:MoveTo(teleportOutPosition.Position)
removeCapsuleUIEvent:FireClient(player)
--//Host removal
for i = #playersInside, 1, -1 do
local playerInside = playersInside[i]
local playerInsideCharacter = playerInside.Character
if playerInsideCharacter then
playerInsideCharacter:MoveTo(teleportOutPosition.Position)
end
table.remove(playersInside, i)
capsuleValues:SetAttribute("AmountOfPlayers", capsuleValues:GetAttribute("AmountOfPlayers") - 1 )
removeCapsuleUIEvent:FireClient(playerInside)
end
--//Removing others
capsuleValues:SetAttribute("GameMode", "")
capsuleValues:SetAttribute("GameModeSelected", false)
--//setting capsule back to default
return
end
--//////////////////////////////////////////////////////////////////////////////////
table.remove(playersInside, playerIndexInsideTable)
capsuleValues:SetAttribute("AmountOfPlayers", capsuleValues:GetAttribute("AmountOfPlayers") - 1)
character:MoveTo(teleportOutPosition.Position)
removeCapsuleUIEvent:FireClient(player)
end
end
end
local function SetTimer()
capsuleValues:SetAttribute("Timer", timer)
task.wait(1)
repeat
if #capsuleHost ~= 1 then
capsuleValues:SetAttribute("Timer", timer)
return
elseif #capsuleHost == 1 then
capsuleValues:SetAttribute("Timer", capsuleValues:GetAttribute("Timer") - 1)
end
task.wait(1)
until capsuleValues:GetAttribute("Timer") == 0
print("Timer Ended")
--teleporting out if isnt ready
if capsuleValues:GetAttribute("Timer") == 0 then
if #capsuleHost == 1 then
teleportOutPlayer(capsuleHost[1])
else
for i = #playersInside, 1, -1 do
teleportOutPlayer(playersInside[i])
end
end
end
end
local function TeleportReadyCapsule(player, capsuleValue)
if capsuleValue == capsule then
if capsuleValues:GetAttribute("GameMode") == "" then return end
if capsuleValues:GetAttribute("GameModeSelected") == false then return end
if table.find(capsuleHost, player) then
if table.find(playersInside, player) then
teleportServiceModule.TeleportPlayerToPlace(player, playersInside, gamePlaceID)--//// Used to call a function that will teleport players into a private reserved server
capsuleValues:SetAttribute("GameMode", "")
capsuleValues:SetAttribute("GameModeSelected", false)
end
end
else
print("different capsule")
end
end
local function TeleportPlayer(hit)
if playerJoindDB == false then
playerJoindDB = true
local character = hit.Parent
if hit.Parent:FindFirstChild("Humanoid") then
local player = game.Players:GetPlayerFromCharacter(character)
local profile = profiles[player]
if table.find(playersInside, player) then
print("player already in")
playerJoindDB = false
return
end
print("Teleporting player inside")
print("GameMode = "..tostring(capsuleValues:GetAttribute("GameMode")))
if capsuleValues:GetAttribute("AmountOfPlayers") == maxAmountOfPlayers then
task.wait(0.5)
playerJoindDB = false
--/////GIVE UI ABOUT CAPSULE BEING FULL
return
end
if capsuleValues:GetAttribute("AmountOfPlayers") == 1 and capsuleValues:GetAttribute("GameModeSelected") == false then --///// Still selecting gamemode
print("Option 1")
task.wait(0.5)
playerJoindDB = false
return
end
----////
if capsuleValues:GetAttribute("AmountOfPlayers") >= 1 and capsuleValues:GetAttribute("GameModeSelected") == true then --/////// waiting for players to join
print("Option 2")
local result = teleportServiceModule.CheckWorldUnlocked(player, capsuleValues:GetAttribute("GameMode"))
print(result)
if result == true then
local playerProfile = profilesModule.Profiles[player]
if profile and capsuleValues:GetAttribute("GameMode") ~= nil then
profile.Data.SelectedChapter = capsuleValues:GetAttribute("GameMode")
character:MoveTo(teleportPosition.Position)
capsuleValues:SetAttribute("AmountOfPlayers", capsuleValues:GetAttribute("AmountOfPlayers") + 1)
table.insert(playersInside, player)
giveCapsuleUIEvent:FireClient(player, "Party", capsule, capsuleValues:GetAttribute("GameMode"))
end
end
end
----////
if capsuleValues:GetAttribute("AmountOfPlayers") == 0 and capsuleValues:GetAttribute("GameModeSelected") == false then--////////// Nobody inside yet
print("Option 3")
character:MoveTo(teleportPosition.Position)
capsuleValues:SetAttribute("AmountOfPlayers", capsuleValues:GetAttribute("AmountOfPlayers") + 1)
table.insert(playersInside, player)
table.insert(capsuleHost, player)
giveCapsuleUIEvent:FireClient(player, "Select", capsule, capsuleValues:GetAttribute("GameMode"))
task.spawn(SetTimer)
end
end
task.wait(0.25)
playerJoindDB = false
end
end
removePlayerEvent.OnServerEvent:Connect(teleportOutPlayer)
teleportPart.Touched:Connect(TeleportPlayer)
teleportCapsuleEvent.OnServerEvent:Connect(TeleportReadyCapsule)
game.Players.PlayerRemoving:Connect(function(player)
local playerIndex = table.find(playersInside, player)
local isHost = table.find(capsuleHost, player)
if isHost then
table.remove(playersInside, playerIndex)
capsuleValues:SetAttribute("AmountOfPlayers", capsuleValues:GetAttribute("AmountOfPlayers") - 1)
--//host part
for i = #playersInside, 1, -1 do
local playerInside = playersInside[i]
table.remove(playersInside, i)
capsuleValues:SetAttribute("AmountOfPlayers", capsuleValues:GetAttribute("AmountOfPlayers") - 1)
removeCapsuleUIEvent:FireClient(playerInside)
local playerInsideCharacter = playerInside.Character or playerInside.CharacterAdded:Wait()
if playerInsideCharacter then
playerInsideCharacter:MoveTo(teleportOutPosition.Position)
end
end
table.remove(capsuleHost, isHost)
capsuleValues:SetAttribute("GameMode", "")
capsuleValues:SetAttribute("GameModeSelected", false)
elseif playerIndex then
table.remove(playersInside, playerIndex)
capsuleValues:SetAttribute("AmountOfPlayers", capsuleValues:GetAttribute("AmountOfPlayers") - 1)
end
end)```