Teleport

De VirtUAM-wiki
Saltar a: navegación, buscar
40x40px Esta página está actualizada a la versión OpenSim 0.7.5

Como se vió en secciones anteriores las funciones OS, propias de OpenSim, permiten realizar otro tipo de acciones diferentes a las que nos limita el lenguaje LSL. Una de las más utilizadas es la de teleport.

OsTeleportAgent

Esta función hace teleport a un avatar a una determinada posición. Las sintaxis admitidas son las siguientes:

<source lang="lsl2"> void osTeleportAgent(string agent, integer regionX, integer regionY, vector position, vector lookat) void osTeleportAgent(string agent, string regionName, vector position, vector lookat) void osTeleportAgent(string agent, vector position, vector lookat) </source>

La primera opción realiza el teleport a una región especificada por sus coordenadas X e Y. La segunda lo lleva a cabo mediante el nombre de la región destino. La tercera y última opción realiza el teleport dentro de la propia región a una posición específica.


Para que la función osTeleportAgent() funcione, el dueño del objeto debe ser el mismo que el de la región en la que se encuentra el avatar. De no ser así, el script no lo llevará a cabo.


Hay que habilitar las funciones OS en el fichero de configuración Opensim.ini y establecer el nivel de riesgo a Severe. <source lang="ini" highlight=4,9> [XEngine]

   ;# {AllowOSFunctions} {Enabled:true} {Allow OSFunctions? (DANGEROUS!)} {true false} false
   ;; Allow the use of os* functions (some are dangerous)
   AllowOSFunctions = true
   ;# {OSFunctionThreatLevel} {Enabled:true AllowOSFunctions:true} {OSFunction threat level? (DANGEROUS!)} {None VeryLow Low Moderate High VeryHigh Severe} VeryLow
   ;; Threat level to allow, one of None, VeryLow, Low, Moderate, High, VeryHigh, Severe
   ;; See http://opensimulator.org/wiki/Threat_level for more information on these levels.
   OSFunctionThreatLevel = Severe

</source>

Ejemplo

<source lang="lsl2"> // Example osTeleportAgent Script // // Set Destination as described below, There are a Few Options depending on Application: // IN GRID Teleport // Destination = "1000,1000"; = Using In-Grid Map XXXX,YYYY coordinates // Destination = "RegionName"; = Using RegionName // HyperGrid Teleport (region must be HG Enabled) // Destination = "TcpIpAddr:Port:RegionName"; = Using the Target/Destination IP Address // Destination = "DNSname:Port:RegionName"; = Using the Target/Detination DNSname // Note: RegionName is Optionally Specified to deliver Avatar to specific region in an instance. // // ======================================================================================== // === SET DESTINATION INFO HERE === // string Destination = "LBSA Plaza"; // your target destination here (SEE NEXT LINES) Can Be vector LandingPoint = <128,128,50>; // X,Y,Z landing point for avatar to arrive at vector LookAt = <1,1,1>; // which way they look at when arriving // default {

 on_rez(integer start_param)
 {
   llResetScript();
 }
 changed(integer change) // something changed, take action
 {
   if(change & CHANGED_OWNER)
     llResetScript();
   else if (change & 256) // that bit is set during a region restart
     llResetScript();
 }
 state_entry()
 {
   llWhisper(0, "OS Teleportal Active");
 }
 touch_start(integer num_detected) 
 {
   key avatar = llDetectedKey(0);
   llInstantMessage(avatar, "Teleporting you to : "+Destination);
   osTeleportAgent(avatar, Destination, LandingPoint, LookAt); 
 }

} </source>

A continuación se muestra un vídeo en el que un avatar se teletransporta dentro de la misma región a dos zonas diferentes, el primer teleport se realiza mediante la colisión con un objeto y el segundo mediante el evento touch. Archivo:Teleport.flv