I am making a Donation Leaderboard in a Gui
I have a Script and a Script Module for the Gui
Script Code:
local MarketplaceService = game:GetService("MarketplaceService")
local DataStoreService = game:GetService("DataStoreService")
local DSLB = DataStoreService:GetOrderedDataStore("BoardgameDonationData")
local PurchaseRemote = Instance.new("RemoteEvent", game:GetService("ReplicatedStorage"))
PurchaseRemote.Name = "Purchase"
local UpdateLeaderboard = Instance.new("RemoteEvent", game:GetService("ReplicatedStorage"))
UpdateLeaderboard.Name = "UpdateLeaderboard"
local Template = script.Template
local DevProductsIDs = require(script.DevProductsIDs)
local IDs = DevProductsIDs.IDs
local Config = {
WaitToLoad = 3,
AmountOfPlayers = 15,
ShowUserThumbnail = true
}
function ProcessReceipt(receiptInfo)
DSLB:IncrementAsync(receiptInfo.PlayerId, receiptInfo.CurrencySpent)
return Enum.ProductPurchaseDecision.PurchaseGranted
end
MarketplaceService.ProcessReceipt = ProcessReceipt
PurchaseRemote.OnServerEvent:Connect(function(Player, nothing, ID)
warn(Player)
warn(ID)
MarketplaceService:PromptProductPurchase(Player, ID)
end)
local function ReLoad(Player)
if Player then
print(Player)
local Data = DSLB:GetSortedAsync(false, Config.AmountOfPlayers)
UpdateLeaderboard:FireClient(Player, Data)
end
end
game:GetService("Players").PlayerAdded:Connect(function(Player)
while task.wait(0) do
task.wait(Config.WaitToLoad)
ReLoad(Player)
end
end)
Module code:
local DonationLeaderboard = {}
local MarketplaceService = game:GetService("MarketplaceService")
local PurchaseRemote = game:GetService("ReplicatedStorage"):WaitForChild("Purchase")
local UpdateLeaderboard = game:GetService("ReplicatedStorage"):WaitForChild("UpdateLeaderboard")
local Config = {
WaitToLoad = 15,
AmountOfPlayers = 15,
ShowUserThumbnail = true
}
local Template = script.Template
function DonationLeaderboard.LoadBoard(MainScreenGui)
if MainScreenGui:IsA("ScreenGui") then
local Player = game.Players.LocalPlayer
local ShopFrame = MainScreenGui.ShopFrame
local DonationsFrame = ShopFrame.DonationsFrame
local DonationLeaderboard = DonationsFrame.DonationLeaderboard
UpdateLeaderboard.OnClientEvent:Connect(function(Player, Data)
warn(Data)
local WinPage = Data:GetCurrentPage()
for Rank, data in ipairs(WinPage) do
local userName = game.Players:GetNameFromUserIdAsync(data.key)
local Name = userName
local amount = data.value
local isOnLeaderboard = false
if amount > 0 and isOnLeaderboard == false then
local TemplateClone = Template:Clone()
TemplateClone.PlayerName.Text = Name
TemplateClone.RobuxDonated.Text = coroutine.wrap(NumberConvert)(amount)
TemplateClone.LayoutOrder = Rank
TemplateClone.Name = Name
TemplateClone.Parent = DonationLeaderboard
if Config.ShowUserThumbnail.Value then
TemplateClone.PlayerImage.Image = game.Players:GetUserThumbnailAsync(data.key, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420)
else
TemplateClone.PlayerImage:Destroy()
end
local color = nil
end
end
end)
end
end
return DonationLeaderboard
When I Fire the client in the script I put the DataStore but it shows an error
local function ReLoad(Player)
if Player then
print(Player)
local Data = DSLB:GetSortedAsync(false, Config.AmountOfPlayers)
UpdateLeaderboard:FireClient(Player, Data)
end
end
How can i fix it?