Types
To ensure compatibility with Roblox DataStore, Roda only supports primitive data types (strings, numbers, booleans). Having nested tables and complex types at runtime in your table can be achieved very easy using the provided code generation.
If for some reasons you don't want to use the code generation, here are some basic examples of converting primitives into complex Roblox types.
Color3
Script
local colors = require(game.ReplicatedStorage.Colors) -- Adjust as needed
local items = require(game.ReplicatedStorage.Items) -- Adjust as needed
for _, item in pairs(items) do
local colorData = colors[item.colorKey] or error("Color not found: " .. item.colorKey)
item.color = Color3.fromRGB(colorData.R, colorData.G, colorData.B)
end
Vector3
Script
local positions = require(game.ReplicatedStorage.Positions) -- Adjust as needed
local items = require(game.ReplicatedStorage.Items) -- Adjust as needed
for _, item in pairs(items) do
local pos = positions[item.posKey] or error("Position not found: " .. item.posKey)
item.position = Vector3.new(pos.X, pos.Y, pos.Z)
end
Vector2
Script
local sizes = require(game.ReplicatedStorage.Sizes) -- Adjust as needed
local items = require(game.ReplicatedStorage.Items) -- Adjust as needed
for _, item in pairs(items) do
local sizeData = sizes[item.sizeKey] or error("Size not found: " .. item.sizeKey)
item.size = Vector2.new(sizeData.X, sizeData.Y)
end
UDim2
Script
local uiSizes = require(game.ReplicatedStorage.UISizes) -- Adjust as needed
local items = require(game.ReplicatedStorage.Items) -- Adjust as needed
for _, item in pairs(items) do
local sizeData = uiSizes[item.sizeKey] or error("UISize not found: " .. item.sizeKey)
item.size = UDim2.new(sizeData.ScaleX, sizeData.OffsetX, sizeData.ScaleY, sizeData.OffsetY)
end
UDim
Script
local uiScales = require(game.ReplicatedStorage.UIScales) -- Adjust as needed
local items = require(game.ReplicatedStorage.Items) -- Adjust as needed
for _, item in pairs(items) do
local scaleData = uiScales[item.scaleKey] or error("UIScale not found: " .. item.scaleKey)
item.size = UDim.new(scaleData.Scale, scaleData.Offset)
end
CFrame
Script
local cFrames = require(game.ReplicatedStorage.CFrames) -- Adjust as needed
local items = require(game.ReplicatedStorage.Items) -- Adjust as needed
for _, item in pairs(items) do
local cFrameData = cFrames[item.cFrameKey] or error("CFrame not found: " .. item.cFrameKey)
item.cFrame = CFrame.new(cFrameData.PositionX, cFrameData.PositionY, cFrameData.PositionZ)
* CFrame.fromEulerAngles(math.rad(cFrameData.RotationX), math.rad(cFrameData.RotationY), math.rad(cFrameData.RotationZ))
end
ModuleScript
local cFrames = {
["objectPosition1"] = {
cFrameKey = "objectPosition1",
PositionX = 0,
PositionY = 5,
PositionZ = 0,
RotationX = 45, -- In degrees
RotationY = 0,
RotationZ = 0,
},
["objectPosition2"] = {
cFrameKey = "objectPosition2",
PositionX = 10,
PositionY = 8,
PositionZ = 5,
RotationX = 0,
RotationY = 0,
RotationZ = 90, -- In degrees
},
}
return cFrames