Client Difference Log
API Changes
Added Class NewVoiceChatService : Instance [Service]
Added Class ProcessInstancePhysicsService : Instance [NotCreatable] [Service]
Added Class CurveAnimation : AnimationClip
Added Property float Beam.Brightness
Added Property bool ImporterGroupSettings.ImportAsModelAsset
Added Property Vector3 ImporterMeshSettings.Dimensions [ReadOnly]
Added Property float ImporterMeshSettings.PolygonCount [ReadOnly]
Added Property bool ImporterRootSettings.ImportAsModelAsset
Added Property float ParticleEmitter.Brightness
Added Property NumberSequence ParticleEmitter.Squash
Added Property Enum.ParticleEmitterShape ParticleEmitter.Shape
Added Property Enum.ParticleEmitterShapeInOut ParticleEmitter.ShapeInOut
Added Property float ParticleEmitter.ShapePartial
Added Property Enum.ParticleEmitterShapeStyle ParticleEmitter.ShapeStyle
Added Property float Trail.Brightness
Added Function void DebuggerConnection:Close() {RobloxScriptSecurity}
Added Function string MessageBusService:GetProtocolMethodRequestMessageId(string protocolName, string methodName) {RobloxScriptSecurity}
Added Function string MessageBusService:GetProtocolMethodResponseMessageId(string protocolName, string methodName) {RobloxScriptSecurity}
Added Function void MessageBusService:PublishProtocolMethodRequest(string protocolName, string methodName, Variant message, Variant customTelemetryData) {RobloxScriptSecurity}
Added Function void MessageBusService:PublishProtocolMethodResponse(string protocolName, string methodName, Variant message, int responseCode, Variant customTelemetryData) {RobloxScriptSecurity}
Added Function Instance MessageBusService:SubscribeToProtocolMethodRequest(string protocolName, string methodName, Function callback, bool once, bool sticky) {RobloxScriptSecurity}
Added Function Instance MessageBusService:SubscribeToProtocolMethodResponse(string protocolName, string methodName, Function callback, bool once, bool sticky) {RobloxScriptSecurity}
Added Enum ParticleEmitterShape
Added EnumItem ParticleEmitterShape.Box : 0
Added EnumItem ParticleEmitterShape.Sphere : 1
Added EnumItem ParticleEmitterShape.Cylinder : 2
Added EnumItem ParticleEmitterShape.Disc : 3
Added Enum ParticleEmitterShapeInOut
Added EnumItem ParticleEmitterShapeInOut.Outward : 0
Added EnumItem ParticleEmitterShapeInOut.Inward : 1
Added EnumItem ParticleEmitterShapeInOut.InAndOut : 2
Added Enum ParticleEmitterShapeStyle
Added EnumItem ParticleEmitterShapeStyle.Volume : 0
Added EnumItem ParticleEmitterShapeStyle.Surface : 1
Changed the security of Property VoiceChatService.VoiceChatState
from: {None}
to: {RobloxScriptSecurity}
Changed the parameters of Function Players:ReportAbuse
from: (Instance player, string reason, string optionalMessage)
to: (Player player, string reason, string optionalMessage)
Changed the parameters of Function Terrain:PasteRegion
from: (Instance region, Vector3int16 corner, bool pasteEmptyCells)
to: (TerrainRegion region, Vector3int16 corner, bool pasteEmptyCells)
Changed the parameters and return-type of Function Players:CreateHumanoidModelFromDescription
from: (Instance description, Enum.HumanoidRigType rigType, Enum.AssetTypeVerification assetTypeVerification = "Default") -> Instance
to: (HumanoidDescription description, Enum.HumanoidRigType rigType, Enum.AssetTypeVerification assetTypeVerification = "Default") -> Model
Changed the return-type of Function Players:CreateHumanoidModelFromUserId
from: Instance
to: Model
Changed the return-type of Function Players:CreateLocalPlayer
from: Instance
to: Player
Changed the return-type of Function Players:GetCharacterAppearanceAsync
from: Instance
to: Model
Changed the return-type of Function Players:GetFriendsAsync
from: Instance
to: FriendPages
Changed the return-type of Function Players:GetHumanoidDescriptionFromOutfitId
from: Instance
to: HumanoidDescription
Changed the return-type of Function Players:GetHumanoidDescriptionFromUserId
from: Instance
to: HumanoidDescription
Changed the return-type of Function Terrain:CopyRegion
from: Instance
to: TerrainRegion
Changed the return-type of Function TweenService:Create
from: Instance
to: Tween
Changed the security of Function VoiceChatService:GetAndClearCallFailureMessage
from:
to: {RobloxScriptSecurity}
Changed the parameters of Event Players.PlayerChatted
from: (Enum.PlayerChatType chatType, Instance player, string message, Instance targetPlayer)
to: (Enum.PlayerChatType chatType, Player player, string message, Player targetPlayer)
Changed the parameters of Event Players.PlayerConnecting
from: (Instance player)
to: (Player player)
Changed the parameters of Event Players.PlayerDisconnecting
from: (Instance player)
to: (Player player)
Changed the parameters of Event Players.PlayerMembershipChanged
from: (Instance player)
to: (Player player)
Changed the parameters of Event Players.PlayerRejoining
from: (Instance player)
to: (Player player)
Changed the parameters of Event Team.PlayerAdded
from: (Instance player)
to: (Player player)
Changed the parameters of Event Team.PlayerRemoved
from: (Instance player)
to: (Player player)
Changed the security of Event VoiceChatService.ParticipantsStateChanged
from:
to: {RobloxScriptSecurity}
Changed the security of Event VoiceChatService.PlayerMicActivitySignalChange
from:
to: {RobloxScriptSecurity}
Changed the security of Event VoiceChatService.StateChanged
from:
to: {RobloxScriptSecurity}
Removed Function DebuggerConnection:Terminate
Removed EnumItem GraphicsMode.Direct3D9
(Click here for a syntax highlighted version!)
Appears to be a bug in the code names for this change.
table.freeze
is fantastic, can’t wait.
Is this meant to be a code block
Its cool to see progress on the Luau debugger, I hope we can utilise in plugins (or you could unlock DebuggerManager) this in the future.
Its a bit anoying, however, to see VoiceChat’s APIs get rolled back in. I thought it was meant to be developer usable?
Don’t worry, voice chat will have a lot of programmability in the long run, when there’s a stable public API available for the more complex parts of Voice Chat there will be announcement posts + full DevHub documentation for it as usual. There’s just been some unfortunate confusion thanks to some still unstable experimental voice chat APIs being temporarily publicly accessible when they shouldn’t have been, sorry about that.
If you’re ever in doubt about an API: Look it up on the DevHub, if there’s no documentation for it it’s probably not officially released yet and you should avoid using it unless you’ve seen an explicit mention from a Staff member that it is ready to be used.
Doesn’t locking tables and checking for locks, just encourage bad code design? I mean… wouldn’t that be like adding a GOTO statement?
Edit: I guess what I am asking is, what would be the necessity of this?
Frozen tables are useful for maintaining your invariants. For example, you if you use a frozen table, and write this:
function myObject:getListOfThings()
return self._myListOfThings
end
You have a hard guarantee that whoever called the function didn’t accidentally modify the list of things you returned messing up the internal state of your object. Currently the only way to guarantee that is to make a new copy of the table when you return it, which may be prohibitively expensive.
Do you have any details on how table.freeze
is implemented? Does it return a new table that has a metatable whose __index
metamethod points to the original table and __newindex
that throws an error?
No, the Roblox Luau VM has a first-class concept of a “frozen” table, which absolutely can’t be modified no matter what hacks you try to pull off
Will Clouds be Lighting-compatible in the future?
Only being able to put them in Terrain feels out of place, considering Atmosphere can go into Lighting.
More information on table.freeze
for inquisitive minds is, as always, here: luau/function-table-freeze.md at master · Roblox/luau · GitHub.
I’m actually quite interested in this for this reason, and for the reason that, as mentioned in the RFC linked by zeuxcg, there’s no “thawing.”
However, I’m a little disappointed that I can’t freeze a table with a locked metatable, this interferes with a lot of my potential use cases for a feature like this with rawset
and rawget
in mind, because it means I can’t have ““sensitive”” metatable content hidden behind a __metatable
metamethod and still be able to lock the table.
The reason that there’s no thawing according to the RFC is that Roblox uses it internally for sandboxing. This is, in fact, excellent for exactly that, sandboxing. It’ll work excellently within code sandboxes like my own.
So, I’m excited for this for a different reason than it was intended for, but, still excited
You can lock the metatable after freezing the table, if you want. Of course this may be awkward if you want to keep producing frozen objects with the same metatable…
FWIW the reason why we [right now] disallow freezing on tables with locked metatables is precaution: if we don’t do that, this means that existing code that uses protected metatables may have the consumer of that code freeze the table, which could confuse the code in question. If you aren’t protecting your metatable this must mean you’re already open to anyone changing your table arbitrarily.
This is something we could relax in the future, but it’s a safer default.
I guess it also occurs to me that in the future we could add an optional metatable argument to table.freeze
so that it acts as a freeze + setmetatable atomically. I’d like to see real dev feedback for freezing before committing to that though, but it’s a possibility.
New ParticleEmitter shapes will be neat!
I really want to know what these do, if anyone has any infomation about these Enums then please tell me.
With the release of animations in the Toolbox, is there a chance that we’ll be able to publish animations for public use one day?
I’ll just link this reply from a Roblox employee:
I don’t think that so, the clouds are part of the decoration and they’re planning to improve the terrain decoration, but adding an expandable menu with the Decoration
name would be useless for now because there are only grass & clouds to decorate the world
There’s a problem with the Size of particles, now the NumberSequence goes from 0 to 1 while before it went from 0 to 10 and now its almost impossible test some particles that goes outward.