Mayumi_H

Example of a DEMO script using a timer (both Attach and REZ).lsl

Apr 24th, 2021 (edited)
1,327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //MH+ presents, join us! => https://discord.link/SLguru
  2. //時限でDEMOするスクリプトの例 (Attach物とREZ物の両対応)
  3. //注意:たとえ制作者であっても時間経過後は問答無用で動作するので作者の場合とか例外処理が必要な場合は各自で付与すること
  4. integer TIME_Left = 120;//秒で指定
  5. key Owner_KEY = NULL_KEY;
  6.  
  7. default{
  8.     on_rez(integer num){
  9.         //on_rezイベントは、①地域にREZした ②アバターに装着した ③アバターに装着したままログインした
  10.         //この3つの発生パターンがあります
  11.         if(llGetOwner() != Owner_KEY){
  12.             llResetScript();//所有者が異なっていたらリセット
  13.         }
  14.     }
  15.     state_entry(){
  16.         //state_entryイベントは①スクリプトが起動したとき ②リセットしたとき ③stateが変更されたとき
  17.         //この3つの発生パターンがあります
  18.         Owner_KEY = llGetOwner();//所有者のKEY取得
  19.         //NEXT Permissionのチェック
  20.         integer perm_mask = llGetObjectPermMask( MASK_NEXT );
  21. //      if(perm_mask & PERM_COPY)     llOwnerSay("このアイテムはコピー可能です。");
  22. //      if(perm_mask & PERM_MODIFY)   llOwnerSay("このアイテムは編集可能です。");
  23. //      if(perm_mask & PERM_TRANSFER) llOwnerSay("このアイテムは譲渡可能です。");
  24.         if(perm_mask & PERM_MODIFY){
  25.             llOwnerSay("このアイテムは編集可能です。");
  26.             llOwnerSay("オブジェクトの設定を変更してください。");
  27.             llRemoveInventory(llGetScriptName());//このスクリプトを除去する
  28.         }else{
  29.             llOwnerSay("製品のDEMOを開始します。(残り時間 : " + (string)TIME_Left + " 秒)");
  30.             llSetTimerEvent(1.0);//1秒間隔
  31.         }
  32.     }
  33.     run_time_permissions(integer perm){
  34.         //run_time_permissionsイベントはRequestPermissionsの応答です
  35.         if( perm & PERMISSION_ATTACH ){
  36.             if(llGetAttached()){
  37.                 llDetachFromAvatar();
  38.             }else{
  39.                 llDie();//直REZの場合は自爆
  40.             }
  41.         }else{
  42.             llDie();//ATTACH拒否は自爆(自分の持ち物なのでこのパターンはあり得ない)
  43.         }
  44.     }
  45.     timer(){
  46.         //指定した時間間隔でイベント発生。
  47.         if(--TIME_Left <= 0){// == 0としないこと。Timerは止めていないので時間経過しても継続させる→再装着対処
  48.             llOwnerSay("製品のDEMOを終了します。");
  49.             llSetText("",<1,1,1>,1.0);//必要なら残り時間をテキスト表示
  50.             if(llGetAttached()){
  51.                 llRequestPermissions(Owner_KEY, PERMISSION_ATTACH);//パーミッション取得を要求
  52.             }else{
  53.                 llDie();//直REZの場合は自爆
  54.             }
  55.         }else{
  56.             llSetText("(残り時間 : " + (string)TIME_Left + " 秒)",<1,1,1>,1.0);//必要なら残り時間をテキスト表示
  57.         }
  58.     }
  59. }
  60.  
Add Comment
Please, Sign In to add comment