Not sure how to clearly explain what’s wrong, but the third line is incorrect.
———
You could just use player.Character instead of waiting for the player in the workspace.
Additionally, if you wanted to use WaitForChild, you would have to use player.Name. This is because the “player” variable is a path, not a string, and WaitForChild requires a string as a parameter.
So assuming this is a local script you could probably use this (Not tested)
local player = game.Players.LocalPlayer -- This gets the player
local char = player.Character or player.CharacterAdded:Wait() -- This gets the character if it exists otherwise it waits until it exists and then sets the char as the character.
script.Parent.MouseButton1Click:Connect(function() -- Make sure script.Parent is a TextButton or ImageButton
char.BodyColor.Value = script.Parent.TextButton_Roundify_12px.ImageColor3 -- Sets the body color of the character
end)
You should make it a local script. A regular script should not be used on the client. If you depend on this for server side stuff you should use remote events