Attributes - Now Available!

Easier said than done, but we’ll be working on supporting additional types in the future.

19 Likes

Such an amazing feature! Been waiting for this to drop ever since the start.

Hope we can also sneak in credits into our work secretly with this feature. :shushing_face:

1 Like

I did some more testing, and it’s really laggy to select instances that have thousands of attributes or extremely long strings. I can use this for map data, but I need to be careful not to select the instances used for data storage. I can select StringValues containing string.rep("a", 199999) with no lag, but it freezes for attributes. Hopefully this can be fixed.
Repro:

local folder = Instance.new("Folder")
for i = 0, 999 do
    folder:SetAttribute(string.format("Test%03d", i), string.rep("a", 10000))
end
folder.Parent = workspace

I’m also a bit disappointed that GetAttributes returns a dictionary of values instead of an array of keys. It can be extremely expensive to serialize all of the values if they’re being used to store bulk data.

7 Likes

Nice UI suggestion, thank you for the feedback.

11 Likes

Oh yeah! This is probably my favorite update! Nice update Roblox, can not wait to see more!

1 Like

Does this mean ValueBases and or ConfigFolders will become deprecated?

I have a question. I used Value objects when I wanted to mark a particular property of an object temporarily (such as original size, or original colour etc) and doing it in a script wasn’t viable, which might be an archaic solution, but would doing :SetAttribute and :GetAttribute every time be more beneficial or was it not designed for temporary indicators?

1 Like

This is so good I’m currently in the process of re-doing everything with values. The best update since FiB! Great job to everyone at ROBLOX who made this happen!

1 Like

This is awesome! However, one thing that does annoy me is the fact you have to delete an Attribute and re-add it to change the type. You think we can change the type in the settings instead?

1 Like

In my opinion the Attributes part of the properties window doesn’t match the others, if you can make something like this it would improve consistency:

Image

image

Obviously put the attributes in a different category as this image was made months ago here

2 Likes

Halleujah, no more clutter from Value objects! While I still think there’s potential room for this feature to be extended, this is a big leap forward from where we are now and I’m happy to finally see this rolling out!

14 Likes

even as a developer I still don’t know what values are. but good for the people who really wanted this update???

1 Like

this cut the lines in my script by half, woo!

1 Like

AWESOME!

I can’t wait for less clutter in my game! This is amazing!

2 Likes

Wonderful job so far, that is amazing!

1 Like

Uh, neat. I have been excited for this feature for a little bit now, but one thing does stand out to me. It’s the lack of being able to get all instances with a particular attribute.

Now I know that CollectionService is great for storing objects like interactions and then handling them, but I do think an efficient means to get all objects with an attribute would be amazing. I understand this isn’t a service which makes this a unique case, but I feel something could be worked out.

CollectionService
Service:GetTagged(‘Tag’)

AttributeService (?)
Service:HasAttributes(‘Attribute’)

Might be overcomplication and perhaps CollectionService & Attributes should just work hand in hand, but nonetheless I thought it would be helpful to have more diversity. Good feature thought :smiley:

1 Like

Really cool and very useful feature!

1 Like

If you need this behavior can you not simply use Attributes along with a CollectionService tag? I think Attributes should stay simple, lightweight, and safe. They are used for storing data for a specific instance, and I’d prefer not to worry whether attribute names are globally unique for each use case.

2 Likes

If attributes had the highest priority when using . then what issue would there be?

1 Like

Scripts that expect it to be a child will break. Getters and setters guarantee you are reading from/writing to the correct thing.