Bonjour à tous
Je vous lis depuis longtemps, et m'inspire de vos scripts pour créer plein de choses passionnantes. Déjà, merci pour votre inventivité!
Mon souci aujourd'hui? J'ai build une boite à musique qui s'ouvre et je voudrais qu'avec un seul clic, la musique se déclenche, puis la boite s'ouvre. Je sais que le truc réside dans Linkmessage, j'ai essayé plein de trucs, mais si la musique se lance bien, la prim couvercle, elle, ne s'ouvre pas (les prims sont liées, hein).
Pour des raisons de temps de load de la musique (5 sec), j'aimerais que celle-ci soit lancée avant l'ouverture; que le script "attende" (sleep?) 5 sec avant de déclencher l'ouverture de la prim couvercle. Quelqu'un peut-il m'aider à ajouter la fonction link message à mes scripts svp?
Voici le script de la musique, placé dans l'objet qui la joue:
list invlist;
integer tottrack;
integer i;
integer play = FALSE;
sound()
{
llSetTimerEvent(9.5);
tottrack = llGetInventoryNumber(INVENTORY_SOUND);
float length = tottrack*9.5;
llSay(0, (string)length);
llPreloadSound(llGetInventoryName(INVENTORY_SOUND, 0));
i=0;
}
default
{
touch_start(integer total_number)
{
if (play) {
sound();
} else {
llSetTimerEvent(0.0);
}
play = !play;
}
timer()
{
llTriggerSound(llGetInventoryName(INVENTORY_SOUND, i), .6);
i++;
if(i+1 < tottrack )
{
llPreloadSound(llGetInventoryName(INVENTORY_SOUND, i+1));
}
if(i == tottrack )
{
llResetScript();
}
}
}
et voici le script d'ouverture de la porte, placé dans le couvercle:
string NOM = "Oeuf";
list STATES = [
<0.167605, 0.002892, -0.002103>,
<-0.028152, -0.702322, 0.056292, 0.709071>,
<0.167755, 0.019485, 0.136174>,
<-0.025530, 0.993866, -0.057530, 0.090929>
];
integer i_step = 1;
integer i_nbr_prims = 1;
integer i_nbr_states;
list l_num_links;
init(){
i_nbr_states = llGetListLength(STATES) / i_nbr_prims / 2;
integer n = llGetNumberOfPrims();
integer i;
for(i = 2; i <= n; ++i) {
string nom = llList2String(llGetObjectDetails(llGetLinkKey(i), [OBJECT_NAME]), 0);
if(nom == NOM) l_num_links += i;
}
}
animation() {
list l_params;
integer i;
integer j = i_step * i_nbr_prims * 2;
for(; i < i_nbr_prims; ++i) {
if(i) l_params += [PRIM_LINK_TARGET, llList2Integer(l_num_links, i)];
l_params += [PRIM_POS_LOCAL, llList2Vector(STATES, j + i * 2), PRIM_ROT_LOCAL, llList2Rot(STATES, j + 1 + i * 2)];
}
llSetLinkPrimitiveParams(llList2Integer(l_num_links, 0), l_params);
if(++i_step == i_nbr_states) i_step = 0;
}
default
{
state_entry() {
init();
}
touch(integer total_number) {
animation();
}
}
Merci de m'avoir lue, et merci de votre aide!
|