lunes, 14 de mayo de 2012

Scripts Interesantes

SCRIPT PARA VEHICULOS.


integer Private = 1; // Change to 1 to prevent others riding.

vector Sitpos = <0.35,0,0.35>;
vector SitrotV = <0,-20,0>;
rotation Sitrot;
integer tt;
key oldagent;
key agent;
float forward_power = 12; //Power used to go forward (1 to 30)
float reverse_power = -6; //Power ued to go reverse (-1 to -30)
float turning_ratio = 2.0; //How sharply the vehicle turns. Less is more sharply. (.1 to 10)
integer turncount;
string Wheeldir = "WC";
string NewWheeldir = "WC";
string Wheelrot = "S";
string NewWheelrot = "S";
integer scount;
integer Speed;
integer Run;

string sit_message = "Ride"; //Sit message
string not_owner_message = "You are not the owner of this vehicle, buy a copy for 0$ and have your own to test in this sim. It will not work in other Open Sim Regions."; //Not owner message

setVehicle()
{
    //car
        llSetVehicleType(VEHICLE_TYPE_CAR);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.2);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.80);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 0.10);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 0.10);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.1);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0.1);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.1);
        llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <10.0, 2.0, 1000.0>);
        llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <0.1, 0.1, 0.1>);
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.50);
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 0.50);

}
Init()
{
    Sound(0);
    llSetStatus(STATUS_PHYSICS, FALSE);
    vector here = llGetPos();
    float h = llGround(<0,0,0>) + 0.52;
    vector rotv = llRot2Euler(llGetRot());
    rotation rot = llEuler2Rot(<0,0,rotv.z>);
    llSetPos(<here.x, here.y,h>);
    llSetRot(rot);
    Sitrot = llEuler2Rot(DEG_TO_RAD * SitrotV);
    llSetVehicleType(VEHICLE_TYPE_NONE);
    llMessageLinked(LINK_ALL_OTHERS, 0, "S", NULL_KEY);     // wheels stop
    llMessageLinked(LINK_ALL_OTHERS, 0, "WC", NULL_KEY);     // wheels straight
    Run = 0;
}

SetMaterial()
{
    llSetPrimitiveParams([PRIM_MATERIAL, PRIM_MATERIAL_GLASS]);
    llMessageLinked(LINK_ALL_OTHERS, 0, "SetMat", NULL_KEY);    // Tell daughter pims on ground to be glass
}

Sound(integer n)
{
    integer oldn;
    if(n != oldn)
    {
        oldn = n;
        if(n == 2)
        {
            llLoopSound("RUNNING",1);
        }
        else if(n == 1)
        {
            llLoopSound("IDLE",1);
        }
        else
        {
             llStopSound();
        }
    }
}

default
{
    state_entry()
    {
        Init();
        llSetSitText(sit_message);
        // forward-back,left-right,updown
        llSitTarget(Sitpos, Sitrot);
        llStopSound();
    }

    on_rez(integer rn){
        llResetScript();
    }

    changed(integer change)
    {
        if ((change & CHANGED_LINK) == CHANGED_LINK)
        {
            agent = llAvatarOnSitTarget();
            if (agent != NULL_KEY)
            {              
                if( (agent != llGetOwner()) && (Private == 1) )
                {
                    llSay(0, not_owner_message);
                    llUnSit(agent);
// not functional llPushObject(agent, <0,0,50>, ZERO_VECTOR, FALSE);
                }
                else
                {
                    //llTriggerSound("car_start",1);
// llMessageLinked(LINK_ALL_CHILDREN , 0, "WHEEL_DRIVING", NULL_KEY);
                    oldagent = agent;
                    setVehicle();
                    SetMaterial();
                    llSleep(.4);
                    llSetStatus(STATUS_PHYSICS, TRUE);
                    llSleep(.1);
                    Run = 1;
                    //Sensor is to make a crude Timer as TimerEvent fails on vehicles
                    llSensor("Non-Entity",NULL_KEY,PASSIVE,1.0, PI_BY_TWO);

                    llRequestPermissions(agent, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);
                    Sound(1);
                }
            }
            else
            {
                Init();
                llSleep(.4);
                llReleaseControls();
                llMessageLinked(LINK_ALL_OTHERS, 0, "S", NULL_KEY);
                Run = 0;
                llStopSound();
            }
        }
    }

    touch_start(integer tn){
    }

    run_time_permissions(integer perm)
    {
        if (perm)
        {
            llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_DOWN | CONTROL_UP | CONTROL_RIGHT |
                            CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT, TRUE, FALSE);
        }
    }

    control(key id, integer level, integer edge)
    {
        integer reverse=1;
        vector angular_motor;

        //get current speed
        vector vel = llGetVel();
        float speed = llVecMag(vel);

        //car controls
        if(level & CONTROL_FWD)
        {
            llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <10.0, 2.0, 1000.0>);
            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <forward_power,0,0>);
            reverse=1;
            NewWheelrot = "F";
            Speed = 20;
        }
        if(level & CONTROL_BACK)
        {
            llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <10.0, 2.0, 1000.0>);
            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <reverse_power,0,0>);
            reverse = -1;
            NewWheelrot = "R";
            Speed = 10;
        }

        if(level & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))
        {
            angular_motor.z -= speed / turning_ratio * reverse;
            NewWheeldir = "WR";
            turncount = 10;
        }

        if(level & (CONTROL_LEFT|CONTROL_ROT_LEFT))
        {
            angular_motor.z += speed / turning_ratio * reverse;
            NewWheeldir = "WL";
            turncount = 10;
        }

        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor);
        if(turncount > 0)
        {
            turncount--;
        }
        if(turncount == 1)
        {
            NewWheeldir = "WC";
        }
        if(Wheeldir != NewWheeldir){
            Wheeldir = NewWheeldir;
            llMessageLinked(LINK_ALL_OTHERS, 0, Wheeldir, NULL_KEY);
        }
        if(Wheelrot != NewWheelrot){
            Wheelrot = NewWheelrot;
            llMessageLinked(LINK_ALL_OTHERS, 0, Wheelrot, NULL_KEY);
        }
    } //end control  

    //Sensor is to make a crude Timer as TimerEvent fails on vehicles
    no_sensor()
    {
        if(scount < 1000)
        {
            scount++;
        }
        else
        {
            scount = 0;
            // This happens about once per second
            if(Speed > 0) Speed--;

            if(Speed > 2)  Sound(2);

            if(Speed == 1) {
                llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <1.0, 2.0, 1000.0>);
                llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,0>);
                llMessageLinked(LINK_ALL_OTHERS, 0, "S", NULL_KEY);
                Sound(1);
                Wheelrot = "S";
            }

        }

        if(Run == 1)
            llSensor("Non-Entity",NULL_KEY,PASSIVE,1.0, PI_BY_TWO);
    }

} //end default

SCRIPT PARA ABRIR Y CERRAR PUERTAS.




integer doorSteps = 4;
integer reversed  = FALSE;


rotateDoor(integer Open)
{
    rotation rot = llGetRot();
    rotation delta;
    integer  x;
    
    if (reversed) {Open = !Open;};


    if (Open)
    {
        delta = llEuler2Rot(<0, 0, PI/(doorSteps * 2)>);
    }
    else
    {
        delta = llEuler2Rot(<0, 0, -PI/(doorSteps * 2)>);
    }
    
    for (x = 0; x < doorSteps; x++)
    {
        rot = delta * rot;
        llSetRot(rot);
        llSleep(0.03125/doorSteps);
    }
}


default
{
    state_entry()
    {
        state closed;
    }
}


state closed
{
    
    touch_start(integer total_number)
    {
        llTriggerSound("264a8fb2-2cdd-b533-1fd2-2781341b7ac4", 0.5);
        rotateDoor(TRUE);
        state open;
    }
}


state open
{
    touch_start(integer num)
    {
        rotateDoor(FALSE);
        llTriggerSound("faba8cb7-bd30-e2a0-4b38-5fb44387ae72", 0.5);
        state closed;
    }
}
SENTARSE CON LAS PIERNAS CRUZADAS.



key avatar;
vector pos = <-0.25,0,0.8>;
//adjust the position to fit object -must be
//nonzero in at least one direction or script will not work!
rotation rot = <0,0,0,1>; //adjust rotation (1 in any vector gives 90 deg)
default
{
state_entry()
{
llSitTarget(pos, rot);
}
changed(integer change)
{
avatar = llAvatarOnSitTarget();
if(change & CHANGED_LINK)
{
if(avatar == NULL_KEY)
{
llStopAnimation("sit_ground");
llReleaseControls();
llResetScript();
}
else if(avatar == llAvatarOnSitTarget())
{
llRequestPermissions(avatar,PERMISSION_TRIGGER_ANIMATION );
}
}
}
run_time_permissions(integer perms)
{
if(perms)
{
llStopAnimation("sit");
llStartAnimation("sit_ground");
}
else
{
llUnSit(avatar);
}
}
}

domingo, 13 de mayo de 2012

SITIOS CON COSAS GRATIS



Yadnis Junkyard: Montones de cosas gratis o a 1 linden divididos por meses por lo que cada mes puedes consultar si hay novedades. También tiene sección de freebies del mes, zona de aprendizaje de construcción y árbol de dinero que no requiere cuenta.

Freebies Dungeon: Toneladas de freebies. Cuidado que también hay, sobre todo en las paredes, objetos baratos pero no gratuitos. Variedad de skins interesantes a 1 linden para mujer (no las he probado. Espero que no sean demos).

Freebie Heaven: Tres plantas de freebies variados y zona adyacente para abrir cajas.

Freebies Warehouse. Más de lo mismo en cajas. También camping chair para conseguir pelo de mujer.

Lucky Chair Station: (Cambio de dirección) No se trata exactamente de un sitio de freebies pero mantiene un listado de los lugares en los que una silla de la suerte en este mismo momento tiene cada letra del alfabeto con premio. Si pulsas en el panel tu letra inicial te da la dirección (en el historial la puedes consultar y directamente hacer el tp) de modo que puedes ir a recoger el premio si eres rápido y no se te adelanta nadie. En la misma zona han colocado bastantes sillas que regalan 1 linden o bien tarjetas de cantidad variable (de 25 a 150 lindens) para comprar productos en la zona (casi todo de chica, por cierto).

SITIOS CON HISTORIA

Camelot: Sitio rápido de visitar, con cierto encanto, que reproduce el castillo del mítico rey Arturo. Merece especialmente la pena la Sala del Trono con su mesa redonda y abundantes cuadros de pre-rafaelistas junto a algún otro icono medieval como el tapiz de la Dama del Unicornio. Al parecer se juega por allí rol pero no he tenido la oportunidad de comprobarlo.


París 1900: Viaje al pasado de la capital francesa. Bicicletas y vehículos de principios de siglo, locales de época (Moulin Rouge) y la posibilidad de tirarse en paracaídas desde la Torre Eiffel, montar en globo o patinar sobre hielo.


Nagaya: Bonito barrio tradicional japones con varias tiendas en las que comprar kimonos, instrumentos musicales japoneses, espadas, poses, construcciones orientales, etc... Si vas con tiempo puedes hacerte una sombrilla gratis y, en todo caso, no te pierdas los freebies entre los que se incluyen kimonos completos de chico y de chica en dos colores, banda para el pelo estilo Karate Kid o una lámpara japonesa de papel.

OTRO SITIO ROMÁNTICO EN SECOND LIFE

Wales Harbour: Probablemente las cataratas más impresionantes que he visto son las que te reciben al llegar a Wales Harbour. Sitio grande y bonito donde disfrutar de múltiples posibilidades con nuestra pareja. Tiene entre otros un castillo y una zona de tiendas para fanáticas de la seda. En determinadas zonas el contenido subido de tono sube escalas con zona para amos y sumisos. Quedas advertido/a.

SITIO ROMÁNTICO

Avilion Grove: Te permite hacer un paseo bajo las cataratas que cada ciertos metros tiene teleportes a unas salas ocultas. También hay un laberinto en que el premio de encontrar el centro es un rincón muy interesante. Viaje en cisne, sala de baile (con ropa mujer y hombre gratis a la entrada para ir de etiqueta), iglesia, rincones con bolas cariñosas, paseo entre almendros en flor...

COSAS PARA CHICO

http://maps.secondlife.com/secondlife/Twisted%20Souls/230/175/23

Aquí teneis cosas para chico a precios muy bajos. Algunas las podeis comprar por 1 linden. Aquí se encuentra un poco de todo.

Ejemplo de desintegración de oveja (Grupo 2)

Lo prometido es deuda: En este vídeo os mostramos cómo es la desintegración de objetos enlazados en Second Life gracias al script que nos pasó el equipo 1.


A continuación se muestra el
script modificado para que la oveja se desintegre al chocar el propietario contra ella. Esto nos da margen para que, a la hora de programar juegos o simulaciones en Second Life, los objetos puedan desintegrarse o explotar.