Issues with Daily Login Streaks Script, which doesn’t let the Player claim the rewards

Hi there! I’m currently making a Daily Login Streak System for my upcoming game, which gives you different rewards each day. But while scripting, I’ve encountered an issue which straight up doesn’t let players claim the Daily Rewards, due to there being an error in the last line, “end”, which says “Expected ‘)’ to close ‘(‘ at line 55), got ‘end’

I’ve tried everything I can so far, since I’m a begginer in Scripting, the script and an image will be below this text. If you have any solution or need more info please tell me!


local DailyRewards = game:GetService("DataStoreService"):GetDataStore("DailyRewards")
function AddItem(Player, ItemType, Item)
	local PlayerDataTable = require(game.ServerStorage.Data.Datas):GetData(Player)

game.Players.PlayerAdded:Connect(function(Player)
	if DailyRewards:GetAsync(Player.UserId) then else 
		DailyRewards:SetAsync(Player.UserId, {
			CurrentDay = 1,
			Day = tonumber(os.date("%d")),
			Collected = false,
			CanCollect = true,
		})
		return
	end
	
	local PlayerData = DailyRewards:GetAsync(Player.UserId)
	
	if PlayerData.Day == os.date("%d") then
		if PlayerData.Collected == false then
			PlayerData.CanCollect = true
		else 
			PlayerData.CanCollect = false
		end
	elseif PlayerData.Day == (tonumber(os.date("%d")) - 1) then
		if PlayerData.CurrentDay == 5 then
			PlayerData.CurrentDay = 1
			PlayerData.Collected = false
			PlayerData.CanCollect = true
		else 
			PlayerData.CurrentDay += 1
			PlayerData.Collected = false
			PlayerData.CanCollect = true
		end
	elseif (tonumber(os.date("%d")) - PlayerData.Day) >= 2 or (tonumber(os.date("%d")) - PlayerData.Day) <= -1 then
		PlayerData.CurrentDay = 1
		PlayerData.Collected = false
		PlayerData.CanCollect = true
	end
	
	DailyRewards:SetAsync(Player.UserId, PlayerData)
end)

game.ReplicatedStorage.GameEvents.DailyRewards.CanCollect.OnServerInvoke = function(Player)
	return DailyRewards:GetAsync(Player.UserId).CanCollect
end

game.ReplicatedStorage.GameEvents.DailyRewards.CurrentDay.OnServerInvoke = function(Player)
	return DailyRewards:GetAsync(Player.UserId).CurrentDay
end

game.ReplicatedStorage.GameEvents.DailyRewards.Collected.OnServerInvoke = function(Player)
	return DailyRewards:GetAsync(Player.UserId).Collected
end

game.ReplicatedStorage.GameEvents.DailyRewards.Collect.OnServerEvent:Connect(function(Player)
	local PlayerData = DailyRewards:GetAsync(Player.UserId)
	
	if PlayerData.Collected == false and PlayerData.CanCollect == true then
		PlayerData.Collected = true
		PlayerData.Day = tonumber(os.date("%d"))
		if PlayerData.CurrentDay == 1 then
			Player.Money.Value += 100
		end
		
		if PlayerData.CurrentDay == 2 then
			Player.Money.Value += 150
		end
		
		if PlayerData.CurrentDay == 3 then
			AddItem(Player, "Pet", "StarDog")
			game.ReplicatedStorage.PromptNewItem:FireClient(Player, "NEW PET!", "rbxassetid://PhotoID", "StarDog", "Common")

		if PlayerData.CurrentDay == 4 then
			Player.Money.Value += 250
		end
		
		if PlayerData.CurrentDay == 5 then
			AddItem(Player, "Pet", "StarCat")
			game.ReplicatedStorage.PromptNewItem:FireClient(Player, "NEW PET!", "rbxassetid://PhotoID", "StarCat", "Common")
		end
		
		DailyRewards:SetAsync(Player.UserId, PlayerData)
		end
	end
end
end

hey
at line 85 just simply put end) instead of end

1 Like

because RemoteEvent connections return an RBXScriptSignal

1 Like

Thank you so much, this solved the issue! :grin:

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.