How can I make my trail script only effect the player who fires the event?

I am trying to make an infinite trail similar to the ones in paper io that disappear once you enter your territory and reappear when you leave your territory, however the code effects both player’s trails.

The code works perfectly fine when the game is played by one player, however whenever I test it with 2 or more players, when the ‘OnEnterEvent’ or ‘onLeaveEvent’ functions run, the other player’s trail will also reset or destroy. I have tried addressing the local Markers = {} at the start of the script and removing the Markers = {} inside of the onEnterEvent function, but that just makes the script even buggier. I have tried using ‘clickedPlayer’ so that it only effects the player who originally fires the events but nothing seems to be working.

I’m not sure how I could do this but I think connecting the player who fires the event with their own Markers table could make it so it only effects them. If you have any suggestions or potential fixes please post replying to this so I can try them out.

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

local event = game.ReplicatedStorage.Play
local event2 = game.ReplicatedStorage.PlayAfterStart
local leaveEvent = game.ReplicatedStorage.LeaveArea
local enterEvent = game.ReplicatedStorage.EnterArea

local REFRESH_RATE = 0 -- how often does it check the character's position
local RESOLUTION_DISTANCE = 1 -- how far does the character need to be from its last position to make a new point

Players.PlayerAdded:Connect(function(Player)
	local function DegreeBetweenVectors(a, b)
		return math.deg(math.acos(math.clamp(a.Unit:Dot(b.Unit), -1, 1)))
	end

	local function MakeMarker(Position, Markers, eventerPlayer)
		local Marker = Instance.new("Part")
		Marker.CanCollide = false
		Marker.CanQuery = false
		Marker.CanTouch = false
		Marker.Size = Vector3.new(0.1, 0.1, 0.1)
		Marker.Transparency = 1
		Marker.Anchored = true
		Marker.Position = Position / 2
		Marker.Parent = workspace:WaitForChild(eventerPlayer.Name .. "Trails") -- Replace 'Player' with 'Player.Name'
		local Attachment = Instance.new("Attachment")

		if #Markers > 1 then
			local previousMaker = Markers[#Markers]
			Attachment.CFrame = CFrame.lookAt(Marker.Position, previousMaker.Position)
			Attachment.Orientation = Attachment.Orientation + Vector3.new(0, 0, 90)
		end
		Attachment.Parent = Marker
		local LastAngle = 0

		if #Markers ~= 0 then
			local Beam = Instance.new("Beam")
			Beam.Attachment0 = Attachment
			Beam.Attachment1 = Markers[#Markers]:FindFirstChildOfClass("Attachment")
			Beam.Transparency = NumberSequence.new(0)
			Beam.Width0 = 1.3
			Beam.Width1 = 1.3
			Beam.Parent = Marker
			Beam.FaceCamera = false
			Beam.Color = ColorSequence.new(Color3.new(0.109804, 0.733333, 1))
			Beam.LightEmission = 0.01
			Beam.LightInfluence = 1
		end
		table.insert(Markers, Marker)
	end

	local function onLeaveEvent(clickedPlayer)
		local Character = clickedPlayer.Character or clickedPlayer.CharacterAdded:Wait()
		local Teams = game:GetService("Teams")
		local defaultColour = Color3.new(clickedPlayer.Team)
		local ColourMarkerColour = (clickedPlayer.Team and clickedPlayer.Team.TeamColor or defaultColour)

		local physicalPlayer = workspace:WaitForChild(clickedPlayer.Name)
		local cube = physicalPlayer:WaitForChild("Cube")
		cube.BrickColor = ColourMarkerColour
		local part = cube:WaitForChild("Part")

		local Markers = {}
		local LastAngle = 0
		local TrailActive = true
		local CharacterRemoving = false

		local function onEnterEvent()
			local markerToDestroy = workspace:WaitForChild(clickedPlayer.Name .. "Trails"):GetChildren()
			TrailActive = false
			for _, markerDes in ipairs(markerToDestroy) do
				print("removing trail")
				markerDes:Destroy()
				cube:WaitForChild("Trail").Lifetime = 0
			end
			Markers = {}
		end

		local function onReEnterEvent(leaveEventPlayer)
			TrailActive = true
			local workspaceleaveEventPlayer = game.Workspace:WaitForChild(leaveEventPlayer.Name)
			
			workspaceleaveEventPlayer.Cube:WaitForChild("Trail").Lifetime = 0.5
			local PreviousTime = os.time()

			local heartBeatConnection;
			heartBeatConnection = game:GetService("RunService").Heartbeat:Connect(function()
				if CharacterRemoving or not TrailActive then
					heartBeatConnection:Disconnect()
				end
				if PreviousTime + REFRESH_RATE < os.time() and TrailActive then
					if Character then
						local ConsideredPosition = part.Position
						if #Markers == 0 or (ConsideredPosition - Markers[#Markers].Position).Magnitude >= RESOLUTION_DISTANCE then
							local PreviousMarker = Markers[#Markers]
							if #Markers >= 2 then
								local DegreesBetween = DegreeBetweenVectors(ConsideredPosition - PreviousMarker.Position, PreviousMarker.Position - Markers[#Markers - 1].Position)
								if DegreesBetween < 3 and LastAngle < 3 then
									LastAngle = LastAngle + DegreesBetween
									return
								end
							end
							MakeMarker(ConsideredPosition, Markers, workspaceleaveEventPlayer)
						end
					end
				end
			end)
		end

		enterEvent.Event:Connect(function(enterEventPlayer)
			onEnterEvent(enterEventPlayer)
		end)
		
		leaveEvent.Event:Connect(function(leaveEventPlayer)
			onReEnterEvent(leaveEventPlayer)
		end)

		Player.CharacterRemoving:Connect(function()
			CharacterRemoving = true
			onEnterEvent()
		end)
	end

	event.Event:Connect(function(clickedPlayer)
		onLeaveEvent(clickedPlayer)
	end)

	event2.OnServerEvent:Connect(function(clickedPlayer)
		onLeaveEvent(clickedPlayer)
	end)
end)