Ok so I have a serverScriptService script called "Data" and its meant to load your data right? heres the first version of it Version 1

local DataStore = game:GetService("DataStoreService"):GetDataStore("HahaisdeadSave39")
local replicatedStorage = game:GetService("ReplicatedStorage")
local saveRemote = replicatedStorage:WaitForChild("Save")



--creating data

game.Players.PlayerAdded:Connect(function(player)
	
	wait()
	
	local SpinSystem = player.PlayerGui:WaitForChild("SpinSystem")
	
	local folder = Instance.new("Folder", player)
	folder.Name = "Data"
	
	
	local hasgame = Instance.new("BoolValue", folder)
	hasgame.Name = "HasGame"
	
	local hair = Instance.new("StringValue", folder)
	hair.Name = "Hair"

	local outfit = Instance.new("StringValue", folder)
	outfit.Name = "Outfit"

	local accessory = Instance.new("StringValue", folder)
	accessory.Name = "Accessory"
	
	local Gender = Instance.new("StringValue", folder)
	Gender.Name = "Gender"
	
	local blood = Instance.new("StringValue", folder)
	blood.Name = "Blood"
	
	local spins = Instance.new("IntValue", folder)
	spins.Name = "Spins"
	
	
	
    --visibiliy of spin button variable
	

	

	------------------------------------------------------------------------------------------------------------------------SAME HERE
	
	
	local success, errormsg = pcall(function()
		local getData = DataStore:GetAsync(player.UserId)
		for i, v in pairs(getData) do
			if i == 1 then
				hasgame.Value = getData[i]
			elseif i == 2 then 
				hair.Value = getData[i]
			elseif i == 3 then
				outfit.Value = getData[i]
			elseif i == 4 then
				accessory.Value = getData[i]
			elseif i == 5 then
				blood.Value = getData[i]

			elseif i == 6 then
				spins.Value = getData[i]

			end
		end
	end)
	
	----------------------------------------------OR
	
	--local success, errormsg = pcall(function()
		--return DataStore:GetAsync(player.UserId)
	--end)
	
	----------------------------------------------------------------------------------------------
	
	if success then
		print("Successfully loaded "..player.Name.."'s data!")
	elseif not success then
		-- FIRST TIME JOINING --
		hasgame.Value = false
		print("hasgame has been changed to false")
		hair.Value = "Men Hair"
		print("hair value has been changed to men hair")
		outfit.Value = "Luffy's outfit"
		print("outfit has been changed to luffys outfit")
		accessory.Value = "Shades"
		print("accessory has been changed to shades")
		Gender.Value = "Male"
		print("gender has been changed to none")
		blood.Value = "Burgundy"
		print("blood has been set to burgundy")
		spins.Value = 8 
	
		
		
		error("Something went wrong while loading the data of "..player.Name..": "..errormsg)
	end
	
end)

saveRemote.OnServerEvent:Connect(function(player, val)
	DataStore:SetAsync(player.UserId, val)
	print("Successfully saved "..player.Name.."'s data!")
end)

Now this makes the GUI work perfectly fine except it doesnt load the data properly and therefore the data doesnt stay

my friend suggested that this part here was bad

local success, errormsg = pcall(function()
		local getData = DataStore:GetAsync(player.UserId)
		for i, v in pairs(getData) do
			if i == 1 then
				hasgame.Value = getData[i]
			elseif i == 2 then 
				hair.Value = getData[i]
			elseif i == 3 then
				outfit.Value = getData[i]
			elseif i == 4 then
				accessory.Value = getData[i]
			elseif i == 5 then
				blood.Value = getData[i]

			elseif i == 6 then
				spins.Value = getData[i]

			end
		end
	end)

so instead i was given this which did solve the problem and got rid of the error

local DataStore = game:GetService("DataStoreService"):GetDataStore("HahaisdeadSave39")
local replicatedStorage = game:GetService("ReplicatedStorage")
local saveRemote = replicatedStorage:WaitForChild("Save")



--creating data

game.Players.PlayerAdded:Connect(function(player)
	
	wait()
	
	local SpinSystem = player.PlayerGui:WaitForChild("SpinSystem")
	
	local folder = Instance.new("Folder", player)
	folder.Name = "Data"
	
	
	local hasgame = Instance.new("BoolValue", folder)
	hasgame.Name = "HasGame"
	
	local hair = Instance.new("StringValue", folder)
	hair.Name = "Hair"

	local outfit = Instance.new("StringValue", folder)
	outfit.Name = "Outfit"

	local accessory = Instance.new("StringValue", folder)
	accessory.Name = "Accessory"
	
	local Gender = Instance.new("StringValue", folder)
	Gender.Name = "Gender"
	
	local blood = Instance.new("StringValue", folder)
	blood.Name = "Blood"
	
	local spins = Instance.new("IntValue", folder)
	spins.Name = "Spins"
	
	
	
    --visibiliy of spin button variable
	

	

	------------------------------------------------------------------------------------------------------------------------SAME HERE
	
	

	
	----------------------------------------------OR
	
	local success, errormsg = pcall(function()
		--return DataStore:GetAsync(player.UserId)
	end)
	
	----------------------------------------------------------------------------------------------
	
	if success then
		print("Successfully loaded "..player.Name.."'s data!")
	elseif not success then
		-- FIRST TIME JOINING --
		hasgame.Value = false
		print("hasgame has been changed to false")
		hair.Value = "Men Hair"
		print("hair value has been changed to men hair")
		outfit.Value = "Luffy's outfit"
		print("outfit has been changed to luffys outfit")
		accessory.Value = "Shades"
		print("accessory has been changed to shades")
		Gender.Value = "Male"
		print("gender has been changed to none")
		blood.Value = "Burgundy"
		print("blood has been set to burgundy")
		spins.Value = 8 
	
		
		
		error("Something went wrong while loading the data of "..player.Name..": "..errormsg)
	end
	
end)

saveRemote.OnServerEvent:Connect(function(player, val)
	DataStore:SetAsync(player.UserId, val)
	print("Successfully saved "..player.Name.."'s data!")
end)

its this part right here that replaces the other part

local success, errormsg = pcall(function()
		--return DataStore:GetAsync(player.UserId)
	end)

This is version 2 now yeah it gets rid of the error but it doesnt make loading the data possible and since my GUI relies on data it doesnt work properly

I really dont know what other alternatives I can do

I wanna stick with version 1 because it actually makes the GUI work and load up the save