Here is something I got managed to work similar to what you wanted.
- When you grab an object and you use your lantern the grabbed object will be dropped.
- when your lantern is active and you try to grab an object the lantern will be switched off automatically (you can change it to manual, see commentary in the script).
- there is a timer to prevent to grab an object while the switch off animation of the lantern is still going on.
- Instead of normal messages I used debug-messages, so they need to be exchanged (bolded text)
regarding to your second request:
"2) The lantern should be impossible to use while holding an object, and display a message along the lines of "Drop that object to use your lantern!" when you try to use it."
I can do this, too, but without the message, because the lantern callback wouldn't be called when the lantern is disabled and/or has no oil.
script: