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.