Commande d'un rezzeur

Répondre
Partager Rechercher
Bonjour,

Contente d'avoir pu trouver un forum francais.

Je tente de poser une question que je n'arrive pas à résoudre.

Je suis occupé a faire un distributeur d'avion, et je ne parvient pas à faire fonctionner le lldie() lorsque l'engin se rezzer.

j'ai placer un lldie() lorsque la personne sort de l'appareil pour ca c'est parfait il fonctionne mais, lorsque je place un llSleep(15); dans state_entry suivi de lldie();
impossible de prendre le controle de l'appareil et evidement l'engin s'efface.

j'ai aussi tenter avec set timer et placer le lldie() dans timer mais c'est pire.

si quelqu'un aurrai une piste ce serai très gentil.

Merci.

Sylvie.
avec le llSleep, c'est comme si ton script n'éxistait plus pendant les 15 secondes. La solution a mon avis c'est de faire un llsettimerevent(1) arpés tu compte t'es secondes avec un if et si qqun s'assoi tu change d'état.
Je pensais avoir trouver mais je me suis tromper,

J'ai ajouter ce bout de code à part :

Cliquez ce bouton ou survolez le contenu pour afficher le spoiler
on_rez(integer start_param) {
if (start_param != 0) {
llSetTimerEvent(10);
}
}

timer() {
llDie();
}


Donc il s'efface bien apres l'avoir rezzer, mais il ne tien pas conte lorsque la personne s'installe il s'efface quand meme apres 10 sec.

Je ne vois pas tres bien comment faire avec tes indications pour le changement d'état.

Merci.

Sylvie
Je ne suis pas certaine d'avoir bien compris ce que tu cherches à faire. Tu veux que l'avion rezzé s'auto-détruise 15" après que la personne se soit levée après utilisation ou bien qu'il s'auto-détruise 15" après le rez ?
Bonjour,

Oui exactement, donc qu'il se detruise apres 15 secondes si personnes ne monte dedans, et si il monte le decompte s'annule. pour la destruction lorsqu'il se leve c'est réglé, il me reste juste ce probleme.

dans un premier temp j'ai simplement cocher la case temporaire de l'objet il se supprime après 1 minute donc ça me dépanne déjà, mais j'aimerai réduire le temp.

Merci.

Sylvie
Il faut faire un évènement changed pour qu'il prenne en compte la présence de quelqu'un a bord.

donc dans ton State entry laisse llSetTimerEvent(15) par exemple
puis dans un évènement changed

si il y a quelqu'un assis alors llSetTimerEvent(0) sinon llSetTimerEvent(5) par exemple

et biensur garde ton Timer()

je te fais un exemple dans 5 minutes
Code:
default
{
    on_rez(integer start_param)
    {
     if (start_param != 0)
     {
        llSetTimerEvent(10);
     }
    }

    timer()
    {
           llDie();
    }


    changed(integer change)
    {
        if (change & CHANGED_LINK)
        {
            key agent = llAvatarOnSitTarget();


            if (agent)
            {
               llSetTimerEvent(0);
            }

            else
            {
                
                llSetTimerEvent(5);
            }
        }

    }
}
voilà... amuses toi bien ^^

PS : biensur il faut avoir défini une position pour s'assoir avant via llSitTarget...
Et bien toujour pareil donc je place ceci :
Citation :
on_rez(integer start_param) {
if (start_param != 0) { // if rezzed by gun
llSetTimerEvent(10); // set die timer
} // otherwise do not die after timeout, so we can still be rezzed for editing
}

timer() {
llDie(); // delete this object
}
changed(integer change)
{
if (change & CHANGED_LINK)
{
key agent = llAvatarOnSitTarget();
if (agent)
{
if (agent != llAvatarOnSitTarget())
{
llSay(0, not_owner_message);
llUnSit(agent);
llPushObject(agent, <0,0,50>, ZERO_VECTOR, FALSE);
llSetTimerEvent(15);
}
else............
et en bas de page j'ai aussi un timer qui fait partie du code déjà existant.

Citation :
timer()
{
if (cur_wheel_direction != last_wheel_direction)
{
llMessageLinked(LINK_ALL_CHILDREN , 0, cur_wheel_direction, NULL_KEY);
last_wheel_direction = cur_wheel_direction;

}
.

Script voiture qui a été modifier.

Donc lorsque je rez le timer du haut ne fonctionne pas uniquement celui du bas si je place le llDie dans le timer du bas dès que je bouge la direction ca s'efface.

Merci

Sylvie
Tu ne peux pas avoir plusieurs timers dans un même script donc il faut tester qu'on est ou pas dans la situation de llDie() dans le timer. Par ailleurs, le test du start_param dans l'event rez empêche le timer de démarrer car il est toujours à 0 si l'objet est rezzé par un agent, sa valeur ne change que s'il est rezzé par script (llRezObject).

Code:
// By Christine Etchegaray - June 20 2007
integer pilot;
default
{
    state_entry()
    {    
        llSitTarget(<0.0, 0.0, 0.5>, ZERO_ROTATION);
        pilot = FALSE;
        llSetTimerEvent(10);
    }
 
    on_rez(integer sparam)
    {    llResetScript();    }
    
    changed(integer change)
    {
        if (change & CHANGED_LINK)
        {
            key sitting = llAvatarOnSitTarget();
            if (sitting != NULL_KEY)
            {    pilot = TRUE; }
            else
            {    pilot = FALSE; }
        }
    }
 
    timer()
    {    
        if(pilot)
        { }   // autres commandes
        else
        {    llDie();    }
    }
}
Répondre

Connectés sur ce fil

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