Release Notes for 398

Notes for Release 398


Client Difference Log

API Changes

Added Property bool NetworkSettings.PrintJoinSizeBreakdown
Added Property Enum<StudioDataModelType> Plugin.HostDataModelType {RobloxScriptSecurity} [ReadOnly] [NotReplicated]
Added Property Enum<TextInputType> TextBox.TextInputType {RobloxScriptSecurity} [<📁> Load-only] [NotReplicated]

Added Function Array ContentProvider:GetFailedRequests() {RobloxScriptSecurity}
Added Function bool GuiService:GetGameplayPausedNotificationEnabled()
Added Function void GuiService:SetGameplayPausedNotificationEnabled(bool enabled)
Added Function void MemStorageService:Fire(string key, string value = "") {RobloxScriptSecurity}
Added Function Instance Plugin:Bind(string key, Function callback) {RobloxScriptSecurity}
Added Function Instance Plugin:BindAndFire(string key, Function callback) {RobloxScriptSecurity}
Added Function void Plugin:Fire(string key, string value = "") {RobloxScriptSecurity}
Added Function string Plugin:GetItem(string key, string defaultValue = "") {RobloxScriptSecurity}
Added Function bool Plugin:HasItem(string key) {RobloxScriptSecurity}
Added Function bool Plugin:RemoveItem(string key) {RobloxScriptSecurity}
Added Function void Plugin:SetItem(string key, string value = "") {RobloxScriptSecurity}
Added Function bool StudioService:IsPluginInstalled(int64 assetId) {RobloxScriptSecurity}
Added Function bool StudioService:IsPluginUpToDate(int64 assetId, int64 currentAssetVersion) {RobloxScriptSecurity}
Added Function void StudioService:TryInstallPlugin(int64 assetId, int64 assetVersionId) {RobloxScriptSecurity} [Yields]

Added Event DraftsService.DraftOutdatedStateChanged(Instance script, bool outdated) {RobloxScriptSecurity}
Added Event GuiService.NetworkPausedEnabledChanged(bool enabled) {RobloxScriptSecurity}
Added Event UserInputService.PointerAction(float wheel, Vector2 pan, float pinch, bool gameProcessedEvent)

Added Enum StudioDataModelType
	Added EnumItem StudioDataModelType.Edit : 0
	Added EnumItem StudioDataModelType.PlayClient : 2
	Added EnumItem StudioDataModelType.PlayServer : 3
	Added EnumItem StudioDataModelType.RobloxPlugin : 4
	Added EnumItem StudioDataModelType.UserPlugin : 5
	Added EnumItem StudioDataModelType.Null : 6

Added Enum TextInputType
	Added EnumItem TextInputType.Default : 0
	Added EnumItem TextInputType.NoSuggestions : 1
	Added EnumItem TextInputType.Number : 2
	Added EnumItem TextInputType.Email : 3
	Added EnumItem TextInputType.Phone : 4

Changed the security of Function MemStorageConnection:Disconnect 
	from: {RobloxScriptSecurity}
	  to: {PluginSecurity}

Changed the security and serialization of Property TriangleMeshPart.CollisionFidelity 
	from: {NotAccessibleSecurity} [<🕒> Runtime-only]
	  to: {✏️PluginSecurity} [<📁> Load-only]

Removed Function DraftsService:OpenDrafts

Removed Event DraftsService.ScriptRemoved
Removed Event DraftsService.ScriptServerVersionChanged

Removed Tag [NotScriptable] from Property TriangleMeshPart.CollisionFidelity

(Click here for a syntax highlighted version!)


That’s a loaded update.

What’s this about?

I thought this has always been scriptable in the Studio Command Line? I know that I’ve changed the CollisionFidelity of parts before when I wanted to change a group of them by a certain condition.

But not scopes being opened in comments altogether? :sob:

Any specification as to what was fixed?


So, does this mean that we can create our own, custom pause menus?
If not, is this method only for CoreGuis?


Is this that first class support that was talked about a while ago?

Additionally, are there plans to extend these sorts of optimizations to other built-in libraries as well? I’m thinking explicitly the string library, though I’m not sure how practical it is outside of things like string.byte.


Five or six loosely-related issues were fixed here; I made some significant improvements to how scrolling frames lay themselves out - they should be more robust now. One issue that I fixed is where the scrollbar isn’t attached to the scrolling frame until you mouse over it in some cases; scrollbars should now be anchored to their scrolling frame.


For once, the fix may be to not comment your code.


I was having this exact issue - I was planning to go all the way back to 2013 and LoadLibrary a fix, so I’m glad that this was resolved!

“Added EnumItem TextInputType.Email : 3
Added EnumItem TextInputType.Phone : 4”

That’s strange. I can’t imagine that prompting a user for an email address or phone number would be allowed (it definitely isn’t). It’s nice to have TextInputType’s, but I can’t really think of any scenarios where these two would really be of any practical use while also following filtering rules. Anyone able to clarify this for me?

The TextBox property that is using these (TextBox.TextInputType) has a {RobloxScriptSecurity} tag, so this is likely an internal feature intended for the mobile apps.


This hasn’t been elaborated on much, but it has to do with Roblox’s new streaming API. I’ll try to summarize what I’ve been able to piece together about the system.

The green sphere represents the client and its minimum streaming radius. If the minimum radius interlaps with any space that hasn’t loaded a chunk from the server yet, then the game will pause and this UI is shown on screen:

The pink sphere represents the server and its target streaming radius. Anytime a chunk intersects this radius for the first time, it will be streamed to the client. The radius must overlap the center of each chunk in order to allow the player to move in it. Otherwise the gameplay paused UI will show again.

To the point: The new API that was mentioned in these release notes allow you to disable this default message from appearing on screen:

Added Function bool GuiService:GetGameplayPausedNotificationEnabled()
Added Function void GuiService:SetGameplayPausedNotificationEnabled(bool enabled)
Added Event GuiService.NetworkPausedEnabledChanged(bool enabled) {RobloxScriptSecurity}

Personally I don’t like the use of get/set functions like this when they could just simply add a property like: bool GuiService.GameplayPausedNotificationEnabled instead, but whatever.


Yes, although it’s just going to be a few functions here and there - math, bit32 and assert represent the vast majority of functions where these optimizations make sense.


That seems like absolutely horrible user experience. Who wants the game to randomly pause like that?


It shouldn’t really happen unless the user has a slow connection, or the minimum radius is too close to the target radius.

In the screenshots I shared above, I used a really small target radius.


We also just turned on a number of Output improvements!

  • When you clear the output, it now resets the duplicate counter (before if you had a loop that printed out “test” 100 times and cleared it half way, the next log would be test (x51) )
  • Every time a duplicate message was logged, it would snap the scrollbar to the bottom of the widget. Now, the output will only autoscroll if you are already at the bottom and not in the process of selecting text
  • Previously, trying to select text in the output while something was being printed would result in the selection cursor snapping to the bottom of the widget. Now, you can select text while messages are being logged to the output without it interfering with your selection

Trackpad gesture support. Pinch, 2-finger pan, scroll. Announcement soon.


This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.