mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-25 15:16:07 +00:00
Update to latest rbx_dom_lua
This commit is contained in:
@@ -23,80 +23,221 @@ end
|
|||||||
local ALL_AXES = {"X", "Y", "Z"}
|
local ALL_AXES = {"X", "Y", "Z"}
|
||||||
local ALL_FACES = {"Right", "Top", "Back", "Left", "Bottom", "Front"}
|
local ALL_FACES = {"Right", "Top", "Back", "Left", "Bottom", "Front"}
|
||||||
|
|
||||||
local encoders
|
local types
|
||||||
encoders = {
|
types = {
|
||||||
Bool = identity,
|
Axes = {
|
||||||
Content = identity,
|
fromPod = function(pod)
|
||||||
Float32 = serializeFloat,
|
local axes = {}
|
||||||
Float64 = serializeFloat,
|
|
||||||
Int32 = identity,
|
|
||||||
Int64 = identity,
|
|
||||||
String = identity,
|
|
||||||
|
|
||||||
BinaryString = base64.encode,
|
for index, axisName in ipairs(pod) do
|
||||||
SharedString = base64.encode,
|
axes[index] = Enum.Axis[axisName]
|
||||||
|
end
|
||||||
|
|
||||||
Axes = function(value)
|
return Axes.new(unpack(axes))
|
||||||
local output = {}
|
end,
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
local json = {}
|
||||||
|
|
||||||
for _, axis in ipairs(ALL_AXES) do
|
for _, axis in ipairs(ALL_AXES) do
|
||||||
if value[axis] then
|
if roblox[axis] then
|
||||||
table.insert(output, axis)
|
table.insert(json, axis)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return output
|
return json
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
BinaryString = {
|
||||||
|
fromPod = base64.decode,
|
||||||
|
toPod = base64.encode,
|
||||||
|
},
|
||||||
|
|
||||||
|
Bool = {
|
||||||
|
fromPod = identity,
|
||||||
|
toPod = identity,
|
||||||
|
},
|
||||||
|
|
||||||
|
BrickColor = {
|
||||||
|
fromPod = function(pod)
|
||||||
|
return BrickColor.new(pod)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
Faces = function(value)
|
toPod = function(roblox)
|
||||||
local output = {}
|
return roblox.Number
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
for _, face in ipairs(ALL_FACES) do
|
CFrame = {
|
||||||
if value[face] then
|
fromPod = function(pod)
|
||||||
table.insert(output, face)
|
local pos = pod.Position
|
||||||
end
|
local orient = pod.Orientation
|
||||||
end
|
|
||||||
|
|
||||||
return output
|
return CFrame.new(
|
||||||
|
pos[1], pos[2], pos[3],
|
||||||
|
orient[1][1], orient[1][2], orient[1][3],
|
||||||
|
orient[2][1], orient[2][2], orient[2][3],
|
||||||
|
orient[3][1], orient[3][2], orient[3][3]
|
||||||
|
)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
Enum = function(value)
|
toPod = function(roblox)
|
||||||
if typeof(value) == "number" then
|
|
||||||
return value
|
|
||||||
else
|
|
||||||
return value.Value
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
|
|
||||||
BrickColor = function(value)
|
|
||||||
return value.Number
|
|
||||||
end,
|
|
||||||
|
|
||||||
CFrame = function(value)
|
|
||||||
local x, y, z,
|
local x, y, z,
|
||||||
r00, r01, r02,
|
r00, r01, r02,
|
||||||
r10, r11, r12,
|
r10, r11, r12,
|
||||||
r20, r21, r22 = value:GetComponents()
|
r20, r21, r22 = roblox:GetComponents()
|
||||||
|
|
||||||
return {
|
return {
|
||||||
Position = {x, y, z},
|
Position = {x, y, z},
|
||||||
Orientation = {
|
Orientation = {
|
||||||
{r00, r10, r20},
|
{r00, r01, r02},
|
||||||
{r01, r11, r21},
|
{r10, r11, r12},
|
||||||
{r02, r12, r22},
|
{r20, r21, r22},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
end,
|
end,
|
||||||
Color3 = function(value)
|
},
|
||||||
return {value.r, value.g, value.b}
|
|
||||||
|
Color3 = {
|
||||||
|
fromPod = unpackDecoder(Color3.new),
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
return {roblox.r, roblox.g, roblox.b}
|
||||||
end,
|
end,
|
||||||
NumberRange = function(value)
|
},
|
||||||
return {value.Min, value.Max}
|
|
||||||
|
Color3uint8 = {
|
||||||
|
fromPod = unpackDecoder(Color3.fromRGB),
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
return {
|
||||||
|
math.round(roblox.R * 255),
|
||||||
|
math.round(roblox.G * 255),
|
||||||
|
math.round(roblox.B * 255),
|
||||||
|
}
|
||||||
end,
|
end,
|
||||||
NumberSequence = function(value)
|
},
|
||||||
|
|
||||||
|
ColorSequence = {
|
||||||
|
fromPod = function(pod)
|
||||||
local keypoints = {}
|
local keypoints = {}
|
||||||
|
|
||||||
for index, keypoint in ipairs(value.Keypoints) do
|
for index, keypoint in ipairs(pod.Keypoints) do
|
||||||
|
keypoints[index] = ColorSequenceKeypoint.new(
|
||||||
|
keypoint.Time,
|
||||||
|
types.Color3.fromPod(keypoint.Color)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
return ColorSequence.new(keypoints)
|
||||||
|
end,
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
local keypoints = {}
|
||||||
|
|
||||||
|
for index, keypoint in ipairs(roblox.Keypoints) do
|
||||||
|
keypoints[index] = {
|
||||||
|
Time = keypoint.Time,
|
||||||
|
Color = types.Color3.toPod(keypoint.Value),
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
Keypoints = keypoints,
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
Content = {
|
||||||
|
fromPod = identity,
|
||||||
|
toPod = identity,
|
||||||
|
},
|
||||||
|
|
||||||
|
Enum = {
|
||||||
|
fromPod = identity,
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
-- FIXME: More robust handling of enums
|
||||||
|
if typeof(roblox) == "number" then
|
||||||
|
return roblox
|
||||||
|
else
|
||||||
|
return roblox.Value
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
Faces = {
|
||||||
|
fromPod = function(pod)
|
||||||
|
local faces = {}
|
||||||
|
|
||||||
|
for index, faceName in ipairs(pod) do
|
||||||
|
faces[index] = Enum.NormalId[faceName]
|
||||||
|
end
|
||||||
|
|
||||||
|
return Faces.new(unpack(faces))
|
||||||
|
end,
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
local pod = {}
|
||||||
|
|
||||||
|
for _, face in ipairs(ALL_FACES) do
|
||||||
|
if roblox[face] then
|
||||||
|
table.insert(pod, face)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return pod
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
Float32 = {
|
||||||
|
fromPod = identity,
|
||||||
|
toPod = serializeFloat,
|
||||||
|
},
|
||||||
|
|
||||||
|
Float64 = {
|
||||||
|
fromPod = identity,
|
||||||
|
toPod = serializeFloat,
|
||||||
|
},
|
||||||
|
|
||||||
|
Int32 = {
|
||||||
|
fromPod = identity,
|
||||||
|
toPod = identity,
|
||||||
|
},
|
||||||
|
|
||||||
|
Int64 = {
|
||||||
|
fromPod = identity,
|
||||||
|
toPod = identity,
|
||||||
|
},
|
||||||
|
|
||||||
|
NumberRange = {
|
||||||
|
fromPod = unpackDecoder(NumberRange.new),
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
return {roblox.Min, roblox.Max}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
NumberSequence = {
|
||||||
|
fromPod = function(pod)
|
||||||
|
local keypoints = {}
|
||||||
|
|
||||||
|
for index, keypoint in ipairs(pod.Keypoints) do
|
||||||
|
keypoints[index] = NumberSequenceKeypoint.new(
|
||||||
|
keypoint.Time,
|
||||||
|
keypoint.Value,
|
||||||
|
keypoint.Envelope
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
return NumberSequence.new(keypoints)
|
||||||
|
end,
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
local keypoints = {}
|
||||||
|
|
||||||
|
for index, keypoint in ipairs(roblox.Keypoints) do
|
||||||
keypoints[index] = {
|
keypoints[index] = {
|
||||||
Time = keypoint.Time,
|
Time = keypoint.Time,
|
||||||
Value = keypoint.Value,
|
Value = keypoint.Value,
|
||||||
@@ -108,247 +249,207 @@ encoders = {
|
|||||||
Keypoints = keypoints,
|
Keypoints = keypoints,
|
||||||
}
|
}
|
||||||
end,
|
end,
|
||||||
ColorSequence = function(value)
|
},
|
||||||
local keypoints = {}
|
|
||||||
|
|
||||||
for index, keypoint in ipairs(value.Keypoints) do
|
PhysicalProperties = {
|
||||||
keypoints[index] = {
|
fromPod = function(pod)
|
||||||
Time = keypoint.Time,
|
if pod == "Default" then
|
||||||
Color = encoders.Color3(keypoint.Value),
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
return {
|
|
||||||
Keypoints = keypoints,
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
Rect = function(value)
|
|
||||||
return {
|
|
||||||
encoders.Vector2(value.Min),
|
|
||||||
encoders.Vector2(value.Max),
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
UDim = function(value)
|
|
||||||
return {value.Scale, value.Offset}
|
|
||||||
end,
|
|
||||||
UDim2 = function(value)
|
|
||||||
return {
|
|
||||||
encoders.UDim(value.X),
|
|
||||||
encoders.UDim(value.Y),
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
Vector2 = function(value)
|
|
||||||
return {
|
|
||||||
serializeFloat(value.X),
|
|
||||||
serializeFloat(value.Y),
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
Vector2int16 = function(value)
|
|
||||||
return {value.X, value.Y}
|
|
||||||
end,
|
|
||||||
Vector3 = function(value)
|
|
||||||
return {
|
|
||||||
serializeFloat(value.X),
|
|
||||||
serializeFloat(value.Y),
|
|
||||||
serializeFloat(value.Z),
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
Vector3int16 = function(value)
|
|
||||||
return {value.X, value.Y, value.Z}
|
|
||||||
end,
|
|
||||||
|
|
||||||
PhysicalProperties = function(value)
|
|
||||||
if value == nil then
|
|
||||||
return nil
|
|
||||||
else
|
|
||||||
return {
|
|
||||||
Density = value.Density,
|
|
||||||
Friction = value.Friction,
|
|
||||||
Elasticity = value.Elasticity,
|
|
||||||
FrictionWeight = value.FrictionWeight,
|
|
||||||
ElasticityWeight = value.ElasticityWeight,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
|
|
||||||
Ray = function(value)
|
|
||||||
return {
|
|
||||||
Origin = encoders.Vector3(value.Origin),
|
|
||||||
Direction = encoders.Vector3(value.Direction),
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
|
|
||||||
Ref = function(value)
|
|
||||||
return nil
|
|
||||||
end,
|
|
||||||
|
|
||||||
Region3int16 = function(value)
|
|
||||||
return {
|
|
||||||
encoders.Vector3int16(value.Min),
|
|
||||||
encoders.Vector3int16(value.Max),
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
|
|
||||||
Color3uint8 = function(value)
|
|
||||||
return {
|
|
||||||
math.round(value.R * 255),
|
|
||||||
math.round(value.G * 255),
|
|
||||||
math.round(value.B * 255),
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
|
|
||||||
local decoders
|
|
||||||
decoders = {
|
|
||||||
Bool = identity,
|
|
||||||
Content = identity,
|
|
||||||
Enum = identity,
|
|
||||||
Float32 = identity,
|
|
||||||
Float64 = identity,
|
|
||||||
Int32 = identity,
|
|
||||||
Int64 = identity,
|
|
||||||
String = identity,
|
|
||||||
|
|
||||||
BinaryString = base64.decode,
|
|
||||||
SharedString = base64.decode,
|
|
||||||
|
|
||||||
BrickColor = BrickColor.new,
|
|
||||||
|
|
||||||
Color3 = unpackDecoder(Color3.new),
|
|
||||||
Color3uint8 = unpackDecoder(Color3.fromRGB),
|
|
||||||
NumberRange = unpackDecoder(NumberRange.new),
|
|
||||||
UDim = unpackDecoder(UDim.new),
|
|
||||||
Vector2 = unpackDecoder(Vector2.new),
|
|
||||||
Vector2int16 = unpackDecoder(Vector2int16.new),
|
|
||||||
Vector3 = unpackDecoder(Vector3.new),
|
|
||||||
Vector3int16 = unpackDecoder(Vector3int16.new),
|
|
||||||
|
|
||||||
UDim2 = function(value)
|
|
||||||
return UDim2.new(
|
|
||||||
value[1][1],
|
|
||||||
value[1][2],
|
|
||||||
value[2][1],
|
|
||||||
value[2][2]
|
|
||||||
)
|
|
||||||
end,
|
|
||||||
|
|
||||||
Axes = function(value)
|
|
||||||
local axes = {}
|
|
||||||
for index, axisName in ipairs(value) do
|
|
||||||
axes[index] = Enum.Axis[axisName]
|
|
||||||
end
|
|
||||||
|
|
||||||
return Axes.new(unpack(axes))
|
|
||||||
end,
|
|
||||||
|
|
||||||
Faces = function(value)
|
|
||||||
local normalIds = {}
|
|
||||||
for index, faceName in ipairs(value) do
|
|
||||||
normalIds[index] = Enum.NormalId[faceName]
|
|
||||||
end
|
|
||||||
|
|
||||||
return Faces.new(unpack(normalIds))
|
|
||||||
end,
|
|
||||||
|
|
||||||
CFrame = function(value)
|
|
||||||
return CFrame.fromMatrix(
|
|
||||||
decoders.Vector3(value.Position),
|
|
||||||
decoders.Vector3(value.Orientation[1]),
|
|
||||||
decoders.Vector3(value.Orientation[2]),
|
|
||||||
decoders.Vector3(value.Orientation[3])
|
|
||||||
)
|
|
||||||
end,
|
|
||||||
|
|
||||||
Rect = function(value)
|
|
||||||
return Rect.new(
|
|
||||||
decoders.Vector2(value[1]),
|
|
||||||
decoders.Vector2(value[2])
|
|
||||||
)
|
|
||||||
end,
|
|
||||||
|
|
||||||
Ray = function(value)
|
|
||||||
return Ray.new(
|
|
||||||
decoders.Vector3(value.Origin),
|
|
||||||
decoders.Vector3(value.Direction)
|
|
||||||
)
|
|
||||||
end,
|
|
||||||
|
|
||||||
NumberSequence = function(value)
|
|
||||||
local keypoints = {}
|
|
||||||
|
|
||||||
for index, keypoint in ipairs(value.Keypoints) do
|
|
||||||
keypoints[index] = NumberSequenceKeypoint.new(
|
|
||||||
keypoint.Time,
|
|
||||||
keypoint.Value,
|
|
||||||
keypoint.Envelope
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
return NumberSequence.new(keypoints)
|
|
||||||
end,
|
|
||||||
|
|
||||||
ColorSequence = function(value)
|
|
||||||
local keypoints = {}
|
|
||||||
|
|
||||||
for index, keypoint in ipairs(value.Keypoints) do
|
|
||||||
keypoints[index] = ColorSequenceKeypoint.new(
|
|
||||||
keypoint.Time,
|
|
||||||
Color3.new(unpack(keypoint.Color))
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
return ColorSequence.new(keypoints)
|
|
||||||
end,
|
|
||||||
|
|
||||||
PhysicalProperties = function(properties)
|
|
||||||
if properties == nil then
|
|
||||||
return nil
|
return nil
|
||||||
else
|
else
|
||||||
return PhysicalProperties.new(
|
return PhysicalProperties.new(
|
||||||
properties.Density,
|
pod.Density,
|
||||||
properties.Friction,
|
pod.Friction,
|
||||||
properties.Elasticity,
|
pod.Elasticity,
|
||||||
properties.FrictionWeight,
|
pod.FrictionWeight,
|
||||||
properties.ElasticityWeight
|
pod.ElasticityWeight
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|
||||||
Ref = function()
|
toPod = function(roblox)
|
||||||
return nil
|
if roblox == nil then
|
||||||
|
return "Default"
|
||||||
|
else
|
||||||
|
return {
|
||||||
|
Density = roblox.Density,
|
||||||
|
Friction = roblox.Friction,
|
||||||
|
Elasticity = roblox.Elasticity,
|
||||||
|
FrictionWeight = roblox.FrictionWeight,
|
||||||
|
ElasticityWeight = roblox.ElasticityWeight,
|
||||||
|
}
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
Region3int16 = function(value)
|
Ray = {
|
||||||
return Region3int16.new(
|
fromPod = function(pod)
|
||||||
decoders.Vector3int16(value[1]),
|
return Ray.new(
|
||||||
decoders.Vector3int16(value[2])
|
types.Vector3.fromPod(pod.Origin),
|
||||||
|
types.Vector3.fromPod(pod.Direction)
|
||||||
)
|
)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
return {
|
||||||
|
Origin = types.Vector3.toPod(roblox.Origin),
|
||||||
|
Direction = types.Vector3.toPod(roblox.Direction),
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
Rect = {
|
||||||
|
fromPod = function(pod)
|
||||||
|
return Rect.new(
|
||||||
|
types.Vector2.fromPod(pod[1]),
|
||||||
|
types.Vector2.fromPod(pod[2])
|
||||||
|
)
|
||||||
|
end,
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
return {
|
||||||
|
types.Vector2.toPod(roblox.Min),
|
||||||
|
types.Vector2.toPod(roblox.Max),
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
Ref = {
|
||||||
|
fromPod = function(_pod)
|
||||||
|
error("Ref cannot be decoded on its own")
|
||||||
|
end,
|
||||||
|
|
||||||
|
toPod = function(_roblox)
|
||||||
|
error("Ref can not be encoded on its own")
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
Region3 = {
|
||||||
|
fromPod = function(pod)
|
||||||
|
error("Region3 is not implemented")
|
||||||
|
end,
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
error("Region3 is not implemented")
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
Region3int16 = {
|
||||||
|
fromPod = function(pod)
|
||||||
|
return Region3int16.new(
|
||||||
|
types.Vector3int16.fromPod(pod[1]),
|
||||||
|
types.Vector3int16.fromPod(pod[2])
|
||||||
|
)
|
||||||
|
end,
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
return {
|
||||||
|
types.Vector3int16.toPod(roblox.Min),
|
||||||
|
types.Vector3int16.toPod(roblox.Max),
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
SharedString = {
|
||||||
|
fromPod = function(pod)
|
||||||
|
error("SharedString is not supported")
|
||||||
|
end,
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
error("SharedString is not supported")
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
String = {
|
||||||
|
fromPod = identity,
|
||||||
|
toPod = identity,
|
||||||
|
},
|
||||||
|
|
||||||
|
UDim = {
|
||||||
|
fromPod = unpackDecoder(UDim.new),
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
return {roblox.Scale, roblox.Offset}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
UDim2 = {
|
||||||
|
fromPod = function(pod)
|
||||||
|
return UDim2.new(
|
||||||
|
types.UDim.fromPod(pod[1]),
|
||||||
|
types.UDim.fromPod(pod[2])
|
||||||
|
)
|
||||||
|
end,
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
return {
|
||||||
|
types.UDim.toPod(roblox.X),
|
||||||
|
types.UDim.toPod(roblox.Y),
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
Vector2 = {
|
||||||
|
fromPod = unpackDecoder(Vector2.new),
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
return {
|
||||||
|
serializeFloat(roblox.X),
|
||||||
|
serializeFloat(roblox.Y),
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
Vector2int16 = {
|
||||||
|
fromPod = unpackDecoder(Vector2int16.new),
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
return {roblox.X, roblox.Y}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
Vector3 = {
|
||||||
|
fromPod = unpackDecoder(Vector3.new),
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
return {
|
||||||
|
serializeFloat(roblox.X),
|
||||||
|
serializeFloat(roblox.Y),
|
||||||
|
serializeFloat(roblox.Z),
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
Vector3int16 = {
|
||||||
|
fromPod = unpackDecoder(Vector3int16.new),
|
||||||
|
|
||||||
|
toPod = function(roblox)
|
||||||
|
return {roblox.X, roblox.Y, roblox.Z}
|
||||||
|
end,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
local EncodedValue = {}
|
local EncodedValue = {}
|
||||||
|
|
||||||
function EncodedValue.decode(encodedValue)
|
function EncodedValue.decode(encodedValue)
|
||||||
local decoder = decoders[encodedValue.Type]
|
local typeImpl = types[encodedValue.Type]
|
||||||
if decoder ~= nil then
|
if typeImpl == nil then
|
||||||
return true, decoder(encodedValue.Value)
|
return false, "Couldn't decode value " .. tostring(encodedValue.Type)
|
||||||
end
|
end
|
||||||
|
|
||||||
return false, "Couldn't decode value " .. tostring(encodedValue.Type)
|
return true, typeImpl.fromPod(encodedValue.Value)
|
||||||
end
|
end
|
||||||
|
|
||||||
function EncodedValue.encode(rbxValue, propertyType)
|
function EncodedValue.encode(rbxValue, propertyType)
|
||||||
assert(propertyType ~= nil, "Property type descriptor is required")
|
assert(propertyType ~= nil, "Property type descriptor is required")
|
||||||
|
|
||||||
local encoder = encoders[propertyType]
|
local typeImpl = types[propertyType]
|
||||||
|
if typeImpl == nil then
|
||||||
if encoder == nil then
|
|
||||||
return false, ("Missing encoder for property type %q"):format(propertyType)
|
return false, ("Missing encoder for property type %q"):format(propertyType)
|
||||||
end
|
end
|
||||||
|
|
||||||
return true, {
|
return true, {
|
||||||
Type = propertyType,
|
Type = propertyType,
|
||||||
Value = encoder(rbxValue),
|
Value = typeImpl.toPod(rbxValue),
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
return function()
|
return function()
|
||||||
local HttpService = game:GetService("HttpService")
|
local HttpService = game:GetService("HttpService")
|
||||||
|
|
||||||
local RbxDom = require(script.Parent)
|
|
||||||
local EncodedValue = require(script.Parent.EncodedValue)
|
local EncodedValue = require(script.Parent.EncodedValue)
|
||||||
local allValues = require(script.Parent.allValues)
|
local allValues = require(script.Parent.allValues)
|
||||||
|
|
||||||
@@ -39,11 +38,21 @@ return function()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local extraAssertions = {
|
||||||
|
CFrame = function(value)
|
||||||
|
expect(value).to.equal(CFrame.new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12))
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
for testName, testEntry in pairs(allValues) do
|
for testName, testEntry in pairs(allValues) do
|
||||||
it("round trip " .. testName, function()
|
it("round trip " .. testName, function()
|
||||||
local ok, decoded = EncodedValue.decode(testEntry.value)
|
local ok, decoded = EncodedValue.decode(testEntry.value)
|
||||||
assert(ok, decoded)
|
assert(ok, decoded)
|
||||||
|
|
||||||
|
if extraAssertions[testName] ~= nil then
|
||||||
|
extraAssertions[testName](decoded)
|
||||||
|
end
|
||||||
|
|
||||||
local ok, encoded = EncodedValue.encode(decoded, testEntry.ty)
|
local ok, encoded = EncodedValue.encode(decoded, testEntry.ty)
|
||||||
assert(ok, encoded)
|
assert(ok, encoded)
|
||||||
|
|
||||||
|
|||||||
@@ -1,160 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Color3uint8": {
|
|
||||||
"value": {
|
|
||||||
"Type": "Color3uint8",
|
|
||||||
"Value": [
|
|
||||||
0,
|
|
||||||
128,
|
|
||||||
255
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ty": "Color3uint8"
|
|
||||||
},
|
|
||||||
"Bool": {
|
|
||||||
"value": {
|
|
||||||
"Type": "Bool",
|
|
||||||
"Value": true
|
|
||||||
},
|
|
||||||
"ty": "Bool"
|
|
||||||
},
|
|
||||||
"BinaryString": {
|
|
||||||
"value": {
|
|
||||||
"Type": "BinaryString",
|
|
||||||
"Value": "SGVsbG8h"
|
|
||||||
},
|
|
||||||
"ty": "BinaryString"
|
|
||||||
},
|
|
||||||
"BrickColor": {
|
|
||||||
"value": {
|
|
||||||
"Type": "BrickColor",
|
|
||||||
"Value": 1004
|
|
||||||
},
|
|
||||||
"ty": "BrickColor"
|
|
||||||
},
|
|
||||||
"Vector3": {
|
|
||||||
"value": {
|
|
||||||
"Type": "Vector3",
|
|
||||||
"Value": [
|
|
||||||
-300.0,
|
|
||||||
0.0,
|
|
||||||
1500.0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ty": "Vector3"
|
|
||||||
},
|
|
||||||
"String": {
|
|
||||||
"value": {
|
|
||||||
"Type": "String",
|
|
||||||
"Value": "Hello, world!"
|
|
||||||
},
|
|
||||||
"ty": "String"
|
|
||||||
},
|
|
||||||
"NumberRange": {
|
|
||||||
"value": {
|
|
||||||
"Type": "NumberRange",
|
|
||||||
"Value": [
|
|
||||||
-36.0,
|
|
||||||
94.0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ty": "NumberRange"
|
|
||||||
},
|
|
||||||
"Int64": {
|
|
||||||
"value": {
|
|
||||||
"Type": "Int64",
|
|
||||||
"Value": 23491023
|
|
||||||
},
|
|
||||||
"ty": "Int64"
|
|
||||||
},
|
|
||||||
"Vector3int16": {
|
|
||||||
"value": {
|
|
||||||
"Type": "Vector3int16",
|
|
||||||
"Value": [
|
|
||||||
60,
|
|
||||||
37,
|
|
||||||
-450
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ty": "Vector3int16"
|
|
||||||
},
|
|
||||||
"Float32": {
|
|
||||||
"value": {
|
|
||||||
"Type": "Float32",
|
|
||||||
"Value": 15.0
|
|
||||||
},
|
|
||||||
"ty": "Float32"
|
|
||||||
},
|
|
||||||
"NumberSequence": {
|
|
||||||
"value": {
|
|
||||||
"Type": "NumberSequence",
|
|
||||||
"Value": {
|
|
||||||
"Keypoints": [
|
|
||||||
{
|
|
||||||
"Time": 0.0,
|
|
||||||
"Value": 5.0,
|
|
||||||
"Envelope": 2.0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Time": 1.0,
|
|
||||||
"Value": 22.0,
|
|
||||||
"Envelope": 0.0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ty": "NumberSequence"
|
|
||||||
},
|
|
||||||
"ColorSequence": {
|
|
||||||
"value": {
|
|
||||||
"Type": "ColorSequence",
|
|
||||||
"Value": {
|
|
||||||
"Keypoints": [
|
|
||||||
{
|
|
||||||
"Time": 0.0,
|
|
||||||
"Color": [
|
|
||||||
1.0,
|
|
||||||
1.0,
|
|
||||||
0.5
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Time": 1.0,
|
|
||||||
"Color": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ty": "ColorSequence"
|
|
||||||
},
|
|
||||||
"Ray": {
|
|
||||||
"value": {
|
|
||||||
"Type": "Ray",
|
|
||||||
"Value": {
|
|
||||||
"Origin": [
|
|
||||||
1.0,
|
|
||||||
2.0,
|
|
||||||
3.0
|
|
||||||
],
|
|
||||||
"Direction": [
|
|
||||||
4.0,
|
|
||||||
5.0,
|
|
||||||
6.0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ty": "Ray"
|
|
||||||
},
|
|
||||||
"Int32": {
|
|
||||||
"value": {
|
|
||||||
"Type": "Int32",
|
|
||||||
"Value": 6014
|
|
||||||
},
|
|
||||||
"ty": "Int32"
|
|
||||||
},
|
|
||||||
"Axes": {
|
"Axes": {
|
||||||
"value": {
|
"value": {
|
||||||
"Type": "Axes",
|
"Type": "Axes",
|
||||||
@@ -166,98 +10,26 @@
|
|||||||
},
|
},
|
||||||
"ty": "Axes"
|
"ty": "Axes"
|
||||||
},
|
},
|
||||||
"Enum": {
|
"BinaryString": {
|
||||||
"value": {
|
"value": {
|
||||||
"Type": "Enum",
|
"Type": "BinaryString",
|
||||||
"Value": 1234
|
"Value": "SGVsbG8h"
|
||||||
},
|
},
|
||||||
"ty": "Enum"
|
"ty": "BinaryString"
|
||||||
},
|
},
|
||||||
"Faces": {
|
"Bool": {
|
||||||
"value": {
|
"value": {
|
||||||
"Type": "Faces",
|
"Type": "Bool",
|
||||||
"Value": [
|
"Value": true
|
||||||
"Right",
|
|
||||||
"Top",
|
|
||||||
"Back",
|
|
||||||
"Left",
|
|
||||||
"Bottom",
|
|
||||||
"Front"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"ty": "Faces"
|
"ty": "Bool"
|
||||||
},
|
},
|
||||||
"UDim": {
|
"BrickColor": {
|
||||||
"value": {
|
"value": {
|
||||||
"Type": "UDim",
|
"Type": "BrickColor",
|
||||||
"Value": [
|
"Value": 1004
|
||||||
1.0,
|
|
||||||
32
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"ty": "UDim"
|
"ty": "BrickColor"
|
||||||
},
|
|
||||||
"Vector2": {
|
|
||||||
"value": {
|
|
||||||
"Type": "Vector2",
|
|
||||||
"Value": [
|
|
||||||
-50.0,
|
|
||||||
50.0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ty": "Vector2"
|
|
||||||
},
|
|
||||||
"Color3": {
|
|
||||||
"value": {
|
|
||||||
"Type": "Color3",
|
|
||||||
"Value": [
|
|
||||||
1.0,
|
|
||||||
2.0,
|
|
||||||
3.0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ty": "Color3"
|
|
||||||
},
|
|
||||||
"Float64": {
|
|
||||||
"value": {
|
|
||||||
"Type": "Float64",
|
|
||||||
"Value": 15123.0
|
|
||||||
},
|
|
||||||
"ty": "Float64"
|
|
||||||
},
|
|
||||||
"UDim2": {
|
|
||||||
"value": {
|
|
||||||
"Type": "UDim2",
|
|
||||||
"Value": [
|
|
||||||
[
|
|
||||||
-1.0,
|
|
||||||
100
|
|
||||||
],
|
|
||||||
[
|
|
||||||
1.0,
|
|
||||||
-100
|
|
||||||
]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ty": "UDim2"
|
|
||||||
},
|
|
||||||
"Region3int16": {
|
|
||||||
"value": {
|
|
||||||
"Type": "Region3int16",
|
|
||||||
"Value": [
|
|
||||||
[
|
|
||||||
-10,
|
|
||||||
-5,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
[
|
|
||||||
5,
|
|
||||||
10,
|
|
||||||
15
|
|
||||||
]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ty": "Region3int16"
|
|
||||||
},
|
},
|
||||||
"CFrame": {
|
"CFrame": {
|
||||||
"value": {
|
"value": {
|
||||||
@@ -289,6 +61,54 @@
|
|||||||
},
|
},
|
||||||
"ty": "CFrame"
|
"ty": "CFrame"
|
||||||
},
|
},
|
||||||
|
"Color3": {
|
||||||
|
"value": {
|
||||||
|
"Type": "Color3",
|
||||||
|
"Value": [
|
||||||
|
1.0,
|
||||||
|
2.0,
|
||||||
|
3.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ty": "Color3"
|
||||||
|
},
|
||||||
|
"Color3uint8": {
|
||||||
|
"value": {
|
||||||
|
"Type": "Color3uint8",
|
||||||
|
"Value": [
|
||||||
|
0,
|
||||||
|
128,
|
||||||
|
255
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ty": "Color3uint8"
|
||||||
|
},
|
||||||
|
"ColorSequence": {
|
||||||
|
"value": {
|
||||||
|
"Type": "ColorSequence",
|
||||||
|
"Value": {
|
||||||
|
"Keypoints": [
|
||||||
|
{
|
||||||
|
"Time": 0.0,
|
||||||
|
"Color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
0.5
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Time": 1.0,
|
||||||
|
"Color": [
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ty": "ColorSequence"
|
||||||
|
},
|
||||||
"Content": {
|
"Content": {
|
||||||
"value": {
|
"value": {
|
||||||
"Type": "Content",
|
"Type": "Content",
|
||||||
@@ -296,7 +116,86 @@
|
|||||||
},
|
},
|
||||||
"ty": "Content"
|
"ty": "Content"
|
||||||
},
|
},
|
||||||
"PhysicalProperties": {
|
"Enum": {
|
||||||
|
"value": {
|
||||||
|
"Type": "Enum",
|
||||||
|
"Value": 1234
|
||||||
|
},
|
||||||
|
"ty": "Enum"
|
||||||
|
},
|
||||||
|
"Faces": {
|
||||||
|
"value": {
|
||||||
|
"Type": "Faces",
|
||||||
|
"Value": [
|
||||||
|
"Right",
|
||||||
|
"Top",
|
||||||
|
"Back",
|
||||||
|
"Left",
|
||||||
|
"Bottom",
|
||||||
|
"Front"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ty": "Faces"
|
||||||
|
},
|
||||||
|
"Float32": {
|
||||||
|
"value": {
|
||||||
|
"Type": "Float32",
|
||||||
|
"Value": 15.0
|
||||||
|
},
|
||||||
|
"ty": "Float32"
|
||||||
|
},
|
||||||
|
"Float64": {
|
||||||
|
"value": {
|
||||||
|
"Type": "Float64",
|
||||||
|
"Value": 15123.0
|
||||||
|
},
|
||||||
|
"ty": "Float64"
|
||||||
|
},
|
||||||
|
"Int32": {
|
||||||
|
"value": {
|
||||||
|
"Type": "Int32",
|
||||||
|
"Value": 6014
|
||||||
|
},
|
||||||
|
"ty": "Int32"
|
||||||
|
},
|
||||||
|
"Int64": {
|
||||||
|
"value": {
|
||||||
|
"Type": "Int64",
|
||||||
|
"Value": 23491023
|
||||||
|
},
|
||||||
|
"ty": "Int64"
|
||||||
|
},
|
||||||
|
"NumberRange": {
|
||||||
|
"value": {
|
||||||
|
"Type": "NumberRange",
|
||||||
|
"Value": [
|
||||||
|
-36.0,
|
||||||
|
94.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ty": "NumberRange"
|
||||||
|
},
|
||||||
|
"NumberSequence": {
|
||||||
|
"value": {
|
||||||
|
"Type": "NumberSequence",
|
||||||
|
"Value": {
|
||||||
|
"Keypoints": [
|
||||||
|
{
|
||||||
|
"Time": 0.0,
|
||||||
|
"Value": 5.0,
|
||||||
|
"Envelope": 2.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Time": 1.0,
|
||||||
|
"Value": 22.0,
|
||||||
|
"Envelope": 0.0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ty": "NumberSequence"
|
||||||
|
},
|
||||||
|
"PhysicalProperties-Custom": {
|
||||||
"value": {
|
"value": {
|
||||||
"Type": "PhysicalProperties",
|
"Type": "PhysicalProperties",
|
||||||
"Value": {
|
"Value": {
|
||||||
@@ -309,6 +208,31 @@
|
|||||||
},
|
},
|
||||||
"ty": "PhysicalProperties"
|
"ty": "PhysicalProperties"
|
||||||
},
|
},
|
||||||
|
"PhysicalProperties-Default": {
|
||||||
|
"value": {
|
||||||
|
"Type": "PhysicalProperties",
|
||||||
|
"Value": "Default"
|
||||||
|
},
|
||||||
|
"ty": "PhysicalProperties"
|
||||||
|
},
|
||||||
|
"Ray": {
|
||||||
|
"value": {
|
||||||
|
"Type": "Ray",
|
||||||
|
"Value": {
|
||||||
|
"Origin": [
|
||||||
|
1.0,
|
||||||
|
2.0,
|
||||||
|
3.0
|
||||||
|
],
|
||||||
|
"Direction": [
|
||||||
|
4.0,
|
||||||
|
5.0,
|
||||||
|
6.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ty": "Ray"
|
||||||
|
},
|
||||||
"Rect": {
|
"Rect": {
|
||||||
"value": {
|
"value": {
|
||||||
"Type": "Rect",
|
"Type": "Rect",
|
||||||
@@ -325,6 +249,67 @@
|
|||||||
},
|
},
|
||||||
"ty": "Rect"
|
"ty": "Rect"
|
||||||
},
|
},
|
||||||
|
"Region3int16": {
|
||||||
|
"value": {
|
||||||
|
"Type": "Region3int16",
|
||||||
|
"Value": [
|
||||||
|
[
|
||||||
|
-10,
|
||||||
|
-5,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
5,
|
||||||
|
10,
|
||||||
|
15
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ty": "Region3int16"
|
||||||
|
},
|
||||||
|
"String": {
|
||||||
|
"value": {
|
||||||
|
"Type": "String",
|
||||||
|
"Value": "Hello, world!"
|
||||||
|
},
|
||||||
|
"ty": "String"
|
||||||
|
},
|
||||||
|
"UDim": {
|
||||||
|
"value": {
|
||||||
|
"Type": "UDim",
|
||||||
|
"Value": [
|
||||||
|
1.0,
|
||||||
|
32
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ty": "UDim"
|
||||||
|
},
|
||||||
|
"UDim2": {
|
||||||
|
"value": {
|
||||||
|
"Type": "UDim2",
|
||||||
|
"Value": [
|
||||||
|
[
|
||||||
|
-1.0,
|
||||||
|
100
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0,
|
||||||
|
-100
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ty": "UDim2"
|
||||||
|
},
|
||||||
|
"Vector2": {
|
||||||
|
"value": {
|
||||||
|
"Type": "Vector2",
|
||||||
|
"Value": [
|
||||||
|
-50.0,
|
||||||
|
50.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ty": "Vector2"
|
||||||
|
},
|
||||||
"Vector2int16": {
|
"Vector2int16": {
|
||||||
"value": {
|
"value": {
|
||||||
"Type": "Vector2int16",
|
"Type": "Vector2int16",
|
||||||
@@ -334,5 +319,27 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"ty": "Vector2int16"
|
"ty": "Vector2int16"
|
||||||
|
},
|
||||||
|
"Vector3": {
|
||||||
|
"value": {
|
||||||
|
"Type": "Vector3",
|
||||||
|
"Value": [
|
||||||
|
-300.0,
|
||||||
|
0.0,
|
||||||
|
1500.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ty": "Vector3"
|
||||||
|
},
|
||||||
|
"Vector3int16": {
|
||||||
|
"value": {
|
||||||
|
"Type": "Vector3int16",
|
||||||
|
"Value": [
|
||||||
|
60,
|
||||||
|
37,
|
||||||
|
-450
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ty": "Vector3int16"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17708,6 +17708,10 @@
|
|||||||
"Type": "Bool",
|
"Type": "Bool",
|
||||||
"Value": true
|
"Value": true
|
||||||
},
|
},
|
||||||
|
"AssetId": {
|
||||||
|
"Type": "Content",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
"AttributesSerialize": {
|
"AttributesSerialize": {
|
||||||
"Type": "BinaryString",
|
"Type": "BinaryString",
|
||||||
"Value": ""
|
"Value": ""
|
||||||
@@ -19100,6 +19104,19 @@
|
|||||||
"Tags": [],
|
"Tags": [],
|
||||||
"Superclass": "TriangleMeshPart",
|
"Superclass": "TriangleMeshPart",
|
||||||
"Properties": {
|
"Properties": {
|
||||||
|
"AssetId": {
|
||||||
|
"Name": "AssetId",
|
||||||
|
"Scriptability": "None",
|
||||||
|
"DataType": {
|
||||||
|
"Value": "Content"
|
||||||
|
},
|
||||||
|
"Tags": [],
|
||||||
|
"Kind": {
|
||||||
|
"Canonical": {
|
||||||
|
"Serialization": "Serializes"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"RenderFidelity": {
|
"RenderFidelity": {
|
||||||
"Name": "RenderFidelity",
|
"Name": "RenderFidelity",
|
||||||
"Scriptability": "ReadWrite",
|
"Scriptability": "ReadWrite",
|
||||||
@@ -19161,6 +19178,10 @@
|
|||||||
"Type": "Bool",
|
"Type": "Bool",
|
||||||
"Value": false
|
"Value": false
|
||||||
},
|
},
|
||||||
|
"AssetId": {
|
||||||
|
"Type": "Content",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
"AttributesSerialize": {
|
"AttributesSerialize": {
|
||||||
"Type": "BinaryString",
|
"Type": "BinaryString",
|
||||||
"Value": ""
|
"Value": ""
|
||||||
@@ -37376,6 +37397,10 @@
|
|||||||
"Type": "Bool",
|
"Type": "Bool",
|
||||||
"Value": false
|
"Value": false
|
||||||
},
|
},
|
||||||
|
"AssetId": {
|
||||||
|
"Type": "Content",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
"AttributesSerialize": {
|
"AttributesSerialize": {
|
||||||
"Type": "BinaryString",
|
"Type": "BinaryString",
|
||||||
"Value": ""
|
"Value": ""
|
||||||
|
|||||||
Reference in New Issue
Block a user