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 5: Zeile 5:
 
   
 
   
 
   
 
   
 +
 
  rez_child()
 
  rez_child()
 
  {
 
  {
Zeile 12: Zeile 13:
 
         // Offspring ttl should be one closer to zero
 
         // Offspring ttl should be one closer to zero
 
         integer ttl_child = ttl - 1;
 
         integer ttl_child = ttl - 1;
 
 
         // Rez child one meter above me
 
         // Rez child one meter above me
 
         llRezObject("1000er", llGetPos()+<0,0,1>, <0,0,0>, <0,0,0,0>, ttl_child);
 
         llRezObject("1000er", llGetPos()+<0,0,1>, <0,0,0>, <0,0,0,0>, ttl_child);
 
     }
 
     }
 
  }
 
  }
 +
  
 
  default
 
  default
Zeile 26: Zeile 27:
 
     }
 
     }
 
   
 
   
 +
 
     // llRezObject throws event object_rez on the parent with the offspring as parameter   
 
     // llRezObject throws event object_rez on the parent with the offspring as parameter   
 
     object_rez(key child)  
 
     object_rez(key child)  
Zeile 33: Zeile 35:
 
     }  
 
     }  
 
      
 
      
 +
 
     // When rezzed, the event on_rez is called on me as the child
 
     // When rezzed, the event on_rez is called on me as the child
 
     on_rez(integer ttl_in)
 
     on_rez(integer ttl_in)
Zeile 39: Zeile 42:
 
         ttl = ttl_in;
 
         ttl = ttl_in;
 
     }
 
     }
 +
 +
  
 
     // Because of the script-delay we have to connect the grand-child rezzing  
 
     // Because of the script-delay we have to connect the grand-child rezzing  

Version vom 5. April 2007, 21:10 Uhr

// 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;


rez_child()
{
   // Check if we're allowed to create any more offspring
   if(ttl > 0)
   {
       // Offspring ttl should be one closer to zero
       integer ttl_child = ttl - 1;
       // Rez child one meter above me
       llRezObject("1000er", llGetPos()+<0,0,1>, <0,0,0>, <0,0,0,0>, ttl_child);
   }
}


default
{
   // If you touch me, we'll have babies!
   touch_start(integer total_number)
   {
       rez_child();
   }

   // llRezObject throws event object_rez on the parent with the offspring as parameter   
   object_rez(key child) 
   { 
       // Give copy of child to child
       llGiveInventory(child, llKey2Name(child)); 
   } 
   
   // When rezzed, the event on_rez is called on me as the child
   on_rez(integer ttl_in)
   {
       // Save child (this one) ttl;
       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)
   {
       if(change == CHANGED_INVENTORY)
       {
           rez_child();        
       }
   }
}