Good Morning/Afternoon/Evening. Im Struggling with making a system to change a Surface Appearance ColorMap with a group rank. The Idea is a Mesh Helmet that has a SurfaceApperance texture in it to give the color and all would change based on the rank so players don’t have to pick the rank they need but would already have based in a group.
The script is below what I have already and the system isn’t working. Im, not a scripter so that’s probs the main issue I’m having. Anyhow here’s the script
My Code
local f = script.Parent.Parent.Face1
f.Parent = game.ServerStorage
function boop(Player)
if Player.Character:findFirstChild("Humanoid") ~= nil and Player.Character:findFirstChild("Face1") == nil then
local g = f:clone()
g.Parent = Player.Character
local C = g:GetChildren()
for i=1, #C do
if C[i].className == "Part" or C[i].className == "UnionOperation" then
local W = Instance.new("Weld")
W.Part0 = g.Middle
W.Part1 = C[i]
local CJ = CFrame.new(g.Middle.Position)
local C0 = g.Middle.CFrame:inverse()*CJ
local C1 = C[i].CFrame:inverse()*CJ
W.C0 = C0
W.C1 = C1
W.Parent = g.Middle
end
local Y = Instance.new("Weld")
Y.Part0 = Player.Character.Head Y.Part1 = g.Middle
Y.C0 = CFrame.new(0, 0, 0)
Y.Parent = Y.Part0
end
local h = g:GetChildren()
for i = 1, # h do
if h[i].className == "Part" or h[i].className == "UnionOperation" then
h[i].Anchored = false
h[i].CanCollide = false
end
end
end
end
script.Parent.ClickDetector.MouseClick:connect(boop)
function CheckRank(Player)
if Player:GetRankInGroup(4875042) == 240 then -- Probie Firefighter
Player.Character.Face1.Helmet1 = "rbxassetid://8809230471"
Player.Character.Face1.Shield = "rbxassetid://9670987251"
elseif Player:GetRankInGroup(4875042) == 241 then -- Firefighter
Player.Character.Face1.Helmet1 = "rbxassetid://8808951579"
Player.Character.Face1.Shield = "rbxassetid://9671015815"
elseif Player:GetRankInGroup(4875042) == 242 then -- Firefighter/EMT
Player.Character.Face1.Helmet1 = "rbxassetid://8808951579"
Player.Character.Face1.Shield = "rbxassetid://9670987658"
elseif Player:GetRankInGroup(4875042) == 243 then -- Firefighter/Paramedic
Player.Character.Face1.Helmet1 = "rbxassetid://8808951579"
Player.Character.Face1.Shield = "rbxassetid://9670987522"
elseif Player:GetRankInGroup(4875042) == 244 then -- F.A.D.O
Player.Character.Face1.Helmet1 = "rbxassetid://8808951579"
Player.Character.Face1.Shield = "rbxassetid://9670987760"
elseif Player:GetRankInGroup(4875042) == 245 then -- Fire Specialist
Player.Character.Face1.Helmet1 = "rbxassetid://8808951579"
Player.Character.Face1.Shield = "rbxassetid://9670987388"
elseif Player:GetRankInGroup(4875042) == 246 then -- Safety Officer
Player.Character.Face1.Helmet1 = "rbxassetid://8809197735"
Player.Character.Face1.Shield = "rbxassetid://9596829104"
elseif Player:GetRankInGroup(4875042) == 247 then -- EMS Lieutenant
Player.Character.Face1.Helmet1 = "rbxassetid://9595740707"
Player.Character.Face1.Shield = "rbxassetid://9596829433"
elseif Player:GetRankInGroup(4875042) == 248 then -- Fire Lieutenant
Player.Character.Face1.Helmet1 = "rbxassetid://8809210186"
Player.Character.Face1.Shield = "rbxassetid://9596829210"
elseif Player:GetRankInGroup(4875042) == 249 then -- EMS Captain
Player.Character.Face1.Helmet1 = "rbxassetid://9595745118"
Player.Character.Face1.Shield = "rbxassetid://9596829592"
elseif Player:GetRankInGroup(4875042) == 250 then -- Fire Captain
Player.Character.Face1.Helmet1 = "rbxassetid://8809188555"
Player.Character.Face1.Shield = "rbxassetid://9596829286"
elseif Player:GetRankInGroup(4875042) == 251 then -- Director of Emergency
Player.Character.Face1.Helmet1 = "rbxassetid://8809111043"
Player.Character.Face1.Shield = "rbxassetid://9596829887"
elseif Player:GetRankInGroup(4875042) == 252 then -- Battalion Chief
Player.Character.Face1.Helmet1 = "rbxassetid://8809111043"
Player.Character.Face1.Shield = "rbxassetid://9596830082"
elseif Player:GetRankInGroup(4875042) == 253 then -- Deputy Chief
Player.Character.Face1.Helmet1 = "rbxassetid://8809111043"
Player.Character.Face1.Shield = "rbxassetid://9596829744"
elseif Player:GetRankInGroup(4875042) == 254 then --Assistant Chief
Player.Character.Face1.Helmet1 = "rbxassetid://8809111043"
Player.Character.Face1.Shield = "rbxassetid://9596864481"
elseif Player:GetRankInGroup(4875042) == 255 then -- Fire Chief
Player.Character.Face1.Helmet1 = "rbxassetid://8809111043"
Player.Character.Face1.Shield = "rbxassetid://9596722240"
end
end
If anyone could help fix it up or maybe make it work, I would appreciate this!
There are properties you can change inside of the mesh helmet/surfaceappearance, so instead of “Player.Character.Face1.Helmet1”, it’d be “Player.Character.Face1.Helmet1.MeshId” to change the mesh.
Also, like the other guy said, the function is never called so that’s why you didn’t receive any errors
You’d call it with CheckRank(Player) inside your boop function. I’d put it at the end, right before the last end.
...
local h = g:GetChildren()
for i = 1, # h do
if h[i].className == "Part" or h[i].className == "UnionOperation" then
h[i].Anchored = false
h[i].CanCollide = false
end
end
end
CheckRank(Player)
end
For the record, there are more efficient ways to do what you want to do with that setup. That should get it working, then if you want it prettier or shorter we can do that.
Just searched it up as I’ve rarely used SurfaceAppearance, but apparently SurfaceAppearance properties cannot be adjusted within a script. You could possibly clone a premade asset as a replacement
Im assuming by Premade Asset you are meaning make multiple SurfaceAppearances? This is how the Helmet looks
Each Texture is already placed on there and I just need to call it to say Chiefs or FF
Yes although not all inside the Helmet already, keep it somewhere like ServerStorage or ReplicatedStorage and clone them inside as I don’t think you can have multiple SurfaceAppearances under a single meshpart