ascenseur

Répondre
Partager Rechercher
j aimerai créé un ascenseur pour la maison que je me suis buildé j ai trouvé en free une boite avec un bruitage et 4 scripts a l interieur : "elevator in a box". je ne sais que faire des scripts je cherche une ame charitable pour m aider
voici les 4 scripts
le premier ce nomme : Button Script1

Code PHP:

integer floor 2//Change this number to indicate floor number.  This is the Floor Number.
default
{
    
state_entry()
    {
    }
    
touch_start(integer total_number)
    {
        
llWhisper(0"going to #" + (string)floor); //Change this if you want it to say a different message when touched.
        
llMessageLinked(LINK_SET2"goto floor " + (string)floorNULL_KEY);
    }

le deuxieme se nomme : Elev - Floating text

Code PHP:

integer floor 2//Change this number to indicate floor number.  This is the Floor Number.
default
{
    
state_entry()
    {
    }
    
touch_start(integer total_number)
    {
        
llWhisper(0"going to #" + (string)floor); //Change this if you want it to say a different message when touched.
        
llMessageLinked(LINK_SET2"goto floor " + (string)floorNULL_KEY);
    }

le troisieme se nomme : Elevator Script

Code PHP:

vector  alignment;
vector  targetVector;
integer travelDistance;
integer numListen;
integer targetFloor = -1;
list    
floorHeights = [100,200,300,400,701]; //PUT THE FLOOR HIGHTS IN THE BRACKETS IN ACCENDING ORDER.  Ex: [10, 20, 30, 40]  
float   fixedFloorHeight 10//Set to floor heights, or set to -1 to use floorHeights list
float   speed 1.00//Valid values are 0.01 to 1.0, a Percentage of maxSpeed;
float   maxSpeed 10;
float   precision 0.1;
integer autoSpeed TRUE;
integer initialDistance;
integer counter 0;
elevate (vector end)
{
    
vector current llGetPos();
    
travelDistance llRound(current.z-end.z);
    
travelDistance llAbs(travelDistance);
 
    if (
autoSpeed)
    {
        if (
travelDistance < (initialDistance 2))
        {
            
speed -= (precision 25);
            if (
speed 1.00
              
speed 1.00;
        }
        else
        {
            
speed += (precision 20);
            if (
speed 1
              
speed 1;
        }
    }
    if (
travelDistance 30)
    {
        
travelDistance 30;
        if (
end.current.z)
        {
            
end.current.30;
        }
        else
        {
            
end.current.30;
        }
    }
    
float i travelDistance/(maxSpeed*speed);
    
llMoveToTarget(end,i);
}
GotoFloor (integer floor)
{    
    if (
targetFloor != floor)
    {
        
llSetStatus(STATUS_PHYSICSTRUE);
 
 
        
targetFloor floor;
 
        if (
fixedFloorHeight 0)
        {
            
targetVector alignment;
            
targetVector.alignment.+ (fixedFloorHeight floor);
        }
        else
        {
            
targetVector alignment;
            
targetVector.llList2Float(floorHeightsfloor);
        }
 
        
vector current llGetPos();
        
initialDistance llRound(current.z-targetVector.z);
        
initialDistance llAbs(initialDistance);
 
        if (
autoSpeed)
        {
            
speed 1.00;
        }
 
        
llSay(0"Heading for Floor #" + (string)(targetFloor+1) + " [" + (string)((integer)targetVector.z) + "m]");
        
elevate(targetVector);
        
llSetTimerEvent(precision);
    }
}
reset()
{
    
llSay(0"Resetting Elevator...");
    
llSetStatus(STATUS_ROTATE_XSTATUS_ROTATE_YSTATUS_ROTATE_ZFALSE);
 
    
alignment llGetPos();
    
llSetStatus(STATUS_PHYSICSFALSE);
    
llStopSound();
    
llListenRemove(numListen);
    
numListen llListen0""NULL_KEY"");
    
llSay(0"Elevator Reset");
}
checkM(key idstring m)
{
    
vector  pos;
    
integer Floor;
    
float   tempFloat;
 
    
llToLower(m);
    if (
== "kill keep")
    {
        
llSleep(5);
        
llDie();
    }
    if (
llSubStringIndex(m"goto floor") == 0)
    {
        
Floor = (integer)llGetSubString(m10llStringLength(m)) - 1;
        
GotoFloor(Floor);
    }
    if (
llSubStringIndex(m"go to floor") == 0)
    {
        
Floor = (integer)llGetSubString(m11llStringLength(m)) - 1;
        
GotoFloor(Floor);
    }
    if (
llSubStringIndex(m"floor") == 0)
    {
        
Floor = (integer)llGetSubString(m5llStringLength(m)) - 1;
        
GotoFloor(Floor);
    }
    if (
llSubStringIndex(m"speed") == 0)
    {
        
tempFloat = (float)llGetSubString(m5llStringLength(m));
        if ((
tempFloat 16) && (tempFloat <= 128))
        {
            
maxSpeed tempFloat;
        }
    }
}
default 
{
    
state_entry()
    {
        
reset();
    }
    
on_rez(integer start_param)
    {
        
llResetScript();
    }
    
listen(integer astring nkey idstring m
    { 
        if ((
m=="elevator reset") && (id==llGetOwner()))
        {
            
reset();
        }        
    } 
    
link_message(integer sender_numinteger numstring strkey id)
    {
        
checkM(idstr);
    }
    
timer()
    {
        
vector CurrentPos;
        
float tempfloat;
 
        
CurrentPos llGetPos();
        
tempfloat = (CurrentPos.targetVector.z);
 
        
counter++;
        if (
counter > (2/precision))
        {
            
llMessageLinked(LINK_SET, -1"dis", (string)llGetTimeOfDay() + ",Elevator at " + (string)((integer)CurrentPos.z) + "m");
            
counter 0;
        }
        if (
llFabs(tempfloat) < 2
        {
            if (
llFabs(tempfloat) < 0.05
            {
                
//Arrived at Floor
                
llWhisper(0"Arrived at floor #" + (string)(targetFloor+1));
                
llPlaySound("ElevatorNoises"1);
                
llSetTimerEvent(0); 
                
llSetStatus(STATUS_PHYSICSFALSE);
                
llStopSound();
            }
            else
            {
                
llMoveToTarget(targetVector,1.0);
            }
        }
        else 
        {
            if (
fixedFloorHeight 0)
            {
                
targetVector alignment;
                
targetVector.alignment.+ (fixedFloorHeight targetFloor);
            }
            else
            {
                
targetVector alignment;
                
targetVector.llList2Float(floorHeightstargetFloor);
            }
            
elevate(targetVector);
        }
    }

et le quatrieme se nomme : Network Script

Code PHP:

//*********************************
//Generic Networking Script
//by Hank Ramos
//Version 2.3.3
//*********************************
//Options
integer ID     = -1;    
float   TTL    20;
integer size   32;    
integer commCH 5524741;     //CHANGE THIS NUMBER IF YOU BUTTONS DONT CALL YOUR ELEVATOR.
 
//Variables
list    buffer;
integer numPriv;
key     myKey;
setupCH(integer ch)
{
    if (
ch != 0)
    {
        
commCH ch;
        
llListenRemove(numPriv);
        
numPriv llListen(commCH""NULL_KEY"");    
    }
}
default
{
    
state_entry()
    {
        
myKey llGetKey();
        
setupCH(commCH);
    }
    
on_rez(integer s)
    {
        
setupCH(s);
    }
    
listen(integer chstring nkey idstring m)
    {
        
//Separate out incoming data
        
list  L    llCSV2List(m);
        
float time llList2Float(L0);
        
//Only Process Data if under TTL
        
if ((llGetTimeOfDay() - time) < TTL)
        {
            
key     skey     llList2Key    (L1);
            
integer idn      llList2Integer(L2);
            
string  command  llList2String (L3);
            
string  data     llList2String (L4);
            
string  packetID = (string)((integer)(time*10000)) + (string)skey;
            if (
command == "idn")
            {
                
//Receiving ID number for this prim
                
ID idn;
                
setupCH((integer)data);
            }
            
//Only repeat data that we haven't repeated before
            
else if(llListFindList(buffer, [packetID]) < 0)
            {
                if ((
idn == ID) || (idn == -1))
                {
                    
//Send Message to Scripts in this Object
                    
llMessageLinked(LINK_SET, -2commanddata);
                }
                if ((
idn != ID) || (idn == -1))
                {
                    
//Reduce Buffer Size if too large
                    
integer listLength llGetListLength(buffer);
                    if (
listLength >= (size*2))
                        
buffer llList2List(buffersizelistLength);
                    
//Add data to buffer
                    
buffer += packetID;
                    
//Repeat Data
                    
llShout(commCHm);
                }
            }
        }
    }
    
link_message(integer sinteger nstring mkey id)
    {
        
//Don't process messages we sent ourselves using llMessageLinked
        
if (!= -2)
        { 
            if (
== "sch")
            {
                
setupCH(n);
            }
            else if (
== "sid")
            { 
                
ID n;
            }
            else if (
commCH != 0)
            {
                
llShout(commCH, (string)llGetTimeOfDay() + "," + (string)myKey "," + (string)"," "," + (string)id);
            }
        }
    }

Ensuite pour le son de l ascenseur je dois le mettre ou ?
tout cela a l air bien compliqué pour moi.
merci d avance
Bon c'est pas complet : les 2 premiers scripts sont les mêmes : ils sont à mettre dans les boutons de ta cabine, qui doivent être liés à la cabine. Change le numéro floor en tête pour chaque étage.
L'élévator script est à mettre dans le prim root de ta cabine, à priori le plancher.
Régle la hauteur des étages à la ligne list floorHeights = [100,200,300,400,701];
Si tu laisse ces valeurs là tu aura 5 étages : à 100, 200, 300, 400 et 701m.
Il te manque le bouton d'appel à chaque étage: le script Network devrait servir
à ça mais il lui manque l'émetteur (le script à mettre dans chaque bouton) et
à mon avis autre chose aussi: c'est à reécrire et sorry j'ai pas le temps
de faire.
Mais tu devrais obtenir un cabine qui fonctionne sans appel aux étages.
j ai commis une erreur le script
Elev - Floating text c est cela

Code PHP:

default
{
    
state_entry()
    {
        
llAllowInventoryDrop(TRUE); 
        
llSetText("", <100,0,0>, 2.0); 
Bonjour


Il manques

Code:
default
{
    state_entry()
    {
        llCollisionSound("", 0.0);
    }
}
4 Scripts pour 4 Niveau

Code:
integer floor = 1; //Etages 1 2 ou 3 ou 4

default
{
    state_entry()
    {
    }

    touch_start(integer total_number)
    {
        llWhisper(0, "going to #" + (string)floor);
        llMessageLinked(LINK_SET, -1, "goto floor " + (string)floor, NULL_KEY);
    }
}
Code:
integer floor = 2; //Etages 1 2 ou 3 ou 4

default
{
    state_entry()
    {
    }

    touch_start(integer total_number)
    {
        llWhisper(0, "going to #" + (string)floor);
        llMessageLinked(LINK_SET, -1, "goto floor " + (string)floor, NULL_KEY);
    }
}
Code:
integer floor = 3; //Etages 1 2 ou 3 ou 4

default
{
    state_entry()
    {
    }

    touch_start(integer total_number)
    {
        llWhisper(0, "going to #" + (string)floor);
        llMessageLinked(LINK_SET, -1, "goto floor " + (string)floor, NULL_KEY);
    }
}
Code:
integer floor = 4; //Etages 1 2 ou 3 ou 4

default
{
    state_entry()
    {
    }

    touch_start(integer total_number)
    {
        llWhisper(0, "going to #" + (string)floor);
        llMessageLinked(LINK_SET, -1, "goto floor " + (string)floor, NULL_KEY);
    }
}
et une notes


Code:
Etape1:
--------
Tout d'abord creer un prim de n'importe quelle forme qui vous servira d'ascenseur.
Ce prim servira de monter l'individu (genre de monte charge)

Etape2:
--------
Inserez les scripts " Script ascenseur" , "Script reseau" ou le Script "Pas de son "si vous ne voulez pas de son.
Inserez aussi le son "ElevatorNoises"

Etape3:
--------
Ouvrez le script "Script ascenseur" pour le configurer , le reste des explications concernant cette configuration se trouve dans le script !

Etape4:
--------
Creez ici les boutons pour commander les ascenseurs vers le niveau ou vous voulez aller , ce prim peut etre dans la forme que vous souhaitez. 

 Etape5:
 --------
 Dans chaque bouton creer inserez un des quatre scripts selon le nombre de niveau que vous souhaitez

Etape6:
Vous pouvez creer ici les contours de l ascenseur (la cage)

 Recommandations
 *****************************************
 Si votre cage d'ascenseur touche votre prim "monte charge" (Etape1) , mettez alors cette cage en fantome (ou phantom)
car le prim cree dans l'etape1 pour elever des avatars va se mettre en mode physic !

Meme procedure si vous mettez les bouton (commande de niveau) dans la cage !

Si il y a interaction entre le prim qui va monter et le reste de votre construction celui ci ne montera pas et restera bloquer car il est physique (physic) !!

De meme si le prim touche le sol !
Script ascenseur

Code:
vector  alignment;
vector  targetVector;
integer travelDistance;
integer numListen;
integer targetFloor = -1;
list    floorHeights = [601.402, 610.067, 618.488, 626.888, 635.208]; 
float   fixedFloorHeight = -1;
float   speed = 1.00;
float   maxSpeed = 30;
float   precision = 0.1;
integer autoSpeed = TRUE;
integer initialDistance;
integer counter = 0;

elevate (vector end)
{
    vector current = llGetPos();
    travelDistance = llRound(current.z-end.z);
    travelDistance = llAbs(travelDistance);
    
    if (autoSpeed)
    {
        if (travelDistance < (initialDistance / 2))
        {
            speed -= (precision * 2 / 25);
            if (speed < 1.00) 
              speed = 1.00;
        }
        else
        {
            speed += (precision / 20);
            if (speed > 1) 
              speed = 1;
        }
    }
    if (travelDistance > 30)
    {
        travelDistance = 30;
        if (end.z > current.z)
        {
            end.z = current.z + 30;
        }
        else
        {
            end.z = current.z - 30;
        }
    }
    float i = travelDistance/(maxSpeed*speed);
    llMoveToTarget(end,i);
}

GotoFloor (integer floor)
{    
    if (targetFloor != floor)
    {
        llSetStatus(STATUS_PHYSICS, TRUE);
      
        
        targetFloor = floor;
    
        if (fixedFloorHeight > 0)
        {
            targetVector = alignment;
            targetVector.z = alignment.z + (fixedFloorHeight * floor);
        }
        else
        {
            targetVector = alignment;
            targetVector.z = llList2Float(floorHeights, floor);
        }
        
        vector current = llGetPos();
        initialDistance = llRound(current.z-targetVector.z);
        initialDistance = llAbs(initialDistance);
        
        if (autoSpeed)
        {
            speed = 1.00;
        }
    
        llSay(0, "Niveau #" + (string)(targetFloor+1) + " [" + (string)((integer)targetVector.z) + "m]");
        elevate(targetVector);
        llSetTimerEvent(precision);
    }
}

reset()
{
    llSay(0, "Reinitialisation de l'ascenseur.....");
    llSetStatus(STATUS_ROTATE_X| STATUS_ROTATE_Y| STATUS_ROTATE_Z, FALSE);
    
    alignment = llGetPos();
    llSetStatus(STATUS_PHYSICS, FALSE);
    llStopSound();
    llListenRemove(numListen);
    numListen = llListen( 0, "", NULL_KEY, "");
    llSay(0, "Ascenseur Reinitialise");
}
checkM(key id, string m)
{
    vector  pos;
    integer Floor;
    float   tempFloat;
    
    m = llToLower(m);

    if (m == "kill keep")
    {
        llSleep(5);
        llDie();
    }
    if (llSubStringIndex(m, "goto floor") == 0)
    {
        Floor = (integer)llGetSubString(m, 10, llStringLength(m)) - 1;
        GotoFloor(Floor);
    }
    if (llSubStringIndex(m, "go to floor") == 0)
    {
        Floor = (integer)llGetSubString(m, 11, llStringLength(m)) - 1;
        GotoFloor(Floor);
    }
    if (llSubStringIndex(m, "floor") == 0)
    {
        Floor = (integer)llGetSubString(m, 5, llStringLength(m)) - 1;
        GotoFloor(Floor);
    }
    if (llSubStringIndex(m, "speed") == 0)
    {
        tempFloat = (float)llGetSubString(m, 5, llStringLength(m));
        if ((tempFloat > 16) && (tempFloat <= 128))
        {
            maxSpeed = tempFloat;
        }
    }
}

default 
{
    state_entry()
    {
        reset();
    }
    on_rez(integer start_param)
    {
        llResetScript();
    }
    listen(integer a, string n, key id, string m) 
    { 
        if ((m=="elevator reset") && (id==llGetOwner()))
        {
            reset();
        }        
    } 
    link_message(integer sender_num, integer num, string str, key id)
    {
        checkM(id, str);
    }
    timer()
    {
        vector CurrentPos;
        float tempfloat;
        
        CurrentPos = llGetPos();
        tempfloat = (CurrentPos.z - targetVector.z);
        
        counter++;
        if (counter > (2/precision))
        {
            llMessageLinked(LINK_SET, -1, "dis", (string)llGetTimeOfDay() + ",Elevator at " + (string)((integer)CurrentPos.z) + "m");
            counter = 0;
        }
        if (llFabs(tempfloat) < 2) 
        {
            if (llFabs(tempfloat) < 0.05) 
            {
                //Arrived at Floor
                llWhisper(0, "Arrive au niveau #" + (string)(targetFloor+1));
                llPlaySound("ElevatorNoises", 1);
                llSetTimerEvent(0); 
                llSetStatus(STATUS_PHYSICS, FALSE);
                llStopSound();
            }
            else
            {
                llMoveToTarget(targetVector,1.0);
            }
        }
        else 
        {
            if (fixedFloorHeight > 0)
            {
                targetVector = alignment;
                targetVector.z = alignment.z + (fixedFloorHeight * targetFloor);
            }
            else
            {
                targetVector = alignment;
                targetVector.z = llList2Float(floorHeights, targetFloor);
            }
            elevate(targetVector);
        }
    }
}
Script reseau
Code:
integer ID     = -1;    
float   TTL    = 20;
integer size   = 32;    
integer commCH = 5524741;
list    buffer;
integer numPriv;
key     myKey;

setupCH(integer ch)
{
    if (ch != 0)
    {
        commCH = ch;
        llListenRemove(numPriv);
        numPriv = llListen(commCH, "", NULL_KEY, "");    
    }
}

default
{
    state_entry()
    {
        myKey = llGetKey();
        setupCH(commCH);
    }
    on_rez(integer s)
    {
        setupCH(s);
    }
    listen(integer ch, string n, key id, string m)
    {
        //Separate out incoming data
        list  L    = llCSV2List(m);
        float time = llList2Float(L, 0);
        //Only Process Data if under TTL
        if ((llGetTimeOfDay() - time) < TTL)
        {
            key     skey     = llList2Key    (L, 1);
            integer idn      = llList2Integer(L, 2);
            string  command  = llList2String (L, 3);
            string  data     = llList2String (L, 4);
            string  packetID = (string)((integer)(time*10000)) + (string)skey;
            if (command == "idn")
            {
                //Receiving ID number for this prim
                ID = idn;
                setupCH((integer)data);
            }
            //Only repeat data that we haven't repeated before
            else if(llListFindList(buffer, [packetID]) < 0)
            {
                if ((idn == ID) || (idn == -1))
                {
                    //Send Message to Scripts in this Object
                    llMessageLinked(LINK_SET, -2, command, data);
                }
                if ((idn != ID) || (idn == -1))
                {
                    //Reduce Buffer Size if too large
                    integer listLength = llGetListLength(buffer);
                    if (listLength >= (size*2))
                        buffer = llList2List(buffer, size, listLength);
                    //Add data to buffer
                    buffer += packetID;
                    //Repeat Data
                    llShout(commCH, m);
                }
            }
        }
    }
    link_message(integer s, integer n, string m, key id)
    {
        //Don't process messages we sent ourselves using llMessageLinked
        if (n != -2)
        { 
            if (m == "sch")
            {
                setupCH(n);
            }
            else if (m == "sid")
            { 
                ID = n;
            }
            else if (commCH != 0)
            {
                llShout(commCH, (string)llGetTimeOfDay() + "," + (string)myKey + "," + (string)n + "," + m + "," + (string)id);
            }
        }
    }
}
Bonjour


Déja cette ascenseur ne marche pas beaucoup je te conseil de trouvé autre choses car ce truc va voler dans tout les sens et se bloquer souvent.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés