-
What do you want to achieve? Keep it simple and clear!
So topic explains everything -
What is the issue? Include screenshots / videos if possible!
When i’m trying to print my data in second place it says nil, but in main place it exists(one universe) -
What solutions have you tried so far? Did you look for solutions on the Developer Hub?
i looked in Internet and it says it should carry between places instantly, but for some reason it is not
DS code on main:
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local PlayerData = DataStoreService:GetDataStore("PlayerData")
local SyncData = workspace.Events.Data.SyncData
local BadgeService = game:GetService("BadgeService")
local InfiniteMath = require(game:GetService("ReplicatedStorage").InfiniteMath)
local function LoadData(player)
local success, result = pcall(function()
print("Data Loading...")
return PlayerData:GetAsync(player.UserId)
end)
if not success then
warn("LOADING DATASTORE ERROR, PLEASE FIX IT")
end
return success, result
end
local function SaveData(player, data)
local success, result = pcall(function()
print("Data Saving...")
PlayerData:SetAsync(player.UserId, data)
end)
if not success then
warn("SAVING DATASTORE ERROR, PLEASE FIX IT")
end
return success
end
local sessionData = {}
local playerAdded = Instance.new("BindableEvent")
local playerRemoving = Instance.new("BindableEvent")
local PlayerManager = {}
PlayerManager.PlayerAdded = playerAdded.Event
PlayerManager.PlayerRemoving = playerRemoving.Event
function PlayerManager.Start()
for _,player in ipairs(Players:GetPlayers()) do
coroutine.wrap(PlayerManager.OnPlayerAdded)(player)
end
Players.PlayerAdded:Connect(PlayerManager.OnPlayerAdded)
Players.PlayerRemoving:Connect(PlayerManager.OnPlayerRemoving)
game:BindToClose(PlayerManager.OnClose)
end
function PlayerManager.OnPlayerAdded(player)
player.CharacterAdded:Connect(function(character)
PlayerManager.OnCharacterAdded(player, character)
end)
local success, data = LoadData(player)
sessionData[player.UserId] = success and data or {
Voidonomicon = {
["Owned"] = false,
Catalysators = {
["ShinyPhoton"] = {
["Owned"] = false
},
}
},
Values = {
["Photons"] = {Current = InfiniteMath.new(0), Max = InfiniteMath.new(0), Cap = InfiniteMath.new(320), BaseGain = InfiniteMath.new(1)}
},
Upgrades = {
PhotonUpgrades = {
["Gain"] = {Cap = 50, CurrLevel = 0},
["Cap"] = {Cap = 5, CurrLevel = 0},
["Cooldown"] = {Cap = 4, CurrLevel = 0},
["Currency"] = {Currency1 = "Photons"}
}
},
Unlockables = {
BrightnessLevel = {ifOwn = false, Price = InfiniteMath.new(320), Currency = "Photons", Cap = 1}
},
Milestones = {
BrightnessLevel = {["level"] = 0, Currency = "Photons"}
},
Buildings = {
PhotonUpgrades = false,
BrightnessLevel = false
},
StoryPart = "Beginning..."
}
SyncData:FireClient(player, sessionData[player.UserId])
BadgeService:AwardBadge(player.UserId, 2149359820)
playerAdded:Fire(player)
end
function PlayerManager.OnCharacterAdded(player, character)
local humanoid = character:FindFirstChild("Humanoid")
if humanoid then
humanoid.Died:Connect(function()
wait(1)
player:LoadCharacter()
end)
end
end
--GET FUNCTIONS
function PlayerManager.GetValue(player, value, parameter)
local val = sessionData[player.UserId]["Values"][value][parameter]
return val
end
function PlayerManager.GetStoryPart(player)
return sessionData[player.UserId]["StoryPart"]
end
function PlayerManager.GetBuildingInfo(player, buildingName)
return sessionData[player.UserId]["Buildings"][buildingName]
end
function PlayerManager.GetUpgrade(player, Type, upgradeName, parameter)
local val = sessionData[player.UserId]["Upgrades"][Type][upgradeName][parameter]
return val
end
function PlayerManager.GetMilestoneBoost(player, MilestoneName, parameter)
return sessionData[player.UserId]["Milestones"][MilestoneName][parameter]
end
function PlayerManager.GetUnlockable(player, unlockableName, parameter)
return sessionData[player.UserId]["Unlockables"][tostring(unlockableName)][parameter]
end
--SET FUNCTIONS
function PlayerManager.SetValue(player, value, parameter, amount, maxAmount)
if parameter == "Both" then
if amount then
sessionData[player.UserId]["Values"][value]["Current"] = amount
sessionData[player.UserId]["Values"][value]["Max"] = maxAmount
end
else
if amount then
sessionData[player.UserId]["Values"][value][parameter] = amount
end
end
SyncData:FireClient(player, sessionData[player.UserId])
end
function PlayerManager.SetStoryPart(player, value)
sessionData[player.UserId]["StoryPart"] = value
SyncData:FireClient(player, sessionData[player.UserId])
end
function PlayerManager.SetBuildingInfo(player, buildingName, value)
sessionData[player.UserId]["Buildings"][buildingName] = value
SyncData:FireClient(player, sessionData[player.UserId])
end
function PlayerManager.SetUpgrade(player, Type, upgradeName, parameter, value)
sessionData[player.UserId]["Upgrades"][Type][upgradeName][parameter] = value
SyncData:FireClient(player, sessionData[player.UserId])
end
function PlayerManager.SetUnlockable(player, unlockableName, parameter, value)
sessionData[player.UserId]["Unlockables"][tostring(unlockableName)][parameter] = value
SyncData:FireClient(player, sessionData[player.UserId])
end
function PlayerManager.SetMilestoneBoost(player, MilestoneName, parameter, index, value)
sessionData[player.UserId]["Milestones"][MilestoneName][parameter] = value
SyncData:FireClient(player, sessionData[player.UserId])
end
--OTHER FUNCTIONS
function PlayerManager.OnPlayerRemoving(player)
SaveData(player, sessionData[player.UserId])
playerRemoving:Fire(player)
end
function PlayerManager.OnClose()
for _, player in ipairs(Players:GetPlayers()) do
coroutine.wrap(PlayerManager.OnPlayerRemoving(player))()
end
end
return PlayerManager
On other place(same universe):
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local PlayerData = DataStoreService:GetDataStore("PlayerData")
local BadgeService = game:GetService("BadgeService")
local function LoadData(player)
local success, result = pcall(function()
print("Data Loading...")
return PlayerData:GetAsync(player.UserId)
end)
if not success then
warn("LOADING DATASTORE ERROR, PLEASE FIX IT")
end
return success, result
end
local function SaveData(player, data)
local success, result = pcall(function()
print("Data Saving...")
PlayerData:SetAsync(player.UserId, data)
end)
if not success then
warn("SAVING DATASTORE ERROR, PLEASE FIX IT")
end
return success
end
local sessionData = {}
local playerAdded = Instance.new("BindableEvent")
local playerRemoving = Instance.new("BindableEvent")
local PlayerManager = {}
PlayerManager.PlayerAdded = playerAdded.Event
PlayerManager.PlayerRemoving = playerRemoving.Event
function PlayerManager.Start()
for _,player in ipairs(Players:GetPlayers()) do
coroutine.wrap(PlayerManager.OnPlayerAdded)(player)
end
Players.PlayerAdded:Connect(PlayerManager.OnPlayerAdded)
Players.PlayerRemoving:Connect(PlayerManager.OnPlayerRemoving)
game:BindToClose(PlayerManager.OnClose)
end
function PlayerManager.OnPlayerAdded(player)
player.CharacterAdded:Connect(function(character)
PlayerManager.OnCharacterAdded(player, character)
end)
local success, data = LoadData(player)
sessionData[player.UserId] = success and data
playerAdded:Fire(player)
end
function PlayerManager.OnCharacterAdded(player, character)
local humanoid = character:FindFirstChild("Humanoid")
if humanoid then
humanoid.Died:Connect(function()
wait(1)
player:LoadCharacter()
end)
end
end
--GET FUNCTIONS
function PlayerManager.GetValue(player, value, parameter)
local val = sessionData[player.UserId]["Values"][value][parameter]
return val
end
function PlayerManager.GetStoryPart(player)
return sessionData[player.UserId]["StoryPart"]
end
function PlayerManager.GetBuildingInfo(player, buildingName)
return sessionData[player.UserId]["Buildings"][buildingName]
end
function PlayerManager.GetUpgrade(player, Type, upgradeName, parameter)
local val = sessionData[player.UserId]["Upgrades"][Type][upgradeName][parameter]
return val
end
function PlayerManager.GetVoidonomiconStatus(player, action, parameter)
print(sessionData[player.UserId])
if action == "Owned" then
local val = sessionData[player.UserId]["Voidonomicon"][action]
return val
else
local val = sessionData[player.UserId]["Voidonomicon"][action][parameter]
return val
end
end
function PlayerManager.GetMilestoneBoost(player, MilestoneName, parameter)
return sessionData[player.UserId]["Milestones"][MilestoneName][parameter]
end
function PlayerManager.GetUnlockable(player, unlockableName, parameter)
return sessionData[player.UserId]["Unlockables"][tostring(unlockableName)][parameter]
end
--SET FUNCTIONS
function PlayerManager.SetValue(player, value, parameter, amount, maxAmount)
if parameter == "Both" then
if amount then
sessionData[player.UserId]["Values"][value]["Current"] = amount
sessionData[player.UserId]["Values"][value]["Max"] = maxAmount
end
else
if amount then
sessionData[player.UserId]["Values"][value][parameter] = amount
end
end
end
function PlayerManager.SetStoryPart(player, value)
sessionData[player.UserId]["StoryPart"] = value
end
function PlayerManager.SetBuildingInfo(player, buildingName, value)
sessionData[player.UserId]["Buildings"][buildingName] = value
end
function PlayerManager.SetUpgrade(player, Type, upgradeName, parameter, value)
sessionData[player.UserId]["Upgrades"][Type][upgradeName][parameter] = value
end
function PlayerManager.SetVoidonomiconStatus(player, action, parameter, value)
if action == "Owned" then
sessionData[player.UserId]["Voidonomicon"][action] = value
else
sessionData[player.UserId]["Voidonomicon"][action][parameter] = value
end
end
function PlayerManager.SetUnlockable(player, unlockableName, parameter, value)
sessionData[player.UserId]["Unlockables"][tostring(unlockableName)][parameter] = value
end
function PlayerManager.SetMilestoneBoost(player, MilestoneName, parameter, index, value)
sessionData[player.UserId]["Milestones"][MilestoneName][parameter] = value
end
--OTHER FUNCTIONS
function PlayerManager.OnPlayerRemoving(player)
SaveData(player, sessionData[player.UserId])
playerRemoving:Fire(player)
end
function PlayerManager.OnClose()
for _, player in ipairs(Players:GetPlayers()) do
coroutine.wrap(PlayerManager.OnPlayerRemoving(player))()
end
end
return PlayerManager