Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

Why is this unable to change the material of the player?

I have a script for a crystal that when touched by the player it slowly turns the player into the crystal. It works up until changing the material.

local debounce = false

local colorChange = {
	{'Head', 'Mid Gray', 'Granite'};
	{'Torso', 'Mid Gray', 'Granite'};
	{'Left Arm', 'Mid Gray', 'Granite'};
	{'Right Arm', 'Mid Gray', 'Granite'};
	{'Left Leg', 'Mid Gray', 'Granite'};
	{'Right Leg', 'Mid Gray', 'Granite'};
}

script.Parent.Touched:Connect(function (hit)
	if debounce == true then return end
	debounce = true
	wait(2)
	local humanoid = hit.Parent:FindFirstChild('Humanoid')
	if humanoid then
		for _,v in pairs(colorChange) do
			humanoid.Parent[v[1]].BrickColor = BrickColor.new(v[2])
			humanoid.Parent[v[1]].Material = Enum.Material(v[3])
			wait(0.3)
		end
		wait(3)
		debounce = false
	else
		debounce = false
	end
end)

The output says:

Workspace.SCPs.SCP-409.Contagion [New]:20: attempt to call field 'Material' (a userdata value)

What does this mean and how do I fix it?

1 answer

✓ Accepted answer

You need to use square parenthesis instead of normal ones.

humanoid.Parent[v[1]].Material = Enum.Material[v[3]]

1 comment

0

Thank you!

This discussion is preserved as it was. New answers, comments, and votes are closed.