Script basically destroys the game

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)```

sounds similar to an issue i was having

1 Like