✓ Accepted answer
That's because you're redefining the CFrame absolutely, not relatively.
Compare this...
local chickenbutt = script.Parent
function onClicked(playerWhoClicked)
chickenbutt.CFrame = CFrame.new(38,.5,34) * CFrame.Angles(45, math.pi, 0)
end
chickenbutt.ClickDetector.MouseClick:connect(onClicked)
With this...
local chickenbutt = script.Parent
chickenbutt.CFrame = CFrame.new(38,.5,34)
function onClicked(playerWhoClicked)
chickenbutt.CFrame = chickenbutt.CFrame * CFrame.Angles(45, math.pi, 0)
end
chickenbutt.ClickDetector.MouseClick:connect(onClicked)
See how it uses its own CFrame every time the onClicked function's fired? That's a good thing, because that's what you want.
Touch it one time, and it rotates the given angle. Touch it another time, and it will use the last CFrame, but apply it to the new one.