lecture d'une notecard pour intégrer un élément dans un script (OpenSim)

Répondre
Partager Rechercher
Bonsoir à toutes et tous,
Et oui c'est encore Draco et ses questions sur les scripts. Cherchez pas je suis un indécrottable en script : je bricole mais c'est compliqué, alors créer pensez-vous

Une fois de plus je viens vers vous pour trouver une soluce.

Comme d'hab, j’évolue toujours dans OpenSim et suis toujours dans l'esprit "OpenSim is free" et donc je partage tout ce que je peux.
dernièrement j'ai réalisé un build, en soi pas très exceptionnel : un douche, ben oui on peut avoir envie d'être propre même en virtuel ....
Sa particularité est qu'elle disparait dans le sol et mur (pratique quand on pas beaucoup d'espace). Réalisable grâce à un petit script sorti de derrière les fagots par Bestmomo en 2010.

Je m’arrête un instant... 2010 ?!? je sais pas pour vous, mais je viens de prendre un sacré coup de vieux d'un coup -> Bug !!

Je reprends, je vous le mets ce script ça peut servir à quelqu'un.

Code PHP:

​
integer up;
vector startSize;
float endSize 1.5//In meters, how long the prim will end up being along it's Z axis.
float rate 0.1//In meters, how much it stretches every roughly 0.5 seconds.
curtainTransition()
{
    if (
up)
    {
        
startSize llGetScale();

        
float i;

        
vector pos llGetLocalPos();
        for (
startSize.zendSize+= rate)
        {
            
vector scale llGetScale();
            
llSetScale(<scale.xscale.yscale.rate>);
            
llSetPos(llGetLocalPos() + <00, - rate 2> * llGetLocalRot());
        }

        
up FALSE;
    }

    else if (!
up)
    {
        
float i;

        
vector pos llGetLocalPos();
        for (
endSizestartSize.z-= rate)
        {
            
vector scale llGetScale();
            
llSetScale(<scale.xscale.yscale.rate>);
            
llSetPos(llGetLocalPos() + <00rate 2> * llGetLocalRot());
        }

        
up TRUE;
    }
}
default
{
    
state_entry()
    {
        
up TRUE;
        
startSize llGetScale();
        
//llListen(55555, "", NULL_KEY, "curtain"); //Uncomment this if you're using the listen event for activation.
        //llListen(55555, "", llGetOwner(), "curtain"); //Uncomment this instead if you only want it to listen to the owner.
    
}

    
on_rez(integer start_param)
    {
        
up TRUE;
        
startSize llGetScale();
    }

    
///Below this line are three means of activation. You might want to delete the ones you're not using.
    
touch_start(integer total_number//Use this event to make the curtian activate when touched.
    
{
        if (
llDetectedKey(0) != llGetOwner()) return; //Uncomment this line to make owner-only.
        
curtainTransition();
    }

    
link_message(integer sender_numinteger numstring strkey id)
    {
        if (
str == "curtain"curtainTransition(); //Activates the curtains when this prim receives a link message containing "curtain" as the string. To make link_message owner only, that will have to be specified in the script sending the link_message.
    
}

    
listen(integer channelstring namekey idstring message)
    {
        if (
message == "curtain"curtainTransition(); //Activates the curtains when it hears "curtain" on channel 55555. (Make sure to uncomment the llListen() line in state_entry() if you're going to use this.)
    
}

Un petit bijou. Bon par contre ma douche à plusieures prims et donc pour chacune ce script ou une variante.

Et c'est là que vient ma question.
Comme le but est de partager, ce serait pas mal de partager ce build aussi. Par contre comme il est commandé à distance, je voudrais que les nouveaux propriétaires puissent modifier le chanel de communication entre le bouton et les différents scripts des différentes prims de ma douche sans avoir à se taper la modif de tous les scripts. Donc je me suis dis que la solution pourrait venir avec une notecard. Une seule information à changer : le numéro du channel que l'on veut.
Ben c'est la mon soucis
Y aurait-il un âme charitable pour compléter ce script, avec explications si possible, pour que le channel à écouter soit récupéré sur une notecard contenue dans l'inventaire de la douche.

Je vous remercie déjà de m'avoir lu. En espérant que certaines ou certains d'entre-vous puisse trouver mon bonheur.

En attendant, je souhaite à toute la commnauté de JOL d'excellentes fêtes de fin d'années.

Draco
hello....lecture de notecard pour changer de canal, c 'est lourd.....perso, quand j' ai besoin d' un canal différent pour chaque utilisateur, j' utilise un canal calculé automatiquement en début de script et basé sur la clé uuid du proprietaire.....ainsi, dès que l' objet change de proprio, le canal change. C 'est automatique, on ne s' occupe de rien....


avec par exemple

integer canal;
key owner;

et dans state_entry

owner = llGetOwner();
canal = (integer)("0xA" + llGetSubString((string)owner, 0,6 ));


et en fin de script


changed(integer change)
{
if(change & (CHANGED_OWNER))
{
llResetScript();
}
}
Bonjour MenthalOH,
merci pour cette réponse ultra rapide.
Je ne sais pas si c'est lourd la lecture de notecard, enfin pour moi si

Par contre ta solution c'est plutôt top....... je vais être franc....... mais chuuut, je ne savais même pas qu'on pouvez faire ça
Je vais essayer d'intégrer ça dans la journée.
Merci, merci, merci

Draco
Re-Bonjour MenthalOH,
Heu, j'ai quelques questions
J'ai intégré ces bouts de code comme tu me l'as dit au scripts dans la télécommande et dans un récepteur quelconque pour faire un essai. Déjà ça compile dans les deux builds. Mais du coup, la télécommande et le récepteur sont 2 builds différents donc le canal aléatoire n'est peut -être pas le même vue que ça ne fonctionne pas

Après autre question que je me pose est-ce que le canal aléatoire est toujours différent ou le même ? Car du coup, il risque d'y avoir des interférences avec d'autres constructions utilisant un système de télécommande.

n'y aurait-il pas moyen que le build quand il choisi le canal le dis au proprio, question de vérifier ?

j'ai peut-être mal fait
Le canal n 'est pas aléatoire vu qu'il est calculé à partir de l' uuid du proprio, il faut bien sur que la télécommande et le récepteur appartiennent au même gars....et que les scripts parlent et écoutent sur ce canal. Mets le script de la télécommande et le récepteur....Le canal est unique et ne peut pas changer et la probabilité de tomber par hasard sur un même canal est de l' ordre du milliardième.....
Une standing ovation pouuuuur : MenthalOH
Comme dit précédemment, car je m'en doutais un peu, c'est bien moi qui ais merdouillé en plaçant les bout de code dans les script. il fallait mentionner le mot canal à la place du canal dans llListen(...) hors je l'avais mis dans la partie Listen( integer channel ....).
par contre petite chose à laquelle tu n'avais pas répondu c'était comment par ce biais il ne puisse pas y avoir des interférences avec d'autre builds utilisant des écoutes, surtout si ceux-ci sont à proximité. Après un essai j'ai compris qu'il fallait changer le dernier chiffre à virgule sur cet ligne : [canal = (integer)("0xA" + llGetSubString((string)owner, 0,6 ));] pour que tous les objets répondent uniquement à ce canal. J'en conclue que c'est lui qui permet le calcul unique avec l'UUID du Owner. il faut juste penser, quand on construit son build, à modifier ce chiffre et le reporter sur tous les scripts concernés.

Bref c'est trop fort

Donc je vais m'enregistrer ces petits bouts de code hautement précieux car pour les prochains propriétaires, il n'y a plus de manip à faire et donc pour moi pas de note explicative imbuvable à faire. Juste Rezzez et utilisez

Merci beaucoup pour cette aide précieuse.

Je te souhaite une excellente nuit et bien-sûr un excellent réveillon de la St Sylvestre si tu as l'occasion .

Draco
Répondre

Connectés sur ce fil

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