I’m not sure if this is actually considered a resource as I am not sure if it’s substantial enough but I extracted it and turned it into a basic module for anyone to get the user’s chat colour.
I was wondering how this was done, and it’s mostly math. I frankly am not too sure how it works but here is basically how to use it:
ModuleScript, can be called from server or client. The sole argument should be a string.
local module = {}
function module:GetNameColor(speaker)
NAME_COLORS =
{
Color3.new(253/255, 41/255, 67/255), -- BrickColor.new("Bright red").Color,
Color3.new(1/255, 162/255, 255/255), -- BrickColor.new("Bright blue").Color,
Color3.new(2/255, 184/255, 87/255), -- BrickColor.new("Earth green").Color,
BrickColor.new("Bright violet").Color,
BrickColor.new("Bright orange").Color,
BrickColor.new("Bright yellow").Color,
BrickColor.new("Light reddish violet").Color,
BrickColor.new("Brick yellow").Color,
}
local function GetNameValue(pName)
local value = 0
for index = 1, #pName do
local cValue = string.byte(string.sub(pName, index, index))
local reverseIndex = #pName - index + 1
if #pName%2 == 1 then
reverseIndex = reverseIndex - 1
end
if reverseIndex%4 >= 2 then
cValue = -cValue
end
value = value + cValue
end
return value
end
local color_offset = 0
local function ComputeNameColor(pName)
return NAME_COLORS[((GetNameValue(pName) + color_offset) % #NAME_COLORS) + 1]
end
return ComputeNameColor(speaker)
end
return module
Example of how to use it (client or server)
local NameColour = require(--[[wherever the module is located]])
ChatService.SpeakerAdded:Connect(function(PlayerName)
local Speaker = ChatService:GetSpeaker(PlayerName)
print(NameColour:GetNameColor(Speaker.Name))
end)
Note that I take no credit for this as none of it was written by me. The module is extracted from ExtraDataInitializer.lua, one of the core scripts written by Xsitsu.
Made a game showcasing it: