diff --git a/CHANGELOG.md b/CHANGELOG.md index 83f385fc..410a7cb0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,8 @@ Making a new release? Simply add the new header with the version and date undern ## Unreleased +## [7.7.0-rc.1] (November 27th, 2025) + * Fixed a bug where passing `--skip-git` to `rojo init` would still create a file named `gitignore.txt` ([#1172]) * A new command `rojo syncback` has been added. It can be used as `rojo syncback [path to project] --input [path to file]`. ([#937]) This command takes a Roblox file and pulls Instances out of it and places them in the correct position in the provided project. @@ -65,13 +67,11 @@ Making a new release? Simply add the new header with the version and date undern - `syncCurrentCamera` is a toggle for whether to sync back the Workspace's CurrentCamera. Defaults to `false`. - `syncUnscriptable` is a toggle for whether to sync back properties that cannot be set by the Roblox Studio plugin. Defaults to `true`. - If you are used to the `UpliftGames` version of this feature, there are a few notable differences: - - `syncUnscriptable` defaults to `true` instead of `false` - - `ignoreTrees` doesn't require the root of the project's name in it. * Fixed bugs and improved performance & UX for the script diff viewer ([#994]) * Rebuilt the internal communication between the server and plugin to use [websockets](https://devforum.roblox.com/t/websockets-support-in-studio-is-now-available/4021932/1) instead of [long polling](https://en.wikipedia.org/wiki/Push_technology#Long_polling) ([#1142]) * Added support for `.jsonc` files for all JSON-related files (e.g. `.project.jsonc` and `.meta.jsonc`) to accompany JSONC support ([#1159]) +[7.7.0-rc.1]: https://github.com/rojo-rbx/rojo/releases/tag/v7.7.0-rc.1 [#937]: https://github.com/rojo-rbx/rojo/pull/937 [#994]: https://github.com/rojo-rbx/rojo/pull/994 [#1142]: https://github.com/rojo-rbx/rojo/pull/1142 diff --git a/Cargo.lock b/Cargo.lock index 000115ac..dd4237bc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1792,9 +1792,9 @@ dependencies = [ [[package]] name = "rbx_binary" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d419f67c8012bf83569086e1208c541478b3b8e4f523deaa0b80d723fb5ef22" +checksum = "95e2b4a187679aa3d169ed50ed5eedbf26383459fec83bf1232c2934b35b24de" dependencies = [ "ahash", "log", @@ -1810,9 +1810,9 @@ dependencies = [ [[package]] name = "rbx_dom_weak" -version = "4.0.0" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc74878a4a801afc8014b14ede4b38015a13de5d29ab0095d5ed284a744253f6" +checksum = "a7a5c48c2605913fbb1986bceb3e18ef9f12eadedb7edd62bf9fb03447b57c46" dependencies = [ "ahash", "rbx_types", @@ -1822,9 +1822,9 @@ dependencies = [ [[package]] name = "rbx_reflection" -version = "6.0.0" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "565dd3430991f35443fa6d23cc239fade2110c5089deb6bae5de77c400df4fd2" +checksum = "84f635e79d5d710c82e9049faa57d32945e76a6b041280dc6274f732c0dd78dc" dependencies = [ "rbx_types", "serde", @@ -1833,9 +1833,9 @@ dependencies = [ [[package]] name = "rbx_reflection_database" -version = "2.0.1+roblox-697" +version = "2.0.2+roblox-700" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d69035a14b103c5a9b8bc6a61d30f4ee6f2608afdee137dae09b26037dba5dc8" +checksum = "de2753b896d08d74316d8b89fbeb2470ebd3986404ebba82fa85fcc0330955cf" dependencies = [ "dirs 5.0.1", "log", @@ -1846,9 +1846,9 @@ dependencies = [ [[package]] name = "rbx_types" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03220ffce2bd06ad04f77a003cb807f2e5b2a18e97623066a5ac735a978398af" +checksum = "de3b89eefdd71f5e2a25543b1ead9f6ea2ed3fdfba8b397cbdb0de053eb2463e" dependencies = [ "base64 0.13.1", "bitflags 1.3.2", @@ -1861,9 +1861,9 @@ dependencies = [ [[package]] name = "rbx_xml" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be6c302cefe9c92ed09bcbb075cd24379271de135b0af331409a64c2ea3646ee" +checksum = "e0cbaf53b44c9cc0fad1e5dc8ac63fb32fa0ecaa26d32b269cebe4dca8b7b4de" dependencies = [ "ahash", "base64 0.13.1", @@ -2037,7 +2037,7 @@ dependencies = [ [[package]] name = "rojo" -version = "7.7.0-prealpha" +version = "7.7.0-rc.1" dependencies = [ "anyhow", "backtrace", diff --git a/Cargo.toml b/Cargo.toml index 9fcea18d..c5b62e16 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rojo" -version = "7.7.0-prealpha" +version = "7.7.0-rc.1" rust-version = "1.88" authors = [ "Lucien Greathouse ", @@ -49,17 +49,19 @@ harness = false memofs = { version = "0.3.0", path = "crates/memofs" } # These dependencies can be uncommented when working on rbx-dom simultaneously -# rbx_binary = { path = "../rbx-dom/rbx_binary" } +# rbx_binary = { path = "../rbx-dom/rbx_binary", features = [ +# "unstable_text_format", +# ] } # rbx_dom_weak = { path = "../rbx-dom/rbx_dom_weak" } # rbx_reflection = { path = "../rbx-dom/rbx_reflection" } # rbx_reflection_database = { path = "../rbx-dom/rbx_reflection_database" } # rbx_xml = { path = "../rbx-dom/rbx_xml" } -rbx_binary = { version = "2.0.0", features = ["unstable_text_format"] } -rbx_dom_weak = "4.0.0" -rbx_reflection = "6.0.0" -rbx_reflection_database = "2.0.1" -rbx_xml = "2.0.0" +rbx_binary = { version = "2.0.1", features = ["unstable_text_format"] } +rbx_dom_weak = "4.1.0" +rbx_reflection = "6.1.0" +rbx_reflection_database = "2.0.2" +rbx_xml = "2.0.1" anyhow = "1.0.80" backtrace = "0.3.69" diff --git a/plugin/Version.txt b/plugin/Version.txt index 6bb62d27..baee60f4 100644 --- a/plugin/Version.txt +++ b/plugin/Version.txt @@ -1 +1 @@ -7.7.0-prealpha \ No newline at end of file +7.7.0-rc.1 \ No newline at end of file diff --git a/plugin/rbx_dom_lua/base64.lua b/plugin/rbx_dom_lua/base64.lua index 0ea19d39..0c6f2abc 100644 --- a/plugin/rbx_dom_lua/base64.lua +++ b/plugin/rbx_dom_lua/base64.lua @@ -1,139 +1,10 @@ --- Thanks to Tiffany352 for this base64 implementation! - -local floor = math.floor -local char = string.char - -local function encodeBase64(str) - local out = {} - local nOut = 0 - local alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" - local strLen = #str - - -- 3 octets become 4 hextets - for i = 1, strLen - 2, 3 do - local b1, b2, b3 = str:byte(i, i + 3) - local word = b3 + b2 * 256 + b1 * 256 * 256 - - local h4 = word % 64 + 1 - word = floor(word / 64) - local h3 = word % 64 + 1 - word = floor(word / 64) - local h2 = word % 64 + 1 - word = floor(word / 64) - local h1 = word % 64 + 1 - - out[nOut + 1] = alphabet:sub(h1, h1) - out[nOut + 2] = alphabet:sub(h2, h2) - out[nOut + 3] = alphabet:sub(h3, h3) - out[nOut + 4] = alphabet:sub(h4, h4) - nOut = nOut + 4 - end - - local remainder = strLen % 3 - - if remainder == 2 then - -- 16 input bits -> 3 hextets (2 full, 1 partial) - local b1, b2 = str:byte(-2, -1) - -- partial is 4 bits long, leaving 2 bits of zero padding -> - -- offset = 4 - local word = b2 * 4 + b1 * 4 * 256 - - local h3 = word % 64 + 1 - word = floor(word / 64) - local h2 = word % 64 + 1 - word = floor(word / 64) - local h1 = word % 64 + 1 - - out[nOut + 1] = alphabet:sub(h1, h1) - out[nOut + 2] = alphabet:sub(h2, h2) - out[nOut + 3] = alphabet:sub(h3, h3) - out[nOut + 4] = "=" - elseif remainder == 1 then - -- 8 input bits -> 2 hextets (2 full, 1 partial) - local b1 = str:byte(-1, -1) - -- partial is 2 bits long, leaving 4 bits of zero padding -> - -- offset = 16 - local word = b1 * 16 - - local h2 = word % 64 + 1 - word = floor(word / 64) - local h1 = word % 64 + 1 - - out[nOut + 1] = alphabet:sub(h1, h1) - out[nOut + 2] = alphabet:sub(h2, h2) - out[nOut + 3] = "=" - out[nOut + 4] = "=" - end - -- if the remainder is 0, then no work is needed - - return table.concat(out, "") -end - -local function decodeBase64(str) - local out = {} - local nOut = 0 - local alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" - local strLen = #str - local acc = 0 - local nAcc = 0 - - local alphabetLut = {} - for i = 1, #alphabet do - alphabetLut[alphabet:sub(i, i)] = i - 1 - end - - -- 4 hextets become 3 octets - for i = 1, strLen do - local ch = str:sub(i, i) - local byte = alphabetLut[ch] - if byte then - acc = acc * 64 + byte - nAcc = nAcc + 1 - end - - if nAcc == 4 then - local b3 = acc % 256 - acc = floor(acc / 256) - local b2 = acc % 256 - acc = floor(acc / 256) - local b1 = acc % 256 - - out[nOut + 1] = char(b1) - out[nOut + 2] = char(b2) - out[nOut + 3] = char(b3) - nOut = nOut + 3 - nAcc = 0 - acc = 0 - end - end - - if nAcc == 3 then - -- 3 hextets -> 16 bit output - acc = acc * 64 - acc = floor(acc / 256) - local b2 = acc % 256 - acc = floor(acc / 256) - local b1 = acc % 256 - - out[nOut + 1] = char(b1) - out[nOut + 2] = char(b2) - elseif nAcc == 2 then - -- 2 hextets -> 8 bit output - acc = acc * 64 - acc = floor(acc / 256) - acc = acc * 64 - acc = floor(acc / 256) - local b1 = acc % 256 - - out[nOut + 1] = char(b1) - elseif nAcc == 1 then - error("Base64 has invalid length") - end - - return table.concat(out, "") -end +local EncodingService = game:GetService("EncodingService") return { - decode = decodeBase64, - encode = encodeBase64, + decode = function(input: string) + return buffer.tostring(EncodingService:Base64Decode(buffer.fromstring(input))) + end, + encode = function(input: string) + return buffer.tostring(EncodingService:Base64Encode(buffer.fromstring(input))) + end, } diff --git a/plugin/rbx_dom_lua/customProperties.lua b/plugin/rbx_dom_lua/customProperties.lua index dc41a2b8..a5b96f99 100644 --- a/plugin/rbx_dom_lua/customProperties.lua +++ b/plugin/rbx_dom_lua/customProperties.lua @@ -208,4 +208,30 @@ return { end, }, }, + StyleRule = { + PropertiesSerialize = { + read = function(instance: StyleRule) + return true, instance:GetProperties() + end, + write = function(instance: StyleRule, _, value: { [any]: any }) + if typeof(value) ~= "table" then + return false, Error.new(Error.Kind.CannotParseBinaryString) + end + + local existing = instance:GetProperties() + + for itemName, itemValue in pairs(value) do + instance:SetProperty(itemName, itemValue) + end + + for existingItemName in pairs(existing) do + if value[existingItemName] == nil then + instance:SetProperty(existingItemName, nil) + end + end + + return true + end, + }, + }, } diff --git a/plugin/rbx_dom_lua/database.json b/plugin/rbx_dom_lua/database.json index 842e3848..1856f932 100644 --- a/plugin/rbx_dom_lua/database.json +++ b/plugin/rbx_dom_lua/database.json @@ -1,9 +1,9 @@ { "Version": [ 0, - 697, + 700, 0, - 6970925 + 7000935 ], "Classes": { "Accessory": { @@ -2098,7 +2098,7 @@ "UniqueId": "00000000000000000000000000000000" }, "InputPinData": { - "BinaryString": "" + "BinaryString": "AQAAAAAAAAA=" }, "NodeType": { "Enum": 0 @@ -5807,6 +5807,19 @@ } } }, + "AutoPlay": { + "Name": "AutoPlay", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "IsMutedForCapture": { "Name": "IsMutedForCapture", "Scriptability": "None", @@ -5957,6 +5970,9 @@ "AutoLoad": { "Bool": true }, + "AutoPlay": { + "Bool": false + }, "Capabilities": { "SecurityCapabilities": 0 }, @@ -13098,6 +13114,19 @@ } } }, + "HeadShape": { + "Name": "HeadShape", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "String" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "Instance": { "Name": "Instance", "Scriptability": "ReadWrite", @@ -13135,6 +13164,9 @@ 0.0 ] }, + "HeadShape": { + "String": "" + }, "HistoryId": { "UniqueId": "00000000000000000000000000000000" }, @@ -23424,7 +23456,7 @@ "Orientation": { "Vector3": [ -0.0, - 180.0, + 179.99998, 90.0 ] }, @@ -24514,6 +24546,22 @@ "Serialization": "DoesNotSerialize" } } + }, + "SelectionMode": { + "Name": "SelectionMode", + "Scriptability": "None", + "DataType": { + "Enum": "ExperienceStateCaptureSelectionMode" + }, + "Tags": [ + "Hidden", + "NotReplicated" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } } }, "DefaultProperties": { @@ -27719,25 +27767,12 @@ "DataType": { "Value": "Bool" }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "VideoRecording": { - "Name": "VideoRecording", - "Scriptability": "None", - "DataType": { - "Value": "Bool" - }, "Tags": [ - "NotReplicated" + "Deprecated" ], "Kind": { "Canonical": { - "Serialization": "DoesNotSerialize" + "Serialization": "Serializes" } } } @@ -39425,6 +39460,9 @@ "SmoothingAngle": { "Float32": 0.0 }, + "SolidMeshHolder": { + "NetAssetRef": "" + }, "SourceAssetId": { "Int64": -1 }, @@ -46393,6 +46431,9 @@ "SmoothingAngle": { "Float32": 0.0 }, + "SolidMeshHolder": { + "NetAssetRef": "" + }, "SourceAssetId": { "Int64": -1 }, @@ -47207,6 +47248,7 @@ "OpenCloudApiV1": { "Name": "OpenCloudApiV1", "Tags": [ + "Deprecated", "NotCreatable", "NotReplicated" ], @@ -47227,6 +47269,7 @@ "OpenCloudService": { "Name": "OpenCloudService", "Tags": [ + "Deprecated", "NotCreatable", "NotReplicated", "Service" @@ -48456,23 +48499,6 @@ } } }, - "SerializedCSGTree": { - "Name": "SerializedCSGTree", - "Scriptability": "None", - "DataType": { - "Value": "SharedString" - }, - "Tags": [ - "Hidden", - "NotReplicated", - "NotScriptable" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, "SerializedOperationGraph": { "Name": "SerializedOperationGraph", "Scriptability": "None", @@ -48798,6 +48824,9 @@ "SmoothingAngle": { "Float32": 0.0 }, + "SolidMeshHolder": { + "NetAssetRef": "" + }, "SourceAssetId": { "Int64": -1 }, @@ -52716,6 +52745,22 @@ } } }, + "InputBindingMappingsRaw": { + "Name": "InputBindingMappingsRaw", + "Scriptability": "None", + "DataType": { + "Value": "BinaryString" + }, + "Tags": [ + "Hidden", + "NotScriptable" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, "ScreenOrientation": { "Name": "ScreenOrientation", "Scriptability": "ReadWrite", @@ -54707,6 +54752,158 @@ } } }, + "PyramidHandleAdornment": { + "Name": "PyramidHandleAdornment", + "Tags": [], + "Superclass": "HandleAdornment", + "Properties": { + "Height": { + "Name": "Height", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "Shading": { + "Name": "Shading", + "Scriptability": "ReadWrite", + "DataType": { + "Enum": "AdornShading" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "Sides": { + "Name": "Sides", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Int32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "Size": { + "Name": "Size", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + } + }, + "DefaultProperties": { + "AdornCullingMode": { + "Enum": 0 + }, + "AlwaysOnTop": { + "Bool": false + }, + "Archivable": { + "Bool": true + }, + "Attributes": { + "Attributes": {} + }, + "CFrame": { + "CFrame": { + "position": [ + 0.0, + 0.0, + 0.0 + ], + "orientation": [ + [ + 1.0, + 0.0, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ] + } + }, + "Capabilities": { + "SecurityCapabilities": 0 + }, + "Color3": { + "Color3": [ + 0.050980393, + 0.4117647, + 0.6745098 + ] + }, + "Height": { + "Float32": 2.0 + }, + "HistoryId": { + "UniqueId": "00000000000000000000000000000000" + }, + "Sandboxed": { + "Bool": false + }, + "Shading": { + "Enum": 0 + }, + "Sides": { + "Int32": 4 + }, + "Size": { + "Float32": 1.0 + }, + "SizeRelativeOffset": { + "Vector3": [ + 0.0, + 0.0, + 0.0 + ] + }, + "SourceAssetId": { + "Int64": -1 + }, + "Tags": { + "Tags": [] + }, + "Transparency": { + "Float32": 0.0 + }, + "UniqueId": { + "UniqueId": "00000000000000000000000000000000" + }, + "Visible": { + "Bool": true + }, + "ZIndex": { + "Int32": -1 + } + } + }, "QWidgetPluginGui": { "Name": "QWidgetPluginGui", "Tags": [ @@ -58222,22 +58419,6 @@ } } }, - "PredictionState": { - "Name": "PredictionState", - "Scriptability": "Read", - "DataType": { - "Enum": "PredictionState" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, "RunState": { "Name": "RunState", "Scriptability": "ReadWrite", @@ -63152,19 +63333,6 @@ } } }, - "AudioPlayerVolumeFix": { - "Name": "AudioPlayerVolumeFix", - "Scriptability": "None", - "DataType": { - "Enum": "RolloutState" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, "CharacterSoundsUseNewApi": { "Name": "CharacterSoundsUseNewApi", "Scriptability": "ReadWrite", @@ -63290,9 +63458,6 @@ "AudioApiByDefault": { "Enum": 0 }, - "AudioPlayerVolumeFix": { - "Enum": 0 - }, "Capabilities": { "SecurityCapabilities": 0 }, @@ -64952,6 +65117,19 @@ } } }, + "CharacterBreakJointsOnDeath": { + "Name": "CharacterBreakJointsOnDeath", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "CharacterJumpHeight": { "Name": "CharacterJumpHeight", "Scriptability": "ReadWrite", @@ -65032,6 +65210,21 @@ } } }, + "CreateDefaultPlayerModule": { + "Name": "CreateDefaultPlayerModule", + "Scriptability": "None", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "NotScriptable" + ], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "DevCameraOcclusionMode": { "Name": "DevCameraOcclusionMode", "Scriptability": "ReadWrite", @@ -65460,9 +65653,7 @@ "DataType": { "Enum": "CharacterControlMode" }, - "Tags": [ - "NotBrowsable" - ], + "Tags": [], "Kind": { "Canonical": { "Serialization": "Serializes" @@ -65482,21 +65673,6 @@ } } }, - "RagdollDeath": { - "Name": "RagdollDeath", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [ - "NotBrowsable" - ], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, "UserEmotesEnabled": { "Name": "UserEmotesEnabled", "Scriptability": "ReadWrite", @@ -65539,6 +65715,9 @@ "Capabilities": { "SecurityCapabilities": 0 }, + "CharacterBreakJointsOnDeath": { + "Bool": true + }, "CharacterJumpHeight": { "Float32": 7.2 }, @@ -65557,6 +65736,9 @@ "ClassicDeath": { "Bool": true }, + "CreateDefaultPlayerModule": { + "Bool": true + }, "DevCameraOcclusionMode": { "Enum": 0 }, @@ -65662,9 +65844,6 @@ "NameDisplayDistance": { "Float32": 100.0 }, - "RagdollDeath": { - "Bool": true - }, "Sandboxed": { "Bool": false }, @@ -67295,6 +67474,19 @@ } } }, + "EnableFindOnType": { + "Name": "EnableFindOnType", + "Scriptability": "None", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "EnableIndentationRulers": { "Name": "EnableIndentationRulers", "Scriptability": "None", @@ -68836,6 +69028,19 @@ "Serialization": "Serializes" } } + }, + "LoggingEnabled": { + "Name": "LoggingEnabled", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } } }, "DefaultProperties": { @@ -69335,6 +69540,27 @@ } } }, + "StudioTestService": { + "Name": "StudioTestService", + "Tags": [ + "NotCreatable", + "NotReplicated", + "Service" + ], + "Superclass": "Instance", + "Properties": {}, + "DefaultProperties": { + "Archivable": { + "Bool": true + }, + "HistoryId": { + "UniqueId": "00000000000000000000000000000000" + }, + "UniqueId": { + "UniqueId": "00000000000000000000000000000000" + } + } + }, "StudioTheme": { "Name": "StudioTheme", "Tags": [ @@ -69598,6 +69824,22 @@ } } }, + "ConditionsSerialize": { + "Name": "ConditionsSerialize", + "Scriptability": "None", + "DataType": { + "Value": "BinaryString" + }, + "Tags": [ + "Hidden", + "NotScriptable" + ], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "IsActive": { "Name": "IsActive", "Scriptability": "Read", @@ -69689,9 +69931,9 @@ }, "PropertiesSerialize": { "Name": "PropertiesSerialize", - "Scriptability": "None", + "Scriptability": "Custom", "DataType": { - "Value": "BinaryString" + "Value": "Attributes" }, "Tags": [ "Hidden", @@ -69699,7 +69941,9 @@ ], "Kind": { "Canonical": { - "Serialization": "Serializes" + "Serialization": { + "SerializesAs": "PropertiesSerialize" + } } } }, @@ -69750,7 +69994,7 @@ "Int32": 0 }, "PropertiesSerialize": { - "BinaryString": "AAAAAA==" + "Attributes": {} }, "Sandboxed": { "Bool": false @@ -74889,7 +75133,7 @@ "SecurityCapabilities": 0 }, "ChatTranslationFTUXShown": { - "Bool": false + "Bool": true }, "ChatTranslationToggleEnabled": { "Bool": false @@ -76041,6 +76285,38 @@ "Serialization": "DoesNotSerialize" } } + }, + "HasActiveUser": { + "Name": "HasActiveUser", + "Scriptability": "None", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "VoiceChatRestrictionStatus": { + "Name": "VoiceChatRestrictionStatus", + "Scriptability": "None", + "DataType": { + "Enum": "ChatRestrictionStatus" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } } }, "DefaultProperties": { @@ -77457,6 +77733,7 @@ }, "Tags": [ "Hidden", + "NotReplicated", "NotScriptable" ], "Kind": { @@ -80464,6 +80741,9 @@ "SmoothingAngle": { "Float32": 0.0 }, + "SolidMeshHolder": { + "NetAssetRef": "" + }, "SourceAssetId": { "Int64": -1 }, @@ -84580,6 +84860,83 @@ } } }, + "VideoSampler": { + "Name": "VideoSampler", + "Tags": [ + "NotCreatable" + ], + "Superclass": "Object", + "Properties": { + "TimeLength": { + "Name": "TimeLength", + "Scriptability": "Read", + "DataType": { + "Value": "Float64" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "VideoContent": { + "Name": "VideoContent", + "Scriptability": "Read", + "DataType": { + "Value": "Content" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + } + }, + "DefaultProperties": {} + }, + "VideoScreenCaptureService": { + "Name": "VideoScreenCaptureService", + "Tags": [ + "NotCreatable", + "Service" + ], + "Superclass": "Instance", + "Properties": {}, + "DefaultProperties": { + "Archivable": { + "Bool": true + }, + "Attributes": { + "Attributes": {} + }, + "Capabilities": { + "SecurityCapabilities": 0 + }, + "HistoryId": { + "UniqueId": "00000000000000000000000000000000" + }, + "Sandboxed": { + "Bool": false + }, + "SourceAssetId": { + "Int64": -1 + }, + "Tags": { + "Tags": [] + }, + "UniqueId": { + "UniqueId": "00000000000000000000000000000000" + } + } + }, "VideoService": { "Name": "VideoService", "Tags": [ @@ -87257,7 +87614,7 @@ "UniqueId": "00000000000000000000000000000000" }, "UseNewLuauTypeSolver": { - "Enum": 0 + "Enum": 2 }, "WorldPivotData": { "OptionalCFrame": null @@ -88428,6 +88785,23 @@ "Timeout": 10 } }, + "AnimationNodePlayMode": { + "name": "AnimationNodePlayMode", + "items": { + "Loop": 0, + "OnceAndHold": 2, + "OnceAndReset": 3, + "PingPong": 1 + } + }, + "AnimationNodeTransitionType": { + "name": "AnimationNodeTransitionType", + "items": { + "CrossFade": 0, + "DeadBlend": 2, + "InertialBlend": 1 + } + }, "AnimationNodeType": { "name": "AnimationNodeType", "items": { @@ -88607,10 +88981,12 @@ "EarAccessory": 57, "EmoteAnimation": 61, "EyeAccessory": 58, + "EyeMakeup": 90, "EyebrowAccessory": 76, "EyelashAccessory": 77, "Face": 18, "FaceAccessory": 42, + "FaceMakeup": 88, "FallAnimation": 50, "FontFamily": 73, "FrontAccessory": 45, @@ -88626,6 +89002,7 @@ "LeftArm": 29, "LeftLeg": 30, "LeftShoeAccessory": 70, + "LipMakeup": 89, "Lua": 5, "Mesh": 4, "MeshPart": 40, @@ -88759,10 +89136,12 @@ "DressSkirtAccessory": 72, "DynamicHead": 79, "EmoteAnimation": 61, + "EyeMakeup": 90, "EyebrowAccessory": 76, "EyelashAccessory": 77, "Face": 18, "FaceAccessory": 42, + "FaceMakeup": 88, "FallAnimation": 50, "FrontAccessory": 45, "Gear": 19, @@ -88775,6 +89154,7 @@ "LeftArm": 29, "LeftLeg": 30, "LeftShoeAccessory": 70, + "LipMakeup": 89, "MoodAnimation": 78, "NeckAccessory": 43, "Pants": 12, @@ -89501,6 +89881,7 @@ "DisconnectSecurityKeyMismatch": 258, "DisconnectSendPacketError": 262, "DisconnectTimeout": 266, + "DisconnectVerboselyModeratedGame": 309, "DisconnectWrongVersion": 280, "DisconnectionNotification": 308, "IPRecentlyConnected": 8, @@ -89657,9 +90038,17 @@ "GetVersionAsync": 7, "ListAsync": 6, "OnUpdate": 5, + "OrderedList": 15, + "OrderedRead": 13, + "OrderedRemove": 16, + "OrderedWrite": 14, "RemoveVersionAsync": 8, "SetIncrementAsync": 1, "SetIncrementSortedAsync": 4, + "StandardList": 11, + "StandardRead": 9, + "StandardRemove": 12, + "StandardWrite": 10, "UpdateAsync": 2 } }, @@ -90001,6 +90390,13 @@ "Unpublished": 3 } }, + "ExperienceStateCaptureSelectionMode": { + "name": "ExperienceStateCaptureSelectionMode", + "items": { + "Default": 0, + "SafetyHighlightMode": 1 + } + }, "ExperienceStateRecordingLoadMode": { "name": "ExperienceStateRecordingLoadMode", "items": { @@ -90427,6 +90823,15 @@ "Quality": 2 } }, + "GroupMembershipStatus": { + "name": "GroupMembershipStatus", + "items": { + "AlreadyMember": 3, + "JoinRequestPending": 2, + "Joined": 1, + "None": 0 + } + }, "GuiState": { "name": "GuiState", "items": { @@ -91191,9 +91596,10 @@ "LuauTypeCheckMode": { "name": "LuauTypeCheckMode", "items": { - "NoCheck": 0, - "Nonstrict": 1, - "Strict": 2 + "Default": 0, + "NoCheck": 1, + "Nonstrict": 2, + "Strict": 3 } }, "MarketplaceBulkPurchasePromptStatus": { @@ -91865,13 +92271,12 @@ "On": 1 } }, - "PredictionState": { - "name": "PredictionState", + "PredictionStatus": { + "name": "PredictionStatus", "items": { - "Idle": 0, - "Resimulating": 3, - "RollingBack": 2, - "Simulating": 1 + "Authoritative": 0, + "None": 2, + "Predicted": 1 } }, "PreferredInput": { @@ -91976,6 +92381,13 @@ "UploadFailed": 4 } }, + "PromptExperienceDetailsResult": { + "name": "PromptExperienceDetailsResult", + "items": { + "PromptClosed": 0, + "TeleportAttempted": 1 + } + }, "PromptLinkSharingResult": { "name": "PromptLinkSharingResult", "items": { @@ -92264,8 +92676,9 @@ "RigType": { "name": "RigType", "items": { - "Custom": 1, - "None": 2, + "Custom": 2, + "CustomHumanoid": 1, + "None": 3, "R15": 0 } }, @@ -92357,7 +92770,8 @@ "items": { "All": 1, "Collectibles": 2, - "Premium": 3 + "Premium": 3, + "TimedOptions": 4 } }, "SandboxedInstanceMode": { @@ -92661,6 +93075,17 @@ "Poison": 0 } }, + "StepFrequency": { + "name": "StepFrequency", + "items": { + "Hz1": 5, + "Hz10": 3, + "Hz15": 2, + "Hz30": 1, + "Hz5": 4, + "Hz60": 0 + } + }, "StreamOutBehavior": { "name": "StreamOutBehavior", "items": { @@ -93735,6 +94160,15 @@ "Unsupported": 9 } }, + "VideoSampleSize": { + "name": "VideoSampleSize", + "items": { + "Full": 3, + "Large": 2, + "Medium": 1, + "Small": 0 + } + }, "ViewMode": { "name": "ViewMode", "items": {