Advertisement
salahzar

Tappeto Volante

Feb 26th, 2014
319
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. list destinations=[
  2. "Sole",<0,0,0>,
  3. "Luna",<0,0,0>,
  4. "Marte",<0,0,0>,
  5. "Terra",<0,0,0>
  6.  
  7. ];
  8.  
  9.  
  10.  
  11. key user;
  12. integer used;
  13. integer listener;
  14. integer index;
  15. integer numdestinations;
  16.  
  17.  
  18. move(integer i)
  19. {
  20.     vector target=llList2Vector(destinations,2*i+1);
  21.     string nome=llList2String(destinations,2*i);
  22.     if(llStringTrim(nome,STRING_TRIM_TAIL)=="") return;
  23.     llWhisper(0,"Vado verso "+nome);
  24.     if(target!=<0,0,0>)
  25.     {
  26.         llTarget(target,0.4);
  27.         llSetBuoyancy(1);
  28.         llSetStatus(STATUS_PHYSICS,TRUE);
  29.         llMoveToTarget(target,1);
  30.     }
  31.     else llSay(0,"Devi inserirmi le coordinate");
  32.  
  33. }
  34. dialogo()
  35. {
  36.      if(!used) return;
  37.     llSetStatus(STATUS_PHYSICS,FALSE);
  38.     integer i; list buttons=[];
  39.     for(i=0;i<llGetListLength(destinations)/2;i++)
  40.         buttons+=[llList2String(destinations,i*2)];
  41.  
  42.     llDialog(user,"Scegli destinazione ",buttons,100);
  43. }
  44.  
  45. default
  46. {
  47.     on_rez(integer start)
  48.     {
  49.         llResetScript();
  50.     }
  51.     state_entry()
  52.     {
  53.         llSetStatus(STATUS_PHYSICS,FALSE);
  54.         llSetRot(ZERO_ROTATION);
  55.         llSitTarget(<0,0,0.1>,ZERO_ROTATION);
  56.         used=FALSE;
  57.         move(0);
  58.         index=0;
  59.     }
  60.     changed(integer change)
  61.     {
  62.         if(change & CHANGED_LINK)
  63.         {
  64.              if(!used)
  65.             {
  66.                 used = TRUE;
  67.                 user = llAvatarOnSitTarget();
  68.                 if(user == NULL_KEY) {
  69.                     used = FALSE; // Make sure that there's really someone sitting on the poseball
  70.                     return;
  71.                 }
  72.                llSay(0,"sit");
  73.             llForceMouselook(TRUE);
  74.                 llSetStatus(STATUS_PHYSICS,TRUE);
  75.                 llSetBuoyancy(1);
  76.                 listener=llListen(100,"",user,"");
  77.                  llRequestPermissions(llAvatarOnSitTarget(),  PERMISSION_TAKE_CONTROLS);
  78.                 dialogo();
  79.                
  80.             } else {
  81.                 used = FALSE;
  82.                 user = NULL_KEY; // Probably redundant, but we want to make sure that the value for ''user'' is empty.
  83.                llSay(0,"unsit");
  84.                 llListenRemove(listener);
  85.                  llSetStatus(STATUS_PHYSICS,FALSE);
  86.         llSetRot(ZERO_ROTATION);
  87.         llSleep(2);
  88.                 llResetScript();
  89.  
  90.             }
  91.  
  92.                
  93.         }
  94.     }
  95.      run_time_permissions(integer perm)
  96.     {
  97.         if (perm)
  98.         {
  99.            
  100.             if (perm & PERMISSION_TAKE_CONTROLS)
  101.                 llTakeControls(
  102.                     CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT |
  103.                     CONTROL_BACK | CONTROL_FWD | CONTROL_UP | CONTROL_DOWN,
  104.                 TRUE, FALSE);
  105.         }
  106.     }
  107.     control(key id, integer level, integer edge)
  108.     {
  109.      
  110.            
  111.         if( level & edge & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))
  112.         { llSay(0,"right");
  113.            index++;
  114.            if(index*2>=llGetListLength(destinations)) index=0;
  115.            move(index);
  116.         }
  117.      
  118.  
  119.         if( level & edge & (CONTROL_LEFT|CONTROL_ROT_LEFT))
  120.         {
  121.             llSay(0,"left");
  122.            index--;
  123.            if(index<0)index=llGetListLength(destinations)/2-1;
  124.            move(index);
  125.         }
  126.      
  127.     } //control
  128.  
  129.     listen(integer channel,string name, key id, string str)
  130.     {
  131.        integer i=llListFindList(destinations,[str]);
  132.        if(i<0)llWhisper(0,"Non trovo '"+str+"'");
  133.        
  134.        move(i/2);
  135.     }
  136.      at_target(integer tnum, vector targetpos, vector ourpos)
  137.     {
  138.         llSetStatus(STATUS_PHYSICS,FALSE);
  139.         llTargetRemove(tnum);
  140.         llStopMoveToTarget();
  141.         llSetRot(ZERO_ROTATION);
  142.        
  143.         dialogo();
  144.     }
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement