I’ve been working on a small event, and I wanted to create a different code for everyone that joins, but I came across an issue: Everyone that joins the same server gets the same code.
here is the top part of my code:
Code
local Datastoreservice = game:GetService(“DataStoreService”)
local Datastore = Datastoreservice:GetDataStore(“12”)
local ServerUserData = {}
local StatsDictionary = {
UserCode = nil;
HasKey = false
}
game.Players.PlayerAdded:Connect(function(plr)
game.Workspace:WaitForChild(plr.Name):WaitForChild("HumanoidRootPart")
local userdata = Datastore:GetAsync(plr.UserId)or StatsDictionary
if userdata.UserCode == nil then
userdata.UserCode = math.random(1000,9999)
end
(Let me know if you need more code, but the following code is just sending data to the client via remotes so I don’t think it is necessary.)
Basically, I wanna know if theres a way to make it so once a player joins, he/she gets a unique 4 digit code not shared by anyone.
I don’t think that would be a decent way of getting a 4-digit code. With the code provided, I need a way so that every time a player joins , the
math.random(1000,9999)
function doesnt give that same randomized number the the next player that joins the game, and if I were to add a lot of modules, i feel like it would lag the game a bit.
Your table at the top of the script is only evaluated once, which means every player is getting the same data table when they don’t already have one. To create a new version every time, you can wrap it in a function or move it into your or expression.
Solution one:
local function NewStatsDict()
return {
-- your stuff here
}
end
-- later on
local userdata = blah or NewStatsDict()
Solution two:
local userdata = blah or {
-- your stuff here
}
Both of these ensure you evaluate a new table every time.
Awesome that works! was a bit skeptical at first since I gave everyone the same dictionary at the start then changed them later on in the script but this is a good solution!