Client Difference Log
API Changes
Added Class LocalAsset : Instance [NotCreatable] [NotReplicated]
Added Property string LocalAsset.FileName {PluginSecurity} [Hidden] [ReadOnly] [NotReplicated]
Added Property int64 LocalAsset.FileSize {PluginSecurity} [Hidden] [ReadOnly] [NotReplicated]
Added Function string LocalAsset:GetFileContentsBinary() {PluginSecurity}
Added Function Content LocalAsset:GetTemporaryId() {PluginSecurity}
Added Property bool Humanoid.BreakJointsOnDeath
Added Property bool Studio.Camera Zoom to Mouse Position
Added Function Instance LocalizationService:GetTranslatorForLocaleAsync(string locale) [Yields]
Added Function Instance Players:GetHumanoidDescriptionFromOutfitId(int64 outfitId) [Yields]
Added Function Instance Players:GetHumanoidDescriptionFromUserId(int64 userId) [Yields]
Added Function Instance PluginToolbar:CreateButtonWithId(string buttonId, string text, string tooltip, string iconname) {PluginSecurity}
Added Function Instance StudioService:PromptImportLocalAsset(string prompt, Array fileTypeFilter = {}) {PluginSecurity} [Yields]
Added Function Objects StudioService:PromptImportLocalAssets(string prompt, Array fileTypeFilter = {}) {PluginSecurity} [Yields]
Added Tag [Deprecated] to Function Attachment:GetAxis
Added Tag [Deprecated] to Function Attachment:GetSecondaryAxis
Added Tag [Deprecated] to Function Attachment:SetAxis
Added Tag [Deprecated] to Function Attachment:SetSecondaryAxis
Added Tag [Hidden] to Property Attachment.WorldRotation
Added Tags [Hidden] [Deprecated] to Property Attachment.Rotation
Changed the serialization of Property Attachment.Rotation
from: [<📁> Load-only]
to: [<🕒> Runtime-only]
Changed the serialization of Property Attachment.WorldAxis
from: [<🕒> Runtime-only]
to: [<📁> Load-only]
Changed the serialization of Property Attachment.WorldCFrame
from: [<🕒> Runtime-only]
to: [<📁> Load-only]
Changed the serialization of Property Attachment.WorldOrientation
from: [<🕒> Runtime-only]
to: [<📁> Load-only]
Changed the serialization of Property Attachment.WorldPosition
from: [<🕒> Runtime-only]
to: [<📁> Load-only]
Changed the serialization of Property Attachment.WorldSecondaryAxis
from: [<🕒> Runtime-only]
to: [<📁> Load-only]
Removed Property bool PhysicsSettings.PhysicsAnalyzerEnabled {PluginSecurity} [ReadOnly] [NotReplicated]
Removed Function bool Workspace:GetPhysicsAnalyzerBreakOnIssue() {PluginSecurity}
Removed Function Objects Workspace:GetPhysicsAnalyzerIssue(int index) {PluginSecurity}
Removed Function void Workspace:SetPhysicsAnalyzerBreakOnIssue(bool enable) {PluginSecurity}
Removed Event Workspace.PhysicsAnalyzerIssuesFound(int count) {PluginSecurity}
Removed Tag [ReadOnly] from Property Attachment.WorldAxis
Removed Tag [ReadOnly] from Property Attachment.WorldCFrame
Removed Tag [ReadOnly] from Property Attachment.WorldOrientation
Removed Tag [ReadOnly] from Property Attachment.WorldPosition
Removed Tag [ReadOnly] from Property Attachment.WorldSecondaryAxis
(Click here for a syntax highlighted version!)
What is this?
Also glad to see scripts will be grayed out when disabled.
Looks like the note wasn’t elaborated upon. This is referring to a bug with the Lua Toolbox where inserting a Sky wouldn’t parent it inside of the Lighting service.
Just in time for Nexus Admin’s refactoring! Glad to see this was added considering how much I use it in Python.
Does string.split
use string patterns or does it use plain text for splitting?
HumanoidDescription is a new object that represents components of a Humanoid’s appearance, such as accessories, animations, packages, etc.
I believe the goal of this system is to make it easier for developers to apply existing/custom costumes to R15 rigs, without needing to cover all existing/future edge-cases with the system.
There are lots of components to Roblox’s avatar system, each with their quirks and rules, so it helps to have it all centralized in a system that’s easy for developers to use, as it interfaces with the C++ code that assembles avatars in the first place!
For example, if you wanted to apply a bundle to a character using just the id of the bundle, you could have a function that looks something like this:
local AssetService = game:GetService("AssetService")
local Players = game:GetService("Players")
local function applyBundle(humanoid, bundleId)
local bundleInfo = AssetService:GetBundleDetailsAsync(bundleId)
local outfitId = 0
-- Find the outfit that corresponds with this bundle.
for _,item in pairs(bundleInfo.Items) do
if item.Type == "UserOutfit" then
outfitId = item.Id
break
end
end
if outfitId > 0 then
local bundleDesc = Players:GetHumanoidDescriptionFromOutfitId(outfitId)
humanoid:ApplyDescription(bundleDesc)
end
end
The object itself has a lot of properties available at your disposal to define a costume for an avatar.
Here’s an example of what it generates for my avatar.
Interestingly, the accessories are strings that function as a comma separated list of asset ids.
Plain text. The separator is also optional and defaults to ,
.
Local file importing in Studio as temporary assets.
This will be a valuable asset.
I completely overlooked string.split
, time to make more libraries redundant!
My VMF Importer plugin will support this right out of the box :)!
https://twitter.com/CloneTeee1019/status/1083229843079286784
Any possibility on whether or not StartDecalDrag() will be allowed for Developer use?
Its possible that you might not need to.
According to the Lua code that controls asset insertion from the toolbox, there’s a fallback case for when StartDecalDrag fails.
Certainly should be easier, but you’ll still have to manually break the existing joints.
https://twitter.com/CloneTeee1019/status/1083469847256805379
Goodness gracious, it seems that a lot of new features are coming to help facilitate development. I am quite excited. I’ll be noting this for my Monthly Recap rants.
I actually didn’t notice the Humanoid.BreakJointsOnDeath property - this means hooray for corpse-creation, ragdolls and extended after-death effects without hitting edge cases or producing hacky workarounds for the old behaviour (I for one used custom health systems with ValueObjects or clamped health to 0.01 and used custom states if health reaches below 1).
This pack of updates is amazing. But I am still keeping my eye on MessagingService.
This is endlessly cool and I can’t wait to see what others do with LocalAssets.
This doesn’t seem to do what I need it to do.
Any other way to workaround this?
I still feel StartDecalDrag() should be allowed for plugin use.