Event test script

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

To do:

  • object_rez
  • email
  • link_message
  • not_at_target
  • at_target
  • remote_data

<lsl> integer touch_start_pass = FALSE; integer touch_over_pass = FALSE; key ds_request; integer control_state = 0; key http_request; string http_url="http://www.google.com"; integer collision_state = 0; integer land_collision_state = 0; integer rot_target_state = 0; integer moving_state = 0; default {

   state_entry()
   {
       llSetStatus(STATUS_PHYSICS, FALSE);
       llSay(0, "Take me in to your inventory and then rez.");
   }

   on_rez(integer start_param)
   {
       state test_touch;
   }
   
   state_exit()
   {
       //llSay(0, "Initial state test success (on_rez, state_exit)");
   }

}

state test_touch {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   
   state_entry()
   {
       llSay(0, "Touch me!");
       touch_start_pass = FALSE;
       touch_over_pass = FALSE;
   }
   
   touch_start(integer num_detected)
   {
       touch_start_pass = TRUE;
   }
   
   touch(integer num_detected)
   {
       touch_over_pass = TRUE;
   }
   
   touch_end(integer num_detected)
   {
       if (touch_start_pass && touch_over_pass)
       {
           state test_money;
       }
       else
       {
           llSay(0, "Touch test failed.");
       }
   }
   state_exit()
   {
       llSay(0, "Touch test success");
   }

}

state test_money {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   state_entry()
   {
       llSay(0, "Give me some L$.");
   }
   
   money(key giver, integer amount) {
       state test_listen;
   }
       
   state_exit()
   {
       //llSay(0, "Money test success");
   }
 

}

state test_listen {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   
   state_entry()
   {
       llSay(0, "say, \"hello\"");
       llListen( 0, "", NULL_KEY, "" ); 
   }
   listen( integer channel, string name, key id, string message )
   {
       // TODO perhaps store the id of the person who kicked off the tests and check that against id
       if (channel == 0 && message == "hello")
       {
           state test_dataserver;
       }
   }
   
   state_exit()
   {
       //llSay(0, "Listen test passed");
   }

}


state test_dataserver {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   
   state_entry() 
   {
       //llSay(0, "Looking up your SL creation date.");
       ds_request = llRequestAgentData(llGetOwner(), DATA_BORN); // request your SL creation date
   }
   
   dataserver(key queryid, string data) 
   {
       if( ds_request == queryid )
       {
           llSay(0, "You were born on " + data);
           state test_perms_and_controls;
       }
   }
   
   state_exit()
   {
       //llSay(0, "dataserver test passed");
   }

}

// TODO make this two seperate tests state test_perms_and_controls {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   
   state_entry()
   {
       control_state = 0;
       llSay(0, "Grant permissions for control.");
       llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
   }
   run_time_permissions(integer perm)
   {
       if (perm & (PERMISSION_TAKE_CONTROLS))
       {
           llTakeControls(CONTROL_FWD|CONTROL_BACK|CONTROL_LEFT|CONTROL_RIGHT, TRUE, FALSE);
           llSay(0, "Press Forward (you may need to to go mouse look)");
       }
   }
   
   control(key id, integer held, integer change)
   {
       if ((held & change & CONTROL_FWD) && control_state == 0)
       {
           llSay(0, "Press Left");
           ++control_state;
       }
       if ((held & change & CONTROL_LEFT) && control_state == 1)
       {
           llSay(0, "Press Back");
           ++control_state;
       }         
       if ((held & change & CONTROL_BACK) && control_state == 2)
       {
           llSay(0, "Press Right");
           ++control_state;
       } 
       if ((held & change & CONTROL_RIGHT) && control_state == 3)
       {
           llReleaseControls();
           state test_timer;
       } 
          
   }
   
   state_exit()
   {
       //llSay(0, "control and perms test");
   }

}

state test_timer {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   
   state_entry() 
   {
       //llSay(0, "Timer test start");
       llSetTimerEvent(1.0);
   }
   
   timer() 
   {
       llSetTimerEvent(0.0);
       state test_http;
   }    
       
   state_exit()
   {
       //llSay(0, "Timer test end");
   }

}

state test_http {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   
   state_entry() 
   {
       //llSay(0, "http test start");
       http_request = llHTTPRequest(http_url, [] ,"");
   }
   
   http_response(key id,integer status, list meta, string body)
   {
       if(http_request == id)
       {
           state test_land_collision;
       }
   }    
       
   state_exit()
   {
       //llSay(0, "http test end");
   }

}

state test_land_collision {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   
   state_entry() 
   {
       //llSay(0, "land collision test start");
       llSetStatus(STATUS_PHYSICS, TRUE);
       land_collision_state = 0;
   }
   
   land_collision_start(vector pos)
   {
       //llSay(0, "land_collision_start");
       if (land_collision_state == 0)
       {
            ++land_collision_state;
       }
   }
   land_collision(vector pos)
   {
       //llSay(0, "land_collision");
       if (land_collision_state == 1)
       {
           ++land_collision_state;
       }
   }
   
   land_collision_end(vector pos)
   {
       //llSay(0, "land_collision_end");
       if (land_collision_state == 2)
       {
           llSetStatus(STATUS_PHYSICS, FALSE);
           state test_rot_target;
       }
   }
           
   state_exit()
   {
       //llSay(0, "land collision test end");
   }    

}


state test_rot_target {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   
   state_entry() 
   {
       //llSay(0, "test_rot_target");
       integer rot_handle = llRotTarget(<0,0,0,1>, 0); 
       rot_target_state = 0;
   }
   
   not_at_rot_target()
   {
       //llSay(0, "not_at_rot_target");
       if (rot_target_state == 0)
       {
           integer rot_handle = llRotTarget(<0,0,0,1>, 7); 
           rot_target_state = 1;
       }
   }
   
   at_rot_target(integer tnum, rotation targetrot, rotation ourrot)
   {
       //llSay(0, "at_rot_target");
       if (rot_target_state == 1)
       {
           rot_target_state = 2;
           state test_collision;
       }            
   }
 
   state_exit()
   {
       //llSay(0, "rot_target test end");
   }    

}


state test_collision {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   
   state_entry() 
   {
       llSay(0, "Walk in to the box");
       llSetStatus(STATUS_PHYSICS, TRUE);
       collision_state = 0;
   }
   
   collision_start(integer num_detected)
   {
       //llSay(0, "collision_start");
       if (collision_state == 0)
       {
            ++collision_state;
       }
   }
   collision(integer num_detected)
   {
       //llSay(0, "collision");
       if (collision_state == 1)
       {
           ++collision_state;
       }
   }
   
   collision_end(integer num_detected)
   {
       //llSay(0, "collision_end");
       if (collision_state == 2)
       {
           llSetStatus(STATUS_PHYSICS, FALSE);
           state test_attach;
       }
   }
           
   state_exit()
   {
       //llSay(0, "land collision test end");
   }    

}

state test_attach {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   
   state_entry() 
   {
       llSay(0, "Attach to yourself");
   }
   
   attach(key attached)
   {
       if (attached == NULL_KEY) 
       {
           state test_change;
       }
       else
       {
           llSay(0, "Drop me.");
       }
   }
           
   state_exit()
   {
       //llSay(0, "land collision test end");
   }    

}

state test_change {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   
   state_entry() 
   {
       llSetColor(<1,1,1>, ALL_SIDES);
   }
   
   changed(integer change)
   {
       if (change & CHANGED_COLOR)
       {
           state test_moving;
       }
   }
           
   state_exit()
   {
   }    

}

state test_moving {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   
   state_entry() 
   {
       llSay(0, "Move me, then place somewhere flat");
       moving_state = 0;
       llSetStatus(STATUS_PHYSICS, TRUE);
   }
           
   state_exit()
   {
       llSetStatus(STATUS_PHYSICS, FALSE);
   } 
   
   moving_start() 
   {
       moving_state = 1;
   }
       
   moving_end() 
   {
       if (moving_state == 1)
       {
           state test_sensor;
       }
   }   

}

state test_sensor {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   
   state_entry() 
   {
       llSay(0, "Move avatar at least away 1m");
       llSensor("", NULL_KEY, AGENT, 1, PI); 
   }
           
   state_exit()
   {
       
   } 
   
   sensor(integer total_number)
   {
       state test_end;
   }  
   
   no_sensor() 
   {
       llSensor("", NULL_KEY, AGENT, 10, PI); 
   }

}

state test_end {

   on_rez(integer start_param)
   {
       state test_touch;
   }
   state_entry()
   {
       llSay(0, "All states/tests completed. Success!");
   }   

}

</lsl>