Togglable Option for Display Names

As a Developer, it is currently hard to completely remove the functionality of Display Names. Forking chat is relatively easy, but Roblox does not provide the leaderboard to fork, nor other aspects of a game, making us learn how to do this and spend hours of work that we wouldn’t need. My simple solution is to allow Developers to toggle Display Names in their game, similarly to how R15/R6 work, or at least an easier way to override it (such as letting us set the Player.DisplayName property ourselves, rather than running into script permission errors).

This would be a very important feature, as many games rely on admin systems (such as kohls), or various other scripts they’ve coded to use Player.Name, rather than a Display Name. This feature would still work, but it’d make scripts less user friendly.

Assuming this issue can be addressed, I can spend time working on other aspects of my games, rather than diving into severely under documented areas of Roblox’s Core UI, and reinventing something that Roblox has already made for me.

74 Likes

I would have to concur with this post. As it currently stands, Display Names has caused severe confusion in a lot of role-play games I currently develop for. Masquerading and impersonation are among the two biggest issues we’re having at this time.

Several players have stated that this new feature has created confusion and is effecting their user experience. While the Display Name feature is not all bad, it would be preferred if this feature could be toggled in order to streamline the user experience on ROBLOX; not all games need this feature enabled by default.

14 Likes

It is currently impossible to disable DisplayNames from various elements of the CoreGui. My proposal is a property with the value Players.UseDisplayName, Roblox’s modules for both the player list and escape menu have a module that is dedicated to this specific function. It would be very easy to add a simple check in the middle.

Ammended RobloxGui.Modules.PlayerList.IsDisplayNameEnabled
local Players = game:GetService("Players")

local FFlagPlayerListUseDisplayName = game:DefineFastFlag("PlayerListUseDisplayName", false)
local FFlagPlayerListUseDisplayNameChina = game:DefineFastFlag("PlayerListUseDisplayNameChina", false)
local FFlagPlayerListUseDisplayNameChina2 = game:DefineFastFlag("PlayerListUseDisplayNameChina2", false)
local DeveloperEnabledDisplayNames = Players.UseDisplayName

local function isDisplayNameEnabled(subjectToChinaPolicies)
	if not DeveloperEnabledDisplayNames  then
		return false
	end

	if FFlagPlayerListUseDisplayName then
		return true
	end

	if FFlagPlayerListUseDisplayNameChina2 then
		return subjectToChinaPolicies
	end

	if FFlagPlayerListUseDisplayNameChina then
		return subjectToChinaPolicies
	end

	return false
end

return isDisplayNameEnabled

Ammended RobloxGui.Modules.Settings.UsePlayerDisplayName
local CoreGui = game:GetService("CoreGui")
local RobloxGui = CoreGui:WaitForChild("RobloxGui")
local Players = game:GetService("Players")

local PolicyService = require(RobloxGui.Modules.Common.PolicyService)

local FFlagOldInGameMenuDisplayNameForAll = game:DefineFastFlag("OldInGameMenuDisplayNameForAll3", false)
local FFlagOldInGameMenuDisplayNamePolicy = game:DefineFastFlag("OldInGameMenuDisplayNamePolicy3", false)
local DeveloperEnabledDisplayNames = Players.UseDisplayName

local function UsePlayerDisplayName()
	if not DeveloperEnabledDisplayNames then
		return false
	end

	if FFlagOldInGameMenuDisplayNameForAll then
		return true
	end

	if FFlagOldInGameMenuDisplayNamePolicy then
		return PolicyService:IsSubjectToChinaPolicies()
	end

	return false
end

return UsePlayerDisplayName```

This is about 8 extra lines in the Core GUI Modules, and yet Roblox have appeared to have completely disregarded the issue that some developers might just not want them on. The Chat appears to already be disableable through a setting (thank god)

ChatSettings Line 94-98

--[[ Display Names ]]

--Uses DisplayNames instead of UserNames in chat messages

module.PlayerDisplayNamesEnabled = false

--Allows users to do /w displayName along with /w userName, only works if PlayerDisplayNamesEnabled is 'true'

module.WhisperByDisplayName = false

Finally, for Humanoids themselves, you can use this

local Humanoid = script.Parent:WaitForChild("Humanoid")
Humanoid.DisplayName = ""
9 Likes

I don’t support this change.

Removing them for this reason alone seems like a knee-jerk reaction rather than a genuine solution. This is a very destructive solution no matter how you cut the cake. Is there a specific reason you avoided requesting that usernames are displayed in the leaderboard by default? That said, I also am curious as to what alternatives have you considered to flat out nuking the option to use this new feature.

4 Likes

I’m not asking for them to be removed. I’d ask you to please read the OP. I’m asking for a toggle. Enable Display Names by default and allow them to be toggled off.

I’ve tried writing to Player.DisplayName already. No luck there, as scripts are not given a high enough permission. I can write to the Humanoid.DisplayName, so that’s a non issue.

Point being, the game I’m specifically making has a number of in game chat commands, and you need to actually know who is who. Both in the chat, leaderboard AND infront of you. If display names are not unique and I said !ban “rock”, what do I do if there are 20 display names named rock. If I can’t see who is who, and I can’t rely on Display Names to identify users, then for my specific purposes I don’t want Display Names in this game at all.

15 Likes

I did read OP. In the context you gave me you are, for all intents and purposes, removing display names from your game.

I still think you should instead request a change to the leaderboard that comes stock to include @username if the concern is identifying people (and, of course, if just pausing the game is too much too - it does show there). Disabling the entire feature in your game for this reason alone just doesn’t sit right. It’s like cutting off someone’s entire finger because there’s a mole on it.

The other issues right now can be resolved with scripting, so I think there it’s OK. The concerns seem to just be focused on the leaderboard as far as I can tell since you can write a chat callback that edits the name field in the chat data table (you don’t even need to fork the chat), and a script that alters Humanoid.DisplayName – the leaderboard is the only one that requires a very large amount of work for such a small tweak. Roblox has provided standards for what these should look like, so chat messages could be altered to something like [Eti@EtiTheSpirit]: Hello, world! with your script, and humanoid names could be something like Eti\n(@EtiTheSpirit).

8 Likes

The issue at hand that I am currently facing in my current roleplay group (State of Firestone) is the use of DisplayNames affecting the roleplay aspect. While I agree that DisplayNames are great to have within Roblox and wouldn’t really affect a majority of the games and groups out there, it definitely takes a toll on hard roleplay groups such as mine. Identification is often done through usernames as they are unique and can not be impersonated. Additionally, individuals can be easily found and recognized through usernames on the Roblox site when they need to be referenced. However, when it comes to DisplayNames, they can be changed once per week, are not unique, and can be a hindrance when attempting to uniquely identify someone through DisplayNames.

I’ve had to create my own player list and the Roblox player list is a bit difficult to fork and force remove the DisplayName option. How else is a judge in a roleplay state group supposed to identify John separately from John? Overall it’s definitely causing a dent within gameplay that is strictly roleplay. Having a toggleable option would make things easier and would not require me to remake things that Roblox has already created for me.

A lil necrobump but definitely wanted to provide my scenario with respect to this feature request.

6 Likes

Definitely a reasonable request.

That said, many people seem to think the solution to display names is to just open up the leaderboard for developers to fork. While I agree, I don’t think it’s the solution. Toggling display names should be relatively easy for inexperienced developers who cannot fork things, and the requested feature here solves that issue perfectly.

1 Like

You can trivially prevent display names from affecting humanoid name labels in your game with a simple server script. :confused:

game:GetService("Players").PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(character)
		local humanoid = character:WaitForChild("Humanoid")
		humanoid.DisplayName = ""
	end)
end)

It is nonsense to need a setting to disable this; design your UI to include the @ username, and make feature requests to improve places where users are confused about built-in Roblox UI.

4 Likes

I wanted to add another reason to disable this feature.

If you don’t end up forking the default chat, it’s impossible to catch exploiters. Just today I was at one of my groups events that garners around 100 people a month to it. Naturally there was an exploiter. Because of the fact that we can’t toggle this feature, Display Names and the Leaderboard itself didn’t match up, and we had no way of knowing who the actual exploiter was.

While I do know how to solve this issue by overriding the humanoid settings, who’s to say it doesn’t get worse. There’s zero way to even properly see what a user is if they’re exploiting and moving too fast.

Obviously adding a toggle is quite niche, but there ARE users who will use it, and it isn’t roblox’s job to tell us what we should and shouldn’t be using. If a username is there, some people will still utilize that over display names, and it’s quite upsetting to me that many developers around here are simply saying “you shouldn’t need to disable it” or, “why would you want to?”.

With every feature there should be a way to not use it or revert and ignore it. This type of thing has existed for years in the community with Old Animations/New Animations and other things. Why should this be any different.

4 Likes

Your use case with the exploiter is mostly moot because exploiters already have ways of hiding who they are. Them being able to change their display name does not make it any harder to know who they are if they’re actually trying to hide who they are. Support a feature request to make Humanoid name labels include the @ by default. If they’re “moving too fast”, display names are completely irrelevant to your complaint.

Introducing settings for everything comes with absurd compounding overhead and slows down development on new features. This is very wrong.

1 Like