Release Notes for 369

Notes for Release 369

21 Likes

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!)

11 Likes

image

What is this?

Also glad to see scripts will be grayed out when disabled.

5 Likes


Wasn’t this already the case? What changed?

2 Likes

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.

12 Likes


Just in time for Nexus Admin’s refactoring! Glad to see this was added considering how much I use it in Python.

12 Likes

Does string.split use string patterns or does it use plain text for splitting?

ez ragdolls?

8 Likes

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.

16 Likes

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.

5 Likes

Plain text. The separator is also optional and defaults to ,.

6 Likes

Local file importing in Studio as temporary assets.

This will be a valuable asset.

4 Likes

I completely overlooked string.split, time to make more libraries redundant!

My VMF Importer plugin will support this right out of the box :)!

3 Likes

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.

2 Likes

Certainly should be easier, but you’ll still have to manually break the existing joints.

1 Like

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.

7 Likes

This is endlessly cool and I can’t wait to see what others do with LocalAssets.

2 Likes

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.