So basically I'm making an item saver, it saves via the items name (Such as "Basic Sword") but part of my game will be weapon upgrades, enchanting and such.
The saving works so far but currently doesn't save the values within the sword.
How would one create a table connected to the value. Such as:
local saveTable = {SwordA = {Upgrade=12, Enchant="CritChance3", Effect="Circle5"}, SwordB = {Upgrade=5, Enchant="Sharp5", Effect="Spark3"}}
My script currently is as follows:
local dataStore = game:GetService("DataStoreService")
local itemSaves = dataStore:GetDataStore("playersItems")
local gameItemsFolder = game.ServerStorage.Items
local swordFolder = gameItemsFolder.Swords
local potionFolder = gameItemsFolder.Potions
local function saveItems(lostPlayer)
local Key = lostPlayer.UserId .. "-Items"
local SaveTable = {Swords={}, Potions={}}
local starterGear = lostPlayer:WaitForChild("StarterGear")
for _,item in pairs(starterGear:GetChildren()) do
if item:FindFirstChild("weaponServer") then
table.insert(SaveTable.Swords, item.Name)
elseif item:FindFirstChild("potionServer") then
table.insert(SaveTable.Potions, item.Name)
end
end
end
local function loadItems(newPlayer)
local Key = newPlayer.UserId .. "-Items"
local CanLoad = true
local playerItems = itemSaves:GetAsync(Key)
local Backpack = newPlayer:WaitForChild("Backpack")
local starterGear = newPlayer:WaitForChild("StarterGear")
if playerItems == nil then
CanLoad = false
end
if CanLoad == false then
return nil
else
for _,v in pairs(playerItems.Swords) do
local foundItem = swordFolder:FindFirstChild(v)
if foundItem then
local cloneA = foundItem:Clone()
local cloneB = foundItem:Clone()
cloneA.Parent = Backpack
cloneB.Parent = starterGear
else
warn("Item: '" .. v .. "' Not Found")
end
end
for _,v in pairs(playerItems.Potions) do
local foundItem = potionFolder:FindFirstChild(v)
if foundItem then
local cloneA = foundItem:Clone()
local cloneB = foundItem:Clone()
cloneA.Parent = Backpack
cloneB.Parent = starterGear
else
warn("Item: '" .. v .. "' Not Found")
end
end
end
end
game.Players.PlayerAdded:Connect(function(newPlayer)
wait(2)
if loadItems(newPlayer) == nil then
local startItems = gameItemsFolder.starterItems
for _,v in pairs(startItems:GetChildren()) do
local Backpack = newPlayer:WaitForChild("Backpack")
local starterGear = newPlayer:WaitForChild("StarterGear")
local playerArmour = newPlayer:WaitForChild("playerArmour")
local playerEnchants = newPlayer:WaitForChild("playerEnchants")
local itemType = v:FindFirstChild("itemType")
if itemType.Value == "Weapon" or itemType.Value == "Potion" then
v:Clone().Parent = Backpack
v:Clone().Parent = starterGear
elseif itemType.Value == "Armour" then
v:Clone().Parent = playerArmour
elseif itemType.Value == "Enchant" then
v:Clone().Parent = playerEnchants
end
end
end
end)
game.Players.PlayerRemoving:Connect(function(lostPlayer)
wait()
saveItems()
end)
