My goal is to create a CC (Character Customization) System. I want the data to be transferred between places. With this set up: https://gyazo.com/c4f261f4b3538b5ee35d3c5dd3d86234
I'm trying to improve this code and understand pcall function. Roblox Wiki isn't helping much in explaining how it works or where I should place the pcall function. I'm also trying to make this script save a lot of values in a small script (Probably using an in pairs loop).
This is my full script in ServerScriptService
:
--// Settings \\-- local SAVE_TIME = 120 -- In Seconds --// Variables \\-- local DSS = game:GetService('DataStoreService') local CCDS = DSS:GetDataStore('Custom Character Data Store') --// Functions \\-- local function GenerateKey(plr) local Key = "UserId_"..plr.UserId return Key end local function GenerateDataFromPlayer(plr) local DataTable = { Skin_Color = plr.CharacterData.Skin_Color.Value, Shirt_Color = plr.CharacterData.Shirt_Color.Value, Pants_Color = plr.CharacterData.Pants_Color.Value, } return DataTable end local function SavePlayerData(plr) local key = GenerateKey(plr) local data = GenerateDataFromPlayer(plr) CCDS:SetAsync(key, data) end local function LoadPlayerDataFromDataStore(plr) local key = GenerateKey(plr) local data = CCDS:GetAsync(key) end local function InputPlayerData(plr, data) local Char = plr.Character or plr.CharacterAdded:Wait() plr.CharacterData.Skin_Color.Value = data.Skin_Color plr.CharacterData.Shirt_Color.Value = data.Shirt_Color plr.CharacterData.Pants_Color.Value = data.Pants_Color Char:WaitForChild('Body Colors').HeadColor = BrickColor.new(plr.CharacterData.Skin_Color.Value) Char['Body Colors'].LeftArmColor = BrickColor.new(plr.CharacterData.Skin_Color.Value) Char['Body Colors'].RightArmColor = BrickColor.new(plr.CharacterData.Skin_Color.Value) Char['Body Colors'].LeftLegColor = BrickColor.new(plr.CharacterData.Pants_Color.Value) Char['Body Colors'].RightLegColor = BrickColor.new(plr.CharacterData.Pants_Color.Value) Char['Body Colors'].TorsoColor = BrickColor.new(plr.CharacterData.Shirt_Color.Value) end --// Values \\-- game.Players.PlayerAdded:Connect(function(plr) local CharacterData = Instance.new('Folder') CharacterData.Name = 'CharacterData' CharacterData.Parent = plr local Skin_Color = Instance.new('StringValue') Skin_Color.Name = 'Skin_Color' Skin_Color.Value = 'Pastel brown' Skin_Color.Parent = CharacterData local Shirt_Color = Instance.new('StringValue') Shirt_Color.Name = 'Shirt_Color' Shirt_Color.Value = 'Fossil' Shirt_Color.Parent = CharacterData local Pants_Color = Instance.new('StringValue') Pants_Color.Name = 'Pants_Color' Pants_Color.Value = 'Brown' Pants_Color.Parent = CharacterData LoadPlayerDataFromDataStore(plr) InputPlayerData(plr, GenerateDataFromPlayer(plr)) spawn(function() wait(2) for _, Values in pairs(CharacterData:GetChildren()) do Values.Changed:Connect(function() SavePlayerData(plr) end) end end) spawn(function() while wait(SAVE_TIME) do SavePlayerData(plr) end end) end) game.Players.PlayerRemoving:Connect(function() SavePlayerData() end)
So how can I add a p call function? How can I improve this script and would the data transfer between places and games as it is now? How can I improve it so I can save a lot of data at once?
https://gyazo.com/c4f261f4b3538b5ee35d3c5dd3d86234
That is my setup again.
Thank you for reading. I hope I can get some helpful feedback. Any feedback is appreciated.