rez/derez le retour

Répondre
Partager Rechercher
bonjour bonjour

alors voila , jai utlisé ça , trouvé sur un topic , pour rez/derez plusieurs objets d'un coup , ça marche nikel .
maintenant je voudrais me creer une boite ( ou eventuellement l'objet rezer lui meme ) qui quand je clic dessus , parle a ma place pour le rez/derez , parceque je suis un peu faineant . que ca fasse l'equivalent de /1234 BUILD ou /1234 clear que je dois taper a chaque fois ( ou n'importe quel autre cannal ) .
le mieux serait un menu qui me laisse le choix entre les 2 options , ou sinon 2 obejts , un qui rez qd on clic dessus , l'autre qui derez .
voila voila.

merci .
Interressant ce script; et effectivement ce serait plus pratique avec un menu.

Mais je crois que les boites Rez-Derez-Déplace existe en freebie (vous savez la boite avec les outils qui dépassent). Et elle a un menu elle. J'ai entendu qu'elle était gratuite mais je ne me suis jamais donner la peine de la chercher car je n'ai pas le besoin. Quelqu'un peu peut être nous dire ou la trouver.

en attendant je met ce script de côté et si j'ai le temps et qu'il n'y a pas de réponse je me coltinerai le menu ... un jour je ne sais pas quand.
Code:
integer ecoute;
integer delai = 60;
integer canal = 12812247;
list menu0;


default{

    touch_start(integer total_number){
        
        menu0 = ["Rez","Die"];
        
        ecoute = llListen(canal, "", NULL_KEY, "");
        
        
        if (llDetectedKey(0) == llGetOwner() )
        {
        llDialog(llGetOwner(), "rez or die", menu0, canal);
        
        llSetTimerEvent(delai);
        }
    }

    listen(integer channel, string name, key id, string message){
        if (message == "Rez"){
            llSay(1234,"BUILD"); // message de rez des objets
        }
        else if (message == "Die"){
            llSay(1234,"clear"); // message de delete des objets
        }
        llSetTimerEvent(0.0);
        llListenRemove(ecoute);
    }

    timer(){
        llSetTimerEvent(0.0);
        llListenRemove(ecoute);
    }
}
t'es pas fainéant comme moi Perro.

Evidemment ça marche - quoique t'as oublié done; mais moi je veux faire un truc plus complet dans une zoli boite. Et aussi calculé les canaux de com des scripts en fonction du owner. Cela me parait plus prudent.

Mais bon je cherche toujours à faire compliqué.
merci pour votre aide mais ca marche pas
ca avait l'air bien beau pourtant

j'ai bien le menu mais rien ne se passe quand je clique .
Citation :
Publié par Elenia Boucher
t'as oublié done
gné ?
excusez ma noobitude mais est ce que l'erreur pourait venir de ça ? et faut le rajouter ou ce "done" ?
Citation :
Publié par PerroKey
Code:
integer ecoute;
integer delai = 60;
integer canal = 12812247;
list menu0;
 
 
default{
 
    touch_start(integer total_number){
 
        menu0 = ["Rez","Die"];
 
        ecoute = llListen(canal, "", NULL_KEY, "");
 
 
        if (llDetectedKey(0) == llGetOwner() )
        {
        llDialog(llDetectedKey(0), "rez or die", menu0, canal);
 
        llSetTimerEvent(delai);
        }
    }
 
    listen(integer channel, string name, key id, string message){
        if (message == "Rez"){
            llSay(1234,"BUILD"); // message de rez des objets
        }
        else if (message == "Die"){
            llSay(1234,"clear"); // message de delete des objets
        }
        llSetTimerEvent(0.0);
        llListenRemove(ecoute);
    }
 
    timer(){
        llSetTimerEvent(0.0);
        llListenRemove(ecoute);
    }
}
Je ne comprend pas pourquoi tu mets un :
if (llDetectedKey(0) == llGetOwner()

Et ensuite faire :
llDialog(llDetectedKey(0), "rez or die", menu0, canal);

Puisque la key sera forcement celle du owner si la condition est vraie.

Ensuite, si tu veux seulement que le owner ai accès au menu ou ses objets, tu dois également filtrer sa dans l'event du listen en utilisant par exemple un :

if(llGetOwnerKey(id) == llGetOwner()) ou écouter seulement le owner a partir de la fonction llListen();

Ensuite, tu utilises un : ecoute = llListen(canal, "", NULL_KEY, ""); a chaque fois que quelqu'un touche l'objet, le mieux serait de l'inclure dans la condition juste en dessous pour vérifier si c'est bien le owner qui clique dessus ou non.

Et pour finir, je ne vois pas l'interet de ton timer qui désactive le llListen.
Citation :
Publié par PerroKey
Car j'ai fait sa en 1 minute et que j'avais pas plus de temps

euh le timer dans les dialog c'est très très courant

...
Je voulais juste connaitre l'utilité de ton timer dans ce script ...

Je veux bien croire que sa devienne utile dans un script qui gère plusieurs menu, mais la O.o
Citation :
Publié par BlackShade Nightfire
Je voulais juste connaitre l'utilité de ton timer dans ce script ...

Je veux bien croire que sa devienne utile dans un script qui gère plusieurs menu, mais la O.o
Le problème des Dialog est dans la possibilité qu'a l'avatar d'annuler. Si c'est le cas le traitement du Listen n'est jamais effectué et l'écoute reste active en consommant des ressources inutilement. C'est pour cette raison qu'il est judicieux d'activer un timer pour supprimer l'écoute au bout d'un délai raisonnable
Citation :
Publié par bestmomo
Le problème des Dialog est dans la possibilité qu'a l'avatar d'annuler. Si c'est le cas le traitement du Listen n'est jamais effectué et l'écoute reste active en consommant des ressources inutilement. C'est pour cette raison qu'il est judicieux d'activer un timer pour supprimer l'écoute au bout d'un délai raisonnable
Dans un script complexe, utilisant plusieurs llListen, je veux bien le croire. Mais dans ce cas-ci, un simple script utilisant un unique listen sa devient inutile.
De plus, pour éviter au listen des écoutes inutiles, dans le cas ou seul le owner peut avoir acces au menu, il suffit d'ajouter llGetOwner() dans le llListen.
Citation :
Publié par BlackShade Nightfire
Dans un script complexe, utilisant plusieurs llListen, je veux bien le croire. Mais dans ce cas-ci, un simple script utilisant un unique listen sa devient inutile.
Nous n'avons pas le même sens de l'inutile. Je pars du principe que ce qui ne sert à rien est inutile, ce qui est le cas d'un script qui tourne pour un Dialog qui a disparu. Même si je ne suis pas obsédé par la chasse au lag j'adopte des mesures simples surtout lorsqu'elles ne coûtent rien avec comme idée de fond que les petits ruisseaux font les grandes rivières. Les gros scripts sont en général bien faits parce que leurs auteurs sont en théorie plus compétents, mais j'ai plus de doutes sur la quantité de scripts plus ou moins bricolés qui tournent de conserve et polluent les sim. Je trouve judicieux d'inculquer un style de codage économe en ressources surtout sur ce forum où de nombreux débutants viennent puiser des informations.

Ceci dit bienvenu sur ce forum et un grand merci pour ta participation
Salut à tous...

C'est vrai que le script là...il ne fonctionne pas.. quelqu'un pourrait-il lui donner la dernière touche..pour que ça puisse marcher... parce que tous ces blablas de scripteurs... pour finir dans le vide comme ça...c'est pas digne de ce forum....

Voilà!

Bonne journée à tous!
Tu es sûr qu'il ne marche pas ? si tu remplaces 1234 par 0 dans le llSay, ça marche parfaitement.

Je pense que c'est plutot l'autre script (celui qui censé recevoir le message sur 1234) qui n'entend pas. Peut-etre que le llListen dans l'autre script ne recoit pas les commandes d'un autre objet.
oui jai essayé avec plusieurs canaux differents

je pense aussi que c'est un probleme de comunication entre les 2 scripts , mais comment le savoir ? je suis pas assé calé
y aurait il un autre moyen plus simple de faire la meme chose ?
peut etre modifier le script original ? mais comment ?
2 scripts dans le meme objet ne peuvent pas s'écouter par llSay. C'est une limitation (débile) de LSL.

Aussi, pourquoi ton dialog ne parle pas directement à l'autre script ? en faisant juste llDialog(llDetectedKey( 0), 1234, "rez or die", ["BUILD", "clear"], 1234)
mais il ne sont pas dans le meme objet .
ok bon je vais essayer ça mais je comprend pas encore tout

vous auriez pas qq liens ou tutoriels la dessus ?
ou d'autres scripts du meme type qui pouraieint m'aider a mieux comprendre .

merci pour vos reponses en tout cas

EDIT : faut le mettre ou ce " llDialog(llDetectedKey( 0), 1234, "rez or die", ["BUILD", "clear"] 1234) " ??
ça marche paaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas *mange son clavier*
Bon , je viens de trouver , c'est la fete du slip

pour ceux que ca interesse il fallait juste modifier le integer canal = canal correspondant , au debut du script de perrokey . ça semblait peut etre evident pour vous , mais pas pour moi , et quelques autres noob du script dans mon genre , je pense (je pensais pourtant avoir deja essayé )

avec le canal 12345 ca donne donc ça :
( le message pour effacer c'est "clean" pas "clear" , et ca marche aussi bien dans un prims séparé que dans l'objet rezer lui meme )
Code:
  
integer ecoute;
integer delai = 60;
integer canal = 12345;
list menu0;
 
 
default{
 
    touch_start(integer total_number){
 
        menu0 = ["Build","Clean"];
 
        ecoute = llListen(canal, "", NULL_KEY, "");
 
 
        if (llDetectedKey(0) == llGetOwner() )
        {
        llDialog(llDetectedKey(0), "rez or die", menu0, canal);
 
        llSetTimerEvent(delai);
        }
    }
 
    listen(integer channel, string name, key id, string message){
        if (message == "Build"){
            llSay(12345,"BUILD"); // message de rez des objets
        }
        else if (message == "Clean"){
            llSay(12345,"clean"); // message de delete des objets
        }
        llSetTimerEvent(0.0);
        llListenRemove(ecoute);
    }
 
    timer(){
        llSetTimerEvent(0.0);
        llListenRemove(ecoute);
    }
}
merci Perrokey

vais aller foutre des menus rezer partout moi ...
Bon je l'ai fait l'ajout du menu; et comme le lien de la mine à script où cet outil utile a été trouvé ne marche plus (c'est bien dommage), je republie ici les 2 scripts nécessaires pour faire un building rezzer - aussi appellé faux rez;

Le script principal, à mettre dans un bête cube :
Code:
////SCRIPT START ////MAIN
// Builders' Buddy 1.0 (Base Prim)
//
// by Newfie Pendragon, March 2006
// menu appened by Elenia Boucher, Jun 2008
//
// This script is distributed with permission that it may be used in
// any way, or may be further modified/included in resale items.
// HOWEVER, if this script is used as part of a for-sale product,
// it is required that appropriate credit be given to Newfie for
// the script (or portions used in derivatives).  That's a fair price
// in exchange for unlimited use of this script, dontcha think?
 
//INSTRUCTIONS
//(These instructions use channel 1234 in the examples, but can be
//  changed further down in the code to whatever channel you wish.)
//
// This is the *Base Prim* half of the Builders' Buddy system.  Drop
// it into the prim that will be the container/box that will be used
// to store the building once completed.  Drop the *Component* scripts
// into each 'piece' of the building.
//
// QUICK USE:
// - Drop this script in the Base.
// - Drop the "Component" Script in each building part.
// - Type: /12345 RECORD
// - Take all building parts into inventory
// - Drag building parts from inventory into Base Prim
// - Type /12345 BUILD
//
// OTHER COMMANDS
// - To reposition, move/rotate Base Prim Type: /12345 MOVE
// - To lock into position (removes scripts) Type: /12345 DONE
// - To delete building pieces: /12345 CLEAN
 
//////////////////////////////////////////////////////////////////////////////////////////
// Configurable Settings
integer CHAN = 12345;        //Channel used to talk to Base Prim; change if you want
integer PRIMCHAN = 12346;    //Channel used by Base Prim to talk to Component Prims;
// This must match in both scripts
integer handle;
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
menu(){
    list menu = ["RECORD","BUILD","MOVE","DONE","CLEAN"];
    llDialog(llGetOwner(),"choose please - delay 1 mn",menu,CHAN);
    handle = llListen(CHAN, "", llGetOwner(), "");
    llSetTimerEvent(60);
}
default{
        //////////////////////////////////////////////////////////////////////////////////////////
        touch_start(integer total){
                menu();
        }
        //////////////////////////////////////////////////////////////////////////////////////////
        listen(integer iChan, string sName, key kID, string sText){
                //////////////////////////////////////////////////////////////////////////////////////////
                sText = llToUpper(sText);
                if( sText == "RECORD" )
                {
                        llOwnerSay("Recording positions...");
                        llShout(PRIMCHAN, "RECORD " + llDumpList2String([ llGetPos(), llGetRot() ], "|"));
                        return;
                }
                //////////////////////////////////////////////////////////////////////////////////////////
                if( sText == "BUILD" ){
                        vector vThisPos = llGetPos();
                        rotation rThisRot = llGetRot();
                        integer i;
                        integer iCount = llGetInventoryNumber(INVENTORY_OBJECT);
                        //Loop through backwards (safety precaution in case of inventory change)
                        llOwnerSay("Rezzing build pieces...");
                        for( i = iCount - 1; i >= 0; i-- )
                        {
                                llRezObject(llGetInventoryName(INVENTORY_OBJECT, i), vThisPos, ZERO_VECTOR, rThisRot, PRIMCHAN);
                        }
                        llOwnerSay("Positioning");
                        llShout(PRIMCHAN, "MOVE " + llDumpList2String([ vThisPos, rThisRot ], "|"));
                        return;
                }
                //////////////////////////////////////////////////////////////////////////////////////////
                if( sText == "MOVE" )
                {
                        llOwnerSay("Positioning");
                        vector vThisPos = llGetPos();
                        rotation rThisRot = llGetRot();
                        llShout(PRIMCHAN, "MOVE " + llDumpList2String([ vThisPos, rThisRot ], "|"));
                        return;
                }
                //////////////////////////////////////////////////////////////////////////////////////////
                if( sText == "CLEAN" )
                {
                        llShout(PRIMCHAN, "CLEAN");
                        return;
                }
                //////////////////////////////////////////////////////////////////////////////////////////
                if( sText == "DONE" )
                {
                        llShout(PRIMCHAN, "DONE");
                        //llDie();
                        llOwnerSay("Removing mover scripts.");
                        return;
                }
        }
 
        timer(){
            llSetTimerEvent(0);
            llListenRemove(handle);
        }
}
///////END BASE SCRIPT
Et le script component, que je n'ai pas touché, à mettre dans chaque ensemble de prim linkées que vous voulez rezzer :
Code:
/////START SCRIPT //// COMPONET
// Builders' Buddy 1.0 (Component Pieces)
//
// by Newfie Pendragon, March 2006
//
// This script is distributed with permission that it may be used in
// any way, or may be further modified/included in resale items.
// HOWEVER, if this script is used as part of a for-sale product,
// it is required that appropriate credit be given to Newfie for
// the script (or portions used in derivatives).  That's a fair price
// in exchange for unlimited use of this script, dontcha think?
 
//INSTRUCTIONS
//(These instructions use channel 1234 in the examples, but can be
//  changed further down in the code to whatever channel you wish.)
//
// This is the *Component Piece* half of the Builders' Buddy system.
// Drop it into each 'piece' of the building.  Drop the Base Prim Script
// into the prim  that will be the container/box that will be used to
// store the building once completed.  It can be in each individual
// prim, but if you link as much as possible (and put the script in the link
// set), it'll be much more neighbourly and less strain on the sim.
//
// QUICK USE:
// - Drop this script in the Base.
// - Drop the "Component" Script in each building part.
// - Type: /12345 RECORD
// - Take all building parts into inventory
// - Drag building parts from inventory into Base Prim
// - Type /12345 BUILD
//
// OTHER COMMANDS
// - To reposition, move/rotate Base Prim Type: /12345 MOVE
// - To lock into position (removes scripts) Type: /12345 DONE
// - To delete building pieces: /12345 CLEAN
//////////////////////////////////////////////////////////////////////////////////////////
// Configurable Settings
integer PRIMCHAN = 12346;    //Channel used by Base Prim to talk to Component Prims;
// This must match in both scripts
//////////////////////////////////////////////////////////////////////////////////////////
// Runtime Variables (Dont need to change below here unless making a derivative)
vector vOffset;
rotation rRotation;
 
////////////////////////////////////////////////////////////////////////////////
string first_word(string In_String, string Token)
{
        //This routine searches for the first word in a string,
        // and returns it.  If no word boundary found, returns
        // the whole string.
        if(Token == "") Token = " ";
        integer pos = llSubStringIndex(In_String, Token);
        //Found it?
        if( pos >= 1 )
        return llGetSubString(In_String, 0, pos - 1);
        else
        return In_String;
}
////////////////////////////////////////////////////////////////////////////////
string other_words(string In_String, string Token)
{
        //This routine searches for the other-than-first words in a string,
        // and returns it.  If no word boundary found, returns
        // the an empty string.
        if( Token == "" ) Token = " ";
        integer pos = llSubStringIndex(In_String, Token);
        //Found it?
        if( pos >= 1 )
        return llGetSubString(In_String, pos + 1, llStringLength(In_String));
        else
        return "";
}
 
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
default
{
        //////////////////////////////////////////////////////////////////////////////////////////
        state_entry()
        {
                //Open up the listener
                llListen(PRIMCHAN, "", NULL_KEY, "");
        }
        //////////////////////////////////////////////////////////////////////////////////////////
        on_rez(integer iStart)
        {
                //Set the channel to what's specified
                if( iStart != 0 )
                {
                        PRIMCHAN = iStart;
                        state reset_listeners;
                }
        }
        //////////////////////////////////////////////////////////////////////////////////////////
        listen(integer iChan, string sName, key kID, string sText)
        {
                string sCmd = llToUpper(first_word(sText, " "));
                if( sCmd == "RECORD" )
                {
                        sText = other_words(sText, " ");
                        list lParams = llParseString2List(sText, [ "|" ], []);
                        vector vBase = (vector)llList2String(lParams, 0);
                        rotation rBase = (rotation)llList2String(lParams, 1);
                        vOffset = llGetPos() - vBase;
                        rRotation = llGetRot() / rBase;
                        llOwnerSay("Recorded position.");
                        return;
                }
                //////////////////////////////////////////////////////////////////////////////////////////
                if( sCmd == "MOVE" )
                {
                        //Calculate our destination position
                        sText = other_words(sText, " ");
                        list lParams = llParseString2List(sText, [ "|" ], []);
                        vector vBase = (vector)llList2String(lParams, 0);
                        rotation rBase = (rotation)llList2String(lParams, 1);
                        //Calculate our destination position
                        vector vDestPos = (vOffset * rBase) + vBase;
                        rotation rDestRot = rRotation * rBase;
                        llOwnerSay("Pos: " + (string)vDestPos + ", Rot: " + (string)rDestRot);
                        integer i = 0;
                        vector vLastPos = ZERO_VECTOR;
                        while( (i < 25) && (llGetPos() != vDestPos) )
                        {
                                //If we're not there....
                                if( llGetPos() != vDestPos )
                                {
                                        //We may be stuck on the ground...
                                        //Did we move at all compared to last loop?
                                        if( llGetPos() == vLastPos )
                                        {
                                                //Yep, stuck...move straight up 10m (attempt to dislodge)
                                                llSetPos(llGetPos() + <0, 0, 10.0>);
                                        } else {
                                                //Record our spot for 'stuck' detection
                                                vLastPos = llGetPos();
                                        }
                                }
                                i++;
                                //Try to move to destination
                                llSetPos(vDestPos);
                                llSleep(0.1);
                        }
                        //Set rotation
                        llSetRot(rDestRot);
                        return;
                }
                //////////////////////////////////////////////////////////////////////////////////////////
                if( sCmd == "DONE" )
                {
                        //We are done, remove script
                        llRemoveInventory(llGetScriptName());
                        return;
                }
                //////////////////////////////////////////////////////////////////////////////////////////
                if( sCmd == "CLEAN" )
                {
                        //Clean up
                        llDie();
                        return;
                }
        }
}
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
state reset_listeners
{
        //////////////////////////////////////////////////////////////////////////////////////////
        state_entry()
        {
                state default;
        }
}
///////END SCRIPT COMPONET
Mode d'emploi :
après donc avoir fait un bête cube, mis dedans le script base, mis dans chacun de vos composant le script component, clicquez sur votre cube et choisissez RECORD: la position de chaque composant est mémorisé par chaque script component. Prenez alors vos objets dans votre inventaire et mettez les dans le cube.
Quand vous rezzez le cube, clicquez dessus et choisissez BUILD : vos composants sont rezzer à la position mémorisée précédemment; après, vous pouvez effacer vos objets rezzés avec CLEAN, ou bouger votre cube et choisir alors MOVE pour que les objets soit déplacés suivant le mouvement du cube. DONE efface les scripts component de chaque composant et vous pouvez donc plus rien faire et donc supprimer votre cube.

ça marche: il est améliorable: move automatique et effacement automatique du cube avec DONE. Je le ferais peut être.
Comme j'en avais besoin j'ai fait le move auto.. pour le Die je l'ai ajouté aussi...

Code:
////SCRIPT START ////MAIN
// Builders' Buddy 1.0 (Base Prim)
//
// by Newfie Pendragon, March 2006
// menu appened by Elenia Boucher, Jun 2008
// auto move by Bestmomo Lagan, Aug 2008
//
// This script is distributed with permission that it may be used in
// any way, or may be further modified/included in resale items.
// HOWEVER, if this script is used as part of a for-sale product,
// it is required that appropriate credit be given to Newfie for
// the script (or portions used in derivatives).  That's a fair price
// in exchange for unlimited use of this script, dontcha think?
 
//INSTRUCTIONS
//(These instructions use channel 1234 in the examples, but can be
//  changed further down in the code to whatever channel you wish.)
//
// This is the *Base Prim* half of the Builders' Buddy system.  Drop
// it into the prim that will be the container/box that will be used
// to store the building once completed.  Drop the *Component* scripts
// into each 'piece' of the building.
//
// QUICK USE:
// - Drop this script in the Base.
// - Drop the "Component" Script in each building part.
// - Type: /12345 RECORD
// - Take all building parts into inventory
// - Drag building parts from inventory into Base Prim
// - Type /12345 BUILD
//
// OTHER COMMANDS
// - To reposition, move/rotate Base Prim Type: /12345 MOVE
// - To lock into position (removes scripts) Type: /12345 DONE
// - To delete building pieces: /12345 CLEAN
 
//////////////////////////////////////////////////////////////////////////////////////////
// Configurable Settings
integerCHAN=12345;        //Channel used to talk to Base Prim; change if you want
integerPRIMCHAN=12346;    //Channel used by Base Prim to talk to Component Prims;
// This must match in both scripts
//integer handle;
vectorvThisPos;
rotationrThisRot;
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
menu(){
listmenu=["RECORD","BUILD","DONE","CLEAN"];
llDialog(llGetOwner(),"choose please...",menu,CHAN);
llListen(CHAN,"",llGetOwner(),"");
         //llDialog(llGetOwner(),"choose please - delay 1 mn",menu,CHAN);
         //handle = llListen(CHAN, "", llGetOwner(), "");
         //llSetTimerEvent(60);
}
default{
         //////////////////////////////////////////////////////////////////////////////////////////
touch_start(integertotal){
llSetTimerEvent(.0);
menu();
}
         //////////////////////////////////////////////////////////////////////////////////////////
listen(integeriChan,stringsName,keykID,stringsText){
                    //////////////////////////////////////////////////////////////////////////////////////////
sText=llToUpper(sText);
if(sText=="RECORD")
{
llOwnerSay("Recording positions...");
llShout(PRIMCHAN,"RECORD "+llDumpList2String([llGetPos(),llGetRot()],"|"));
return;
}
                    //////////////////////////////////////////////////////////////////////////////////////////
if(sText=="BUILD"){
vectorvThisPos=llGetPos();
rotationrThisRot=llGetRot();
integeri;
integeriCount=llGetInventoryNumber(INVENTORY_OBJECT);
                               //Loop through backwards (safety precaution in case of inventory change)
llOwnerSay("Rezzing build pieces...");
for(i=iCount-1;i>=0;i--)
{
llRezObject(llGetInventoryName(INVENTORY_OBJECT,i),vThisPos,ZERO_VECTOR,rThisRot,PRIMCHAN);
}
llOwnerSay("Positioning");
llShout(PRIMCHAN,"MOVE "+llDumpList2String([vThisPos,rThisRot],"|"));
vThisPos=llGetPos();
rThisRot=llGetRot();
llSetTimerEvent(2.0);
llOwnerSay("Positioning... move and rotate me...");
return;
}
                    //////////////////////////////////////////////////////////////////////////////////////////
if(sText=="CLEAN")
{
llShout(PRIMCHAN,"CLEAN");
return;
}
                    //////////////////////////////////////////////////////////////////////////////////////////
if(sText=="DONE")
{
llShout(PRIMCHAN,"DONE");
llOwnerSay("Removing mover scripts.");
llDie();
return;
}
}
 
timer()
{
if(vThisPos!=llGetPos()||rThisRot!=llGetRot()){
vThisPos=llGetPos();
rThisRot=llGetRot();
llShout(PRIMCHAN,"MOVE "+llDumpList2String([vThisPos,rThisRot],"|"));
}
}
}
///////END BASE SCRIPT
J'ai été obligé de supprimer ton anti lag sur le Dialog mais bon... étant donné que ça reste pas.. et j'en avais besoin pour créer l'événement MOVE...

Au niveau du fonctionnement le MOVE se déclenche dès le build, ce qui me paraît logique. Ensuite il s'arrête au clic suivant.
Juste un truc qui s'était révélé pour moi avec un autre rezzer, mais qui s'applique probablement aussi ici, tout particulièrement dans le cas de gros objets :

ATTENTION à bien placer le script "enfant" dans le prim le plus élevé possible par rapport au rezzer, et si possible, à surélever ce dernier.

J'avais en effet voulu rezzer ma maison et je la retrouvais plantée dans le sol à 45° (c'est pas très bon pour la cave à vin !)... J'ai appris plus tard que le rezzer ne peut pas positionner correctement un prim dont le centre de gravité se trouve sous le sol.

Bravo pour le travail d'équipe Newfie/Elénia/Bestmomo ! Pour info, il existe un couple de scripts gratuits (http://slexchange.com/modules.php?na...&ItemID=622999) réalisés par Ilse Mannonen, dont l'intérêt est de stocker la position/rotation dans la description de chaque objet, ce qui permet facilement de changer l'objet de place après coup, sans refaire toutes les manips...
Répondre

Connectés sur ce fil

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