YENGtry
From OpenSimulator
try, catch and finally allow to handle some exceptions without getting the script killed.
- on the try block we place the code we want to run protected.
- on the catch block place code to handle the exception
- on the finally block we place code that should run always.
- throw keyword allows a catch to reissue the exception, so the engine handles it normaly
a try block must be follow by at one catch, one finally block or both
at this time there are only 2 types of cache blocks
to catch any available exception:
catch(exception ex) { }
to catch script related exceptions
catch(scriptexception ex) { }
in both cases particular exception must be found by the message.
There can not be any llResetScript or osResetAllScripts inside any of this blocks. script will compile but fail with a severe runtime error
silly example
touch_start(integer nn) { integer a = 0; try { llSay(0,"try"); float c = 1 / a; } catch(exception ex) { if(yExceptionMessage(ex) == "Division by Zero") llSay(0,"Where did you learn math?"); else throw; } finally { llSay(0,"finaly"); } }
detect no ossl permission
touch_start(integer nn) { try { key agent = llDetectedKey(0); osForceOtherSit(agent); } catch(exception ex) { string message = yExceptionMessage(ex); if(osStringStartsWith(message,"ossl permission error", TRUE)) llSay(0,"You need to enable osForceOtherSit on osslEenable.ini"); else throw; } }