Hello! I’m wanting to make this GUI color system but I can’t save a Color3 value can someone help me? It all works fine but I just can’t save it
You can save the individual red, green, and blue values.
What do you mean by “save”? Do you want to save it to a datastore?
You can save this
local toSave = {color.R, color.G, color.B}
And then convert it back to a Color3
local color = Color3.new(toSave[1], toSave[2], toSave[3])
Yes but it says unable to save blah blah blah something utc 8 characters I don’t remember what it said
So a string? then converting it to color3? I’ll try
You can save the RGB values separately in an array.
local color = Color3.new(1, 1, 1)
local array = {color.R, color.G, color.B}
pcall(function()
datastore:SetAsync(key, array) -- assuming you have a key and datastore var stored
end)
To to retrieve that data:
pcall(function()
local data = datastore:GetAsync(key) -- assuming you have a key and datastore var stored
end)
local color = Color.new(data[1], data[2], data[3]
The same concepts applies to vector3s, cframes, etc…
Your code will have much more to it, but this is the basic concept.
It just prints: ServerScriptService.Script:17: attempt to index nil with number
Can you give your whole script?
You need to use HttpService:JSONEncode(value)
when saving it to a datastore, and HttpService:JSONDecode(value)
when using GetAsync, as color values cannot be saved to datastores
Can’t you save each number(each rgb value) separately and then when loaded convert it to Color3?
A simple datastore should work iirc:
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("ColorSaveStore")
function Save(Key, Color) -- Key is what the data gets saved by.
local Fired, Result = pcall(function() -- Always use pcall's when saving data.
DataStore:UpdateAsync(Key, function(OldValue)
return Color
end)
end)
if Fired then
print("Saved Successfully!")
else
warn("Save Failed, Message: " .. Result)
end
end
local Color = Color3.new(1, 1, 1) -- Change this to your color.
-- To Save, Just Run --
Save(Player.UserId .. "_Save", Color)
Note: The Variable Player is just the player who is getting their color saved.
Take a look at this for more info:
What’s your entire script. I dont know what you have.
Example:
function getSaveableColor3(color)
return {r = color.r, g = color.g, b = color.b}
end
function loadColorFromDataStore(t)
return Color3.new(t.r, t.g, t.b)
end
Source: How To Save BrickColors or Color3 in a DataStore?
I suggest searching on your own before posting a thread as most questions on the devforum is already answered.
You can’t save userdatas such as Color3s
, CFrames
, Vector3s
etc. The parser which saves the DataStores will automatically make them null
Ohhhh, well then can’t you just turn the color into a string and then when you need the color split it apart?
local Color = tostring(Color3.new(1, 1, 1))
Save(Key, Color)
and then to get it
local Data = DataStore:GetAsync(Key)
local Split = string.split(Data, ",")
local R, G, B = tonumber(Split[1]), tonumber(Split[2]), tonumber(Split[3])
You can do that but it’s mostly preferable to just save the values individually to a single table and save that, then load the data store and create a new color3 with the values in the table. Basically what you did but different
Ohh ok, makes sense, so just save the whole color in an array, and then split it when you need it?
That should work too, but you would need separate datastores, each for R, G & B.
Or just save them to a table then use JSONEncode
Thank you! This helped me with one of my projects.