私の経験上で言うと、llSetTimerEvent が動作しないことはままあります。
コンパイル直後には動くんだけど、その後リセットが掛かった後などで動かないことがあります。こんなときに起こりやすいとか、こうすれば起こりにくいとかあるみたいですが、決定的な回避策はよく分かってません。
起こりやすい一つの例は、TimerEventを動かしたまま、llResetScriptを掛けた場合です。それが分かってからは、必ず明示的にllSetTimerEvent(0)で止めてから、かつ数秒置いて llResetScript()を掛けるようにしましたが、これでもダメな場合があるようで…。
最近はリセットを掛ける旨のフラグを立てておいた上で timerイベントが発生させてから llSetTimerEvent(0)で止め、llResetScript()を掛けるという複雑なことをしています。
integer ResetFlg = FALSE;
...
Reset()
{
llSetTimerEvent(0);
ResetFlg = TRUE;
llSetTimerEvent(1.0);
return;
}
...
timer()
{
llSetTimerEvent(0);
if (ResetFlg) llResetScript();
...
}