Hello. I made a script that changes the door handle clickdetector icon depending on if it is open or not.
prefix = "rbxassetid://"
openIcon = "6081347829"
closeIcon = "6081348044"
knockIcon = "6081347938"
chainIcon = "6081348125"
outerPlace = script.Parent.Parent.OuterKnob.OuterKnob.ClickDetector
innerPlace = script.Parent.Parent.InnerKnob.InnerKnob.ClickDetector
bodyPlace = script.Parent.Parent.DoorBody.ClickDetector
chainPlace = script.Parent.Parent.HalfLockAccept.ClickDetector
bodyPlace.CursorIcon = prefix..knockIcon
chainPlace.CursorIcon = prefix..chainIcon
outerPlace.CursorIcon = prefix..openIcon
innerPlace.CursorIcon = prefix..openIcon
function onDoorStateChange(value)
if (value == true) then
outerPlace.CursorIcon = prefix..closeIcon
innerPlace.CursorIcon = prefix..closeIcon
else
outerPlace.CursorIcon = prefix..openIcon
innerPlace.CursorIcon = prefix..openIcon
end
end
script.Parent.stateChange.Event:Connect(onDoorStateChange)
The icon gets changed as soon as the server starts and as this script is ran, but when the event is fired and the function is ran, it doesn't change. The if statement works, I tested it in the debugger. Also in the watch window, the outerPlace.CursorIcon and innerPlace.CursorIcon variables change but these changes aren't reflected in the game. Does anyone have any idea why it doesn't change?

4 comments
is it a local script?
No.
Doing things on the client (ex: a mouse or anything thats on their screen) should be handled on a local script.
But, It's a clickdetector, it changes the mouse for all players. Plus localscripts run code only in a limited amount of places. That means I can't just put it into this model and it would work.