Error
Attempt to call a nil value
Code
local ModulesFolder = script.Parent:WaitForChild('Modules')
local ObjectTable = require(ModulesFolder:WaitForChild('ObjectTable'))
local ProfileService = require(ModulesFolder:WaitForChild('ProfileService'))
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local FolderName = 'stats'
local FolderName2 = 'Knives'
local GameProfileStore = ProfileService.GetProfileStore('Data3', {
stats = {
coins = 1,
kills = 1,
},
Knives = {},
CurrentKnife = "Default",
})
-----------------------------------
local Players = game:GetService('Players')
local ProfileCache = {}
local function OnJoinHandler(player, profile)
do
local DataFolder = Instance.new('Folder')
DataFolder.Name = FolderName
ObjectTable.TableToObject(profile.Data.stats, DataFolder)
DataFolder.Parent = player
end
do
local DataFolder = Instance.new('Folder')
DataFolder.Name = FolderName2
ObjectTable.TableToObject(profile.Data.Knives, DataFolder)
DataFolder.Parent = player
for _, v in ipairs(game.ReplicatedStorage.Knives:GetChildren()) do
if not profile.Data.Knives:FindFirstChild(v.Name) then
local newKnife = Instance.new("NumberValue")
newKnife.Name = v.Name
newKnife.Parent = DataFolder
else
print("knife already got")
end
end
end
local function CharacterAdded(Character)
if Character then
warn('Character Spawned : ', Character.Name)
end
end
coroutine.wrap(CharacterAdded)(player.Character)
player.CharacterAdded:Connect(CharacterAdded)
end
local function PlayerAdded(LocalPlayer)
local savedProfile = GameProfileStore:LoadProfileAsync('ID_'..LocalPlayer.UserId, "ForceLoad")
if savedProfile then
savedProfile:Reconcile()
savedProfile:ListenToRelease(function()
ProfileCache[LocalPlayer] = nil
LocalPlayer:Kick('Rejoin, still saving from another server.')
end)
if LocalPlayer:IsDescendantOf(Players) == true then
ProfileCache[LocalPlayer] = savedProfile
print(savedProfile.Data)
OnJoinHandler(LocalPlayer, savedProfile)
else
savedProfile:Release()
end
else
LocalPlayer:Kick('Could not load data. ', os.date('%X %x', os.time()))
end
end
for _, player in pairs(Players:GetPlayers()) do
coroutine.wrap(PlayerAdded)(player)
end
Players.PlayerAdded:Connect(PlayerAdded)
Players.PlayerRemoving:Connect(function(LocalPlayer)
local loadedProfile = ProfileCache[LocalPlayer]
if loadedProfile ~= nil then
local Overwrite = {}
local Overwrite2 = {}
for k, v in pairs(ObjectTable.ObjectToTable(LocalPlayer[FolderName])) do
loadedProfile.Data[k] = v
Overwrite[k] = v
end
for k, v in pairs(ObjectTable.ObjectToTable(LocalPlayer[FolderName2])) do
loadedProfile.Data[k] = v
Overwrite[k] = v
end
print(Overwrite)
print(Overwrite2)
loadedProfile:Release()
end
end)
I believe it is because the profile is nil but it shouldn’t be, before the profile is printed and it works fine.