Teleport Pads (Warp Pad) system having slight problems with player distance

I’m trying to create a warp pad system and it works correctly. I’m trying to get the warp pad that the player is standing on but instead it get’s ALL the warp pads instead of the warp pad where the player is standing. Can anyone tell me why? If you need more information just ask!

Recording:
https://www.xbox.com/play/media/DYAS7X5JD5
(Wait a little it may need to load)

Local Script:

local Player = game.Players.LocalPlayer
local PlayerGui = Player.PlayerGui
local WarpGui = PlayerGui.WarpGui
local TweenService = game:GetService("TweenService")
local WarpPads = game.Workspace.WarpPads
local Buttons = WarpGui.Frame
local GameFolder = game.ReplicatedStorage.GameFolder
local Events = GameFolder.Events
local WarpActive = WarpPads.WarpsActive






for i,WarpButtons in pairs(Buttons:GetChildren()) do
	for i,Warps in pairs(WarpPads:GetChildren()) do
		for i,Warps2 in pairs(WarpPads:GetChildren()) do
		if WarpButtons:IsA("TextButton") and Warps:IsA("UnionOperation") and Warps2:IsA("UnionOperation") and Player:DistanceFromCharacter(Warps2.Position)<1 then
			WarpButtons.MouseButton1Down:Connect(function()
				if WarpButtons.Name == Warps.Name and WarpButtons.Name then
					WarpGui.Enabled = false
						Events.Warp:FireServer(Warps,Warps2)
						print(Warps2,Warps)
					end
				end)
			end
		end
	end
end


function Open(P)
	if P == Player.Character.LeftFoot then
		WarpGui.Enabled = true
	end
end

function Close(P)
	if P == Player.Character.LeftFoot then
		WarpGui.Enabled = false
	end
end


for i, Pads in pairs(WarpPads:GetChildren()) do
	if  Pads.Name == "GuiPart" then
		Pads.Touched:Connect(Open)
	end
end


for i, Pads in pairs(WarpPads:GetChildren()) do
	if Pads.Name == "GuiPart" then
		Pads.TouchEnded:Connect(Close)
	end
end

script.Parent.Close.MouseButton1Down:Connect(function()
	PlayerGui.WarpGui.Enabled = false
end)

The problem is the line that says “Player:DistanceFromCharacter” is getting every warp pad which is what the problem is but I can’t seem to figure how I can make it get the warp pad that the player is standing on

Try using a function that runs for the localPlayer that will set an active instance variable whenever the localPlayer stands on a warp pad, something like this:

local StandingWarp = nil
local debounce = false

Player.Touched:Connect(function(other)
	if debounce == true then
		return -- this stops the function if debounce is true
	end
	debounce = true
	if other:IsA("UnionOperation") and other.Parent = WarpPads then
		StandingWarp = other
	else
		StandingWarp = nil
	end
	wait(0.1) -- or however long between the checks you want
	debounce = false
end)

Then get rid of the Player:DistanceFromCharacter(Warps2.Position)<1 in your if statement, and replace it with Warps2 == StandingWarp.