Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- list destinations=[
- "Sole",<0,0,0>,
- "Luna",<0,0,0>,
- "Marte",<0,0,0>,
- "Terra",<0,0,0>
- ];
- key user;
- integer used;
- integer listener;
- integer index;
- integer numdestinations;
- move(integer i)
- {
- vector target=llList2Vector(destinations,2*i+1);
- string nome=llList2String(destinations,2*i);
- if(llStringTrim(nome,STRING_TRIM_TAIL)=="") return;
- llWhisper(0,"Vado verso "+nome);
- if(target!=<0,0,0>)
- {
- llTarget(target,0.4);
- llSetBuoyancy(1);
- llSetStatus(STATUS_PHYSICS,TRUE);
- llMoveToTarget(target,1);
- }
- else llSay(0,"Devi inserirmi le coordinate");
- }
- dialogo()
- {
- if(!used) return;
- llSetStatus(STATUS_PHYSICS,FALSE);
- integer i; list buttons=[];
- for(i=0;i<llGetListLength(destinations)/2;i++)
- buttons+=[llList2String(destinations,i*2)];
- llDialog(user,"Scegli destinazione ",buttons,100);
- }
- default
- {
- on_rez(integer start)
- {
- llResetScript();
- }
- state_entry()
- {
- llSetStatus(STATUS_PHYSICS,FALSE);
- llSetRot(ZERO_ROTATION);
- llSitTarget(<0,0,0.1>,ZERO_ROTATION);
- used=FALSE;
- move(0);
- index=0;
- }
- changed(integer change)
- {
- if(change & CHANGED_LINK)
- {
- if(!used)
- {
- used = TRUE;
- user = llAvatarOnSitTarget();
- if(user == NULL_KEY) {
- used = FALSE; // Make sure that there's really someone sitting on the poseball
- return;
- }
- llSay(0,"sit");
- llForceMouselook(TRUE);
- llSetStatus(STATUS_PHYSICS,TRUE);
- llSetBuoyancy(1);
- listener=llListen(100,"",user,"");
- llRequestPermissions(llAvatarOnSitTarget(), PERMISSION_TAKE_CONTROLS);
- dialogo();
- } else {
- used = FALSE;
- user = NULL_KEY; // Probably redundant, but we want to make sure that the value for ''user'' is empty.
- llSay(0,"unsit");
- llListenRemove(listener);
- llSetStatus(STATUS_PHYSICS,FALSE);
- llSetRot(ZERO_ROTATION);
- llSleep(2);
- llResetScript();
- }
- }
- }
- run_time_permissions(integer perm)
- {
- if (perm)
- {
- if (perm & PERMISSION_TAKE_CONTROLS)
- llTakeControls(
- CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT |
- CONTROL_BACK | CONTROL_FWD | CONTROL_UP | CONTROL_DOWN,
- TRUE, FALSE);
- }
- }
- control(key id, integer level, integer edge)
- {
- if( level & edge & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))
- { llSay(0,"right");
- index++;
- if(index*2>=llGetListLength(destinations)) index=0;
- move(index);
- }
- if( level & edge & (CONTROL_LEFT|CONTROL_ROT_LEFT))
- {
- llSay(0,"left");
- index--;
- if(index<0)index=llGetListLength(destinations)/2-1;
- move(index);
- }
- } //control
- listen(integer channel,string name, key id, string str)
- {
- integer i=llListFindList(destinations,[str]);
- if(i<0)llWhisper(0,"Non trovo '"+str+"'");
- move(i/2);
- }
- at_target(integer tnum, vector targetpos, vector ourpos)
- {
- llSetStatus(STATUS_PHYSICS,FALSE);
- llTargetRemove(tnum);
- llStopMoveToTarget();
- llSetRot(ZERO_ROTATION);
- dialogo();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement