Second Life: A Programmer's Perspective
by Dana Moore and Ray Budd

Listing One

 1 default
 2 {
 3     state_entry()
 4     {
 5         llSay(0, "Hello, Avatar!");
 6     }
 7 
 8     touch_start(integer total_number)
 9     {
10         llSay(0, "Touched.");
11     }
12 }


Listing Two 

 1 //This script forwards all surrounding chat to the via email
 2
 3
 4 string g_Mail_Addr = "somename@some_domain.com";
 5 integer g_email = FALSE;
 6 integer g_IM = FALSE;
 7 integer listen_channel = 0;
 8 integer command_channel = 2;
 9 float g_maxtimeout = 180.0;
10 string g_emailStateOn = "Recording has been enabled!";
11 string g_emailStateOff = "Recording has been disabled!";
12 string g_IMStateOn = "IM relay has been enabled!";
13 string g_IMStateOff = "IM relay has been disabled!";
14
15 default
16 {
17  on_rez(integer param) {
18      llResetScript();
19  }//on_rez
20
21  // toggle state during the touch handler
22  state_entry(){  // possible to listen on more than one channel?
23      llGiveInventory(llGetOwner(), llGetInventoryName(INVENTORY_OBJECT, 0));
24      string owner = llGetOwner();
25      llListen( command_channel, "", owner, "" );
26      llListen( listen_channel, "", NULL_KEY, "" );
27      llInstantMessage(owner, g_emailStateOff+" Type: '/2 hear! <email address>' to capture close proximity inputs.");
28      llInstantMessage(owner," Type: '/2 !hear' to disable capture.");
29      llInstantMessage(owner, " Type: '/2 IM!' to enable IM feedback.");
30      llSetTimerEvent(g_maxtimeout);
31
32  }//state entry
33
34  listen( integer channel, string name, key id, string message ){
35      string owner = llGetOwner();
36      if (channel == command_channel){
37          list messageContent = llParseString2List(message, [" "], []);
38          integer len = llGetListLength(messageContent);
39          message = llList2String(messageContent,0);
40          if(message == "!hear"){
41              g_email = FALSE;
42              llInstantMessage(owner, g_emailStateOff);
43          }//disable email  
44              if(message == "hear!"){
45               if (len < 2){
46               llInstantMessage(owner, "incomplete message: I need an email address too");
47              } else {
48                  g_email = TRUE;
49                  g_Mail_Addr = llList2String(messageContent,1);
50                  llSetTimerEvent(g_maxtimeout);
51                  llInstantMessage(owner, g_emailStateOn+" sending to "+g_Mail_Addr);
52              }    
53          }//enable email
54          if(message == "!IM"){  //default mode
55              g_IM = FALSE;
56              llInstantMessage(owner, g_IMStateOff);
57          }//disable IM
58          if(message == "IM!"){
59              g_IM = TRUE;
60              llInstantMessage(owner, g_IMStateOn);
61          }//enable IM
62      }
63      if(g_email){
64          if(g_IM){
65              //send IM to owner of chat channel relay if on
66              llInstantMessage(owner, message);
67          }
68          //send email to owner of chat channel relay
69          llEmail(g_Mail_Addr, "SL Listening", message);
70      }//end if(g_email)
71  }// end listen
72
73  timer(){ // on expire of timer, discontinue
74       g_email = FALSE;
75       g_IM = FALSE;
76  }
77
78 }//default   



2


