如何在聊天中改回玩家的默认颜色
How to change back the player's default color in chat
我一直在学习如何更改玩家的聊天颜色和标签,我现在唯一想实现的是将其更改回默认值
这是代码(我只包括重要的代码)
ceValue.Changed:Connect(function()
local player = game.Players:WaitForChild(ceValue.Value)
local character = player.Character
while character do
if chatService ~= nil then
local speaker = chatService:GetSpeaker(player.Name)
repeat wait(1)
speaker = chatService:GetSpeaker(player.Name)
until speaker ~= nil
speaker:SetExtraData("NameColor", ceColor)
speaker:SetExtraData("ChatColor", ceColor)
if ceValue.Value == "" then
for i, v in pairs(game.Players:GetChildren()) do
speaker = chatService:GetSpeaker(v.Name)
--///HERE'S WHERE I WANT TO CHANGE THE PLAYER'S CHAT COLOR///---
end
break
end
wait(0.5)
end
end
end)
每个聊天发言人在创建时都会根据其用户名分配一种颜色。这样,如果每个 Speaker 离开并加入另一个游戏,他们就不会得到不同的颜色。
有几种不同的方法可以检索扬声器的默认颜色。
获取默认颜色
保存
玩家加入后,您可以缓存他们的颜色,然后允许他们修改。对于此方法,您必须确保您不允许玩家事先修改他们的颜色 - 否则,您最终会保存错误的颜色。
此代码片段将获取它们的默认颜色并存储它,而不是使用 chatService
.
中的 ComputeNameColor(player.Name)
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local color = ComputeNameColor(player.Name)
local colorObj = Instance.new("Color3Value")
colorObj.Name = "DefaultChatColor"
colorObj.Value = color
colorObj.Parent = player
end)
聊天颜色确实由 BrickColor
和 Color3
值组成,但 Roblox 颜色词典中使用 BrickColor.new("x").Color
属性 来引用这些 BrickColor
项无论如何都会将它们转换为 Color3
。
稍后,您只需调用player.DefaultChatColor.Value
即可再次检索聊天颜色。
重新生成它
如果您无法从 Color3Value 检索颜色,您始终可以像 Roblox 一样生成扬声器的默认颜色 - 对用户名执行数学运算!您需要致电 GetNameColor(Speaker)
以获得演讲者的 team/default 颜色,或者如果您想完全忽略团队则致电 ComputeNameColor(player.Name)
。
生成默认颜色的代码出现在第 86-127 行的 game.Chat.DefaultChatModules.ExtraDataInitializer
中(由于变量名称,此代码看起来像是 运行 内部),但您可以克隆如果您在 GUI 或其他地方工作:
local 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
local function GetNameColor(speaker)
local player = speaker:GetPlayer()
if player then
if player.Team ~= nil then
return player.TeamColor.Color
end
end
return ComputeNameColor(speaker.Name)
end
正在申请
在这种情况下应用新的或旧的,聊天颜色应该与您在代码中已经完成的相同:使用 speaker:setExtraData("(x)Color", oldColor)
.
“重新生成它”
ceValue.Changed:Connect(function()
local player = game.Players:WaitForChild(ceValue.Value)
local character = player.Character
while character do
if chatService ~= nil then
local speaker = chatService:GetSpeaker(player.Name)
repeat wait(1)
speaker = chatService:GetSpeaker(player.Name)
until speaker ~= nil
speaker:SetExtraData("NameColor", ceColor)
speaker:SetExtraData("ChatColor", ceColor)
if ceValue.Value == "" then
for i, v in pairs(game.Players:GetChildren()) do
speaker = chatService:GetSpeaker(v.Name)
defColor = GetNameColor(Speaker)
speaker:SetExtraData("NameColor", defColor)
speaker:SetExtraData("ChatColor", defColor)
end
break
end
wait(0.5)
end
end
end)
“存储它!”
ceValue.Changed:Connect(function()
local player = game.Players:WaitForChild(ceValue.Value)
local character = player.Character
while character do
if chatService ~= nil then
local speaker = chatService:GetSpeaker(player.Name)
repeat wait(1)
speaker = chatService:GetSpeaker(player.Name)
until speaker ~= nil
speaker:SetExtraData("NameColor", ceColor)
speaker:SetExtraData("ChatColor", ceColor)
if ceValue.Value == "" then
for i, v in pairs(game.Players:GetChildren()) do
speaker = chatService:GetSpeaker(v.Name)
local cachedCol = v:FindFirstChild("DefaultChatColor")
if cachedCol ~= nil then
--There's a cache found.
speaker:SetExtraData("NameColor",cachedCol.Value)
speaker:SetExtraData("ChatColor",cachedCol.Value)
end
end
break
end
wait(0.5)
end
end
end)
希望对您有所帮助!
我一直在学习如何更改玩家的聊天颜色和标签,我现在唯一想实现的是将其更改回默认值
这是代码(我只包括重要的代码)
ceValue.Changed:Connect(function()
local player = game.Players:WaitForChild(ceValue.Value)
local character = player.Character
while character do
if chatService ~= nil then
local speaker = chatService:GetSpeaker(player.Name)
repeat wait(1)
speaker = chatService:GetSpeaker(player.Name)
until speaker ~= nil
speaker:SetExtraData("NameColor", ceColor)
speaker:SetExtraData("ChatColor", ceColor)
if ceValue.Value == "" then
for i, v in pairs(game.Players:GetChildren()) do
speaker = chatService:GetSpeaker(v.Name)
--///HERE'S WHERE I WANT TO CHANGE THE PLAYER'S CHAT COLOR///---
end
break
end
wait(0.5)
end
end
end)
每个聊天发言人在创建时都会根据其用户名分配一种颜色。这样,如果每个 Speaker 离开并加入另一个游戏,他们就不会得到不同的颜色。
有几种不同的方法可以检索扬声器的默认颜色。
获取默认颜色
保存
玩家加入后,您可以缓存他们的颜色,然后允许他们修改。对于此方法,您必须确保您不允许玩家事先修改他们的颜色 - 否则,您最终会保存错误的颜色。
此代码片段将获取它们的默认颜色并存储它,而不是使用 chatService
.
ComputeNameColor(player.Name)
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local color = ComputeNameColor(player.Name)
local colorObj = Instance.new("Color3Value")
colorObj.Name = "DefaultChatColor"
colorObj.Value = color
colorObj.Parent = player
end)
聊天颜色确实由 BrickColor
和 Color3
值组成,但 Roblox 颜色词典中使用 BrickColor.new("x").Color
属性 来引用这些 BrickColor
项无论如何都会将它们转换为 Color3
。
稍后,您只需调用player.DefaultChatColor.Value
即可再次检索聊天颜色。
重新生成它
如果您无法从 Color3Value 检索颜色,您始终可以像 Roblox 一样生成扬声器的默认颜色 - 对用户名执行数学运算!您需要致电 GetNameColor(Speaker)
以获得演讲者的 team/default 颜色,或者如果您想完全忽略团队则致电 ComputeNameColor(player.Name)
。
生成默认颜色的代码出现在第 86-127 行的 game.Chat.DefaultChatModules.ExtraDataInitializer
中(由于变量名称,此代码看起来像是 运行 内部),但您可以克隆如果您在 GUI 或其他地方工作:
local 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
local function GetNameColor(speaker)
local player = speaker:GetPlayer()
if player then
if player.Team ~= nil then
return player.TeamColor.Color
end
end
return ComputeNameColor(speaker.Name)
end
正在申请
在这种情况下应用新的或旧的,聊天颜色应该与您在代码中已经完成的相同:使用 speaker:setExtraData("(x)Color", oldColor)
.
“重新生成它”
ceValue.Changed:Connect(function()
local player = game.Players:WaitForChild(ceValue.Value)
local character = player.Character
while character do
if chatService ~= nil then
local speaker = chatService:GetSpeaker(player.Name)
repeat wait(1)
speaker = chatService:GetSpeaker(player.Name)
until speaker ~= nil
speaker:SetExtraData("NameColor", ceColor)
speaker:SetExtraData("ChatColor", ceColor)
if ceValue.Value == "" then
for i, v in pairs(game.Players:GetChildren()) do
speaker = chatService:GetSpeaker(v.Name)
defColor = GetNameColor(Speaker)
speaker:SetExtraData("NameColor", defColor)
speaker:SetExtraData("ChatColor", defColor)
end
break
end
wait(0.5)
end
end
end)
“存储它!”
ceValue.Changed:Connect(function()
local player = game.Players:WaitForChild(ceValue.Value)
local character = player.Character
while character do
if chatService ~= nil then
local speaker = chatService:GetSpeaker(player.Name)
repeat wait(1)
speaker = chatService:GetSpeaker(player.Name)
until speaker ~= nil
speaker:SetExtraData("NameColor", ceColor)
speaker:SetExtraData("ChatColor", ceColor)
if ceValue.Value == "" then
for i, v in pairs(game.Players:GetChildren()) do
speaker = chatService:GetSpeaker(v.Name)
local cachedCol = v:FindFirstChild("DefaultChatColor")
if cachedCol ~= nil then
--There's a cache found.
speaker:SetExtraData("NameColor",cachedCol.Value)
speaker:SetExtraData("ChatColor",cachedCol.Value)
end
end
break
end
wait(0.5)
end
end
end)
希望对您有所帮助!