Script hud et objet

Répondre
Partager Rechercher
Bonjour !

Je cherche à faire communiquer un hud et un script dans un objet, ça paraît plus simple à dire qu'à faire, c'est pourquoi j'aimerais comprendre où est mon erreur et apprendre comment y parvenir !

Dans l'objet mon script est :

-------------------------------

integer iON;
integer channel = 1976;

default
{
state_entry()
{
llParticleSystem([]);
llListen(channel, "1",NULL_KEY, "iON");
}
listen( integer channel, string name, key id, string message )
{

if ( message == "iON" )
iON=TRUE;
else if ( message == "iOf" )
iON=FALSE;
}




touch_start(integer total_number)
{
iON = !iON;
if (iON)
{
llParticleSystem(
[
PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE,
PSYS_SRC_BURST_RADIUS,1,
PSYS_SRC_ANGLE_BEGIN,0,
PSYS_SRC_ANGLE_END,0,
PSYS_SRC_TARGET_KEY,llGetKey(),
PSYS_PART_START_COLOR,<0.500000,1.000000,1.000000>,
PSYS_PART_END_COLOR,<1.000000,1.000000,1.000000>,
PSYS_PART_START_ALPHA,1,
PSYS_PART_END_ALPHA,1,
PSYS_PART_START_GLOW,0.7,
PSYS_PART_END_GLOW,0,
PSYS_PART_BLEND_FUNC_SOURCE,PSYS_PART_BF_SOURCE_ALPHA,
PSYS_PART_BLEND_FUNC_DEST,PSYS_PART_BF_ONE,
PSYS_PART_START_SCALE,<0.100000,0.100000,0.000000>,
PSYS_PART_END_SCALE,<0.100000,0.100000,0.000000>,
PSYS_SRC_TEXTURE,"ad90ac58-6e23-afbc-1f4f-6adbfd78b5b5",
PSYS_SRC_MAX_AGE,0,
PSYS_PART_MAX_AGE,1.2,
PSYS_SRC_BURST_RATE,0,
PSYS_SRC_BURST_PART_COUNT,2,
PSYS_SRC_ACCEL,<-0.100000,0.000000,3.100000>,
PSYS_SRC_OMEGA,<0.000000,0.000000,-0.300000>,
PSYS_SRC_BURST_SPEED_MIN,0,
PSYS_SRC_BURST_SPEED_MAX,0,
PSYS_PART_FLAGS,
0 |
PSYS_PART_BOUNCE_MASK |
PSYS_PART_EMISSIVE_MASK |
PSYS_PART_FOLLOW_VELOCITY_MASK |
PSYS_PART_WIND_MASK
]);
}
else
{
llParticleSystem([]);
}

}

}

-----------------------------


et le script du bouton du hud est pour l'instant comme ceci mais rien ne fonctionne :/

---------------------------
integer channel = 1976;

integer iON;
default
{
state_entry()
{


}


touch_start(integer total_number)
{
llSay (1976, "iON");

}

}


--------------------

Merci pour vos réponses !!!
hello....un peu confus ton truc, mais voilà....dans le bouton du HUD...



integer canal;

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

state_entry()
{
canal = (integer)("0xA" + llGetSubString((string)llGetOwner(), 0,6 ));
}

touch_start(integer total_number)
{
llSay (canal, "iON");
}
}


//////////

et dans le prim le script suivant.....si tu cliques sur le bouton de hud, ça envoie le message "iON" au prim....ce qui declenche et arrête le jeu de particules sur clic du prim....(en mettant l' integer iON sur TRUE)
Je presume qu'il y a un bouton qui envoie "iOFF" ailleurs ds le hud et qui bloque le declenchement des particules dans le prim....(iON FALSE)

Dans ton script, le script n 'ecoutait que le message "iON"....ce qui met l' integer iON sur TRUE....mais quand tu cliques....le TRUE se transforme en FALSE (iON = !iON)....et donc les particules ne partent jamais.....

petit detail, entre HUD et Objets, on utilise généralement des canaux negatifs et de preference uniques et personnels pour eviter parfois des interferences avec d' autres HUD.....

il faut donc que le script recepteur ressemble à ça....


integer iON;
integer canal;
integer ecoute;
integer touche;

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

state_entry()
{
llParticleSystem([]);
touche = FALSE;
canal = (integer)("0xA" + llGetSubString((string)llGetOwner(), 0,6 ));
ecoute = llListen(canal, "",NULL_KEY, "");
}

listen( integer channel, string name, key id, string message )
{
if ( message == "iON" )
touche = TRUE;
else if ( message == "iOf" )
touche = FALSE;
}

touch_start(integer total_number)
{
if(touche == TRUE)
{
if (!iON)
{
llParticleSystem([
PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE,
PSYS_SRC_BURST_RADIUS,1,
PSYS_SRC_ANGLE_BEGIN,0,
PSYS_SRC_ANGLE_END,0,
PSYS_SRC_TARGET_KEY,llGetKey(),
PSYS_PART_START_COLOR,<0.500000,1.000000,1.000000>,
PSYS_PART_END_COLOR,<1.000000,1.000000,1.000000>,
PSYS_PART_START_ALPHA,1,
PSYS_PART_END_ALPHA,1,
PSYS_PART_START_GLOW,0.7,
PSYS_PART_END_GLOW,0,
PSYS_PART_BLEND_FUNC_SOURCE,PSYS_PART_BF_SOURCE_ALPHA,
PSYS_PART_BLEND_FUNC_DEST,PSYS_PART_BF_ONE,
PSYS_PART_START_SCALE,<0.100000,0.100000,0.000000>,
PSYS_PART_END_SCALE,<0.100000,0.100000,0.000000>,
PSYS_SRC_TEXTURE,"ad90ac58-6e23-afbc-1f4f-6adbfd78b5b5",
PSYS_SRC_MAX_AGE,0,
PSYS_PART_MAX_AGE,1.2,
PSYS_SRC_BURST_RATE,0,
PSYS_SRC_BURST_PART_COUNT,2,
PSYS_SRC_ACCEL,<-0.100000,0.000000,3.100000>,
PSYS_SRC_OMEGA,<0.000000,0.000000,-0.300000>,
PSYS_SRC_BURST_SPEED_MIN,0,
PSYS_SRC_BURST_SPEED_MAX,0,
PSYS_PART_FLAGS,
0 |
PSYS_PART_BOUNCE_MASK |
PSYS_PART_EMISSIVE_MASK |
PSYS_PART_FOLLOW_VELOCITY_MASK |
PSYS_PART_WIND_MASK
]);
}

else
{
llParticleSystem([]);
}
iON = !iON;
}

else
{}
}
}
re
Bonjour MenthalOH,

Merci de m'aider !

Je sais... j'ai essayé plein de choses et n'ai pas forcément gommé le superflu donc il peut subsister une erreur, pas de bouton iOF prevu en fait, je voulais sur qu'il listen ce fameux iON pour allumer et qu'en recliquant ça les stoppe, mais je viens de tester avec tes modifs , mais ça ne fonctionne pas plus :/

En fait je voudrait que le hud commande le systeme de particules de l'objet comme un interrupteur donc, un seul bouton pour celui ci , mais bon et après il y'a 5 autres boutons mais pour commander d'autres actions que je suis en train de bidouiller.

Pas evident !
mon truc marchait, il fallait clic le prim contenant les particules après avoir cliqué le bouton ON du HUD....mais maintenant, c 'est encore plus simple...

dans le bouton du HUD, ça...


integer onoff;
integer canal;

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

state_entry()
{
canal = (integer)("0xA" + llGetSubString((string)llGetOwner(), 0,6 ));
}

touch_start(integer total_number)
{
if(!onoff)
{
llSay (canal, "iON");
}
else
{
llSay (canal, "iOFF");
}
onoff =!onoff;
}
}





et dans l' autre prim, ça...




integer canal;
integer ecoute;

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

state_entry()
{
llParticleSystem([]);
canal = (integer)("0xA" + llGetSubString((string)llGetOwner(), 0,6 ));
ecoute = llListen(canal, "",NULL_KEY, "");
}

listen( integer channel, string name, key id, string message )
{
if ( message == "iON" )
{
llParticleSystem([
PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE,
PSYS_SRC_BURST_RADIUS,1,
PSYS_SRC_ANGLE_BEGIN,0,
PSYS_SRC_ANGLE_END,0,
PSYS_SRC_TARGET_KEY,llGetKey(),
PSYS_PART_START_COLOR,<0.500000,1.000000,1.000000>,
PSYS_PART_END_COLOR,<1.000000,1.000000,1.000000>,
PSYS_PART_START_ALPHA,1,
PSYS_PART_END_ALPHA,1,
PSYS_PART_START_GLOW,0.7,
PSYS_PART_END_GLOW,0,
PSYS_PART_BLEND_FUNC_SOURCE,PSYS_PART_BF_SOURCE_ALPHA,
PSYS_PART_BLEND_FUNC_DEST,PSYS_PART_BF_ONE,
PSYS_PART_START_SCALE,<0.100000,0.100000,0.000000>,
PSYS_PART_END_SCALE,<0.100000,0.100000,0.000000>,
PSYS_SRC_TEXTURE,"ad90ac58-6e23-afbc-1f4f-6adbfd78b5b5",
PSYS_SRC_MAX_AGE,0,
PSYS_PART_MAX_AGE,1.2,
PSYS_SRC_BURST_RATE,0,
PSYS_SRC_BURST_PART_COUNT,2,
PSYS_SRC_ACCEL,<-0.100000,0.000000,3.100000>,
PSYS_SRC_OMEGA,<0.000000,0.000000,-0.300000>,
PSYS_SRC_BURST_SPEED_MIN,0,
PSYS_SRC_BURST_SPEED_MAX,0,
PSYS_PART_FLAGS,
0 |
PSYS_PART_BOUNCE_MASK |
PSYS_PART_EMISSIVE_MASK |
PSYS_PART_FOLLOW_VELOCITY_MASK |
PSYS_PART_WIND_MASK
]);
}
else if ( message == "iOFF" )
{
llParticleSystem([]);
}
}
}
rere
rere MenthalOH,

Ok ça fonctionne c'est génial, merci beaucoup ! J'aimerais aussi comprendre un peu, peux tu commenter un peu le code, stp ? ainsi ça me permettra que je continue les autres boutons !!! Merci beaucoup pour ton aide !!
integer onoff;
integer canal;

default
{
on_rez(integer start_param)
{
llResetScript(); //reset du script à chaque rezz....des fois que le proprio change entre deux rez
}

state_entry()
{
canal = (integer)("0xA" + llGetSubString((string)llGetOwner(), 0,6 ));//le script determine un entier negatif calculé d' après la key du proprio.....pas d' interference possible avec d' autres HUD identiques
}

touch_start(integer total_number)
{
if(!onoff)//si pas onoff....le bouton envoie le message iON...
{
llSay (canal, "iON");
}
else//sinon, envoi du message iOFF
{
llSay (canal, "iOFF");
}
onoff =!onoff;//la valeur change à chaque clic entre 0 et 1 FALSE et TRUE....
}
}

//////////////////////////////////////////////
////////////////////////////////////////////


integer canal;
integer ecoute;

default
{
on_rez(integer start_param)
{
llResetScript(); //redemarrage du script à chaque rez si jamais le proprio change
}

state_entry()
{
llParticleSystem([]);
canal = (integer)("0xA" + llGetSubString((string)llGetOwner(), 0,6 ));//integer negatif à partir de la key du proprio (donc le même que le bouton du HUD)
ecoute = llListen(canal, "",NULL_KEY, "");//ouverture de l' ecoute sur ce canal
}

listen( integer channel, string name, key id, string message )//qlq chose parle sur ce canal...
{
if ( message == "iON" )//si le message est "iOn"...les particules particulisent
{
llParticleSystem([
PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE,
PSYS_SRC_BURST_RADIUS,1,
PSYS_SRC_ANGLE_BEGIN,0,
PSYS_SRC_ANGLE_END,0,
PSYS_SRC_TARGET_KEY,llGetKey(),
PSYS_PART_START_COLOR,<0.500000,1.000000,1.000000>,
PSYS_PART_END_COLOR,<1.000000,1.000000,1.000000>,
PSYS_PART_START_ALPHA,1,
PSYS_PART_END_ALPHA,1,
PSYS_PART_START_GLOW,0.7,
PSYS_PART_END_GLOW,0,
PSYS_PART_BLEND_FUNC_SOURCE,PSYS_PART_BF_SOURCE_ALPHA,
PSYS_PART_BLEND_FUNC_DEST,PSYS_PART_BF_ONE,
PSYS_PART_START_SCALE,<0.100000,0.100000,0.000000>,
PSYS_PART_END_SCALE,<0.100000,0.100000,0.000000>,
PSYS_SRC_TEXTURE,"ad90ac58-6e23-afbc-1f4f-6adbfd78b5b5",
PSYS_SRC_MAX_AGE,0,
PSYS_PART_MAX_AGE,1.2,
PSYS_SRC_BURST_RATE,0,
PSYS_SRC_BURST_PART_COUNT,2,
PSYS_SRC_ACCEL,<-0.100000,0.000000,3.100000>,
PSYS_SRC_OMEGA,<0.000000,0.000000,-0.300000>,
PSYS_SRC_BURST_SPEED_MIN,0,
PSYS_SRC_BURST_SPEED_MAX,0,
PSYS_PART_FLAGS,
0 |
PSYS_PART_BOUNCE_MASK |
PSYS_PART_EMISSIVE_MASK |
PSYS_PART_FOLLOW_VELOCITY_MASK |
PSYS_PART_WIND_MASK
]);
}
else if ( message == "iOFF" )//mais si le message est "iOFF", les particules se rangent....
{
llParticleSystem([]);
}
}
}
Répondre

Connectés sur ce fil

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