I am aiming to create a system that adds points to a player every 3 minutes and then saves those points onto a datastore. I have a version that works but that version breaks things such as the rank leaderboard and it gives points to everyone instead of only people in a group that have a certain rank.
I will show the current code that I have bellow:
In server script service, adds the points to the player
function onClicked() local p = game.Players:GetChildren() for i = 1, #p do p[i].Character:MoveTo(Vector3.new(220.583, 17.119, -124.123)) end end script.Parent.ClickDetector.MouseClick:Connect(onClicked)
In server script service, is responsible for the database and auto saves
local DataStoreService = game:GetService("DataStoreService") local PointSave = DataStoreService:GetDataStore("PointSave") game.Players.PlayerAdded:Connect(function(player) local leaderstats = Instance.new("Folder") leaderstats.Name = "leaderstats" leaderstats.Parent = player local points = Instance.new("IntValue") points.Name = "Points" points.Parent = leaderstats local data local success, errormessage = pcall(function() data = PointSave:GetAsync(player.UserId) end) if success then points.Value = data else print("There was an error whilst loading your points.") warn(errormessage) end end) game.Players.PlayerRemoving:Connect(function(player) local success, errormessage = pcall(function() PointSave:SetAsync(player.UserId,player.leaderstats.Points.Value) end) if success then print("Points saved!") else print("Points were not saved due to an error.") warn(errormessage) end end)
In starter player scripts, not exactly sure what this does, I think it fires the event to add points
local groupID = 5243394 local rank = 152 local player = game.Players.LocalPlayer if player:GetRankInGroup(groupID) < rank then script:Destroy() end local remoteEvent = game:GetService("ReplicatedStorage"):WaitForChild("PointsEvent") while true do wait(15) remoteEvent:Fire() end
Thanks in advance for your help.