I had a different idea:
- Use a global timer and a global dictionary which keeps track of all disabled ships. I would probably listen to the same events as you.
- Timer tick would be 1 second, the dictionary would keep track of all ships which are disabled
- Upon ship being disabled I would disable the impulse engines to make the ship drift, set the flags on the bridge and what not and store the random value of how long the ship will be disabled
- On global timer tick I would check if the ship state should be restored, if it should. Restore the impulse engine state and bridge flag and delete the ship id from the dictionary