Second Life/Selfreplication: Unterschied zwischen den Versionen

aus Metalab, dem offenen Zentrum für meta-disziplinäre Magier und technisch-kreative Enthusiasten.
Wechseln zu: Navigation, Suche
K
Zeile 1: Zeile 1:
// The ttl variable is a counter, decreased for each subsequent replication,
 
// the child that get rezzed with a ttl value of zero will not procreate.
 
  
integer ttl = 3;
+
== code ==
  
  
  
rez_child()
+
integer ttl = 3;
{
+
 
  // Check if we're allowed to create any more offspring
+
 
 +
 
 +
rez_child()
 +
{
 
   if(ttl > 0)
 
   if(ttl > 0)
 
   {
 
   {
      // Offspring ttl should be one closer to zero
 
 
       integer ttl_child = ttl - 1;
 
       integer ttl_child = ttl - 1;
      // Rez child one meter above me
 
 
       llRezObject("1000er", llGetPos()+<1.5,0,0>, <0,0,0>, llEuler2Rot(<0,90,0> * DEG_TO_RAD) , ttl_child);
 
       llRezObject("1000er", llGetPos()+<1.5,0,0>, <0,0,0>, llEuler2Rot(<0,90,0> * DEG_TO_RAD) , ttl_child);
 
   }
 
   }
}
+
}
  
  
default
+
default
{
+
{
  // If you touch me, we'll have babies!
+
 
 
   touch_start(integer total_number)
 
   touch_start(integer total_number)
 
   {
 
   {
Zeile 28: Zeile 27:
  
  
  // llRezObject throws event object_rez on the parent with the offspring as parameter 
 
 
   object_rez(key child)  
 
   object_rez(key child)  
 
   {  
 
   {  
      // Give copy of child to child
 
 
       llGiveInventory(child, llKey2Name(child));  
 
       llGiveInventory(child, llKey2Name(child));  
 
   }  
 
   }  
 
+
 
+
 
  // When rezzed, the event on_rez is called on me as the child
+
 
   on_rez(integer ttl_in)
 
   on_rez(integer ttl_in)
 
   {
 
   {
      // Save child (this one) ttl;
 
 
       ttl = ttl_in;
 
       ttl = ttl_in;
 
   }
 
   }
  
  
  // Because of the script-delay we have to connect the grand-child rezzing
 
  // to the 'changed' event, which happens when someone (the parent) has
 
  // given me (as the child) something (a copy of myself)
 
 
   changed(integer change)
 
   changed(integer change)
 
   {
 
   {
Zeile 54: Zeile 46:
 
       }
 
       }
 
   }
 
   }
}
+
}

Version vom 6. April 2007, 00:05 Uhr

code

integer ttl = 3;


rez_child()
{
  if(ttl > 0)
  {
      integer ttl_child = ttl - 1;
      llRezObject("1000er", llGetPos()+<1.5,0,0>, <0,0,0>, llEuler2Rot(<0,90,0> * DEG_TO_RAD) , ttl_child);
  }
}


default
{
  touch_start(integer total_number)
  {
      rez_child();
  }


  object_rez(key child) 
  { 
      llGiveInventory(child, llKey2Name(child)); 
  } 

 
  on_rez(integer ttl_in)
  {
      ttl = ttl_in;
  }


  changed(integer change)
  {
      if(change == CHANGED_INVENTORY)
      {
          rez_child();        
      }
  }
}