Release Notes for 416

Notes for Release 416

21 Likes

Client Difference Log

API Changes

Added Function void GuiService:ForceTenFootInterface(bool isForced) {RobloxScriptSecurity}
Added Function void MarketplaceService:PromptPremiumPurchase(Instance player)
Added Function void MarketplaceService:SignalMockPurchasePremium() {RobloxScriptSecurity}
Added Function void MarketplaceService:SignalPromptPremiumPurchaseFinished(bool didTryPurchasing) {RobloxScriptSecurity}

Added Event MarketplaceService.PromptPremiumPurchaseFinished()
Added Event MarketplaceService.PromptPremiumPurchaseRequested(Instance player) {RobloxScriptSecurity}
Added Event Players.PlayerMembershipChanged(Instance player)

Changed the write permissions of Property GameSettings.AdditionalCoreIncludeDirs 
	from: {✏️None}
	  to: {✏️RobloxScriptSecurity}

Changed the write permissions of Property GameSettings.OverrideStarterScript 
	from: {✏️None}
	  to: {✏️RobloxScriptSecurity}

Changed the write permissions of Property Studio.OverrideCoreScripts 
	from: {✏️None}
	  to: {✏️RobloxScriptSecurity}

Changed the write permissions of Property Studio.OverrideCoreScriptsDir 
	from: {✏️None}
	  to: {✏️RobloxScriptSecurity}

Changed the security of Function DataModel:GetFastFlag 
	from: {RobloxScriptSecurity}
	  to: {LocalUserSecurity}

Changed the security of Function DataModel:GetFastInt 
	from: {RobloxScriptSecurity}
	  to: {LocalUserSecurity}

Changed the security of Function DataModel:GetFastString 
	from: {RobloxScriptSecurity}
	  to: {LocalUserSecurity}

Changed the security of Function StudioService:ConvertToPackageUpload 
	from: {PluginSecurity}
	  to: {RobloxScriptSecurity}

Removed EnumItem StudioStyleGuideColor.Merge3HighlightOriginal
Removed EnumItem StudioStyleGuideColor.Merge3HighlightMine
Removed EnumItem StudioStyleGuideColor.Merge3HighlightTheirs

(Click here for a syntax highlighted version!)

13 Likes

Interesting that this isn’t RobloxScriptSecurity. Curious how this will function.

Will we get a cut for if they buy it through our game? Is there a benefit to this?

We can also detect if they brought it through our game, so we can award them?

Lots of interesting possibilities on this one.

And for quality of life updates, this is pretty nice:


Now I don’t lose my 10 hours of progress!

18 Likes

Anyone have more detail on

This might be what i’ve been hoping for

8 Likes

WorldModel has a lot of handy use cases.

If you’ve ever found yourself needing to parent an object to the Workspace for it to work correctly (with the exception of physics simulation), the WorldModel class will do the trick.

You can:

  • Perform raycasts that are scoped to the WorldModel’s contents.
  • Find parts in regions where the parts are scoped to the WorldModel contents.
  • Call Humanoid:BuildRigFromAttachments() outside of the Workspace.
  • Display models in the world with no physics interaction or simulation.
    • This is handy for first person models, as they can never collide with anything.
  • Animate a Humanoid or AnimationController inside of the WorldModel.
    • WorldModels can be parented inside of ViewportFrames to display animated previews!

The inheritance of the Workspace has been adjusted slightly.

Previously it was:

Model
	Workspace

Now its:

Model
	WorldRoot
		Workspace
		WorldModel

In turn, several functions of the Workspace have been moved to the WorldRoot class:

Class WorldRoot : Model [NotCreatable]
	Function Tuple WorldRoot:FindPartOnRay(Ray ray, Instance ignoreDescendantsInstance = nil, bool terrainCellsAreCubes = false, bool ignoreWater = false)
	Function Tuple WorldRoot:FindPartOnRayWithIgnoreList(Ray ray, Objects ignoreDescendantsTable, bool terrainCellsAreCubes = false, bool ignoreWater = false)
	Function Tuple WorldRoot:FindPartOnRayWithWhitelist(Ray ray, Objects whitelistDescendantsTable, bool ignoreWater = false)
	Function Objects WorldRoot:FindPartsInRegion3(Region3 region, Instance ignoreDescendantsInstance = nil, int maxParts = 20)
	Function Objects WorldRoot:FindPartsInRegion3WithIgnoreList(Region3 region, Objects ignoreDescendantsTable, int maxParts = 20)
	Function Objects WorldRoot:FindPartsInRegion3WithWhiteList(Region3 region, Objects whitelistDescendantsTable, int maxParts = 20)
	Function bool WorldRoot:IsRegion3Empty(Region3 region, Instance ignoreDescendentsInstance = nil)
	Function bool WorldRoot:IsRegion3EmptyWithIgnoreList(Region3 region, Objects ignoreDescendentsTable)
15 Likes

Excellent, you can now do raycasts in a viewport is what you’re saying? Because that’s exactly one of the things i’ve needed!

This is what I’m wondering that they’re working towards,

3 Likes


Roblox knows me so well…

Jokes aside, amazing update as always. One question, though.


If I recall correctly, old plugins that have not switched to PluginGuis used the CoreGui to display UIs to the user. Will there be any sort of backwards compatibility to said plugins? Pretty sure one or two of my plugins with inactive devs still do this and it’d be irritating if they suddenly stopped working.

4 Likes

CoreScripts are a specific class of scripts. They’re used to run the CoreGui in-game. Not related to the CoreGui service itself.

1 Like

I completely misread and thought that said CoreGui. Apologies!

1 Like

Any word on when WorldModel is going to go live?

2 Likes