How do i use this part of collection service?

I used collection service to make it so when obstacles are touched, it damages the player, but when i use a script to load it in the game as one of the maps, the collection service script stops working and they dont damage the player, this is the script i use to load in randomised maps

local LobbyMinutes = 0
local LobbySeconds = 1

local GameMinutes = 4
local GameSeconds = 30

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local coinEvent = game:GetService("ServerStorage"):FindFirstChild("CoinEvent")
local multEvent = game:GetService("ServerStorage"):FindFirstChild("MultEvent")
local deletecoinsevent = game:GetService("ServerStorage"):FindFirstChild("DeleteCoinsEvent")
local deletemultsevent = game:GetService("ServerStorage"):FindFirstChild("DeleteMultEvent")
local TimerValues = ReplicatedStorage:WaitForChild("TimerValues")
local gameTimer = TimerValues.GameTimer
local lobbyTimer = TimerValues.LobbyTimer
local finishline = script.Parent -- Change this
local placements = {}
local enableevent = ReplicatedStorage.Remotes.PEnableEvent
local disableevent = ReplicatedStorage.Remotes.PDisableEvent
local placeevent = game.ReplicatedStorage.Remotes.PlacementEvent
local Players = game:GetService("Players")

local TweenService = game:GetService("TweenService")
local FadeInfo = TweenInfo.new(1.3,Enum.EasingStyle.Linear,Enum.EasingDirection.Out,0,false,0)

function teleportPlayers(RP,SpawnPart)
	if RP ~= nil then
		if SpawnPart ~= nil then
			RP.CFrame = SpawnPart.CFrame
		end
	end
end


game.ReplicatedStorage:FindFirstChild("Remotes"):FindFirstChild("GetPoints").OnServerEvent:Connect(function(Player,Point)
	local PlayerPoint = Player:FindFirstChild("Points")
	if PlayerPoint ~= nil then
		PlayerPoint.Value = Point
	end
end)


while true do
	lobbyTimer.Minutes.Value = LobbyMinutes
	lobbyTimer.Seconds.Value = LobbySeconds

	repeat wait(1)
		if lobbyTimer.Seconds.Value > 0 then
			lobbyTimer.Seconds.Value -= 1
		else
			if lobbyTimer.Minutes.Value > 0 then
				lobbyTimer.Minutes.Value -= 1
				lobbyTimer.Seconds.Value = 59
			end
		end
	until lobbyTimer.Minutes.Value == 0 and lobbyTimer.Seconds.Value == 0
	
	local MapstoCoins = {
		["SnowMap1"] = "CoinSpawnSnow",
		["DesertMap1"] = "CoinSpawnDesert",
		["BeachMap1"] = "CoinSpawnBeach"
	}
	local MapstoLobby = {
		["SnowMap1"] = "SnowLobby",
		["DesertMap1"] = "DesertLobby",
		["BeachMap1"] = "BeachLobby"
	}
	local MapstoMult = {
		["DesertMap1"] = "MultSpawnDesert",
		["SnowMap1"] = "MultSpawnSnow",
		["BeachMap1"] = "MultSpawnBeach"
	}

	local mapHolder = game:GetService("ServerStorage").MapHolder
	local coinsHolder = game:GetService("ServerStorage").CoinsHolder
	local lobbyHolder = game:GetService("ServerStorage").LobbyHolder
	local multHolder = game:GetService("ServerStorage").MultHolder
	local Children = mapHolder:GetChildren()
	local CoinChildren = coinsHolder:GetChildren()
	local LobChildren = lobbyHolder:GetChildren()
	local MultChildren = multHolder:GetChildren()
	local Index = math.random(1,#Children)
	local randomInt = Children[Index]

	local finalMap = mapHolder:FindFirstChild(randomInt.Name):Clone()  
	for _,coinmaps in pairs(CoinChildren) do
		if coinmaps.Name == MapstoCoins[randomInt.Name] then
			local finalcoinMap = coinmaps:Clone()
			for _,lobmaps in pairs(LobChildren) do
				if lobmaps.Name == MapstoLobby[randomInt.Name] then
					local finalobby = lobmaps:Clone()
					for _,multmap in pairs(MultChildren) do
						if multmap.Name == MapstoMult[randomInt.Name] then
							local finalmultMap = multmap:Clone()
	finalcoinMap.Parent = workspace.ChosenCoinMap
	finalmultMap.Parent = workspace.ChosenMultMap
	finalobby.Parent = workspace
	coinEvent:Fire(coinmaps)
	multEvent:Fire(multmap)
	print("coineventfired")
	finalMap.Parent = workspace
	

	for _, LocalPlayer in pairs(game:GetService("Players"):GetChildren()) do
		if LocalPlayer.Character then
			if LocalPlayer:FindFirstChild('PlayerGui') and LocalPlayer.Character:FindFirstChild('HumanoidRootPart') then
				local GUI = Instance.new("ScreenGui")
				GUI.Name = "Fade"
				GUI.Parent = LocalPlayer.PlayerGui
				GUI.ResetOnSpawn = false
				GUI.IgnoreGuiInset = true
				GUI.Enabled = true

				local NewValue = Instance.new("BoolValue")
				NewValue.Name = "Ingame"
				NewValue.Parent = LocalPlayer.Character
				NewValue.Value = false

				local Frame = Instance.new("Frame")
				Frame.Parent = GUI 
				Frame.BackgroundTransparency = 1
				Frame.BackgroundColor3 = Color3.fromRGB(0,0,0)
				Frame.Visible = true
				Frame.Size = UDim2.new(1,0,1,0)
				Frame.Position = UDim2.new(0,0,0,0)
				-- goes to riderhandler
		enableevent:FireClient(LocalPlayer)
				

				local TweenIn = TweenService:Create(Frame,FadeInfo,{BackgroundTransparency = 0})
				TweenIn:Play()

				TweenIn.Completed:Connect(function()
					teleportPlayers(LocalPlayer.Character.HumanoidRootPart,finalMap:FindFirstChild('SpawnPart'))
					wait(2)
					local TweenOut = TweenService:Create(Frame,FadeInfo,{BackgroundTransparency = 1})
					TweenOut:Play()

					TweenOut.Completed:Connect(function()
						GUI:Destroy()
					end)
				end)
			end
		end
	end

	wait(1.6 + 2)

	gameTimer.Minutes.Value = GameMinutes
	gameTimer.Seconds.Value = GameSeconds

	repeat wait(1)
		if gameTimer.Seconds.Value > 0 then
			gameTimer.Seconds.Value -= 1
		else
			if gameTimer.Minutes.Value > 0 then
				gameTimer.Minutes.Value -= 1
				gameTimer.Seconds.Value = 59
			end
		end
	until gameTimer.Minutes.Value == 0 and gameTimer.Seconds.Value == 0

	for _, LocalPlayer in pairs(game:GetService("Players"):GetChildren()) do
		if LocalPlayer.Character then
			if LocalPlayer:FindFirstChild('PlayerGui') and LocalPlayer.Character:FindFirstChild('Ingame') then
				local GUI = Instance.new("ScreenGui")
				GUI.Name = "Fade"
				GUI.Parent = LocalPlayer.PlayerGui
				GUI.ResetOnSpawn = false
				GUI.IgnoreGuiInset = true
				GUI.Enabled = true

				local Frame = Instance.new("Frame")
				Frame.Parent = GUI 
				Frame.BackgroundTransparency = 1
				Frame.BackgroundColor3 = Color3.fromRGB(0,0,0)
				Frame.Visible = true
				Frame.Size = UDim2.new(1,0,1,0)
				Frame.Position = UDim2.new(0,0,0,0)

				local TweenIn = TweenService:Create(Frame,FadeInfo,{BackgroundTransparency = 0})
				TweenIn:Play()

				TweenIn.Completed:Connect(function()
					LocalPlayer:LoadCharacter()
					teleportPlayers(LocalPlayer.Character.HumanoidRootPart,game.Workspace.GameEndSpawn)
					wait(2)
					local TweenOut = TweenService:Create(Frame,FadeInfo,{BackgroundTransparency = 1})
					TweenOut:Play()

					TweenOut.Completed:Connect(function()
						GUI:Destroy()
												
					
					end)
				end)
			end
		end
	end
	
	
	game.ReplicatedStorage:FindFirstChild("Remotes"):FindFirstChild("GetPoints"):FireAllClients()
	
	task.wait(2.5)
	
	local placements = {}
	for i,plr in pairs(game.Players:GetPlayers()) do
		table.insert(placements,{['Player'] = plr,['Points'] = plr.Points.Value})
	end
	
	table.sort(placements,function(a,b)
		return a.Points > b.Points
	end)
							placeevent:FireAllClients({placements[1],placements[2],placements[3],placements[4],placements[5],placements[6],placements[7],placements[8],placements[9],placements[10],placements[11],placements[12],placements[13],placements[14],placements[15],placements[16],placements[17],placements[18],placements[19],placements[20]})
	
	for _,GetPl in pairs(Players:GetPlayers()) do
		--goes to riderhandler
		disableevent:FireClient(GetPl)
		GetPl.Points.Value = 0
		GetPl.PointMultiply.Value = 0
	end
	wait(1.6)
	deletecoinsevent:Fire()
	deletemultsevent:Fire()
	finalMap:Destroy()
	finalcoinMap:Destroy()
	finalobby:Destroy()
	finalmultMap:Destroy()
	wait(3)
						end
						end
		end
	end
		end
	end
	end

the maps are all models with folders inside for each of its parts, one of the folders in where the obstacles are

does anyone know why its happening?

Can you show the script that uses CollectionService?

Screenshot 2024-10-31 080242

When does this script run? When the game starts? Or when the map gets inserted into the Workspace?

When the server starts for the first time

Okay, so I think what is happening is that the parts that you cloned despite being tagged are not processed by your script. This is because you only process tagged objects on game start, when you clone the part, it doesn’t get processed.

local CollectionService = game:GetService("CollectionService")
local Workspace = game:GetService("Workspace")

local PartA = Instance.new("Folder")
PartA.Name = "PartA"
PartA:AddTag("Folder")
PartA.Parent = Workspace

print(CollectionService:GetTagged("Folder"))

local PartB = Instance.fromExisting(PartA)
PartB.Name = "PartB"
PartB.Parent = Workspace

-- Part B wasn't processed in your script because when it ran, only PartA existed at the time

RobloxStudioBeta_SYHaQcBcAs

To process parts that are added later, you will need to use GetInstanceAddedSignal method to listen for new objects.

local CollectionService = game:GetService("CollectionService")
local Workspace = game:GetService("Workspace")

local PartA = Instance.new("Folder")
PartA.Name = "PartA"
PartA:AddTag("Folder")
PartA.Parent = Workspace

CollectionService:GetInstanceAddedSignal("Folder"):Connect(function(v)
	print("Added", v)
end)

print(CollectionService:GetTagged("Folder"))

local PartB = Instance.fromExisting(PartA)
PartB.Name = "PartB"
PartB.Parent = Workspace

RobloxStudioBeta_MxoOcSoLiP

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.