News:

SMF - Just Installed!

 

Sincronizzare due poseball

Aperto da Antiope Eales, Febbraio 12, 2011, 07:28:07 PM

Discussione precedente - Discussione successiva

Absynth

confesso che leggere codice di altri mi fa venire il male solo a pensarci, ho sempre analizzato la logica per poi farmeli da solo (si fa molto prima)..
Magari ne ho anche uno già fatto IW solo che è un bel pezzo che non entro, devo controllare..

Antiope Eales

Grazie, si infatti è ciò che mi ha anche consigliato Paol. Ma niente...
Forse ho trovato un altro script...ancora lo devo provare, vi faccio sapere.

Absynth

nel primo script c'è questo pezzo in cima quasi all'inizio dopo la valanga di commenti


// Normally I put in the name of the animation I am holding for, if you want the script
//  to use any animation in the inventory change this to ANIMATION = "";
string      ANIMATION       =  "";
//  Do I need to sync anything with another script?
integer     sync            =   FALSE;

prova a mettere dentro le virgolette in ANIMATION = il nome esatto dell'animazione contenuta assieme allo script (maiuscole/minuscole comprese)

e metti sync = TRUE


edit, non funzionerà mai

se sync = true allora si mette in check di ascolto su linked message per effettuare il sync se si passano dati ma:
   link_message(integer link, integer comchan, string sData, key id)
    {
        if(comchan == coms)
        {
                function2();
        }
    }
lo script ha solo un caso in ascolto, e se si verifica lancia function2() che è vuota.

//this is the function that is performed when the above mentioned 'syncresponce'' message  defined above.  is heard by a linked poseball.
function2()
{
       //put a function in here, commonly I use this area to put in but you can put inanything        
       //you like. Simply uncomment the lines below to do so.
       //stopAnims();
       //ANIMATION = "name of second animation here";
       //llStartAnimation(ANIMATION);
}

prova a decommentare le ultime 3 righe di codice lì specificando l'altra animazione da sincronizzare in llStartAnimation

Antiope Eales

Allora, continuano a non funzionare sia nel caso in cui uso i primi script (che ho postato)e inserisco due animazioni:una di attesa e una di azione e ne inserisco i nomi nei campi dello script che gli competono.
Ho provato anche i due script trovati da Neu ma appena un av si siede spuntano questi errori:
1° palla:
Object: Could not find animation ''
(Sebbene l'abbia inserita all'interno)
2° palla:
Object: Script trying to stop animations but PERMISSION_TRIGGER_ANIMATION permission not set

A questo punto penso che sia proprio io a sbagliare...anche se non so in cosa visto che il metodo di adattamento alle mie animazioni è molto semplice.

@Abs: la linea guida che hai descritto tu, è in effetti ciò che hanno seguito anche gli sviluppatori di questi script.

Absynth

(non ho minimamente letto niente del thread) io avevo trovato una soluzione easy

la racconto, poi nel caso se ricordo come si fa (lol) la scrivo.

0) le pallette hanno 2 stati: libera e occupata
1) ogni palletta deve capire in che stato si trova
2) ogni palletta deve essere in grado di comunicare all'altra in che stato si trova
3) le due pallette devono avere una variabile che cambia a seconda del loro stato

se A viene occupata, la variabile interna di A deve diventare +1 e poi dire alla palletta B di incrementare anche la sua di +1, stessa cosa ma -1 se torna libera
così vale anche per la palletta B, devono quindi comunicare su un canale se sono 2 oggetti separati o via llMessageLinked se sono 2 palle linkate.

Ogni volta che la variabile cambia, si verifica il suo valore e solo se è = 2 partono le animazioni.

Neuromancer

Siccome sono un cacciatore folle di script aperti... vediamo se questo che ho trovato funziona (al momento non ho possibilità di testarlo IW però).

Costruzione
--------------
Crea due prim (normalmente sfere di 0.2-0.3m) e linkale, inserisci lo script principale dentro ad una con l'animazione A ed inserisci lo script secondario nell'altro con l'animazione B.

Utilizzo
--------------
Le animazioni verranno sincronizzate ogni volta che gli avatar saliranno su entrambe le poseball, oppure può essere sincronizzato manualmente eseguendo il comando in chat /1sync (ognuno degli avatar può farlo). C'è anche un timer configurabile (nello script principale) per una sincronizzazione automatica (fissato a 2 minuti di default). la sincronizzazione automatica può essere disabilitato impostandolo a 0.

Commandi:
/1show - visualizza le poseball
/1hide - nasconde le poseball
/1sync - sincronizza le poseball

Ed ora gli script

PRINCIPALE
//d'Elle Tech Sync Poseball Script (Main) by Adelle Fitzgerald


//Licenced under Creative Commons Attribution-Share Alike 3.0 Unported - http://creativecommons.org/licenses/by-sa/3.0/


//You are free:

//    * to Share — to copy, distribute and transmit the work
//    * to Remix — to adapt the work

//Under the following conditions:

//    * Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).

//    * Share Alike — If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license.

//With the understanding that:

//    * Waiver — Any of the above conditions can be waived if you get permission from the copyright holder.
//    * Public Domain — Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license.
//    * Other Rights — In no way are any of the following rights affected by the license:
//          o Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations;
//          o The author's moral rights;
//          o Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights.
//    * Notice — For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page.

//Disclaimer

//The Commons Deed is not a license. It is simply a handy reference for understanding the Legal Code (the full license) — it is a human-readable expression of some of its key terms. Think of it as the user-friendly interface to the Legal Code beneath. This Deed itself has no legal value, and its contents do not appear in the actual license.

//Creative Commons is not a law firm and does not provide legal services. Distributing of, displaying of, or linking to this Commons Deed does not create an attorney-client relationship.



string animation;
string text = "Sit";
vector target = <-0.5,0,-0.4>;
vector rot = <0,-90,180>;
key otherAvie;
integer debug = FALSE;
integer reSyncTimer = 120; //Timer for auto-resync - set to 0 for disabled.

default
{
    on_rez(integer start_param)
    {
        llResetScript();
    }

    state_entry()
    {
        animation = llGetInventoryName(INVENTORY_ANIMATION, 0);
        llListen(1,"","","");
        llSetText(text,<1,1,1>,1);
        llSetAlpha(1.0,ALL_SIDES);
        llSitTarget(target,llEuler2Rot(rot*DEG_TO_RAD));
    }
   
    listen(integer channel, string name, key id, string message)
    {                
        if(message == "show")
        {
            llSetAlpha(1.0,ALL_SIDES);
            llSetText(text,<1,1,1>,1);
            llMessageLinked(LINK_ALL_OTHERS, 0, "show", "NULL_KEY");
        }          
        if(message == "hide")
        {
            llSetAlpha(0.0,ALL_SIDES);
            llSetText("",<1,1,1>,1);
            llMessageLinked(LINK_ALL_OTHERS, 0, "hide", "NULL_KEY");
        }
        if (id == llAvatarOnSitTarget() || id == otherAvie)
        {          
            if(message == "sync")
            {
                if (debug) llSay(0,"Re-syncing main");
                llMessageLinked(LINK_ALL_OTHERS, 0, "sync", "NULL_KEY");
                llStopAnimation(animation);
                llStartAnimation(animation);
            }
        }
           
    }

    changed(integer change)
    {
        if(change & CHANGED_LINK)
        {
            key avatar = llAvatarOnSitTarget();
            if(avatar != NULL_KEY)
            {
                llRequestPermissions(avatar,PERMISSION_TRIGGER_ANIMATION);
            }
            else
            {
                if (llGetPermissionsKey() != NULL_KEY)
                {
                    llStopAnimation(animation);
                    llResetScript();
                }
            }
        }      
    }

    run_time_permissions(integer parm)
    {
        if(parm == PERMISSION_TRIGGER_ANIMATION)
        {
            llStopAnimation("sit");
            llMessageLinked(LINK_ALL_OTHERS, 0, "sync", "NULL_KEY");
            llStartAnimation(animation);
            llSetAlpha(0.0,ALL_SIDES);
            llSetText("",<1,1,1>,1);
            llSetTimerEvent(reSyncTimer);
        }
    }
    link_message(integer int,integer num,string str,key id)
    {
        if(str == "sync")
        {
            if (debug) llSay(0,"Re-syncing main");
            llStopAnimation(animation);
            llStartAnimation(animation);
        }
        else if (str == "otherAvie")
        {
            if (debug) llSay(0,"Other Avie: " + (string)id);
            otherAvie = id;
        }
    }
    timer()
    {
        if (debug) llSay(0,"Re-syncing main");
        llStopAnimation(animation);
        llMessageLinked(LINK_ALL_OTHERS, 0, "sync", "NULL_KEY");
        llStartAnimation(animation);
    }
}


SECONDARIO
//d'Elle Tech Sync Poseball Script (Slave) by Adelle Fitzgerald


//Licenced under Creative Commons Attribution-Share Alike 3.0 Unported - http://creativecommons.org/licenses/by-sa/3.0/


//You are free:

//    * to Share — to copy, distribute and transmit the work
//    * to Remix — to adapt the work

//Under the following conditions:

//    * Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).

//    * Share Alike — If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license.

//With the understanding that:

//    * Waiver — Any of the above conditions can be waived if you get permission from the copyright holder.
//    * Public Domain — Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license.
//    * Other Rights — In no way are any of the following rights affected by the license:
//          o Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations;
//          o The author's moral rights;
//          o Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights.
//    * Notice — For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page.

//Disclaimer

//The Commons Deed is not a license. It is simply a handy reference for understanding the Legal Code (the full license) — it is a human-readable expression of some of its key terms. Think of it as the user-friendly interface to the Legal Code beneath. This Deed itself has no legal value, and its contents do not appear in the actual license.

//Creative Commons is not a law firm and does not provide legal services. Distributing of, displaying of, or linking to this Commons Deed does not create an attorney-client relationship.



string animation;
string text = "Sit";
vector target = <-0.5,0,-0.2>;
vector rot = <0,-90,180>;
integer debug = FALSE;

default
{
    on_rez(integer start_param)
    {
        llResetScript();
    }

    state_entry()
    {
        animation = llGetInventoryName(INVENTORY_ANIMATION, 0);
        llSetText(text,<1,1,1>,1);
        llSetAlpha(1.0,ALL_SIDES);
        llSitTarget(target,llEuler2Rot(rot*DEG_TO_RAD));
    }
   
    link_message(integer int,integer num,string str,key id)
    {                  
        if(str == "sync")
        {
            if (debug) llSay(0,"Re-syncing slave");
            llStopAnimation(animation);
            llStartAnimation(animation);
        }        
        if(str == "show")
        {
            llSetAlpha(1.0,ALL_SIDES);
            llSetText(text,<1,1,1>,1);
        }          
        if(str == "hide")
        {
            llSetAlpha(0.0,ALL_SIDES);
            llSetText("",<1,1,1>,1);
        }
    }

    changed(integer change)
    {
        if(change & CHANGED_LINK)
        {
            key avatar = llAvatarOnSitTarget();
            if(avatar != NULL_KEY)
            {
                llRequestPermissions(avatar,PERMISSION_TRIGGER_ANIMATION);
            }
            else
            {
                if (llGetPermissionsKey() != NULL_KEY)
                {
                    llStopAnimation(animation);
                    llResetScript();
                }
            }
        }      
    }

    run_time_permissions(integer parm)
    {
        if(parm == PERMISSION_TRIGGER_ANIMATION)
        {
            llStopAnimation("sit");
            llMessageLinked(LINK_ALL_OTHERS, 0, "otherAvie", llAvatarOnSitTarget());
            llMessageLinked(LINK_ALL_OTHERS, 0, "sync", "NULL_KEY");
            llStartAnimation(animation);
            llSetAlpha(0.0,ALL_SIDES);
            llSetText("",<1,1,1>,1);
        }
    }  
}
"Ogni volta che achievement viene tradotto come archivio un gattino muore. E nel trade di Crushridge, per la cronaca, è una strage di gattini." (cit.)

PaolOh

Prova a mettere una prima animazione immobile e a mettere quella giusta come second animation
[align=center]DON\'T PANIC[/align]
[align=center]The doctor is IN (psychiatric help 5c)[/align]

Antiope Eales

Ho provato un po' con gli script modificati seguendo gli accorgimenti di Paol ma ancora non ho risolto..appena si siede un avatar parte subito l'animazione senza aspettare che il secondo avatar si sieda sull'altra poseball.

Si Neu già avevo visto le poseball di animazoo (e sarebbero perfette) ma sfortunatamente, anche con queste ho lo stesso problema..sebbene nello script sia presente una sincronizzazione.

Non voglio super effetti di attesa, mi basta che il primo avatar aspetti l'altro (anche fermo e immobile) prima di iniziare l'animazione, e così partire insieme..
Mmm vedo un po' di studiarmi qualche funzione e così capirci di più..

 
 

Neuromancer

Di solito le poseball di coppia più "blasonate" hanno un'animazione singola in modo che l'av si animi anche se si siede da solo (di solito un balletto semplice).
Quando poi si siede anche l'altro av partono in sincro le due animazioni di coppia.

Qui una coppia di poseball free con script sincro di Animazoo (basta inserirvi le proprie animazioni a quanto pare).

https://marketplace.secondlife.com/p/Animazoo-Animations-Free-Poseballs/1270096
"Ogni volta che achievement viene tradotto come archivio un gattino muore. E nel trade di Crushridge, per la cronaca, è una strage di gattini." (cit.)

PaolOh

La storia della second animation non e' molto chiara, posso immaginare che serva nel caso si voglia usare un animazione da single quando si siede il primo avatar e eventualmente fare partire un animazione di coppia nel caso si sieda il secondo (detta cosi' sembra una cosa per sex bed.. lol)

In ogni caso penso che con un paio di prove si capisca meglio.
[align=center]DON\'T PANIC[/align]
[align=center]The doctor is IN (psychiatric help 5c)[/align]

Antiope Eales

Citazione di: 'PaolOh' pid='1692' dateline='1297598326'Uhh.. vediamo un po se riesco a interpretare correttamente il tutto a memoria senza fare delle prove.. :p


//  Avatar Placement position and rotation information:
//   X = +front / behind || Y = +Left / -Right || Z = +above / -below the object
vector      avPosition      =   <0.000,0.000,0.100>;    // CAN NOT BE ZERO_VECTOR ( <0,0,0> )
vector      avRotation      =   <0.000,0.000,0.000>;    // IN DEGREES 0-360
//
//  Avatar Camera placement position and rotation information:
//  X = +front / behind || Y = +Left / -Right || Z = +above / -below the object
//  HELPFUL NOTE: Camera Controls only initiate if script is in root prim, not child prim.
vector      eyeOffset       =   <1.000,0.000,1.000>;
vector      lookat          =   <0.000,0.000,0.100>;


queste sono le informazioni su come si deve spostare la camera e la posizione dell'avatar sulla poseball.. non dovrebbe essere necessario modificarle a meno che tu non voglia qualche effetto speciale come la visuale che si sposta (la cam che li riprende dal basso o dall'alto quando parte l'animazione)
 

//   I have text to display?
integer     TX              =   FALSE;
//  if TX == TRUE use these variables for displaying text.
string      title           =   "ANTI-POSEBALL";
vector      col             =   <1,1,1>;
float       alp             =   1.0;
//
//  Do I hide/show myself when used?
integer     SH              =   FALSE;
//  *   if SH == TRUE use these variables for show/hide options.
integer     face            =   ALL_SIDES;
float       shown           =   1.0;
float       hidden          =   0.0;


Se vuoi che le poseball abbiano scritto qualcosa sopra (un testo floating) devi mettere TX= True e mettere il titolo che vuoi, le altre variabili servono nell'ordine a cambiare il colore e la posizione della scritta e di seguito puoi scegliere se la scritta deve rimanere (sh=true) o scomparire (sh=false) quando le poseball vengono usate


//
// Normally I put in the name of the animation I am holding for, if you want the script
//  to use any animation in the inventory change this to ANIMATION = "";
string      ANIMATION       =  "";


Qui c'e' il nome delll'animazione che vuoi usare... se hai una sola animazione nella poseball puoi lasciare animation= "" (l'inventory di cui parla e' quello della poseball non quello dell'avatar.)

Ecco fino a qua c'ero, non so perchè imbecillamente ho chiesto quella cosa sull'inventory.

Citazione di: 'PaolOh' pid='1692' dateline='1297598326'//  Do I need to sync anything with another script?
integer     sync            =   FALSE;
//
//  *   if sync == TRUE use these variables for link message communications.
string      syncmessage       =    "send";    // Put a message you want this pose ball to send to a linked poseball here;
string      syncresponce       =    "receive";   // Put a message you want this pose ball to wait to receive from a linked poseball here;
integer     link            =   LINK_SET;
integer     coms            =   123456;


Allora.. se interpreto correttamente il tutto qui c'e' la parte destinata al collegamento.. se hai due poseball devi mettere uno script in ognuna, linkarle e poi settare le variabili in questo modo:

* prima poseball:
       string syncmessage = "send";
       string syncresponse = "receive";

* seconda poseball:
       string syncmessage = "receive";
       string syncresponse = "send";

Al posto di send e receive puoi usare quello che vuoi ma l'importante e' che siano invertiti.. in pratica quando un avatar sale su una poseball questa manda la stringa nella variabile syncmessage e si mette in attesa di ricevere la stringa nella variabile syncreceive.
Quando l'altro avatar sale sulla seconda poseball questa invia il messaggio e parte la sincronizzazione.


//this is the function that is performed when the above mentioned 'syncresponce'' message  defined above.  is heard by a linked poseball.
function2()
{
       //put a function in here, commonly I use this area to put in but you can put inanything        
       //you like. Simply uncomment the lines below to do so.
       //stopAnims();
       //ANIMATION = "name of second animation here";
       //llStartAnimation(ANIMATION);
}


Se interpreto bene questa parte serve per far partire eventualmente un animazione diversa quando qualcuno si siede sulla seconda poseball.. se hai una sola animazione non dovrebbe essere necessaria.

in pratica devi avere due poseball linkate con uno script e un animazione in ognuna, i due script devono avere i messaggi di send e receive invertiti e dovrebbe funzionare tutto...
spero :D


Ecco questo era proprio quello che non riuscivo a capire: come farle parlare tra di loro e a quale animazione si riferisse con "second animation". Pensavo intendesse l'animazione dell'altra poseball.
Ok appena posso sistemo e ti faccio sapere. Grazie mille Paol!!!!:D:D:D



PaolOh

Uhh.. vediamo un po se riesco a interpretare correttamente il tutto a memoria senza fare delle prove.. :p


//  Avatar Placement position and rotation information:
//   X = +front / behind || Y = +Left / -Right || Z = +above / -below the object
vector      avPosition      =   <0.000,0.000,0.100>;    // CAN NOT BE ZERO_VECTOR ( <0,0,0> )
vector      avRotation      =   <0.000,0.000,0.000>;    // IN DEGREES 0-360
//
//  Avatar Camera placement position and rotation information:
//  X = +front / behind || Y = +Left / -Right || Z = +above / -below the object
//  HELPFUL NOTE: Camera Controls only initiate if script is in root prim, not child prim.
vector      eyeOffset       =   <1.000,0.000,1.000>;
vector      lookat          =   <0.000,0.000,0.100>;


queste sono le informazioni su come si deve spostare la camera e la posizione dell'avatar sulla poseball.. non dovrebbe essere necessario modificarle a meno che tu non voglia qualche effetto speciale come la visuale che si sposta (la cam che li riprende dal basso o dall'alto quando parte l'animazione)
 

//   I have text to display?
integer     TX              =   FALSE;
//  if TX == TRUE use these variables for displaying text.
string      title           =   "ANTI-POSEBALL";
vector      col             =   <1,1,1>;
float       alp             =   1.0;
//
//  Do I hide/show myself when used?
integer     SH              =   FALSE;
//  *   if SH == TRUE use these variables for show/hide options.
integer     face            =   ALL_SIDES;
float       shown           =   1.0;
float       hidden          =   0.0;


Se vuoi che le poseball abbiano scritto qualcosa sopra (un testo floating) devi mettere TX= True e mettere il titolo che vuoi, le altre variabili servono nell'ordine a cambiare il colore e la posizione della scritta e di seguito puoi scegliere se la scritta deve rimanere (sh=true) o scomparire (sh=false) quando le poseball vengono usate


//
// Normally I put in the name of the animation I am holding for, if you want the script
//  to use any animation in the inventory change this to ANIMATION = "";
string      ANIMATION       =  "";


Qui c'e' il nome delll'animazione che vuoi usare... se hai una sola animazione nella poseball puoi lasciare animation= "" (l'inventory di cui parla e' quello della poseball non quello dell'avatar.)


//  Do I need to sync anything with another script?
integer     sync            =   FALSE;
//
//  *   if sync == TRUE use these variables for link message communications.
string      syncmessage       =    "send";    // Put a message you want this pose ball to send to a linked poseball here;
string      syncresponce       =    "receive";   // Put a message you want this pose ball to wait to receive from a linked poseball here;
integer     link            =   LINK_SET;
integer     coms            =   123456;


Allora.. se interpreto correttamente il tutto qui c'e' la parte destinata al collegamento.. se hai due poseball devi mettere uno script in ognuna, linkarle e poi settare le variabili in questo modo:

* prima poseball:
       string syncmessage = "send";
       string syncresponse = "receive";

* seconda poseball:
       string syncmessage = "receive";
       string syncresponse = "send";

Al posto di send e receive puoi usare quello che vuoi ma l'importante e' che siano invertiti.. in pratica quando un avatar sale su una poseball questa manda la stringa nella variabile syncmessage e si mette in attesa di ricevere la stringa nella variabile syncreceive.
Quando l'altro avatar sale sulla seconda poseball questa invia il messaggio e parte la sincronizzazione.


//this is the function that is performed when the above mentioned 'syncresponce'' message  defined above.  is heard by a linked poseball.
function2()
{
       //put a function in here, commonly I use this area to put in but you can put inanything        
       //you like. Simply uncomment the lines below to do so.
       //stopAnims();
       //ANIMATION = "name of second animation here";
       //llStartAnimation(ANIMATION);
}


Se interpreto bene questa parte serve per far partire eventualmente un animazione diversa quando qualcuno si siede sulla seconda poseball.. se hai una sola animazione non dovrebbe essere necessaria.

in pratica devi avere due poseball linkate con uno script e un animazione in ognuna, i due script devono avere i messaggi di send e receive invertiti e dovrebbe funzionare tutto...
spero :D
[align=center]DON\'T PANIC[/align]
[align=center]The doctor is IN (psychiatric help 5c)[/align]

Antiope Eales

Allora ho un problema:

Ho creato due animazioni diverse che dovono essere eseguite insieme su due poseball ognuna per ogni avatar.
Hanno lo stesso numero di frame e stessa velocità.
Ho trovato questo script, che dovrebbe aiutarmi:


//  --~<[[ DemoniX DesignZ Inc. ]]>~-- ANTI-POSEBALL:
//  Created: 12/16/2007
//  Modified: 01/22/2008 to add in descriptions for how to sync pose balls, and added in the
//  Animation Check feature. Also corrected a minor syntex error.
//  Scripted By: Noble Barnes of DemoniX DesignZ
//  So here goes, after reviewing several pose scripts and seeing that not one in particular
//  was actually able to do everything I needed it to do, so I went ahead and created this.
//  this is released under free trade, do with it as you wish, I do however ask that you respect the following terms
//  1.) If you use this code please allow it to be atleast mod/copy/no trans
//  2.) Please leave this header intact.
//  3.) If you use this script and like it, donate 1L$ to Noble Barnes.
//  4.) You can use this script to sell your items, but don't sell this script please.
//  5.) Don't expect any technical assistance with this script.
//  6.) This is released 'as is', it works just fine, read the headings they tell you what to do.
//  7.) Don't IM me asking for help with this script. its FREEWARE for that reason, no support included, I will do a custom version if you need one though.
//
//  Lockmeister AO compatible
//  At time of writing this script is able to override all known Animation Overriders.
//  
//  Avatar Placement position and rotation information:
//   X = +front / behind || Y = +Left / -Right || Z = +above / -below the object
vector      avPosition      =   <0.000,0.000,0.100>;    // CAN NOT BE ZERO_VECTOR ( <0,0,0> )
vector      avRotation      =   <0.000,0.000,0.000>;    // IN DEGREES 0-360
//
//  Avatar Camera placement position and rotation information:
//  X = +front / behind || Y = +Left / -Right || Z = +above / -below the object
//  HELPFUL NOTE: Camera Controls only initiate if script is in root prim, not child prim.
vector      eyeOffset       =   <1.000,0.000,1.000>;
vector      lookat          =   <0.000,0.000,0.100>;
//
//   I have text to display?
integer     TX              =   FALSE;
//  if TX == TRUE use these variables for displaying text.
string      title           =   "ANTI-POSEBALL";
vector      col             =   <1,1,1>;
float       alp             =   1.0;
//
//  Do I hide/show myself when used?
integer     SH              =   FALSE;
//  *   if SH == TRUE use these variables for show/hide options.
integer     face            =   ALL_SIDES;
float       shown           =   1.0;
float       hidden          =   0.0;
//
// Normally I put in the name of the animation I am holding for, if you want the script
//  to use any animation in the inventory change this to ANIMATION = "";
string      ANIMATION       =  "";
//  Do I need to sync anything with another script?
integer     sync            =   FALSE;
//
//  *   if sync == TRUE use these variables for link message communications.
string      syncmessage       =    "send";    // Put a message you want this pose ball to send to a linked poseball here;
string      syncresponce       =    "receive";   // Put a message you want this pose ball to wait to receive from a linked poseball here;
integer     link            =   LINK_SET;
integer     coms            =   123456;

//this is the function that sends the above mentioned 'syncmessage''= to the poseball defined by integer link above. with the user is of the avatar sitting on me;
function1(key sitter)
{
       llMessageLinked(link,coms,syncmessage,sitter);
}

//this is the function that is performed when the above mentioned 'syncresponce'' message  defined above.  is heard by a linked poseball.
function2()
{
       //put a function in here, commonly I use this area to put in but you can put inanything        
       //you like. Simply uncomment the lines below to do so.
       //stopAnims();
       //ANIMATION = "name of second animation here";
       //llStartAnimation(ANIMATION);
}

//

//***********************************************************************
//  Variables adjusted within script below:
integer     is_sitting;
key         sitter;
//
//
//
//DO NOT MAKE CHANGES TO THE AREA BELOW THIS LINE UNLESS YOU UNDERSTAND INTERMEIDATE TO ADVANCED LEVEL SCRIPTING.
show()
{
    is_sitting  = FALSE;
    if ( TX )   {   llSetText(title, col ,alp);                     }
    if ( SH )   {   llSetAlpha(shown, face);                        }
    if ( sync ) {   llMessageLinked(link,coms,"empty",NULL_KEY);    }
}

hide()
{
    is_sitting = TRUE;
    if ( TX )   {   llSetText("", col ,alp);                        }
    if ( SH )   {   llSetAlpha(hidden, face);                       }
    if ( sync ) {   llMessageLinked(link,coms,"sat_on",NULL_KEY);   }
}

stopAnims()
{
    integer i;
    list anims = llGetAnimationList(llGetPermissionsKey());            
    for ( i = 0 ; i    {
        llStopAnimation(llList2Key(anims, i));
    }    
}


default
{
    state_entry()
    {
        llSitTarget(avPosition, llEuler2Rot(avRotation * DEG_TO_RAD));
        llUnSit(llAvatarOnSitTarget() );
        llSetCameraEyeOffset(eyeOffset);    
        llSetCameraAtOffset(lookat);
        if(sync == FALSE)
        {
            //ADDED THIS TEST CHECK TO VERIFY THERE IS AN ANIMATION PRESENT
            integer test = llGetInventoryNumber(INVENTORY_ANIMATION);
            if(test != 0)
            {
                 ANIMATION = llGetInventoryName(INVENTORY_ANIMATION,0);
                 show();
            }
            else
            {
                 llOwnerSay("Unable to locate any Animation in my Inventory, Please check that an Animation does exist within my Inventory");
            }
        }
    }
   
    changed(integer change)
    {
        if(change & CHANGED_INVENTORY)
        {
            llResetScript();
        }
       
        if(change & CHANGED_LINK)
        {
            key av = llAvatarOnSitTarget();
           
            if(av != NULL_KEY)
            {
                sitter  =   av;
                llRequestPermissions(av,PERMISSION_TRIGGER_ANIMATION);
            }
           
            else
            {
                if((llGetPermissions() & PERMISSION_TRIGGER_ANIMATION) && is_sitting)
                {
                    show();
                    stopAnims();
                    llSay(-8888,(string)sitter+"booton");
                }
            }
        }
    }
   
    run_time_permissions(integer perm)
    {
        if(perm & PERMISSION_TRIGGER_ANIMATION)
        {
            hide();
            function1(llAvatarOnSitTarget());
            llSay(-8888,(string)sitter+"bootoff");
            llSleep(0.250);
            stopAnims();
            llSleep(0.125);
            llStartAnimation(ANIMATION);
        }
    }
   
    link_message(integer link, integer comchan, string sData, key id)
    {
        if(comchan == coms)
        {
                function2();
        }
    }

    on_rez(integer start_param)
    {
        llResetScript();
    }
}


Allora non capisco bene come modificare lo script per l'una e per l'altra poseball con l'animazione diversa. Per quanto ho capito prende direttamente le animazioni dall'inventario e le esegue se la seconda poseball manda un messaggio di ricezione alla prima.
Quindi non bisogna inserire all'interno della poseball l'animazione?
Gli dovrei inserire anche una funzione lllisten nella seconda poseball?
Le poseball vanno linkate?
Sono quasi totalmente ignorante in ambito di script.