I assume you attached the script to the crank.
It may be working, but it is moving the objects for one frame only. First of all
OnActivate runs for one frame only, so the code executes in the frame that the player activates the crank. You need to toggle a flag when
OnActivate is true to allow movement to occur in successive frames. I am a little surprised you do not detect a little movement. The rate of 300 units per second would be produce noticeable movement in one frame unless you have an extremely high frame rate.
There is also a problem with trigger for setting state to 1. This should not be set until the objects have been moved to their new location. Unless that is accomplished in one frame (and I doubt that is what you intend), in the next frame (if the script could process past the
OnActivate check) the objects will be moved back to their starting position, and the process would repeat itself. Usually a timer is used to have the script run long enough to move the objects to their intended position, or their position is checked until the target position is attained. Even then, you probably do not what to have the objects moved back without delay. If there is a trigger for that (such as a second activation of the crank), we need to know that in order to supply the appropriate code.
I am a little surprised that you did not receive any error messages. In order to move an object with a script that is not attached to it that object has to be unique and it must have references persist checked. NorthMarker is not unique nor is it persistent. Happily it does not need to be moved by your script.
Before proposing specific changes to your script I urge you to reconsider the use of the function
SetWaterLevel. It can be manipulated so it is not a single abrupt change (like your current script
). For an interior cell, it is the move efficient approach to the problem as I understand it. You might look at the official script torch_lever that is used to alter the water level in Old Mournhold.