Hello,
 
J'ai un projet en tete ... mais comme vous le savez (ou le devinerez), je debute en scriptage . (je bidouille pour le moment)
 
 
Projet:
Faire un compte a rebour (reglable dans le script), a partir d'un script d'horloge
 
 
Matieres:
 
-Script Horloge.
-Script d'affichage du nombre voulu.
-Script de compte a rebour.
-Textures 0,1,2,3,4,5,6,7,8,9
-5 prims. (le support et les 4 chiffres)
(que du reciclage me direz vous)
 
 
 
 
Script Horloge :
integer first_number = 2;
integer digits = 4;
integer mil = 1;
setTime(string time) {
    integer len = llStringLength(time);
    integer i;
    for (i = 0; i < digits; i++) {
        if (i < len) {
            integer number = (integer)(llGetSubString(time, len - 1 - i, len - 1 - i));
            llMessageLinked(first_number + i, number, "", "");
        } else {
            llMessageLinked(first_number + i, -1, "", "");
        }
    }
}
default
{
    state_entry()
    {
        llSetStatus(STATUS_PHANTOM | STATUS_BLOCK_GRAB, TRUE);
//        llListen(8877661, "timekeeper", "", "");
        llSetTimerEvent(1);
        llMessageLinked(LINK_ALL_CHILDREN, -1, "", "");
        llListen(2257,"","","");
    }
    listen(integer ch, string name, key id, string msg)
    {
        if (msg == "mil") mil = 1;
        if (msg == "std") mil = 0;
    }
    timer()
    {
        integer hh;
        integer mm;
        float time = llGetWallclock();
//        float time = llGetTimeOfDay();
        time=time + (( 9 * 60 ) * 60 ); // gmt plus 1 offset 9 hours
        if (time > 86399)
        {
            time =time - 86400;
        }
        string score;
        hh = (integer)time / 3600;
        mm = ((integer)time % 3600) / 60;
        hh = hh % 24;
        if (mil == 0 && hh > 12) {
            hh = hh - 12;
            llWhisper(2258,"PM");
        } else {
            if (mil == 0) {
                if (hh == 0) hh = 12;
                llWhisper(2258,"AM");
            } else {
                llWhisper(2258,"mil");
            }
        }
        score = (string)hh;
        if (mm < 10) {
          score = score + "0" + (string)mm;
        } else {
          score = score + (string)mm;
        }
        if (((integer)time % 2) == 0) {
            llWhisper(2259,"<1,0,0>");
        } else {
            llWhisper(2259,"<0.23,0.01,0.02>");
        }
        setTime(score);
    }
} 
 
Qui communique avec les script dans les 4 auttre prims pour leur indiquer quel textures affichées.
 
 
[]= 1prim ===> [2][1]:[4][5]
 
//
//  Digit 
//  
//  Implements one character of a digital display 
// 
 
integer FACE = 0;               //  Which face to display value on
integer value = 0;                    
display()
{
    if (value == -1)
    {
        llSetTexture("null", FACE);
    }
    if (value == 0)
    {
        llSetTexture("zero", FACE);
    }
    else if (value == 1) 
    {
        llSetTexture("one", FACE);
    }
    else if (value == 2) 
    {
        llSetTexture("two", FACE);
    }
    else if (value == 3) 
    {
        llSetTexture("three", FACE);
    }
    else if (value == 4) 
    {
        llSetTexture("four", FACE);
    }
    else if (value == 5) 
    {
        llSetTexture("five", FACE);
    }
    else if (value == 6) 
    {
        llSetTexture("six", FACE);
    }
    else if (value == 7) 
    {
        llSetTexture("seven", FACE);
    }
    else if (value == 8) 
    {
        llSetTexture("eight", FACE);
    }
    else if (value == 9) 
    {
        llSetTexture("nine", FACE);
    }
}
default
{
    state_entry()
    {
        llSetTexture("null", FACE);
        llPassTouches(TRUE); 
    }
 
    link_message(integer who, integer num, string str, key id)
    {
        integer new_value = num;
        if (new_value != value)
        {
            value = new_value;
            display();
        }
    } 
 
Et le fameux script de compte a rebour (qui lui ne fait qu'afficher le texte au dessus de la prims)
 
// ENTER YOUR DATE TO COUNTDOWN TO
integer aYear = 2012;
integer aMonth = 12; // 1 through 12
integer aDay = 21; // 1 through 31
integer aHour = 12; // 12 is noon
integer aMinute = 0; // 0 through 59
integer aSecond = 0; // 0 through 59
integer aGMToffset = -8; // -8 for the SL clock
integer DST = TRUE; // TRUE or FALSE depending on daylight savings time.
// END SETTINGS
 
// BEGIN SCRIPT
integer expires;
integer MakeUNIXTime( integer year, integer month, integer day, integer hour, integer minute, integer second, integer GMToffset, integer DST ) {
    list month_days = [ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 ];    
    integer time = ( year - 1970 ) * 31536000;
    time += ( day + llList2Integer( month_days, month - 1 ) - 1 ) * 86400;
    time += ( hour - GMToffset ) * 3600 + minute * 60 + second;
    if ( DST == TRUE ) {
        time += -3600;
    }
    if ( year > 1972 ) {
        integer past_leap_years = (integer)( ( year - 1969 ) / 4 );
        time += past_leap_years * 86400;
    }
    if ( year % 4 == 0 && month > 2 ) {
        time += 86400;
    }
    return time;
}
default 
{
    on_rez( integer sparam )
    {
        llResetScript();
    }
 
    state_entry() 
    {
        expires = MakeUNIXTime( aYear, aMonth, aDay, aHour, aMinute, aSecond, aGMToffset, DST );
        llSetTimerEvent( 1.0 );
    }
    timer() 
    {
        integer seconds = expires - llGetUnixTime();
        if( seconds > 0 ) 
        {
            integer days = seconds / 86400;
            integer hours = ( seconds - ( days * 86400 ) ) / 3600;
            integer minutes = ( seconds - ( days * 86400 ) - ( hours * 3600 ) ) / 60;
            seconds = ( seconds - ( days * 86400 ) - ( hours * 3600 ) - ( minutes * 60 ) );
            string s1 = " Days, ";
            if( days == 1 ) 
            {
                s1 = " Day, ";
            }
            string s2 = " Hours, & ";
            if ( hours == 1 ) 
            {
                s2 = " Hour, ";
            }
            string s3 = " Minutes ";
            if ( minutes == 1 ) 
            {
                s3 = " minute, ";
            }
            string s4 = " seconds ";
            if ( seconds == 1 ) 
            {
                s4 = " second ";
            }
            llSetText( (string)days + s1 + (string)hours + s2 + (string)minutes + s3 + "Left", <1.0,1.0,1.0>, 1.0 ); //no seconds version
            //llSetText( (string)days + s1 + (string)hours + s2 + (string)minutes + s3 + (string)seconds + s4 + "Left", <1.0,1.0,1.0>, 1.0 ); //with seconds
        }
        else 
        {
            state expired;
        }
    }
}
state expired 
{
    on_rez( integer sparam )
    {
        llResetScript();
    }
 
    state_entry() 
    {
        llSetText( " ", <1.0,1.0,1.0>, 1.0 );
    }
} 
 
Si vous pouviez deja m'indiquer par ou commencer ....
 
 
J'avais pensé a un script qui changerait la texture avec un delai de 1sec.
 
Exemple:
 
[0]---[2]---:---[0]---[0]
[0]---[1]---:---[5]---[9]
[0]---[1]---:---[5]---[8]
[0]---[1]---:---[5]---[7]
[0]---[1]---:---[5]---[6]
[0]---[1]---:---[5]---[5]
[0]---[1]---:---[5]---[4]
[0]---[1]---:---[5]---[3]
[0]---[1]---:---[5]---[2]
[0]---[1]---:---[5]---[1]
[0]---[1]---:---[5]---[0]
[0]---[1]---:---[4]---[9]
 
Mais laisse tomber la taille du script M.........D..........R
 
Donc je m'oriente plus vers la communication du compte a rebour vers les 4 prims
qui affichent l'heure.
Au lieu de 
llSetText( (string)days + s1 + (string)hours + s2 + (string)minutes + s3 + "Left", <1.0,1.0,1.0>, 1.0 ); //le remplacer par un moyen de communication . 
 
Mais lequel ? 
 
Merci d'avance de vos conseil.
 
PS: C'est ma façon d'apprendre 
 , je me jette dedans et ensuite j'apprend petit a petit ... ... ... 

 quand je galere pour trouver, je retien mieu.