yeah so uh this aint workin, it just plays the cant redeem sound, Twitter code script:

local DataStoreService = game:GetService("DataStoreService")

--[ CODES ]--

local TwitterCodes = {
	Welcome = {"Coins", 100}, -- Code 1
	Test = {"Coins", 10000}, -- Code 2
}

--[ FUNCTION ]--

game.ReplicatedStorage.RedeemCode.OnServerInvoke = function(Player, Code)
	
	local TwitterCodeStore = DataStoreService:GetDataStore("TwitterCodeStore".. Code) 
	local PlayerRedeemedCode = TwitterCodeStore:GetAsync(Player.UserId)
	
	if TwitterCodes[Code] and not PlayerRedeemedCode then -- Checking if its a code, and not redeemed yet.
		
		-- Redeems Code.
		local LeaderboardValueName = TwitterCodes[Code][1]
		local AmountToGivePlayer = TwitterCodes[Code][2]
		local LeaderboardValue = Player.leaderstats[LeaderboardValueName]
		
		LeaderboardValue.Value = LeaderboardValue.Value + AmountToGivePlayer
		
		TwitterCodeStore:SetAsync(Player.UserId, true) -- Settings Datastore to true.
		
		return true -- Tells client successfully redeemed.
	else
		-- Tells Player Can't Redeem.
		return false -- Tells client it was not redeemed.
	end
	
end

leaderstats script:

local DataStoreService = game:GetService("DataStoreService")

local playerData = DataStoreService:GetDataStore("PlayerData")

local function onPlayerJoin(Player)
	local leaderstats = Instance.new("Folder", Player)
	leaderstats.Name = "leaderstats"

	local val1 = Instance.new("StringValue",Player)
	val1.Name = 'GotPet'
	val1.Value = ''

	local val2 = Instance.new("StringValue",Player)
	val2.Name = 'OpenValue'
	val2.Value = ''

	local Gems = Instance.new("IntValue", leaderstats)
	Gems.Name = "Gems"
	Gems.Value = 0

	local Rebirths = Instance.new("IntValue", leaderstats)
	Rebirths.Name = "Rebirths"
	Rebirths.Value = 0

	local Coins = Instance.new("IntValue", leaderstats)
	Coins.Name = "Coins"
	Coins.Value = 0

	local playerUserId = "Player_" .. Player.UserId  --Gets player ID

	local Success, Result = pcall(function()
		return playerData:GetAsync(playerUserId)
	end)

	if Result then
		print("Data found!")

		Coins.Value = Result[1] -- // Since in the saving part, Coins are the one that is set as the first value of the table, we set Coins as [1]
		Rebirths.Value = Result[2]
		Gems.Value = Result[3]
	else
		print("DataStore working but No data found")
		warn(Result)
	end

end

local function onPlayerExit(player)  --Runs when players exit



	local success, Err = pcall(function()
		print("Data Saved successfully")

		local playerUserId = "Player_" .. player.UserId

		playerData:SetAsync(playerUserId, {player.leaderstats.Coins.Value, player.leaderstats.Rebirths.Value, player.leaderstats.Gems.Value}) -- Now set as a table instead of individually

	end)



	if not success then
		warn(Err)
		warn('Could not save data!')
	end
end

game.Players.PlayerAdded:Connect(onPlayerJoin)

game.Players.PlayerRemoving:Connect(onPlayerExit)