I found an issue while creating my game datastore.
Basicly the issue is that every other value saves. The only one that gets “corrupted” is the pickaxe value.
local DataStore = game:GetService("DataStoreService"):GetDataStore("MoneyData")
local currencyName = "Gold"
local ItemStorage = game:GetService("DataStoreService"):GetDataStore("ItemsStorage")
function createCurrencyForPlayer(player)
local folder = Instance.new("Folder")
folder.Name = "currency"
local currency = Instance.new("IntValue")
currency.Name = currencyName
currency.Parent = folder
folder.Parent = player
local items = Instance.new("Folder")
items.Name = "Items"
items.Parent = player
local wood = Instance.new("NumberValue")
wood.Name = "Wood"
wood.Value = 0
wood.Parent = items
local furnace = Instance.new("NumberValue")
furnace.Name = "Furnace"
furnace.Value = 0
furnace.Parent = items
local CurrentLand = Instance.new("NumberValue")
CurrentLand.Name = "CurrentLand"
CurrentLand.Value = 0
CurrentLand.Parent = items
local stone = Instance.new("NumberValue")
stone.Name = "Stone"
stone.Value = 0
stone.Parent = items
local gold = Instance.new("NumberValue")
gold.Name = "Gold"
gold.Value = 0
gold.Parent = items
local pickaxe = Instance.new("NumberValue")
pickaxe.Name = "Pickaxe"
pickaxe.Value = 0
pickaxe.Parent = items
local powder = Instance.new("NumberValue")
powder.Name = "Powder"
powder.Value = 0
powder.Parent = items
local paper = Instance.new("NumberValue")
paper.Name = "Paper"
paper.Value = 0
paper.Parent = items
local book = Instance.new("NumberValue")
book.Name = "Book"
book.Value = 0
book.Parent = items
local playerId = getPlayerId(player, currencyName)
local savedTable = nil
local savedData = nil
local savedWood = nil
local savedStone = nil
local savedGold = nil
local savedPickaxe = nil
local savedPowder = nil
local savedPaper = nil
local savedFurnace = nil
local savedBook = nil
--try to load
pcall(function()
savedData = DataStore:GetAsync(playerId)
savedTable = ItemStorage:GetAsync(playerId)
savedWood = savedTable[1]
savedStone = savedTable[2]
savedGold = savedTable[3]
savedPowder = savedTable[4]
savedPaper = savedTable[5]
savedFurnace = savedTable[6]
savedBook = savedTable[7]
savedPickaxe = savedTable[8]
end)
if savedPickaxe ~= nil then
pickaxe.Value = tonumber(savedPickaxe)
print(savedPickaxe)
if savedPickaxe == 2 then
local cloned = game.ServerStorage.Pickaxes["Wood Pickaxe"]:Clone()
cloned.Parent = player.Backpack
elseif savedPickaxe == 5 then
local cloned = game.ServerStorage.Pickaxes["Stone Pickaxe"]:Clone()
cloned.Parent = player.Backpack
elseif savedPickaxe == 7 then
local cloned = game.ServerStorage.Pickaxes["Gold Pickaxe"]:Clone()
cloned.Parent = player.Backpack
end
end
if savedWood ~= nil then
wood.Value = tonumber(savedWood)
end
if savedBook ~= nil then
book.Value = tonumber(savedBook)
end
if savedPaper ~= nil then
paper.Value = tonumber(savedPaper)
end
if savedPowder ~= nil then
powder.Value = tonumber(savedPowder)
end
if savedFurnace ~= nil then
furnace.Value = tonumber(savedFurnace)
end
if savedStone ~= nil then
stone.Value = tonumber(savedStone)
end
if savedGold ~= nil then
gold.Value = tonumber(savedGold)
end
if savedData ~= nil then
currency.Value = savedData
print("data loaded")
while true do wait(5)
currency.Value = currency.Value+5
savedData = currency.Value
end
else
currency.Value = 1000
print("new player")
while true do wait(5)
currency.Value = currency.Value+5
savedData = currency.Value
end
end
end
function saveData(player)
local playerId = getPlayerId(player, currencyName)
local savedItems = {}
table.insert(savedItems, 1, player.Items.Wood.Value)
table.insert(savedItems, 2, player.Items.Stone.Value)
table.insert(savedItems, 3, player.Items.Gold.Value)
table.insert(savedItems, 4, player.Items.Powder.Value)
table.insert(savedItems, 5, player.Items.Paper.Value)
table.insert(savedItems, 6, player.Items.Furnace.Value)
table.insert(savedItems, 7, player.Items.Book.Value)
ItemStorage:SetAsync(playerId, savedItems)
DataStore:SetAsync(playerId, player.currency[currencyName].Value)
wait(1)
for i,v in pairs(player.Backpack:GetChildren()) do
if string.find(v.Name, "Pickaxe") then
table.insert(savedItems, 8, v.Power.Value)
end
end
end
When the games load, it load the Pickaxe value as “1”