Any reason why my script would only work for me not others?

So my shop opens up fine for me and fine inside studio but ill play it on roblox with my test account and it doesnt load. Doesnt even attempt to load by my output. But when i play and open it ill get the output telling me its working. Im literally confused on why its doing this. Heres my shop script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local swords = require(ReplicatedStorage:WaitForChild("SwordShop"))
local player = game:GetService("Players").LocalPlayer
local getDataFunc = ReplicatedStorage:WaitForChild("GetData2")
local interactItemFunc = ReplicatedStorage:WaitForChild("InteractItem2")
local gui = script.Parent
local exit = gui.GuiShop.Button
local points = gui.GuiShop.PT.Points
local limit = gui.GuiShop.PT.Limit
local itemsFrame = gui.GuiShop.TowerShop2.ItemsFrame

local playerData = {}

local function getItemStatus2(itemName2)
	print(playerData)
	if table.find(playerData.SelectedSword, itemName2) then
		return "Equipped"
	elseif table.find(playerData.OwnedSwords, itemName2) then
		return "Owned"
	else
		return "For Sale"
	end
	
end

print(playerData)
local function interactItem2(itemName2)
	local data = interactItemFunc:InvokeServer(itemName2)
	if data then
		playerData = data
		updateItems()
	end
end
function updateItems()
	print("starting to create items")
	points.Text = "Points : " .. playerData.Points
	limit.Text = #playerData.SelectedSword .. "Sword Equipped"
	for i, sword in(swords) do
		
		local oldButton = gui.GuiShop.TowerShop2:FindFirstChild(sword.Name)
		if oldButton then
			oldButton:Destroy()
		end
		local newButton = itemsFrame:Clone()
		newButton.Name = sword.Name
		newButton.TowerName.Text = sword.Name
		print("creating items")
		newButton.Price.Text = sword.Price .. " Points"
		newButton.Image.Image = sword.ImageAsset
		newButton.Desc.Text = sword.Description
		newButton.Type.Text = sword.Type
		newButton.Visible = sword.Visible
		newButton.LayoutOrder = sword.Price
		newButton.Parent = gui.GuiShop.TowerShop2
		
		local status = getItemStatus2(sword.Name)
		if status == "For Sale" then
			newButton.Status.Text = "PURCHASE"
		elseif status == "Equipped" then
			newButton.Status.Text = "EQUIPPED"
			newButton.Price.Visible = false
			newButton.PriceLabel.Visible = false
		else 
			newButton.Status.Text = "EQUIP"
			newButton.Price.Visible = false
			newButton.PriceLabel.Visible = false
		end
		newButton.Status.Activated:Connect(function()
			interactItem2(sword.Name)
		end)
	
	end
end

local function toggleShop()
	gui.GuiShop.Visible = not gui.GuiShop.Visible
	if gui.GuiShop.Visible then
		playerData = getDataFunc:InvokeServer()
		updateItems()	
	end
end

local function setupShop()

	local prompt = Instance.new("ProximityPrompt")
	prompt.RequiresLineOfSight = false
	prompt.ActionText = "Shop"
	prompt.Parent = workspace:WaitForChild("ShopPart2")
	
	prompt.Triggered:Connect(toggleShop)
	exit.Activated:Connect(toggleShop)
end

setupShop()``