Gestion fenetres

Répondre
Partager Rechercher
Bonjour d'un petit nouveau

J'ai construit une maison pour une amie mais la je coince sur la gestion des fenêtres.
En réalité j'ai trouvé pleins de scripts mais il faudrait que je fasse un mix pour avoir un truc comme je désir.
Je me retrouve avec Syntaxe erreur en permanence lol.

Alors si quelqu'un peut me donner un coup de main je prends

En résumé
-Acces list
-Gestion par pièce.
-Gestion Phantome
-Choix de teinte sur LA/LES face (s) (choix par note card) et pour OPAQUE c'est une autre texture qui est placée cela afin de limiter le nombre de prims

Pas chiant le mec lol
Bon tout cela existe et j'ai les scripts mais d'une façon éparse.

Je suis capable après de développer le truc mais il me faudrait au moins la trame de départ

MERCI
...
Merci tout d'abord a vous
Pas de soucis pour coller les scripts ici en prime ils sont trouvables sans problème
Le seul hic que je rencontre c'est la fusion de ces scripts car ils ont des fonctions intéressantes chacun mais aucuns reprend l'ensemble des fonctions.
Le script d'Icman fait partie de ceux la notamment pour la gestion de l'accès mais il ne traite pas une couche Alpha.

Je dirais que la bonne base est le script si dessous mais avec en plus:
Une accès liste
Une gestion par baie et pour être au top une texture pour "OPAQUE"

Code:
   
         string CONFIG_CARD = "Configuration";
integer FACE= 0;
 integer lkey;
integer NotecardLine;
key QueryID;

init()
{
}

default
{
    state_entry()
    {
        llOwnerSay("Initializing…");
 
        if (llGetInventoryType(CONFIG_CARD) == INVENTORY_NOTECARD)
        {
            NotecardLine = 0;
            QueryID = llGetNotecardLine( CONFIG_CARD, NotecardLine );
        }
        else
        {
            llOwnerSay("Configuration notecard missing, using defaults.");
            state Running;
        }
    }
 
    dataserver( key queryid, string data )
    {
        list temp;
        string name;
        string value;
 
        if ( queryid == QueryID )
        {
            if ( data != EOF )
            {
                if ( llGetSubString(data, 0, 0) != "#" && llStringTrim(data, STRING_TRIM) != "" )
                {
                    temp = llParseString2List(data, ["="], []);
                    name = llStringTrim(llToLower(llList2String(temp, 0)), STRING_TRIM);
                    value = llStringTrim(llList2String(temp, 1), STRING_TRIM);
 
                    if ( name == "face" )
                    {
                        FACE = (integer)value;
                    }
                }
                NotecardLine++;
                QueryID = llGetNotecardLine( CONFIG_CARD, NotecardLine );
            }
            else
            {
                state Running;
            }
        }
    }
 
    state_exit()
    {
        llOwnerSay("Face set to: " + (string)FACE);
        llOwnerSay("Initialization Complete!");
    }
}
 
state Running


{
    state_entry()
    {
        init(); 
    }
    on_rez( integer param )
    {
        init();
    }
    touch_start( integer num )
    {
        if ( llDetectedKey(0) == llGetOwner() )
        {
        lkey = llListen( 8192, "", llGetOwner(), "" );
        llSetTimerEvent(60);
        llDialog( llDetectedKey(0), "Window Options :",
                  [ "Clear", "75", "50", "25", "Opaque", "Phantom", "Solid"], 8192 );
        }
    }
    timer()
    {
        llListenRemove( lkey );
        llSetTimerEvent( 0 );
    }
    listen ( integer channel, string name, key id, string message )
    {
        llListenRemove( lkey );
        if ( message == "Opaque" )
        {
            llMessageLinked( LINK_SET, 0 , "Opaque" , NULL_KEY );
            llSetAlpha( 1, FACE );
        }
        if ( message == "Clear" )
        {
            llMessageLinked( LINK_SET, 0 , "Clear" , NULL_KEY );
            llSetAlpha( 0, FACE );
        }
        if ( message == "75" )
        {
            llMessageLinked( LINK_SET, 0 , "75" , NULL_KEY );
            llSetAlpha( 0.75, FACE );
        }
        if ( message == "50" )
        {
            llMessageLinked( LINK_SET, 0 , "50" , NULL_KEY );
            llSetAlpha( 0.5, FACE );
        }
        if ( message == "25" )
        {
            llMessageLinked( LINK_SET, 0 , "25" , NULL_KEY );
            llSetAlpha( 0.25, FACE );
        }
        if ( message == "Solid" ) 
        {
            llMessageLinked( LINK_SET, 0 , "Solid" , NULL_KEY );
            llSetPrimitiveParams( [PRIM_PHANTOM,FALSE] );
        }
                if ( message == "Phantom" )
        {
            llMessageLinked( LINK_SET, 0 , "Phantom" , NULL_KEY );
            llSetPrimitiveParams( [PRIM_PHANTOM,TRUE] );
        }       
    }
    link_message( integer to, integer from , string message, key id )
    {
         if ( message == "Opaque" )
        {
            llSetAlpha( 1, FACE );
        }
        if ( message == "Clear" )
        {
            llSetAlpha( 0, FACE );
        }
         if ( message == "75" )
        {
            llSetAlpha( 0.75, FACE );
        }
        if ( message == "50" )
        {
            llSetAlpha( 0.5, FACE );
        }
        if ( message == "25" )
        {
            llSetAlpha( 0.25, FACE );
        }    
        if ( message == "Phantom" )
        {
            llSetPrimitiveParams( [PRIM_PHANTOM,TRUE] );
        }
        if ( message == "Solid" ) 
        {
            llSetPrimitiveParams( [PRIM_PHANTOM,FALSE] );
        }
        
    }

 
    changed(integer change)
    {
        if ( change & CHANGED_INVENTORY )
        {
            state default;
        }
    }
}
Ce script me plonge dans l'expectative....

soit c'est un mono script et se passer des message à lui même devient inutile...
soit il y a plusieurs fenêtres donc un root et des childs et il manque le script child ( ce que je crois )...

Pour le root se donner des ordres et en recevoir de soit même est surprenant ...

Code PHP:

            llMessageLinkedLINK_SET"Opaque" NULL_KEY ); // à tous les objets  donc... soit même 
            
llSetAlpha1FACE );   // 1 fois...
            
            
link_messageinteger tointeger from string messagekey id )
            {
            if ( 
message == "Opaque" )
            {
              
llSetAlpha1FACE );  // 2 fois ....
            

Pour la gestion est par fenêtre (linked) et non par pièce... (la configuration devait être:
room=1
face = 5

et non face=5;

pour amorcer la gestion par pièce...

etc..

Dans la notion de Master (root) et slave( fenêtre) il faut séparer les fonctions dans
2 scripts:

1 Master lit la note et envoie aux slaves
2 Slaves exécutent

MEME pour une fenêtre il faut 1 Master et 1 Slave...


quand on a fait cela on s'aperçoit que l'on a intérêt de mettre le Master dans

un AUTRE objet (une box sur un mur) qui commande toutes les fenêtres linked...

et là on s'aperçoit qu'avoir des fenêtres linked n'est pas le bon choix (sauf les baies vitrées) pour x raisons (la distance par exemple ... )
et on opte pour l'indépendance des fenêtres... et on décide de passer aux "listen" distant...

Donc à la fin le script est totalement différent...

Pourquoi 2 states? la raison m'échappe.

Juste mon avis...
Ce script est fait à la base pour gérer des stores et peut "gèrer" l'ouverture ou la fermeture simultanée de plusieurs fenêtres. On met un "Id" dans la case "description" de la fenêtre, et toutes les fenêtres ayant le même Id sont synchronisées (au lag près).

Ensuite, à mon avis, il suffit de remplacer la fonction "ouveture/fermeture" par une fonction "changement de texture" et le tour est joué...
mouais...

Tu m'enlèveras pas de l'idée que la base est incorrecte (pour son besoin) ....

Pour une bonne gestion il faut :

Un boitier principal (script Master_Home) qui pilotent toutes les fenêtres de la maisons. (données du fichier configuration , mode nuit/jour etc...)

un boitier par pièce ( Script Master_Room)
pour piloter chaque pièce

Un script fenêtre qui écoute les ordres du Master_Home et Master_Room.
(Pas de links!)

Mais bon chacun fait comme il veut ce qui fait notre charme non?
Bon j'avance j 'avance

La partie Phantom et textures est réglé
Par contre j'ai un problème sur le script du "Controleur"
La partie Note carde marche bien (Merci Lancelot sauf erreur) +Oupss c'est Magic Cat
Le premier menu avec les pièces s'affiche bien mais après la suite non

J'ai du louper un truc la !

Le script du Contrôleur

Code:
list TINT_OPTIONS = ["40%", "20%", "100%", "80%", "60%", "None", "Phantom", "Solid"];
list WALL_OPTIONS = ["Lower Front", "Lower Back", "Lower Sides", "Upper Front", "Upper Back", "Upper Sides", "Ceiling", "All"];
integer UPPER_FRONT = -28394;
integer LOWER_FRONT = -28395;
integer UPPER_BACK  = -28396;
integer LOWER_BACK  = -28397;
integer UPPER_SIDE  = -28398;
integer LOWER_SIDE  = -28399;
integer CEILING     = -28400;
integer CHANNEL     = -28393;
integer wallChannel;
integer allWalls;
list personne=[];
integer ligne=0;


PaintAllWalls(string tintLevel)
{
    integer i;
    integer j;

    j = -28394;

    for (i = 0; i < 7; i++)
    {
        llSay(j, tintLevel);
        j--;
    } // end for
} // end PaintAllWalls

default {
    state_entry()
    {
        llListen(PUBLIC_CHANNEL,"",llGetOwner(),"reset porte");
        llGetNotecardLine(llGetInventoryName(INVENTORY_NOTECARD,0),ligne++);
        llSetTouchText("ouvrir");


    }    // end state_entry()
    dataserver(key requested, string data)
    {
        if(data!=EOF)
        {
            personne+=data;
            llGetNotecardLine(llGetInventoryName(INVENTORY_NOTECARD,0),ligne++);
        }
    }
    touch_start(integer total_number)
    {
        if(llListFindList(personne,[llDetectedName(0)])!=-1)

        {
            llDialog(llDetectedKey(0), "Which wall would you like to tint?", WALL_OPTIONS, CHANNEL); // present dialog on click
            allWalls = 0;
        } // end touch_start()

    }
    listen(integer channel, string name, key id, string message)
    {
                           if(llListFindList(personne,[llDetectedName(0)])!=-1)
        if (llListFindList(TINT_OPTIONS + WALL_OPTIONS, [message]) != -1)  // verify dialog choice
        {
            if (message == "Upper Front")
            {

            llDialog(llDetectedKey(0), "How much tint would you like?", TINT_OPTIONS, CHANNEL);
                wallChannel = UPPER_FRONT;
            }
            else if (message == "Upper Back")
            {
                llDialog(id, "How much tint would you like?", TINT_OPTIONS, CHANNEL);
                wallChannel = UPPER_BACK;
            }
            else if (message == "Upper Sides")
            {
                llDialog(id, "How much tint would you like?", TINT_OPTIONS, CHANNEL);
                wallChannel = UPPER_SIDE;
            }
            else if (message == "Lower Front")
            {
                llDialog(id, "How much tint would you like?", TINT_OPTIONS, CHANNEL);
                wallChannel = LOWER_FRONT;
            }
            else if (message == "Lower Back")
            {
                llDialog(id, "How much tint would you like?", TINT_OPTIONS, CHANNEL);
                wallChannel = LOWER_BACK;
            }
            else if (message == "Lower Sides")
            {
                llDialog(id, "How much tint would you like?", TINT_OPTIONS, CHANNEL);
                wallChannel = LOWER_SIDE;
            }
            else if (message == "Ceiling")
            {
                llDialog(id, "How much tint would you like?", TINT_OPTIONS, CHANNEL);
                wallChannel = CEILING;
            }
            else if(message == "All")
            {
                llDialog(id, "How much tint would you like?", TINT_OPTIONS, CHANNEL);
                allWalls = 1;
            }

            if (message == "100%")
            {
                if(allWalls == 1)
                {
                    PaintAllWalls("100");
                }
                else
                {
                    llSay(wallChannel, "100");
                }
            }
            else if (message == "80%")
            {
                if(allWalls == 1)
                {
                    PaintAllWalls("80");
                }
                else
                {
                    llSay(wallChannel, "80");
                }
            }
            else if (message == "60%")
            {
                if(allWalls == 1)
                {
                    PaintAllWalls("60");
                }
                else
                {
                    llSay(wallChannel, "60");
                }
            }
            else if (message == "40%")
            {
                if(allWalls == 1)
                {
                    PaintAllWalls("40");
                }
                else
                {
                    llSay(wallChannel, "40");
                }
            }
            else if (message == "20%")
            {
                if(allWalls == 1)
                {
                    PaintAllWalls("20");
                }
                else
                {
                    llSay(wallChannel, "20");
                }
            }
            else if (message == "Phantom")
            {
                if(allWalls == 1)
                {;
                        PaintAllWalls("Phantom");
                    }
                else
                {
                    llSay(wallChannel, "Phantom");
                }
            }
            else if (message == "Solid")
            {
                if(allWalls == 1)
                {;
                        PaintAllWalls("Solid");
                    }
                else
                {
                    llSay(wallChannel, "Solid");
                }
            }
            else if (message == "None")
            {
                if(allWalls == 1)
                {
                    PaintAllWalls("0");
                }
                else
                {
                    llSay(wallChannel, "0");
                }
            }
        } // end if (valid message)
    }  // end listen
}
 // end default
Interdit de crier s'il y 'a des monstruosités LOL
J'en suis a mes premiers pas
Pas un petit coup de main ?
je n'essaye pas de me faire sortir un script pour le plaisir mais plus pour essayer d'avancer, mais clair le langage en question n'est pas ma tasse de thé mais bon j'aime aussi me prendre la tête lol

Donc merci par avance
Vidéo
tu nous as fais une jolie usine à gaz )

bref


Il (au minimum) manque l'ouverture du channel " CHANNEL" ...

Code PHP:

    touch_start(integer total_number)
    {
        if(
llListFindList(personne,[llDetectedName(0)])!=-1)

        {
            
llDialog(llDetectedKey(0), "Which wall would you like to tint?"WALL_OPTIONSCHANNEL); // present dialog on click
       ////     ici  
            
llListen(CHANNEL,"",llGetOwner(),"");

allWalls 0;
        } 
// end touch_start() 
Citation :
Publié par Seb_01
tu nous as fais une jolie usine à gaz )

bref


Il (au minimum) manque l'ouverture du channel " CHANNEL" ...

Code PHP:

    touch_start(integer total_number)
    {
        if(
llListFindList(personne,[llDetectedName(0)])!=-1)

        {
            
llDialog(llDetectedKey(0), "Which wall would you like to tint?"WALL_OPTIONSCHANNEL); // present dialog on click
       ////     ici  
            
llListen(CHANNEL,"",llGetOwner(),"");

allWalls 0;
        } 
// end touch_start() 
Super oui c'est la ligne qui manquait
Un grand MERCI pour cela et oui mon usine a gaz marche )
Répondre

Connectés sur ce fil

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