Déclencher un script une et une seule fois

Répondre
Partager Rechercher
Je cherche un moyen pas compliqué et facilement réutilisable pour empêcher qu'un script se déclenche plus d'une fois.

j'avais pensé à =>

if (a==0)

{

//contenu du script...


int a=1;

}


forcément, ça se compile pas, et quand je déclare la variable avant le "if", ça fait pas ce que je cherche, ce qui est logique. Quelqu'un aurait une solution simple ?

Reprendre les scripts à la base ?

------>
Code PHP:

void main()
{
objet oKelserapportelescript GetNearestObjectByTag("exemple");
int nAlpha GetLocalInt(oKelserapportelescript,"variableexemple");
if (
nAlpha == 0)
 {
 
//*contenu du script...*//
 
SetLocalInt(oKelserapportelescript,"variableexemple",TRUE);
 }

C'est la base de base, ça... TU peux l'optimiser encore, j'ai vraiment détaillé.
Heuuu visiblement, c'est pas ce que je demande (si j'ai bien compris )


exemple tout bête: je veux qu'un son se déclence à l'arrivée d'un PJ sur un trigger. ça pas de problème mais je veux qu'il ne se déclenche qu'une et une seule fois.

Sur le même principe: un PNJ dit un truc dès qu'il voit un PJ, mais là aussi, une seule et unique fois. Il ne recommence pas à chaque fois qu'il voit revenir un PJ.
pour le trig , tu le destroy apres la premiere fois..
plus jamais il se declenchera

pour le deuxieme cas , pj+pnj , il te faut une variable locale sur le pj qui est à 0 au debut et ke tu met à 1 la deuxieme fois
pour ca tu prends comme base , ce qu'a mis ange au dessus
objet oKelserapportelescript = GetNearestObjectByTag("exemple");
sauf que a la place de ca .. soit tu met le tag de ton pnj , si tu veux stocker la variable sur lui , soit tu catch ton joueur si c'est sur lui que tu veux faire le truc..

J'ai eté clair ?? ^^ non ??
c'est normal chuis fatigué
Oui, c'est clair^^
ça commence à venir

mais concrètement, ça passe toujours pas... Ange, tu pourrais me montrer ce que ça donne ton scripts pour les deux exemples du trigger et du pnj steuplait ??

merci beaucoup


(ps: c'est quoi la commande pour detruire le trigger après utilisation ?)
Ok je te donnes cinq minutes de mon temps. Lol

Cas n°1 : tu veux qu'un son apparaisse quand un PJ entre sur un trigger. Oki. La solution de Jerry à cet inconvénient qu'il ne se déclenchera que pour le premier joueur... Et les autres ? La version est plus compliquée. Tu mets ce script dans le OnEnter.
Code PHP:

//sc_soundtrig_oe By Ange Musicien

void main()
{
object oObject GetEnteringObject();
// definit l'objet entrant
int nIsEnter GetLocalInt(oObject,"IsEnter");
// Variable disant si oui ou non, il est deja entre
if( GetIsPC(oObject) && nIsEnter==0)
// Verifie qu'il n'est jamais entre et que l'objet est un PC
 
{
 
PlaySound("SoundUntel");
 
// Joue le son
 
nIsEnter++;
 
// CHange la variable
 
SetLocalInt(oObject,"IsEnter",nIsEnter);
 
// Enregistre la variable
 
}

Cas n°2 : tu mets ce script dans le OnUserDefined du PNJ. Tu débloques la ligne OnPerception du OnSpawn du PNJ (tu enlèves les deux barres devant).
Code PHP:

// sc_pnj_dl By Ange Musicien

int nAP GetUserDefinedEventNumber();
// Definit les Options du OnSpawn Debloquees
void main()
{
switch(
nAP)
// appelle les options
 
{
 case 
1002 :
 
// Appelle OnPercieve
 
object oVu GetLastPerceived();
 
// C'est le dernier objet vu.
 
int nDial GetLocalInt(oVu,"dialogue1");
 
// Definit si oui ou non le dialogue a deja eu lieu
 
if( GetIsPC(oVu) && GetLastPerceptionSeen() && nDial==)
 
// uniquement si l'objet vu est un PC,
 // et si le dialogue n'a pas eu lieu
 // GetLast PerceptionSeen evite au PNJ de dire
 // deux fois sa phrase, une fois pour l'ouie,
 // une fois pour la vue.
  
{
  
ActionSpeakString("Vous habitez chez vos harengs ? C'est Saur dide.");
  
// Dit une phrase.
  
nDial++;
  
// Change la variable.
  
SetLocalInt(oVu,"dialogue1",nDial);
  
// Enregistre la variable
  
}
 break;
 
// arrete le switch et fait reprendre les habitudes du PNJ
 
}

Si tu veux des explications, ce sera demain

PS : la commande de destruction, pas utile ici, est DestroyObject().
Me semble que ca sert a rien de decommenter le OP dans le OS si c'est pour mettre le script dans le OS, enfin vu le script je suis sur que t'as voulu dire OnUserDefined
Bon en tant que cas desespéré je butte sur un détail insignifiant^^

en théorie ça me paraissait vraiment pas important, mais en pratique paff ça marche po :/


en gros, j'ai fait un trigger et j'ai mis dans le OnEnter:

void main

{

object Oson= GetObjectByTag("TagdeMonSonPerso")

PlaySound("Oson");

}

mais rien ne se passe :/

où c'est que ça coince ?
rhoo oui j'ai oublié le point virgule lol^^ (et les () de void main)



void main ()

{

object oSon= GetObjectByTag("TagdeMonSonPerso");

PlaySound("oSon");

}
pour ca :

Code PHP:

// Play sSoundName
// - sSoundName: TBD - SS
// This will play a mono sound from the location of the object running the command.
void PlaySound(string sSoundName
autrement PlaySound demande un nom, pas un objet.

ensuite, mettre un objet entre guillemets, ca risque pas de marcher
enfin,
Citation :
pourquoi ça marche pas
pour moi ca veut dire que ca compile mais qu'il se passe rien ingame, donc soit un peu plus clair ...

alors ce qu'il faut faire c'est :
Code PHP:

void main ()
{
object oSonGetObjectByTag("TagdeMonSonPerso");
SoundObjectPlay(oSon);

Ok tu me mets ça dans le OnEnter du Trigger :

Code PHP:

//sc_soundtrig_oe By Ange Musicien

void main()
{
object oObject GetEnteringObject();
int nIsEnter GetLocalInt(oObject,"IsEnter");
if( 
GetIsPC(oObject) && nIsEnter==0)
 {
 
object oSon GetNearestObjectByTag("FireLarge2");
 
SoundObjectPlay(oSon);
 
nIsEnter++;
 
SetLocalInt(oObject,"IsEnter",nIsEnter);
 }

et tu places un son FireLarge2 sur ton trigger.

ET tu testes en mode joueur.
heuu dans ce cas, si faut poser le son sur le trigger, c'est pas plus simple de poser le FireLarge tout seul avec un faible rayon et de cocher "une seule fois" lol ?


Le but, c'est surtout de déclencher un son posé "ailleurs", genre les PJ arrivent dans un couloir et entendent nu truc dans la salle au fond

(PS: t'arrives pas à faire marcher le script de Reyan ?)
Mais non triple buse !!! Oh là là...
Tu poses le son où tu veux ! Et si tu mets : ne se déclencher qu'une fois, il se déclenchera au premier PJ, mais pas aux autres... Donc fais ce que je te dis, utilise ce script et arrête de protester. Et lis mes posts e entiers, ça répondra à certaines questions.
euh, cocher jouer une fois, c'est pas vraiment ne jouer qu'une seule fois, enfin, on peut le rejouer après quoi c'est juste l'opposé à jouer en boucle une fois qu'on déclenche le son, il est joué une fois, mais on peut le déclencher autant de fois qu'on veut, donc en effet, dans les propriétés, il faut cocher "jouer" une fois, sinon a partir du moment où un PJ a lancé le truc, ba ca continu ... et c'est pas l'effet voulu si ? (enfin, je pense .. me plante p-e aussi :lol: )

(et le "script" que je proposais, il est dedans
regarde mieux ! *voix dumacaque dans le roi lion*)
Répondre

Connectés sur ce fil

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